Index: branches/5.2.x/admin/system_presets/simple/email_events_emailevents.php =================================================================== --- branches/5.2.x/admin/system_presets/simple/email_events_emailevents.php (revision 15221) +++ branches/5.2.x/admin/system_presets/simple/email_events_emailevents.php (revision 15222) @@ -1,64 +1,64 @@ <?php defined('FULL_PATH') or die('restricted access!'); // section removal $remove_sections = Array ( // 'in-portal:configemail', ); // sections shown with debug on $debug_only_sections = Array ( 'in-portal:configemail', ); // toolbar buttons $remove_buttons = Array ( // list of all email templates 'email_message_list' => Array (/*'new_item', 'edit', 'delete', 'approve', 'decline', 'frontend_mail', 'view',*/ 'export', /*'dbl-click'*/), // edit email edit - general tab // 'email_message_edit' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'), // edit email edit - settings tab // 'email_message_edit_settings' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'), ); // fields to hide $hidden_fields = Array ( /*'EventId', 'Event', 'ReplacementTags', 'AllowChangingSender', 'CustomSender', 'SenderName', 'SenderAddressType', 'SenderAddress', 'AllowChangingRecipient', - 'CustomRecipient', 'Recipients', 'Subject', 'Body', 'Headers', 'MessageType', + 'CustomRecipient', 'Recipients', 'Subject', 'HtmlBody', 'PlainTextBody', 'Headers', 'Enabled', 'FrontEndOnly', 'Module', 'Description', 'Type'*/ ); // virtual fields to hide $virtual_hidden_fields = Array ( /*'RecipientType', 'RecipientName', 'RecipientAddressType', 'RecipientAddress', 'Tag', 'Replacement', 'ReplacementTagsXML',*/ ); // fields to make required $required_fields = Array ( /*'EventId',*/ 'Event', /*'ReplacementTags', 'AllowChangingSender', 'CustomSender', 'SenderName', 'SenderAddressType', 'SenderAddress', 'AllowChangingRecipient', - 'CustomRecipient', 'Recipients',*/ 'Subject', 'Body', /*'Headers',*/ 'MessageType', + 'CustomRecipient', 'Recipients',*/ 'Subject', /*'HtmlBody', 'PlainTextBody', 'Headers',*/ /*'Enabled', 'FrontEndOnly',*/ 'Module', /*'Description',*/ 'Type' ); // virtual fields to make required $virtual_required_fields = Array ( /*'RecipientType', 'RecipientName', 'RecipientAddressType', 'RecipientAddress', 'Tag', 'Replacement', 'ReplacementTagsXML',*/ ); // tabs during editing $hide_edit_tabs = Array ( 'Default' => Array (/*'general',*/ 'settings'), ); // hide columns in grids $hide_columns = Array ( // 'Default' => Array ('EventId', 'Description', 'Event', 'Module', 'Type', 'Enabled', 'LastChanged'), // 'Emails' => Array ('EventId', 'Event', 'Subject', 'Description', 'Type', 'Enabled', 'Module', 'FrontEndOnly', 'LastChanged'), ); \ No newline at end of file Index: branches/5.2.x/core/kernel/utility/email.php =================================================================== --- branches/5.2.x/core/kernel/utility/email.php (revision 15221) +++ branches/5.2.x/core/kernel/utility/email.php (revision 15222) @@ -1,805 +1,810 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2012 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); class kEmail extends kBase { /** * Reference to class, that could send out e-mail * * @var kEmailSendingHelper * @access protected */ protected $sender = null; /** * Parameters of e-mail * * @var Array * @access protected * @see kEmail::_getCustomParams() List of possible system parameters supported */ protected $params = Array (); /** * Reference to e-mail event object, that would be used as data source * * @var kDBItem */ protected $emailEvent = null; /** * Sender name * * @var string * @access protected */ protected $fromName = ''; /** * Sender e-mail * * @var string * @access protected */ protected $fromEmail = ''; /** * Recipient name * * @var string * @access protected */ protected $toName = ''; /** * Recipient e-mail * * @var string * @access protected */ protected $toEmail = ''; /** * ID of recipient user * * @var int */ protected $recipientUserId = null; /** * List of e-mail recipients * * @var Array * @access protected */ protected $recipients = Array ( EmailEvent::RECIPIENT_TYPE_TO => Array (), EmailEvent::RECIPIENT_TYPE_CC => Array (), EmailEvent::RECIPIENT_TYPE_BCC => Array (), ); /** * Creates e-mail instance */ public function __construct() { parent::__construct(); $this->sender = $this->Application->recallObject('EmailSender'); } /** * Resets state of e-mail * * @return void * @access protected */ protected function _resetState() { $this->fromEmail = $this->fromName = ''; $this->Application->removeObject('u.email-from'); $this->recipients = Array ( EmailEvent::RECIPIENT_TYPE_TO => Array (), EmailEvent::RECIPIENT_TYPE_CC => Array (), EmailEvent::RECIPIENT_TYPE_BCC => Array (), ); $this->toEmail = $this->toEmail = ''; $this->Application->removeObject('u.email-to'); } /** * Finds e-mail event matching user data * * @param string $name * @param int $type * @return bool * @throws InvalidArgumentException * @access public */ public function findEvent($name, $type) { if ( !$name || !preg_match('/^[A-Z\.]+$/', $name) ) { throw new InvalidArgumentException('Invalid e-mail event name "<strong>' . $name . '</strong>". Only <strong>UPPERCASE characters</strong> and <strong>dots</strong> are allowed.'); } if ( $type != EmailEvent::EVENT_TYPE_ADMIN && $type != EmailEvent::EVENT_TYPE_FRONTEND ) { throw new InvalidArgumentException('Invalid e-mail event type'); } $this->emailEvent = $this->Application->recallObject('emailevents', null, Array ('skip_autoload' => true)); if ( !$this->emailEvent->isLoaded() || !$this->_sameEvent($name, $type) ) { // get event parameters by name & type $this->emailEvent->Load(Array ('Event' => $name, 'Type' => $type)); } return $this->_eventUsable(); } /** * Detects, that given event data matches currently used event * * @param string $name * @param int $type * @return bool * @access protected */ protected function _sameEvent($name, $type) { return $this->emailEvent->GetDBField('Event') == $name && $this->emailEvent->GetDBField('Type') == $type; } /** * Determines if we can use e-mail event we've found based on user data * * @return bool * @access protected */ protected function _eventUsable() { if ( !$this->emailEvent->isLoaded() || $this->emailEvent->GetDBField('Enabled') == STATUS_DISABLED ) { return false; } if ( $this->emailEvent->GetDBField('FrontEndOnly') && $this->Application->isAdmin ) { return false; } return true; } /** * Sets e-mail event params * * @param Array $params * @access public */ public function setParams($params) { $this->params = $params; } /** * Returns any custom parameters, that are passed when invoked e-mail event sending * * @return Array * @access protected */ protected function _getCustomParams() { $ret = $this->params; $send_keys = Array ('from_email', 'from_name', 'to_email', 'to_name', 'overwrite_to_email', 'language_id'); foreach ($send_keys as $send_key) { unset($ret[$send_key]); } return $ret; } /** * Sends e-mail now or puts it in queue * * @param int $recipient_user_id * @param bool $immediate_send * @return bool * @access public */ public function send($recipient_user_id = null, $immediate_send = true) { $this->recipientUserId = $recipient_user_id; $this->_resetState(); $this->_processSender(); $this->_processRecipients(); $this->_changeLanguage(false); // 1. set headers $message_headers = $this->_getHeaders(); $message_subject = isset($message_headers['Subject']) ? $message_headers['Subject'] : 'Mail message'; $this->sender->SetSubject($message_subject); foreach ($message_headers as $header_name => $header_value) { $this->sender->SetEncodedHeader($header_name, $header_value); } // 2. set body - $is_html = $this->emailEvent->GetDBField('MessageType') == 'html'; - $message_body = $this->_getMessageBody($is_html); + $html_message_body = $this->_getMessageBody(true); + $plain_message_body = $this->_getMessageBody(false); + + if ( $html_message_body === false && $plain_message_body === false ) { + trigger_error('Message template is empty (maybe after parsing).', E_USER_WARNING); - if ( $message_body === false ) { return false; } - $this->sender->CreateTextHtmlPart($message_body, $is_html); + if ( $html_message_body !== false ) { + $this->sender->CreateTextHtmlPart($html_message_body, true); + } + + if ( $plain_message_body !== false ) { + $this->sender->CreateTextHtmlPart($plain_message_body, false); + } + $this->_changeLanguage(true); // 3. set log $log_fields_hash = Array ( 'fromuser' => $this->fromName . ' (' . $this->fromEmail . ')', 'addressto' => $this->toName . ' (' . $this->toEmail . ')', 'subject' => $message_subject, 'timestamp' => TIMENOW, 'event' => $this->emailEvent->GetDBField('Event'), 'EventParams' => serialize($this->_getCustomParams()), ); $this->sender->setLogData($log_fields_hash); return $this->sender->Deliver(null, $immediate_send); } /** * Processes email sender * * @return void * @access protected */ protected function _processSender() { if ( $this->emailEvent->GetDBField('CustomSender') ) { $this->_processCustomSender(); } // update with custom data given during event execution if ( isset($this->params['from_email']) ) { $this->fromEmail = $this->params['from_email']; } if ( isset($this->params['from_name']) ) { $this->fromName = $this->params['from_name']; } // still nothing, set defaults $this->_ensureDefaultSender(); $this->sender->SetFrom($this->fromEmail, $this->fromName); } /** * Processes custom e-mail sender * * @return void * @access protected */ protected function _processCustomSender() { $address = $this->emailEvent->GetDBField('SenderAddress'); $address_type = $this->emailEvent->GetDBField('SenderAddressType'); switch ($address_type) { case EmailEvent::ADDRESS_TYPE_EMAIL: $this->fromEmail = $address; break; case EmailEvent::ADDRESS_TYPE_USER: $sql = 'SELECT FirstName, LastName, Email, PortalUserId FROM ' . TABLE_PREFIX . 'Users WHERE Username = ' . $this->Conn->qstr($address); $user_info = $this->Conn->GetRow($sql); if ( $user_info ) { // user still exists $this->fromEmail = $user_info['Email']; $this->fromName = trim($user_info['FirstName'] . ' ' . $user_info['LastName']); $user = $this->Application->recallObject('u.email-from', null, Array ('skip_autoload' => true)); /* @var $user UsersItem */ $user->Load($user_info['PortalUserId']); } break; } if ( $this->emailEvent->GetDBField('SenderName') ) { $this->fromName = $this->emailEvent->GetDBField('SenderName'); } } /** * Ensures, that sender name & e-mail are not empty * * @return void * @access protected */ protected function _ensureDefaultSender() { if ( !$this->fromEmail ) { $this->fromEmail = $this->Application->ConfigValue('DefaultEmailSender'); } if ( !$this->fromName ) { $this->fromName = strip_tags($this->Application->ConfigValue('Site_Name')); } } /** * Processes email recipients * * @return void * @access protected */ protected function _processRecipients() { $this->_collectRecipients(); $header_mapping = Array ( EmailEvent::RECIPIENT_TYPE_TO => 'To', EmailEvent::RECIPIENT_TYPE_CC => 'Cc', EmailEvent::RECIPIENT_TYPE_BCC => 'Bcc', ); $default_email = $this->Application->ConfigValue('DefaultEmailSender'); foreach ($this->recipients as $recipient_type => $recipients) { // add recipients to email $pairs = $this->_transformRecipientsIntoPairs($recipients); if ( !$pairs ) { continue; } if ( $recipient_type == EmailEvent::RECIPIENT_TYPE_TO ) { $this->toEmail = $pairs[0]['email'] ? $pairs[0]['email'] : $default_email; $this->toName = $pairs[0]['name'] ? $pairs[0]['name'] : $this->toEmail; } $header_name = $header_mapping[$recipient_type]; foreach ($pairs as $pair) { $email = $pair['email'] ? $pair['email'] : $default_email; $name = $pair['name'] ? $pair['name'] : $email; $this->sender->AddRecipient($header_name, $email, $name); } } } /** * Collects e-mail recipients from various sources * * @return void * @access protected */ protected function _collectRecipients() { $this->_addRecipientsFromXml($this->emailEvent->GetDBField('Recipients')); $this->_overwriteToRecipient(); $this->_addRecipientByUserId(); $this->_addRecipientFromParams(); if ( ($this->emailEvent->GetDBField('Type') == EmailEvent::EVENT_TYPE_ADMIN) && !$this->recipients[EmailEvent::RECIPIENT_TYPE_TO] ) { // admin email event without direct recipient -> send to admin $this->_addDefaultRecipient(); } } /** * Adds multiple recipients from an XML * * @param string $xml * @return bool * @access protected */ protected function _addRecipientsFromXml($xml) { if ( !$xml ) { return false; } $minput_helper = $this->Application->recallObject('MInputHelper'); /* @var $minput_helper MInputHelper */ // group recipients by type $records = $minput_helper->parseMInputXML($xml); foreach ($records as $record) { $this->recipients[$record['RecipientType']][] = $record; } return true; } /** * Remove all "To" recipients, when not allowed * * @return void * @access protected */ protected function _overwriteToRecipient() { $overwrite_to_email = isset($this->params['overwrite_to_email']) ? $this->params['overwrite_to_email'] : false; if ( !$this->emailEvent->GetDBField('CustomRecipient') || $overwrite_to_email ) { $this->recipients[EmailEvent::RECIPIENT_TYPE_TO] = Array (); } } /** * Update with custom data given during event execution (user_id) * * @return void * @access protected */ protected function _addRecipientByUserId() { if ( !is_numeric($this->recipientUserId) ) { return; } if ( $this->recipientUserId <= 0 ) { // recipient is system user with negative ID (root, guest, etc.) -> send to admin $this->_addDefaultRecipient(); return; } $language_field = $this->emailEvent->GetDBField('Type') == EmailEvent::EVENT_TYPE_FRONTEND ? 'FrontLanguage' : 'AdminLanguage'; $sql = 'SELECT FirstName, LastName, Email, ' . $language_field . ' AS Language FROM ' . TABLE_PREFIX . 'Users WHERE PortalUserId = ' . $this->recipientUserId; $user_info = $this->Conn->GetRow($sql); if ( !$user_info ) { return; } $add_recipient = Array ( 'RecipientAddressType' => EmailEvent::ADDRESS_TYPE_EMAIL, 'RecipientAddress' => $user_info['Email'], 'RecipientName' => trim($user_info['FirstName'] . ' ' . $user_info['LastName']), ); if ( $user_info['Language'] && !isset($this->params['language_id']) ) { $this->params['language_id'] = $user_info['Language']; } array_unshift($this->recipients[EmailEvent::RECIPIENT_TYPE_TO], $add_recipient); $user = $this->Application->recallObject('u.email-to', null, Array('skip_autoload' => true)); /* @var $user UsersItem */ $user->Load($this->recipientUserId); } /** * Update with custom data given during event execution (email + name) * * @return void * @access protected */ protected function _addRecipientFromParams() { $add_recipient = Array (); if ( array_key_exists('to_email', $this->params) ) { $add_recipient['RecipientName'] = ''; $add_recipient['RecipientAddressType'] = EmailEvent::ADDRESS_TYPE_EMAIL; $add_recipient['RecipientAddress'] = $this->params['to_email']; } if ( array_key_exists('to_name', $this->params) ) { $add_recipient['RecipientName'] = $this->params['to_name']; } if ( $add_recipient ) { array_unshift($this->recipients[EmailEvent::RECIPIENT_TYPE_TO], $add_recipient); } } /** * This is default recipient, when we can't determine actual one * * @return void * @access protected */ protected function _addDefaultRecipient() { $xml = $this->Application->ConfigValue('DefaultEmailRecipients'); if ( !$this->_addRecipientsFromXml($xml) ) { $recipient = Array ( 'RecipientName' => $this->Application->ConfigValue('DefaultEmailSender'), 'RecipientAddressType' => EmailEvent::ADDRESS_TYPE_EMAIL, 'RecipientAddress' => $this->Application->ConfigValue('DefaultEmailSender'), ); array_unshift($this->recipients[EmailEvent::RECIPIENT_TYPE_TO], $recipient); } } /** * Transforms recipients into name/e-mail pairs * * @param Array $recipients * @return Array * @access protected */ protected function _transformRecipientsIntoPairs($recipients) { if ( !$recipients ) { return Array (); } $pairs = Array (); foreach ($recipients as $recipient) { $address = $recipient['RecipientAddress']; $address_type = $recipient['RecipientAddressType']; $recipient_name = $recipient['RecipientName']; switch ($address_type) { case EmailEvent::ADDRESS_TYPE_EMAIL: $pairs[] = Array ('email' => $address, 'name' => $recipient_name); break; case EmailEvent::ADDRESS_TYPE_USER: $sql = 'SELECT FirstName, LastName, Email FROM ' . TABLE_PREFIX . 'Users WHERE Username = ' . $this->Conn->qstr($address); $user_info = $this->Conn->GetRow($sql); if ( $user_info ) { // user still exists $name = trim($user_info['FirstName'] . ' ' . $user_info['LastName']); $pairs[] = Array ( 'email' => $user_info['Email'], 'name' => $name ? $name : $recipient_name, ); } break; case EmailEvent::ADDRESS_TYPE_GROUP: $sql = 'SELECT u.FirstName, u.LastName, u.Email FROM ' . TABLE_PREFIX . 'UserGroups g JOIN ' . TABLE_PREFIX . 'UserGroupRelations ug ON ug.GroupId = g.GroupId JOIN ' . TABLE_PREFIX . 'Users u ON u.PortalUserId = ug.PortalUserId WHERE g.Name = ' . $this->Conn->qstr($address); $users = $this->Conn->Query($sql); foreach ($users as $user_info) { $name = trim($user_info['FirstName'] . ' ' . $user_info['LastName']); $pairs[] = Array ( 'email' => $user_info['Email'], 'name' => $name ? $name : $recipient_name, ); } break; } } return $pairs; } /** * Change system language temporarily to send e-mail on user language * * @param bool $restore * @return void * @access protected */ protected function _changeLanguage($restore = false) { static $prev_language_id = null; if ( !isset($prev_language_id) ) { $prev_language_id = $this->Application->GetVar('m_lang'); } // ensure that language is set if ( !isset($this->params['language_id']) ) { $this->params['language_id'] = $this->Application->GetVar('m_lang'); } $language_id = $restore ? $prev_language_id : $this->params['language_id']; $this->Application->SetVar('m_lang', $language_id); $language = $this->Application->recallObject('lang.current'); /* @var $language LanguagesItem */ $language->Load($language_id); $this->Application->Phrases->LanguageId = $language_id; $this->Application->Phrases->Phrases = Array (); } /** * Parses message headers into array * * @return Array * @access protected */ protected function _getHeaders() { $headers = $this->emailEvent->GetDBField('Headers'); $headers = 'Subject: ' . $this->emailEvent->GetField('Subject') . ($headers ? "\n" . $headers : ''); $headers = explode("\n", $this->_parseText($headers)); $ret = Array (); foreach ($headers as $header) { $header = explode(':', $header, 2); $ret[ trim($header[0]) ] = trim($header[1]); } if ( $this->Application->isDebugMode() ) { // set special header with event name, so it will be easier to determine what's actually was received $event_type = $this->emailEvent->GetDBField('Type') == EmailEvent::EVENT_TYPE_ADMIN ? 'ADMIN' : 'USER'; $ret['X-Event-Name'] = $this->emailEvent->GetDBField('Event') . ' - ' . $event_type; } return $ret; } /** * Applies design to given e-mail text * * @param string $text * @param bool $is_html * @return string * @access protected */ protected function _applyMessageDesign($text, $is_html = true) { static $design_templates = Array(); $design_key = $is_html ? 'html' : 'text'; if ( !isset($design_templates[$design_key]) ) { - $primary_language_id = $this->Application->GetDefaultLanguageId(); + $footer_email = $this->Application->recallObject('emailevents.footer', null, Array ('skip_autoload' => true)); + /* @var $footer_email kDBItem */ - $sql = 'SELECT IF(l' . $this->params['language_id'] . '_Body <> "", l' . $this->params['language_id'] . '_Body, l' . $primary_language_id . '_Body) - FROM ' . $this->emailEvent->TableName . ' - WHERE Event = "COMMON.FOOTER"'; - $footer = $this->Conn->GetOne($sql); + $footer_email->Load('COMMON.FOOTER', 'Event'); + $footer = $footer_email->GetField($is_html ? 'HtmlBody' : 'PlainTextBody'); - if ( !$is_html ) { - $footer = $this->sender->ConvertToText($footer); + if ( !$is_html && !$footer ) { + $footer = $this->sender->ConvertToText($footer_email->GetField('HtmlBody')); } $design_templates[$design_key] = '$body'; if ( $footer ) { $design_templates[$design_key] .= "\r\n" . $footer; } } return $this->_parseText(str_replace('$body', $text, $design_templates[$design_key])); } /** * Returns message body * * @param bool $is_html * @return bool|string * @access protected */ - protected function _getMessageBody($is_html = true) + protected function _getMessageBody($is_html = false) { - $message_body = $this->emailEvent->GetField('Body'); - - if ( !trim($message_body) ) { - trigger_error('Message template is empty', E_USER_WARNING); + $message_body = $this->emailEvent->GetField($is_html ? 'HtmlBody' : 'PlainTextBody'); - return false; + if ( !trim($message_body) && !$is_html ) { + // no plain text part available -> make it from html part then + $message_body = $this->sender->ConvertToText($this->emailEvent->GetField('HtmlBody')); } - $message_body = $this->_applyMessageDesign($message_body, $is_html); - if ( !trim($message_body) ) { - trigger_error('Message template is empty after parsing', E_USER_WARNING); - return false; } - return $message_body; + $message_body = $this->_applyMessageDesign($message_body, $is_html); + + return trim($message_body) ? $message_body : false; } /** * Parse message template and return headers (as array) and message body part * * @param string $text * @return string * @access protected */ protected function _parseText($text) { $text = $this->_substituteReplacementTags($text); if ( !$text ) { return ''; } // init for cases, when e-mail is sent from event before page template rendering $this->Application->InitParser(); $parser_params = $this->Application->Parser->Params; // backup parser params $this->Application->Parser->SetParams( array_merge($parser_params, $this->params) ); $text = $this->Application->Parser->Parse($text, 'email_template'); $this->Application->Parser->SetParams($parser_params); // restore parser params $category_helper = $this->Application->recallObject('CategoryHelper'); /* @var $category_helper CategoryHelper */ return $category_helper->replacePageIds($this->_normalizeLineEndings($text)); } /** * Substitutes replacement tags in given text * * @param string $text * @return string * @access protected */ protected function _substituteReplacementTags($text) { $default_replacement_tags = Array ( '<inp:touser _Field="password"' => '<inp2:u_Field name="Password_plain"', '<inp:touser _Field="UserName"' => '<inp2:u_Field name="Username"', '<inp:touser _Field' => '<inp2:u_Field name', ); $replacement_tags = $this->emailEvent->GetDBField('ReplacementTags'); $replacement_tags = $replacement_tags ? unserialize($replacement_tags) : Array (); $replacement_tags = array_merge($default_replacement_tags, $replacement_tags); foreach ($replacement_tags as $replace_from => $replace_to) { $text = str_replace($replace_from, $replace_to, $text); } return $text; } /** * Normalizes line endings in given text * * @param string $text * @return string * @access protected */ protected function _normalizeLineEndings($text) { // remove trailing line endings $text = preg_replace('/(\n|\r)+/', "\\1", $text); // convert Unix/Windows/Mac line ending into Unix line endings return str_replace(Array ("\r\n", "\r"), "\n", $text); } } \ No newline at end of file Index: branches/5.2.x/core/units/helpers/email_message_helper.php =================================================================== --- branches/5.2.x/core/units/helpers/email_message_helper.php (revision 15221) +++ branches/5.2.x/core/units/helpers/email_message_helper.php (revision 15222) @@ -1,90 +1,103 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2011 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); class EmailMessageHelper extends kHelper { /** * Extracts Subject, Headers, Body fields from email message translation * - * @param string $text + * @param string|SimpleXMLElement $text + * @param string $message_type * @return Array */ - function parseTemplate($text) + function parseTemplate($text, $message_type = '') { + $ret = Array ('Subject' => '', 'Headers' => '', 'HtmlBody' => '', 'PlainTextBody' => ''); + + if ( $message_type == '' ) { + // this is v5+ e-mail event text as xml node + foreach ($ret as $field => $value) { + $node_name = strtoupper($field); + $ret[$field] = (string)$text->$node_name; + } + + return $ret; + } + $line_id = 1; - $ret = Array ('Subject' => '', 'Headers' => '', 'Body' => ''); $headers = Array(); $lines = explode("\n", $text); // "\n" is lost in process foreach ($lines as $line_id => $line) { - if (strlen(trim($line)) == 0 || ($line == '.')) { + if ( strlen(trim($line)) == 0 || ($line == '.') ) { break; } $parts = explode(':', $line, 2); - if (strtolower($parts[0]) == 'subject') { + + if ( strtolower($parts[0]) == 'subject' ) { $ret['Subject'] = trim($parts[1]); } else { $headers[] = $line; } } $ret['Headers'] = $headers ? implode("\n", $headers) : null; // it's null field $lines = array_slice($lines, $line_id + 1); // add "\n", that was lost before - $ret['Body'] = implode("\n", $lines); + $ret[$message_type == 'html' ? 'HtmlBody' : 'PlainTextBody'] = implode("\n", $lines); return $ret; } /** * Prepares email event content for language pack export * * @param Array $fields_hash * @return string */ function buildTemplate($fields_hash) { if (!implode('', $fields_hash)) { return ''; } $ret = array_key_exists('Headers', $fields_hash) ? $fields_hash['Headers'] : ''; if ($ret) { $ret .= "\n"; } $ret = $this->_removeTrailingCRLF($ret); $ret .= 'Subject: ' . $fields_hash['Subject'] . "\n\n"; $ret .= $fields_hash['Body']; return $ret; } /** * Remove trailing CR/LF chars from string * * @param string $string * @return string */ function _removeTrailingCRLF($string) { return preg_replace('/(\n|\r)+/',"\\1",$string); } } \ No newline at end of file Index: branches/5.2.x/core/units/helpers/language_import_helper.php =================================================================== --- branches/5.2.x/core/units/helpers/language_import_helper.php (revision 15221) +++ branches/5.2.x/core/units/helpers/language_import_helper.php (revision 15222) @@ -1,1148 +1,1180 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ /** -* Language pack format version description -* -* v1 -* ========== -* All language properties are separate nodes inside <LANGUAGE> node. There are -* two more nodes PHRASES and EVENTS for phrase and email event translations. -* -* v2 -* ========== -* All data, that will end up in Language table is now attributes of LANGUAGE node -* and is name exactly as field name, that will be used to store that data. -* -* v4 -* ========== -* Hint & Column translation added to each phrase translation -*/ + * Language pack format version description + * + * v1 + * ========== + * All language properties are separate nodes inside <LANGUAGE> node. There are + * two more nodes PHRASES and EVENTS for phrase and email event translations. + * + * v2 + * ========== + * All data, that will end up in Language table is now attributes of LANGUAGE node + * and is name exactly as field name, that will be used to store that data. + * + * v4 + * ========== + * Hint & Column translation added to each phrase translation + * + * v5 + * ========== + * Use separate xml nodes for subject, headers, html & plain translations + * + */ defined('FULL_PATH') or die('restricted access!'); define('LANG_OVERWRITE_EXISTING', 1); define('LANG_SKIP_EXISTING', 2); class LanguageImportHelper extends kHelper { /** * Current Language in import * * @var LanguagesItem */ var $lang_object = null; /** * Current user's IP address * * @var string */ var $ip_address = ''; /** * Event type + name mapping to id (from system) * * @var Array */ var $events_hash = Array (); /** * Language pack import mode * * @var int */ var $import_mode = LANG_SKIP_EXISTING; /** * Language IDs, that were imported * * @var Array */ var $_languages = Array (); /** * Temporary table names to perform import on * * @var Array */ var $_tables = Array (); /** * Phrase types allowed for import/export operations * * @var Array */ var $phrase_types_allowed = Array (); /** * Encoding, used for language pack exporting * * @var string */ var $_exportEncoding = 'base64'; /** * Exported data limits (all or only specified ones) * * @var Array */ var $_exportLimits = Array ( 'phrases' => false, 'emailevents' => false, + 'country-state' => false, ); /** * Debug language pack import process * * @var bool */ var $_debugMode = false; /** * Latest version of language pack format. Versions are not backwards compatible! * * @var int */ - var $_latestVersion = 4; + var $_latestVersion = 5; /** * Prefix-based serial numbers, that should be changed after import is finished * * @var Array */ var $changedPrefixes = Array (); public function __construct() { parent::__construct(); // "core/install/english.lang", phrase count: 3318, xml parse time on windows: 10s, insert time: 0.058s set_time_limit(0); ini_set('memory_limit', -1); $this->lang_object = $this->Application->recallObject('lang.import', null, Array ('skip_autoload' => true)); if (!(defined('IS_INSTALL') && IS_INSTALL)) { // perform only, when not in installation mode $this->_updateEventsCache(); } $this->ip_address = getenv('HTTP_X_FORWARDED_FOR') ? getenv('HTTP_X_FORWARDED_FOR') : getenv('REMOTE_ADDR'); // $this->_debugMode = $this->Application->isDebugMode(); } /** * Performs import of given language pack (former Parse method) * * @param string $filename * @param string $phrase_types * @param Array $module_ids * @param int $import_mode * @return bool */ function performImport($filename, $phrase_types, $module_ids, $import_mode = LANG_SKIP_EXISTING) { // define the XML parsing routines/functions to call based on the handler path if (!file_exists($filename) || !$phrase_types /*|| !$module_ids*/) { return false; } if ($this->_debugMode) { $start_time = microtime(true); $this->Application->Debugger->appendHTML(__CLASS__ . '::' . __FUNCTION__ . '("' . $filename . '")'); } if (defined('IS_INSTALL') && IS_INSTALL) { // new events could be added during module upgrade $this->_updateEventsCache(); } $this->_initImportTables(); $phrase_types = explode('|', substr($phrase_types, 1, -1) ); // $module_ids = explode('|', substr($module_ids, 1, -1) ); $this->phrase_types_allowed = array_flip($phrase_types); $this->import_mode = $import_mode; $this->_parseXML($filename); // copy data from temp tables to live foreach ($this->_languages as $language_id) { $this->_performUpgrade($language_id, 'phrases', 'PhraseKey', Array ('l%s_Translation', 'l%s_HintTranslation', 'l%s_ColumnTranslation', 'PhraseType')); $this->_performUpgrade($language_id, 'emailevents', 'EventId', Array ('l%s_Subject', 'Headers', 'MessageType', 'l%s_Body')); $this->_performUpgrade($language_id, 'country-state', 'CountryStateId', Array ('l%s_Name')); } $this->_initImportTables(true); $this->changedPrefixes = array_unique($this->changedPrefixes); foreach ($this->changedPrefixes as $prefix) { $this->Application->incrementCacheSerial($prefix); } if ($this->_debugMode) { $this->Application->Debugger->appendHTML(__CLASS__ . '::' . __FUNCTION__ . '("' . $filename . '"): ' . (microtime(true) - $start_time)); } return true; } /** * Creates XML file with exported language data (former Create method) * * @param string $filename filename to export into * @param Array $phrase_types phrases types to export from modules passed in $module_ids * @param Array $language_ids IDs of languages to export * @param Array $module_ids IDs of modules to export phrases from */ function performExport($filename, $phrase_types, $language_ids, $module_ids) { $fp = fopen($filename,'w'); if (!$fp || !$phrase_types || !$module_ids || !$language_ids) { return false; } $phrase_types = explode('|', substr($phrase_types, 1, -1) ); $module_ids = explode('|', substr($module_ids, 1, -1) ); $ret = '<LANGUAGES Version="' . $this->_latestVersion . '">' . "\n"; $export_fields = $this->_getExportFields(); - $email_message_helper = $this->Application->recallObject('EmailMessageHelper'); - /* @var $email_message_helper EmailMessageHelper */ - // get languages $sql = 'SELECT * FROM ' . $this->Application->getUnitOption('lang','TableName') . ' WHERE LanguageId IN (' . implode(',', $language_ids) . ')'; $languages = $this->Conn->Query($sql, 'LanguageId'); // get phrases $phrase_modules = $module_ids; array_push($phrase_modules, ''); // for old language packs without module $phrase_modules = $this->Conn->qstrArray($phrase_modules); // apply phrase selection limit if ($this->_exportLimits['phrases']) { $escaped_phrases = $this->Conn->qstrArray($this->_exportLimits['phrases']); $limit_where = 'Phrase IN (' . implode(',', $escaped_phrases) . ')'; } else { $limit_where = 'TRUE'; } $sql = 'SELECT * FROM ' . $this->Application->getUnitOption('phrases','TableName') . ' WHERE PhraseType IN (' . implode(',', $phrase_types) . ') AND Module IN (' . implode(',', $phrase_modules) . ') AND ' . $limit_where . ' ORDER BY Phrase'; $phrases = $this->Conn->Query($sql, 'PhraseId'); // email events $module_sql = preg_replace('/(.*),/U', 'INSTR(Module,\'\\1\') OR ', implode(',', $module_ids) . ','); // apply event selection limit if ($this->_exportLimits['emailevents']) { $escaped_email_events = $this->Conn->qstrArray($this->_exportLimits['emailevents']); $limit_where = '`Event` IN (' . implode(',', $escaped_email_events) . ')'; } else { $limit_where = 'TRUE'; } $sql = 'SELECT * FROM ' . $this->Application->getUnitOption('emailevents', 'TableName') . ' WHERE `Type` IN (' . implode(',', $phrase_types) . ') AND (' . substr($module_sql, 0, -4) . ') AND ' . $limit_where . ' ORDER BY `Event`, `Type`'; $events = $this->Conn->Query($sql, 'EventId'); - if (in_array('Core', $module_ids)) { + if ( in_array('Core', $module_ids) ) { + if ($this->_exportLimits['country-state']) { + $escaped_countries = $this->Conn->qstrArray($this->_exportLimits['country-state']); + $limit_where = '`IsoCode` IN (' . implode(',', $escaped_countries) . ')'; + } + else { + $limit_where = 'TRUE'; + } + + $country_table = $this->Application->getUnitOption('country-state', 'TableName'); + // countries $sql = 'SELECT * - FROM ' . $this->Application->getUnitOption('country-state', 'TableName') . ' - WHERE Type = ' . DESTINATION_TYPE_COUNTRY . ' + FROM ' . $country_table . ' + WHERE Type = ' . DESTINATION_TYPE_COUNTRY . ' AND ' . $limit_where . ' ORDER BY `IsoCode`'; $countries = $this->Conn->Query($sql, 'CountryStateId'); // states - $sql = 'SELECT * - FROM ' . $this->Application->getUnitOption('country-state', 'TableName') . ' - WHERE Type = ' . DESTINATION_TYPE_STATE . ' - ORDER BY `IsoCode`'; + $sql = 'SELECT state.* + FROM ' . $country_table . ' state + JOIN ' . $country_table . ' country ON country.CountryStateId = state.StateCountryId + WHERE state.Type = ' . DESTINATION_TYPE_STATE . ' AND ' . str_replace('`IsoCode`', 'country.`IsoCode`', $limit_where) . ' + ORDER BY state.`IsoCode`'; $states = $this->Conn->Query($sql, 'CountryStateId'); foreach ($states as $state_id => $state_data) { $country_id = $state_data['StateCountryId']; - if (!array_key_exists('States', $countries[$country_id])) { + if ( !array_key_exists('States', $countries[$country_id]) ) { $countries[$country_id]['States'] = Array (); } $countries[$country_id]['States'][] = $state_id; } } foreach ($languages as $language_id => $language_info) { // language $ret .= "\t" . '<LANGUAGE Encoding="' . $this->_exportEncoding . '"'; foreach ($export_fields as $export_field) { $ret .= ' ' . $export_field . '="' . htmlspecialchars($language_info[$export_field]) . '"'; } $ret .= '>' . "\n"; // filename replacements $replacements = $language_info['FilenameReplacements']; if ($replacements) { $ret .= "\t\t" . '<REPLACEMENTS>'; $ret .= $this->_exportEncoding == 'base64' ? base64_encode($replacements) : '<![CDATA[' . $replacements . ']]>'; $ret .= '</REPLACEMENTS>' . "\n"; } // phrases if ($phrases) { $ret .= "\t\t" . '<PHRASES>' . "\n"; foreach ($phrases as $phrase_id => $phrase) { $translation = $phrase['l' . $language_id . '_Translation']; $hint_translation = $phrase['l' . $language_id . '_HintTranslation']; $column_translation = $phrase['l' . $language_id . '_ColumnTranslation']; if (!$translation) { // phrase is not translated on given language continue; } if ( $this->_exportEncoding == 'base64' ) { $data = base64_encode($translation); $hint_translation = base64_encode($hint_translation); $column_translation = base64_encode($column_translation); } else { $data = '<![CDATA[' . $translation . ']]>'; $hint_translation = htmlspecialchars($hint_translation); $column_translation = htmlspecialchars($column_translation); } $attributes = Array ( 'Label="' . $phrase['Phrase'] . '"', 'Module="' . $phrase['Module'] . '"', 'Type="' . $phrase['PhraseType'] . '"' ); if ( $phrase['l' . $language_id . '_HintTranslation'] ) { $attributes[] = 'Hint="' . $hint_translation . '"'; } if ( $phrase['l' . $language_id . '_ColumnTranslation'] ) { $attributes[] = 'Column="' . $column_translation . '"'; } $ret .= "\t\t\t" . '<PHRASE ' . implode(' ', $attributes) . '>' . $data . '</PHRASE>' . "\n"; } $ret .= "\t\t" . '</PHRASES>' . "\n"; } // email events if ($events) { $ret .= "\t\t" . '<EVENTS>' . "\n"; - foreach ($events as $event_id => $event) { + foreach ($events as $event_data) { $fields_hash = Array ( - 'Headers' => $event['Headers'], - 'Subject' => $event['l' . $language_id . '_Subject'], - 'Body' => $event['l' . $language_id . '_Body'], + 'HEADERS' => $event_data['Headers'], + 'SUBJECT' => $event_data['l' . $language_id . '_Subject'], + 'HTMLBODY' => $event_data['l' . $language_id . '_HtmlBody'], + 'PLAINTEXTBODY' => $event_data['l' . $language_id . '_PlainTextBody'], ); - $template = $email_message_helper->buildTemplate($fields_hash); + $data = ''; - if (!$template) { - // email event is not translated on given language - continue; + foreach ($fields_hash as $xml_node => $xml_content) { + if ( $xml_content ) { + $data .= "\t\t\t\t" . '<' . $xml_node . '>' . $this->_exportConvert($xml_content) . '</' . $xml_node . '>' . "\n"; + } } - $data = $this->_exportEncoding == 'base64' ? base64_encode($template) : '<![CDATA[' . $template . ']]>'; - $ret .= "\t\t\t" . '<EVENT MessageType="' . $event['MessageType'] . '" Event="' . $event['Event'] . '" Type="' . $event['Type'] . '">' . $data . '</EVENT>'."\n"; + if ( $data ) { + $ret .= "\t\t\t" . '<EVENT Event="' . $event_data['Event'] . '" Type="' . $event_data['Type'] . '">' . "\n" . $data . "\t\t\t" . '</EVENT>' . "\n"; + } } $ret .= "\t\t" . '</EVENTS>' . "\n"; } if (in_array('Core', $module_ids) && $countries) { $ret .= "\t\t" . '<COUNTRIES>' . "\n"; - foreach ($countries as $country_id => $country_data) { + foreach ($countries as $country_data) { $translation = $country_data['l' . $language_id . '_Name']; if (!$translation) { // country is not translated on given language continue; } $data = $this->_exportEncoding == 'base64' ? base64_encode($translation) : $translation; if (array_key_exists('States', $country_data)) { $ret .= "\t\t\t" . '<COUNTRY Iso="' . $country_data['IsoCode'] . '" Translation="' . $data . '">' . "\n"; foreach ($country_data['States'] as $state_id) { $translation = $states[$state_id]['l' . $language_id . '_Name']; if (!$translation) { // state is not translated on given language continue; } $data = $this->_exportEncoding == 'base64' ? base64_encode($translation) : $translation; $ret .= "\t\t\t\t" . '<STATE Iso="' . $states[$state_id]['IsoCode'] . '" Translation="' . $data . '"/>' . "\n"; } $ret .= "\t\t\t" . '</COUNTRY>' . "\n"; } else { $ret .= "\t\t\t" . '<COUNTRY Iso="' . $country_data['IsoCode'] . '" Translation="' . $data . '"/>' . "\n"; } } $ret .= "\t\t" . '</COUNTRIES>' . "\n"; } $ret .= "\t" . '</LANGUAGE>' . "\n"; } $ret .= '</LANGUAGES>'; fwrite($fp, $ret); fclose($fp); return true; } /** + * Converts string before placing into export file + * + * @param string $string + * @return string + * @access protected + */ + protected function _exportConvert($string) + { + return $this->_exportEncoding == 'base64' ? base64_encode($string) : '<![CDATA[' . $string . ']]>'; + } + + /** * Sets language pack encoding (not charset) used during export * * @param string $encoding */ function setExportEncoding($encoding) { $this->_exportEncoding = $encoding; } /** * Sets language pack data limit for export * * @param string $prefix * @param string $data */ function setExportLimit($prefix, $data = null) { if ( !isset($data) ) { $key_field = $prefix == 'phrases' ? 'Phrase' : 'Event'; $ids = $this->getExportIDs($prefix); $sql = 'SELECT ' . $key_field . ' FROM ' . $this->Application->getUnitOption($prefix, 'TableName') . ' WHERE ' . $this->Application->getUnitOption($prefix, 'IDField') . ' IN (' . $ids . ')'; $rs = $this->Conn->QueryRaw($sql); if ( $this->Conn->RowCount($rs) ) { $data = ''; while ( ($row = $this->Conn->GetNextRow($rs)) ) { $data .= ',' . $row[$key_field]; } $data = substr($data, 1); } $this->Conn->Destroy($rs); } if ( !is_array($data) ) { $data = str_replace(',', "\n", $data); $data = preg_replace("/\n+/", "\n", str_replace("\r", '', trim($data))); $data = $data ? array_map('trim', explode("\n", $data)) : Array (); } $this->_exportLimits[$prefix] = $data; } /** * Performs upgrade of given language pack part * * @param int $language_id * @param string $prefix * @param string $unique_field * @param Array $data_fields */ function _performUpgrade($language_id, $prefix, $unique_field, $data_fields) { $live_records = $this->_getTableData($language_id, $prefix, $unique_field, $data_fields[0], false); $temp_records = $this->_getTableData($language_id, $prefix, $unique_field, $data_fields[0], true); if (!$temp_records) { // no data for given language return ; } // perform insert for records, that are missing in live table $to_insert = array_diff($temp_records, $live_records); if ($to_insert) { $to_insert = $this->Conn->qstrArray($to_insert); $sql = 'INSERT INTO ' . $this->Application->getUnitOption($prefix, 'TableName') . ' SELECT * FROM ' . $this->_tables[$prefix] . ' WHERE ' . $unique_field . ' IN (' . implode(',', $to_insert) . ')'; $this->Conn->Query($sql); // new records were added $this->changedPrefixes[] = $prefix; } // perform update for records, that are present in live table $to_update = array_diff($temp_records, $to_insert); if ($to_update) { $to_update = $this->Conn->qstrArray($to_update); $sql = 'UPDATE ' . $this->Application->getUnitOption($prefix, 'TableName') . ' live SET '; foreach ($data_fields as $index => $data_field) { $data_field = sprintf($data_field, $language_id); $sql .= ' live.' . $data_field . ' = ( SELECT temp' . $index . '.' . $data_field . ' FROM ' . $this->_tables[$prefix] . ' temp' . $index . ' WHERE temp' . $index . '.' . $unique_field . ' = live.' . $unique_field . ' ),'; } $sql = substr($sql, 0, -1); // cut last comma $where_clause = Array ( // this won't make any difference, but just in case $unique_field . ' IN (' . implode(',', $to_update) . ')', ); if ($this->import_mode == LANG_SKIP_EXISTING) { // empty OR not set $data_field = sprintf($data_fields[0], $language_id); $where_clause[] = '(' . $data_field . ' = "") OR (' . $data_field . ' IS NULL)'; } if ($where_clause) { $sql .= "\n" . 'WHERE (' . implode(') AND (', $where_clause) . ')'; } $this->Conn->Query($sql); if ($this->Conn->getAffectedRows() > 0) { // existing records were updated $this->changedPrefixes[] = $prefix; } } } /** * Returns data from given table used for language pack upgrade * * @param int $language_id * @param string $prefix * @param string $unique_field * @param string $data_field * @param bool $temp_mode * @return Array */ function _getTableData($language_id, $prefix, $unique_field, $data_field, $temp_mode = false) { $data_field = sprintf($data_field, $language_id); $table_name = $this->Application->getUnitOption($prefix, 'TableName'); if ($temp_mode) { // for temp table get only records, that have contents on given language (not empty and isset) $sql = 'SELECT ' . $unique_field . ' FROM ' . $this->Application->GetTempName($table_name, 'prefix:' . $prefix) . ' WHERE (' . $data_field . ' <> "") AND (' . $data_field . ' IS NOT NULL)'; } else { // for live table get all records, no matter on what language $sql = 'SELECT ' . $unique_field . ' FROM ' . $table_name; } return $this->Conn->GetCol($sql); } function _parseXML($filename) { if ( $this->_debugMode ) { $start_time = microtime(true); $this->Application->Debugger->appendHTML(__CLASS__ . '::' . __FUNCTION__ . '("' . $filename . '")'); } $languages = simplexml_load_file($filename); if ( $languages === false) { // invalid language pack contents return false; } if ( $languages->count() ) { $this->_processLanguages($languages); } if ( $this->_debugMode ) { $this->Application->Debugger->appendHTML(__CLASS__ . '::' . __FUNCTION__ . '("' . $filename . '"): ' . (microtime(true) - $start_time)); } return true; } /** * Creates temporary tables, used during language import * * @param bool $drop_only */ function _initImportTables($drop_only = false) { $this->_tables['phrases'] = $this->_prepareTempTable('phrases', $drop_only); $this->_tables['emailevents'] = $this->_prepareTempTable('emailevents', $drop_only); $this->_tables['country-state'] = $this->_prepareTempTable('country-state', $drop_only); } /** * Create temp table for prefix, if table already exists, then delete it and create again * * @param string $prefix * @param bool $drop_only * @return string Name of created temp table * @access protected */ protected function _prepareTempTable($prefix, $drop_only = false) { $id_field = $this->Application->getUnitOption($prefix, 'IDField'); $table = $this->Application->getUnitOption($prefix,'TableName'); $temp_table = $this->Application->GetTempName($table); $sql = 'DROP TABLE IF EXISTS %s'; $this->Conn->Query( sprintf($sql, $temp_table) ); if (!$drop_only) { $sql = 'CREATE TABLE ' . $temp_table . ' SELECT * FROM ' . $table . ' WHERE 0'; $this->Conn->Query($sql); $sql = 'ALTER TABLE %1$s CHANGE %2$s %2$s INT(11) NOT NULL DEFAULT "0"'; $this->Conn->Query( sprintf($sql, $temp_table, $id_field) ); switch ($prefix) { case 'phrases': $unique_field = 'PhraseKey'; break; case 'emailevents': $unique_field = 'EventId'; break; case 'country-state': $unique_field = 'CountryStateId'; break; default: throw new Exception('Unknown prefix "<strong>' . $prefix . '</strong>" during language pack import'); break; } $sql = 'ALTER TABLE ' . $temp_table . ' ADD UNIQUE (' . $unique_field . ')'; $this->Conn->Query($sql); } return $temp_table; } /** * Prepares mapping between event name+type and their ids in database * */ function _updateEventsCache() { $sql = 'SELECT EventId, CONCAT(Event,"_",Type) AS EventMix FROM ' . TABLE_PREFIX . 'EmailEvents'; $this->events_hash = $this->Conn->GetCol($sql, 'EventMix'); } /** * Returns language fields to be exported * * @return Array */ function _getExportFields() { return Array ( 'PackName', 'LocalName', 'DateFormat', 'TimeFormat', 'InputDateFormat', 'InputTimeFormat', 'DecimalPoint', 'ThousandSep', 'Charset', 'UnitSystem', 'Locale', 'UserDocsUrl' ); } /** * Processes parsed XML * * @param SimpleXMLElement $languages */ function _processLanguages($languages) { $version = (int)$languages['Version']; if ( !$version ) { // version missing -> guess it if ( $languages->DATEFORMAT->getName() ) { $version = 1; } elseif ( (string)$languages->LANGUAGE['Charset'] != '' ) { $version = 2; } } if ( $version == 1 ) { $field_mapping = Array ( 'DATEFORMAT' => 'DateFormat', 'TIMEFORMAT' => 'TimeFormat', 'INPUTDATEFORMAT' => 'InputDateFormat', 'INPUTTIMEFORMAT' => 'InputTimeFormat', 'DECIMAL' => 'DecimalPoint', 'THOUSANDS' => 'ThousandSep', 'CHARSET' => 'Charset', 'UNITSYSTEM' => 'UnitSystem', 'DOCS_URL' => 'UserDocsUrl', ); } else { $export_fields = $this->_getExportFields(); } foreach ($languages as $language_node) { $language_id = false; $fields_hash = Array ( 'PackName' => (string)$language_node['PackName'], 'LocalName' => (string)$language_node['PackName'], 'Encoding' => (string)$language_node['Encoding'], 'Charset' => 'utf-8', 'SynchronizationModes' => Language::SYNCHRONIZE_DEFAULT, ); if ( $version > 1 ) { foreach ($export_fields as $export_field) { if ( (string)$language_node[$export_field] ) { $fields_hash[$export_field] = (string)$language_node[$export_field]; } } } $container_nodes = Array ('PHRASES', 'EVENTS', 'COUNTRIES'); foreach ($language_node as $sub_node) { /* @var $sub_node SimpleXMLElement */ if ( in_array($sub_node->getName(), $container_nodes) ) { if ( !$sub_node->count() ) { continue; } if ( !$language_id ) { $language_id = $this->_processLanguage($fields_hash); } } switch ($sub_node->getName()) { case 'PHRASES': $this->_processPhrases($sub_node, $language_id, $fields_hash['Encoding']); break; case 'EVENTS': $this->_processEvents($sub_node, $language_id, $fields_hash['Encoding']); break; case 'COUNTRIES': $this->_processCountries($sub_node, $language_id, $fields_hash['Encoding']); break; case 'REPLACEMENTS': // added since v2 $replacements = (string)$sub_node; if ( $fields_hash['Encoding'] != 'plain' ) { $replacements = base64_decode($replacements); } $fields_hash['FilenameReplacements'] = $replacements; break; default: if ( $version == 1 ) { $fields_hash[$field_mapping[$sub_node->Name]] = (string)$sub_node; } break; } } } } /** * Performs phases import * * @param SimpleXMLElement $phrases * @param int $language_id * @param string $language_encoding */ function _processPhrases($phrases, $language_id, $language_encoding) { static $other_translations = Array (); if ( $this->Application->isDebugMode() ) { $this->Application->Debugger->profileStart('L[' . $language_id . ']P', 'Language: ' . $language_id . '; Phrases Import'); } foreach ($phrases as $phrase_node) { /* @var $phrase_node SimpleXMLElement */ $phrase_key = mb_strtoupper($phrase_node['Label']); $fields_hash = Array ( 'Phrase' => (string)$phrase_node['Label'], 'PhraseKey' => $phrase_key, 'PhraseType' => (int)$phrase_node['Type'], 'Module' => (string)$phrase_node['Module'] ? (string)$phrase_node['Module'] : 'Core', 'LastChanged' => TIMENOW, 'LastChangeIP' => $this->ip_address, ); $translation = (string)$phrase_node; $hint_translation = (string)$phrase_node['Hint']; $column_translation = (string)$phrase_node['Column']; if ( array_key_exists($fields_hash['PhraseType'], $this->phrase_types_allowed) ) { if ( $language_encoding != 'plain' ) { $translation = base64_decode($translation); $hint_translation = base64_decode($hint_translation); $column_translation = base64_decode($column_translation); } if ( array_key_exists($phrase_key, $other_translations) ) { $other_translations[$phrase_key]['l' . $language_id . '_Translation'] = $translation; $other_translations[$phrase_key]['l' . $language_id . '_HintTranslation'] = $hint_translation; $other_translations[$phrase_key]['l' . $language_id . '_ColumnTranslation'] = $column_translation; } else { $other_translations[$phrase_key] = Array ( 'l' . $language_id . '_Translation' => $translation, 'l' . $language_id . '_HintTranslation' => $hint_translation, 'l' . $language_id . '_ColumnTranslation' => $column_translation, ); } $fields_hash = array_merge($fields_hash, $other_translations[$phrase_key]); $this->Conn->doInsert($fields_hash, $this->_tables['phrases'], 'REPLACE', false); } } if ( $this->Application->isDebugMode() ) { $this->Application->Debugger->profileFinish('L[' . $language_id . ']P', 'Language: ' . $language_id . '; Phrases Import'); } $this->Conn->doInsert($fields_hash, $this->_tables['phrases'], 'REPLACE'); } /** * Performs email event import * * @param SimpleXMLElement $events * @param int $language_id * @param string $language_encoding */ function _processEvents($events, $language_id, $language_encoding) { static $other_translations = Array (); if ( $this->Application->isDebugMode() ) { $this->Application->Debugger->profileStart('L[' . $language_id . ']E', 'Language: ' . $language_id . '; Events Import'); } $email_message_helper = $this->Application->recallObject('EmailMessageHelper'); /* @var $email_message_helper EmailMessageHelper */ foreach ($events as $event_node) { /* @var $event_node SimpleXMLElement */ + $message_type = (string)$event_node['MessageType']; $event_id = $this->_getEventId((string)$event_node['Event'], (int)$event_node['Type']); if ( !$event_id ) { continue; } - if ( $language_encoding == 'plain' ) { - $template = rtrim($event_node); - } - else { - $template = base64_decode($event_node); - } - - $parsed = $email_message_helper->parseTemplate($template); - $fields_hash = Array ( 'EventId' => $event_id, 'Event' => (string)$event_node['Event'], 'Type' => (int)$event_node['Type'], - 'MessageType' => (string)$event_node['MessageType'], ); + if ( $message_type == '' ) { + $parsed = $email_message_helper->parseTemplate($event_node, ''); + $parsed = array_map($language_encoding == 'plain' ? 'rtrim' : 'base64_decode', $parsed); + + } + else { + $template = $language_encoding == 'plain' ? rtrim($event_node) : base64_decode($event_node); + $parsed = $email_message_helper->parseTemplate($template, $message_type); + } + if ( array_key_exists($event_id, $other_translations) ) { $other_translations[$event_id]['l' . $language_id . '_Subject'] = $parsed['Subject']; - $other_translations[$event_id]['l' . $language_id . '_Body'] = $parsed['Body']; + $other_translations[$event_id]['l' . $language_id . '_HtmlBody'] = $parsed['HtmlBody']; + $other_translations[$event_id]['l' . $language_id . '_PlainTextBody'] = $parsed['PlainTextBody']; } else { $other_translations[$event_id] = Array ( 'l' . $language_id . '_Subject' => $parsed['Subject'], - 'l' . $language_id . '_Body' => $parsed['Body'], + 'l' . $language_id . '_HtmlBody' => $parsed['HtmlBody'], + 'l' . $language_id . '_PlainTextBody' => $parsed['PlainTextBody'], ); } if ( $parsed['Headers'] ) { $other_translations[$event_id]['Headers'] = $parsed['Headers']; } elseif ( !$parsed['Headers'] && !array_key_exists('Headers', $other_translations[$event_id]) ) { $other_translations[$event_id]['Headers'] = $parsed['Headers']; } $fields_hash = array_merge($fields_hash, $other_translations[$event_id]); $this->Conn->doInsert($fields_hash, $this->_tables['emailevents'], 'REPLACE', false); } if ( $this->Application->isDebugMode() ) { $this->Application->Debugger->profileFinish('L[' . $language_id . ']E', 'Language: ' . $language_id . '; Events Import'); } if ( isset($fields_hash) ) { // at least one email event in language pack was found in database $this->Conn->doInsert($fields_hash, $this->_tables['emailevents'], 'REPLACE'); } } /** * Performs country_state translation import * * @param SimpleXMLElement $country_states * @param int $language_id * @param string $language_encoding * @param bool $process_states * @return void */ function _processCountries($country_states, $language_id, $language_encoding, $process_states = false) { static $other_translations = Array (); foreach ($country_states as $country_state_node) { /* @var $country_state_node SimpleXMLElement */ if ( $process_states ) { $country_state_id = $this->_getStateId((string)$country_states['Iso'], (string)$country_state_node['Iso']); } else { $country_state_id = $this->_getCountryId((string)$country_state_node['Iso']); } if ( !$country_state_id ) { continue; } if ( $language_encoding == 'plain' ) { $translation = rtrim($country_state_node['Translation']); } else { $translation = base64_decode($country_state_node['Translation']); } $fields_hash = Array ('CountryStateId' => $country_state_id); if ( array_key_exists($country_state_id, $other_translations) ) { $other_translations[$country_state_id]['l' . $language_id . '_Name'] = $translation; } else { $other_translations[$country_state_id] = Array ('l' . $language_id . '_Name' => $translation); } $fields_hash = array_merge($fields_hash, $other_translations[$country_state_id]); $this->Conn->doInsert($fields_hash, $this->_tables['country-state'], 'REPLACE', false); if ( !$process_states && $country_state_node->count() ) { $this->_processCountries($country_state_node, $language_id, $language_encoding, true); } } $this->Conn->doInsert($fields_hash, $this->_tables['country-state'], 'REPLACE'); } /** * Creates/updates language based on given fields and returns it's id * * @param Array $fields_hash * @return int */ function _processLanguage($fields_hash) { // 1. get language from database $sql = 'SELECT ' . $this->lang_object->IDField . ' FROM ' . $this->lang_object->TableName . ' WHERE PackName = ' . $this->Conn->qstr($fields_hash['PackName']); $language_id = $this->Conn->GetOne($sql); if ($language_id) { // 2. language found -> update, when allowed $this->lang_object->Load($language_id); if ($this->import_mode == LANG_OVERWRITE_EXISTING) { // update live language record based on data from xml $this->lang_object->SetFieldsFromHash($fields_hash); $this->lang_object->Update(); } } else { // 3. language not found -> create $this->lang_object->SetFieldsFromHash($fields_hash); $this->lang_object->SetDBField('Enabled', STATUS_ACTIVE); if ($this->lang_object->Create()) { $language_id = $this->lang_object->GetID(); if (defined('IS_INSTALL') && IS_INSTALL) { // language created during install becomes admin interface language $this->lang_object->setPrimary(true, true); } } } // 4. collect ID of every processed language if (!in_array($language_id, $this->_languages)) { $this->_languages[] = $language_id; } return $language_id; } /** * Returns event id based on it's name and type * * @param string $event_name * @param string $event_type * @return int */ function _getEventId($event_name, $event_type) { $cache_key = $event_name . '_' . $event_type; return array_key_exists($cache_key, $this->events_hash) ? $this->events_hash[$cache_key] : 0; } /** * Returns country id based on it's 3letter ISO code * * @param string $iso * @return int */ function _getCountryId($iso) { static $cache = null; if (!isset($cache)) { $sql = 'SELECT CountryStateId, IsoCode FROM ' . TABLE_PREFIX . 'CountryStates WHERE Type = ' . DESTINATION_TYPE_COUNTRY; $cache = $this->Conn->GetCol($sql, 'IsoCode'); } return array_key_exists($iso, $cache) ? $cache[$iso] : false; } /** * Returns state id based on 3letter country ISO code and 2letter state ISO code * * @param string $country_iso * @param string $state_iso * @return int */ function _getStateId($country_iso, $state_iso) { static $cache = null; if (!isset($cache)) { $sql = 'SELECT CountryStateId, CONCAT(StateCountryId, "-", IsoCode) AS IsoCode FROM ' . TABLE_PREFIX . 'CountryStates WHERE Type = ' . DESTINATION_TYPE_STATE; $cache = $this->Conn->GetCol($sql, 'IsoCode'); } $country_id = $this->_getCountryId($country_iso); return array_key_exists($country_id . '-' . $state_iso, $cache) ? $cache[$country_id . '-' . $state_iso] : false; } /** * Returns comma-separated list of IDs, that will be exported * * @param string $prefix * @return string * @access public */ public function getExportIDs($prefix) { $ids = $this->Application->RecallVar($prefix . '_selected_ids'); if ( $ids ) { // some records were selected in grid return $ids; } $tag_params = Array ( 'grid' => $prefix == 'phrases' ? 'Phrases' : 'Emails', 'skip_counting' => 1, 'per_page' => -1 ); $list = $this->Application->recallObject($prefix, $prefix . '_List', $tag_params); /* @var $list kDBList */ $sql = $list->getCountSQL($list->GetSelectSQL()); $sql = str_replace('COUNT(*) AS count', $list->TableName . '.' . $list->IDField, $sql); $ids = ''; $rs = $this->Conn->QueryRaw($sql); if ( $this->Conn->RowCount($rs) ) { while ( ($row = $this->Conn->GetNextRow($rs)) ) { $ids .= ',' . $row[$list->IDField]; } $ids = substr($ids, 1); } $this->Conn->Destroy($rs); return $ids; } } \ No newline at end of file Index: branches/5.2.x/core/units/phrases/phrases_config.php =================================================================== --- branches/5.2.x/core/units/phrases/phrases_config.php (revision 15221) +++ branches/5.2.x/core/units/phrases/phrases_config.php (revision 15222) @@ -1,210 +1,216 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); $config = Array ( 'Prefix' => 'phrases', 'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'), 'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'), 'EventHandlerClass' => Array ('class' => 'PhrasesEventHandler', 'file' => 'phrases_event_handler.php', 'build_event' => 'OnBuild'), 'TagProcessorClass' => Array ('class' => 'PhraseTagProcessor', 'file' => 'phrase_tp.php', 'build_event' => 'OnBuild'), 'AutoLoad' => true, 'QueryString' => Array ( 1 => 'id', 2 => 'Page', 3 => 'PerPage', 4 => 'event', 5 => 'label', // labels can be edited directly 6 => 'mode', ), 'IDField' => 'PhraseId', 'TitleField' => 'Phrase', 'TitlePresets' => Array ( 'default' => Array ( 'new_status_labels' => Array ('phrases' => '!la_title_Adding_Phrase!'), 'edit_status_labels' => Array ('phrases' => '!la_title_Editing_Phrase!'), ), 'phrase_edit' => Array ( 'prefixes' => Array ('phrases'), 'format' => '#phrases_status# #phrases_titlefield#', 'toolbar_buttons' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'), ), // for separate phrases list 'phrases_list_st' => Array ( 'prefixes' => Array ('phrases_List'), 'format' => "!la_title_Phrases!", 'toolbar_buttons' => Array ('new_item', 'edit', 'delete', 'export', 'view', 'dbl-click'), ), 'phrase_edit_single' => Array ( 'prefixes' => Array ('phrases'), 'format' => '#phrases_status# #phrases_titlefield#', 'toolbar_buttons' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'), ), ), 'PermSection' => Array ('main' => 'in-portal:phrases'), 'Sections' => Array ( // "Phrases" 'in-portal:phrases' => Array ( 'parent' => 'in-portal:site', 'icon' => 'phrases_labels', 'label' => 'la_title_Phrases', 'url' => Array ('t' => 'languages/phrase_list', 'pass' => 'm'), 'permissions' => Array ('view', 'add', 'edit', 'delete'), // 'perm_prefix' => 'lang', 'priority' => 4, // 'show_mode' => smSUPER_ADMIN, 'type' => stTREE, ), ), 'FilterMenu' => Array ( 'Groups' => Array ( Array ('mode' => 'AND', 'filters' => Array ('translated', 'not_translated'), 'type' => kDBList::HAVING_FILTER), ), 'Filters' => Array ( 'translated' => Array ('label' => 'la_PhraseTranslated', 'on_sql' => '', 'off_sql' => 'CurrentTranslation IS NULL'), 'not_translated' => Array ('label' => 'la_PhraseNotTranslated', 'on_sql' => '', 'off_sql' => 'CurrentTranslation IS NOT NULL'), ) ), 'TableName' => TABLE_PREFIX . 'LanguageLabels', 'CalculatedFields' => Array ( '' => Array ( 'PrimaryTranslation' => 'l%4$s_Translation', 'CurrentTranslation' => 'l%5$s_Translation', 'CurrentHintTranslation' => 'l%5$s_HintTranslation', 'CurrentColumnTranslation' => 'l%5$s_ColumnTranslation', ), ), 'ListSQLs' => Array( '' => 'SELECT %1$s.* %2$s FROM %1$s', ), 'ListSortings' => Array ( '' => Array ( 'Sorting' => Array ('Phrase' => 'asc'), ) ), 'Fields' => Array ( 'PhraseId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), 'Phrase' => Array ( 'type' => 'string', 'formatter' => 'kFormatter', 'regexp' => '/^(la|lu|lc)_[A-Z\d:_\-\.]+$/i', 'unique' => Array (), 'not_null' => 1, 'required' => 1, 'default' => '', ), 'PhraseKey' => Array ('type' => 'string', 'max_len' => 255, 'not_null' => 1, 'default' => ''), 'Translation' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'required' => 1, 'using_fck' => 1, 'default' => NULL, 'db_type' => 'text'), 'HintTranslation' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'using_fck' => 1, 'default' => NULL, 'db_type' => 'text'), 'ColumnTranslation' => Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'using_fck' => 1, 'default' => NULL, 'db_type' => 'text'), 'PhraseType' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_PhraseType_Front', 1 => 'la_PhraseType_Admin', 2 => 'la_PhraseType_Both'), 'use_phrases' => 1, 'not_null' => 1, 'required' => 1, 'default' => Language::PHRASE_TYPE_COMMON, ), 'LastChanged' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL), 'LastChangeIP' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''), 'Module' => Array ( 'type' => 'string', 'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'Modules WHERE (Loaded = 1) AND (Name <> "In-Portal") ORDER BY LoadOrder', 'option_key_field' => 'Name', 'option_title_field' => 'Name', 'not_null' => 1, 'required' => 1, 'default' => 'Core' ), ), 'VirtualFields' => Array ( 'PrimaryTranslation' => Array ('type' => 'string', 'default' => ''), 'CurrentTranslation' => Array ('type' => 'string', 'default' => ''), 'CurrentHintTranslation' => Array ('type' => 'string', 'default' => ''), 'CurrentColumnTranslation' => Array ('type' => 'string', 'default' => ''), // for language pack import/export 'LangFile' => Array ( 'type' => 'string', 'formatter' => 'kUploadFormatter', 'max_size' => MAX_UPLOAD_SIZE, 'upload_dir' => WRITEBALE_BASE . '/', 'max_len' => 255, 'default' => '' ), 'ImportOverwrite' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1, 'default' => 0, ), 'DoNotEncode' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array( 0 => 'la_No', 1 => 'la_Yes', ), 'use_phrases' => 1, 'default' => 0, ), 'ExportPhrases' => Array ('type' => 'string', 'default' => ''), 'ExportEmailEvents' => Array ('type' => 'string', 'default' => ''), + 'ExportCountries' => Array ('type' => 'string', 'default' => ''), + 'ExportDataTypes' => Array ( + 'type' => 'string', + 'formatter' => 'kOptionsFormatter', 'options' => Array ('phrases' => 'la_opt_Phrases', 'emailevents' => 'la_opt_EmailEvents', 'country-state' => 'la_opt_Countries'), 'use_phrases' => 1, 'multiple' => 1, + 'default' => '|phrases|emailevents|country-state|' + ), ), 'Grids' => Array ( // used on "Phrases" tab in language editing in "Regional" section 'Default' => Array ( 'Icons' => Array ( 'default' => 'icon16_item.png', 0 => 'icon16_disabled.png', 1 => 'icon16_item.png', ), 'Fields' => Array ( 'PhraseId' => Array ('title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 50), 'Phrase' => Array ('title' => 'la_col_Label', 'data_block' => 'grid_checkbox_td', 'width' => 200), 'CurrentTranslation' => Array ('title' => 'column:la_fld_Phrase', 'width' => 200), 'PrimaryTranslation' => Array ('title' => 'la_col_PrimaryValue', 'width' => 200), 'PhraseType' => Array ('filter_block' => 'grid_options_filter', 'width' => 60), 'LastChanged' => Array ('title' => 'column:la_fld_Modified', 'filter_block' => 'grid_date_range_filter', 'width' => 150), 'Module' => Array ('filter_block' => 'grid_multioptions_filter', 'width' => 100), 'CurrentHintTranslation' => Array ('title' => 'la_col_HintPhrase', 'width' => 200, 'hidden' => 1), 'CurrentColumnTranslation' => Array ('title' => 'la_col_ColumnPhrase', 'width' => 200, 'hidden' => 1), ), ), // used on "Labels & Phrases" section 'Phrases' => Array ( 'Icons' => Array ( 'default' => 'icon16_item.png', 0 => 'icon16_disabled.png', 1 => 'icon16_item.png', ), 'Fields' => Array ( 'PhraseId' => Array ('title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 50), 'Phrase' => Array ('title' => 'la_col_Label', 'filter_block' => 'grid_like_filter', 'width' => 170), 'CurrentTranslation' => Array ('title' => 'column:la_fld_Phrase', 'filter_block' => 'grid_like_filter', 'width' => 180), 'PhraseType' => Array ('title' => 'column:la_fld_Location', 'filter_block' => 'grid_multioptions_filter', 'width' => 80), 'LastChanged' => Array ('title' => 'column:la_fld_Modified', 'filter_block' => 'grid_date_range_filter', 'width' => 145), 'Module' => Array ('filter_block' => 'grid_multioptions_filter', 'width' => 100), 'CurrentHintTranslation' => Array ('title' => 'la_col_HintPhrase', 'width' => 200, 'hidden' => 1), 'CurrentColumnTranslation' => Array ('title' => 'la_col_ColumnPhrase', 'width' => 200, 'hidden' => 1), ), ), ), ); \ No newline at end of file Index: branches/5.2.x/core/units/phrases/phrases_event_handler.php =================================================================== --- branches/5.2.x/core/units/phrases/phrases_event_handler.php (revision 15221) +++ branches/5.2.x/core/units/phrases/phrases_event_handler.php (revision 15222) @@ -1,497 +1,503 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); class PhrasesEventHandler extends kDBEventHandler { /** * Allows to override standard permission mapping * * @return void * @access protected * @see kEventHandler::$permMapping */ protected function mapPermissions() { parent::mapPermissions(); $permissions = Array ( 'OnItemBuild' => Array ('self' => true, 'subitem' => true), 'OnPreparePhrase' => Array ('self' => true, 'subitem' => true), 'OnExportPhrases' => Array ('self' => 'view'), ); $this->permMapping = array_merge($this->permMapping, $permissions); } /** * Apply some special processing to object being * recalled before using it in other events that * call prepareObject * * @param kDBItem|kDBList $object * @param kEvent $event * @return void * @access protected */ protected function prepareObject(&$object, kEvent $event) { // don't call parent if ( $event->Special == 'import' || $event->Special == 'export' ) { $this->RemoveRequiredFields($object); - $object->setRequired(Array ('LangFile', 'PhraseType', 'Module')); + $object->setRequired(Array ('ExportDataTypes', 'LangFile', 'PhraseType', 'Module')); // allow multiple phrase types to be selected during import/export $object->SetFieldOption('PhraseType', 'type', 'string'); } } /** * Allow to create phrases from front end in debug mode with DBG_PHRASES constant set * * @param kEvent $event * @return bool * @access public */ public function CheckPermission(kEvent $event) { if ( !$this->Application->isAdmin && $this->Application->isDebugMode(false) && kUtil::constOn('DBG_PHRASES') ) { $allow_events = Array ('OnCreate', 'OnUpdate'); if ( in_array($event->Name, $allow_events) ) { return true; } } return parent::CheckPermission($event); } /** * Prepares phrase for translation * * @param kEvent $event */ function OnPreparePhrase($event) { $label = $this->Application->GetVar($event->getPrefixSpecial() . '_label'); if (!$label) { return ; } // we got label, try to get it's ID then if any $phrase_id = $this->_getPhraseId($label); if ($phrase_id) { $event->SetRedirectParam($event->getPrefixSpecial(true) . '_id', $phrase_id); $event->SetRedirectParam('pass', 'm,' . $event->getPrefixSpecial()); $next_template = $this->Application->GetVar('next_template'); if ($next_template) { $event->SetRedirectParam('next_template', $next_template); } } else { $event->CallSubEvent('OnNew'); } if ($this->Application->GetVar('simple_mode')) { $event->SetRedirectParam('simple_mode', 1); } } function _getPhraseId($phrase) { $sql = 'SELECT ' . $this->Application->getUnitOption($this->Prefix, 'IDField') . ' FROM ' . $this->Application->getUnitOption($this->Prefix, 'TableName') . ' WHERE PhraseKey = ' . $this->Conn->qstr( mb_strtoupper($phrase) ); return $this->Conn->GetOne($sql); } /** * Sets phrase type based on place where it's created (to display on form only) * * @param kEvent $event * @return void * @access protected */ protected function OnPreCreate(kEvent $event) { parent::OnPreCreate($event); $object = $event->getObject(); /* @var $object kDBItem */ $this->_setPhraseModule($object); } /** * Forces new label in case if issued from get link * * @param kEvent $event * @return void * @access protected */ protected function OnNew(kEvent $event) { parent::OnNew($event); $object = $event->getObject(); /* @var $object kDBItem */ $label = $this->Application->GetVar($event->getPrefixSpecial() . '_label'); if ( $label ) { // phrase is created in language, used to display phrases $object->SetDBField('Phrase', $label); $object->SetDBField('PhraseType', $this->_getPhraseType($label)); // to show on form $object->SetDBField('PrimaryTranslation', $this->_getPrimaryTranslation($label)); } $this->_setPhraseModule($object); if ( $event->Special == 'export' || $event->Special == 'import' ) { $object->SetDBField('PhraseType', '|0|1|2|'); $object->SetDBField('Module', '|' . implode('|', array_keys($this->Application->ModuleInfo)) . '|'); + + $export_mode = $this->Application->GetVar('export_mode'); + + if ( $export_mode != 'lang' ) { + $object->SetDBField('ExportDataTypes', '|' . $export_mode . '|'); + } } } /** * Returns given phrase translation on primary language * * @param string $phrase * @return string * @access protected */ protected function _getPrimaryTranslation($phrase) { $sql = 'SELECT l' . $this->Application->GetDefaultLanguageId() . '_Translation FROM ' . $this->Application->getUnitOption($this->Prefix, 'TableName') . ' WHERE PhraseKey = ' . $this->Conn->qstr( mb_strtoupper($phrase) ); return $this->Conn->GetOne($sql); } /** * Sets new phrase module * * @param kDBItem $object * @return void * @access protected */ protected function _setPhraseModule(&$object) { $last_module = $this->Application->GetVar('last_module'); if ( $last_module ) { $object->SetDBField('Module', $last_module); } } /** * Forces create to use live table * * @param kEvent $event * @return void * @access protected */ protected function OnCreate(kEvent $event) { if ( $this->Application->GetVar($event->Prefix . '_label') ) { $object = $event->getObject(Array ('skip_autoload' => true)); /* @var $object kDBItem */ if ( $this->Application->GetVar('m_lang') != $this->Application->GetVar('lang_id') ) { $object->SwitchToLive(); } $this->returnToOriginalTemplate($event); } parent::OnCreate($event); } /** * Redirects to original template after phrase is being update * * @param kEvent $event * @return void * @access protected */ protected function OnUpdate(kEvent $event) { if ( $this->Application->GetVar($event->Prefix . '_label') ) { $this->returnToOriginalTemplate($event); } parent::OnUpdate($event); } /** * Returns to original template after phrase adding/editing * * @param kEvent $event * @return void * @access protected */ protected function returnToOriginalTemplate(kEvent $event) { $next_template = $this->Application->GetVar('next_template'); if ( $next_template ) { $event->redirect = $next_template; $event->SetRedirectParam('opener', 's'); } } /** * Set last change info, when phrase is created * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemCreate(kEvent $event) { parent::OnBeforeItemCreate($event); $object = $event->getObject(); /* @var $object kDBItem */ $primary_language_id = $this->Application->GetDefaultLanguageId(); if ( !$object->GetDBField('l' . $primary_language_id . '_Translation') ) { // no translation on primary language -> try to copy from other language $src_languages = Array ('lang_id', 'm_lang'); // editable language, theme language foreach ($src_languages as $src_language) { $src_language = $this->Application->GetVar($src_language); $src_value = $src_language ? $object->GetDBField('l' . $src_language . '_Translation') : false; if ( $src_value ) { $object->SetDBField('l' . $primary_language_id . '_Translation', $src_value); break; } } } $this->_phraseChanged($event); } /** * Update last change info, when phrase is updated * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemUpdate(kEvent $event) { parent::OnBeforeItemUpdate($event); $this->_phraseChanged($event); } /** * Set's phrase key and last change info, used for phrase updating and loading * * @param kEvent $event */ function _phraseChanged($event) { $object = $event->getObject(); /* @var $object kDBItem */ $label = $object->GetDBField('Phrase'); $object->SetDBField('PhraseKey', mb_strtoupper($label)); $object->SetDBField('PhraseType', $this->_getPhraseType($label)); if ( $this->translationChanged($object) ) { $object->SetDBField('LastChanged_date', adodb_mktime() ); $object->SetDBField('LastChanged_time', adodb_mktime() ); $object->SetDBField('LastChangeIP', $_SERVER['REMOTE_ADDR']); } $this->Application->Session->SetCookie('last_module', $object->GetDBField('Module')); } /** * Returns phrase type, that corresponds given phrase label * * @param string $label * @return int * @access protected */ protected function _getPhraseType($label) { $phrase_type_map = Array ( 'LU' => Language::PHRASE_TYPE_FRONT, 'LA' => Language::PHRASE_TYPE_ADMIN, 'LC' => Language::PHRASE_TYPE_COMMON ); $label = mb_strtoupper($label); $label_prefix = substr($label, 0, 2); return isset($phrase_type_map[$label_prefix]) ? $phrase_type_map[$label_prefix] : Language::PHRASE_TYPE_COMMON; } /** * Checks, that at least one of phrase's translations was changed * * @param kDBItem $object * @return bool */ function translationChanged(&$object) { $changed_fields = array_keys( $object->GetChangedFields() ); $translation_fields = Array ('Translation', 'HintTranslation', 'ColumnTranslation'); foreach ($changed_fields as $changed_field) { $changed_field = preg_replace('/^l[\d]+_/', '', $changed_field); if ( in_array($changed_field, $translation_fields) ) { return true; } } return false; } /** * Changes default module to custom (when available) * * @param kEvent $event * @return void * @access protected */ protected function OnAfterConfigRead(kEvent $event) { parent::OnAfterConfigRead($event); if ($this->Application->findModule('Name', 'Custom')) { $fields = $this->Application->getUnitOption($event->Prefix, 'Fields'); $fields['Module']['default'] = 'Custom'; $this->Application->setUnitOption($event->Prefix, 'Fields', $fields); } // make sure, that PrimaryTranslation column always refrers to primary language column $language_id = $this->Application->GetVar('lang_id'); if (!$language_id) { $language_id = $this->Application->GetVar('m_lang'); } $primary_language_id = $this->Application->GetDefaultLanguageId(); $calculated_fields = $this->Application->getUnitOption($event->Prefix, 'CalculatedFields'); foreach ($calculated_fields[''] as $field_name => $field_expression) { $field_expression = str_replace('%5$s', $language_id, $field_expression); $field_expression = str_replace('%4$s', $primary_language_id, $field_expression); $calculated_fields[''][$field_name] = $field_expression; } $this->Application->setUnitOption($event->Prefix, 'CalculatedFields', $calculated_fields); if ($this->Application->GetVar('regional')) { $this->Application->setUnitOption($event->Prefix, 'PopulateMlFields', true); } } /** * Saves changes & changes language * * @param kEvent $event * @return void * @access protected */ protected function OnPreSaveAndChangeLanguage(kEvent $event) { $label = $this->Application->GetVar($event->getPrefixSpecial() . '_label'); if ( $label && !$this->UseTempTables($event) ) { $phrase_id = $this->_getPhraseId($label); if ( $phrase_id ) { $event->CallSubEvent('OnUpdate'); $event->SetRedirectParam('opener', 's'); } else { $event->CallSubEvent('OnCreate'); $event->SetRedirectParam('opener', 's'); } if ( $event->status != kEvent::erSUCCESS ) { return; } $event->SetRedirectParam($event->getPrefixSpecial() . '_event', 'OnPreparePhrase'); $event->SetRedirectParam('pass_events', true); } if ( $this->Application->GetVar('simple_mode') ) { $event->SetRedirectParam('simple_mode', 1); } parent::OnPreSaveAndChangeLanguage($event); } /** * Prepare temp tables and populate it * with items selected in the grid * * @param kEvent $event * @return void * @access protected */ protected function OnEdit(kEvent $event) { parent::OnEdit($event); // use language from grid, instead of primary language used by default $event->SetRedirectParam('m_lang', $this->Application->GetVar('m_lang')); } /** * Stores ids of selected phrases and redirects to export language step 1 * * @param kEvent $event * @return void * @access protected */ protected function OnExportPhrases(kEvent $event) { if ( $this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1) ) { $event->status = kEvent::erFAIL; return; } $this->Application->setUnitOption('phrases', 'AutoLoad', false); $this->StoreSelectedIDs($event); $this->Application->StoreVar('export_language_ids', $this->Application->GetVar('m_lang')); $event->setRedirectParams( Array ( 'phrases.export_event' => 'OnNew', 'pass' => 'all,phrases.export', 'export_mode' => $event->Prefix, ) ); } } \ No newline at end of file Index: branches/5.2.x/core/units/languages/languages_event_handler.php =================================================================== --- branches/5.2.x/core/units/languages/languages_event_handler.php (revision 15221) +++ branches/5.2.x/core/units/languages/languages_event_handler.php (revision 15222) @@ -1,685 +1,698 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); class LanguagesEventHandler extends kDBEventHandler { /** * Allows to override standard permission mapping * * @return void * @access protected * @see kEventHandler::$permMapping */ protected function mapPermissions() { parent::mapPermissions(); $permissions = Array ( 'OnChangeLanguage' => Array ('self' => true), 'OnSetPrimary' => Array ('self' => 'advanced:set_primary|add|edit'), 'OnImportLanguage' => Array ('self' => 'advanced:import'), 'OnExportLanguage' => Array ('self' => 'advanced:export'), 'OnExportProgress' => Array ('self' => 'advanced:export'), 'OnReflectMultiLingualFields' => Array ('self' => 'view'), 'OnSynchronizeLanguages' => Array ('self' => 'edit'), ); $this->permMapping = array_merge($this->permMapping, $permissions); } /** * Checks user permission to execute given $event * * @param kEvent $event * @return bool * @access public */ public function CheckPermission(kEvent $event) { if ( $event->Name == 'OnItemBuild' ) { // check permission without using $event->getSection(), // so first cache rebuild won't lead to "ldefault_Name" field being used return true; } return parent::CheckPermission($event); } /** * Allows to get primary language object * * @param kEvent $event * @return int * @access public */ public function getPassedID(kEvent $event) { if ( $event->Special == 'primary' ) { return $this->Application->GetDefaultLanguageId(); } return parent::getPassedID($event); } /** * [HOOK] Updates table structure on new language adding/removing language * * @param kEvent $event */ function OnReflectMultiLingualFields($event) { if ($this->Application->GetVar('ajax') == 'yes') { $event->status = kEvent::erSTOP; } if (is_object($event->MasterEvent)) { if ($event->MasterEvent->status != kEvent::erSUCCESS) { // only rebuild when all fields are validated return ; } if (($event->MasterEvent->Name == 'OnSave') && !$this->Application->GetVar('new_language')) { // only rebuild during new language adding return ; } } $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); /* @var $ml_helper kMultiLanguageHelper */ $ml_helper->massCreateFields(); $event->SetRedirectParam('action_completed', 1); } /** * Allows to set selected language as primary * * @param kEvent $event */ function OnSetPrimary($event) { if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { $event->status = kEvent::erFAIL; return; } $this->StoreSelectedIDs($event); $ids = $this->getSelectedIDs($event); if ($ids) { $id = array_shift($ids); $object = $event->getObject( Array('skip_autoload' => true) ); /* @var $object LanguagesItem */ $object->Load($id); $object->copyMissingData( $object->setPrimary() ); } } /** * [HOOK] Reset primary status of other languages if we are saving primary language * * @param kEvent $event */ function OnUpdatePrimary($event) { if ($event->MasterEvent->status != kEvent::erSUCCESS) { return ; } $object = $event->getObject( Array('skip_autoload' => true) ); /* @var $object LanguagesItem */ $object->SwitchToLive(); // set primary for each languages, that have this checkbox checked $ids = explode(',', $event->MasterEvent->getEventParam('ids')); foreach ($ids as $id) { $object->Load($id); if ($object->GetDBField('PrimaryLang')) { $object->copyMissingData( $object->setPrimary(true, false) ); } if ($object->GetDBField('AdminInterfaceLang')) { $object->setPrimary(true, true); } } // if no primary language left, then set primary last language (not to load again) from edited list $sql = 'SELECT '.$object->IDField.' FROM '.$object->TableName.' WHERE PrimaryLang = 1'; $primary_language = $this->Conn->GetOne($sql); if (!$primary_language) { $object->setPrimary(false, false); // set primary language } $sql = 'SELECT '.$object->IDField.' FROM '.$object->TableName.' WHERE AdminInterfaceLang = 1'; $primary_language = $this->Conn->GetOne($sql); if (!$primary_language) { $object->setPrimary(false, true); // set admin interface language } } /** * Prefills options with dynamic values * * @param kEvent $event * @return void * @access protected */ protected function OnAfterConfigRead(kEvent $event) { parent::OnAfterConfigRead($event); $fields = $this->Application->getUnitOption($event->Prefix, 'Fields'); // set dynamic hints for options in date format fields $options = $fields['InputDateFormat']['options']; if ($options) { foreach ($options as $i => $v) { $options[$i] = $v . ' (' . adodb_date($i) . ')'; } $fields['InputDateFormat']['options'] = $options; } $options = $fields['InputTimeFormat']['options']; if ($options) { foreach ($options as $i => $v) { $options[$i] = $v . ' (' . adodb_date($i) . ')'; } $fields['InputTimeFormat']['options'] = $options; } $this->Application->setUnitOption($event->Prefix, 'Fields', $fields); } /** * Occurs before updating item * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemUpdate(kEvent $event) { parent::OnBeforeItemUpdate($event); $object = $event->getObject(); /* @var $object kDBItem */ $status_fields = $this->Application->getUnitOption($event->Prefix, 'StatusField'); $status_field = array_shift($status_fields); if ( $object->GetDBField('PrimaryLang') == 1 && $object->GetDBField($status_field) == 0 ) { $object->SetDBField($status_field, 1); } } /** * Shows only enabled languages on front * * @param kEvent $event * @return void * @access protected * @see kDBEventHandler::OnListBuild() */ protected function SetCustomQuery(kEvent $event) { parent::SetCustomQuery($event); $object = $event->getObject(); /* @var $object kDBList */ if ( in_array($event->Special, Array ('enabled', 'selected', 'available')) ) { $object->addFilter('enabled_filter', '%1$s.Enabled = ' . STATUS_ACTIVE); } // site domain language picker if ( $event->Special == 'selected' || $event->Special == 'available' ) { $edit_picker_helper = $this->Application->recallObject('EditPickerHelper'); /* @var $edit_picker_helper EditPickerHelper */ $edit_picker_helper->applyFilter($event, 'Languages'); } // apply domain-based language filtering $languages = $this->Application->siteDomainField('Languages'); if ( strlen($languages) ) { $languages = explode('|', substr($languages, 1, -1)); $object->addFilter('domain_filter', '%1$s.LanguageId IN (' . implode(',', $languages) . ')'); } } /** * Copy labels from another language * * @param kEvent $event * @return void * @access protected */ protected function OnAfterItemCreate(kEvent $event) { parent::OnAfterItemCreate($event); $object = $event->getObject(); /* @var $object kDBItem */ $src_language = $object->GetDBField('CopyFromLanguage'); if ( $object->GetDBField('CopyLabels') && $src_language ) { $dst_language = $object->GetID(); // 1. schedule data copy after OnSave event is executed $var_name = $event->getPrefixSpecial() . '_copy_data' . $this->Application->GetVar('m_wid'); $pending_actions = $this->Application->RecallVar($var_name, Array ()); if ( $pending_actions ) { $pending_actions = unserialize($pending_actions); } $pending_actions[$src_language] = $dst_language; $this->Application->StoreVar($var_name, serialize($pending_actions)); $object->SetDBField('CopyLabels', 0); } } /** * Saves language from temp table to live * * @param kEvent $event * @return void * @access protected */ protected function OnSave(kEvent $event) { parent::OnSave($event); if ( $event->status != kEvent::erSUCCESS ) { return; } $var_name = $event->getPrefixSpecial() . '_copy_data' . $this->Application->GetVar('m_wid'); $pending_actions = $this->Application->RecallVar($var_name, Array ()); if ( $pending_actions ) { $pending_actions = unserialize($pending_actions); } // create multilingual columns for phrases & email events table first (actual for 6+ language) $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); /* @var $ml_helper kMultiLanguageHelper */ $ml_helper->createFields('phrases'); $ml_helper->createFields('emailevents'); foreach ($pending_actions as $src_language => $dst_language) { // phrases import $sql = 'UPDATE ' . $this->Application->getUnitOption('phrases', 'TableName') . ' SET l' . $dst_language . '_Translation = l' . $src_language . '_Translation'; $this->Conn->Query($sql); // events import $sql = 'UPDATE ' . $this->Application->getUnitOption('emailevents', 'TableName') . ' SET l' . $dst_language . '_Subject = l' . $src_language . '_Subject, - l' . $dst_language . '_Body = l' . $src_language . '_Body'; + l' . $dst_language . '_HtmlBody = l' . $src_language . '_HtmlBody, + l' . $dst_language . '_PlainTextBody = l' . $src_language . '_PlainTextBody'; $this->Conn->Query($sql); } $this->Application->RemoveVar($var_name); $event->CallSubEvent('OnReflectMultiLingualFields'); $event->CallSubEvent('OnUpdatePrimary'); } /** * Prepare temp tables for creating new item * but does not create it. Actual create is * done in OnPreSaveCreated * * @param kEvent $event * @return void * @access protected */ protected function OnPreCreate(kEvent $event) { parent::OnPreCreate($event); $object = $event->getObject(); /* @var $object kDBItem */ $object->SetDBField('CopyLabels', 1); $sql = 'SELECT ' . $object->IDField . ' FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . ' WHERE PrimaryLang = 1'; $primary_lang_id = $this->Conn->GetOne($sql); $object->SetDBField('CopyFromLanguage', $primary_lang_id); $object->SetDBField('SynchronizationModes', Language::SYNCHRONIZE_DEFAULT); } /** * Sets new language mark * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeDeleteFromLive(kEvent $event) { parent::OnBeforeDeleteFromLive($event); $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); $sql = 'SELECT ' . $id_field . ' FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . ' WHERE ' . $id_field . ' = ' . $event->getEventParam('id'); $id = $this->Conn->GetOne($sql); if ( !$id ) { $this->Application->SetVar('new_language', 1); } } function OnChangeLanguage($event) { $language_id = $this->Application->GetVar('language'); $language_field = $this->Application->isAdmin ? 'AdminLanguage' : 'FrontLanguage'; $this->Application->SetVar('m_lang', $language_id); // set new language for this session $this->Application->Session->SetField('Language', $language_id); // remember last user language if ($this->Application->RecallVar('user_id') == USER_ROOT) { $this->Application->StorePersistentVar($language_field, $language_id); } else { $object = $this->Application->recallObject('u.current'); /* @var $object kDBItem */ $object->SetDBField($language_field, $language_id); $object->Update(); } // without this language change in admin will cause erase of last remembered tree section $this->Application->SetVar('skip_last_template', 1); } /** * Parse language XML file into temp tables and redirect to progress bar screen * * @param kEvent $event */ function OnImportLanguage($event) { if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { $event->status = kEvent::erFAIL; return; } $items_info = $this->Application->GetVar('phrases_import'); if ($items_info) { list ($id, $field_values) = each($items_info); $object = $this->Application->recallObject('phrases.import', 'phrases', Array('skip_autoload' => true)); /* @var $object kDBItem */ $object->setID($id); $object->SetFieldsFromHash($field_values, $this->getRequestProtectedFields($field_values)); if (!$object->Validate()) { $event->status = kEvent::erFAIL; return ; } $filename = $object->GetField('LangFile', 'full_path'); if (!filesize($filename)) { $object->SetError('LangFile', 'la_empty_file', 'la_EmptyFile'); $event->status = kEvent::erFAIL; } $language_import_helper = $this->Application->recallObject('LanguageImportHelper'); /* @var $language_import_helper LanguageImportHelper */ $language_import_helper->performImport( $filename, $object->GetDBField('PhraseType'), $object->GetDBField('Module'), $object->GetDBField('ImportOverwrite') ? LANG_OVERWRITE_EXISTING : LANG_SKIP_EXISTING ); // delete uploaded language pack after import is finished unlink($filename); $event->SetRedirectParam('opener', 'u'); } } /** * Stores ids of selected languages and redirects to export language step 1 * * @param kEvent $event */ function OnExportLanguage($event) { if ( $this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1) ) { $event->status = kEvent::erFAIL; return; } $this->Application->setUnitOption('phrases', 'AutoLoad', false); $this->StoreSelectedIDs($event); $this->Application->StoreVar('export_language_ids', implode(',', $this->getSelectedIDs($event))); $event->setRedirectParams( Array ( 'phrases.export_event' => 'OnNew', 'pass' => 'all,phrases.export', 'export_mode' => $event->Prefix, ) ); } /** * Saves selected languages to xml file passed * * @param kEvent $event */ function OnExportProgress($event) { $items_info = $this->Application->GetVar('phrases_export'); if ( $items_info ) { list($id, $field_values) = each($items_info); $object = $this->Application->recallObject('phrases.export', null, Array ('skip_autoload' => true)); /* @var $object kDBItem */ $object->setID($id); $object->SetFieldsFromHash($field_values, $this->getRequestProtectedFields($field_values)); if ( !$object->Validate() ) { $event->status = kEvent::erFAIL; return; } $file_helper = $this->Application->recallObject('FileHelper'); /* @var $file_helper FileHelper */ $file_helper->CheckFolder(EXPORT_PATH); if ( !is_writable(EXPORT_PATH) ) { $event->status = kEvent::erFAIL; $object->SetError('LangFile', 'write_error', 'la_ExportFolderNotWritable'); return; } if ( substr($field_values['LangFile'], -5) != '.lang' ) { $field_values['LangFile'] .= '.lang'; } $filename = EXPORT_PATH . '/' . $field_values['LangFile']; $language_import_helper = $this->Application->recallObject('LanguageImportHelper'); /* @var $language_import_helper LanguageImportHelper */ if ( $object->GetDBField('DoNotEncode') ) { $language_import_helper->setExportEncoding('plain'); } + $data_types = Array ( + 'phrases' => 'ExportPhrases', + 'emailevents' => 'ExportEmailEvents', + 'country-state' => 'ExportCountries' + ); + $export_mode = $this->Application->GetVar('export_mode'); + $allowed_data_types = explode('|', substr($field_values['ExportDataTypes'], 1, -1)); if ( $export_mode == $event->Prefix ) { - $language_import_helper->setExportLimit('phrases', $field_values['ExportPhrases']); - $language_import_helper->setExportLimit('emailevents', $field_values['ExportEmailEvents']); + foreach ($data_types as $prefix => $export_limit_field) { + $export_limit = in_array($prefix, $allowed_data_types) ? $field_values[$export_limit_field] : '-'; + $language_import_helper->setExportLimit($prefix, $export_limit); + } } else { - $language_import_helper->setExportLimit($export_mode); - $language_import_helper->setExportLimit($export_mode == 'phrases' ? 'emailevents' : 'phrases', '-'); + foreach ($data_types as $prefix => $export_limit_field) { + $export_limit = in_array($prefix, $allowed_data_types) ? null : '-'; + $language_import_helper->setExportLimit($prefix, $export_limit); + } } $lang_ids = explode(',', $this->Application->RecallVar('export_language_ids')); $language_import_helper->performExport($filename, $field_values['PhraseType'], $lang_ids, $field_values['Module']); } $event->redirect = 'regional/languages_export_step2'; $event->SetRedirectParam('export_file', $field_values['LangFile']); } /** * Returns to previous template in opener stack * * @param kEvent $event * @return void * @access protected */ protected function OnGoBack(kEvent $event) { $event->SetRedirectParam('opener', 'u'); } function OnScheduleTopFrameReload($event) { $this->Application->StoreVar('RefreshTopFrame',1); } /** * Do now allow deleting current language * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemDelete(kEvent $event) { parent::OnBeforeItemDelete($event); $object = $event->getObject(); /* @var $object kDBItem */ if ( $object->GetDBField('PrimaryLang') || $object->GetDBField('AdminInterfaceLang') || $object->GetID() == $this->Application->GetVar('m_lang') ) { $event->status = kEvent::erFAIL; } } /** * Deletes phrases and email events on given language * * @param kEvent $event * @return void * @access protected */ protected function OnAfterItemDelete(kEvent $event) { parent::OnAfterItemDelete($event); $object = $event->getObject(); /* @var $object kDBItem */ // clean EmailEvents table $fields_hash = Array ( 'l' . $object->GetID() . '_Subject' => NULL, - 'l' . $object->GetID() . '_Body' => NULL, + 'l' . $object->GetID() . '_HtmlBody' => NULL, + 'l' . $object->GetID() . '_PlainTextBody' => NULL, ); $this->Conn->doUpdate($fields_hash, $this->Application->getUnitOption('emailevents', 'TableName'), 1); // clean Phrases table $fields_hash = Array ( 'l' . $object->GetID() . '_Translation' => NULL, 'l' . $object->GetID() . '_HintTranslation' => NULL, 'l' . $object->GetID() . '_ColumnTranslation' => NULL, ); $this->Conn->doUpdate($fields_hash, $this->Application->getUnitOption('phrases', 'TableName'), 1); } /** * Copy missing phrases across all system languages (starting from primary) * * @param kEvent $event * @return void * @access protected */ protected function OnSynchronizeLanguages($event) { if ( $this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1) ) { $event->status = kEvent::erFAIL; return; } $source_languages = $target_languages = Array (); // get language list with primary language first $sql = 'SELECT SynchronizationModes, LanguageId FROM ' . TABLE_PREFIX . 'Languages WHERE SynchronizationModes <> "" ORDER BY PrimaryLang DESC'; $languages = $this->Conn->GetCol($sql, 'LanguageId'); foreach ($languages as $language_id => $synchronization_modes) { $synchronization_modes = explode('|', substr($synchronization_modes, 1, -1)); if ( in_array(Language::SYNCHRONIZE_TO_OTHERS, $synchronization_modes) ) { $source_languages[] = $language_id; } if ( in_array(Language::SYNCHRONIZE_FROM_OTHERS, $synchronization_modes) ) { $target_languages[] = $language_id; } } foreach ($source_languages as $source_id) { foreach ($target_languages as $target_id) { if ( $source_id == $target_id ) { continue; } $sql = 'UPDATE ' . TABLE_PREFIX . 'LanguageLabels SET l' . $target_id . '_Translation = l' . $source_id . '_Translation WHERE COALESCE(l' . $target_id . '_Translation, "") = "" AND COALESCE(l' . $source_id . '_Translation, "") <> ""'; $this->Conn->Query($sql); } } } } \ No newline at end of file Index: branches/5.2.x/core/units/email_events/email_events_event_handler.php =================================================================== --- branches/5.2.x/core/units/email_events/email_events_event_handler.php (revision 15221) +++ branches/5.2.x/core/units/email_events/email_events_event_handler.php (revision 15222) @@ -1,649 +1,677 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); class EmailEventsEventsHandler extends kDBEventHandler { /** * Allows to override standard permission mapping * * @return void * @access protected * @see kEventHandler::$permMapping */ protected function mapPermissions() { parent::mapPermissions(); $permissions = Array ( 'OnFrontOnly' => Array ('self' => 'edit'), 'OnSaveSelected' => Array ('self' => 'view'), 'OnProcessEmailQueue' => Array ('self' => 'add|edit'), 'OnExportEmailEvents' => Array ('self' => 'view'), 'OnSuggestAddress' => Array ('self' => 'add|edit'), // events only for developers 'OnPreCreate' => Array ('self' => 'debug'), 'OnDelete' => Array ('self' => 'debug'), 'OnDeleteAll' => Array ('self' => 'debug'), 'OnMassDelete' => Array ('self' => 'debug'), 'OnMassApprove' => Array ('self' => 'debug'), 'OnMassDecline' => Array ('self' => 'debug'), ); $this->permMapping = array_merge($this->permMapping, $permissions); } /** * Changes permission section to one from REQUEST, not from config * * @param kEvent $event * @return bool * @access public */ public function CheckPermission(kEvent $event) { $module = $this->Application->GetVar('module'); if ( strlen($module) > 0 ) { // checking permission when lising module email events in separate section $module = explode(':', $module, 2); if ( count($module) == 1 ) { $main_prefix = $this->Application->findModule('Name', $module[0], 'Var'); } else { $exceptions = Array ('Category' => 'c', 'Users' => 'u'); $main_prefix = $exceptions[$module[1]]; } $section = $this->Application->getUnitOption($main_prefix . '.email', 'PermSection'); $event->setEventParam('PermSection', $section); } // checking permission when listing all email events when editing language return parent::CheckPermission($event); } /** * Apply any custom changes to list's sql query * * @param kEvent $event * @return void * @access protected * @see kDBEventHandler::OnListBuild() */ protected function SetCustomQuery(kEvent $event) { parent::SetCustomQuery($event); $object = $event->getObject(); /* @var $object kDBList */ if ( $event->Special == 'module' ) { $module = $this->Application->GetVar('module'); $object->addFilter('module_filter', '%1$s.Module = ' . $this->Conn->qstr($module)); } if ( !$event->Special && !$this->Application->isDebugMode() ) { // no special $object->addFilter('enabled_filter', '%1$s.Enabled <> ' . STATUS_DISABLED); } } /** * Prepares new kDBItem object * * @param kEvent $event * @return void * @access protected */ protected function OnNew(kEvent $event) { parent::OnNew($event); $mapping = Array ('conf' => 'VariableValue', 'site-domain' => 'DefaultEmailRecipients'); if ( isset($mapping[$event->Special]) ) { $object = $event->getObject(); /* @var $object kDBItem */ $target_object = $this->Application->recallObject($event->Special); /* @var $target_object kDBList */ $object->SetDBField('Recipients', $target_object->GetDBField($mapping[$event->Special])); } } /** * Set default headers * * @param kEvent $event * @return void * @access protected */ protected function OnPreCreate(kEvent $event) { parent::OnPreCreate($event); $object = $event->getObject(); /* @var $object kDBItem */ $object->SetDBField('Headers', $this->Application->ConfigValue('Smtp_DefaultHeaders')); + $this->setRequired($event); } /** * Sets status Front-End Only to selected email events * * @param kEvent $event */ function OnFrontOnly($event) { - if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + if ( $this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1) ) { $event->status = kEvent::erFAIL; - return ; + return; } $ids = implode(',', $this->StoreSelectedIDs($event)); $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); - $sql = 'UPDATE '.$table_name.' + $sql = 'UPDATE ' . $table_name . ' SET FrontEndOnly = 1 - WHERE EventId IN ('.$ids.')'; + WHERE EventId IN (' . $ids . ')'; $this->Conn->Query($sql); $this->clearSelectedIDs($event); } /** * Sets selected user to email events selected * * @param kEvent $event * @return void * @access protected */ protected function OnSelectUser(kEvent $event) { if ( $event->Special != 'module' ) { parent::OnSelectUser($event); return; } if ( $this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1) ) { $event->status = kEvent::erFAIL; return; } $items_info = $this->Application->GetVar('u'); if ( $items_info ) { $user_id = array_shift(array_keys($items_info)); $selected_ids = $this->getSelectedIDs($event, true); $ids = $this->Application->RecallVar($event->getPrefixSpecial() . '_selected_ids'); $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); $sql = 'UPDATE ' . $table_name . ' SET ' . $this->Application->RecallVar('dst_field') . ' = ' . $user_id . ' WHERE ' . $id_field . ' IN (' . $ids . ')'; $this->Conn->Query($sql); } $this->finalizePopup($event); } /** * Saves selected ids to session * * @param kEvent $event */ function OnSaveSelected($event) { $this->StoreSelectedIDs($event); } /** * Process emails from queue * * @param kEvent $event * @todo Move to MailingList */ function OnProcessEmailQueue($event) { $deliver_count = $event->getEventParam('deliver_count'); - if ($deliver_count === false) { + if ( $deliver_count === false ) { $deliver_count = $this->Application->ConfigValue('MailingListSendPerStep'); - if ($deliver_count === false) { + if ( $deliver_count === false ) { $deliver_count = 10; // 10 emails per script run (if not specified directly) } } $processing_type = $this->Application->GetVar('type'); - if ($processing_type = 'return_progress') { + if ( $processing_type = 'return_progress' ) { $email_queue_progress = $this->Application->RecallVar('email_queue_progress'); - if ($email_queue_progress === false) { + if ( $email_queue_progress === false ) { $emails_sent = 0; $sql = 'SELECT COUNT(*) FROM ' . TABLE_PREFIX . 'EmailQueue WHERE (SendRetries < 5) AND (LastSendRetry < ' . strtotime('-2 hours') . ')'; $total_emails = $this->Conn->GetOne($sql); - $this->Application->StoreVar('email_queue_progress', $emails_sent.':'.$total_emails); + $this->Application->StoreVar('email_queue_progress', $emails_sent . ':' . $total_emails); } else { list ($emails_sent, $total_emails) = explode(':', $email_queue_progress); } } $sql = 'SELECT * - FROM '.TABLE_PREFIX.'EmailQueue + FROM ' . TABLE_PREFIX . 'EmailQueue WHERE (SendRetries < 5) AND (LastSendRetry < ' . strtotime('-2 hours') . ') LIMIT 0,' . $deliver_count; $messages = $this->Conn->Query($sql); $message_count = count($messages); - if (!$message_count) { + if ( !$message_count ) { // no messages left to send in queue - if ($processing_type = 'return_progress') { + if ( $processing_type = 'return_progress' ) { $this->Application->RemoveVar('email_queue_progress'); $this->Application->Redirect($this->Application->GetVar('finish_template')); } - return ; + return; } $mailing_list_helper = $this->Application->recallObject('MailingListHelper'); /* @var $mailing_list_helper MailingListHelper */ $mailing_list_helper->processQueue($messages); - if ($processing_type = 'return_progress') { + if ( $processing_type = 'return_progress' ) { $emails_sent += $message_count; - if ($emails_sent >= $total_emails) { + if ( $emails_sent >= $total_emails ) { $this->Application->RemoveVar('email_queue_progress'); $this->Application->Redirect($this->Application->GetVar('finish_template')); } - $this->Application->StoreVar('email_queue_progress', $emails_sent.':'.$total_emails); + $this->Application->StoreVar('email_queue_progress', $emails_sent . ':' . $total_emails); $event->status = kEvent::erSTOP; echo ($emails_sent / $total_emails) * 100; } } /** * Prefills module dropdown * * @param kEvent $event * @return void * @access protected */ protected function OnAfterConfigRead(kEvent $event) { parent::OnAfterConfigRead($event); $options = Array (); foreach ($this->Application->ModuleInfo as $module_name => $module_info) { - if ($module_name == 'In-Portal') { + if ( $module_name == 'In-Portal' ) { continue; } $options[$module_name] = $module_name; } $fields = $this->Application->getUnitOption($event->Prefix, 'Fields'); $fields['Module']['options'] = $options; $this->Application->setUnitOption($event->Prefix, 'Fields', $fields); - if ($this->Application->GetVar('regional')) { + if ( $this->Application->GetVar('regional') ) { $this->Application->setUnitOption($event->Prefix, 'PopulateMlFields', true); } } /** * Prepare temp tables and populate it * with items selected in the grid * * @param kEvent $event * @return void * @access protected */ protected function OnEdit(kEvent $event) { parent::OnEdit($event); // use language from grid, instead of primary language used by default $event->SetRedirectParam('m_lang', $this->Application->GetVar('m_lang')); } /** * Fixes default recipient type * * @param kEvent $event * @return void * @access protected */ protected function OnAfterItemLoad(kEvent $event) { parent::OnAfterItemLoad($event); $object = $event->getObject(); /* @var $object kDBItem */ - if (!$this->Application->isDebugMode(false)) { - if ($object->GetDBField('AllowChangingRecipient')) { + if ( !$this->Application->isDebugMode(false) ) { + if ( $object->GetDBField('AllowChangingRecipient') ) { $object->SetDBField('RecipientType', EmailEvent::RECIPIENT_TYPE_TO); } else { $object->SetDBField('RecipientType', EmailEvent::RECIPIENT_TYPE_CC); } } // process replacement tags $records = Array (); $replacement_tags = $object->GetDBField('ReplacementTags'); $replacement_tags = $replacement_tags ? unserialize($replacement_tags) : Array (); foreach ($replacement_tags as $tag => $replacement) { $records[] = Array ('Tag' => $tag, 'Replacement' => $replacement); } $minput_helper = $this->Application->recallObject('MInputHelper'); /* @var $minput_helper MInputHelper */ $xml = $minput_helper->prepareMInputXML($records, Array ('Tag', 'Replacement')); $object->SetDBField('ReplacementTagsXML', $xml); + + $this->setRequired($event); } /** * Performs custom validation + keep read-only fields * * @param kEvent $event */ function _itemChanged($event) { $object = $event->getObject(); /* @var $object kDBItem */ // validate email subject and body for parsing errors $this->_validateEmailTemplate($object); // validate sender and recipient addresses - if ($object->GetDBField('CustomSender')) { + if ( $object->GetDBField('CustomSender') ) { $this->_validateAddress($event, 'Sender'); } $this->_validateAddress($event, 'Recipient'); - if (!$this->Application->isDebugMode(false)) { + if ( !$this->Application->isDebugMode(false) ) { // only allow to enable/disable event while in debug mode $to_restore = Array ('Enabled', 'AllowChangingSender', 'AllowChangingRecipient'); - if (!$object->GetOriginalField('AllowChangingSender')) { + if ( !$object->GetOriginalField('AllowChangingSender') ) { $to_restore = array_merge($to_restore, Array ('CustomSender', 'SenderName', 'SenderAddressType', 'SenderAddress')); } - if (!$object->GetOriginalField('AllowChangingRecipient')) { - $to_restore = array_merge($to_restore, Array ('CustomRecipient'/*, 'Recipients'*/)); + if ( !$object->GetOriginalField('AllowChangingRecipient') ) { + $to_restore = array_merge($to_restore, Array ('CustomRecipient' /*, 'Recipients'*/)); } // prevent specific fields from editing foreach ($to_restore as $restore_field) { $original_value = $object->GetOriginalField($restore_field); - if ($object->GetDBField($restore_field) != $original_value) { + if ( $object->GetDBField($restore_field) != $original_value ) { $object->SetDBField($restore_field, $original_value); } } } // process replacement tags if ( $object->GetDBField('ReplacementTagsXML') ) { $minput_helper = $this->Application->recallObject('MInputHelper'); /* @var $minput_helper MInputHelper */ $replacement_tags = Array (); - $records = $minput_helper->parseMInputXML( $object->GetDBField('ReplacementTagsXML') ); + $records = $minput_helper->parseMInputXML($object->GetDBField('ReplacementTagsXML')); foreach ($records as $record) { - $replacement_tags[ trim($record['Tag']) ] = trim($record['Replacement']); + $replacement_tags[trim($record['Tag'])] = trim($record['Replacement']); } $object->SetDBField('ReplacementTags', $replacement_tags ? serialize($replacement_tags) : NULL); } if ( $this->translationChanged($object) ) { $object->SetDBField('LastChanged_date', TIMENOW); $object->SetDBField('LastChanged_time', TIMENOW); } + + $this->setRequired($event); + } + + /** + * Dynamically changes required fields + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function setRequired(kEvent $event) + { + $object = $event->getObject(); + /* @var $object kDBItem */ + + $language_prefix = 'l' . $this->Application->GetVar('m_lang') . '_'; + + $object->setRequired($language_prefix . 'HtmlBody', !$object->GetField('PlainTextBody')); + $object->setRequired($language_prefix . 'PlainTextBody', !$object->GetField('HtmlBody')); } /** * Checks, that at least one of phrase's translations was changed * * @param kDBItem $object * @return bool */ - function translationChanged(&$object) + function translationChanged($object) { - $changed_fields = array_keys( $object->GetChangedFields() ); - $translation_fields = Array ('Subject', 'Body'); + $changed_fields = array_keys($object->GetChangedFields()); + $translation_fields = Array ('Subject', 'HtmlBody', 'PlainTextBody'); foreach ($changed_fields as $changed_field) { $changed_field = preg_replace('/^l[\d]+_/', '', $changed_field); if ( in_array($changed_field, $translation_fields) ) { return true; } } return false; } /** * Validates address using given field prefix * * @param kEvent $event * @param string $field_prefix */ function _validateAddress($event, $field_prefix) { $object = $event->getObject(); /* @var $object kDBItem */ $address_type = $object->GetDBField($field_prefix . 'AddressType'); $object->setRequired($field_prefix . 'Address', $address_type > 0); $address = $object->GetDBField($field_prefix . 'Address'); - if (!$address) { + if ( !$address ) { // don't validate against empty address - return ; + return; } switch ($address_type) { case EmailEvent::ADDRESS_TYPE_EMAIL: - if (!preg_match('/^(' . REGEX_EMAIL_USER . '@' . REGEX_EMAIL_DOMAIN . ')$/i', $address)) { + if ( !preg_match('/^(' . REGEX_EMAIL_USER . '@' . REGEX_EMAIL_DOMAIN . ')$/i', $address) ) { $object->SetError($field_prefix . 'Address', 'invalid_email'); } break; case EmailEvent::ADDRESS_TYPE_USER: $sql = 'SELECT PortalUserId FROM ' . TABLE_PREFIX . 'Users WHERE Username = ' . $this->Conn->qstr($address); - if (!$this->Conn->GetOne($sql)) { + if ( !$this->Conn->GetOne($sql) ) { $object->SetError($field_prefix . 'Address', 'invalid_user'); } break; case EmailEvent::ADDRESS_TYPE_GROUP: $sql = 'SELECT GroupId FROM ' . TABLE_PREFIX . 'UserGroups WHERE Name = ' . $this->Conn->qstr($address); - if (!$this->Conn->GetOne($sql)) { + if ( !$this->Conn->GetOne($sql) ) { $object->SetError($field_prefix . 'Address', 'invalid_group'); } break; } } /** * Don't allow to enable/disable events in non-debug mode * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemCreate(kEvent $event) { parent::OnBeforeItemCreate($event); $this->_itemChanged($event); } /** * Don't allow to enable/disable events in non-debug mode * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemUpdate(kEvent $event) { parent::OnBeforeItemUpdate($event); $this->_itemChanged($event); } /** * Suggest address based on typed address and selected address type * * @param kEvent $event */ function OnSuggestAddress($event) { $event->status = kEvent::erSTOP; $address_type = $this->Application->GetVar('type'); $address = $this->Application->GetVar('value'); $limit = $this->Application->GetVar('limit'); if ( !$limit ) { $limit = 20; } switch ($address_type) { case EmailEvent::ADDRESS_TYPE_EMAIL: $field = 'Email'; $table_name = TABLE_PREFIX . 'Users'; break; case EmailEvent::ADDRESS_TYPE_USER: $field = 'Username'; $table_name = TABLE_PREFIX . 'Users'; break; case EmailEvent::ADDRESS_TYPE_GROUP: $field = 'Name'; $table_name = TABLE_PREFIX . 'UserGroups'; break; default: $field = $table_name = ''; break; } if ( $field ) { $sql = 'SELECT DISTINCT ' . $field . ' FROM ' . $table_name . ' WHERE ' . $field . ' LIKE ' . $this->Conn->qstr($address . '%') . ' ORDER BY ' . $field . ' ASC LIMIT 0,' . $limit; $data = $this->Conn->GetCol($sql); } else { $data = Array (); } $this->Application->XMLHeader(); echo '<suggestions>'; foreach ($data as $item) { echo '<item>' . htmlspecialchars($item) . '</item>'; } echo '</suggestions>'; } /** * Validates subject and body fields of Email template + * * @param kDBItem $object + * @return void + * @access protected */ - function _validateEmailTemplate(&$object) + protected function _validateEmailTemplate($object) { $this->parseField($object, 'Subject'); - $this->parseField($object, 'Body'); + $this->parseField($object, 'HtmlBody'); + $this->parseField($object, 'PlainTextBody'); } /** * Parses contents of given object field and sets error, when invalid in-portal tags found * @param kDBItem $object * @param string $field * @return void + * @access protected */ - function parseField(&$object, $field) + protected function parseField($object, $field) { $this->Application->InitParser(); try { $this->Application->Parser->CompileRaw($object->GetField($field), 'email_template'); } catch (ParserException $e) { if ( $this->Application->isDebugMode() ) { $this->Application->Debugger->appendHTML('<b style="color: red;">Error in Email Template:</b> ' . $e->getMessage() . ' (line: ' . $e->getLine() . ')'); } $object->SetError($field, 'parsing_error'); } } /** * Stores ids of selected phrases and redirects to export language step 1 * * @param kEvent $event * @return void * @access protected */ protected function OnExportEmailEvents(kEvent $event) { if ( $this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1) ) { $event->status = kEvent::erFAIL; return; } $this->Application->setUnitOption('phrases', 'AutoLoad', false); $this->StoreSelectedIDs($event); $this->Application->StoreVar('export_language_ids', $this->Application->GetVar('m_lang')); $event->setRedirectParams( Array ( 'phrases.export_event' => 'OnNew', 'pass' => 'all,phrases.export', 'export_mode' => $event->Prefix, ) ); } } \ No newline at end of file Index: branches/5.2.x/core/units/email_events/email_events_config.php =================================================================== --- branches/5.2.x/core/units/email_events/email_events_config.php (revision 15221) +++ branches/5.2.x/core/units/email_events/email_events_config.php (revision 15222) @@ -1,264 +1,265 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); $config = Array ( 'Prefix' => 'emailevents', 'ItemClass' => Array ('class' => 'kDBItem', 'file' => '', 'build_event' => 'OnItemBuild'), 'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'), 'EventHandlerClass' => Array ('class' => 'EmailEventsEventsHandler', 'file' => 'email_events_event_handler.php', 'build_event' => 'OnBuild'), 'TagProcessorClass' => Array ('class' => 'EmailEventTagProcessor', 'file' => 'email_event_tp.php', 'build_event' => 'OnBuild'), 'AutoLoad' => true, 'QueryString' => Array ( 1 => 'id', 2 => 'Page', 3 => 'PerPage', 4 => 'event', 5 => 'mode', ), 'IDField' => 'EventId', 'StatusField' => Array ('Enabled'), 'TitleField' => 'Event', 'TitlePresets' => Array ( 'default' => Array ( 'new_status_labels' => Array ('emailevents' => '!la_title_Adding_E-mail!'), 'edit_status_labels' => Array ('emailevents' => '!la_title_EditingEmailEvent!' /*'!la_title_Editing_E-mail!'*/), 'new_titlefield' => Array ('emailevents' => '!la_title_NewEmailEvent!'), ), // for separate grid with email editing 'email_message_list' => Array ( 'prefixes' => Array ('emailevents_List'), 'format' => "!la_title_EmailMessages!", 'toolbar_buttons' => Array ('new_item', 'edit', 'delete', 'approve', 'decline', 'frontend_mail', 'export', 'view', 'dbl-click'), ), 'email_message_edit' => Array ( 'prefixes' => Array ('emailevents'), 'format' => '#emailevents_status# - #emailevents_titlefield# - !la_section_General!', 'toolbar_buttons' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'), ), 'email_message_edit_settings' => Array ( 'prefixes' => Array ('emailevents'), 'format' => '#emailevents_status# - #emailevents_titlefield# - !la_section_Settings!', 'toolbar_buttons' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'), ), // for mass mailing 'email_send_form' => Array ('prefixes' => Array (), 'format' => '!la_title_SendEmail!'), 'email_send' => Array ('prefixes' => Array (), 'format' => '!la_title_SendingPreparedEmails!. !la_title_PleaseWait!'), 'email_send_complete' => Array ('prefixes' => Array (), 'format' => '!la_title_SendMailComplete!'), ), 'EditTabPresets' => Array ( 'Default' => Array ( 'general' => Array ('title' => 'la_tab_General', 't' => 'languages/email_message_edit', 'priority' => 1), 'settings' => Array ('title' => 'la_tab_Settings', 't' => 'languages/email_message_settings', 'priority' => 2), ), ), 'PermSection' => Array ('main' => 'in-portal:configemail'), 'Sections' => Array ( 'in-portal:configemail' => Array ( 'parent' => 'in-portal:site', 'icon' => 'email_templates', 'label' => 'la_tab_E-mails', 'url' => Array ('t' => 'languages/email_message_list', 'pass' => 'm'), 'permissions' => Array ('view', 'add', 'edit', 'delete'), 'priority' => 5, 'type' => stTREE, ), ), 'TableName' => TABLE_PREFIX . 'EmailEvents', 'ListSQLs' => Array ( '' => ' SELECT %1$s.* %2$s FROM %1$s', ), 'ListSortings' => Array ( '' => Array ( 'ForcedSorting' => Array ('Enabled' => 'desc'), 'Sorting' => Array ('Event' => 'asc'), ), 'module' => Array ( 'ForcedSorting' => Array ('Enabled' => 'desc'), 'Sorting' => Array ('Description' => 'asc') ), ), 'Fields' => Array ( 'EventId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0), 'Event' => Array ('type' => 'string', 'not_null' => 1, 'unique' => Array ('Type'), 'required' => 1, 'default' => ''), 'Headers' => Array ('type' => 'string', 'default' => NULL), 'ReplacementTags' => Array ('type' => 'string', 'default' => NULL), 'AllowChangingSender' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0 ), 'CustomSender' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_opt_DefaultAddress', 1 => 'la_opt_CustomSender'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0 ), 'SenderName' => Array ('type' => 'string', 'max_len' => 255, 'not_null' => 1, 'default' => ''), 'SenderAddressType' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_opt_Email', 2 => 'la_opt_User'), 'use_phrases' => 1, 'not_null' => 1, 'error_field' => 'SenderAddress', 'default' => 0 ), 'SenderAddress' => Array ( 'type' => 'string', 'max_len' => 255, 'error_msgs' => Array ( 'invalid_email' => '!la_err_invalid_format!', 'invalid_user' => '!la_error_UserNotFound!', ), 'not_null' => 1, 'default' => '' ), 'AllowChangingRecipient' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0 ), 'CustomRecipient' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_opt_DefaultAddress', 1 => 'la_opt_CustomRecipients'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0 ), 'Recipients' => Array ('type' => 'string', 'default' => NULL), 'Subject' => Array ( 'type' => 'string', 'formatter' => 'kMultiLanguage', 'db_type' => 'text', 'error_msgs' => Array ('parsing_error' => '!la_error_ParsingError!'), 'required' => 1, 'default' => null ), - 'Body' => Array ( + 'HtmlBody' => Array ( 'type' => 'string', 'formatter' => 'kMultiLanguage', 'db_type' => 'longtext', 'error_msgs' => Array ('parsing_error' => '!la_error_ParsingError!'), - 'required' => 1, 'default' => null + 'default' => null ), - 'MessageType' => Array ( + 'PlainTextBody' => Array ( 'type' => 'string', - 'formatter' => 'kOptionsFormatter', 'options' => Array ('text' => 'la_Text', 'html' => 'la_Html'), 'use_phrases' => 1, - 'not_null' => 1, 'required' => 1, 'default' => 'text' + 'formatter' => 'kMultiLanguage', 'db_type' => 'longtext', + 'error_msgs' => Array ('parsing_error' => '!la_error_ParsingError!'), + 'default' => null ), 'Enabled' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 1 ), 'FrontEndOnly' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0 ), 'Module' => Array ( 'type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'not_null' => 1, 'required' => 1, 'default' => 'Core' ), 'Description' => Array ('type' => 'string', 'default' => NULL), 'Type' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Text_Admin', 0 => 'la_Text_User'), 'use_phrases' => 1, 'not_null' => 1, 'unique' => Array ('Event'), 'required' => 1, 'default' => 0 ), 'LastChanged' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL), ), 'VirtualFields' => Array ( 'RecipientType' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'To', 2 => 'Cc', 3 => 'Bcc'), 'default' => 1 ), 'RecipientName' => Array ('type' => 'string', 'max_len' => 255, 'default' => ''), 'RecipientAddressType' => Array ( 'type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_opt_Email', 2 => 'la_opt_User', 3 => 'la_opt_Group'), 'use_phrases' => 1, 'error_field' => 'RecipientAddress', 'default' => 0 ), 'RecipientAddress' => Array ( 'type' => 'string', 'max_len' => 255, 'error_msgs' => Array ( 'invalid_email' => '!la_err_invalid_format!', 'invalid_user' => '!la_error_UserNotFound!', 'invalid_group' => '!la_error_GroupNotFound!', ), 'default' => '' ), 'Tag' => Array ('type' => 'string', 'default' => ''), 'Replacement' => Array ('type' => 'string', 'default' => ''), 'ReplacementTagsXML' => Array ('type' => 'string', 'default' => ''), ), 'Grids' => Array ( // used on "Email Events" tab in language editing in "Regional" section 'Default' => Array ( 'Icons' => Array ( 'default' => 'icon16_item.png', 0 => 'icon16_disabled.png', 1 => 'icon16_item.png', ), 'Fields' => Array ( 'EventId' => Array ('title' => 'column:la_fld_Id', 'filter_block' => 'grid_range_filter', 'width' => 70, ), 'Description' => Array ('filter_block' => 'grid_like_filter', 'width' => 250, ), 'Event' => Array ('filter_block' => 'grid_like_filter', 'width' => 250, ), 'Module' => Array ('filter_block' => 'grid_multioptions_filter', 'width' => 100, ), 'Type' => Array ('filter_block' => 'grid_options_filter', 'width' => 120, ), 'Enabled' => Array ('title' => 'column:la_fld_Status', 'filter_block' => 'grid_options_filter', 'width' => 80, ), 'LastChanged' => Array ('title' => 'column:la_fld_Modified', 'filter_block' => 'grid_date_range_filter', 'width' => 150), ), ), // used on "Email Templates" section 'Emails' => Array ( 'Icons' => Array ( 'default' => 'icon16_item.png', 0 => 'icon16_disabled.png', 1 => 'icon16_item.png', ), 'Fields' => Array ( 'EventId' => Array ('title' => 'column:la_fld_Id', 'filter_block' => 'grid_range_filter', 'width' => 60, ), 'Event' => Array ('filter_block' => 'grid_like_filter', 'width' => 250, ), 'Subject' => Array ('filter_block' => 'grid_like_filter', 'no_special' => 0, 'width' => 300, ), 'Description' => Array ('filter_block' => 'grid_like_filter', 'width' => 250, ), 'Type' => Array ('filter_block' => 'grid_options_filter', 'width' => 60, ), 'Enabled' => Array ('filter_block' => 'grid_options_filter', 'width' => 70, ), 'Module' => Array ('filter_block' => 'grid_multioptions_filter', 'width' => 100, ), 'FrontEndOnly' => Array ('filter_block' => 'grid_options_filter', 'width' => 120, 'hidden' => 1), 'LastChanged' => Array ('title' => 'column:la_fld_Modified', 'filter_block' => 'grid_date_range_filter', 'width' => 150), ), ), ), ); \ No newline at end of file Index: branches/5.2.x/core/admin_templates/regional/email_messages_edit.tpl =================================================================== --- branches/5.2.x/core/admin_templates/regional/email_messages_edit.tpl (revision 15221) +++ branches/5.2.x/core/admin_templates/regional/email_messages_edit.tpl (revision 15222) @@ -1,76 +1,76 @@ <inp2:adm_SetPopupSize width="827" height="600"/> <inp2:m_include t="incs/header"/> <inp2:m_RenderElement name="combined_header" prefix="lang" section="in-portal:configure_lang" title_preset="email_messages_edit"/> <!-- ToolBar --> <table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <script type="text/javascript"> a_toolbar = new ToolBar(); a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() { submit_event('emailevents','<inp2:emailevents_SaveEvent/>'); } ) ); a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() { submit_event('emailevents','OnCancel'); } ) ); a_toolbar.AddButton( new ToolBarSeparator('sep1') ); - + a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() { go_to_id('emailevents', '<inp2:emailevents_PrevId/>'); } )); - + a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() { go_to_id('emailevents', '<inp2:emailevents_NextId/>'); } )); - + a_toolbar.Render(); - + <inp2:m_if check="emailevents_IsSingle"> a_toolbar.HideButton('prev'); a_toolbar.HideButton('next'); a_toolbar.HideButton('sep1'); <inp2:m_else/> <inp2:m_if check="emailevents_IsLast"> a_toolbar.DisableButton('next'); </inp2:m_if> <inp2:m_if check="emailevents_IsFirst"> a_toolbar.DisableButton('prev'); </inp2:m_if> </inp2:m_if> </script> </td> </tr> </tbody> </table> <inp2:emailevents_SaveWarning name="grid_save_warning"/> <inp2:emailevents_ErrorWarning name="form_error_warning"/> <input type="hidden" name="regional" value="<inp2:m_Get name='regional'/>"/> <div id="scroll_container"> <table class="edit-form"> <inp2:m_RenderElement name="subsection" title="la_section_General"/> <inp2:m_RenderElement name="inp_id_label" prefix="emailevents" field="EventId" title="la_fld_Id"/> <!--## <inp2:m_RenderElement name="inp_label" prefix="emailevents" field="Type" title="la_fld_Type"/> ##--> <inp2:lang_Field name="LanguageId" result_to_var="language_id"/> <inp2:m_RenderElement name="inp_edit_box_ml" prefix="emailevents" field="l{$language_id}_Subject" title="la_fld_Subject" size="60"/> - <inp2:m_RenderElement name="inp_edit_radio" prefix="emailevents" field="MessageType" title="la_fld_MessageType"/> <inp2:m_RenderElement name="inp_edit_textarea" prefix="emailevents" field="Headers" title="la_fld_ExtraHeaders" allow_html="0" control_options="{min_height: 50}" rows="3" cols="60"/> <inp2:m_RenderElement name="subsection" title="la_section_Message"/> - <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="emailevents" field="l{$language_id}_Body" title="la_fld_MessageBody" control_options="{min_height: 200}" rows="20" cols="85"/> + <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="emailevents" field="l{$language_id}_HtmlBody" title="la_fld_HtmlVersion" control_options="{min_height: 200}" rows="20" cols="85"/> + <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="emailevents" field="l{$language_id}_PlainTextBody" title="la_fld_TextVersion" control_options="{min_height: 200}" allow_html="0" rows="20" cols="85"/> <inp2:m_RenderElement name="inp_edit_filler"/> </table> </div> <inp2:m_include t="incs/footer"/> \ No newline at end of file Index: branches/5.2.x/core/admin_templates/regional/languages_export.tpl =================================================================== --- branches/5.2.x/core/admin_templates/regional/languages_export.tpl (revision 15221) +++ branches/5.2.x/core/admin_templates/regional/languages_export.tpl (revision 15222) @@ -1,126 +1,129 @@ <inp2:adm_SetPopupSize width="850" height="600"/> <inp2:m_include t="incs/header"/> <inp2:m_RenderElement name="combined_header" prefix="lang" section="in-portal:configure_lang" title_preset="export_language"/> <!-- ToolBar --> <table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <script type="text/javascript"> a_toolbar = new ToolBar(); a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() { submit_event('lang','OnExportProgress'); } ) ); a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() { submit_event('lang', 'OnGoBack'); } ) ); a_toolbar.Render(); </script> </td> </tr> </tbody> </table> <inp2:phrases.export_SaveWarning name="grid_save_warning"/> <inp2:phrases.export_ErrorWarning name="form_error_warning"/> <input type="hidden" name="export_mode" value="<inp2:m_Get name='export_mode'/>"/> <inp2:m_ifnot check="m_Get" name="export_mode" equals_to="lang"> + <inp2:m_RenderElement name="inp_edit_hidden" prefix="phrases.export" field="ExportDataTypes" db="db"/> <inp2:m_RenderElement name="inp_edit_hidden" prefix="phrases.export" field="PhraseType" db="db"/> <inp2:m_RenderElement name="inp_edit_hidden" prefix="phrases.export" field="Module" db="db"/> </inp2:m_ifnot> <div id="scroll_container"> <table class="edit-form"> <inp2:m_RenderElement name="subsection" title="la_section_General"/> <inp2:m_RenderElement design="form_row" prefix="phrases.export" field="LangFile" title="la_fld_ExportFileName"> <td class="control-cell"> <inp2:lang_ExportPath/> <input type="text" name="<inp2:phrases.export_InputName field='LangFile'/>" id="<inp2:phrases.export_InputName field='LangFile'/>" value="<inp2:phrases.export_Field field='LangFile'/>" /> </td> </inp2:m_RenderElement> <inp2:m_if check="m_Get" name="export_mode" equals_to="lang"> + <inp2:m_RenderElement name="inp_edit_checkboxes" prefix="phrases.export" field="ExportDataTypes"/> <inp2:m_RenderElement name="inp_edit_checkboxes" prefix="phrases.export" field="PhraseType" title="la_fld_ExportPhraseTypes"/> <inp2:m_DefineElement name="export_module_element"> <tr> <td> <input type="checkbox" <inp2:m_param name='checked'/> id="<inp2:{$prefix}_InputName field='$field'/>_<inp2:m_param name='key'/>" value="<inp2:m_param name='key'/>" onclick="update_checkbox_options(/^<inp2:{$prefix}_InputName field='$field' as_preg='1'/>_([0-9A-Za-z-]+)/, '<inp2:{$prefix}_InputName field='$field'/>');"/> </td> <td> <label for="<inp2:{$prefix}_InputName field='$field'/>_<inp2:m_param name='key'/>"> <inp2:m_param name="option"/> </label> </td> <td align="right"> <inp2:$prefix_PhraseCount module="$key"/> </td> <td align="right"> <inp2:$prefix_EventCount module="$key"/> </td> </tr> </inp2:m_DefineElement> <inp2:m_RenderElement design="form_row" prefix="phrases.export" field="Module" title="la_fld_ExportModules"> <td class="control-cell"> <input type="button" class="button" id="btn-select-all" value="<inp2:m_Phrase name='la_btn_SelectAll' no_editing='1'/>"/> <input type="button" class="button" id="btn-unselect" value="<inp2:m_Phrase name='la_btn_Unselect' no_editing='1'/>"/> <br/><br/> <style type="text/css"> table#modules { border-collapse: collapse; } table#modules td, table#modules th { border: 1px solid black; padding: 3px; } </style> <table id="modules" border="1"> <tr> <th align="center" colspan="2"><inp2:m_Phrase name="column:la_fld_Module"/></th> <th align="center"><inp2:m_Phrase name="la_col_Phrases"/></th> <th align="center"><inp2:m_Phrase name="la_col_EmailEvents"/></th> </tr> <inp2:phrases.export_PredefinedOptions prefix="phrases.export" field="Module" block="export_module_element" selected="checked"/> </table> <script type="text/javascript"> $(document).ready( function () { $('#btn-select-all, #btn-unselect').click( function ($e) { var $checked = $(this).attr('id') == 'btn-select-all' ? 'checked' : ''; var $reg_exp = /^<inp2:phrases.export_InputName field='Module' as_preg='1'/>_([0-9A-Za-z-]+)/; $("input[type='checkbox']", '#modules').attr('checked', $checked); update_checkbox_options($reg_exp, '<inp2:phrases.export_InputName field='Module'/>'); } ); } ); </script> <inp2:m_RenderElement prefix="phrases.export" name="inp_edit_hidden" field="Module" db="db"/> </td> </inp2:m_RenderElement> <inp2:m_RenderElement name="inp_edit_textarea" prefix="phrases.export" field="ExportPhrases" allow_html="0"/> <inp2:m_RenderElement name="inp_edit_textarea" prefix="phrases.export" field="ExportEmailEvents" allow_html="0"/> + <inp2:m_RenderElement name="inp_edit_textarea" prefix="phrases.export" field="ExportCountries" allow_html="0"/> </inp2:m_if> <inp2:m_RenderElement name="inp_edit_checkbox" prefix="phrases.export" field="DoNotEncode" title="la_fld_DoNotEncode"/> <inp2:m_RenderElement name="inp_edit_filler"/> </table> </div> <inp2:m_include t="incs/footer"/> Index: branches/5.2.x/core/admin_templates/languages/email_message_settings.tpl =================================================================== --- branches/5.2.x/core/admin_templates/languages/email_message_settings.tpl (revision 15221) +++ branches/5.2.x/core/admin_templates/languages/email_message_settings.tpl (revision 15222) @@ -1,194 +1,193 @@ <inp2:adm_SetPopupSize width="875" height="650"/> <inp2:m_include t="incs/header"/> <inp2:m_RenderElement name="combined_header" section="in-portal:configemail" prefix="emailevents" title_preset="email_message_edit_settings" tab_preset="Default"/> <!-- ToolBar --> <table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <script type="text/javascript"> a_toolbar = new ToolBar(); a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() { submit_event('emailevents','<inp2:emailevents_SaveEvent/>'); } ) ); a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() { cancel_edit('emailevents','OnCancelEdit','<inp2:emailevents_SaveEvent/>','<inp2:m_Phrase label="la_FormCancelConfirmation" escape="1"/>'); } ) ); a_toolbar.AddButton( new ToolBarButton('reset_edit', '<inp2:m_phrase label="la_ToolTip_Reset" escape="1"/>', function() { reset_form('emailevents', 'OnReset', '<inp2:m_Phrase label="la_FormResetConfirmation" escape="1"/>'); } ) ); <inp2:m_if check="emailevents_IsSingle" inverse="inverse"> a_toolbar.AddButton( new ToolBarSeparator('sep1') ); </inp2:m_if> a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() { go_to_id('emailevents', '<inp2:emailevents_PrevId/>'); } ) ); a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() { go_to_id('emailevents', '<inp2:emailevents_NextId/>'); } ) ); a_toolbar.Render(); <inp2:m_RenderElement name="edit_navigation" prefix="emailevents"/> </script> </td> <inp2:m_RenderElement name="ml_selector" prefix="emailevents"/> </tr> </tbody> </table> <inp2:emailevents_SaveWarning name="grid_save_warning"/> <inp2:emailevents_ErrorWarning name="form_error_warning"/> <div id="scroll_container"> <table class="edit-form"> <inp2:m_RenderElement name="subsection" prefix="emailevents" fields="AllowChangingSender,CustomSender,SenderAddress,SenderAddressType,SenderName" title="la_section_SenderInfo"/> <inp2:m_if check="m_IsDebugMode"> <inp2:m_RenderElement name="inp_edit_checkbox" prefix="emailevents" field="AllowChangingSender" title="la_fld_AllowChangingSender"/> </inp2:m_if> <inp2:m_if check="emailevents_IsEditable" check_field="AllowChangingSender"> <inp2:m_RenderElement name="inp_edit_radio" prefix="emailevents" field="CustomSender" title="la_fld_CustomSender"/> <inp2:m_RenderElement name="inp_edit_combo_target" prefix="emailevents" field="SenderAddress" title="la_fld_SenderAddress" has_empty="1"/> <inp2:m_RenderElement name="inp_edit_box" prefix="emailevents" field="SenderName" title="la_fld_SenderName" style="width: 318px;"/> <inp2:m_else/> <inp2:m_RenderElement name="inp_label" prefix="emailevents" field="CustomSender" title="la_fld_CustomSender"/> <inp2:m_RenderElement name="inp_edit_combo_target" prefix="emailevents" field="SenderAddress" title="la_fld_SenderAddress" read_only="1"/> <inp2:m_RenderElement name="inp_label" prefix="emailevents" field="SenderName" title="la_fld_SenderName"/> </inp2:m_if> <inp2:m_RenderElement name="subsection" prefix="emailevents" fields="AllowChangingRecipient,CustomRecipient,RecipientType,RecipientAddress,RecipientAddressType,RecipientName,Recipients" title="la_section_RecipientsInfo"/> <inp2:m_if check="m_IsDebugMode"> <inp2:m_RenderElement name="inp_edit_checkbox" prefix="emailevents" field="AllowChangingRecipient" title="la_fld_AllowChangingRecipient"/> </inp2:m_if> <inp2:m_if check="emailevents_IsEditable" check_field="AllowChangingRecipient"> <inp2:m_RenderElement name="inp_edit_radio" prefix="emailevents" field="CustomRecipient" title="la_fld_CustomRecipient"/> <inp2:m_else/> <inp2:m_RenderElement name="inp_label" prefix="emailevents" field="CustomRecipient" title="la_fld_CustomRecipient"/> <inp2:emailevents_RemoveToRecipientType/> </inp2:m_if> <inp2:m_RenderElement name="inp_edit_radio" prefix="emailevents" field="RecipientType" title="la_fld_RecipientType"/> <inp2:m_RenderElement name="inp_edit_combo_target" prefix="emailevents" field="RecipientAddress" title="la_fld_RecipientAddress" has_empty="1"/> <inp2:m_RenderElement name="inp_edit_box" prefix="emailevents" field="RecipientName" title="la_fld_RecipientName" style="width: 318px;"/> <inp2:m_RenderElement name="inp_edit_minput" prefix="emailevents" field="Recipients" title="la_fld_Recipients" format="auto" style="width: 400px; height: 150px;"/> <inp2:m_RenderElement name="subsection" prefix="emailevents" fields="Tag,Replacement,ReplacementTagsXML" title="la_section_ReplacementTags"/> <inp2:m_RenderElement name="inp_edit_box" prefix="emailevents" field="Tag" title="la_fld_Tag"/> <inp2:m_RenderElement name="inp_edit_textarea" prefix="emailevents" field="Replacement" title="la_fld_Replacement"control_options="{height: 60}"/> <inp2:m_RenderElement name="inp_edit_minput" prefix="emailevents" field="ReplacementTagsXML" title="la_fld_ReplacementTags" allow_move="0" format="#Tag# = #Replacement#" style="width: 600px; height: 100px;"/> - <inp2:m_RenderElement name="subsection" prefix="emailevents" fields="Enabled,Description,FrontEndOnly,Type,MessageType,Headers,Module" title="la_section_General"/> + <inp2:m_RenderElement name="subsection" prefix="emailevents" fields="Enabled,Description,FrontEndOnly,Type,Headers,Module" title="la_section_General"/> <inp2:m_if check="m_IsDebugMode"> <inp2:m_RenderElement name="inp_edit_checkbox" prefix="emailevents" field="Enabled" title="la_fld_Enabled"/> </inp2:m_if> <inp2:m_RenderElement name="inp_edit_textarea" prefix="emailevents" field="Description" title="la_fld_Description" control_options="{max_height: 50}"/> <inp2:m_RenderElement name="inp_edit_checkbox" prefix="emailevents" field="FrontEndOnly" title="la_fld_FrontEndOnly"/> <inp2:m_RenderElement name="inp_edit_radio" prefix="emailevents" field="Type" title="la_fld_Type"/> - <inp2:m_RenderElement name="inp_edit_radio" prefix="emailevents" field="MessageType" title="la_fld_MessageType"/> <inp2:m_RenderElement name="inp_edit_textarea" prefix="emailevents" field="Headers" title="la_fld_ExtraHeaders" control_options="{max_height: 50}"/> <inp2:m_RenderElement name="inp_edit_options" prefix="emailevents" field="Module" title="la_fld_Module" has_empty="1"/> <inp2:m_RenderElement name="inp_edit_filler"/> </table> </div> <inp2:m_if check="emailevents_FieldVisible" field="Recipients"> <inp2:m_RenderElement name="email_recipients_js"/> </inp2:m_if> <script type="text/javascript"> <inp2:m_if check="emailevents_FieldVisible" field="ReplacementTagsXML"> // replacement tags ReplacementTagsXML.formatLine = function($record_index) { var $ret = MultiInputControl.prototype.formatLine.call(this, $record_index, false); if ($ret.length > 80) { $ret = $ret.substring(0, 80) + ' ...'; } return this.htmlspecialchars($ret); } ReplacementTagsXML.compareRecords = function($record_a, $record_b) { return $record_a['Tag'] == $record_b['Tag']; } ReplacementTagsXML.registerControl('Tag', 'textbox', true); ReplacementTagsXML.registerControl('Replacement', 'textbox', true); ReplacementTagsXML.LoadValues(); </inp2:m_if> // reflect custom sender & custom recipient radio button-dependent controls var $field_mask = '<inp2:emailevents_InputName name="#FIELD_NAME#" js_escape="1"/>'; function reflectCustomSender() { var $default_sender = get_control($field_mask, 'CustomSender', '0').checked; var $type = get_control($field_mask, 'SenderAddressType'); $type.disabled = $default_sender; get_control($field_mask, 'SenderAddress').disabled = $default_sender; get_control($field_mask, 'SenderName').disabled = $default_sender; $($type).change(); } function reflectCustomRecipient() { <inp2:m_if check="emailevents_IsEditable" check_field="AllowChangingRecipient"> var $default_recipient = get_control($field_mask, 'CustomRecipient', '0').checked; var $to_recipient = get_control($field_mask, 'RecipientType', <inp2:m_GetConst name="EmailEvent::RECIPIENT_TYPE_TO"/>); <inp2:m_else/> var $default_recipient = <inp2:m_if check="emailevents_Field" name="CustomRecipient" db="db" equals_to="0">true<inp2:m_else/>false</inp2:m_if>; </inp2:m_if> if ($default_recipient) { <inp2:m_if check="emailevents_IsEditable" check_field="AllowChangingRecipient"> if ($to_recipient.checked) { get_control($field_mask, 'RecipientType', <inp2:m_GetConst name="EmailEvent::RECIPIENT_TYPE_CC"/>).checked = true; } </inp2:m_if> Recipients.registerControl('RecipientType', {'default': <inp2:m_GetConst name="EmailEvent::RECIPIENT_TYPE_CC"/>}, true); } else { Recipients.registerControl('RecipientType', {'default': <inp2:m_GetConst name="EmailEvent::RECIPIENT_TYPE_TO"/>}, true); } <inp2:m_if check="emailevents_IsEditable" check_field="AllowChangingRecipient"> $to_recipient.disabled = $default_recipient; </inp2:m_if> } reflectCustomSender(); reflectCustomRecipient(); $(document).ready( function () { $("input[name='" + jq($field_mask.replace('#FIELD_NAME#', 'CustomSender')) + "']").click(reflectCustomSender); $("input[name='" + jq($field_mask.replace('#FIELD_NAME#', 'CustomRecipient')) + "']").click(reflectCustomRecipient); } ); // enable all disabled controls before submit Application.setHook('emailevents:*', function () { $(':input:disabled').attr('disabled', ''); } ) </script> <inp2:m_include t="incs/footer"/> Index: branches/5.2.x/core/admin_templates/languages/email_message_edit.tpl =================================================================== --- branches/5.2.x/core/admin_templates/languages/email_message_edit.tpl (revision 15221) +++ branches/5.2.x/core/admin_templates/languages/email_message_edit.tpl (revision 15222) @@ -1,81 +1,82 @@ <inp2:adm_SetPopupSize width="875" height="650"/> <inp2:m_include t="incs/header"/> <inp2:m_RenderElement name="combined_header" section="in-portal:configemail" prefix="emailevents" title_preset="email_message_edit" tab_preset="Default"/> <!-- ToolBar --> <table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <script type="text/javascript"> a_toolbar = new ToolBar(); a_toolbar.AddButton( new ToolBarButton('select', '<inp2:m_phrase label="la_ToolTip_Save" escape="1"/>', function() { submit_event('emailevents','<inp2:emailevents_SaveEvent/>'); } ) ); a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() { cancel_edit('emailevents','OnCancelEdit','<inp2:emailevents_SaveEvent/>','<inp2:m_Phrase label="la_FormCancelConfirmation" escape="1"/>'); } ) ); a_toolbar.AddButton( new ToolBarButton('reset_edit', '<inp2:m_phrase label="la_ToolTip_Reset" escape="1"/>', function() { reset_form('emailevents', 'OnReset', '<inp2:m_Phrase label="la_FormResetConfirmation" escape="1"/>'); } ) ); <inp2:m_if check="emailevents_IsSingle" inverse="inverse"> a_toolbar.AddButton( new ToolBarSeparator('sep1') ); </inp2:m_if> a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() { go_to_id('emailevents', '<inp2:emailevents_PrevId/>'); } ) ); a_toolbar.AddButton( new ToolBarButton('next', '<inp2:m_phrase label="la_ToolTip_Next" escape="1"/>', function() { go_to_id('emailevents', '<inp2:emailevents_NextId/>'); } ) ); a_toolbar.Render(); <inp2:m_RenderElement name="edit_navigation" prefix="emailevents"/> </script> </td> <inp2:m_RenderElement name="ml_selector" prefix="emailevents"/> </tr> </tbody> </table> <inp2:emailevents_SaveWarning name="grid_save_warning"/> <inp2:emailevents_ErrorWarning name="form_error_warning"/> <div id="scroll_container"> <table class="edit-form"> <inp2:m_RenderElement name="subsection" prefix="emailevents" fields="EventId,Description,Subject" title="la_section_General"/> <inp2:m_RenderElement name="inp_id_label" prefix="emailevents" field="EventId" title="la_fld_Id"/> <inp2:m_if check="m_IsDebugMode"> <inp2:m_RenderElement name="inp_edit_box" prefix="emailevents" field="Event" title="la_fld_Event"/> <inp2:m_else/> <inp2:m_RenderElement name="inp_label" prefix="emailevents" field="Event" title="la_fld_Event"/> </inp2:m_if> <inp2:m_RenderElement name="inp_label" prefix="emailevents" field="Description" title="la_fld_Description"/> <inp2:m_RenderElement name="inp_edit_box_ml" prefix="emailevents" field="Subject" format="no_default" title="la_fld_Subject"/> - <inp2:m_RenderElement name="subsection" prefix="emailevents" fields="Body" title="la_section_Message"/> + <inp2:m_RenderElement name="subsection" prefix="emailevents" fields="HtmlBody,PlainTextBody" title="la_section_Message"/> <inp2:m_if check="m_IsDebugMode"> - <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="emailevents" field="Body" format="no_default" title="la_fld_MessageBody" control_options="{min_height: 200}"/> + <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="emailevents" field="HtmlBody" format="no_default" title="la_fld_HtmlVersion" control_options="{min_height: 200}"/> <inp2:m_else/> - <inp2:m_RenderElement name="inp_edit_fck" prefix="emailevents" field="Body" format="no_default" title="la_fld_MessageBody" rows="5" cols="60" control_options="{min_height: 200}"/> + <inp2:m_RenderElement name="inp_edit_fck" prefix="emailevents" field="HtmlBody" format="no_default" title="la_fld_HtmlVersion" rows="5" cols="60" control_options="{min_height: 200}"/> </inp2:m_if> + <inp2:m_RenderElement name="inp_edit_textarea_ml" prefix="emailevents" field="PlainTextBody" format="no_default" title="la_fld_TextVersion" allow_html="0" control_options="{min_height: 200}"/> <inp2:m_RenderElement name="inp_edit_filler" control_options="{max_height: 8}"/> </table> </div> <inp2:m_include t="incs/footer"/> \ No newline at end of file Index: branches/5.2.x/core/install/upgrades.php =================================================================== --- branches/5.2.x/core/install/upgrades.php (revision 15221) +++ branches/5.2.x/core/install/upgrades.php (revision 15222) @@ -1,2025 +1,2084 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); $upgrade_class = 'CoreUpgrades'; /** * Class, that holds all upgrade scripts for "Core" module * */ class CoreUpgrades extends kUpgradeHelper { /** * Tables, that were renamed during 5.2.0 version upgrade * * @var Array * @access private */ private $renamedTables = Array ( 'ban-rule' => Array ('from' => 'BanRules', 'to' => 'UserBanRules'), 'conf' => Array ('from' => 'ConfigurationValues', 'to' => 'SystemSettings'), 'c' => Array ('from' => 'Category', 'to' => 'Categories'), 'cf' => Array ('from' => 'CustomField', 'to' => 'CustomFields'), 'draft' => Array ('from' => 'Drafts', 'to' => 'FormSubmissionReplyDrafts'), 'emailevents' => Array ('from' => 'Events', 'to' => 'EmailEvents'), 'fav' => Array ('from' => 'Favorites', 'to' => 'UserFavorites'), 'img' => Array ('from' => 'Images', 'to' => 'CatalogImages'), '#file' => Array ('from' => 'ItemFiles', 'to' => 'CatalogFiles'), 'rev' => Array ('from' => 'ItemReview', 'to' => 'CatalogReviews'), 'lang' => Array ('from' => 'Language', 'to' => 'Languages'), 'permission-type' => Array ('from' => 'PermissionConfig', 'to' => 'CategoryPermissionsConfig'), 'phrases' => Array ('from' => 'Phrase', 'to' => 'LanguageLabels'), 'g' => Array ('from' => 'PortalGroup', 'to' => 'UserGroups'), 'user-profile' => Array ('from' => 'PersistantSessionData', 'to' => 'UserPersistentSessionData'), 'u' => Array ('from' => 'PortalUser', 'to' => 'Users'), 'u-cdata' => Array ('from' => 'PortalUserCustomData', 'to' => 'UserCustomData'), 'search' => Array ('from' => 'RelatedSearches', 'to' => 'CategoryRelatedSearches'), 'rel' => Array ('from' => 'Relationship', 'to' => 'CatalogRelationships'), 'search-log' => Array ('from' => 'SearchLog', 'to' => 'SearchLogs'), 'skin' => Array ('from' => 'Skins', 'to' => 'AdminSkins'), 'submission-log' => Array ('from' => 'SubmissionLog', 'to' => 'FormSubmissionReplies'), 'theme' => Array ('from' => 'Theme', 'to' => 'Themes'), 'ug' => Array ('from' => 'UserGroup', 'to' => 'UserGroupRelations'), 'visits' => Array ('from' => 'Visits', 'to' => 'UserVisits'), 'session-log' => Array ('from' => 'SessionLogs', 'to' => 'UserSessionLogs'), ); /** * Changes table structure, where multilingual fields of TEXT type are present * * @param string $mode when called mode {before, after) */ function Upgrade_4_1_0($mode) { if ($mode == 'before') { // don't user after, because In-Portal calls this method too $this->_toolkit->SaveConfig(); } if ($mode == 'after') { $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); /* @var $ml_helper kMultiLanguageHelper */ $this->Application->UnitConfigReader->iterateConfigs(Array (&$this, 'updateTextFields'), $ml_helper->getLanguages()); } } /** * Moves ReplacementTags functionality from EmailMessage to Events table * * @param string $mode when called mode {before, after) */ function Upgrade_4_1_1($mode) { if ($mode == 'after') { $sql = 'SELECT ReplacementTags, EventId FROM '.TABLE_PREFIX.'EmailMessage WHERE (ReplacementTags IS NOT NULL) AND (ReplacementTags <> "") AND (LanguageId = 1)'; $replacement_tags = $this->Conn->GetCol($sql, 'EventId'); foreach ($replacement_tags as $event_id => $replacement_tag) { $sql = 'UPDATE '.TABLE_PREFIX.'Events SET ReplacementTags = '.$this->Conn->qstr($replacement_tag).' WHERE EventId = '.$event_id; $this->Conn->Query($sql); } // drop moved field from source table $sql = 'ALTER TABLE '.TABLE_PREFIX.'EmailMessage DROP `ReplacementTags`'; $this->Conn->Query($sql); } } /** * Callback function, that makes all ml fields of text type null with same default value * * @param string $prefix * @param Array $config_data * @param Array $languages * @return bool */ function updateTextFields($prefix, &$config_data, $languages) { if (!isset($config_data['TableName']) || !isset($config_data['Fields'])) { // invalid config found or prefix not found return false; } $table_name = $config_data['TableName']; $table_structure = $this->Conn->Query('DESCRIBE '.$table_name, 'Field'); if (!$table_structure) { // table not found return false; } $sqls = Array (); foreach ($config_data['Fields'] as $field => $options) { if (isset($options['formatter']) && $options['formatter'] == 'kMultiLanguage' && !isset($options['master_field'])) { // update all l<lang_id>_<field_name> fields (new format) foreach ($languages as $language_id) { $ml_field = 'l'.$language_id.'_'.$field; if ($table_structure[$ml_field]['Type'] == 'text') { $sqls[] = 'CHANGE '.$ml_field.' '.$ml_field.' TEXT NULL DEFAULT NULL'; } } // update <field_name> if found (old format) if (isset($table_structure[$field]) && $table_structure[$field]['Type'] == 'text') { $sqls[] = 'CHANGE '.$field.' '.$field.' TEXT NULL DEFAULT NULL'; } } } if ($sqls) { $sql = 'ALTER TABLE '.$table_name.' '.implode(', ', $sqls); $this->Conn->Query($sql); } return true; } /** * Replaces In-Portal tags in Forgot Password related email events to K4 ones * * @param string $mode when called mode {before, after) */ function Upgrade_4_2_0($mode) { if ($mode == 'after') { // 1. get event ids based on their name and type combination $event_names = Array ( 'USER.PSWD_' . EmailEvent::EVENT_TYPE_ADMIN, 'USER.PSWD_' . EmailEvent::EVENT_TYPE_FRONTEND, 'USER.PSWDC_' . EmailEvent::EVENT_TYPE_FRONTEND, ); $event_sql = Array (); foreach ($event_names as $mixed_event) { list ($event_name, $event_type) = explode('_', $mixed_event, 2); $event_sql[] = 'Event = "'.$event_name.'" AND Type = '.$event_type; } $sql = 'SELECT EventId FROM '.TABLE_PREFIX.'Events WHERE ('.implode(') OR (', $event_sql).')'; $event_ids = implode(',', $this->Conn->GetCol($sql)); // 2. replace In-Portal tags to K4 tags $replacements = Array ( '<inp:touser _Field="Password" />' => '<inp2:u_ForgottenPassword />', '<inp:m_confirm_password_link />' => '<inp2:u_ConfirmPasswordLink no_amp="1"/>', ); foreach ($replacements as $old_tag => $new_tag) { $sql = 'UPDATE '.TABLE_PREFIX.'EmailMessage SET Template = REPLACE(Template, '.$this->Conn->qstr($old_tag).', '.$this->Conn->qstr($new_tag).') WHERE EventId IN ('.$event_ids.')'; $this->Conn->Query($sql); } } } /** * Makes admin primary language same as front-end - not needed, done in SQL * * @param string $mode when called mode {before, after) */ function Upgrade_4_2_1($mode) { } function Upgrade_4_2_2($mode) { if ($mode == 'before') { if ($this->Conn->GetOne('SELECT LanguageId FROM '.TABLE_PREFIX.'Language WHERE PrimaryLang = 1')) return ; $this->Conn->Query('UPDATE '.TABLE_PREFIX.'Language SET PrimaryLang = 1 ORDER BY LanguageId LIMIT 1'); } } /** * Adds index to "dob" field in "PortalUser" table when it's missing * * @param string $mode when called mode {before, after) */ function Upgrade_4_3_1($mode) { if ($mode == 'after') { $sql = 'DESCRIBE ' . TABLE_PREFIX . 'PortalUser'; $structure = $this->Conn->Query($sql); foreach ($structure as $field_info) { if ($field_info['Field'] == 'dob') { if (!$field_info['Key']) { $sql = 'ALTER TABLE ' . TABLE_PREFIX . 'PortalUser ADD INDEX (dob)'; $this->Conn->Query($sql); } break; } } } } /** * Removes duplicate phrases, update file paths in database * * @param string $mode when called mode {before, after) */ function Upgrade_4_3_9($mode) { // 1. find In-Portal old <inp: tags $sql = 'SELECT EmailMessageId FROM '.TABLE_PREFIX.'EmailMessage WHERE Template LIKE \'%<inp:%\''; $event_ids = implode(',', $this->Conn->GetCol($sql)); // 2. replace In-Portal old <inp: tags to K4 tags $replacements = Array ( '<inp:m_category_field _Field="Name" _StripHTML="1"' => '<inp2:c_Field name="Name"', '<inp:touser _Field="password"' => '<inp2:u_Field name="Password_plain"', '<inp:touser _Field="UserName"' => '<inp2:u_Field name="Login"', '<inp:touser _Field="' => '<inp2:u_Field name="', '<inp:m_page_title' => '<inp2:m_BaseUrl', '<inp:m_theme_url _page="current"' => '<inp2:m_BaseUrl', '<inp:topic _field="text"' => '<inp2:bb-post_Field name="PostingText"', '<inp:topic _field="link" _Template="inbulletin/post_list"' => '<inp2:bb_TopicLink template="__default__"', ); if ($event_ids) { foreach ($replacements as $old_tag => $new_tag) { $sql = 'UPDATE '.TABLE_PREFIX.'EmailMessage SET Template = REPLACE(Template, '.$this->Conn->qstr($old_tag).', '.$this->Conn->qstr($new_tag).') WHERE EventId IN ('.$event_ids.')'; $this->Conn->Query($sql); } } if ($mode == 'after') { $this->_insertInPortalData(); $this->_moveDatabaseFolders(); // in case, when In-Portal module is enabled -> turn AdvancedUserManagement on too if ($this->Application->findModule('Name', 'In-Portal')) { $sql = 'UPDATE ' . TABLE_PREFIX . 'ConfigurationValues SET VariableValue = 1 WHERE VariableName = "AdvancedUserManagement"'; $this->Conn->Query($sql); } } if ($mode == 'languagepack') { $this->_removeDuplicatePhrases(); } } function _insertInPortalData() { $data = Array ( 'ConfigurationAdmin' => Array ( 'UniqueField' => 'VariableName', 'Records' => Array ( 'AllowDeleteRootCats' => "('AllowDeleteRootCats', 'la_Text_General', 'la_AllowDeleteRootCats', 'checkbox', NULL , NULL , 10.09, 0, 0)", 'Catalog_PreselectModuleTab' => "('Catalog_PreselectModuleTab', 'la_Text_General', 'la_config_CatalogPreselectModuleTab', 'checkbox', NULL, NULL, 10.10, 0, 1)", 'RecycleBinFolder' => "('RecycleBinFolder', 'la_Text_General', 'la_config_RecycleBinFolder', 'text', NULL , NULL , 10.11, 0, 0)", 'AdvancedUserManagement' => "('AdvancedUserManagement', 'la_Text_General', 'la_prompt_AdvancedUserManagement', 'checkbox', NULL, NULL, '10.011', 0, 1)", ), ), 'ConfigurationValues' => Array ( 'UniqueField' => 'VariableName', 'Records' => Array ( 'AdvancedUserManagement' => "(DEFAULT, 'AdvancedUserManagement', 0, 'In-Portal:Users', 'in-portal:configure_users')", ), ), 'ItemTypes' => Array ( 'UniqueField' => 'ItemType', 'Records' => Array ( '1' => "(1, 'In-Portal', 'c', 'Category', 'Name', 'CreatedById', NULL, NULL, 'la_ItemTab_Categories', 1, 'admin/category/addcategory.php', 'clsCategory', 'Category')", '6' => "(6, 'In-Portal', 'u', 'PortalUser', 'Login', 'PortalUserId', NULL, NULL, '', 0, '', 'clsPortalUser', 'User')", ), ), 'PermissionConfig' => Array ( 'UniqueField' => 'PermissionName', 'Records' => Array ( 'CATEGORY.ADD' => "(DEFAULT, 'CATEGORY.ADD', 'lu_PermName_Category.Add_desc', 'lu_PermName_Category.Add_error', 'In-Portal')", 'CATEGORY.DELETE' => "(DEFAULT, 'CATEGORY.DELETE', 'lu_PermName_Category.Delete_desc', 'lu_PermName_Category.Delete_error', 'In-Portal')", 'CATEGORY.ADD.PENDING' => "(DEFAULT, 'CATEGORY.ADD.PENDING', 'lu_PermName_Category.AddPending_desc', 'lu_PermName_Category.AddPending_error', 'In-Portal')", 'CATEGORY.MODIFY' => "(DEFAULT, 'CATEGORY.MODIFY', 'lu_PermName_Category.Modify_desc', 'lu_PermName_Category.Modify_error', 'In-Portal')", 'ADMIN' => "(DEFAULT, 'ADMIN', 'lu_PermName_Admin_desc', 'lu_PermName_Admin_error', 'Admin')", 'LOGIN' => "(DEFAULT, 'LOGIN', 'lu_PermName_Login_desc', 'lu_PermName_Admin_error', 'Front')", 'DEBUG.ITEM' => "(DEFAULT, 'DEBUG.ITEM', 'lu_PermName_Debug.Item_desc', '', 'Admin')", 'DEBUG.LIST' => "(DEFAULT, 'DEBUG.LIST', 'lu_PermName_Debug.List_desc', '', 'Admin')", 'DEBUG.INFO' => "(DEFAULT, 'DEBUG.INFO', 'lu_PermName_Debug.Info_desc', '', 'Admin')", 'PROFILE.MODIFY' => "(DEFAULT, 'PROFILE.MODIFY', 'lu_PermName_Profile.Modify_desc', '', 'Admin')", 'SHOWLANG' => "(DEFAULT, 'SHOWLANG', 'lu_PermName_ShowLang_desc', '', 'Admin')", 'FAVORITES' => "(DEFAULT, 'FAVORITES', 'lu_PermName_favorites_desc', 'lu_PermName_favorites_error', 'In-Portal')", 'SYSTEM_ACCESS.READONLY' => "(DEFAULT, 'SYSTEM_ACCESS.READONLY', 'la_PermName_SystemAccess.ReadOnly_desc', 'la_PermName_SystemAccess.ReadOnly_error', 'Admin')", ), ), 'Permissions' => Array ( 'UniqueField' => 'Permission;GroupId;Type;CatId', 'Records' => Array ( 'LOGIN;12;1;0' => "(DEFAULT, 'LOGIN', 12, 1, 1, 0)", 'in-portal:site.view;11;1;0' => "(DEFAULT, 'in-portal:site.view', 11, 1, 1, 0)", 'in-portal:browse.view;11;1;0' => "(DEFAULT, 'in-portal:browse.view', 11, 1, 1, 0)", 'in-portal:advanced_view.view;11;1;0' => "(DEFAULT, 'in-portal:advanced_view.view', 11, 1, 1, 0)", 'in-portal:reviews.view;11;1;0' => "(DEFAULT, 'in-portal:reviews.view', 11, 1, 1, 0)", 'in-portal:configure_categories.view;11;1;0' => "(DEFAULT, 'in-portal:configure_categories.view', 11, 1, 1, 0)", 'in-portal:configure_categories.edit;11;1;0' => "(DEFAULT, 'in-portal:configure_categories.edit', 11, 1, 1, 0)", 'in-portal:configuration_search.view;11;1;0' => "(DEFAULT, 'in-portal:configuration_search.view', 11, 1, 1, 0)", 'in-portal:configuration_search.edit;11;1;0' => "(DEFAULT, 'in-portal:configuration_search.edit', 11, 1, 1, 0)", 'in-portal:configuration_email.view;11;1;0' => "(DEFAULT, 'in-portal:configuration_email.view', 11, 1, 1, 0)", 'in-portal:configuration_email.edit;11;1;0' => "(DEFAULT, 'in-portal:configuration_email.edit', 11, 1, 1, 0)", 'in-portal:configuration_custom.view;11;1;0' => "(DEFAULT, 'in-portal:configuration_custom.view', 11, 1, 1, 0)", 'in-portal:configuration_custom.add;11;1;0' => "(DEFAULT, 'in-portal:configuration_custom.add', 11, 1, 1, 0)", 'in-portal:configuration_custom.edit;11;1;0' => "(DEFAULT, 'in-portal:configuration_custom.edit', 11, 1, 1, 0)", 'in-portal:configuration_custom.delete;11;1;0' => "(DEFAULT, 'in-portal:configuration_custom.delete', 11, 1, 1, 0)", 'in-portal:users.view;11;1;0' => "(DEFAULT, 'in-portal:users.view', 11, 1, 1, 0)", 'in-portal:user_list.advanced:ban;11;1;0' => "(DEFAULT, 'in-portal:user_list.advanced:ban', 11, 1, 1, 0)", 'in-portal:user_list.advanced:send_email;11;1;0' => "(DEFAULT, 'in-portal:user_list.advanced:send_email', 11, 1, 1, 0)", 'in-portal:user_groups.view;11;1;0' => "(DEFAULT, 'in-portal:user_groups.view', 11, 1, 1, 0)", 'in-portal:user_groups.add;11;1;0' => "(DEFAULT, 'in-portal:user_groups.add', 11, 1, 1, 0)", 'in-portal:user_groups.edit;11;1;0' => "(DEFAULT, 'in-portal:user_groups.edit', 11, 1, 1, 0)", 'in-portal:user_groups.delete;11;1;0' => "(DEFAULT, 'in-portal:user_groups.delete', 11, 1, 1, 0)", 'in-portal:user_groups.advanced:send_email;11;1;0' => "(DEFAULT, 'in-portal:user_groups.advanced:send_email', 11, 1, 1, 0)", 'in-portal:user_groups.advanced:manage_permissions;11;1;0' => "(DEFAULT, 'in-portal:user_groups.advanced:manage_permissions', 11, 1, 1, 0)", 'in-portal:configure_users.view;11;1;0' => "(DEFAULT, 'in-portal:configure_users.view', 11, 1, 1, 0)", 'in-portal:configure_users.edit;11;1;0' => "(DEFAULT, 'in-portal:configure_users.edit', 11, 1, 1, 0)", 'in-portal:user_email.view;11;1;0' => "(DEFAULT, 'in-portal:user_email.view', 11, 1, 1, 0)", 'in-portal:user_email.edit;11;1;0' => "(DEFAULT, 'in-portal:user_email.edit', 11, 1, 1, 0)", 'in-portal:user_custom.view;11;1;0' => "(DEFAULT, 'in-portal:user_custom.view', 11, 1, 1, 0)", 'in-portal:user_custom.add;11;1;0' => "(DEFAULT, 'in-portal:user_custom.add', 11, 1, 1, 0)", 'in-portal:user_custom.edit;11;1;0' => "(DEFAULT, 'in-portal:user_custom.edit', 11, 1, 1, 0)", 'in-portal:user_custom.delete;11;1;0' => "(DEFAULT, 'in-portal:user_custom.delete', 11, 1, 1, 0)", 'in-portal:user_banlist.view;11;1;0' => "(DEFAULT, 'in-portal:user_banlist.view', 11, 1, 1, 0)", 'in-portal:user_banlist.add;11;1;0' => "(DEFAULT, 'in-portal:user_banlist.add', 11, 1, 1, 0)", 'in-portal:user_banlist.edit;11;1;0' => "(DEFAULT, 'in-portal:user_banlist.edit', 11, 1, 1, 0)", 'in-portal:user_banlist.delete;11;1;0' => "(DEFAULT, 'in-portal:user_banlist.delete', 11, 1, 1, 0)", 'in-portal:reports.view;11;1;0' => "(DEFAULT, 'in-portal:reports.view', 11, 1, 1, 0)", 'in-portal:log_summary.view;11;1;0' => "(DEFAULT, 'in-portal:log_summary.view', 11, 1, 1, 0)", 'in-portal:searchlog.view;11;1;0' => "(DEFAULT, 'in-portal:searchlog.view', 11, 1, 1, 0)", 'in-portal:searchlog.delete;11;1;0' => "(DEFAULT, 'in-portal:searchlog.delete', 11, 1, 1, 0)", 'in-portal:sessionlog.view;11;1;0' => "(DEFAULT, 'in-portal:sessionlog.view', 11, 1, 1, 0)", 'in-portal:sessionlog.delete;11;1;0' => "(DEFAULT, 'in-portal:sessionlog.delete', 11, 1, 1, 0)", 'in-portal:emaillog.view;11;1;0' => "(DEFAULT, 'in-portal:emaillog.view', 11, 1, 1, 0)", 'in-portal:emaillog.delete;11;1;0' => "(DEFAULT, 'in-portal:emaillog.delete', 11, 1, 1, 0)", 'in-portal:visits.view;11;1;0' => "(DEFAULT, 'in-portal:visits.view', 11, 1, 1, 0)", 'in-portal:visits.delete;11;1;0' => "(DEFAULT, 'in-portal:visits.delete', 11, 1, 1, 0)", 'in-portal:configure_general.view;11;1;0' => "(DEFAULT, 'in-portal:configure_general.view', 11, 1, 1, 0)", 'in-portal:configure_general.edit;11;1;0' => "(DEFAULT, 'in-portal:configure_general.edit', 11, 1, 1, 0)", 'in-portal:modules.view;11;1;0' => "(DEFAULT, 'in-portal:modules.view', 11, 1, 1, 0)", 'in-portal:mod_status.view;11;1;0' => "(DEFAULT, 'in-portal:mod_status.view', 11, 1, 1, 0)", 'in-portal:mod_status.edit;11;1;0' => "(DEFAULT, 'in-portal:mod_status.edit', 11, 1, 1, 0)", 'in-portal:mod_status.advanced:approve;11;1;0' => "(DEFAULT, 'in-portal:mod_status.advanced:approve', 11, 1, 1, 0)", 'in-portal:mod_status.advanced:decline;11;1;0' => "(DEFAULT, 'in-portal:mod_status.advanced:decline', 11, 1, 1, 0)", 'in-portal:addmodule.view;11;1;0' => "(DEFAULT, 'in-portal:addmodule.view', 11, 1, 1, 0)", 'in-portal:addmodule.add;11;1;0' => "(DEFAULT, 'in-portal:addmodule.add', 11, 1, 1, 0)", 'in-portal:addmodule.edit;11;1;0' => "(DEFAULT, 'in-portal:addmodule.edit', 11, 1, 1, 0)", 'in-portal:tag_library.view;11;1;0' => "(DEFAULT, 'in-portal:tag_library.view', 11, 1, 1, 0)", 'in-portal:configure_themes.view;11;1;0' => "(DEFAULT, 'in-portal:configure_themes.view', 11, 1, 1, 0)", 'in-portal:configure_themes.add;11;1;0' => "(DEFAULT, 'in-portal:configure_themes.add', 11, 1, 1, 0)", 'in-portal:configure_themes.edit;11;1;0' => "(DEFAULT, 'in-portal:configure_themes.edit', 11, 1, 1, 0)", 'in-portal:configure_themes.delete;11;1;0' => "(DEFAULT, 'in-portal:configure_themes.delete', 11, 1, 1, 0)", 'in-portal:configure_styles.view;11;1;0' => "(DEFAULT, 'in-portal:configure_styles.view', 11, 1, 1, 0)", 'in-portal:configure_styles.add;11;1;0' => "(DEFAULT, 'in-portal:configure_styles.add', 11, 1, 1, 0)", 'in-portal:configure_styles.edit;11;1;0' => "(DEFAULT, 'in-portal:configure_styles.edit', 11, 1, 1, 0)", 'in-portal:configure_styles.delete;11;1;0' => "(DEFAULT, 'in-portal:configure_styles.delete', 11, 1, 1, 0)", 'in-portal:configure_lang.advanced:set_primary;11;1;0' => "(DEFAULT, 'in-portal:configure_lang.advanced:set_primary', 11, 1, 1, 0)", 'in-portal:configure_lang.advanced:import;11;1;0' => "(DEFAULT, 'in-portal:configure_lang.advanced:import', 11, 1, 1, 0)", 'in-portal:configure_lang.advanced:export;11;1;0' => "(DEFAULT, 'in-portal:configure_lang.advanced:export', 11, 1, 1, 0)", 'in-portal:tools.view;11;1;0' => "(DEFAULT, 'in-portal:tools.view', 11, 1, 1, 0)", 'in-portal:backup.view;11;1;0' => "(DEFAULT, 'in-portal:backup.view', 11, 1, 1, 0)", 'in-portal:restore.view;11;1;0' => "(DEFAULT, 'in-portal:restore.view', 11, 1, 1, 0)", 'in-portal:export.view;11;1;0' => "(DEFAULT, 'in-portal:export.view', 11, 1, 1, 0)", 'in-portal:main_import.view;11;1;0' => "(DEFAULT, 'in-portal:main_import.view', 11, 1, 1, 0)", 'in-portal:sql_query.view;11;1;0' => "(DEFAULT, 'in-portal:sql_query.view', 11, 1, 1, 0)", 'in-portal:sql_query.edit;11;1;0' => "(DEFAULT, 'in-portal:sql_query.edit', 11, 1, 1, 0)", 'in-portal:server_info.view;11;1;0' => "(DEFAULT, 'in-portal:server_info.view', 11, 1, 1, 0)", 'in-portal:help.view;11;1;0' => "(DEFAULT, 'in-portal:help.view', 11, 1, 1, 0)", ), ), 'SearchConfig' => Array ( 'UniqueField' => 'TableName;FieldName;ModuleName', 'Records' => Array ( 'Category;NewItem;In-Portal' => "('Category', 'NewItem', 0, 1, 'lu_fielddesc_category_newitem', 'lu_field_newitem', 'In-Portal', 'la_text_category', 18, DEFAULT, 0, 'boolean', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;PopItem;In-Portal' => "('Category', 'PopItem', 0, 1, 'lu_fielddesc_category_popitem', 'lu_field_popitem', 'In-Portal', 'la_text_category', 19, DEFAULT, 0, 'boolean', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;HotItem;In-Portal' => "('Category', 'HotItem', 0, 1, 'lu_fielddesc_category_hotitem', 'lu_field_hotitem', 'In-Portal', 'la_text_category', 17, DEFAULT, 0, 'boolean', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;MetaDescription;In-Portal' => "('Category', 'MetaDescription', 0, 1, 'lu_fielddesc_category_metadescription', 'lu_field_metadescription', 'In-Portal', 'la_text_category', 16, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;ParentPath;In-Portal' => "('Category', 'ParentPath', 0, 1, 'lu_fielddesc_category_parentpath', 'lu_field_parentpath', 'In-Portal', 'la_text_category', 15, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;ResourceId;In-Portal' => "('Category', 'ResourceId', 0, 1, 'lu_fielddesc_category_resourceid', 'lu_field_resourceid', 'In-Portal', 'la_text_category', 14, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;CreatedById;In-Portal' => "('Category', 'CreatedById', 0, 1, 'lu_fielddesc_category_createdbyid', 'lu_field_createdbyid', 'In-Portal', 'la_text_category', 13, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;CachedNavbar;In-Portal' => "('Category', 'CachedNavbar', 0, 1, 'lu_fielddesc_category_cachednavbar', 'lu_field_cachednavbar', 'In-Portal', 'la_text_category', 12, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;CachedDescendantCatsQty;In-Portal' => "('Category', 'CachedDescendantCatsQty', 0, 1, 'lu_fielddesc_category_cacheddescendantcatsqty', 'lu_field_cacheddescendantcatsqty', 'In-Portal', 'la_text_category', 11, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;MetaKeywords;In-Portal' => "('Category', 'MetaKeywords', 0, 1, 'lu_fielddesc_category_metakeywords', 'lu_field_metakeywords', 'In-Portal', 'la_text_category', 10, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;Priority;In-Portal' => "('Category', 'Priority', 0, 1, 'lu_fielddesc_category_priority', 'lu_field_priority', 'In-Portal', 'la_text_category', 9, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;Status;In-Portal' => "('Category', 'Status', 0, 1, 'lu_fielddesc_category_status', 'lu_field_status', 'In-Portal', 'la_text_category', 7, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;EditorsPick;In-Portal' => "('Category', 'EditorsPick', 0, 1, 'lu_fielddesc_category_editorspick', 'lu_field_editorspick', 'In-Portal', 'la_text_category', 6, DEFAULT, 0, 'boolean', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;CreatedOn;In-Portal' => "('Category', 'CreatedOn', 0, 1, 'lu_fielddesc_category_createdon', 'lu_field_createdon', 'In-Portal', 'la_text_category', 5, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;Description;In-Portal' => "('Category', 'Description', 1, 1, 'lu_fielddesc_category_description', 'lu_field_description', 'In-Portal', 'la_text_category', 4, DEFAULT, 2, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;Name;In-Portal' => "('Category', 'Name', 1, 1, 'lu_fielddesc_category_name', 'lu_field_name', 'In-Portal', 'la_text_category', 3, DEFAULT, 2, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;ParentId;In-Portal' => "('Category', 'ParentId', 0, 1, 'lu_fielddesc_category_parentid', 'lu_field_parentid', 'In-Portal', 'la_text_category', 2, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;CategoryId;In-Portal' => "('Category', 'CategoryId', 0, 1, 'lu_fielddesc_category_categoryid', 'lu_field_categoryid', 'In-Portal', 'la_text_category', 0, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;Modified;In-Portal' => "('Category', 'Modified', 0, 1, 'lu_fielddesc_category_modified', 'lu_field_modified', 'In-Portal', 'la_text_category', 20, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'Category;ModifiedById;In-Portal' => "('Category', 'ModifiedById', 0, 1, 'lu_fielddesc_category_modifiedbyid', 'lu_field_modifiedbyid', 'In-Portal', 'la_text_category', 21, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;PortalUserId;In-Portal' => "('PortalUser', 'PortalUserId', -1, 0, 'lu_fielddesc_user_portaluserid', 'lu_field_portaluserid', 'In-Portal', 'la_text_user', 0, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;Login;In-Portal' => "('PortalUser', 'Login', -1, 0, 'lu_fielddesc_user_login', 'lu_field_login', 'In-Portal', 'la_text_user', 1, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;Password;In-Portal' => "('PortalUser', 'Password', -1, 0, 'lu_fielddesc_user_password', 'lu_field_password', 'In-Portal', 'la_text_user', 2, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;tz;In-Portal' => "('PortalUser', 'tz', -1, 0, 'lu_fielddesc_user_tz', 'lu_field_tz', 'In-Portal', 'la_text_user', 17, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;dob;In-Portal' => "('PortalUser', 'dob', -1, 0, 'lu_fielddesc_user_dob', 'lu_field_dob', 'In-Portal', 'la_text_user', 16, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;Modified;In-Portal' => "('PortalUser', 'Modified', -1, 0, 'lu_fielddesc_user_modified', 'lu_field_modified', 'In-Portal', 'la_text_user', 15, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;Status;In-Portal' => "('PortalUser', 'Status', -1, 0, 'lu_fielddesc_user_status', 'lu_field_status', 'In-Portal', 'la_text_user', 14, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;ResourceId;In-Portal' => "('PortalUser', 'ResourceId', -1, 0, 'lu_fielddesc_user_resourceid', 'lu_field_resourceid', 'In-Portal', 'la_text_user', 13, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;Country;In-Portal' => "('PortalUser', 'Country', -1, 0, 'lu_fielddesc_user_country', 'lu_field_country', 'In-Portal', 'la_text_user', 12, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;Zip;In-Portal' => "('PortalUser', 'Zip', -1, 0, 'lu_fielddesc_user_zip', 'lu_field_zip', 'In-Portal', 'la_text_user', 11, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;State;In-Portal' => "('PortalUser', 'State', -1, 0, 'lu_fielddesc_user_state', 'lu_field_state', 'In-Portal', 'la_text_user', 10, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;City;In-Portal' => "('PortalUser', 'City', -1, 0, 'lu_fielddesc_user_city', 'lu_field_city', 'In-Portal', 'la_text_user', 9, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;Street;In-Portal' => "('PortalUser', 'Street', -1, 0, 'lu_fielddesc_user_street', 'lu_field_street', 'In-Portal', 'la_text_user', 8, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;Phone;In-Portal' => "('PortalUser', 'Phone', -1, 0, 'lu_fielddesc_user_phone', 'lu_field_phone', 'In-Portal', 'la_text_user', 7, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;CreatedOn;In-Portal' => "('PortalUser', 'CreatedOn', -1, 0, 'lu_fielddesc_user_createdon', 'lu_field_createdon', 'In-Portal', 'la_text_user', 6, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;Email;In-Portal' => "('PortalUser', 'Email', -1, 0, 'lu_fielddesc_user_email', 'lu_field_email', 'In-Portal', 'la_text_user', 5, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;LastName;In-Portal' => "('PortalUser', 'LastName', -1, 0, 'lu_fielddesc_user_lastname', 'lu_field_lastname', 'In-Portal', 'la_text_user', 4, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", 'PortalUser;FirstName;In-Portal' => "('PortalUser', 'FirstName', -1, 0, 'lu_fielddesc_user_firstname', 'lu_field_firstname', 'In-Portal', 'la_text_user', 3, DEFAULT, 0, 'text', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", ), ), 'StatItem' => Array ( 'UniqueField' => 'Module;ListLabel', 'Records' => Array ( 'In-Portal;la_prompt_ActiveCategories' => "(DEFAULT, 'In-Portal', 'SELECT count(*) FROM <%prefix%>Category WHERE Status=1 ', NULL, 'la_prompt_ActiveCategories', '0', '1')", 'In-Portal;la_prompt_ActiveUsers' => "(DEFAULT, 'In-Portal', 'SELECT count(*) FROM <%prefix%>PortalUser WHERE Status=1 ', NULL, 'la_prompt_ActiveUsers', '0', '1')", 'In-Portal;la_prompt_CurrentSessions' => "(DEFAULT, 'In-Portal', 'SELECT count(*) FROM <%prefix%>UserSession', NULL, 'la_prompt_CurrentSessions', '0', '1')", 'In-Portal;la_prompt_TotalCategories' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) as CategoryCount FROM <%prefix%>Category', NULL, 'la_prompt_TotalCategories', 0, 2)", 'In-Portal;la_prompt_ActiveCategories' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS ActiveCategories FROM <%prefix%>Category WHERE Status = 1', NULL, 'la_prompt_ActiveCategories', 0, 2)", 'In-Portal;la_prompt_PendingCategories' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS PendingCategories FROM <%prefix%>Category WHERE Status = 2', NULL, 'la_prompt_PendingCategories', 0, 2)", 'In-Portal;la_prompt_DisabledCategories' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS DisabledCategories FROM <%prefix%>Category WHERE Status = 0', NULL, 'la_prompt_DisabledCategories', 0, 2)", 'In-Portal;la_prompt_NewCategories' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS NewCategories FROM <%prefix%>Category WHERE (NewItem = 1) OR ( (UNIX_TIMESTAMP() - CreatedOn) <= <%m:config name=\"Category_DaysNew\"%>*86400 AND (NewItem = 2) )', NULL, 'la_prompt_NewCategories', 0, 2)", 'In-Portal;la_prompt_CategoryEditorsPick' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) FROM <%prefix%>Category WHERE EditorsPick = 1', NULL, 'la_prompt_CategoryEditorsPick', 0, 2)", 'In-Portal;la_prompt_NewestCategoryDate' => "(DEFAULT, 'In-Portal', 'SELECT <%m:post_format field=\"MAX(CreatedOn)\" type=\"date\"%> FROM <%prefix%>Category', NULL, 'la_prompt_NewestCategoryDate', 0, 2)", 'In-Portal;la_prompt_LastCategoryUpdate' => "(DEFAULT, 'In-Portal', 'SELECT <%m:post_format field=\"MAX(Modified)\" type=\"date\"%> FROM <%prefix%>Category', NULL, 'la_prompt_LastCategoryUpdate', 0, 2)", 'In-Portal;la_prompt_TopicsUsers' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS TotalUsers FROM <%prefix%>PortalUser', NULL, 'la_prompt_TopicsUsers', 0, 2)", 'In-Portal;la_prompt_UsersActive' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS ActiveUsers FROM <%prefix%>PortalUser WHERE Status = 1', NULL, 'la_prompt_UsersActive', 0, 2)", 'In-Portal;la_prompt_UsersPending' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS PendingUsers FROM <%prefix%>PortalUser WHERE Status = 2', NULL, 'la_prompt_UsersPending', 0, 2)", 'In-Portal;la_prompt_UsersDisabled' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS DisabledUsers FROM <%prefix%>PortalUser WHERE Status = 0', NULL, 'la_prompt_UsersDisabled', 0, 2)", 'In-Portal;la_prompt_NewestUserDate' => "(DEFAULT, 'In-Portal', 'SELECT <%m:post_format field=\"MAX(CreatedOn)\" type=\"date\"%> FROM <%prefix%>PortalUser', NULL, 'la_prompt_NewestUserDate', 0, 2)", 'In-Portal;la_prompt_UsersUniqueCountries' => "(DEFAULT, 'In-Portal', 'SELECT COUNT( DISTINCT LOWER( Country ) ) FROM <%prefix%>PortalUser WHERE LENGTH(Country) > 0', NULL, 'la_prompt_UsersUniqueCountries', 0, 2)", 'In-Portal;la_prompt_UsersUniqueStates' => "(DEFAULT, 'In-Portal', 'SELECT COUNT( DISTINCT LOWER( State ) ) FROM <%prefix%>PortalUser WHERE LENGTH(State) > 0', NULL, 'la_prompt_UsersUniqueStates', 0, 2)", 'In-Portal;la_prompt_TotalUserGroups' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS TotalUserGroups FROM <%prefix%>PortalGroup', NULL, 'la_prompt_TotalUserGroups', 0, 2)", 'In-Portal;la_prompt_BannedUsers' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS BannedUsers FROM <%prefix%>PortalUser WHERE IsBanned = 1', NULL, 'la_prompt_BannedUsers', 0, 2)", 'In-Portal;la_prompt_NonExpiredSessions' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS NonExipedSessions FROM <%prefix%>UserSession WHERE Status = 1', NULL, 'la_prompt_NonExpiredSessions', 0, 2)", 'In-Portal;la_prompt_ThemeCount' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS ThemeCount FROM <%prefix%>Theme', NULL, 'la_prompt_ThemeCount', 0, 2)", 'In-Portal;la_prompt_RegionsCount' => "(DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS RegionsCount FROM <%prefix%>Language', NULL, 'la_prompt_RegionsCount', 0, 2)", 'In-Portal;la_prompt_TablesCount' => "(DEFAULT, 'In-Portal', '<%m:sql_action sql=\"SHOW+TABLES\" action=\"COUNT\" field=\"*\"%>', NULL, 'la_prompt_TablesCount', 0, 2)", 'In-Portal;la_prompt_RecordsCount' => "(DEFAULT, 'In-Portal', '<%m:sql_action sql=\"SHOW+TABLE+STATUS\" action=\"SUM\" field=\"Rows\"%>', NULL, 'la_prompt_RecordsCount', 0, 2)", 'In-Portal;la_prompt_SystemFileSize' => "(DEFAULT, 'In-Portal', '<%m:custom_action sql=\"empty\" action=\"SysFileSize\"%>', NULL, 'la_prompt_SystemFileSize', 0, 2)", 'In-Portal;la_prompt_DataSize' => "(DEFAULT, 'In-Portal', '<%m:sql_action sql=\"SHOW+TABLE+STATUS\" action=\"SUM\" format_as=\"file\" field=\"Data_length\"%>', NULL, 'la_prompt_DataSize', 0, 2)", ), ), 'StylesheetSelectors' => Array ( 'UniqueField' => 'SelectorId', 'Records' => Array ( '169' => "(169, 8, 'Calendar''s selected days', '.calendar tbody .selected', 'a:0:{}', '', 1, 'font-weight: bold;\\\r\\nbackground-color: #9ED7ED;\\r\\nborder: 1px solid #83B2C5;', 0)", '118' => "(118, 8, 'Data grid row', 'td.block-data-row', 'a:0:{}', '', 2, 'border-bottom: 1px solid #cccccc;', 48)", '81' => "(81, 8, '\"More\" link', 'a.link-more', 'a:0:{}', '', 2, 'text-decoration: underline;', 64)", '88' => "(88, 8, 'Block data, separated rows', 'td.block-data-grid', 'a:0:{}', '', 2, 'border: 1px solid #cccccc;', 48)", '42' => "(42, 8, 'Block Header', 'td.block-header', 'a:4:{s:5:\"color\";s:16:\"rgb(0, 159, 240)\";s:9:\"font-size\";s:4:\"20px\";s:11:\"font-weight\";s:6:\"normal\";s:7:\"padding\";s:3:\"5px\";}', 'Block Header', 1, 'font-family: Verdana, Helvetica, sans-serif;', 0)", '76' => "(76, 8, 'Navigation bar menu', 'tr.head-nav td', 'a:0:{}', '', 1, 'vertical-align: middle;', 0)", '48' => "(48, 8, 'Block data', 'td.block-data', 'a:2:{s:9:\"font-size\";s:5:\"12px;\";s:7:\"padding\";s:3:\"5px\";}', '', 1, '', 0)", '78' => "(78, 8, 'Body main style', 'body', 'a:0:{}', '', 1, 'padding: 0px; \\r\\nbackground-color: #ffffff; \\r\\nfont-family: arial, verdana, helvetica; \\r\\nfont-size: small;\\r\\nwidth: auto;\\r\\nmargin: 0px;', 0)", '58' => "(58, 8, 'Main table', 'table.main-table', 'a:0:{}', '', 1, 'width: 770px;\\r\\nmargin: 0px;\\r\\n/*table-layout: fixed;*/', 0)", '79' => "(79, 8, 'Block: header of data block', 'span.block-data-grid-header', 'a:0:{}', '', 1, 'font-family: Arial, Helvetica, sans-serif;\\r\\ncolor: #009DF6;\\r\\nfont-size: 12px;\\r\\nfont-weight: bold;\\r\\nbackground-color: #E6EEFF;\\r\\npadding: 6px;\\r\\nwhite-space: nowrap;', 0)", '64' => "(64, 8, 'Link', 'a', 'a:0:{}', '', 1, '', 0)", '46' => "(46, 8, 'Product title link', 'a.link-product1', 'a:0:{}', 'Product title link', 1, 'color: #62A1DE;\\r\\nfont-size: 14px;\\r\\nfont-weight: bold;\\r\\nline-height: 20px;\\r\\npadding-bottom: 10px;', 0)", '75' => "(75, 8, 'Copy of Main path link', 'table.main-path td a:hover', 'a:0:{}', '', 1, 'color: #ffffff;', 0)", '160' => "(160, 8, 'Current item in navigation bar', '.checkout-step-current', 'a:0:{}', '', 1, 'color: #A20303;\\r\\nfont-weight: bold;', 0)", '51' => "(51, 8, 'Right block data', 'td.right-block-data', 'a:1:{s:9:\"font-size\";s:4:\"11px\";}', '', 2, 'padding: 7px;\\r\\nbackground: #e3edf6 url(\"/in-commerce4/themes/default/img/bgr_login.jpg\") repeat-y scroll left top;\\r\\nborder-bottom: 1px solid #64a1df;', 48)", '67' => "(67, 8, 'Pagination bar: text', 'table.block-pagination td', 'a:3:{s:5:\"color\";s:7:\"#8B898B\";s:9:\"font-size\";s:4:\"12px\";s:11:\"font-weight\";s:6:\"normal\";}', '', 1, '', 0)", '45' => "(45, 8, 'Category link', 'a.subcat', 'a:0:{}', 'Category link', 1, 'color: #2069A4', 0)", '68' => "(68, 8, 'Pagination bar: link', 'table.block-pagination td a', 'a:3:{s:5:\"color\";s:7:\"#8B898B\";s:9:\"font-size\";s:5:\"12px;\";s:11:\"font-weight\";s:6:\"normal\";}', '', 1, '', 0)", '69' => "(69, 8, 'Product description in product list', '.product-list-description', 'a:2:{s:5:\"color\";s:7:\"#8B898B\";s:9:\"font-size\";s:4:\"12px\";}', '', 1, '', 0)", '73' => "(73, 8, 'Main path link', 'table.main-path td a', 'a:0:{}', '', 1, 'color: #d5e231;', 0)", '83' => "(83, 8, 'Product title link in list (shopping cart)', 'a.link-product-cart', 'a:0:{}', 'Product title link', 1, 'color: #18559C;\\r\\nfont-size: 12px;\\r\\nfont-weight: bold;\\r\\ntext-decoration: none;\\r\\n\\r\\n', 0)", '72' => "(72, 8, 'Main path block text', 'table.main-path td', 'a:0:{}', '', 1, 'color: #ffffff;\\r\\nfont-size: 10px;\\r\\nfont-weight: normal;\\r\\npadding: 1px;\\r\\n', 0)", '61' => "(61, 8, 'Block: header of data table', 'td.block-data-grid-header', 'a:6:{s:4:\"font\";s:28:\"Arial, Helvetica, sans-serif\";s:5:\"color\";s:7:\"#009DF6\";s:9:\"font-size\";s:4:\"12px\";s:11:\"font-weight\";s:4:\"bold\";s:16:\"background-color\";s:7:\"#E6EEFF\";s:7:\"padding\";s:3:\"6px\";}', '', 1, 'white-space: nowrap;\\r\\npadding-left: 10px;\\r\\n/*\\r\\nbackground-image: url(/in-commerce4/themes/default/img/bullet1.gif);\\r\\nbackground-position: 10px 12px;\\r\\nbackground-repeat: no-repeat;\\r\\n*/', 0)", '65' => "(65, 8, 'Link in product list additional row', 'td.product-list-additional a', 'a:1:{s:5:\"color\";s:7:\"#8B898B\";}', '', 2, '', 64)", '55' => "(55, 8, 'Main table, left column', 'td.main-column-left', 'a:0:{}', '', 1, 'width:180px;\\r\\nborder: 1px solid #62A1DE;\\r\\nborder-top: 0px;', 0)", '70' => "(70, 8, 'Product title link in list (category)', 'a.link-product-category', 'a:0:{}', 'Product title link', 1, 'color: #18559C;\\r\\nfont-size: 12px;\\r\\nfont-weight: bold;\\r\\ntext-decoration: none;\\r\\n\\r\\n', 0)", '66' => "(66, 8, 'Pagination bar block', 'table.block-pagination', 'a:0:{}', '', 1, '', 0)", '49' => "(49, 8, 'Bulleted list inside block', 'td.block-data ul li', 'a:0:{}', '', 1, ' list-style-image: url(/in-commerce4/themes/default/img/bullet2.gif);\\r\\n margin-bottom: 10px;\\r\\n font-size: 11px;', 0)", '87' => "(87, 8, 'Cart item input form element', 'td.cart-item-atributes input', 'a:0:{}', '', 1, 'border: 1px solid #7BB2E6;', 0)", '119' => "(119, 8, 'Data grid row header', 'td.block-data-row-hdr', 'a:0:{}', 'Used in order preview', 2, 'background-color: #eeeeee;\\r\\nborder-bottom: 1px solid #dddddd;\\r\\nborder-top: 1px solid #cccccc;\\r\\nfont-weight: bold;', 48)", '82' => "(82, 8, '\"More\" link image', 'a.link-more img', 'a:0:{}', '', 2, 'text-decoration: none;\\r\\npadding-left: 5px;', 64)", '63' => "(63, 8, 'Additional info under product description in list', 'td.product-list-additional', 'a:5:{s:5:\"color\";s:7:\"#8B898B\";s:9:\"font-size\";s:4:\"11px\";s:11:\"font-weight\";s:6:\"normal\";s:10:\"border-top\";s:18:\"1px dashed #8B898B\";s:13:\"border-bottom\";s:18:\"1px dashed #8B898B\";}', '', 2, '', 48)", '43' => "(43, 8, 'Block', 'table.block', 'a:2:{s:16:\"background-color\";s:7:\"#E3EEF9\";s:6:\"border\";s:17:\"1px solid #64A1DF\";}', 'Block', 1, 'border: 0; \\r\\nmargin-bottom: 1px;\\r\\nwidth: 100%;', 0)", '84' => "(84, 8, 'Cart item cell', 'td.cart-item', 'a:0:{}', '', 1, 'background-color: #F6FAFF;\\r\\nborder-left: 1px solid #ffffff;\\r\\nborder-bottom: 1px solid #ffffff;\\r\\npadding: 4px;', 0)", '57' => "(57, 8, 'Main table, right column', 'td.main-column-right', 'a:0:{}', '', 1, 'width:220px;\\r\\nborder: 1px solid #62A1DE;\\r\\nborder-top: 0px;', 0)", '161' => "(161, 8, 'Block for sub categories', 'td.block-data-subcats', 'a:0:{}', '', 2, ' background: #FFFFFF\\r\\nurl(/in-commerce4/themes/default/in-commerce/img/bgr_categories.jpg);\\r\\n background-repeat: no-repeat;\\r\\n background-position: top right;\\r\\nborder-bottom: 5px solid #DEEAFF;\\r\\npadding-left: 10px;', 48)", '77' => "(77, 8, 'Left block header', 'td.left-block-header', 'a:0:{}', '', 2, 'font-family : verdana, helvetica, sans-serif;\\r\\ncolor : #ffffff;\\r\\nfont-size : 12px;\\r\\nfont-weight : bold;\\r\\ntext-decoration : none;\\r\\nbackground-color: #64a1df;\\r\\npadding: 5px;\\r\\npadding-left: 7px;', 42)", '80' => "(80, 8, 'Right block data - text', 'td.right-block-data td', 'a:1:{s:9:\"font-size\";s:5:\"11px;\";}', '', 2, '', 48)", '53' => "(53, 8, 'Right block header', 'td.right-block-header', 'a:0:{}', '', 2, 'font-family : verdana, helvetica, sans-serif;\\r\\ncolor : #ffffff;\\r\\nfont-size : 12px;\\r\\nfont-weight : bold;\\r\\ntext-decoration : none;\\r\\nbackground-color: #64a1df;\\r\\npadding: 5px;\\r\\npadding-left: 7px;', 42)", '85' => "(85, 8, 'Cart item cell with attributes', 'td.cart-item-attributes', 'a:0:{}', '', 1, 'background-color: #E6EEFF;\\r\\nborder-left: 1px solid #ffffff;\\r\\nborder-bottom: 1px solid #ffffff;\\r\\npadding: 4px;\\r\\ntext-align: center;\\r\\nvertical-align: middle;\\r\\nfont-size: 12px;\\r\\nfont-weight: normal;', 0)", '86' => "(86, 8, 'Cart item cell with name', 'td.cart-item-name', 'a:0:{}', '', 1, 'background-color: #F6FAFF;\\r\\nborder-left: 1px solid #ffffff;\\r\\nborder-bottom: 1px solid #ffffff;\\r\\npadding: 3px;', 0)", '47' => "(47, 8, 'Block content of featured product', 'td.featured-block-data', 'a:0:{}', '', 1, 'font-family: Arial,Helvetica,sans-serif;\\r\\nfont-size: 12px;', 0)", '56' => "(56, 8, 'Main table, middle column', 'td.main-column-center', 'a:0:{}', '', 1, '\\r\\n', 0)", '50' => "(50, 8, 'Product title link in list', 'a.link-product2', 'a:0:{}', 'Product title link', 1, 'color: #62A1DE;\\r\\nfont-size: 12px;\\r\\nfont-weight: bold;\\r\\ntext-decoration: none;\\r\\n\\r\\n', 0)", '71' => "(71, 8, 'Main path block', 'table.main-path', 'a:0:{}', '', 1, 'background: #61b0ec url(\"/in-commerce4/themes/default/img/bgr_path.jpg\") repeat-y scroll left top;\\r\\nwidth: 100%;\\r\\nmargin-bottom: 1px;\\r\\nmargin-right: 1px; \\r\\nmargin-left: 1px;', 0)", '62' => "(62, 8, 'Block: columns header for data table', 'table.block-no-border th', 'a:6:{s:4:\"font\";s:28:\"Arial, Helvetica, sans-serif\";s:5:\"color\";s:7:\"#18559C\";s:9:\"font-size\";s:4:\"11px\";s:11:\"font-weight\";s:4:\"bold\";s:16:\"background-color\";s:7:\"#B4D2EE\";s:7:\"padding\";s:3:\"6px\";}', '', 1, 'text-align: left;', 0)", '59' => "(59, 8, 'Block without border', 'table.block-no-border', 'a:0:{}', '', 1, 'border: 0px; \\r\\nmargin-bottom: 10px;\\r\\nwidth: 100%;', 0)", '74' => "(74, 8, 'Main path language selector cell', 'td.main-path-language', 'a:0:{}', '', 1, 'vertical-align: middle;\\r\\ntext-align: right;\\r\\npadding-right: 6px;', 0)", '171' => "(171, 8, 'Calendar''s highlighted day', '.calendar tbody .hilite', 'a:0:{}', '', 1, 'background-color: #f6f6f6;\\r\\nborder: 1px solid #83B2C5 !important;', 0)", '175' => "(175, 8, 'Calendar''s days', '.calendar tbody .day', 'a:0:{}', '', 1, 'text-align: right;\\r\\npadding: 2px 4px 2px 2px;\\r\\nwidth: 2em;\\r\\nborder: 1px solid #fefefe;', 0)", '170' => "(170, 8, 'Calendar''s weekends', '.calendar .weekend', 'a:0:{}', '', 1, 'color: #990000;', 0)", '173' => "(173, 8, 'Calendar''s control buttons', '.calendar .calendar_button', 'a:0:{}', '', 1, 'color: black;\\r\\nfont-size: 12px;\\r\\nbackground-color: #eeeeee;', 0)", '174' => "(174, 8, 'Calendar''s day names', '.calendar thead .name', 'a:0:{}', '', 1, 'background-color: #DEEEF6;\\r\\nborder-bottom: 1px solid #000000;', 0)", '172' => "(172, 8, 'Calendar''s top and bottom titles', '.calendar .title', 'a:0:{}', '', 1, 'color: #FFFFFF;\\r\\nbackground-color: #62A1DE;\\r\\nborder: 1px solid #107DC5;\\r\\nborder-top: 0px;\\r\\npadding: 1px;', 0)", '60' => "(60, 8, 'Block header for featured product', 'td.featured-block-header', 'a:0:{}', '', 2, '\\r\\n', 42)", '54' => "(54, 8, 'Right block', 'table.right-block', 'a:0:{}', '', 2, 'background-color: #E3EEF9;\\r\\nborder: 0px;\\r\\nwidth: 100%;', 43)", '44' => "(44, 8, 'Block content', 'td.block-data-big', 'a:0:{}', 'Block content', 1, ' background: #DEEEF6\\r\\nurl(/in-commerce4/themes/default/img/menu_bg.gif);\\r\\n background-repeat: no-repeat;\\r\\n background-position: top right;\\r\\n', 0)", ), ), 'Stylesheets' => Array ( 'UniqueField' => 'StylesheetId', 'Records' => Array ( '8' => "(8, 'Default', 'In-Portal Default Theme', '', 1124952555, 1)", ), ), 'Counters' => Array ( 'UniqueField' => 'Name', 'Records' => Array ( 'members_count' => "(DEFAULT, 'members_count', 'SELECT COUNT(*) FROM <%PREFIX%>PortalUser WHERE Status = 1', NULL , NULL , '3600', '0', '|PortalUser|')", 'members_online' => "(DEFAULT, 'members_online', 'SELECT COUNT(*) FROM <%PREFIX%>UserSession WHERE PortalUserId > 0', NULL , NULL , '3600', '0', '|UserSession|')", 'guests_online' => "(DEFAULT, 'guests_online', 'SELECT COUNT(*) FROM <%PREFIX%>UserSession WHERE PortalUserId <= 0', NULL , NULL , '3600', '0', '|UserSession|')", 'users_online' => "(DEFAULT, 'users_online', 'SELECT COUNT(*) FROM <%PREFIX%>UserSession', NULL , NULL , '3600', '0', '|UserSession|')", ), ), ); // check & insert if not found defined before data foreach ($data as $table_name => $table_info) { $unique_fields = explode(';', $table_info['UniqueField']); foreach ($table_info['Records'] as $unique_value => $insert_sql) { $unique_values = explode(';', $unique_value); $where_clause = Array (); foreach ($unique_fields as $field_index => $unique_field) { $where_clause[] = $unique_field . ' = ' . $this->Conn->qstr($unique_values[$field_index]); } $sql = 'SELECT ' . implode(', ', $unique_fields) . ' FROM ' . TABLE_PREFIX . $table_name . ' WHERE (' . implode(') AND (', $where_clause) . ')'; $found = $this->Conn->GetRow($sql); if ($found) { $found = implode(';', $found); } if ($found != $unique_value) { $this->Conn->Query('INSERT INTO ' . TABLE_PREFIX . $table_name . ' VALUES ' . $insert_sql); } } } } /** * Removes duplicate phrases per language basis (created during proj-base and in-portal shared installation) * */ function _removeDuplicatePhrases() { $id_field = $this->Application->getUnitOption('phrases', 'IDField'); $table_name = $this->Application->getUnitOption('phrases', 'TableName'); $sql = 'SELECT LanguageId, Phrase, MIN(LastChanged) AS LastChanged, COUNT(*) AS DupeCount FROM ' . $table_name . ' GROUP BY LanguageId, Phrase HAVING COUNT(*) > 1'; $duplicate_phrases = $this->Conn->Query($sql); foreach ($duplicate_phrases as $phrase_record) { // 1. keep phrase, that was added first, because it is selected in PhrasesCache::LoadPhraseByLabel $where_clause = Array ( 'LanguageId = ' . $phrase_record['LanguageId'], 'Phrase = ' . $this->Conn->qstr($phrase_record['Phrase']), 'LastChanged' . ' = ' . $phrase_record['LastChanged'], ); $sql = 'SELECT ' . $id_field . ' FROM ' . $table_name . ' WHERE (' . implode(') AND (', $where_clause) . ')'; $phrase_id = $this->Conn->GetOne($sql); // 2. delete all other duplicates $where_clause = Array ( 'LanguageId = ' . $phrase_record['LanguageId'], 'Phrase = ' . $this->Conn->qstr($phrase_record['Phrase']), $id_field . ' <> ' . $phrase_id, ); $sql = 'DELETE FROM ' . $table_name . ' WHERE (' . implode(') AND (', $where_clause) . ')'; $this->Conn->Query($sql); } } function _moveDatabaseFolders() { // Tables: PageContent, Images if ($this->Conn->TableFound('PageContent', true)) { // 1. replaces "/kernel/user_files/" references in content blocks $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); /* @var $ml_helper kMultiLanguageHelper */ $languages = $ml_helper->getLanguages(); $replace_sql = '%1$s = REPLACE(%1$s, "/kernel/user_files/", "/system/user_files/")'; $update_sqls = Array (); foreach ($languages as $language_id) { $update_sqls[] = sprintf($replace_sql, 'l' . $language_id . '_Content'); } if ($update_sqls) { $sql = 'UPDATE ' . TABLE_PREFIX . 'PageContent SET ' . implode(', ', $update_sqls); $this->Conn->Query($sql); } } // 2. replace path of images uploaded via "Images" tab of category items $this->_replaceImageFolder('/kernel/images/', '/system/images/'); // 3. replace path of images uploaded via "Images" tab of category items (when badly formatted) $this->_replaceImageFolder('kernel/images/', 'system/images/'); // 4. replace images uploaded via "In-Bulletin -> Emoticons" section $this->_replaceImageFolder('in-bulletin/images/emoticons/', 'system/images/emoticons/'); // 5. update backup path in config $this->_toolkit->saveConfigValues( Array ( 'Backup_Path' => FULL_PATH . '/system/backupdata' ) ); } /** * Replaces mentions of "/kernel/images" folder in Images table * * @param string $from * @param string $to */ function _replaceImageFolder($from, $to) { $replace_sql = '%1$s = REPLACE(%1$s, "' . $from . '", "' . $to . '")'; $sql = 'UPDATE ' . TABLE_PREFIX . 'Images SET ' . sprintf($replace_sql, 'ThumbPath') . ', ' . sprintf($replace_sql, 'LocalPath'); $this->Conn->Query($sql); } /** * Update colors in skin (only if they were not changed manually) * * @param string $mode when called mode {before, after) */ function Upgrade_5_0_0($mode) { if ($mode == 'before') { $this->_removeDuplicatePhrases(); // because In-Commerce & In-Link share some phrases with Proj-CMS $this->_createProjCMSTables(); $this->_addMissingConfigurationVariables(); } if ($mode == 'after') { $this->_fixSkinColors(); $this->_restructureCatalog(); $this->_sortImages(); // $this->_sortConfigurationVariables('In-Portal', 'in-portal:configure_general'); // $this->_sortConfigurationVariables('In-Portal', 'in-portal:configure_advanced'); } } function _sortConfigurationVariables($module, $section) { $sql = 'SELECT ca.heading, cv.VariableName FROM ' . TABLE_PREFIX . 'ConfigurationAdmin ca LEFT JOIN ' . TABLE_PREFIX . 'ConfigurationValues cv USING(VariableName) WHERE (cv.ModuleOwner = ' . $this->Conn->qstr($module) . ') AND (cv.Section = ' . $this->Conn->qstr($section) . ') ORDER BY ca.DisplayOrder asc, ca.GroupDisplayOrder asc'; $variables = $this->Conn->GetCol($sql, 'VariableName'); if (!$variables) { return ; } $variables = $this->_groupRecords($variables); $group_number = 0; $variable_order = 1; $prev_heading = ''; foreach ($variables as $variable_name => $variable_heading) { if ($prev_heading != $variable_heading) { $group_number++; $variable_order = 1; } $sql = 'UPDATE ' . TABLE_PREFIX . 'ConfigurationAdmin SET DisplayOrder = ' . $this->Conn->qstr($group_number * 10 + $variable_order / 100) . ' WHERE VariableName = ' . $this->Conn->qstr($variable_name); $this->Conn->Query($sql); $variable_order++; $prev_heading = $variable_heading; } } /** * Group list records by header, saves internal order in group * * @param Array $variables * @return Array */ function _groupRecords($variables) { $sorted = Array(); foreach ($variables as $variable_name => $variable_heading) { $sorted[$variable_heading][] = $variable_name; } $variables = Array(); foreach ($sorted as $heading => $heading_records) { foreach ($heading_records as $variable_name) { $variables[$variable_name] = $heading; } } return $variables; } /** * Returns module root category * * @param string $module_name * @param string $module_prefix * @return int */ function _getRootCategory($module_name, $module_prefix) { // don't cache anything here (like in static variables), because database value is changed on the fly !!! $sql = 'SELECT RootCat FROM ' . TABLE_PREFIX . 'Modules WHERE LOWER(Name) = ' . $this->Conn->qstr( strtolower($module_name) ); $root_category = $this->Conn->GetOne($sql); // put to cache too, because CategoriesEventHandler::_prepareAutoPage uses kApplication::findModule $this->Application->ModuleInfo[$module_name]['Name'] = $module_name; $this->Application->ModuleInfo[$module_name]['RootCat'] = $root_category; $this->Application->ModuleInfo[$module_name]['Var'] = $module_prefix; return $root_category; } /** * Move all categories (except "Content") from "Home" to "Content" category and hide them from menu * */ function _restructureCatalog() { $root_category = $this->_getRootCategory('Core', 'adm'); $sql = 'SELECT CategoryId FROM ' . TABLE_PREFIX . 'Category WHERE ParentId = 0 AND CategoryId <> ' . $root_category; $top_categories = $this->Conn->GetCol($sql); if ($top_categories) { // hide all categories located outside "Content" category from menu $sql = 'UPDATE ' . TABLE_PREFIX . 'Category SET IsMenu = 0 WHERE (ParentPath LIKE "|' . implode('|%") OR (ParentPath LIKE "|', $top_categories) . '|%")'; $this->Conn->Query($sql); // move all top level categories under "Content" category and make them visible in menu $sql = 'UPDATE ' . TABLE_PREFIX . 'Category SET IsMenu = 1, ParentId = ' . $root_category . ' WHERE ParentId = 0 AND CategoryId <> ' . $root_category; $this->Conn->Query($sql); } // make sure, that all categories have valid value for Priority field $priority_helper = $this->Application->recallObject('PriorityHelper'); /* @var $priority_helper kPriorityHelper */ $event = new kEvent('c:OnListBuild'); // update all categories, because they are all under "Content" category now $sql = 'SELECT CategoryId FROM ' . TABLE_PREFIX . 'Category'; $categories = $this->Conn->GetCol($sql); foreach ($categories as $category_id) { $priority_helper->recalculatePriorities($event, 'ParentId = ' . $category_id); } // create initial theme structure in Category table $this->_toolkit->rebuildThemes(); // make sure, that all system templates have ThemeId set (only possible during platform project upgrade) $sql = 'SELECT ThemeId FROM ' . TABLE_PREFIX . 'Theme WHERE PrimaryTheme = 1'; $primary_theme_id = $this->Conn->GetOne($sql); if ($primary_theme_id) { $sql = 'UPDATE ' . TABLE_PREFIX . 'Category SET ThemeId = ' . $primary_theme_id . ' WHERE IsSystem = 1 AND ThemeId = 0'; $this->Conn->Query($sql); } } /** * Changes skin colors to match new ones (only in case, when they match default values) * */ function _fixSkinColors() { $skin = $this->Application->recallObject('skin', null, Array ('skip_autoload' => 1)); /* @var $skin kDBItem */ $skin->Load(1, 'IsPrimary'); if ($skin->isLoaded()) { $skin_options = unserialize( $skin->GetDBField('Options') ); $changes = Array ( // option: from -> to 'HeadBgColor' => Array ('#1961B8', '#007BF4'), 'HeadBarColor' => Array ('#FFFFFF', '#000000'), 'HeadColor' => Array ('#CCFF00', '#FFFFFF'), 'TreeColor' => Array ('#006F99', '#000000'), 'TreeHoverColor' => Array ('', '#009FF0'), 'TreeHighHoverColor' => Array ('', '#FFFFFF'), 'TreeHighBgColor' => Array ('#4A92CE', '#4A92CE'), 'TreeBgColor' => Array ('#FFFFFF', '#DCECF6'), ); $can_change = true; foreach ($changes as $option_name => $change) { list ($change_from, $change_to) = $change; $can_change = $can_change && ($change_from == $skin_options[$option_name]['Value']); if ($can_change) { $skin_options[$option_name]['Value'] = $change_to; } } if ($can_change) { $skin->SetDBField('Options', serialize($skin_options)); $skin->Update(); $skin_helper = $this->Application->recallObject('SkinHelper'); /* @var $skin_helper SkinHelper */ $skin_file = $skin_helper->getSkinPath(); if (file_exists($skin_file)) { unlink($skin_file); } } } } /** * 1. Set root category not to generate filename automatically and hide it from catalog * 2. Hide root category of In-Edit and set it's fields * * @param int $category_id */ function _resetRootCategory($category_id) { $fields_hash = Array ( 'l1_Name' => 'Content', 'Filename' => 'Content', 'AutomaticFilename' => 0, 'l1_Description' => 'Content', 'Status' => 4, ); $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'Category', 'CategoryId = ' . $category_id); } function _createProjCMSTables() { // 0. make sure, that Content category exists $root_category = $this->_getRootCategory('Proj-CMS', 'st'); if ($root_category) { // proj-cms module found -> remove it $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Modules WHERE Name = "Proj-CMS"'; $this->Conn->Query($sql); unset($this->Application->ModuleInfo['Proj-CMS']); $this->_resetRootCategory($root_category); // unhide all structure categories $sql = 'UPDATE ' . TABLE_PREFIX . 'Category SET Status = 1 WHERE (Status = 4) AND (CategoryId <> ' . $root_category . ')'; $this->Conn->Query($sql); } else { $root_category = $this->_getRootCategory('In-Edit', 'cms'); if ($root_category) { // in-edit module found -> remove it $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Modules WHERE Name = "In-Edit"'; $this->Conn->Query($sql); unset($this->Application->ModuleInfo['In-Edit']); $this->_resetRootCategory($root_category); } } if (!$root_category) { // create "Content" category when Proj-CMS/In-Edit module was not installed before // use direct sql here, because category table structure doesn't yet match table structure in object $fields_hash = Array ( 'l1_Name' => 'Content', 'Filename' => 'Content', 'AutomaticFilename' => 0, 'l1_Description' => 'Content', 'Status' => 4, ); $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'Category'); $root_category = $this->Conn->getInsertID(); } $this->_toolkit->deleteCache(); $this->_toolkit->SetModuleRootCategory('Core', $root_category); // 1. process "Category" table $structure = $this->Conn->Query('DESCRIBE ' . TABLE_PREFIX . 'Category', 'Field'); if (!array_key_exists('Template', $structure)) { // fields from "Pages" table were not added to "Category" table (like before "Proj-CMS" module install) $sql = "ALTER TABLE " . TABLE_PREFIX . "Category ADD COLUMN Template varchar(255) default NULL, ADD COLUMN l1_Title varchar(255) default '', ADD COLUMN l2_Title varchar(255) default '', ADD COLUMN l3_Title varchar(255) default '', ADD COLUMN l4_Title varchar(255) default '', ADD COLUMN l5_Title varchar(255) default '', ADD COLUMN l1_MenuTitle varchar(255) NOT NULL default '', ADD COLUMN l2_MenuTitle varchar(255) NOT NULL default '', ADD COLUMN l3_MenuTitle varchar(255) NOT NULL default '', ADD COLUMN l4_MenuTitle varchar(255) NOT NULL default '', ADD COLUMN l5_MenuTitle varchar(255) NOT NULL default '', ADD COLUMN MetaTitle text, ADD COLUMN IndexTools text, ADD COLUMN IsIndex tinyint(1) NOT NULL default '0', ADD COLUMN IsMenu TINYINT(4) NOT NULL DEFAULT '1', ADD COLUMN IsSystem tinyint(4) NOT NULL default '0', ADD COLUMN FormId int(11) default NULL, ADD COLUMN FormSubmittedTemplate varchar(255) default NULL, ADD COLUMN l1_Translated tinyint(4) NOT NULL default '0', ADD COLUMN l2_Translated tinyint(4) NOT NULL default '0', ADD COLUMN l3_Translated tinyint(4) NOT NULL default '0', ADD COLUMN l4_Translated tinyint(4) NOT NULL default '0', ADD COLUMN l5_Translated tinyint(4) NOT NULL default '0', ADD COLUMN FriendlyURL varchar(255) NOT NULL default '', ADD INDEX IsIndex (IsIndex), ADD INDEX l1_Translated (l1_Translated), ADD INDEX l2_Translated (l2_Translated), ADD INDEX l3_Translated (l3_Translated), ADD INDEX l4_Translated (l4_Translated), ADD INDEX l5_Translated (l5_Translated)"; $this->Conn->Query($sql); } if (array_key_exists('Path', $structure)) { $sql = 'ALTER TABLE ' . TABLE_PREFIX . 'Category DROP Path'; $this->Conn->Query($sql); } // 2. process "PageContent" table if ($this->Conn->TableFound(TABLE_PREFIX . 'PageContent', true)) { $structure = $this->Conn->Query('DESCRIBE ' . TABLE_PREFIX . 'PageContent', 'Field'); if (!array_key_exists('l1_Translated', $structure)) { $sql = "ALTER TABLE " . TABLE_PREFIX . "PageContent ADD COLUMN l1_Translated tinyint(4) NOT NULL default '0', ADD COLUMN l2_Translated tinyint(4) NOT NULL default '0', ADD COLUMN l3_Translated tinyint(4) NOT NULL default '0', ADD COLUMN l4_Translated tinyint(4) NOT NULL default '0', ADD COLUMN l5_Translated tinyint(4) NOT NULL default '0'"; $this->Conn->Query($sql); } } // 3. process "FormFields" table if ($this->Conn->TableFound(TABLE_PREFIX . 'FormFields', true)) { $structure = $this->Conn->Query('DESCRIBE ' . TABLE_PREFIX . 'FormFields', 'Field'); if (!$structure['FormId']['Key']) { $sql = "ALTER TABLE " . TABLE_PREFIX . "FormFields CHANGE Validation Validation TINYINT NOT NULL DEFAULT '0', ADD INDEX FormId (FormId), ADD INDEX Priority (Priority), ADD INDEX IsSystem (IsSystem), ADD INDEX DisplayInGrid (DisplayInGrid)"; $this->Conn->Query($sql); } } else { $this->Conn->Query("INSERT INTO " . TABLE_PREFIX . "Permissions VALUES (DEFAULT, 'in-portal:forms.view', 11, 1, 1, 0)"); $this->Conn->Query("INSERT INTO " . TABLE_PREFIX . "Permissions VALUES (DEFAULT, 'in-portal:forms.add', 11, 1, 1, 0)"); $this->Conn->Query("INSERT INTO " . TABLE_PREFIX . "Permissions VALUES (DEFAULT, 'in-portal:forms.edit', 11, 1, 1, 0)"); $this->Conn->Query("INSERT INTO " . TABLE_PREFIX . "Permissions VALUES (DEFAULT, 'in-portal:forms.delete', 11, 1, 1, 0)"); } // 4. process "FormSubmissions" table if ($this->Conn->TableFound(TABLE_PREFIX . 'FormSubmissions', true)) { $structure = $this->Conn->Query('DESCRIBE ' . TABLE_PREFIX . 'FormSubmissions', 'Field'); if (!$structure['SubmissionTime']['Key']) { $sql = "ALTER TABLE " . TABLE_PREFIX . "FormSubmissions ADD INDEX SubmissionTime (SubmissionTime)"; $this->Conn->Query($sql); } } else { $this->Conn->Query("INSERT INTO " . TABLE_PREFIX . "Permissions VALUES (DEFAULT, 'in-portal:submissions.view', 11, 1, 1, 0)"); } // 5. add missing event $sql = 'SELECT EventId FROM ' . TABLE_PREFIX . 'Events WHERE (Event = "FORM.SUBMITTED") AND (Type = 1)'; $event_id = $this->Conn->GetOne($sql); if (!$event_id) { $sql = "INSERT INTO " . TABLE_PREFIX . "Events VALUES (DEFAULT, 'FORM.SUBMITTED', NULL, 1, 0, 'Core:Category', 'la_event_FormSubmitted', 1)"; $this->Conn->Query($sql); } $sql = 'SELECT EventId FROM ' . TABLE_PREFIX . 'Events WHERE (Event = "FORM.SUBMITTED") AND (Type = 0)'; $event_id = $this->Conn->GetOne($sql); if (!$event_id) { $sql = "INSERT INTO " . TABLE_PREFIX . "Events VALUES (DEFAULT, 'FORM.SUBMITTED', NULL, 1, 0, 'Core:Category', 'la_event_FormSubmitted', 0)"; $this->Conn->Query($sql); } } function _addMissingConfigurationVariables() { $variables = Array ( 'cms_DefaultDesign' => Array ( "INSERT INTO " . TABLE_PREFIX . "ConfigurationAdmin VALUES ('cms_DefaultDesign', 'la_Text_General', 'la_prompt_DefaultDesignTemplate', 'text', NULL, NULL, 10.15, 0, 0)", "INSERT INTO " . TABLE_PREFIX . "ConfigurationValues VALUES (DEFAULT, 'cms_DefaultDesign', '/platform/designs/general', 'In-Portal', 'in-portal:configure_categories')", ), 'Require_AdminSSL' => Array ( "INSERT INTO " . TABLE_PREFIX . "ConfigurationAdmin VALUES ('Require_AdminSSL', 'la_Text_Website', 'la_config_RequireSSLAdmin', 'checkbox', '', '', 10.105, 0, 1)", "INSERT INTO " . TABLE_PREFIX . "ConfigurationValues VALUES (DEFAULT, 'Require_AdminSSL', '', 'In-Portal', 'in-portal:configure_advanced')", ), 'UsePopups' => Array ( "INSERT INTO " . TABLE_PREFIX . "ConfigurationAdmin VALUES ('UsePopups', 'la_Text_Website', 'la_config_UsePopups', 'radio', '', '1=la_Yes,0=la_No', 10.221, 0, 0)", "INSERT INTO " . TABLE_PREFIX . "ConfigurationValues VALUES (DEFAULT, 'UsePopups', '1', 'In-Portal', 'in-portal:configure_advanced')", ), 'UseDoubleSorting' => Array ( "INSERT INTO " . TABLE_PREFIX . "ConfigurationAdmin VALUES ('UseDoubleSorting', 'la_Text_Website', 'la_config_UseDoubleSorting', 'radio', '', '1=la_Yes,0=la_No', 10.222, 0, 0)", "INSERT INTO " . TABLE_PREFIX . "ConfigurationValues VALUES (DEFAULT, 'UseDoubleSorting', '0', 'In-Portal', 'in-portal:configure_advanced')", ), 'MenuFrameWidth' => Array ( "INSERT INTO " . TABLE_PREFIX . "ConfigurationAdmin VALUES ('MenuFrameWidth', 'la_title_General', 'la_prompt_MenuFrameWidth', 'text', NULL, NULL, 10.31, 0, 0)", "INSERT INTO " . TABLE_PREFIX . "ConfigurationValues VALUES (DEFAULT, 'MenuFrameWidth', 200, 'In-Portal', 'in-portal:configure_advanced')", ), 'DefaultSettingsUserId' => Array ( "INSERT INTO " . TABLE_PREFIX . "ConfigurationAdmin VALUES ('DefaultSettingsUserId', 'la_title_General', 'la_prompt_DefaultUserId', 'text', NULL, NULL, '10.06', '0', '0')", "INSERT INTO " . TABLE_PREFIX . "ConfigurationValues VALUES (DEFAULT, 'DefaultSettingsUserId', -1, 'In-Portal:Users', 'in-portal:configure_users')", ), ); foreach ($variables as $variable_name => $variable_sqls) { $sql = 'SELECT VariableId FROM ' . TABLE_PREFIX . 'ConfigurationValues WHERE VariableName = ' . $this->Conn->qstr($variable_name); $variable_id = $this->Conn->GetOne($sql); if ($variable_id) { continue; } foreach ($variable_sqls as $variable_sql) { $this->Conn->Query($variable_sql); } } } /** * Sort images in database (update Priority field) * */ function _sortImages() { $sql = 'SELECT * FROM ' . TABLE_PREFIX . 'Images ORDER BY ResourceId ASC , DefaultImg DESC , ImageId ASC'; $images = $this->Conn->Query($sql); $priority = 0; $last_resource_id = false; foreach ($images as $image) { if ($image['ResourceId'] != $last_resource_id) { // each item have own priorities among it's images $priority = 0; $last_resource_id = $image['ResourceId']; } if (!$image['DefaultImg']) { $priority--; } $sql = 'UPDATE ' . TABLE_PREFIX . 'Images SET Priority = ' . $priority . ' WHERE ImageId = ' . $image['ImageId']; $this->Conn->Query($sql); } } /** * Update to 5.0.1 * * @param string $mode when called mode {before, after) */ function Upgrade_5_0_1($mode) { if ($mode == 'after') { // delete old events $events_to_delete = Array ('CATEGORY.MODIFY', 'CATEGORY.DELETE'); $sql = 'SELECT EventId FROM ' . TABLE_PREFIX . 'Events WHERE Event IN ("' . implode('","', $events_to_delete) . '")'; $event_ids = $this->Conn->GetCol($sql); if ($event_ids) { $this->_deleteEvents($event_ids); $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Phrase WHERE Phrase IN ("la_event_category.modify", "la_event_category.delete")'; $this->Conn->Query($sql); } // partially delete events $sql = 'SELECT EventId FROM ' . TABLE_PREFIX . 'Events WHERE (Event IN ("CATEGORY.APPROVE", "CATEGORY.DENY")) AND (Type = ' . EmailEvent::EVENT_TYPE_ADMIN . ')'; $event_ids = $this->Conn->GetCol($sql); if ($event_ids) { $this->_deleteEvents($event_ids); } } } function _deleteEvents($ids) { $sql = 'DELETE FROM ' . TABLE_PREFIX . 'EmailMessage WHERE EventId IN (' . implode(',', $ids) . ')'; $this->Conn->Query($sql); $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Events WHERE EventId IN (' . implode(',', $ids) . ')'; $this->Conn->Query($sql); } /** * Update to 5.0.2-B2; Transforms IsIndex field values to SymLinkCategoryId field * * @param string $mode when called mode {before, after) */ function Upgrade_5_0_2_B2($mode) { // 0 - Regular, 1 - Category Index, 2 - Container if ($mode == 'before') { // fix "Content" category $fields_hash = Array ( 'CreatedById' => USER_ROOT, 'CreatedOn' => time(), 'ResourceId' => $this->Application->NextResourceId(), ); $category_id = $this->Application->findModule('Name', 'Core', 'RootCat'); $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'Category', 'CategoryId = ' . $category_id); // get all categories, marked as category index $sql = 'SELECT ParentPath, CategoryId FROM ' . TABLE_PREFIX . 'Category WHERE IsIndex = 1'; $category_indexes = $this->Conn->GetCol($sql, 'CategoryId'); foreach ($category_indexes as $category_id => $parent_path) { $parent_path = explode('|', substr($parent_path, 1, -1)); // set symlink to $category_id for each category, marked as container in given category path $sql = 'SELECT CategoryId FROM ' . TABLE_PREFIX . 'Category WHERE CategoryId IN (' . implode(',', $parent_path) . ') AND (IsIndex = 2)'; $category_containers = $this->Conn->GetCol($sql); if ($category_containers) { $sql = 'UPDATE ' . TABLE_PREFIX . 'Category SET SymLinkCategoryId = ' . $category_id . ' WHERE CategoryId IN (' . implode(',', $category_containers) . ')'; $this->Conn->Query($sql); } } } if ($mode == 'after') { // scan theme to fill Theme.TemplateAliases and ThemeFiles.TemplateAlias fields $this->_toolkit->rebuildThemes(); $sql = 'SELECT TemplateAliases, ThemeId FROM ' . TABLE_PREFIX . 'Theme WHERE (Enabled = 1) AND (TemplateAliases <> "")'; $template_aliases = $this->Conn->GetCol($sql, 'ThemeId'); $all_template_aliases = Array (); // reversed alias (from real template to alias) foreach ($template_aliases as $theme_id => $theme_template_aliases) { $theme_template_aliases = unserialize($theme_template_aliases); if (!$theme_template_aliases) { continue; } $all_template_aliases = array_merge($all_template_aliases, array_flip($theme_template_aliases)); } $default_design_replaced = false; $default_design = trim($this->Application->ConfigValue('cms_DefaultDesign'), '/'); foreach ($all_template_aliases as $from_template => $to_alias) { // replace default design in configuration variable (when matches alias) if ($from_template == $default_design) { // specific alias matched $sql = 'UPDATE ' . TABLE_PREFIX . 'ConfigurationValues SET VariableValue = ' . $this->Conn->qstr($to_alias) . ' WHERE VariableName = "cms_DefaultDesign"'; $this->Conn->Query($sql); $default_design_replaced = true; } // replace Category.Template and Category.CachedTemplate fields (when matches alias) $sql = 'UPDATE ' . TABLE_PREFIX . 'Category SET Template = ' . $this->Conn->qstr($to_alias) . ' WHERE Template IN (' . $this->Conn->qstr('/' . $from_template) . ',' . $this->Conn->qstr($from_template) . ')'; $this->Conn->Query($sql); $sql = 'UPDATE ' . TABLE_PREFIX . 'Category SET CachedTemplate = ' . $this->Conn->qstr($to_alias) . ' WHERE CachedTemplate IN (' . $this->Conn->qstr('/' . $from_template) . ',' . $this->Conn->qstr($from_template) . ')'; $this->Conn->Query($sql); } if (!$default_design_replaced) { // in case if current default design template doesn't // match any of aliases, then set it to #default_design# $sql = 'UPDATE ' . TABLE_PREFIX . 'ConfigurationValues SET VariableValue = "#default_design#" WHERE VariableName = "cms_DefaultDesign"'; $this->Conn->Query($sql); } // replace data in category custom fields used for category item template storage $rewrite_processor = $this->Application->recallObject('kRewriteUrlProcessor'); /* @var $rewrite_processor kRewriteUrlProcessor */ foreach ($this->Application->ModuleInfo as $module_name => $module_info) { $custom_field_id = $rewrite_processor->getItemTemplateCustomField($module_info['Var']); if (!$custom_field_id) { continue; } foreach ($all_template_aliases as $from_template => $to_alias) { $sql = 'UPDATE ' . TABLE_PREFIX . 'CategoryCustomData SET l1_cust_' . $custom_field_id . ' = ' . $this->Conn->qstr($to_alias) . ' WHERE l1_cust_' . $custom_field_id . ' = ' . $this->Conn->qstr($from_template); $this->Conn->Query($sql); } } } } /** * Update to 5.0.3-B2; Moves CATEGORY.* permission from module root categories to Content category * * @param string $mode when called mode {before, after) */ function Upgrade_5_0_3_B2($mode) { if ($mode == 'before') { // get permissions $sql = 'SELECT PermissionName FROM ' . TABLE_PREFIX . 'PermissionConfig WHERE PermissionName LIKE "CATEGORY.%"'; $permission_names = $this->Conn->GetCol($sql); // get groups $sql = 'SELECT GroupId FROM ' . TABLE_PREFIX . 'PortalGroup'; $user_groups = $this->Conn->GetCol($sql); $user_group_count = count($user_groups); // get module root categories $sql = 'SELECT RootCat FROM ' . TABLE_PREFIX . 'Modules'; $module_categories = $this->Conn->GetCol($sql); $module_categories[] = 0; $module_categories = implode(',', array_unique($module_categories)); $permissions = $delete_permission_ids = Array (); foreach ($permission_names as $permission_name) { foreach ($user_groups as $group_id) { $sql = 'SELECT PermissionId FROM ' . TABLE_PREFIX . 'Permissions WHERE (Permission = ' . $this->Conn->qstr($permission_name) . ') AND (PermissionValue = 1) AND (GroupId = ' . $group_id . ') AND (`Type` = 0) AND (CatId IN (' . $module_categories . '))'; $permission_ids = $this->Conn->GetCol($sql); if ($permission_ids) { if (!array_key_exists($permission_name, $permissions)) { $permissions[$permission_name] = Array (); } $permissions[$permission_name][] = $group_id; $delete_permission_ids = array_merge($delete_permission_ids, $permission_ids); } } } if ($delete_permission_ids) { // here we can delete some of permissions that will be added later $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Permissions WHERE PermissionId IN (' . implode(',', $delete_permission_ids) . ')'; $this->Conn->Query($sql); } $home_category = $this->Application->findModule('Name', 'Core', 'RootCat'); foreach ($permissions as $permission_name => $permission_groups) { // optimize a bit $has_everyone = in_array(15, $permission_groups); if ($has_everyone || (!$has_everyone && count($permission_groups) == $user_group_count - 1)) { // has permission for "Everyone" group OR allowed in all groups except "Everyone" group // so remove all other explicitly allowed permissions $permission_groups = Array (15); } foreach ($permission_groups as $group_id) { $fields_hash = Array ( 'Permission' => $permission_name, 'GroupId' => $group_id, 'PermissionValue' => 1, 'Type' => 0, // category-based permission, 'CatId' => $home_category, ); $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'Permissions'); } } $updater = $this->Application->makeClass('kPermCacheUpdater'); /* @var $updater kPermCacheUpdater */ $updater->OneStepRun(); } } /** * Update to 5.1.0-B1; Makes email message fields multilingual * * @param string $mode when called mode {before, after) */ function Upgrade_5_1_0_B1($mode) { if ( $mode == 'before' ) { $this->_renameTables('from'); // migrate email events $table_structure = $this->Conn->Query('DESCRIBE ' . TABLE_PREFIX . 'Events', 'Field'); if (!array_key_exists('Headers', $table_structure)) { $sql = 'ALTER TABLE ' . TABLE_PREFIX . 'Events ADD `Headers` TEXT NULL AFTER `ReplacementTags`, ADD `MessageType` VARCHAR(4) NOT NULL default "text" AFTER `Headers`'; $this->Conn->Query($sql); } // alter here, because kMultiLanguageHelper::createFields // method, called after will expect that to be in database $sql = 'ALTER TABLE ' . TABLE_PREFIX . 'Events ADD AllowChangingSender TINYINT NOT NULL DEFAULT "0" AFTER MessageType , ADD CustomSender TINYINT NOT NULL DEFAULT "0" AFTER AllowChangingSender , ADD SenderName VARCHAR(255) NOT NULL DEFAULT "" AFTER CustomSender , ADD SenderAddressType TINYINT NOT NULL DEFAULT "0" AFTER SenderName , ADD SenderAddress VARCHAR(255) NOT NULL DEFAULT "" AFTER SenderAddressType , ADD AllowChangingRecipient TINYINT NOT NULL DEFAULT "0" AFTER SenderAddress , ADD CustomRecipient TINYINT NOT NULL DEFAULT "0" AFTER AllowChangingRecipient , ADD Recipients TEXT AFTER CustomRecipient, ADD INDEX (AllowChangingSender), ADD INDEX (CustomSender), ADD INDEX (SenderAddressType), ADD INDEX (AllowChangingRecipient), ADD INDEX (CustomRecipient)'; $this->Conn->Query($sql); // create multilingual fields for phrases and email events $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); /* @var $ml_helper kMultiLanguageHelper */ $ml_helper->createFields('phrases'); $ml_helper->createFields('emailevents'); $languages = $ml_helper->getLanguages(); if ($this->Conn->TableFound(TABLE_PREFIX . 'EmailMessage', true)) { $email_message_helper = $this->Application->recallObject('EmailMessageHelper'); /* @var $email_message_helper EmailMessageHelper */ - foreach ($languages as $language_id) { $sql = 'SELECT EmailMessageId, Template, EventId FROM ' . TABLE_PREFIX . 'EmailMessage WHERE LanguageId = ' . $language_id; $translations = $this->Conn->Query($sql, 'EventId'); foreach ($translations as $event_id => $translation_data) { - $parsed = $email_message_helper->parseTemplate($translation_data['Template']); + $parsed = $email_message_helper->parseTemplate($translation_data['Template'], 'html'); $fields_hash = Array ( 'l' . $language_id . '_Subject' => $parsed['Subject'], - 'l' . $language_id . '_Body' => $parsed['Body'], + 'l' . $language_id . '_Body' => $parsed['HtmlBody'], ); - if ($parsed['Headers']) { + if ( $parsed['Headers'] ) { $fields_hash['Headers'] = $parsed['Headers']; } $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'Events', 'EventId = ' . $event_id); $sql = 'DELETE FROM ' . TABLE_PREFIX . 'EmailMessage WHERE EmailMessageId = ' . $translation_data['EmailMessageId']; $this->Conn->Query($sql); } } } // migrate phrases $temp_table = $this->Application->GetTempName(TABLE_PREFIX . 'Phrase'); $sqls = Array ( 'DROP TABLE IF EXISTS ' . $temp_table, 'CREATE TABLE ' . $temp_table . ' LIKE ' . TABLE_PREFIX . 'Phrase', 'ALTER TABLE ' . $temp_table . ' DROP LanguageId, DROP Translation', 'ALTER IGNORE TABLE ' . $temp_table . ' DROP INDEX LanguageId_2', 'ALTER TABLE ' . $temp_table . ' DROP PhraseId', 'ALTER TABLE ' . $temp_table . ' ADD PhraseId INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST', ); foreach ($sqls as $sql) { $this->Conn->Query($sql); } $already_added = Array (); $primary_language_id = $this->Application->GetDefaultLanguageId(); foreach ($languages as $language_id) { $sql = 'SELECT Phrase, PhraseKey, Translation AS l' . $language_id . '_Translation, PhraseType, LastChanged, LastChangeIP, Module FROM ' . TABLE_PREFIX . 'Phrase WHERE LanguageId = ' . $language_id; $phrases = $this->Conn->Query($sql, 'Phrase'); foreach ($phrases as $phrase => $fields_hash) { if (array_key_exists($phrase, $already_added)) { $this->Conn->doUpdate($fields_hash, $temp_table, 'PhraseId = ' . $already_added[$phrase]); } else { $this->Conn->doInsert($fields_hash, $temp_table); $already_added[$phrase] = $this->Conn->getInsertID(); } } // in case some phrases were found in this language, but not in primary language -> copy them if ($language_id != $primary_language_id) { $sql = 'UPDATE ' . $temp_table . ' SET l' . $primary_language_id . '_Translation = l' . $language_id . '_Translation WHERE l' . $primary_language_id . '_Translation IS NULL'; $this->Conn->Query($sql); } } $this->Conn->Query('DROP TABLE IF EXISTS ' . TABLE_PREFIX . 'Phrase'); $this->Conn->Query('RENAME TABLE ' . $temp_table . ' TO ' . TABLE_PREFIX . 'Phrase'); $this->_updateCountryStatesTable(); $this->_replaceConfigurationValueSeparator(); // save "config.php" in php format, not ini format as before $this->_toolkit->SaveConfig(); } if ($mode == 'after') { $this->_transformEmailRecipients(); $this->_fixSkinColors(); } } /** * Makes sure we rename tables to legacy names before doing other upgrades before 5.2.0-B1 upgrade * * @param string $name * @param Array $arguments */ public function __call($name, $arguments) { if ( substr($name, 0, 12) == 'Upgrade_5_1_' && $arguments[0] == 'before' ) { $this->_renameTables('from'); } if ( substr($name, 0, 13) == 'Upgrade_5_2_0' && $arguments[0] == 'before' ) { $this->_renameTables('to'); } } /** * Move country/state translations from Phrase to CountryStates table * */ function _updateCountryStatesTable() { // refactor StdDestinations table $sql = 'RENAME TABLE ' . TABLE_PREFIX . 'StdDestinations TO ' . TABLE_PREFIX . 'CountryStates'; $this->Conn->Query($sql); $sql = 'ALTER TABLE ' . TABLE_PREFIX . 'CountryStates CHANGE DestId CountryStateId INT(11) NOT NULL AUTO_INCREMENT, CHANGE DestType Type INT(11) NOT NULL DEFAULT \'1\', CHANGE DestParentId StateCountryId INT(11) NULL DEFAULT NULL, CHANGE DestAbbr IsoCode CHAR(3) NOT NULL DEFAULT \'\', CHANGE DestAbbr2 ShortIsoCode CHAR(2) NULL DEFAULT NULL, DROP INDEX DestType, DROP INDEX DestParentId, ADD INDEX (`Type`), ADD INDEX (StateCountryId)'; $this->Conn->Query($sql); $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); /* @var $ml_helper kMultiLanguageHelper */ $ml_helper->createFields('country-state'); $languages = $ml_helper->getLanguages(); foreach ($languages as $language_id) { $sub_select = ' SELECT l' . $language_id . '_Translation FROM ' . TABLE_PREFIX . 'Phrase WHERE Phrase = DestName'; $sql = 'UPDATE ' . TABLE_PREFIX . 'CountryStates SET l' . $language_id . '_Name = (' . $sub_select . ')'; $this->Conn->Query($sql); } $sql = 'ALTER TABLE ' . TABLE_PREFIX . 'CountryStates DROP DestName'; $this->Conn->Query($sql); $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Phrase WHERE Phrase LIKE ' . $this->Conn->qstr('la_country_%') . ' OR Phrase LIKE ' . $this->Conn->qstr('la_state_%'); $this->Conn->Query($sql); } /** * Makes configuration values dropdowns use "||" as separator * */ function _replaceConfigurationValueSeparator() { $custom_field_helper = $this->Application->recallObject('InpCustomFieldsHelper'); /* @var $custom_field_helper InpCustomFieldsHelper */ $sql = 'SELECT ValueList, VariableName FROM ' . TABLE_PREFIX . 'ConfigurationAdmin WHERE ValueList LIKE "%,%"'; $variables = $this->Conn->GetCol($sql, 'VariableName'); foreach ($variables as $variable_name => $value_list) { $ret = Array (); $options = $custom_field_helper->GetValuesHash($value_list, ',', false); foreach ($options as $option_key => $option_title) { if (substr($option_key, 0, 3) == 'SQL') { $ret[] = $option_title; } else { $ret[] = $option_key . '=' . $option_title; } } $fields_hash = Array ( 'ValueList' => implode(VALUE_LIST_SEPARATOR, $ret), ); $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'ConfigurationAdmin', 'VariableName = ' . $this->Conn->qstr($variable_name)); } } /** * Transforms "FromUserId" into Sender* and Recipients columns * */ function _transformEmailRecipients() { $sql = 'SELECT FromUserId, Type, EventId FROM ' . TABLE_PREFIX . 'Events WHERE FromUserId IS NOT NULL AND (FromUserId <> ' . USER_ROOT . ')'; $events = $this->Conn->Query($sql, 'EventId'); $minput_helper = $this->Application->recallObject('MInputHelper'); /* @var $minput_helper MInputHelper */ foreach ($events as $event_id => $event_data) { $sql = 'SELECT Login FROM ' . TABLE_PREFIX . 'PortalUser WHERE PortalUserId = ' . $event_data['FromUserId']; $username = $this->Conn->GetOne($sql); if (!$username) { continue; } if ($event_data['Type'] == EmailEvent::EVENT_TYPE_FRONTEND) { // from user $fields_hash = Array ( 'CustomSender' => 1, 'SenderAddressType' => EmailEvent::ADDRESS_TYPE_USER, 'SenderAddress' => $username ); } if ($event_data['Type'] == EmailEvent::EVENT_TYPE_ADMIN) { // to user $records = Array ( Array ( 'RecipientType' => EmailEvent::RECIPIENT_TYPE_TO, 'RecipientName' => '', 'RecipientAddressType' => EmailEvent::ADDRESS_TYPE_USER, 'RecipientAddress' => $username ) ); $fields_hash = Array ( 'CustomRecipient' => 1, 'Recipients' => $minput_helper->prepareMInputXML($records, array_keys( reset($records) )) ); } $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'Events', 'EventId = ' . $event_id); } $this->Conn->Query('ALTER TABLE ' . TABLE_PREFIX . 'Events DROP FromUserId'); } /** * Update to 5.1.0; Fixes refferer of form submissions * * @param string $mode when called mode {before, after) */ function Upgrade_5_1_0($mode) { if ( $mode == 'before' ) { $this->_renameTables('from'); } if ( $mode == 'after' ) { $base_url = $this->Application->BaseURL(); $sql = 'UPDATE ' . TABLE_PREFIX . 'FormSubmissions SET ReferrerURL = REPLACE(ReferrerURL, ' . $this->Conn->qstr($base_url) . ', "/")'; $this->Conn->Query($sql); } } /** * Update to 5.1.1-B1; Transforms DisplayToPublic logic * * @param string $mode when called mode {before, after) */ function Upgrade_5_1_1_B1($mode) { if ( $mode == 'before' ) { $this->_renameTables('from'); } if ($mode == 'after') { $this->processDisplayToPublic(); } } function processDisplayToPublic() { $profile_mapping = Array ( 'pp_firstname' => 'FirstName', 'pp_lastname' => 'LastName', 'pp_dob' => 'dob', 'pp_email' => 'Email', 'pp_phone' => 'Phone', 'pp_street' => 'Street', 'pp_city' => 'City', 'pp_state' => 'State', 'pp_zip' => 'Zip', 'pp_country' => 'Country', ); $fields = array_keys($profile_mapping); $fields = $this->Conn->qstrArray($fields); $where_clause = 'VariableName IN (' . implode(',', $fields) . ')'; // 1. get user, that have saved their profile at least once $sql = 'SELECT DISTINCT PortalUserId FROM ' . TABLE_PREFIX . 'PersistantSessionData WHERE ' . $where_clause; $users = $this->Conn->GetCol($sql); foreach ($users as $user_id) { // 2. convert to new format $sql = 'SELECT VariableValue, VariableName FROM ' . TABLE_PREFIX . 'PersistantSessionData WHERE (PortalUserId = ' . $user_id . ') AND ' . $where_clause; $user_variables = $this->Conn->GetCol($sql, 'VariableName'); // go through mapping to preserve variable order $value = Array (); foreach ($profile_mapping as $from_name => $to_name) { if (array_key_exists($from_name, $user_variables) && $user_variables[$from_name]) { $value[] = $to_name; } } if ($value) { $fields_hash = Array ( 'DisplayToPublic' => '|' . implode('|', $value) . '|', ); $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'PortalUser', 'PortalUserId = ' . $user_id); } // 3. delete old style variables $sql = 'DELETE FROM ' . TABLE_PREFIX . 'PersistantSessionData WHERE (PortalUserId = ' . $user_id . ') AND ' . $where_clause; $this->Conn->Query($sql); } } /** * Update to 5.1.3; Merges column and field phrases * * @param string $mode when called mode {before, after) */ function Upgrade_5_1_3($mode) { if ( $mode == 'before' ) { $this->_renameTables('from'); } if ( $mode == 'after' ) { $this->moveTranslation('LA_COL_', 'LA_FLD_', 'ColumnTranslation'); } } /** * Makes sure table names match upgrade script * * @param string $key * @return void * @access private */ private function _renameTables($key) { foreach ($this->renamedTables as $prefix => $table_info) { $this->Application->setUnitOption($prefix, 'TableName', TABLE_PREFIX . $table_info[$key]); } } /** * Update to 5.2.0-B1; Transform list sortings storage * * @param string $mode when called mode {before, after) */ public function Upgrade_5_2_0_B1($mode) { if ( $mode == 'before' ) { $this->_renameTables('to'); } if ( $mode == 'after' ) { $this->transformSortings(); $this->moveTranslation('LA_COL_', 'LA_FLD_', 'ColumnTranslation'); // because of "la_col_ItemPrefix" phrase $this->moveTranslation('LA_HINT_', 'LA_FLD_', 'HintTranslation'); $this->moveTranslation('LA_HINT_', 'LA_CONFIG_', 'HintTranslation'); $this->moveTranslation('LA_HINT_', 'LA_TITLE_', 'HintTranslation'); $this->createPageRevisions(); } } /** * Transforms a way, how list sortings are stored * * @return void */ function transformSortings() { $sql = 'SELECT VariableName, PortalUserId FROM ' . TABLE_PREFIX . 'UserPersistentSessionData WHERE VariableName LIKE "%_Sort1.%"'; $sortings = $this->Conn->Query($sql); foreach ($sortings AS $sorting) { if ( !preg_match('/^(.*)_Sort1.(.*)$/', $sorting['VariableName'], $regs) ) { continue; } $user_id = $sorting['PortalUserId']; $prefix_special = $regs[1] . '_'; $view_name = '.' . $regs[2]; $old_variable_names = Array ( $prefix_special . 'Sort1' . $view_name, $prefix_special . 'Sort1_Dir' . $view_name, $prefix_special . 'Sort2' . $view_name, $prefix_special . 'Sort2_Dir' . $view_name, ); $old_variable_names = $this->Conn->qstrArray($old_variable_names); $sql = 'SELECT VariableValue, VariableName FROM ' . TABLE_PREFIX . 'UserPersistentSessionData WHERE PortalUserId = ' . $user_id . ' AND VariableName IN (' . implode(',', $old_variable_names) . ')'; $sorting_data = $this->Conn->GetCol($sql, 'VariableName'); // prepare & save new sortings $new_sorting = Array ( 'Sort1' => $sorting_data[$prefix_special . 'Sort1' . $view_name], 'Sort1_Dir' => $sorting_data[$prefix_special . 'Sort1_Dir' . $view_name], ); if ( isset($sorting_data[$prefix_special . 'Sort2' . $view_name]) ) { $new_sorting['Sort2'] = $sorting_data[$prefix_special . 'Sort2' . $view_name]; $new_sorting['Sort2_Dir'] = $sorting_data[$prefix_special . 'Sort2_Dir' . $view_name]; } $fields_hash = Array ( 'PortalUserId' => $user_id, 'VariableName' => $prefix_special . 'Sortings' . $view_name, 'VariableValue' => serialize($new_sorting), ); $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'UserPersistentSessionData'); // delete sortings, that were already processed $sql = 'DELETE FROM ' . TABLE_PREFIX . 'UserPersistentSessionData WHERE PortalUserId = ' . $user_id . ' AND VariableName IN (' . implode(',', $old_variable_names) . ')'; $this->Conn->Query($sql); } } /** * Merges several phrases into one (e.g. la_col_ + la_hint_ into designated columns of la_fld_ phrases) * * @param string $source_prefix * @param string $target_prefix * @param string $db_column * @return void * @access protected */ public function moveTranslation($source_prefix, $target_prefix, $db_column) { $source_phrases = $this->getPhrasesByMask($source_prefix . '%'); $target_phrases = $this->getPhrasesByMask($target_prefix . '%'); $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); /* @var $ml_helper kMultiLanguageHelper */ $delete_ids = Array (); $ml_helper->createFields('phrases'); $languages = $ml_helper->getLanguages(); $phrase_table = $this->Application->getUnitOption('phrases', 'TableName'); foreach ($source_phrases as $phrase_key => $phrase_info) { $target_phrase_key = $target_prefix . substr($phrase_key, strlen($source_prefix)); if ( !isset($target_phrases[$target_phrase_key]) ) { continue; } $fields_hash = Array (); // copy column phrase main translation into field phrase column translation foreach ($languages as $language_id) { $fields_hash['l' . $language_id . '_' . $db_column] = $phrase_info['l' . $language_id . '_Translation']; } $delete_ids[] = $phrase_info['PhraseId']; $this->Conn->doUpdate($fields_hash, $phrase_table, 'PhraseId = ' . $target_phrases[$target_phrase_key]['PhraseId']); } // delete all column phrases, that were absorbed by field phrases if ( $delete_ids ) { $sql = 'DELETE FROM ' . $phrase_table . ' WHERE PhraseId IN (' . implode(',', $delete_ids) . ')'; $this->Conn->Query($sql); $sql = 'DELETE FROM ' . TABLE_PREFIX . 'PhraseCache'; $this->Conn->Query($sql); } } /** * Returns phrases by mask * * @param string $mask * @return Array * @access protected */ protected function getPhrasesByMask($mask) { $sql = 'SELECT * FROM ' . $this->Application->getUnitOption('phrases', 'TableName') . ' WHERE PhraseKey LIKE ' . $this->Conn->qstr($mask); return $this->Conn->Query($sql, 'PhraseKey'); } protected function createPageRevisions() { $sql = 'SELECT DISTINCT PageId FROM ' . TABLE_PREFIX . 'PageContent'; $page_ids = $this->Conn->GetCol($sql); foreach ($page_ids as $page_id) { $fields_hash = Array ( 'PageId' => $page_id, 'RevisionNumber' => 1, 'IsDraft' => 0, 'FromRevisionId' => 0, 'CreatedById' => USER_ROOT, 'CreatedOn' => adodb_mktime(), 'Status' => STATUS_ACTIVE, ); $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'PageRevisions'); $fields_hash = Array ( 'RevisionId' => $this->Conn->getInsertID(), ); $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'PageContent', 'PageId = ' . $page_id); } } + + /** + * Update to 5.2.0-B3; Introduces separate field for plain-text e-mail event translations + * + * @param string $mode when called mode {before, after) + */ + public function Upgrade_5_2_0_B3($mode) + { + if ( $mode == 'before' ) { + $this->_renameTables('to'); + } + + if ( $mode == 'after' ) { + $id_field = $this->Application->getUnitOption('emailevents', 'IDField'); + $table_name = $this->Application->getUnitOption('emailevents', 'TableName'); + $fields = $this->Conn->Query('DESCRIBE ' . $table_name, 'Field'); + + if ( !isset($fields['l1_Body']) ) { + // column dropped - nothing to convert anymore + return; + } + + $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); + /* @var $ml_helper kMultiLanguageHelper */ + + $languages = $ml_helper->getLanguages(); + $ml_helper->createFields('emailevents'); + + $sql = 'SELECT * + FROM ' . $table_name; + $email_events = $this->Conn->Query($sql); + + // 1. move data to new columns + foreach ($email_events as $email_event) { + $fields_hash = Array (); + $translation_field = $email_event['MessageType'] == 'html' ? 'HtmlBody' : 'PlainTextBody'; + + foreach ($languages as $language_id) { + $fields_hash['l' . $language_id . '_' . $translation_field] = $email_event['l' . $language_id . '_Body']; + } + + if ( $fields_hash ) { + $this->Conn->doUpdate($fields_hash, $table_name, $id_field . ' = ' . $email_event[$id_field]); + } + } + + // 2. drop old columns + $drops = Array ('DROP COLUMN MessageType'); + + foreach ($languages as $language_id) { + $lang_field = 'l' . $language_id . '_Body'; + + if ( isset($fields[$lang_field]) ) { + $drops[] = 'DROP COLUMN ' . $lang_field; + } + } + + $this->Conn->Query('ALTER TABLE ' . $table_name . ' ' . implode(', ', $drops)); + } + } } \ No newline at end of file Index: branches/5.2.x/core/install/english.lang =================================================================== --- branches/5.2.x/core/install/english.lang (revision 15221) +++ branches/5.2.x/core/install/english.lang (revision 15222) @@ -1,1932 +1,2051 @@ -<LANGUAGES Version="4"> +<LANGUAGES Version="5"> <LANGUAGE Encoding="base64" PackName="English" LocalName="English" DateFormat="m/d/Y" TimeFormat="g:i A" InputDateFormat="m/d/Y" InputTimeFormat="g:i:s A" DecimalPoint="." ThousandSep="," Charset="utf-8" UnitSystem="2" Locale="en-US" UserDocsUrl="http://docs.in-portal.org/eng/index.php"> <PHRASES> <PHRASE Label="la_Active" Module="Core" Type="1">QWN0aXZl</PHRASE> <PHRASE Label="la_Add" Module="Core" Type="1">QWRk</PHRASE> <PHRASE Label="la_AddTo" Module="Core" Type="1">QWRkIFRv</PHRASE> <PHRASE Label="la_AdministrativeConsole" Module="Core" Type="1">QWRtaW5pc3RyYXRpdmUgQ29uc29sZQ==</PHRASE> <PHRASE Label="la_AllowDeleteRootCats" Module="Core" Type="1">QWxsb3cgZGVsZXRpbmcgTW9kdWxlIFJvb3QgU2VjdGlvbg==</PHRASE> <PHRASE Label="la_alt_Browse" Module="Core" Type="1">VmlldyBpbiBCcm93c2UgTW9kZQ==</PHRASE> <PHRASE Label="la_alt_GoInside" Module="Core" Type="1">R28gSW5zaWRl</PHRASE> <PHRASE Label="la_Always" Module="Core" Type="1">QWx3YXlz</PHRASE> <PHRASE Label="la_and" Module="Core" Type="1">YW5k</PHRASE> <PHRASE Label="la_Auto" Module="Core" Type="1">QXV0bw==</PHRASE> <PHRASE Label="la_Automatic" Module="Core" Type="1">QXV0b21hdGlj</PHRASE> <PHRASE Label="la_AvailableColumns" Module="Core" Type="1">QXZhaWxhYmxlIENvbHVtbnM=</PHRASE> <PHRASE Label="la_AvailableItems" Module="Core" Type="1">QXZhaWxhYmxlIEl0ZW1z</PHRASE> <PHRASE Label="la_Background" Module="Core" Type="1">QmFja2dyb3VuZA==</PHRASE> <PHRASE Label="la_Borders" Module="Core" Type="1">Qm9yZGVycw==</PHRASE> <PHRASE Label="la_btn_Add" Module="Core" Type="1">QWRk</PHRASE> <PHRASE Label="la_btn_BrowseMode" Module="Core" Type="1">QnJvd3NlIE1vZGU=</PHRASE> <PHRASE Label="la_btn_Cancel" Module="Core" Type="1">Q2FuY2Vs</PHRASE> <PHRASE Label="la_btn_Change" Module="Core" Type="1">Q2hhbmdl</PHRASE> <PHRASE Label="la_btn_Clear" Module="Core" Type="1">Q2xlYXI=</PHRASE> <PHRASE Label="la_btn_ContentMode" Module="Core" Type="1">Q29udGVudCBNb2Rl</PHRASE> <PHRASE Label="la_btn_Delete" Module="Core" Type="1">RGVsZXRl</PHRASE> <PHRASE Label="la_btn_DeleteDraft" Module="Core" Type="1">RGVsZXRl</PHRASE> <PHRASE Label="la_btn_DeleteReview" Module="Core" Type="1">ZGVsZXRlIHJldmlldw==</PHRASE> <PHRASE Label="la_btn_Deploy" Module="Core" Type="1">RGVwbG95</PHRASE> <PHRASE Label="la_btn_DesignMode" Module="Core" Type="1">RGVzaWduIE1vZGU=</PHRASE> <PHRASE Label="la_btn_Down" Module="Core" Type="1">RG93bg==</PHRASE> <PHRASE Label="la_btn_Edit" Module="Core" Type="1">RWRpdA==</PHRASE> <PHRASE Label="la_btn_EditBlock" Module="Core" Type="1">RWRpdCBCbG9jaw==</PHRASE> <PHRASE Label="la_btn_EditContent" Module="Core" Type="1">RWRpdCBDb250ZW50</PHRASE> <PHRASE Label="la_btn_EditDesign" Module="Core" Type="1">RWRpdCBEZXNpZ24=</PHRASE> <PHRASE Label="la_btn_Generate" Module="Core" Type="1">R2VuZXJhdGU=</PHRASE> <PHRASE Label="la_btn_GeneratePage" Module="Core" Type="1">R2VuZXJhdGUgUGFnZQ==</PHRASE> <PHRASE Label="la_btn_GetValue" Module="Core" Type="1">R2V0IFZhbHVl</PHRASE> <PHRASE Label="la_btn_Locate" Module="Core" Type="1">TG9jYXRl</PHRASE> <PHRASE Label="la_btn_MoveDown" Module="Core" Type="1">TW92ZSBEb3du</PHRASE> <PHRASE Label="la_btn_MoveUp" Module="Core" Type="1">TW92ZSBVcA==</PHRASE> <PHRASE Label="la_btn_PublishingTools" Module="Core" Type="1">UHVibGlzaGluZyBUb29scw==</PHRASE> <PHRASE Label="la_btn_Rebuild" Module="Core" Type="1">UmVidWlsZA==</PHRASE> <PHRASE Label="la_btn_Recompile" Module="Core" Type="1">UmVjb21waWxl</PHRASE> <PHRASE Label="la_btn_Refresh" Module="Core" Type="1">UmVmcmVzaA==</PHRASE> <PHRASE Label="la_btn_Reset" Module="Core" Type="1">UmVzZXQ=</PHRASE> <PHRASE Label="la_btn_ResetAndValidateConfigFiles" Module="Core" Type="1">UmVzZXQgJmFtcDsgVmFsaWRhdGUgQ29uZmlnIEZpbGVz</PHRASE> <PHRASE Label="la_btn_ResetRootPassword" Module="Core" Type="1">UmVzZXQgInJvb3QiIHBhc3N3b3Jk</PHRASE> <PHRASE Label="la_btn_Save" Module="Core" Type="1">U2F2ZQ==</PHRASE> <PHRASE Label="la_btn_SaveChanges" Module="Core" Type="1">U2F2ZSBDaGFuZ2Vz</PHRASE> <PHRASE Label="la_btn_SectionProperties" Module="Core" Type="1">U2VjdGlvbiBQcm9wZXJ0aWVz</PHRASE> <PHRASE Label="la_btn_SectionTemplate" Module="Core" Type="1">U2VjdGlvbiBUZW1wbGF0ZQ==</PHRASE> <PHRASE Label="la_btn_SelectAll" Module="Core" Type="1">U2VsZWN0IEFsbA==</PHRASE> <PHRASE Label="la_btn_SetValue" Module="Core" Type="1">U2V0IFZhbHVl</PHRASE> <PHRASE Label="la_btn_ShowStructure" Module="Core" Type="1">U2hvdyBTdHJ1Y3R1cmU=</PHRASE> <PHRASE Label="la_btn_Synchronize" Module="Core" Type="1">U3luY2hyb25pemU=</PHRASE> <PHRASE Label="la_btn_Unselect" Module="Core" Type="1">VW5zZWxlY3Q=</PHRASE> <PHRASE Label="la_btn_Up" Module="Core" Type="1">VXA=</PHRASE> <PHRASE Label="la_btn_UseDraft" Module="Core" Type="1">VXNl</PHRASE> <PHRASE Label="la_By" Module="Core" Type="1">Ynk=</PHRASE> <PHRASE Label="la_Cancel" Module="Core" Type="1">Q2FuY2Vs</PHRASE> <PHRASE Label="la_category" Module="Core" Type="1">U2VjdGlvbg==</PHRASE> <PHRASE Label="la_category_daysnew_prompt" Module="Core" Type="1">TnVtYmVyIG9mIGRheXMgZm9yIGEgY2F0LiB0byBiZSBORVc=</PHRASE> <PHRASE Label="la_category_metadesc" Module="Core" Type="1">RGVmYXVsdCBNRVRBIGRlc2NyaXB0aW9u</PHRASE> <PHRASE Label="la_category_metakey" Module="Core" Type="1">RGVmYXVsdCBNRVRBIEtleXdvcmRz</PHRASE> <PHRASE Label="la_category_perpage_prompt" Module="Core" Type="1">TnVtYmVyIG9mIHNlY3Rpb25zIHBlciBwYWdl</PHRASE> <PHRASE Label="la_category_perpage__short_prompt" Module="Core" Type="1">U2VjdGlvbnMgUGVyIFBhZ2UgKFNob3J0bGlzdCk=</PHRASE> <PHRASE Label="la_category_showpick_prompt" Module="Core" Type="1">RGlzcGxheSBlZGl0b3IgUElDS3MgYWJvdmUgcmVndWxhciBzZWN0aW9ucw==</PHRASE> <PHRASE Label="la_category_sortfield2_prompt" Module="Core" Type="1">QW5kIHRoZW4gYnk=</PHRASE> <PHRASE Label="la_category_sortfield_prompt" Module="Core" Type="1">T3JkZXIgc2VjdGlvbnMgYnk=</PHRASE> <PHRASE Label="la_Close" Module="Core" Type="1">Q2xvc2U=</PHRASE> <PHRASE Label="la_col_Access" Module="Core" Type="1">QWNjZXNz</PHRASE> <PHRASE Label="la_col_AdditionalPermissions" Module="Core" Type="1">QWRkaXRpb25hbA==</PHRASE> <PHRASE Label="la_col_AffectedItems" Module="Core" Type="1">QWZmZWN0ZWQgSXRlbXM=</PHRASE> <PHRASE Label="la_col_AltName" Module="Core" Type="1">QWx0IFZhbHVl</PHRASE> <PHRASE Label="la_col_BuildDate" Module="Core" Type="1">QnVpbGQgRGF0ZQ==</PHRASE> <PHRASE Label="la_col_CategoryName" Module="Core" Type="1">U2VjdGlvbiBOYW1l</PHRASE> <PHRASE Label="la_col_ColumnPhrase" Module="Core" Type="1">Q29sdW1uIFBocmFzZQ==</PHRASE> <PHRASE Label="la_col_Effective" Module="Core" Type="1">RWZmZWN0aXZl</PHRASE> <PHRASE Label="la_col_EmailEvents" Module="Core" Type="1">RW1haWwgRXZlbnRz</PHRASE> <PHRASE Label="la_col_EnableEmailCommunication" Module="Core" Type="1">RW5hYmxlIEUtbWFpbCBDb21tdW5pY2F0aW9u</PHRASE> <PHRASE Label="la_col_Error" Module="Core" Type="1">Jm5ic3A7</PHRASE> <PHRASE Label="la_col_EventDescription" Module="Core" Type="1">RXZlbnQgRGVzY3JpcHRpb24=</PHRASE> <PHRASE Label="la_col_EventParams" Module="Core" Type="1">RXZlbnQgUGFyYW1z</PHRASE> <PHRASE Label="la_col_HintPhrase" Module="Core" Type="1">SGludCBQaHJhc2U=</PHRASE> <PHRASE Label="la_col_ImageEnabled" Module="Core" Type="1">U3RhdHVz</PHRASE> <PHRASE Label="la_col_ImageName" Module="Core" Type="1">SW1hZ2U=</PHRASE> <PHRASE Label="la_col_ImageUrl" Module="Core" Type="1">VVJM</PHRASE> <PHRASE Label="la_col_Inherited" Module="Core" Type="1">SW5oZXJpdGVk</PHRASE> <PHRASE Label="la_col_InheritedFrom" Module="Core" Type="1">SW5oZXJpdGVkIEZyb20=</PHRASE> <PHRASE Label="la_col_InMenu" Module="Core" Type="1">SW4gTWVudQ==</PHRASE> <PHRASE Label="la_col_IP" Module="Core" Type="1">SVAgQWRkcmVzcw==</PHRASE> <PHRASE Label="la_col_IsPopular" Module="Core" Type="1">UG9wdWxhcg==</PHRASE> <PHRASE Label="la_col_IsPrimaryLanguage" Module="Core" Type="1">VXNlciBQcmltYXJ5</PHRASE> <PHRASE Label="la_col_Keyword" Module="Core" Type="1">S2V5d29yZA==</PHRASE> <PHRASE Label="la_col_Label" Module="Core" Type="1">TGFiZWw=</PHRASE> <PHRASE Label="la_col_LanguagePackInstalled" Module="Core" Type="1">TGFuZ3VhZ2UgUGFjayBJbnN0YWxsZWQ=</PHRASE> <PHRASE Label="la_col_LastChanged" Module="Core" Type="1">TGFzdCBDaGFuZ2Vk</PHRASE> <PHRASE Label="la_col_LastCompiled" Module="Core" Type="1">TGFzdCBDb21waWxlZA==</PHRASE> <PHRASE Label="la_col_LastSendRetry" Module="Core" Type="1">TGFzdCBBdHRlbXB0</PHRASE> <PHRASE Label="la_col_LinkUrl" Module="Core" Type="1">TGluayBVUkw=</PHRASE> <PHRASE Label="la_col_MailingList" Module="Core" Type="1">TWFpbGluZyBMaXN0</PHRASE> <PHRASE Label="la_col_MembershipExpires" Module="Core" Type="1">TWVtYmVyc2hpcCBFeHBpcmVz</PHRASE> <PHRASE Label="la_col_MessageHeaders" Module="Core" Type="1">TWVzc2FnZSBIZWFkZXJz</PHRASE> <PHRASE Label="la_col_MessageHtml" Module="Core" Type="1">SFRNTA==</PHRASE> <PHRASE Label="la_col_OriginalValue" Module="Core" Type="1">T3JpZ2luYWwgVmFsdWU=</PHRASE> <PHRASE Label="la_col_Path" Module="Core" Type="1">UGF0aA==</PHRASE> <PHRASE Label="la_col_PermAdd" Module="Core" Type="1">QWRk</PHRASE> <PHRASE Label="la_col_PermDelete" Module="Core" Type="1">RGVsZXRl</PHRASE> <PHRASE Label="la_col_PermEdit" Module="Core" Type="1">RWRpdA==</PHRASE> <PHRASE Label="la_col_PermissionName" Module="Core" Type="1">UGVybWlzc2lvbiBOYW1l</PHRASE> <PHRASE Label="la_col_PermissionValue" Module="Core" Type="1">QWNjZXNz</PHRASE> <PHRASE Label="la_col_PermView" Module="Core" Type="1">Vmlldw==</PHRASE> <PHRASE Label="la_col_Phrases" Module="Core" Type="1">UGhyYXNlcw==</PHRASE> <PHRASE Label="la_col_PortalUserId" Module="Core" Type="1">VXNlciBJRA==</PHRASE> <PHRASE Label="la_col_Preview" Module="Core" Type="1">UHJldmlldw==</PHRASE> <PHRASE Label="la_col_PrimaryGroup" Module="Core" Type="1">UHJpbWFyeSBHcm91cA==</PHRASE> <PHRASE Label="la_col_PrimaryValue" Module="Core" Type="1">UHJpbWFyeSBWYWx1ZQ==</PHRASE> <PHRASE Label="la_col_Prompt" Module="Core" Type="1">RmllbGQgUHJvbXB0</PHRASE> <PHRASE Label="la_col_Queued" Module="Core" Type="1">UXVldWVk</PHRASE> <PHRASE Label="la_col_Referer" Module="Core" Type="1">UmVmZXJlcg==</PHRASE> <PHRASE Label="la_col_ResetToDefaultSorting" Module="Core" Type="1">UmVzZXQgdG8gZGVmYXVsdA==</PHRASE> <PHRASE Label="la_col_ReviewCount" Module="Core" Type="1">Q29tbWVudHM=</PHRASE> <PHRASE Label="la_col_ReviewedBy" Module="Core" Type="1">Q3JlYXRlZCBieQ==</PHRASE> <PHRASE Label="la_col_ScheduleFromDate" Module="Core" Type="1">U2NoZWR1bGUgRnJvbSBEYXRl</PHRASE> <PHRASE Label="la_col_ScheduleToDate" Module="Core" Type="1">U2NoZWR1bGUgVG8gRGF0ZQ==</PHRASE> <PHRASE Label="la_col_SendRetries" Module="Core" Type="1">QXR0ZW1wdHMg</PHRASE> <PHRASE Label="la_col_SessionEnd" Module="Core" Type="1">U2Vzc2lvbiBFbmQ=</PHRASE> <PHRASE Label="la_col_SessionStart" Module="Core" Type="1">U2Vzc2lvbiBTdGFydA==</PHRASE> <PHRASE Label="la_col_SortBy" Module="Core" Type="1">U29ydCBieQ==</PHRASE> <PHRASE Label="la_col_System" Module="Core" Type="1">VHlwZQ==</PHRASE> <PHRASE Label="la_col_SystemPath" Module="Core" Type="1">U3lzdGVtIFBhdGg=</PHRASE> <PHRASE Label="la_col_TargetType" Module="Core" Type="1">SXRlbSBUeXBl</PHRASE> <PHRASE Label="la_col_UserCount" Module="Core" Type="1">VXNlcnM=</PHRASE> <PHRASE Label="la_col_UserFirstLastName" Module="Core" Type="1">TGFzdG5hbWUgRmlyc3RuYW1l</PHRASE> <PHRASE Label="la_col_Value" Module="Core" Type="1">RmllbGQgVmFsdWU=</PHRASE> <PHRASE Label="la_col_Visible" Module="Core" Type="1">VmlzaWJsZQ==</PHRASE> <PHRASE Label="la_col_VisitDate" Module="Core" Type="1">VmlzaXQgRGF0ZQ==</PHRASE> <PHRASE Label="la_common_ascending" Module="Core" Type="1">QXNjZW5kaW5n</PHRASE> <PHRASE Label="la_common_descending" Module="Core" Type="1">RGVzY2VuZGluZw==</PHRASE> <PHRASE Label="la_config_AdminConsoleInterface" Module="Core" Type="1">QWRtaW4gQ29uc29sZSBJbnRlcmZhY2U=</PHRASE> <PHRASE Label="la_config_AdminSSL_URL" Module="Core" Type="1">U1NMIEZ1bGwgVVJMIGZvciBBZG1pbmlzdHJhdGl2ZSBDb25zb2xlIChodHRwczovL3d3dy5kb21haW4uY29tL3BhdGgpIA==</PHRASE> <PHRASE Label="la_config_AllowAdminConsoleInterfaceChange" Module="Core" Type="1">QWxsb3cgQWRtaW4gdG8gY2hhbmdlIEFkbWluIENvbnNvbGUgSW50ZXJmYWNl</PHRASE> <PHRASE Label="la_config_AllowSelectGroupOnFront" Module="Core" Type="1">QWxsb3cgdG8gc2VsZWN0IG1lbWJlcnNoaXAgZ3JvdXAgb24gRnJvbnQtZW5k</PHRASE> <PHRASE Label="la_config_AutoRefreshIntervals" Module="Core" Type="1">TGlzdCBhdXRvbWF0aWMgcmVmcmVzaCBpbnRlcnZhbHMgKGluIG1pbnV0ZXMp</PHRASE> <PHRASE Label="la_config_backup_path" Module="Core" Type="1">QmFja3VwIFBhdGg=</PHRASE> <PHRASE Label="la_config_CatalogPreselectModuleTab" Module="Core" Type="1">U3dpdGNoIENhdGFsb2cgdGFicyBiYXNlZCBvbiBNb2R1bGU=</PHRASE> <PHRASE Label="la_config_CheckStopWords" Module="Core" Type="1">Q2hlY2sgU3RvcCBXb3Jkcw==</PHRASE> <PHRASE Label="la_config_CKFinderLicenseKey" Module="Core" Type="1">Q0tGaW5kZXIgTGljZW5zZSBLZXk=</PHRASE> <PHRASE Label="la_config_CKFinderLicenseName" Module="Core" Type="1">Q0tGaW5kZXIgTGljZW5zZSBOYW1l</PHRASE> <PHRASE Label="la_config_CSVExportDelimiter" Module="Core" Type="1">RGVmYXVsdCBDU1YgRXhwb3J0IERlbGltaXRlcg==</PHRASE> <PHRASE Label="la_config_CSVExportEnclosure" Module="Core" Type="1">RGVmYXVsdCBDU1YgRXhwb3J0IEVuY2xvc3VyZSBDaGFyYWN0ZXI=</PHRASE> <PHRASE Label="la_config_CSVExportEncoding" Module="Core" Type="1">RGVmYXVsdCBDU1YgRXhwb3J0IEVuY29kaW5n</PHRASE> <PHRASE Label="la_config_CSVExportSeparator" Module="Core" Type="1">RGVmYXVsdCBDU1YgRXhwb3J0IE5ldyBMaW5lIFNlcGFyYXRvcg==</PHRASE> <PHRASE Label="la_config_DebugOnlyFormConfigurator" Module="Core" Type="1">U2hvdyAiRm9ybXMgRWRpdG9yIiBpbiBERUJVRyBtb2RlIG9ubHk=</PHRASE> <PHRASE Label="la_config_DebugOnlyPromoBlockGroupConfigurator" Module="Core" Type="1">U2hvdyAiUHJvbW8gQmxvY2sgR3JvdXBzIEVkaXRvciIgaW4gREVCVUcgbW9kZSBvbmx5</PHRASE> <PHRASE Label="la_config_DefaultDesignTemplate" Module="Core" Type="1">RGVmYXVsdCBEZXNpZ24gVGVtcGxhdGU=</PHRASE> <PHRASE Label="la_config_DefaultEmailRecipients" Module="Core" Type="1">RGVmYXVsdCBFLW1haWwgUmVjaXBpZW50cw==</PHRASE> <PHRASE Label="la_config_DefaultGridPerPage" Module="Core" Type="1">RGVmYXVsdCAiUGVyIFBhZ2UiIHNldHRpbmcgaW4gR3JpZHM=</PHRASE> <PHRASE Label="la_config_DefaultRegistrationCountry" Module="Core" Type="1">RGVmYXVsdCBSZWdpc3RyYXRpb24gQ291bnRyeQ==</PHRASE> <PHRASE Label="la_config_DefaultTrackingCode" Module="Core" Type="1">RGVmYXVsdCBBbmFseXRpY3MgVHJhY2tpbmcgQ29kZQ==</PHRASE> <PHRASE Label="la_config_EnablePageContentRevisionControl" Module="Core" Type="1">RW5hYmxlIFJldmlzaW9uIENvbnRyb2wgZm9yIFNlY3Rpb24gQ29udGVudA==</PHRASE> <PHRASE Label="la_config_error_template" Module="Core" Type="1">VGVtcGxhdGUgZm9yICJGaWxlIG5vdCBmb3VuZCAoNDA0KSIgRXJyb3I=</PHRASE> <PHRASE Label="la_config_ExcludeTemplateSectionsFromSearch" Module="Core" Type="1">RXhjbHVkZSB0ZW1wbGF0ZSBiYXNlZCBTZWN0aW9ucyBmcm9tIFNlYXJjaCBSZXN1bHRzIChpZS4gVXNlciBSZWdpc3RyYXRpb24p</PHRASE> <PHRASE Label="la_config_FilenameSpecialCharReplacement" Module="Core" Type="1">RmlsZW5hbWUgU3BlY2lhbCBDaGFyIFJlcGxhY2VtZW50</PHRASE> <PHRASE Label="la_config_first_day_of_week" Module="Core" Type="1">Rmlyc3QgRGF5IE9mIFdlZWs=</PHRASE> <PHRASE Label="la_config_ForceImageMagickResize" Module="Core" Type="1">QWx3YXlzIHVzZSBJbWFnZU1hZ2ljayB0byByZXNpemUgaW1hZ2Vz</PHRASE> <PHRASE Label="la_config_ForceModRewriteUrlEnding" Module="Core" Type="1" Hint="VXNlciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3RlZCB0byB0aGUgc2VsZWN0ZWQgVXJsIEVuZGluZyBpbiBjYXNlIHdoZW4gY3VycmVudCBwYWdlIHVybCBoYXMgYSBkaWZmZXJlbnQgZW5kaW5n">Rm9yY2UgUmVkaXJlY3QgdG8gU2VsZWN0ZWQgVVJMIEVuZGluZw==</PHRASE> <PHRASE Label="la_config_force_http" Module="Core" Type="1">UmVkaXJlY3QgdG8gSFRUUCB3aGVuIFNTTCBpcyBub3QgcmVxdWlyZWQ=</PHRASE> <PHRASE Label="la_config_FullImageHeight" Module="Core" Type="1">RnVsbCBpbWFnZSBIZWlnaHQ=</PHRASE> <PHRASE Label="la_config_FullImageWidth" Module="Core" Type="1">RnVsbCBpbWFnZSBXaWR0aA==</PHRASE> <PHRASE Label="la_config_HardMaintenanceTemplate" Module="Core" Type="1" Hint="VGhpcyB0ZW1wbGF0ZSB3aWxsIGJlIHVzZWQgdG8gc3RhdGljIEhUTUwgZmlsZSB1bmRlciAvc3lzdGVtIGZvbGRlciB0byBiZSBzaG93biBvbiBGcm9udC1lbmQgb3IgQWRtaW4gd2hlbiBIYXJkIE1haW50ZW5hbmNlIG1vZGUgaXMgYWN0aXZlLiBTdGF0aWMgcGFnZSBzaG91bGQgYmUgZ2VuZXJhdGVkIGZyb20gc3BlY2lmaWVkIGhlcmUgdGVtcGxhdGUgYnkgY2xpY2tpbmcgIkdlbmVyYXRlIFBhZ2UiIGJ1dHRvbi4=">VGVtcGxhdGUgZm9yIEhhcmQgTWFpbnRlbmFuY2U=</PHRASE> <PHRASE Label="la_config_HTTPAuthBypassIPs" Module="Core" Type="1">QnlwYXNzIEhUVFAgQXV0aGVudGljYXRpb24gZnJvbSBJUHMgKHNlcGFyYXRlZCBieSBzZW1pY29sb25zKQ==</PHRASE> <PHRASE Label="la_config_HTTPAuthPassword" Module="Core" Type="1">UGFzc3dvcmQgZm9yIEhUVFAgQXV0aGVudGljYXRpb24=</PHRASE> <PHRASE Label="la_config_HTTPAuthUsername" Module="Core" Type="1">VXNlcm5hbWUgZm9yIEhUVFAgQXV0aGVudGljYXRpb24=</PHRASE> <PHRASE Label="la_config_KeepSessionOnBrowserClose" Module="Core" Type="1">S2VlcCBTZXNzaW9uIGFsaXZlIG9uIEJyb3dzZXIgY2xvc2U=</PHRASE> <PHRASE Label="la_config_MailFunctionHeaderSeparator" Module="Core" Type="1">TWFpbCBGdW5jdGlvbiBIZWFkZXIgU2VwYXJhdG9y</PHRASE> <PHRASE Label="la_config_MailingListQueuePerStep" Module="Core" Type="1">TWFpbGluZyBMaXN0IFF1ZXVlIFBlciBTdGVw</PHRASE> <PHRASE Label="la_config_MailingListSendPerStep" Module="Core" Type="1">TWFpbGluZyBMaXN0IFNlbmQgUGVyIFN0ZXA=</PHRASE> <PHRASE Label="la_config_MaintenanceMessageAdmin" Module="Core" Type="1" Hint="VGhpcyBtZXNzYWdlIHdpbGwgYmUgc2hvd24gb24gQWRtaW4gaW5zdGVhZCBvZiBMb2dpbiBmb3JtIGVpdGhlciB3aGVuIFNvZnQgb3IgSGFyZCBNYWludGVuYW5jZSBtb2RlcyBhcmUgZW5hYmxlZCB2aWEgZGVidWcucGhwIGZpbGUgb3IgdGhlcmUgbm8gRGF0YWJhc2UgY29ubmVjdGlvbi4=">TWFpbnRlbmFuY2UgTWVzc2FnZSBmb3IgQWRtaW4=</PHRASE> <PHRASE Label="la_config_MaintenanceMessageFront" Module="Core" Type="1" Hint="VGhpcyBtZXNzYWdlIHdpbGwgYmUgc2hvd24gb24gRnJvbnQgRW5kIHdoZW4gZWl0aGVyIFNvZnQgb3IgSGFyZCBNYWludGVuYW5jZSBtb2RlcyBhcmUgZW5hYmxlZCB2aWEgZGVidWcucGhwIGZpbGUgb3IgdGhlcmUgbm8gRGF0YWJhc2UgY29ubmVjdGlvbi4=">TWFpbnRlbmFuY2UgTWVzc2FnZSBmb3IgRnJvbnQgRW5k</PHRASE> <PHRASE Label="la_config_MaxImageCount" Module="Core" Type="1">TWF4aW11bSBudW1iZXIgb2YgaW1hZ2Vz</PHRASE> <PHRASE Label="la_config_ModRewriteUrlEnding" Module="Core" Type="1">RGVmYXVsdCBVUkwgRW5kaW5nIGluIFNFTy1mcmllbmRseSBtb2Rl</PHRASE> <PHRASE Label="la_config_nopermission_template" Module="Core" Type="1">VGVtcGxhdGUgZm9yICJJbnN1ZmZpY2llbnQgUGVybWlzc2lvbnMiIEVycm9y</PHRASE> <PHRASE Label="la_config_OutputCompressionLevel" Module="Core" Type="1">R1pJUCBjb21wcmVzc2lvbiBsZXZlbCAwLTk=</PHRASE> <PHRASE Label="la_config_PathToWebsite" Module="Core" Type="1">UGF0aCB0byBXZWJzaXRl</PHRASE> <PHRASE Label="la_config_PerformExactSearch" Module="Core" Type="1" Hint="U2VhcmNoIGZvciBhbGwgZW50ZXJlZCBrZXl3b3JkcywgaW5zdGVhZCBvZiBhbnkgb25lIG9mIHRoZW0=">UGVyZm9ybSBFeGFjdCBTZWFyY2g=</PHRASE> <PHRASE Label="la_config_PerpageReviews" Module="Core" Type="1">Q29tbWVudHMgcGVyIHBhZ2U=</PHRASE> <PHRASE Label="la_config_QuickCategoryPermissionRebuild" Module="Core" Type="1">UXVpY2sgU2VjdGlvbiBQZXJtaXNzaW9uIFJlYnVpbGQ=</PHRASE> <PHRASE Label="la_config_RecycleBinFolder" Module="Core" Type="1">IlJlY3ljbGUgQmluIiBTZWN0aW9uSWQ=</PHRASE> <PHRASE Label="la_config_RegistrationUsernameRequired" Module="Core" Type="1">VXNlcm5hbWUgUmVxdWlyZWQgRHVyaW5nIFJlZ2lzdHJhdGlvbg==</PHRASE> <PHRASE Label="la_config_RememberLastAdminTemplate" Module="Core" Type="1">UmVzdG9yZSBsYXN0IHZpc2l0ZWQgQWRtaW4gU2VjdGlvbiBhZnRlciBMb2dpbg==</PHRASE> <PHRASE Label="la_config_RequireSSLAdmin" Module="Core" Type="1">UmVxdWlyZSBTU0wgZm9yIEFkbWluaXN0cmF0aXZlIENvbnNvbGU=</PHRASE> <PHRASE Label="la_config_require_ssl" Module="Core" Type="1">UmVxdWlyZSBTU0wgZm9yIGxvZ2luICYgY2hlY2tvdXQ=</PHRASE> <PHRASE Label="la_config_ResizableFrames" Module="Core" Type="1">RnJhbWVzIGluIGFkbWluaXN0cmF0aXZlIGNvbnNvbGUgYXJlIHJlc2l6YWJsZQ==</PHRASE> <PHRASE Label="la_config_Search_MinKeyword_Length" Module="Core" Type="1">TWluaW1hbCBTZWFyY2ggS2V5d29yZCBMZW5ndGg=</PHRASE> <PHRASE Label="la_config_SessionBrowserSignatureCheck" Module="Core" Type="1">U2Vzc2lvbiBTZWN1cml0eSBDaGVjayBiYXNlZCBvbiBCcm93c2VyIFNpZ25hdHVyZQ==</PHRASE> <PHRASE Label="la_config_SessionCookieDomains" Module="Core" Type="1">U2Vzc2lvbiBDb29raWUgRG9tYWlucyAoc2luZ2xlIGRvbWFpbiBwZXIgbGluZSk=</PHRASE> <PHRASE Label="la_config_SessionIPAddressCheck" Module="Core" Type="1">U2Vzc2lvbiBTZWN1cml0eSBDaGVjayBiYXNlZCBvbiBJUA==</PHRASE> <PHRASE Label="la_config_SiteNameSubTitle" Module="Core" Type="1">V2Vic2l0ZSBTdWJ0aXRsZQ==</PHRASE> <PHRASE Label="la_config_site_zone" Module="Core" Type="1">VGltZSB6b25lIG9mIHRoZSBzaXRl</PHRASE> <PHRASE Label="la_config_SoftMaintenanceTemplate" Module="Core" Type="1" Hint="VGhpcyB0ZW1wbGF0ZSB3aWxsIGJlIHNob3duIHRvIHRoZSBGcm9udCBFbmQgdXNlcnMgd2hlbiBTb2Z0IE1haW50ZW5hbmNlIG1vZGUgaXMgYWN0aXZlLg==">VGVtcGxhdGUgZm9yIFNvZnQgTWFpbnRlbmFuY2U=</PHRASE> <PHRASE Label="la_config_ssl_url" Module="Core" Type="1">U1NMIEZ1bGwgVVJMIChodHRwczovL3d3dy5kb21haW4uY29tL3BhdGgp</PHRASE> <PHRASE Label="la_config_StickyGridSelection" Module="Core" Type="1">VXNlIFN0aWNreSBHcmlkIFNlbGVjdGlvbg==</PHRASE> <PHRASE Label="la_config_ThumbnailImageHeight" Module="Core" Type="1">VGh1bWJuYWlsIEhlaWdodA==</PHRASE> <PHRASE Label="la_config_ThumbnailImageWidth" Module="Core" Type="1">VGh1bWJuYWlsIFdpZHRo</PHRASE> <PHRASE Label="la_config_TrimRequiredFields" Module="Core" Type="1">VHJpbSBSZXF1aXJlZCBGaWVsZHM=</PHRASE> <PHRASE Label="la_config_UpdateCountersOnFilterChange" Module="Core" Type="1">VXBkYXRlIGNvdW50ZXJzIChpbiBvdGhlciBmaWx0ZXJzKSBvbiBmaWx0ZXIgY2hhbmdl</PHRASE> <PHRASE Label="la_config_UseChangeLog" Module="Core" Type="1">VHJhY2sgZGF0YWJhc2UgY2hhbmdlcyB0byBjaGFuZ2UgbG9n</PHRASE> <PHRASE Label="la_config_UseColumnFreezer" Module="Core" Type="1">VXNlIENvbHVtbiBGcmVlemVy</PHRASE> <PHRASE Label="la_config_UseContentLanguageNegotiation" Module="Core" Type="1">QXV0by1kZXRlY3QgVXNlcidzIGxhbmd1YWdlIGJhc2VkIG9uIGl0J3MgQnJvd3NlciBzZXR0aW5ncw==</PHRASE> <PHRASE Label="la_config_UseDoubleSorting" Module="Core" Type="1">VXNlIERvdWJsZSBTb3J0aW5n</PHRASE> <PHRASE Label="la_config_UseHTTPAuth" Module="Core" Type="1">RW5hYmxlIEhUVFAgQXV0aGVudGljYXRpb24=</PHRASE> <PHRASE Label="la_config_UseOutputCompression" Module="Core" Type="1">RW5hYmxlIEhUTUwgR1pJUCBjb21wcmVzc2lvbg==</PHRASE> <PHRASE Label="la_config_UsePageHitCounter" Module="Core" Type="1">VXNlIFBhZ2VIaXQgY291bnRlcg==</PHRASE> <PHRASE Label="la_config_UsePopups" Module="Core" Type="1">RWRpdGluZyBXaW5kb3cgU3R5bGU=</PHRASE> <PHRASE Label="la_config_UserEmailActivationTimeout" Module="Core" Type="1">RW1haWwgYWN0aXZhdGlvbiBleHBpcmF0aW9uIHRpbWVvdXQgKGluIG1pbnV0ZXMp</PHRASE> <PHRASE Label="la_config_UseSmallHeader" Module="Core" Type="1">VXNlIFNtYWxsIFNlY3Rpb24gSGVhZGVycw==</PHRASE> <PHRASE Label="la_config_UseTemplateCompression" Module="Core" Type="1">Q29tcHJlc3MgQ29tcGlsZWQgUEhQIFRlbXBsYXRlcw==</PHRASE> <PHRASE Label="la_config_UseToolbarLabels" Module="Core" Type="1">VXNlIFRvb2xiYXIgTGFiZWxz</PHRASE> <PHRASE Label="la_config_UseVisitorTracking" Module="Core" Type="1">VXNlIFZpc2l0b3IgVHJhY2tpbmc=</PHRASE> <PHRASE Label="la_config_use_js_redirect" Module="Core" Type="1">VXNlIEphdmFTY3JpcHQgcmVkaXJlY3Rpb24gYWZ0ZXIgbG9naW4vbG9nb3V0IChmb3IgSUlTKQ==</PHRASE> <PHRASE Label="la_config_use_modrewrite" Module="Core" Type="1">RW5hYmxlIFNFTy1mcmllbmRseSBVUkxzIG1vZGUgKE1PRC1SRVdSSVRFKQ==</PHRASE> <PHRASE Label="la_config_use_modrewrite_with_ssl" Module="Core" Type="1">RW5hYmxlIE1PRF9SRVdSSVRFIGZvciBTU0w=</PHRASE> <PHRASE Label="la_config_website_name" Module="Core" Type="1">V2Vic2l0ZSBuYW1l</PHRASE> <PHRASE Label="la_config_YahooApplicationId" Module="Core" Type="1">WWFob28gQXBwbGljYXRpb25JZA==</PHRASE> <PHRASE Label="la_ConfirmDeleteExportPreset" Module="Core" Type="1">QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBzZWxlY3RlZCBFeHBvcnQgUHJlc2V0Pw==</PHRASE> <PHRASE Label="la_confirm_maintenance" Module="Core" Type="1">VGhlIHNlY3Rpb24gdHJlZSBtdXN0IGJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgbGF0ZXN0IGNoYW5nZXM=</PHRASE> <PHRASE Label="la_CurrentTheme" Module="Core" Type="1">Q3VycmVudCBUaGVtZQ==</PHRASE> <PHRASE Label="la_DataGrid1" Module="Core" Type="1">RGF0YSBHcmlkcw==</PHRASE> <PHRASE Label="la_DataGrid2" Module="Core" Type="1">RGF0YSBHcmlkcyAy</PHRASE> <PHRASE Label="la_days" Module="Core" Type="1">ZGF5cw==</PHRASE> <PHRASE Label="la_Delete_Confirm" Module="Core" Type="1">QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgaXRlbShzKT8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4=</PHRASE> <PHRASE Label="la_Description_in-portal:advanced_view" Module="Core" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIHNlY3Rpb25zIGFuZCBpdGVtcyBhY3Jvc3MgYWxsIHNlY3Rpb25z</PHRASE> <PHRASE Label="la_Description_in-portal:browse" Module="Core" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gYnJvd3NlIHRoZSBjYXRhbG9nIGFuZCBtYW5hZ2Ugc2VjdGlvbnMgYW5kIGl0ZW1z</PHRASE> <PHRASE Label="la_Description_in-portal:site" Module="Core" Type="1">TWFuYWdlIHRoZSBzdHJ1Y3R1cmUgb2YgeW91ciBzaXRlLCBpbmNsdWRpbmcgc2VjdGlvbnMsIGl0ZW1zIGFuZCBzZWN0aW9uIHNldHRpbmdzLg==</PHRASE> <PHRASE Label="la_Disabled" Module="Core" Type="1">RGlzYWJsZWQ=</PHRASE> <PHRASE Label="la_Doublequotes" Module="Core" Type="1">RG91YmxlLVF1b3Rlcw==</PHRASE> <PHRASE Label="la_DownloadCSV" Module="Core" Type="1">RG93bmxvYWQgQ1NW</PHRASE> <PHRASE Label="la_DownloadExportFile" Module="Core" Type="1">RG93bmxvYWQgRXhwb3J0IEZpbGU=</PHRASE> <PHRASE Label="la_DownloadLanguageExport" Module="Core" Type="1">RG93bmxvYWQgTGFuZ3VhZ2UgRXhwb3J0</PHRASE> <PHRASE Label="la_Draft" Module="Core" Type="1">RHJhZnQ=</PHRASE> <PHRASE Label="la_DraftAvailableFrom" Module="Core" Type="1">RHJhZnQgQXZhaWxhYmxl</PHRASE> <PHRASE Label="la_DraftSavedAt" Module="Core" Type="1">ZHJhZnQgc2F2ZWQgYXQgJXM=</PHRASE> <PHRASE Label="la_EditingContent" Module="Core" Type="1">Q29udGVudCBFZGl0b3I=</PHRASE> <PHRASE Label="la_EditingInProgress" Module="Core" Type="1">WW91IGhhdmUgbm90IHNhdmVkIGNoYW5nZXMgdG8gdGhlIGl0ZW0geW91IGFyZSBlZGl0aW5nITxiciAvPkNsaWNrIE9LIHRvIGxvb3NlIGNoYW5nZXMgYW5kIGdvIHRvIHRoZSBzZWxlY3RlZCBzZWN0aW9uPGJyIC8+b3IgQ2FuY2VsIHRvIHN0YXkgaW4gdGhlIGN1cnJlbnQgc2VjdGlvbi4=</PHRASE> <PHRASE Label="la_editor_default_style" Module="Core" Type="1">RGVmYXVsdCB0ZXh0</PHRASE> <PHRASE Label="la_EmptyFile" Module="Core" Type="1">RmlsZSBpcyBlbXB0eQ==</PHRASE> <PHRASE Label="la_empty_file" Module="Core" Type="1">RmlsZSBpcyBlbXB0eQ==</PHRASE> <PHRASE Label="la_Enabled" Module="Core" Type="1">RW5hYmxlZA==</PHRASE> <PHRASE Label="la_error_CantDeleteSystemPermission" Module="Core" Type="1">Q2FuJ3QgZGVsZXRlIHN5c3RlbSBwZXJtaXNzaW9u</PHRASE> <PHRASE Label="la_error_CantOpenFile" Module="Core" Type="1">Q2FuJ3Qgb3BlbiB0aGUgZmlsZQ==</PHRASE> <PHRASE Label="la_error_cant_save_file" Module="Core" Type="1">Q2FuJ3Qgc2F2ZSBhIGZpbGU=</PHRASE> <PHRASE Label="la_error_ConnectionFailed" Module="Core" Type="1">Q29ubmVjdGlvbiBGYWlsZWQ=</PHRASE> <PHRASE Label="la_error_copy_subcategory" Module="Core" Type="1">RXJyb3IgY29weWluZyBzdWJzZWN0aW9ucw==</PHRASE> <PHRASE Label="la_error_CustomExists" Module="Core" Type="1">Q3VzdG9tIGZpZWxkIHdpdGggaWRlbnRpY2FsIG5hbWUgYWxyZWFkeSBleGlzdHM=</PHRASE> <PHRASE Label="la_error_FileTooLarge" Module="Core" Type="1">RmlsZSBpcyB0b28gbGFyZ2U=</PHRASE> <PHRASE Label="la_error_GroupNotFound" Module="Core" Type="1">Z3JvdXAgbm90IGZvdW5k</PHRASE> <PHRASE Label="la_error_InvalidFieldName" Module="Core" Type="1">RmllbGQgZG9lc24ndCBleGlzdCBpbiAiJXMiIHVuaXQgY29uZmln</PHRASE> <PHRASE Label="la_error_InvalidFileFormat" Module="Core" Type="1">SW52YWxpZCBGaWxlIEZvcm1hdA==</PHRASE> <PHRASE Label="la_error_InvalidItemPrefix" Module="Core" Type="1">VW5pdCBjb25maWcgcHJlZml4IG5vdCBmb3VuZA==</PHRASE> <PHRASE Label="la_error_invalidoption" Module="Core" Type="1">aW52YWxpZCBvcHRpb24=</PHRASE> <PHRASE Label="la_error_LoginFailed" Module="Core" Type="1">TG9naW4gRmFpbGVk</PHRASE> <PHRASE Label="la_error_MessagesListReceivingFailed" Module="Core" Type="1">UmVjZWl2aW5nIGxpc3Qgb2YgbWVzc2FnZXMgZnJvbSB0aGUgU2VydmVyIGhhcyBmYWlsZWQ=</PHRASE> <PHRASE Label="la_error_move_subcategory" Module="Core" Type="1">RXJyb3IgbW92aW5nIHN1YnNlY3Rpb24=</PHRASE> <PHRASE Label="la_error_NoInheritancePossible" Module="Core" Type="1">Q2FuJ3QgaW5oZXJpdCB0ZW1wbGF0ZSBmcm9tIHRvcCBjYXRlZ29yeQ==</PHRASE> <PHRASE Label="la_error_NoMatchingColumns" Module="Core" Type="1">Tm8gbWF0Y2hpbmcgY29sdW1ucyBhcmUgZm91bmQ=</PHRASE> <PHRASE Label="la_error_OperationNotAllowed" Module="Core" Type="1">VGhpcyBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQh</PHRASE> <PHRASE Label="la_error_ParsingError" Module="Core" Type="1">VmFsaWRhdGlvbiBlcnJvciwgcGxlYXNlIGRvdWJsZS1jaGVjayBJbi1Qb3J0YWwgdGFncw==</PHRASE> <PHRASE Label="la_error_PasswordMatch" Module="Core" Type="1">UGFzc3dvcmRzIGRvIG5vdCBtYXRjaCE=</PHRASE> <PHRASE Label="la_error_PromoGroupNotEmpty" Module="Core" Type="1">Q2FuJ3QgRGVsZXRlIE5vbi1FbXB0eSBQcm9tbyBCbG9jayBHcm91cA==</PHRASE> <PHRASE Label="la_error_required" Module="Core" Type="1">UmVxdWlyZWQgZmllbGQoLXMpIG5vdCBmaWxsZWQ=</PHRASE> <PHRASE Label="la_error_RequiredColumnsMissing" Module="Core" Type="1">cmVxdWlyZWQgY29sdW1ucyBtaXNzaW5n</PHRASE> <PHRASE Label="la_error_RootCategoriesDelete" Module="Core" Type="1">Um9vdCBzZWN0aW9uIG9mIHRoZSBtb2R1bGUocykgY2FuIG5vdCBiZSBkZWxldGVkIQ==</PHRASE> <PHRASE Label="la_error_SelectItemToMove" Module="Core" Type="1">U2VsZWN0IGF0IGxlYXN0IG9uZSBpdGVtIHRvIG1vdmU=</PHRASE> <PHRASE Label="la_error_TemplateFileMissing" Module="Core" Type="1">VGVtcGxhdGUgZmlsZSBpcyBtaXNzaW5n</PHRASE> <PHRASE Label="la_error_TemporaryTableCopyingFailed" Module="Core" Type="1">Q29weWluZyBvcGVyYXRpb24gaW4gVGVtcG9yYXJ5IHRhYmxlcyBoYXMgZmFpbGVkLiBQbGVhc2UgY29udGFjdCB3ZWJzaXRlIGFkbWluaXN0cmF0b3Iu</PHRASE> <PHRASE Label="la_error_unique" Module="Core" Type="1">UmVjb3JkIGlzIG5vdCB1bmlxdWU=</PHRASE> <PHRASE Label="la_error_unique_category_field" Module="Core" Type="1">U2VjdGlvbiBmaWVsZCBub3QgdW5pcXVl</PHRASE> <PHRASE Label="la_error_unknown_category" Module="Core" Type="1">VW5rbm93biBzZWN0aW9u</PHRASE> <PHRASE Label="la_error_UserBanned" Module="Core" Type="1">VXNlciBCYW5uZWQ=</PHRASE> <PHRASE Label="LA_ERROR_USERNOTFOUND" Module="Core" Type="1">dXNlciBub3QgZm91bmQ=</PHRASE> <PHRASE Label="la_error_YouMustSelectOnlyOneUser" Module="Core" Type="1">WW91IG11c3Qgc2VsZWN0IG9ubHkgb25lIHVzZXI=</PHRASE> <PHRASE Label="la_err_bad_date_format" Module="Core" Type="1">SW5jb3JyZWN0IGRhdGUgZm9ybWF0LCBwbGVhc2UgdXNlICglcykgZXguICglcyk=</PHRASE> <PHRASE Label="la_err_bad_type" Module="Core" Type="1">SW5jb3JyZWN0IGRhdGEgZm9ybWF0LCBwbGVhc2UgdXNlICVz</PHRASE> <PHRASE Label="la_err_invalid_format" Module="Core" Type="1">SW52YWxpZCBGb3JtYXQ=</PHRASE> <PHRASE Label="la_err_length_out_of_range" Module="Core" Type="1">RmllbGQgdmFsdWUgbGVuZ3RoIGlzIG91dCBvZiByYW5nZSwgcG9zc2libGUgdmFsdWUgbGVuZ3RoIGZyb20gJXMgdG8gJXM=</PHRASE> <PHRASE Label="la_err_Primary_Lang_Required" Module="Core" Type="1">UHJpbWFyeSBMYW5nLiB2YWx1ZSBSZXF1aXJlZA==</PHRASE> <PHRASE Label="la_err_required" Module="Core" Type="1">RmllbGQgaXMgcmVxdWlyZWQ=</PHRASE> <PHRASE Label="la_err_unique" Module="Core" Type="1">RmllbGQgdmFsdWUgbXVzdCBiZSB1bmlxdWU=</PHRASE> <PHRASE Label="la_err_value_out_of_range" Module="Core" Type="1">RmllbGQgdmFsdWUgaXMgb3V0IG9mIHJhbmdlLCBwb3NzaWJsZSB2YWx1ZXMgZnJvbSAlcyB0byAlcw==</PHRASE> <PHRASE Label="la_exportfoldernotwritable" Module="Core" Type="1">RXhwb3J0IGZvbGRlciBpcyBub3Qgd3JpdGFibGU=</PHRASE> <PHRASE Label="la_fck_ErrorCreatingFolder" Module="Core" Type="1">RXJyb3IgY3JlYXRpbmcgZm9sZGVyLiBFcnJvciBudW1iZXI6</PHRASE> <PHRASE Label="la_fck_ErrorFileName" Module="Core" Type="1">UGxlYXNlIG5hbWUgeW91ciBmaWxlcyB0byBiZSB3ZWItZnJpZW5kbHkuIFdlIHJlY29tbWVuZCB1c2luZyBvbmx5IHRoZXNlIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lczogDQpMZXR0ZXJzIGEteiwgQS1aLCBOdW1iZXJzIDAtOSwgIl8iICh1bmRlcnNjb3JlKSwgIi0iIChkYXNoKSwgIiAiIChzcGFjZSksICIuIiAocGVyaW9kKQ0KUGxlYXNlIGF2b2lkIHVzaW5nIGFueSBvdGhlciBjaGFyYWN0ZXJzIGxpa2UgcXVvdGVzLCBicmFja2V0cywgcXVvdGF0aW9uIG1hcmtzLCAiPyIsICIhIiwgIj0iLCBmb3JlaWduIHN5bWJvbHMsIGV0Yy4=</PHRASE> <PHRASE Label="la_fck_ErrorFileUpload" Module="Core" Type="1">RXJyb3Igb24gZmlsZSB1cGxvYWQuIEVycm9yIG51bWJlcjo=</PHRASE> <PHRASE Label="la_fck_FileAvailable" Module="Core" Type="1">QSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBhbHJlYWR5IGF2YWlsYWJsZQ==</PHRASE> <PHRASE Label="la_fck_FileDate" Module="Core" Type="1">RGF0ZQ==</PHRASE> <PHRASE Label="la_fck_FileName" Module="Core" Type="1">RmlsZSBOYW1l</PHRASE> <PHRASE Label="la_fck_FileSize" Module="Core" Type="1">U2l6ZQ==</PHRASE> <PHRASE Label="la_fck_FolderAlreadyExists" Module="Core" Type="1">Rm9sZGVyIGFscmVhZHkgZXhpc3Rz</PHRASE> <PHRASE Label="la_fck_InvalidFileType" Module="Core" Type="1">SW52YWxpZCBmaWxlIHR5cGUgZm9yIHRoaXMgZm9kZXI=</PHRASE> <PHRASE Label="la_fck_InvalidFolderName" Module="Core" Type="1">SW52YWxpZCBmb2xkZXIgbmFtZQ==</PHRASE> <PHRASE Label="la_fck_NoPermissionsCreateFolder" Module="Core" Type="1">WW91IGhhdmUgbm8gcGVybWlzc2lvbnMgdG8gY3JlYXRlIHRoZSBmb2xkZXI=</PHRASE> <PHRASE Label="la_fck_PleaseTypeTheFolderName" Module="Core" Type="1">UGxlYXNlIHR5cGUgdGhlIGZvbGRlciBuYW1l</PHRASE> <PHRASE Label="la_fck_TypeTheFolderName" Module="Core" Type="1">VHlwZSB0aGUgbmFtZSBvZiB0aGUgbmV3IGZvbGRlcjo=</PHRASE> <PHRASE Label="la_fck_UnknownErrorCreatingFolder" Module="Core" Type="1">VW5rbm93biBlcnJvciBjcmVhdGluZyBmb2xkZXI=</PHRASE> <PHRASE Label="la_Field" Module="Core" Type="1">RmllbGQ=</PHRASE> <PHRASE Label="la_field_displayorder" Module="Core" Type="1">RGlzcGxheSBPcmRlcg==</PHRASE> <PHRASE Label="la_field_Priority" Module="Core" Type="1">T3JkZXI=</PHRASE> <PHRASE Label="la_fld_Action" Module="Core" Type="1" Column="QWN0aW9u">QWN0aW9u</PHRASE> <PHRASE Label="la_fld_AddressLine1" Module="Core" Type="1" Column="QWRkcmVzcyBMaW5lIDE=">QWRkcmVzcyBMaW5lIDE=</PHRASE> <PHRASE Label="la_fld_AddressLine2" Module="Core" Type="1" Column="QWRkcmVzcyBMaW5lIDI=">QWRkcmVzcyBMaW5lIDI=</PHRASE> <PHRASE Label="la_fld_AdminEmail" Module="Core" Type="1">TWVzc2FnZXMgZnJvbSBTaXRlIEFkbWluIGFyZSBmcm9t</PHRASE> <PHRASE Label="la_fld_AdminInterfaceLang" Module="Core" Type="1" Column="QWRtaW4gUHJpbWFyeQ==">QWRtaW4gUHJpbWFyeQ==</PHRASE> <PHRASE Label="la_fld_AdminLanguage" Module="Core" Type="1" Column="TGFuZ3VhZ2U=">TGFuZ3VhZ2U=</PHRASE> <PHRASE Label="la_fld_AdvancedCSS" Module="Core" Type="1">QWR2YW5jZWQgQ1NT</PHRASE> <PHRASE Label="la_fld_AdvancedSearch" Module="Core" Type="1">QWR2YW5jZWQgU2VhcmNo</PHRASE> <PHRASE Label="la_fld_AllowChangingRecipient" Module="Core" Type="1">QWxsb3cgQ2hhbmdpbmcgIlRvIiBSZWNpcGllbnQ=</PHRASE> <PHRASE Label="la_fld_AllowChangingSender" Module="Core" Type="1">QWxsb3cgQ2hhbmdpbmcgU2VuZGVy</PHRASE> <PHRASE Label="la_fld_AltValue" Module="Core" Type="1">QWx0IFZhbHVl</PHRASE> <PHRASE Label="la_fld_Answer" Module="Core" Type="1">QW5zd2Vy</PHRASE> <PHRASE Label="la_fld_AssignedToSections" Module="Core" Type="1">QXNzaWduZWQgdG8gU2VjdGlvbnM=</PHRASE> <PHRASE Label="LA_FLD_ATTACHMENT" Module="Core" Type="1">QXR0YWNobWVudA==</PHRASE> <PHRASE Label="la_fld_AutoCreateFileName" Module="Core" Type="1">QXV0byBDcmVhdGUgRmlsZSBOYW1l</PHRASE> <PHRASE Label="la_fld_AutomaticFilename" Module="Core" Type="1">QXV0b21hdGljIEZpbGVuYW1l</PHRASE> <PHRASE Label="la_fld_AvailableColumns" Module="Core" Type="1">QXZhaWxhYmxlIENvbHVtbnM=</PHRASE> <PHRASE Label="la_fld_Background" Module="Core" Type="1">QmFja2dyb3VuZA==</PHRASE> <PHRASE Label="la_fld_BackgroundAttachment" Module="Core" Type="1">QmFja2dyb3VuZCBBdHRhY2htZW50</PHRASE> <PHRASE Label="la_fld_BackgroundColor" Module="Core" Type="1">QmFja2dyb3VuZCBDb2xvcg==</PHRASE> <PHRASE Label="la_fld_BackgroundImage" Module="Core" Type="1">QmFja2dyb3VuZCBJbWFnZQ==</PHRASE> <PHRASE Label="la_fld_BackgroundPosition" Module="Core" Type="1">QmFja2dyb3VuZCBQb3NpdGlvbg==</PHRASE> <PHRASE Label="la_fld_BackgroundRepeat" Module="Core" Type="1">QmFja2dyb3VuZCBSZXBlYXQ=</PHRASE> <PHRASE Label="la_fld_Bcc" Module="Core" Type="1" Column="QmNj">QmNj</PHRASE> <PHRASE Label="la_fld_BlockPosition" Module="Core" Type="1">RWxlbWVudCBQb3NpdGlvbg==</PHRASE> <PHRASE Label="la_fld_BorderBottom" Module="Core" Type="1">Qm9yZGVyIEJvdHRvbQ==</PHRASE> <PHRASE Label="la_fld_BorderLeft" Module="Core" Type="1">Qm9yZGVyIExlZnQ=</PHRASE> <PHRASE Label="la_fld_BorderRight" Module="Core" Type="1">Qm9yZGVyIFJpZ2h0</PHRASE> <PHRASE Label="la_fld_Borders" Module="Core" Type="1">Qm9yZGVycw==</PHRASE> <PHRASE Label="la_fld_BorderTop" Module="Core" Type="1">Qm9yZGVyIFRvcA==</PHRASE> <PHRASE Label="la_fld_BounceDate" Module="Core" Type="1" Column="Qm91bmNlZCBPbg==">Qm91bmNlIERhdGU=</PHRASE> <PHRASE Label="la_fld_BounceEmail" Module="Core" Type="1">Qm91bmNlIEVtYWls</PHRASE> <PHRASE Label="la_fld_BounceInfo" Module="Core" Type="1" Column="Qm91bmNlIEluZm8=">Qm91bmNlIEluZm8=</PHRASE> <PHRASE Label="la_fld_Category" Module="Core" Type="1" Column="U2VjdGlvbg==">U2VjdGlvbg==</PHRASE> <PHRASE Label="la_fld_CategoryFormat" Module="Core" Type="1">U2VjdGlvbiBGb3JtYXQ=</PHRASE> <PHRASE Label="la_fld_CategoryId" Module="Core" Type="1">U2VjdGlvbiBJRA==</PHRASE> <PHRASE Label="la_fld_CategorySeparator" Module="Core" Type="1">U2VjdGlvbiBzZXBhcmF0b3I=</PHRASE> <PHRASE Label="la_fld_CategoryTemplate" Module="Core" Type="1">U2VjdGlvbiBUZW1wbGF0ZQ==</PHRASE> <PHRASE Label="la_fld_Cc" Module="Core" Type="1" Column="Q2M=">Q2M=</PHRASE> <PHRASE Label="la_fld_Changes" Module="Core" Type="1" Column="Q2hhbmdlcw==">Q2hhbmdlcw==</PHRASE> <PHRASE Label="la_fld_Charset" Module="Core" Type="1" Column="Q2hhcnNldA==">Q2hhcnNldA==</PHRASE> <PHRASE Label="la_fld_CheckDuplicatesMethod" Module="Core" Type="1">Q2hlY2sgRHVwbGljYXRlcyBieQ==</PHRASE> <PHRASE Label="la_fld_City" Module="Core" Type="1" Column="Q2l0eQ==">Q2l0eQ==</PHRASE> <PHRASE Label="la_fld_ColumnTranslation" Module="Core" Type="1" Hint="QXNzb2NpYXRlZCBjb2x1bW4gaGVhZGluZyB0cmFuc2xhdGlvbg==">Q29sdW1uIFBocmFzZQ==</PHRASE> <PHRASE Label="la_fld_Comments" Module="Core" Type="1">Q29tbWVudHM=</PHRASE> <PHRASE Label="la_fld_Company" Module="Core" Type="1" Column="Q29tcGFueQ==">Q29tcGFueQ==</PHRASE> <PHRASE Label="la_fld_ConfigHeader" Module="Core" Type="1">Q29uZmlndXJhdGlvbiBIZWFkZXIgTGFiZWw=</PHRASE> <PHRASE Label="la_fld_ContentBlock" Module="Core" Type="1">Q29udGVudCBCbG9jaw==</PHRASE> <PHRASE Label="la_fld_ConversionPercent" Module="Core" Type="1" Column="Q1RSLCAl">Q1RSLCAl</PHRASE> <PHRASE Label="la_fld_CopyLabels" Module="Core" Type="1">Q29weSBMYWJlbHMgZnJvbSB0aGlzIExhbmd1YWdl</PHRASE> <PHRASE Label="la_fld_Country" Module="Core" Type="1" Column="Q291bnRyeQ==">Q291bnRyeQ==</PHRASE> <PHRASE Label="la_fld_CreatedById" Module="Core" Type="1">Q3JlYXRlZCBCeQ==</PHRASE> <PHRASE Label="la_fld_CreatedOn" Module="Core" Type="1" Column="Q3JlYXRlZCBPbg==">Q3JlYXRlZCBPbg==</PHRASE> <PHRASE Label="la_fld_CSS" Module="Core" Type="1">Q1NTIFRlbXBsYXRl</PHRASE> <PHRASE Label="la_fld_CSSClassName" Module="Core" Type="1" Column="Q1NTIENsYXNzIE5hbWU=">Q1NTIENsYXNzIE5hbWU=</PHRASE> <PHRASE Label="la_fld_Cursor" Module="Core" Type="1">Q3Vyc29y</PHRASE> <PHRASE Label="la_fld_CustomDetailTemplate" Module="Core" Type="1">Q3VzdG9tIERldGFpbHMgVGVtcGxhdGU=</PHRASE> <PHRASE Label="la_fld_CustomRecipient" Module="Core" Type="1">U2VuZCBFbWFpbCBUbw==</PHRASE> <PHRASE Label="la_fld_CustomSender" Module="Core" Type="1">U2VuZCBFbWFpbCBGcm9t</PHRASE> <PHRASE Label="la_fld_CustomTemplate" Module="Core" Type="1">DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KRGV0YWlscyBUZW1wbGF0ZQ==</PHRASE> <PHRASE Label="la_fld_DateFormat" Module="Core" Type="1">RGF0ZSBGb3JtYXQ=</PHRASE> <PHRASE Label="la_fld_DecimalPoint" Module="Core" Type="1">RGVjaW1hbCBQb2ludA==</PHRASE> <PHRASE Label="la_fld_Description" Module="Core" Type="1" Column="RGVzY3JpcHRpb24=">RGVzY3JpcHRpb24=</PHRASE> <PHRASE Label="la_fld_DirectLinkEnabled" Module="Core" Type="1">QWNjZXNzIHdpdGggTGluaw==</PHRASE> <PHRASE Label="la_fld_Display" Module="Core" Type="1">RGlzcGxheQ==</PHRASE> <PHRASE Label="la_fld_DisplayInGrid" Module="Core" Type="1">RGlzcGxheSBpbiBHcmlk</PHRASE> <PHRASE Label="la_fld_DisplayName" Module="Core" Type="1">RmllbGQgTGFiZWw=</PHRASE> <PHRASE Label="la_fld_DisplaySiteNameInHeader" Module="Core" Type="1">RGlzcGxheSBzaXRlIG5hbWUgaW4gSGVhZGVy</PHRASE> <PHRASE Label="la_fld_DisplayToPublic" Module="Core" Type="1">RGlzcGxheSBUbyBQdWJsaWM=</PHRASE> <PHRASE Label="la_fld_DomainIPRange" Module="Core" Type="1" Hint="U2luZ2xlIElQLCBJUCByYW5nZSwgU3VibmV0IG9yIGhvc3RuYW1lIHJlY29yZCBwZXIgbGluZSAoZm9ybWF0czogMS4yLjMuNCBvciAxLjIuMy4zMi0xLjIuMy41NCBvciAxLjIuMy4zMi8yNyBvciAxLjIuMy4zMi8yNTUuMjU1LjI1NS4yMjQgb3Igd3d3LmluLXBvcnRhbC5jb20p">UmFuZ2Ugb2YgSVBz</PHRASE> <PHRASE Label="la_fld_DomainName" Module="Core" Type="1" Column="RG9tYWluIE5hbWU=">RG9tYWluIE5hbWU=</PHRASE> <PHRASE Label="la_fld_DoNotEncode" Module="Core" Type="1">QXMgUGxhaW4gVGV4dA==</PHRASE> <PHRASE Label="la_fld_Duration" Module="Core" Type="1" Column="RHVyYXRpb24=">RHVyYXRpb24=</PHRASE> <PHRASE Label="la_fld_EditorsPick" Module="Core" Type="1">RWRpdG9ycyBQaWNr</PHRASE> <PHRASE Label="la_fld_ElapsedTime" Module="Core" Type="1">RWxhcHNlZCBUaW1l</PHRASE> <PHRASE Label="la_fld_Email" Module="Core" Type="1" Column="RW1haWw=">RS1tYWls</PHRASE> <PHRASE Label="la_fld_EmailCommunicationRole" Module="Core" Type="1" Column="RS1tYWlsIENvbW11bmljYXRpb24gUm9sZQ==">RS1tYWlsIENvbW11bmljYXRpb24gUm9sZQ==</PHRASE> <PHRASE Label="la_fld_EmailOrUsername" Module="Core" Type="1">RS1tYWlsIG9yIFVzZXJuYW1l</PHRASE> <PHRASE Label="la_fld_EmailPassword" Module="Core" Type="1">RS1tYWlsICI8c3Ryb25nPntwYXNzd29yZH08L3N0cm9uZz4iIHBhc3N3b3JkIHRvIHVzZXI=</PHRASE> <PHRASE Label="la_fld_EmailsQueued" Module="Core" Type="1" Column="UXVldWU=">RW1haWxzIGluIFF1ZXVl</PHRASE> <PHRASE Label="la_fld_EmailsSent" Module="Core" Type="1" Column="U2VudA==">RW1haWxzIFNlbnQ=</PHRASE> <PHRASE Label="la_fld_EmailsTotal" Module="Core" Type="1" Column="VG90YWw=">RW1haWxzIFRvdGFs</PHRASE> <PHRASE Label="la_fld_EmailVerified" Module="Core" Type="1" Column="RW1haWwgVmVyaWZpZWQ=">RW1haWwgVmVyaWZpZWQ=</PHRASE> <PHRASE Label="la_fld_Enable" Module="Core" Type="1">RW5hYmxl</PHRASE> <PHRASE Label="la_fld_Enabled" Module="Core" Type="1" Column="RW5hYmxlZA==">RW5hYmxlZA==</PHRASE> <PHRASE Label="la_fld_EnablePageCache" Module="Core" Type="1">RW5hYmxlIENhY2hpbmcgZm9yIHRoaXMgU2VjdGlvbg==</PHRASE> <PHRASE Label="la_fld_ErrorTag" Module="Core" Type="1">RXJyb3IgVGFn</PHRASE> <PHRASE Label="la_fld_EstimatedTime" Module="Core" Type="1">RXN0aW1hdGVkIFRpbWU=</PHRASE> <PHRASE Label="la_fld_Event" Module="Core" Type="1" Column="RXZlbnQ=">RXZlbnQ=</PHRASE> <PHRASE Label="la_fld_Expire" Module="Core" Type="1">RXhwaXJl</PHRASE> <PHRASE Label="la_fld_ExportColumns" Module="Core" Type="1">RXhwb3J0IGNvbHVtbnM=</PHRASE> + <PHRASE Label="la_fld_ExportCountries" Module="Core" Type="1" Hint="U2luZ2xlIENvdW50cnkgSVNPIGNvZGUgcGVyIGxpbmUgKGZvcm1hdHM6IEFUQSwgQkVMKQ==">RXhwb3J0IFNwZWNpZmllZCBDb3VudHJpZXM=</PHRASE> + <PHRASE Label="la_fld_ExportDataTypes" Module="Core" Type="1">RGF0YSBUeXBlcyB0byBFeHBvcnQ=</PHRASE> <PHRASE Label="la_fld_ExportEmailEvents" Module="Core" Type="1" Hint="U2luZ2xlIEVtYWlsIEV2ZW50IHBlciBsaW5lIChmb3JtYXRzOiBVU0VSLkFERCwgT1JERVIuU1VCTUlUKQ==">RXhwb3J0IFNwZWNpZmllZCBFbWFpbCBFdmVudHM=</PHRASE> <PHRASE Label="la_fld_ExportFileName" Module="Core" Type="1">RXhwb3J0IEZpbGVuYW1l</PHRASE> <PHRASE Label="la_fld_ExportFormat" Module="Core" Type="1">RXhwb3J0IGZvcm1hdA==</PHRASE> <PHRASE Label="la_fld_ExportModules" Module="Core" Type="1">RXhwb3J0IE1vZHVsZXM=</PHRASE> <PHRASE Label="la_fld_ExportPhrases" Module="Core" Type="1" Hint="U2luZ2xlIFBocmFzZSBMYWJlbCBwZXIgbGluZSAoZm9ybWF0czogbGFfU2FtcGxlTGFiZWwsIGx1X0Zyb250RW5kTGFiZWwp">RXhwb3J0IFNwZWNpZmllZCBQaHJhc2Vz</PHRASE> <PHRASE Label="la_fld_ExportPhraseTypes" Module="Core" Type="1">RXhwb3J0IFBocmFzZSBUeXBlcw==</PHRASE> <PHRASE Label="la_fld_ExportPresetName" Module="Core" Type="1">RXhwb3J0IFByZXNldCBUaXRsZQ==</PHRASE> <PHRASE Label="la_fld_ExportPresets" Module="Core" Type="1">RXhwb3J0IFByZXNldA==</PHRASE> <PHRASE Label="la_fld_ExportSavePreset" Module="Core" Type="1">U2F2ZS9VcGRhdGUgRXhwb3J0IFByZXNldA==</PHRASE> <PHRASE Label="la_fld_ExternalLink" Module="Core" Type="1" Column="RXh0ZXJuYWwgTGluaw==">RXh0ZXJuYWwgTGluaw==</PHRASE> <PHRASE Label="la_fld_ExternalUrl" Module="Core" Type="1">RXh0ZXJuYWwgVVJM</PHRASE> <PHRASE Label="la_fld_ExtraHeaders" Module="Core" Type="1">RXh0cmEgSGVhZGVycw==</PHRASE> <PHRASE Label="la_fld_Fax" Module="Core" Type="1" Column="RmF4">RmF4</PHRASE> <PHRASE Label="la_fld_FieldComparision" Module="Core" Type="1" Column="TWF0Y2ggVHlwZQ==">TWF0Y2ggVHlwZQ==</PHRASE> <PHRASE Label="la_fld_FieldName" Module="Core" Type="1" Column="RmllbGQgTmFtZQ==">RmllbGQgTmFtZQ==</PHRASE> <PHRASE Label="la_fld_FieldsEnclosedBy" Module="Core" Type="1">RmllbGRzIGVuY2xvc2VkIGJ5</PHRASE> <PHRASE Label="la_fld_FieldsSeparatedBy" Module="Core" Type="1">RmllbGRzIHNlcGFyYXRlZCBieQ==</PHRASE> <PHRASE Label="la_fld_FieldTitles" Module="Core" Type="1">RmllbGQgVGl0bGVz</PHRASE> <PHRASE Label="la_fld_FieldType" Module="Core" Type="1">RmllbGQgVHlwZQ==</PHRASE> <PHRASE Label="la_fld_FieldValue" Module="Core" Type="1" Column="TWF0Y2ggVmFsdWU=">TWF0Y2ggVmFsdWU=</PHRASE> <PHRASE Label="la_fld_FileContents" Module="Core" Type="1">RmlsZSBDb250ZW50cw==</PHRASE> <PHRASE Label="la_fld_Filename" Module="Core" Type="1" Column="RmlsZW5hbWU=">RmlsZW5hbWU=</PHRASE> <PHRASE Label="la_fld_FilenameReplacements" Module="Core" Type="1">RmlsZW5hbWUgUmVwbGFjZW1lbnRz</PHRASE> <PHRASE Label="la_fld_FilePath" Module="Core" Type="1" Column="UGF0aA==">UGF0aA==</PHRASE> <PHRASE Label="la_fld_FilterField" Module="Core" Type="1" Hint="RmllbGQgbmFtZSwgdG8gYmUgdXNlZCBpbiBmaWx0ZXI=" Column="RmlsdGVyIEZpZWxk">RmlsdGVyIEZpZWxk</PHRASE> <PHRASE Label="la_fld_FilterType" Module="Core" Type="1" Hint="VGhlIHdheSwgaG93IHRoaXMgZmlsdGVyIHdpbGwgYmUgZGlzcGxheWVkIG9uIEZyb250LUVuZA==" Column="RmlsdGVyIFR5cGU=">RmlsdGVyIFR5cGU=</PHRASE> <PHRASE Label="la_fld_FirstName" Module="Core" Type="1" Column="Rmlyc3QgTmFtZQ==">Rmlyc3QgTmFtZQ==</PHRASE> <PHRASE Label="la_fld_Font" Module="Core" Type="1">Rm9udA==</PHRASE> <PHRASE Label="la_fld_FontColor" Module="Core" Type="1">Rm9udCBDb2xvcg==</PHRASE> <PHRASE Label="la_fld_FontFamily" Module="Core" Type="1">Rm9udCBGYW1pbHk=</PHRASE> <PHRASE Label="la_fld_FontSize" Module="Core" Type="1">Rm9udCBTaXpl</PHRASE> <PHRASE Label="la_fld_FontStyle" Module="Core" Type="1">Rm9udCBTdHlsZQ==</PHRASE> <PHRASE Label="la_fld_FontWeight" Module="Core" Type="1">Rm9udCBXZWlnaHQ=</PHRASE> <PHRASE Label="la_fld_Form" Module="Core" Type="1">T25saW5lIEZvcm0=</PHRASE> <PHRASE Label="la_fld_FormSubmittedTemplate" Module="Core" Type="1">T25saW5lIEZvcm0gU3VibWl0dGVkIFRlbXBsYXRl</PHRASE> <PHRASE Label="la_fld_FriendlyURL" Module="Core" Type="1">U2hvcnQgVVJM</PHRASE> <PHRASE Label="la_fld_FromEmail" Module="Core" Type="1" Column="RnJvbSBFLW1haWw=">RnJvbSBFbWFpbA==</PHRASE> <PHRASE Label="la_fld_FrontEndOnly" Module="Core" Type="1" Column="RnJvbnQtRW5kIE9ubHk=">RnJvbnQtRW5kIE9ubHk=</PHRASE> <PHRASE Label="la_fld_FrontLanguage" Module="Core" Type="1" Column="TGFuZ3VhZ2U=">TGFuZ3VhZ2U=</PHRASE> <PHRASE Label="la_fld_FrontRegistration" Module="Core" Type="1" Column="QWxsb3cgUmVnaXN0cmF0aW9u">QWxsb3cgUmVnaXN0cmF0aW9uIG9uIEZyb250LWVuZA==</PHRASE> <PHRASE Label="la_fld_FullName" Module="Core" Type="1" Column="RnVsbCBOYW1l">RnVsbCBOYW1l</PHRASE> <PHRASE Label="la_fld_Group" Module="Core" Type="1" Column="R3JvdXA=">VXNlciBHcm91cA==</PHRASE> <PHRASE Label="la_fld_GroupId" Module="Core" Type="1">SUQ=</PHRASE> <PHRASE Label="la_fld_GroupName" Module="Core" Type="1" Column="R3JvdXAgTmFtZQ==">R3JvdXAgTmFtZQ==</PHRASE> <PHRASE Label="la_fld_Height" Module="Core" Type="1">SGVpZ2h0</PHRASE> <PHRASE Label="la_fld_HelpfulCount" Module="Core" Type="1">UmV2aWV3IFdhcyBIZWxwZnVs</PHRASE> <PHRASE Label="la_fld_HintTranslation" Module="Core" Type="1" Hint="QXNzb2NpYXRlZCBmaWVsZCB1c2FnZSB0cmFuc2xhdGlvbg==">SGludCBQaHJhc2U=</PHRASE> <PHRASE Label="la_fld_Hits" Module="Core" Type="1" Column="SGl0cw==">SGl0cw==</PHRASE> <PHRASE Label="la_fld_Hot" Module="Core" Type="1">SG90</PHRASE> <PHRASE Label="LA_FLD_HTMLVERSION" Module="Core" Type="1">SFRNTCBWZXJzaW9u</PHRASE> <PHRASE Label="la_fld_IconDisabledURL" Module="Core" Type="1">SWNvbiBVUkwgKGRpc2FibGVkKQ==</PHRASE> <PHRASE Label="la_fld_IconURL" Module="Core" Type="1">SWNvbiBVUkw=</PHRASE> <PHRASE Label="la_fld_Id" Module="Core" Type="1" Column="SUQ=">SUQ=</PHRASE> <PHRASE Label="la_fld_Image" Module="Core" Type="1" Column="SW1hZ2U=">SW1hZ2U=</PHRASE> <PHRASE Label="la_fld_ImportCategory" Module="Core" Type="1">SW1wb3J0IFNlY3Rpb24=</PHRASE> <PHRASE Label="la_fld_ImportColumns" Module="Core" Type="1">SW1wb3J0IENvbHVtbnM=</PHRASE> <PHRASE Label="la_fld_ImportFile" Module="Core" Type="1">SW1wb3J0IEZpbGU=</PHRASE> <PHRASE Label="la_fld_ImportFilename" Module="Core" Type="1">SW1wb3J0IEZpbGVuYW1l</PHRASE> <PHRASE Label="la_fld_IncludeFieldTitles" Module="Core" Type="1">SW5jbHVkZSBmaWVsZCB0aXRsZXM=</PHRASE> <PHRASE Label="la_fld_InputDateFormat" Module="Core" Type="1">SW5wdXQgRGF0ZSBGb3JtYXQ=</PHRASE> <PHRASE Label="la_fld_InputTimeFormat" Module="Core" Type="1">SW5wdXQgVGltZSBGb3JtYXQ=</PHRASE> <PHRASE Label="la_fld_InstallModules" Module="Core" Type="1">SW5zdGFsbCBNb2R1bGVz</PHRASE> <PHRASE Label="la_fld_InstallPhraseTypes" Module="Core" Type="1">SW5zdGFsbCBQaHJhc2UgVHlwZXM=</PHRASE> <PHRASE Label="la_fld_IPAddress" Module="Core" Type="1" Column="SVAgQWRkcmVzcw==">SVAgQWRkcmVzcw==</PHRASE> <PHRASE Label="la_fld_IPRestrictions" Module="Core" Type="1">SVAgUmVzdHJpY3Rpb25z</PHRASE> <PHRASE Label="la_fld_IsBaseCategory" Module="Core" Type="1">VXNlIGN1cnJlbnQgc2VjdGlvbiBhcyByb290IGZvciB0aGUgZXhwb3J0</PHRASE> <PHRASE Label="la_fld_ISOCode" Module="Core" Type="1" Column="SVNPIENvZGU=">SVNPIENvZGU=</PHRASE> <PHRASE Label="la_fld_IsPrimary" Module="Core" Type="1" Column="UHJpbWFyeQ==">UHJpbWFyeQ==</PHRASE> <PHRASE Label="la_fld_IsRequired" Module="Core" Type="1">UmVxdWlyZWQ=</PHRASE> <PHRASE Label="la_fld_IsSystem" Module="Core" Type="1" Column="U3lzdGVt">SXMgU3lzdGVt</PHRASE> <PHRASE Label="la_fld_IsSystemTemplate" Module="Core" Type="1">U3lzdGVtIFRlbXBsYXRl</PHRASE> <PHRASE Label="la_fld_ItemField" Module="Core" Type="1" Column="VXNlciBGaWVsZA==">VXNlciBGaWVsZA==</PHRASE> <PHRASE Label="la_fld_ItemId" Module="Core" Type="1" Column="SXRlbSBJRA==">SXRlbSBJRA==</PHRASE> <PHRASE Label="la_fld_ItemName" Module="Core" Type="1" Column="SXRlbSBOYW1l">SXRlbSBOYW1l</PHRASE> <PHRASE Label="la_fld_ItemPrefix" Module="Core" Type="1" Hint="VW5pdCBjb25maWcgcHJlZml4LCB3aGVyZSBmaWx0ZXIgZmllbGQgYmVsb25ncw==" Column="SXRlbSBQcmVmaXg=">SXRlbSBQcmVmaXg=</PHRASE> <PHRASE Label="la_fld_ItemTemplate" Module="Core" Type="1">SXRlbSBUZW1wbGF0ZQ==</PHRASE> <PHRASE Label="la_fld_Language" Module="Core" Type="1" Column="TGFuZ3VhZ2U=">TGFuZ3VhZ2U=</PHRASE> <PHRASE Label="la_fld_LanguageFile" Module="Core" Type="1">TGFuZ3VhZ2UgRmlsZQ==</PHRASE> <PHRASE Label="la_fld_LanguageId" Module="Core" Type="1">TGFuZ3VhZ2UgSUQ=</PHRASE> <PHRASE Label="la_fld_Languages" Module="Core" Type="1">TGFuZ3VhZ2Vz</PHRASE> <PHRASE Label="la_fld_LastName" Module="Core" Type="1" Column="TGFzdCBOYW1l">TGFzdCBOYW1l</PHRASE> <PHRASE Label="la_fld_LastRunOn" Module="Core" Type="1" Column="TGFzdCBSdW4gT24=">TGFzdCBSdW4gT24=</PHRASE> <PHRASE Label="la_fld_LastRunStatus" Module="Core" Type="1" Column="TGFzdCBSdW4gU3RhdHVz">TGFzdCBSdW4gU3RhdHVz</PHRASE> <PHRASE Label="la_fld_LastTimeoutOn" Module="Core" Type="1" Hint="RGF0YS90aW1lIHdoZW4gdGhlIGV2ZW50IGhhcyB0aW1lZCBvdXQgbGFzdCB0aW1lLg==" Column="TGFzdCBUaW1lb3V0IE9u">TGFzdCBUaW1lb3V0IE9u</PHRASE> <PHRASE Label="la_fld_LastUpdatedOn" Module="Core" Type="1" Column="TGFzdCBVcGRhdGVkIE9u">TGFzdCBVcGRhdGVkIE9u</PHRASE> <PHRASE Label="la_fld_Left" Module="Core" Type="1">TGVmdA==</PHRASE> <PHRASE Label="la_fld_LineEndings" Module="Core" Type="1">TGluZSBlbmRpbmdz</PHRASE> <PHRASE Label="la_fld_LineEndingsInside" Module="Core" Type="1">TGluZSBFbmRpbmdzIEluc2lkZSBGaWVsZHM=</PHRASE> <PHRASE Label="la_fld_LinkType" Module="Core" Type="1" Column="TGluayBUeXBl">TGluayBUeXBl</PHRASE> <PHRASE Label="la_fld_ListingId" Module="Core" Type="1" Column="TGlzdGluZyBJZA==">SUQ=</PHRASE> <PHRASE Label="la_fld_ListingType" Module="Core" Type="1" Column="TGlzdGluZyBUeXBl">TGlzdGluZyBUeXBl</PHRASE> <PHRASE Label="la_fld_Locale" Module="Core" Type="1">TG9jYWxl</PHRASE> <PHRASE Label="la_fld_LocalName" Module="Core" Type="1" Column="TmFtZQ==">TG9jYWwgTmFtZQ==</PHRASE> <PHRASE Label="la_fld_Location" Module="Core" Type="1" Column="TG9jYXRpb24=">TG9jYXRpb24=</PHRASE> <PHRASE Label="la_fld_Login" Module="Core" Type="1" Column="TG9naW4=">TG9naW4=</PHRASE> <PHRASE Label="la_fld_Logo" Module="Core" Type="1">TG9nbyBpbWFnZQ==</PHRASE> <PHRASE Label="la_fld_LogoBottom" Module="Core" Type="1">Qm90dG9tIExvZ28gSW1hZ2U=</PHRASE> <PHRASE Label="la_fld_LogoLogin" Module="Core" Type="1">TG9nbyBMb2dpbg==</PHRASE> <PHRASE Label="la_fld_MarginBottom" Module="Core" Type="1">TWFyZ2luIEJvdHRvbQ==</PHRASE> <PHRASE Label="la_fld_MarginLeft" Module="Core" Type="1">TWFyZ2luIExlZnQ=</PHRASE> <PHRASE Label="la_fld_MarginRight" Module="Core" Type="1">TWFyZ2luIFJpZ2h0</PHRASE> <PHRASE Label="la_fld_Margins" Module="Core" Type="1">TWFyZ2lucw==</PHRASE> <PHRASE Label="la_fld_MarginTop" Module="Core" Type="1">TWFyZ2luIFRvcA==</PHRASE> <PHRASE Label="la_fld_MasterId" Module="Core" Type="1" Column="TWFzdGVyIElE">TWFzdGVyIElE</PHRASE> <PHRASE Label="la_fld_MasterPrefix" Module="Core" Type="1" Column="TWFzdGVyIFByZWZpeA==">TWFzdGVyIFByZWZpeA==</PHRASE> <PHRASE Label="la_fld_MaxCategories" Module="Core" Type="1">TWF4aW11bSBudW1iZXIgb2YgU2VjdGlvbnMgb24gSXRlbSBjYW4gYmUgYWRkZWQgdG8=</PHRASE> <PHRASE Label="la_fld_MenuIcon" Module="Core" Type="1">Q3VzdG9tIE1lbnUgSWNvbiAoaWUuIGltZy9tZW51X3Byb2R1Y3RzLmdpZik=</PHRASE> <PHRASE Label="la_fld_MenuStatus" Module="Core" Type="1">TWVudSBTdGF0dXM=</PHRASE> <PHRASE Label="la_fld_MergeToSubmission" Module="Core" Type="1">TWVyZ2UgdG8gU3VibWlzc2lvbg==</PHRASE> <PHRASE Label="la_fld_Message" Module="Core" Type="1" Column="TWVzc2FnZQ==">TWVzc2FnZQ==</PHRASE> <PHRASE Label="la_fld_MessageBody" Module="Core" Type="1">TWVzc2FnZSBCb2R5</PHRASE> <PHRASE Label="la_fld_MessageText" Module="Core" Type="1" Column="UGxhaW4gVGV4dA==">UGxhaW4gVGV4dCBWZXJzaW9u</PHRASE> <PHRASE Label="la_fld_MessageType" Module="Core" Type="1">TWVzc2FnZSBUeXBl</PHRASE> <PHRASE Label="la_fld_MetaDescription" Module="Core" Type="1">TWV0YSBEZXNjcmlwdGlvbg==</PHRASE> <PHRASE Label="la_fld_MetaKeywords" Module="Core" Type="1">TWV0YSBLZXl3b3Jkcw==</PHRASE> <PHRASE Label="la_fld_MisspelledWord" Module="Core" Type="1" Column="TWlzc3BlbGxlZCBXb3Jk">TWlzc3BlbGxlZCBXb3Jk</PHRASE> <PHRASE Label="la_fld_Modified" Module="Core" Type="1" Column="TW9kaWZpZWQgT24=">TW9kaWZpZWQ=</PHRASE> <PHRASE Label="la_fld_Module" Module="Core" Type="1" Column="TW9kdWxl">TW9kdWxl</PHRASE> <PHRASE Label="la_fld_ModuleName" Module="Core" Type="1">TW9kdWxl</PHRASE> <PHRASE Label="la_fld_MultiLingual" Module="Core" Type="1">TXVsdGlsaW5ndWFs</PHRASE> <PHRASE Label="la_fld_Name" Module="Core" Type="1" Column="TmFtZQ==">TmFtZQ==</PHRASE> <PHRASE Label="la_fld_New" Module="Core" Type="1">TmV3</PHRASE> <PHRASE Label="la_fld_NextRunOn" Module="Core" Type="1" Column="TmV4dCBSdW4gT24=">TmV4dCBSdW4gT24=</PHRASE> <PHRASE Label="la_fld_Notes" Module="Core" Type="1">Tm90ZXM=</PHRASE> <PHRASE Label="la_fld_NotHelpfulCount" Module="Core" Type="1">UmV2aWV3IFdhc24ndCBIZWxwZnVs</PHRASE> <PHRASE Label="la_fld_NumberOfClicks" Module="Core" Type="1" Column="TnVtYmVyIE9mIENsaWNrcw==">TnVtYmVyIE9mIENsaWNrcw==</PHRASE> <PHRASE Label="la_fld_NumberOfViews" Module="Core" Type="1" Column="TnVtYmVyIE9mIFZpZXdz">TnVtYmVyIE9mIFZpZXdz</PHRASE> <PHRASE Label="la_fld_OccuredOn" Module="Core" Type="1" Column="T2NjdXJlZCBPbg==">T2NjdXJlZCBPbg==</PHRASE> <PHRASE Label="la_fld_OpenInNewWindow" Module="Core" Type="1">T3BlbiBJbiBOZXcgV2luZG93</PHRASE> <PHRASE Label="la_fld_Options" Module="Core" Type="1">T3B0aW9ucw==</PHRASE> <PHRASE Label="la_fld_OptionTitle" Module="Core" Type="1">T3B0aW9uIFRpdGxl</PHRASE> <PHRASE Label="la_fld_Order" Module="Core" Type="1" Column="T3JkZXI=">T3JkZXI=</PHRASE> <PHRASE Label="la_fld_OverridePageCacheKey" Module="Core" Type="1">T3ZlcndyaXRlIERlZmF1bHQgQ2FjaGluZyBLZXk=</PHRASE> <PHRASE Label="la_fld_PackName" Module="Core" Type="1" Column="UGFjayBOYW1l">UGFjayBOYW1l</PHRASE> <PHRASE Label="la_fld_PaddingBottom" Module="Core" Type="1">UGFkZGluZyBCb3R0b20=</PHRASE> <PHRASE Label="la_fld_PaddingLeft" Module="Core" Type="1">UGFkZGluZyBMZWZ0</PHRASE> <PHRASE Label="la_fld_PaddingRight" Module="Core" Type="1">UGFkZGluZyBSaWdodA==</PHRASE> <PHRASE Label="la_fld_Paddings" Module="Core" Type="1">UGFkZGluZ3M=</PHRASE> <PHRASE Label="la_fld_PaddingTop" Module="Core" Type="1">UGFkZGluZyBUb3A=</PHRASE> <PHRASE Label="la_fld_PageCacheKey" Module="Core" Type="1">Q3VzdG9tIENhY2hpbmcgS2V5</PHRASE> <PHRASE Label="la_fld_PageContentTitle" Module="Core" Type="1">VGl0bGUgKE9uIFBhZ2Up</PHRASE> <PHRASE Label="la_fld_PageExpiration" Module="Core" Type="1" Hint="SG93IHNvb24gKGluIHNlY29uZHMpIHRoZSBzZWN0aW9uIGNhY2hlIHNob3VsZCBhdXRvLWV4cGlyZSBhZnRlciBpdCdzIGNyZWF0aW9uLiBCeSBkZWZhdWx0IHN5c3RlbSB0ZW5kcyB0byByZWJ1aWxkIHRoZSBjYWNoZSBvbmx5IHdoZW4gaXQncyBwcm9wZXJ0aWVzIG9yIGVsZW1lbnRzIGhhdmUgY2hhbmdlZC4=">Q2FjaGUgRXhwaXJhdGlvbiBpbiBzZWNvbmRz</PHRASE> <PHRASE Label="la_fld_PageMentTitle" Module="Core" Type="1">VGl0bGUgKE1lbnUgSXRlbSk=</PHRASE> <PHRASE Label="la_fld_PageTitle" Module="Core" Type="1" Column="U2VjdGlvbiBUaXRsZQ==">U2VjdGlvbiBUaXRsZQ==</PHRASE> <PHRASE Label="la_fld_ParentSection" Module="Core" Type="1">UGFyZW50IFNlY3Rpb24=</PHRASE> <PHRASE Label="la_fld_Password" Module="Core" Type="1">UGFzc3dvcmQ=</PHRASE> <PHRASE Label="la_fld_PercentsCompleted" Module="Core" Type="1">UGVyY2VudHMgQ29tcGxldGVk</PHRASE> <PHRASE Label="la_fld_Phone" Module="Core" Type="1" Column="UGhvbmU=">UGhvbmU=</PHRASE> <PHRASE Label="la_fld_Phrase" Module="Core" Type="1" Column="UGhyYXNl">TGFiZWw=</PHRASE> <PHRASE Label="la_fld_PhraseType" Module="Core" Type="1" Column="VHlwZQ==">UGhyYXNlIFR5cGU=</PHRASE> <PHRASE Label="la_fld_Pop" Module="Core" Type="1">UG9w</PHRASE> <PHRASE Label="la_fld_Popular" Module="Core" Type="1">UG9wdWxhcg==</PHRASE> <PHRASE Label="la_fld_Port" Module="Core" Type="1">UG9ydA==</PHRASE> <PHRASE Label="la_fld_Position" Module="Core" Type="1">UG9zaXRpb24=</PHRASE> <PHRASE Label="la_fld_Prefix" Module="Core" Type="1" Column="UHJlZml4">UHJlZml4</PHRASE> <PHRASE Label="la_fld_Primary" Module="Core" Type="1" Column="UHJpbWFyeQ==">UHJpbWFyeQ==</PHRASE> <PHRASE Label="la_fld_PrimaryCategory" Module="Core" Type="1">UHJpbWFyeSBTZWN0aW9u</PHRASE> <PHRASE Label="la_fld_PrimaryLang" Module="Core" Type="1">UHJpbWFyeQ==</PHRASE> <PHRASE Label="la_fld_PrimaryTranslation" Module="Core" Type="1">UHJpbWFyeSBMYW5ndWFnZSBQaHJhc2U=</PHRASE> <PHRASE Label="la_fld_Priority" Module="Core" Type="1" Column="T3JkZXI=">T3JkZXI=</PHRASE> <PHRASE Label="la_fld_ProcessUnmatchedEmails" Module="Core" Type="1">Q29udmVydCB1bm1hdGNoZWQgZS1tYWlscyBpbnRvIG5ldyBzdWJtaXNzaW9ucw==</PHRASE> <PHRASE Label="la_fld_PromoBlockGroup" Module="Core" Type="1">UHJvbW8gQmxvY2sgR3JvdXA=</PHRASE> <PHRASE Label="la_fld_Protected" Module="Core" Type="1" Column="UHJvdGVjdGVk">UHJvdGVjdGVk</PHRASE> <PHRASE Label="la_fld_Qty" Module="Core" Type="1" Column="UXR5">UXVhbnRpdHk=</PHRASE> <PHRASE Label="la_fld_Rating" Module="Core" Type="1" Column="UmF0aW5n">UmF0aW5n</PHRASE> <PHRASE Label="la_fld_RecipientAddress" Module="Core" Type="1">UmVjaXBpZW50J3MgQWRkcmVzcw==</PHRASE> <PHRASE Label="la_fld_RecipientAddressType" Module="Core" Type="1">UmVjaXBpZW50J3MgQWRkcmVzcyBUeXBl</PHRASE> <PHRASE Label="la_fld_RecipientName" Module="Core" Type="1">UmVjaXBpZW50J3MgTmFtZQ==</PHRASE> <PHRASE Label="la_fld_Recipients" Module="Core" Type="1">UmVjaXBpZW50cw==</PHRASE> <PHRASE Label="la_fld_RecipientType" Module="Core" Type="1" Column="UmVjaXBpZW50IFR5cGU=">UmVjaXBpZW50IFR5cGU=</PHRASE> <PHRASE Label="la_fld_RedirectOnIPMatch" Module="Core" Type="1">Rm9yY2UgUmVkaXJlY3QgKHdoZW4gdXNlcidzIElQIG1hdGNoZXMp</PHRASE> <PHRASE Label="la_fld_ReferrerURL" Module="Core" Type="1" Column="UmVmZXJyZXIgVVJM">UmVmZXJyZXIgVVJM</PHRASE> <PHRASE Label="la_fld_RelatedSearchKeyword" Module="Core" Type="1">S2V5d29yZA==</PHRASE> <PHRASE Label="la_fld_RelationshipType" Module="Core" Type="1" Column="UmVsYXRpb24gVHlwZQ==">VHlwZQ==</PHRASE> <PHRASE Label="la_fld_RemoteUrl" Module="Core" Type="1">UmVtb3RlIFVSTA==</PHRASE> <PHRASE Label="la_fld_ReplaceDuplicates" Module="Core" Type="1">UmVwbGFjZSBEdXBsaWNhdGVz</PHRASE> <PHRASE Label="la_fld_Replacement" Module="Core" Type="1" Column="UmVwbGFjZW1lbnQ=">UmVwbGFjZW1lbnQ=</PHRASE> <PHRASE Label="la_fld_ReplacementTags" Module="Core" Type="1">UmVwbGFjZW1lbnQgVGFncw==</PHRASE> <PHRASE Label="la_fld_RepliedOn" Module="Core" Type="1" Column="UmVwbGllZCBPbg==">UmVwbGllZCBPbg==</PHRASE> <PHRASE Label="la_fld_ReplyBcc" Module="Core" Type="1">UmVwbHkgQmNj</PHRASE> <PHRASE Label="la_fld_ReplyCc" Module="Core" Type="1">UmVwbHkgQ2M=</PHRASE> <PHRASE Label="la_fld_ReplyFromEmail" Module="Core" Type="1">UmVwbHkgRnJvbSBFLW1haWw=</PHRASE> <PHRASE Label="la_fld_ReplyFromName" Module="Core" Type="1">UmVwbHkgRnJvbSBOYW1l</PHRASE> <PHRASE Label="la_fld_ReplyMessageSignature" Module="Core" Type="1">UmVwbHkgTWVzc2FnZSBTaWduYXR1cmU=</PHRASE> <PHRASE Label="la_fld_ReplyStatus" Module="Core" Type="1" Column="UmVwbGllZA==">UmVwbGllZA==</PHRASE> <PHRASE Label="la_fld_ReportedBy" Module="Core" Type="1" Column="UmVwb3J0ZWQgQnk=">UmVwb3J0ZWQgQnk=</PHRASE> <PHRASE Label="la_fld_ReportedOn" Module="Core" Type="1" Column="UmVwb3J0ZWQgT24=">UmVwb3J0ZWQgT24=</PHRASE> <PHRASE Label="la_fld_Required" Module="Core" Type="1" Column="UmVxdWlyZWQ=">UmVxdWlyZWQ=</PHRASE> <PHRASE Label="la_fld_RequireLogin" Module="Core" Type="1" Column="UmVxdWlyZSBMb2dpbg==">UmVxdWlyZSBMb2dpbg==</PHRASE> <PHRASE Label="la_fld_RequireSSL" Module="Core" Type="1" Column="UmVxdWlyZSBTU0w=">UmVxdWlyZSBTU0w=</PHRASE> <PHRASE Label="la_fld_ReviewText" Module="Core" Type="1" Column="Q29tbWVudA==">Q29tbWVudA==</PHRASE> <PHRASE Label="la_fld_RotationDelay" Module="Core" Type="1" Column="UHJvbW8gUm90YXRpb24gRGVsYXkgKHNlY29uZHMp">UHJvbW8gUm90YXRpb24gRGVsYXkgKHNlY29uZHMp</PHRASE> <PHRASE Label="la_fld_RuleType" Module="Core" Type="1" Column="UnVsZSBUeXBl">UnVsZSBUeXBl</PHRASE> <PHRASE Label="la_fld_RunInterval" Module="Core" Type="1" Column="UnVuIEludGVydmFs">UnVuIEludGVydmFs</PHRASE> <PHRASE Label="la_fld_RunTime" Module="Core" Type="1" Column="UnVuIFRpbWU=">UnVuIFRpbWU=</PHRASE> <PHRASE Label="la_fld_SameAsThumb" Module="Core" Type="1">U2FtZSBBcyBUaHVtYg==</PHRASE> <PHRASE Label="la_fld_ScheduleDate" Module="Core" Type="1">U2NoZWR1bGUgRGF0ZQ==</PHRASE> <PHRASE Label="la_fld_SearchTerm" Module="Core" Type="1" Column="U2VhcmNoIFRlcm0=">U2VhcmNoIFRlcm0=</PHRASE> <PHRASE Label="la_fld_SenderAddress" Module="Core" Type="1">U2VuZGVyJ3MgQWRkcmVzcw==</PHRASE> <PHRASE Label="la_fld_SenderName" Module="Core" Type="1">U2VuZGVyJ3MgTmFtZQ==</PHRASE> <PHRASE Label="la_fld_SentOn" Module="Core" Type="1" Column="U2VudCBPbg==">U2VudCBPbg==</PHRASE> <PHRASE Label="la_fld_SentStatus" Module="Core" Type="1" Column="U2VudA==">U2VudA==</PHRASE> <PHRASE Label="la_fld_Server" Module="Core" Type="1">U2VydmVy</PHRASE> <PHRASE Label="la_fld_SessionLogId" Module="Core" Type="1" Column="U2Vzc2lvbiBMb2cgSUQ=">U2Vzc2lvbiBMb2cgSUQ=</PHRASE> <PHRASE Label="la_fld_ShortIsoCode" Module="Core" Type="1" Column="U2hvcnQgSVNPIENvZGU=">U2hvcnQgSVNPIENvZGU=</PHRASE> <PHRASE Label="la_fld_SimpleSearch" Module="Core" Type="1">U2ltcGxlIFNlYXJjaA==</PHRASE> <PHRASE Label="la_fld_SiteDomainLimitation" Module="Core" Type="1" Column="U2l0ZSBEb21haW4gTGltaXRhdGlvbg==">U2l0ZSBEb21haW4gTGltaXRhdGlvbg==</PHRASE> <PHRASE Label="la_fld_SkinName" Module="Core" Type="1" Column="TmFtZQ==">TmFtZQ==</PHRASE> <PHRASE Label="la_fld_SkipFirstRow" Module="Core" Type="1">U2tpcCBGaXJzdCBSb3c=</PHRASE> <PHRASE Label="la_fld_SortValues" Module="Core" Type="1">U29ydCBWYWx1ZXM=</PHRASE> <PHRASE Label="la_fld_SSLUrl" Module="Core" Type="1" Hint="aHR0cHM6Ly93d3cuZG9tYWluLmNvbS9wYXRo" Column="U1NMIFVybA==">U1NMIEZ1bGwgVVJM</PHRASE> <PHRASE Label="la_fld_StartDate" Module="Core" Type="1" Column="U3RhcnQgRGF0ZQ==">U3RhcnQgRGF0ZQ==</PHRASE> <PHRASE Label="la_fld_State" Module="Core" Type="1" Column="U3RhdGU=">U3RhdGU=</PHRASE> <PHRASE Label="la_fld_StateCountry" Module="Core" Type="1" Column="U3RhdGUgQ291bnRyeQ==">U3RhdGUgQ291bnRyeQ==</PHRASE> <PHRASE Label="la_fld_Status" Module="Core" Type="1" Column="U3RhdHVz">U3RhdHVz</PHRASE> <PHRASE Label="la_fld_Sticky" Module="Core" Type="1" Column="U3RpY2t5">U3RpY2t5</PHRASE> <PHRASE Label="la_fld_StopWord" Module="Core" Type="1" Column="U3RvcCBXb3Jk">U3RvcCBXb3Jk</PHRASE> <PHRASE Label="la_fld_Subject" Module="Core" Type="1" Column="U3ViamVjdA==">U3ViamVjdA==</PHRASE> <PHRASE Label="la_fld_SubmissionTime" Module="Core" Type="1">U3VibWl0dGVkIE9u</PHRASE> <PHRASE Label="la_fld_SubmitNotifyEmail" Module="Core" Type="1" Hint="RW1haWwgYWRkcmVzcyB3aGVyZSBub3RpZmljYXRpb24gYWJvdXQgbmV3IHN1Ym1pc3Npb25zIHdpbGwgYmUgc2VuZCB0by4gRGVmYXVsdCBlbWFpbCBhZGRyZXNzIHdpbGwgYmUgdXNlZCBpZiB0aGlzIGZpZWxkIGlzIGxlZnQgYmxhbmsu" Column="U3VibWlzc2lvbiBOb3RpZmljYXRpb24gRW1haWw=">U3VibWlzc2lvbiBOb3RpZmljYXRpb24gRW1haWw=</PHRASE> <PHRASE Label="la_fld_SuggestedCorrection" Module="Core" Type="1" Column="U3VnZ2VzdGVkIENvcnJlY3Rpb24=">U3VnZ2VzdGVkIENvcnJlY3Rpb24=</PHRASE> <PHRASE Label="la_fld_SymLinkCategoryId" Module="Core" Type="1">UG9pbnRzIHRvIFNlY3Rpb24=</PHRASE> <PHRASE Label="la_fld_SynchronizationModes" Module="Core" Type="1" Hint="IlRvIG90aGVycyIgLSBhbGxvdyB0cmFuc2xhdGVkIHBocmFzZXMgZnJvbSB0aGlzIGxhbmd1YWdlIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiBtaXNzaW5nIHBocmFzZXMgb24gb3RoZXIgbGFuZ3VhZ2VzLiAiRnJvbSBvdGhlcnMiIC0gdXNlIHRyYW5zbGF0ZWQgcGhyYXNlcyBmcm9tIG90aGVyIGxhbmd1YWdlcyBpbnN0ZWFkIG9mIG1pc3NpbmcgcGhyYXNlcyBvbiB0aGlzIGxhbmd1YWdlLg==" Column="U3luY2hyb25pemUgTGFuZ3VhZ2U=">U3luY2hyb25pemUgTGFuZ3VhZ2U=</PHRASE> <PHRASE Label="la_fld_TableName" Module="Core" Type="1">VGFibGUgTmFtZSBpbiBEYXRhYmFzZSA=</PHRASE> <PHRASE Label="la_fld_Tag" Module="Core" Type="1">VGFn</PHRASE> <PHRASE Label="la_fld_TargetId" Module="Core" Type="1" Column="SXRlbQ==">SXRlbQ==</PHRASE> <PHRASE Label="la_fld_TemplateFile" Module="Core" Type="1">VGVtcGxhdGUgRmlsZQ==</PHRASE> <PHRASE Label="la_fld_TemplateType" Module="Core" Type="1" Column="VGVtcGxhdGU=">VGVtcGxhdGU=</PHRASE> <PHRASE Label="la_fld_Text" Module="Core" Type="1">VGV4dA==</PHRASE> <PHRASE Label="la_fld_TextAlign" Module="Core" Type="1">VGV4dCBBbGlnbg==</PHRASE> <PHRASE Label="la_fld_TextDecoration" Module="Core" Type="1">VGV4dCBEZWNvcmF0aW9u</PHRASE> <PHRASE Label="LA_FLD_TEXTVERSION" Module="Core" Type="1">VGV4dCBWZXJzaW9u</PHRASE> <PHRASE Label="la_fld_Theme" Module="Core" Type="1" Column="VGhlbWU=">VGhlbWU=</PHRASE> <PHRASE Label="la_fld_Themes" Module="Core" Type="1">VGhlbWVz</PHRASE> <PHRASE Label="la_fld_ThesaurusTerm" Module="Core" Type="1" Column="VGhlc2F1cnVzIFRlcm0=">VGhlc2F1cnVzIFRlcm0=</PHRASE> <PHRASE Label="la_fld_ThesaurusType" Module="Core" Type="1" Column="VGhlc2F1cnVzIFR5cGU=">VGhlc2F1cnVzIFR5cGU=</PHRASE> <PHRASE Label="la_fld_ThousandSep" Module="Core" Type="1">VGhvdXNhbmRzIFNlcGFyYXRvcg==</PHRASE> <PHRASE Label="la_fld_TimeFormat" Module="Core" Type="1">VGltZSBGb3JtYXQ=</PHRASE> <PHRASE Label="la_fld_Timeout" Module="Core" Type="1" Hint="VGltZW91dCBvZiBldmVudCBzY2hlZHVsZSAoaW4gc2Vjb25kcykuIFNwZWNpZmllZCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGluIG9yZGVyIGZvciBzeXN0ZW0gdG8gdGltZW91dCBhbHJlYWR5IHJ1bm5pbmcgZXZlbnQgaWYgaXQncyBydW5uaW5nIHRpbWUgZXhjZWVkcyB0aGUgc3BlY2lmaWVkIGhlcmUgdGltZW91dCB2YWx1ZS4=" Column="VGltZW91dA==">VGltZW91dA==</PHRASE> <PHRASE Label="la_fld_TimeZone" Module="Core" Type="1" Hint="TmV3IFRpbWUgWm9uZSB3aWxsIGJlIGluIGVmZmVjdCBuZXh0IHRpbWUgdXNlciBsb2dpbnM=">VGltZSBab25l</PHRASE> <PHRASE Label="la_fld_Title" Module="Core" Type="1" Column="VGl0bGU=">VGl0bGU=</PHRASE> <PHRASE Label="la_fld_To" Module="Core" Type="1">VG8=</PHRASE> <PHRASE Label="la_fld_ToEmail" Module="Core" Type="1" Column="VG8gRS1tYWls">VG8gRS1tYWls</PHRASE> <PHRASE Label="la_fld_Top" Module="Core" Type="1">VG9w</PHRASE> <PHRASE Label="la_fld_TrackingCode" Module="Core" Type="1">QW5hbHl0aWNzIFRyYWNraW5nIENvZGU=</PHRASE> <PHRASE Label="la_fld_TransitionControls" Module="Core" Type="1" Column="UHJvbW8gVHJhbnNpdGlvbiBDb250cm9scw==">UHJvbW8gVHJhbnNpdGlvbiBDb250cm9scw==</PHRASE> <PHRASE Label="la_fld_TransitionEffect" Module="Core" Type="1" Column="UHJvbW8gVHJhbnNpdGlvbiBFZmZlY3Q=">UHJvbW8gVHJhbnNpdGlvbiBFZmZlY3Q=</PHRASE> <PHRASE Label="la_fld_TransitionEffectCustom" Module="Core" Type="1" Column="UHJvbW8gVHJhbnNpdGlvbiBFZmZlY3QgKGN1c3RvbSk=">UHJvbW8gVHJhbnNpdGlvbiBFZmZlY3QgKGN1c3RvbSk=</PHRASE> <PHRASE Label="la_fld_TransitionTime" Module="Core" Type="1" Column="VHJhbnNpdGlvbiBEZWxheSAoc2Vjb25kcyk=">VHJhbnNpdGlvbiBEZWxheSAoc2Vjb25kcyk=</PHRASE> <PHRASE Label="la_fld_Translation" Module="Core" Type="1" Column="VmFsdWU=">UGhyYXNl</PHRASE> <PHRASE Label="la_fld_Type" Module="Core" Type="1" Column="VHlwZQ==">VHlwZQ==</PHRASE> <PHRASE Label="la_fld_UnitSystem" Module="Core" Type="1">TWVhc3VyZXMgU3lzdGVt</PHRASE> <PHRASE Label="la_fld_Upload" Module="Core" Type="1">VXBsb2FkIEZpbGUgRnJvbSBMb2NhbCBQQw==</PHRASE> <PHRASE Label="la_fld_UploadExtensions" Module="Core" Type="1" Hint="TGlzdCBvZiBGaWxlIEV4dGVuc2lvbnMgYWxsb3dlZCBmb3IgdXBsb2FkIHNlcGFyYXRlZCBieSBjb21tYS4gRXhhbXBsZToganBnLHBuZyxnaWcscGRm">QWxsb3dlZCBGaWxlIEV4dGVuc2lvbnM=</PHRASE> <PHRASE Label="la_fld_UploadMaxSize" Module="Core" Type="1" Hint="TWF4aW11bSBmaWxlIHNpemUgKGluIEtieXRlcykgYWxsb3dlZCBmb3IgdGhlIHVwbG9hZC4gRXhhbXBsZTogMSBNQnl0ZSA9IDEwMjQgS0J5dGVzLCAxMCBNQnl0ZXMgPSAxMDI0MCBLQnl0ZXMu">TWF4aW11bSBGaWxlIFNpemU=</PHRASE> <PHRASE Label="la_fld_URL" Module="Core" Type="1" Column="VVJM">VVJM</PHRASE> <PHRASE Label="la_fld_UseExternalUrl" Module="Core" Type="1">TGluayB0byBFeHRlcm5hbCBVUkw=</PHRASE> <PHRASE Label="la_fld_UseMenuIcon" Module="Core" Type="1">VXNlIEN1c3RvbSBNZW51IEljb24=</PHRASE> <PHRASE Label="la_fld_UserDocsUrl" Module="Core" Type="1">VXNlciBEb2N1bWVudGF0aW9uIFVSTA==</PHRASE> <PHRASE Label="la_fld_UserGroups" Module="Core" Type="1">VXNlciBHcm91cHM=</PHRASE> <PHRASE Label="la_fld_Username" Module="Core" Type="1" Column="VXNlcm5hbWU=">VXNlcm5hbWU=</PHRASE> <PHRASE Label="la_fld_UseSecurityImage" Module="Core" Type="1" Column="VXNlIFNlY3VyaXR5IEltYWdl">VXNlIFNlY3VyaXR5IEltYWdl</PHRASE> <PHRASE Label="la_fld_VerifyPassword" Module="Core" Type="1">UmUtZW50ZXIgUGFzc3dvcmQ=</PHRASE> <PHRASE Label="la_fld_Version" Module="Core" Type="1" Column="VmVyc2lvbg==">VmVyc2lvbg==</PHRASE> <PHRASE Label="la_fld_Visibility" Module="Core" Type="1" Column="VmlzaWJpbGl0eQ==">VmlzaWJpbGl0eQ==</PHRASE> <PHRASE Label="la_fld_Votes" Module="Core" Type="1">Vm90ZXM=</PHRASE> <PHRASE Label="la_fld_Width" Module="Core" Type="1">V2lkdGg=</PHRASE> <PHRASE Label="la_fld_Z-Index" Module="Core" Type="1">Wi1JbmRleA==</PHRASE> <PHRASE Label="la_fld_ZIP" Module="Core" Type="1" Column="WklQ">WklQ</PHRASE> <PHRASE Label="la_Font" Module="Core" Type="1">Rm9udCBQcm9wZXJ0aWVz</PHRASE> <PHRASE Label="la_FormCancelConfirmation" Module="Core" Type="1">RG8geW91IHdhbnQgdG8gc2F2ZSB0aGUgY2hhbmdlcz8=</PHRASE> <PHRASE Label="la_FormResetConfirmation" Module="Core" Type="1">QXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIGRpc2NhcmQgdGhlIGNoYW5nZXM/</PHRASE> <PHRASE Label="la_From" Module="Core" Type="1">RnJvbQ==</PHRASE> <PHRASE Label="la_from_date" Module="Core" Type="1">RnJvbSBEYXRl</PHRASE> <PHRASE Label="la_GeneralSections" Module="Core" Type="1">R2VuZXJhbCBTZWN0aW9ucw==</PHRASE> <PHRASE Label="la_HeadFrame" Module="Core" Type="1">SGVhZCBGcmFtZQ==</PHRASE> <PHRASE Label="la_Hide" Module="Core" Type="1">SGlkZQ==</PHRASE> <PHRASE Label="la_hint_AllFiles" Module="Core" Type="1">QWxsIEZpbGVz</PHRASE> <PHRASE Label="la_hint_CSVFiles" Module="Core" Type="1">Q1NWIEZpbGVz</PHRASE> <PHRASE Label="la_hint_ImageFiles" Module="Core" Type="1">SW1hZ2UgRmlsZXM=</PHRASE> <PHRASE Label="la_hint_PopPort" Module="Core" Type="1">UE9QMyBTZXJ2ZXIgUG9ydC4gRm9yIGV4LiAiMTEwIiBmb3IgcmVndWxhciBjb25uZWN0aW9uLCAiOTk1IiBmb3Igc2VjdXJlIGNvbm5lY3Rpb24u</PHRASE> <PHRASE Label="la_hint_PopServer" Module="Core" Type="1">UE9QMyBTZXJ2ZXIgQWRkcmVzcy4gRm9yIGV4LiB1c2UgInNzbDovL3BvcC5nbWFpbC5jb20iIGZvciBHbWFpbCwgInBvcC5tYWlsLnlhaG9vLmNvbSIgZm9yIFlhaG9vLg==</PHRASE> <PHRASE Label="la_hint_SystemToolsCacheKeys" Module="Core" Type="1">Q2FjaGUgS2V5KHMp</PHRASE> <PHRASE Label="la_hint_SystemToolsDatabaseCache" Module="Core" Type="1">ZGF0YWJhc2UgY2FjaGU=</PHRASE> <PHRASE Label="la_hint_SystemToolsMemoryCache" Module="Core" Type="1">bWVtb3J5IGNhY2hl</PHRASE> <PHRASE Label="la_hint_UsingRegularExpression" Module="Core" Type="1">VXNpbmcgUmVndWxhciBFeHByZXNzaW9u</PHRASE> <PHRASE Label="la_Hot" Module="Core" Type="1">SG90</PHRASE> <PHRASE Label="la_Html" Module="Core" Type="1">SFRNTA==</PHRASE> <PHRASE Label="la_IDField" Module="Core" Type="1">SUQgRmllbGQ=</PHRASE> <PHRASE Label="la_invalid_email" Module="Core" Type="1">SW52YWxpZCBFLU1haWw=</PHRASE> <PHRASE Label="la_invalid_integer" Module="Core" Type="1">SW5jb3JyZWN0IGRhdGEgZm9ybWF0LCBwbGVhc2UgdXNlIGludGVnZXI=</PHRASE> <PHRASE Label="la_invalid_license" Module="Core" Type="1">TWlzc2luZyBvciBpbnZhbGlkIEluLVBvcnRhbCBMaWNlbnNl</PHRASE> <PHRASE Label="la_Invalid_Password" Module="Core" Type="1">SW5jb3JyZWN0IFVzZXJuYW1lIG9yIFBhc3N3b3Jk</PHRASE> <PHRASE Label="la_invalid_state" Module="Core" Type="1">SW52YWxpZCBzdGF0ZQ==</PHRASE> <PHRASE Label="la_ItemTab_Categories" Module="Core" Type="1">U2VjdGlvbnM=</PHRASE> <PHRASE Label="la_link_editorspick_prompt" Module="Core" Type="1">RGlzcGxheSBlZGl0b3IgUElDS3MgYWJvdmUgcmVndWxhciBsaW5rcw==</PHRASE> <PHRASE Label="la_link_newdays_prompt" Module="Core" Type="1">TnVtYmVyIG9mIGRheXMgZm9yIGEgbGluayB0byBiZSBORVc=</PHRASE> <PHRASE Label="la_link_perpage_prompt" Module="Core" Type="1">TnVtYmVyIG9mIGxpbmtzIHBlciBwYWdl</PHRASE> <PHRASE Label="la_link_perpage_short_prompt" Module="Core" Type="1">TnVtYmVyIG9mIGxpbmtzIHBlciBwYWdlIG9uIGEgc2hvcnQgbGlzdGluZw==</PHRASE> <PHRASE Label="la_link_sortfield2_prompt" Module="Core" Type="1">QW5kIHRoZW4gYnk=</PHRASE> <PHRASE Label="la_link_sortfield_prompt" Module="Core" Type="1">T3JkZXIgbGlua3MgYnk=</PHRASE> <PHRASE Label="la_Linux" Module="Core" Type="1">TGludXg=</PHRASE> <PHRASE Label="la_Local" Module="Core" Type="1">TG9jYWw=</PHRASE> <PHRASE Label="la_LocalImage" Module="Core" Type="1">TG9jYWwgSW1hZ2U=</PHRASE> <PHRASE Label="la_Logged_in_as" Module="Core" Type="1">TG9nZ2VkIGluIGFz</PHRASE> <PHRASE Label="la_login" Module="Core" Type="1">TG9naW4=</PHRASE> <PHRASE Label="la_Logout" Module="Core" Type="1">TG9nb3V0</PHRASE> <PHRASE Label="la_m0" Module="Core" Type="1">KEdNVCk=</PHRASE> <PHRASE Label="la_m1" Module="Core" Type="1">KEdNVCAtMDE6MDAp</PHRASE> <PHRASE Label="la_m10" Module="Core" Type="1">KEdNVCAtMTA6MDAp</PHRASE> <PHRASE Label="la_m11" Module="Core" Type="1">KEdNVCAtMTE6MDAp</PHRASE> <PHRASE Label="la_m12" Module="Core" Type="1">KEdNVCAtMTI6MDAp</PHRASE> <PHRASE Label="la_m2" Module="Core" Type="1">KEdNVCAtMDI6MDAp</PHRASE> <PHRASE Label="la_m3" Module="Core" Type="1">KEdNVCAtMDM6MDAp</PHRASE> <PHRASE Label="la_m4" Module="Core" Type="1">KEdNVCAtMDQ6MDAp</PHRASE> <PHRASE Label="la_m5" Module="Core" Type="1">KEdNVCAtMDU6MDAp</PHRASE> <PHRASE Label="la_m6" Module="Core" Type="1">KEdNVCAtMDY6MDAp</PHRASE> <PHRASE Label="la_m7" Module="Core" Type="1">KEdNVCAtMDc6MDAp</PHRASE> <PHRASE Label="la_m8" Module="Core" Type="1">KEdNVCAtMDg6MDAp</PHRASE> <PHRASE Label="la_m9" Module="Core" Type="1">KEdNVCAtMDk6MDAp</PHRASE> <PHRASE Label="la_Margins" Module="Core" Type="1">TWFyZ2lucw==</PHRASE> <PHRASE Label="la_MembershipExpirationReminder" Module="Core" Type="1">R3JvdXAgTWVtYmVyc2hpcCBFeHBpcmF0aW9uIFJlbWluZGVyIChkYXlzKQ==</PHRASE> <PHRASE Label="la_Metric" Module="Core" Type="1">TWV0cmlj</PHRASE> <PHRASE Label="la_MixedCategoryPath" Module="Core" Type="1">U2VjdGlvbiBwYXRoIGluIG9uZSBmaWVsZA==</PHRASE> <PHRASE Label="la_module_not_licensed" Module="Core" Type="1">TW9kdWxlIG5vdCBsaWNlbnNlZA==</PHRASE> <PHRASE Label="la_monday" Module="Core" Type="1">TW9uZGF5</PHRASE> <PHRASE Label="la_msg_ChangeLogIsCurrentlyDisabledTurnOnSettingToEnableIt" Module="Core" Type="1">Q2hhbmdlIGxvZyBpcyBjdXJyZW50bHkgZGlzYWJsZWQuIFR1cm4gb24gIiVzIiBzZXR0aW5nIHRvIGVuYWJsZSBpdC4=</PHRASE> <PHRASE Label="la_msg_EnableTrackingDatabaseChangesToChangeLog" Module="Core" Type="1">RW5hYmxlIHRyYWNraW5nIGRhdGFiYXNlIGNoYW5nZXMgdG8gY2hhbmdlIGxvZz8=</PHRASE> <PHRASE Label="la_msg_LastOperationHasBeenSuccessfullyCompleted" Module="Core" Type="1">TGFzdCBvcGVyYXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCE=</PHRASE> <PHRASE Label="la_Msg_PropagateCategoryStatus" Module="Core" Type="1">QXBwbHkgdG8gYWxsIFN1Yi1zZWN0aW9ucz8=</PHRASE> <PHRASE Label="la_msg_RootPasswordWasReset" Module="Core" Type="1">WW91ciAicm9vdCIgcGFzc3dvcmQgaGFzIGJlZW4gcmVzZXQuIFBsZWFzZSByZW1vdmUgREJHX1JFU0VUX1JPT1QgY29uc3RhbnQgYW5kIGNoZWNrIHlvdXIgZS1tYWlsIGFkZHJlc3Mu</PHRASE> <PHRASE Label="la_msg_YourChangesWereSuccessfullySaved" Module="Core" Type="1">WW91ciBjaGFuZ2VzIHdlcmUgc3VjY2Vzc2Z1bGx5IHNhdmVkIQ==</PHRASE> <PHRASE Label="la_Never" Module="Core" Type="1">TmV2ZXI=</PHRASE> <PHRASE Label="la_NeverExpires" Module="Core" Type="1">TmV2ZXIgRXhwaXJlcw==</PHRASE> <PHRASE Label="la_New" Module="Core" Type="1">TmV3</PHRASE> <PHRASE Label="la_nextcategory" Module="Core" Type="1">TmV4dCBzZWN0aW9u</PHRASE> <PHRASE Label="la_No" Module="Core" Type="1">Tm8=</PHRASE> <PHRASE Label="la_none" Module="Core" Type="1">Tm9uZQ==</PHRASE> <PHRASE Label="la_no_permissions" Module="Core" Type="1">Tm8gUGVybWlzc2lvbnM=</PHRASE> <PHRASE Label="la_Off" Module="Core" Type="1">T2Zm</PHRASE> <PHRASE Label="la_On" Module="Core" Type="1">T24=</PHRASE> <PHRASE Label="la_OneWay" Module="Core" Type="1">T25lIFdheQ==</PHRASE> <PHRASE Label="la_opt_ActionCreate" Module="Core" Type="1">Y3JlYXRlZA==</PHRASE> <PHRASE Label="la_opt_ActionDelete" Module="Core" Type="1">ZGVsZXRlZA==</PHRASE> <PHRASE Label="la_opt_ActionUpdate" Module="Core" Type="1">dXBkYXRlZA==</PHRASE> <PHRASE Label="la_opt_Active" Module="Core" Type="1">QWN0aXZl</PHRASE> <PHRASE Label="la_opt_Address" Module="Core" Type="1">QWRkcmVzcw==</PHRASE> <PHRASE Label="la_opt_After" Module="Core" Type="1">QWZ0ZXI=</PHRASE> <PHRASE Label="la_opt_Allow" Module="Core" Type="1">QWxsb3c=</PHRASE> <PHRASE Label="la_opt_AnimationCustom" Module="Core" Type="1">Q3VzdG9t</PHRASE> <PHRASE Label="la_opt_AnimationFade" Module="Core" Type="1">RmFkZQ==</PHRASE> <PHRASE Label="la_opt_AnimationSlide" Module="Core" Type="1">U2xpZGU=</PHRASE> <PHRASE Label="la_opt_AutoDetect" Module="Core" Type="1">QXV0by1EZXRlY3Q=</PHRASE> <PHRASE Label="la_opt_Before" Module="Core" Type="1">QmVmb3Jl</PHRASE> <PHRASE Label="la_opt_Bounce" Module="Core" Type="1">Qm91bmNlZA==</PHRASE> <PHRASE Label="la_opt_Cancelled" Module="Core" Type="1">Q2FuY2VsZWQ=</PHRASE> <PHRASE Label="la_opt_City" Module="Core" Type="1">Q2l0eQ==</PHRASE> <PHRASE Label="la_opt_Colon" Module="Core" Type="1">Q29sb24=</PHRASE> <PHRASE Label="la_opt_Comma" Module="Core" Type="1">Q29tbWE=</PHRASE> <PHRASE Label="la_opt_CommentText" Module="Core" Type="1">Q29tbWVudCBUZXh0</PHRASE> <PHRASE Label="la_opt_Cookies" Module="Core" Type="1">Q29va2llcw==</PHRASE> + <PHRASE Label="la_opt_Countries" Module="Core" Type="1">Q291bnRyaWVz</PHRASE> <PHRASE Label="la_opt_Country" Module="Core" Type="1">Q291bnRyeQ==</PHRASE> <PHRASE Label="la_opt_CreatedOn" Module="Core" Type="1">Q3JlYXRlZCBPbg==</PHRASE> <PHRASE Label="la_opt_CurrentDomain" Module="Core" Type="1">Q3VycmVudCBEb21haW4=</PHRASE> <PHRASE Label="la_opt_CustomRecipients" Module="Core" Type="1">Q3VzdG9tICJUbyIgUmVjaXBpZW50KC1zKQ==</PHRASE> <PHRASE Label="la_opt_CustomSender" Module="Core" Type="1">Q3VzdG9tIFNlbmRlcg==</PHRASE> <PHRASE Label="la_opt_day" Module="Core" Type="1">ZGF5KHMp</PHRASE> <PHRASE Label="la_opt_Declined" Module="Core" Type="1">RGVjbGluZWQ=</PHRASE> <PHRASE Label="la_opt_DefaultAddress" Module="Core" Type="1">RGVmYXVsdCBXZWJzaXRlIGFkZHJlc3M=</PHRASE> <PHRASE Label="la_opt_Deny" Module="Core" Type="1">RGVueQ==</PHRASE> <PHRASE Label="la_opt_Description" Module="Core" Type="1">RGVzY3JpcHRpb24=</PHRASE> <PHRASE Label="la_opt_Disabled" Module="Core" Type="1">RGlzYWJsZWQ=</PHRASE> <PHRASE Label="la_opt_DoesntMatch" Module="Core" Type="1">RG9lc24ndCBtYXRjaA==</PHRASE> <PHRASE Label="la_opt_EditorsPick" Module="Core" Type="1">RWRpdG9yJ3MgUGljaw==</PHRASE> <PHRASE Label="la_opt_Email" Module="Core" Type="1">RS1tYWls</PHRASE> <PHRASE Label="la_opt_EmailBody" Module="Core" Type="1">RS1tYWlsIEJvZHk=</PHRASE> + <PHRASE Label="la_opt_EmailEvents" Module="Core" Type="1">RS1tYWlsIEV2ZW50cw==</PHRASE> <PHRASE Label="la_opt_EmailSubject" Module="Core" Type="1">RS1tYWlsIFN1YmplY3Q=</PHRASE> <PHRASE Label="la_opt_Everyone" Module="Core" Type="1">RXZlcnlvbmU=</PHRASE> <PHRASE Label="la_opt_Exact" Module="Core" Type="1">RXhhY3Q=</PHRASE> <PHRASE Label="la_opt_Expired" Module="Core" Type="1">RXhwaXJlZA==</PHRASE> <PHRASE Label="la_opt_External" Module="Core" Type="1">RXh0ZXJuYWw=</PHRASE> <PHRASE Label="la_opt_ExternalUrl" Module="Core" Type="1">RXh0ZXJuYWwgVXJs</PHRASE> <PHRASE Label="la_opt_Failed" Module="Core" Type="1">RmFpbGVk</PHRASE> <PHRASE Label="la_opt_FirstName" Module="Core" Type="1">Rmlyc3QgTmFtZQ==</PHRASE> <PHRASE Label="la_opt_Group" Module="Core" Type="1">R3JvdXA=</PHRASE> <PHRASE Label="la_opt_GuestsOnly" Module="Core" Type="1">R3Vlc3RzIE9ubHk=</PHRASE> <PHRASE Label="la_opt_hour" Module="Core" Type="1">aG91cihzKQ==</PHRASE> <PHRASE Label="la_opt_InheritFromParent" Module="Core" Type="1">SW5oZXJpdCBmcm9tIFBhcmVudA==</PHRASE> <PHRASE Label="la_opt_Internal" Module="Core" Type="1">SW50ZXJuYWw=</PHRASE> <PHRASE Label="la_opt_Invalid" Module="Core" Type="1">SW52YWxpZA==</PHRASE> <PHRASE Label="la_opt_IP_Address" Module="Core" Type="1">SVAgQWRkcmVzcw==</PHRASE> <PHRASE Label="la_opt_IsUnique" Module="Core" Type="1">SXMgdW5pcXVl</PHRASE> <PHRASE Label="la_opt_LastName" Module="Core" Type="1">TGFzdCBOYW1l</PHRASE> <PHRASE Label="la_opt_LoggedOut" Module="Core" Type="1">TG9nZ2VkIE91dA==</PHRASE> <PHRASE Label="la_opt_min" Module="Core" Type="1">bWludXRlKHMp</PHRASE> <PHRASE Label="la_opt_ModalWindow" Module="Core" Type="1">TW9kYWwgV2luZG93</PHRASE> <PHRASE Label="la_opt_month" Module="Core" Type="1">bW9udGgocyk=</PHRASE> <PHRASE Label="la_opt_NewEmail" Module="Core" Type="1">TmV3IEUtbWFpbA==</PHRASE> <PHRASE Label="la_opt_NotEmpty" Module="Core" Type="1">Tm90IGVtcHR5</PHRASE> <PHRASE Label="la_opt_NotLike" Module="Core" Type="1">Tm90IGxpa2U=</PHRASE> <PHRASE Label="la_opt_NotProcessed" Module="Core" Type="1">Tm90IFByb2Nlc3NlZA==</PHRASE> <PHRASE Label="la_opt_NotReplied" Module="Core" Type="1">Tm90IFJlcGxpZWQ=</PHRASE> <PHRASE Label="la_opt_PartiallyProcessed" Module="Core" Type="1">UGFydGlhbGx5IFByb2Nlc3NlZA==</PHRASE> <PHRASE Label="la_opt_Pending" Module="Core" Type="1">UGVuZGluZw==</PHRASE> <PHRASE Label="la_opt_Phone" Module="Core" Type="1">UGhvbmU=</PHRASE> + <PHRASE Label="la_opt_Phrases" Module="Core" Type="1">TGFiZWxz</PHRASE> <PHRASE Label="la_opt_PopupWindow" Module="Core" Type="1">UG9wdXAgV2luZG93</PHRASE> <PHRASE Label="la_opt_Processed" Module="Core" Type="1">UHJvY2Vzc2Vk</PHRASE> <PHRASE Label="la_opt_Published" Module="Core" Type="1">UHVibGlzaGVk</PHRASE> <PHRASE Label="la_opt_QueryString" Module="Core" Type="1">UXVlcnkgU3RyaW5nIChTSUQp</PHRASE> <PHRASE Label="la_opt_Rating" Module="Core" Type="1">UmF0aW5n</PHRASE> <PHRASE Label="la_opt_RecipientEmail" Module="Core" Type="1">UmVjaXBpZW50IEUtbWFpbA==</PHRASE> <PHRASE Label="la_opt_RecipientName" Module="Core" Type="1">UmVjaXBpZW50IE5hbWU=</PHRASE> <PHRASE Label="la_opt_Replied" Module="Core" Type="1">UmVwbGllZA==</PHRASE> <PHRASE Label="la_opt_Running" Module="Core" Type="1">UnVubmluZw==</PHRASE> <PHRASE Label="la_opt_SameWindow" Module="Core" Type="1">U2FtZSBXaW5kb3c=</PHRASE> <PHRASE Label="la_opt_sec" Module="Core" Type="1">c2Vjb25kKHMp</PHRASE> <PHRASE Label="la_opt_Semicolon" Module="Core" Type="1">U2VtaS1jb2xvbg==</PHRASE> <PHRASE Label="la_opt_Space" Module="Core" Type="1">U3BhY2U=</PHRASE> <PHRASE Label="la_opt_State" Module="Core" Type="1">U3RhdGU=</PHRASE> <PHRASE Label="la_opt_Sub-match" Module="Core" Type="1">U3ViLW1hdGNo</PHRASE> <PHRASE Label="la_opt_Success" Module="Core" Type="1">U3VjY2Vzcw==</PHRASE> <PHRASE Label="la_opt_SynchronizeFromOthers" Module="Core" Type="1">RnJvbSBvdGhlcnM=</PHRASE> <PHRASE Label="la_opt_SynchronizeToOthers" Module="Core" Type="1">VG8gb3RoZXJz</PHRASE> <PHRASE Label="la_opt_System" Module="Core" Type="1">U3lzdGVt</PHRASE> <PHRASE Label="la_opt_Tab" Module="Core" Type="1">VGFi</PHRASE> <PHRASE Label="la_opt_Template" Module="Core" Type="1">VGVtcGxhdGU=</PHRASE> <PHRASE Label="la_opt_Title" Module="Core" Type="1">VGl0bGU=</PHRASE> <PHRASE Label="la_opt_User" Module="Core" Type="1">VXNlcg==</PHRASE> <PHRASE Label="la_opt_UserEmailActivation" Module="Core" Type="1">RW1haWwgQWN0aXZhdGlvbg==</PHRASE> <PHRASE Label="la_opt_UserInstantRegistration" Module="Core" Type="1">SW1tZWRpYXRlIA==</PHRASE> <PHRASE Label="la_opt_Username" Module="Core" Type="1">VXNlcm5hbWU=</PHRASE> <PHRASE Label="la_opt_UserNotAllowedRegistration" Module="Core" Type="1">Tm90IEFsbG93ZWQ=</PHRASE> <PHRASE Label="la_opt_UserUponApprovalRegistration" Module="Core" Type="1">VXBvbiBBcHByb3ZhbA==</PHRASE> <PHRASE Label="la_opt_Virtual" Module="Core" Type="1">VmlydHVhbA==</PHRASE> <PHRASE Label="la_opt_week" Module="Core" Type="1">d2VlayhzKQ==</PHRASE> <PHRASE Label="la_opt_year" Module="Core" Type="1">eWVhcihzKQ==</PHRASE> <PHRASE Label="la_opt_Zip" Module="Core" Type="1">Wmlw</PHRASE> <PHRASE Label="la_OtherFields" Module="Core" Type="1">T3RoZXIgRmllbGRz</PHRASE> <PHRASE Label="la_OutOf" Module="Core" Type="1">b3V0IG9m</PHRASE> <PHRASE Label="la_p1" Module="Core" Type="1">KEdNVCArMDE6MDAp</PHRASE> <PHRASE Label="la_p10" Module="Core" Type="1">KEdNVCArMTA6MDAp</PHRASE> <PHRASE Label="la_p11" Module="Core" Type="1">KEdNVCArMTE6MDAp</PHRASE> <PHRASE Label="la_p12" Module="Core" Type="1">KEdNVCArMTI6MDAp</PHRASE> <PHRASE Label="la_p13" Module="Core" Type="1">KEdNVCArMTM6MDAp</PHRASE> <PHRASE Label="la_p2" Module="Core" Type="1">KEdNVCArMDI6MDAp</PHRASE> <PHRASE Label="la_p3" Module="Core" Type="1">KEdNVCArMDM6MDAp</PHRASE> <PHRASE Label="la_p4" Module="Core" Type="1">KEdNVCArMDQ6MDAp</PHRASE> <PHRASE Label="la_p5" Module="Core" Type="1">KEdNVCArMDU6MDAp</PHRASE> <PHRASE Label="la_p6" Module="Core" Type="1">KEdNVCArMDY6MDAp</PHRASE> <PHRASE Label="la_p7" Module="Core" Type="1">KEdNVCArMDc6MDAp</PHRASE> <PHRASE Label="la_p8" Module="Core" Type="1">KEdNVCArMDg6MDAp</PHRASE> <PHRASE Label="la_p9" Module="Core" Type="1">KEdNVCArMDk6MDAp</PHRASE> <PHRASE Label="la_Paddings" Module="Core" Type="1">UGFkZGluZ3M=</PHRASE> <PHRASE Label="la_Page" Module="Core" Type="1">UGFnZQ==</PHRASE> <PHRASE Label="la_PageCurrentlyEditing1" Module="Core" Type="1">QXR0ZW50aW9uOiAlcyBpcyBjdXJyZW50bHkgZWRpdGluZyB0aGlzIHNlY3Rpb24h</PHRASE> <PHRASE Label="la_PageCurrentlyEditing2" Module="Core" Type="1">QXR0ZW50aW9uOiAlcyBhcmUgY3VycmVudGx5IGVkaXRpbmcgdGhpcyBzZWN0aW9uISA=</PHRASE> <PHRASE Label="la_PageCurrentlyEditing5" Module="Core" Type="1">QXR0ZW50aW9uOiAlcyBhcmUgY3VycmVudGx5IGVkaXRpbmcgdGhpcyBzZWN0aW9uIQ==</PHRASE> <PHRASE Label="la_passwords_do_not_match" Module="Core" Type="1">UGFzc3dvcmRzIGRvIG5vdCBtYXRjaA==</PHRASE> <PHRASE Label="la_passwords_too_short" Module="Core" Type="1">UGFzc3dvcmQgaXMgdG9vIHNob3J0LCBwbGVhc2UgZW50ZXIgYXQgbGVhc3QgJXMgY2hhcmFjdGVycw==</PHRASE> <PHRASE Label="la_Pending" Module="Core" Type="1">UGVuZGluZw==</PHRASE> <PHRASE Label="la_performing_backup" Module="Core" Type="1">UGVyZm9ybWluZyBCYWNrdXA=</PHRASE> <PHRASE Label="la_performing_import" Module="Core" Type="1">UGVyZm9ybWluZyBJbXBvcnQ=</PHRASE> <PHRASE Label="la_performing_restore" Module="Core" Type="1">UGVyZm9ybWluZyBSZXN0b3Jl</PHRASE> <PHRASE Label="la_permission_in-portal:configure_lang.advanced:export" Module="Core" Type="1">RXhwb3J0IExhbmd1YWdlIHBhY2s=</PHRASE> <PHRASE Label="la_permission_in-portal:configure_lang.advanced:import" Module="Core" Type="1">SW1wb3J0IExhbmd1YWdlIHBhY2s=</PHRASE> <PHRASE Label="la_permission_in-portal:configure_lang.advanced:set_primary" Module="Core" Type="1">U2V0IFByaW1hcnkgTGFuZ3VhZ2U=</PHRASE> <PHRASE Label="la_permission_in-portal:mod_status.advanced:approve" Module="Core" Type="1">RW5hYmxlIE1vZHVsZXM=</PHRASE> <PHRASE Label="la_permission_in-portal:mod_status.advanced:decline" Module="Core" Type="1">RGlzYWJsZSBNb2R1bGVz</PHRASE> <PHRASE Label="la_permission_in-portal:user_groups.advanced:manage_permissions" Module="Core" Type="1">TWFuYWdlIFBlcm1pc3Npb25z</PHRASE> <PHRASE Label="la_permission_in-portal:user_groups.advanced:send_email" Module="Core" Type="1">U2VuZCBFLW1haWwgdG8gR3JvdXBzIGluIEFkbWlu</PHRASE> <PHRASE Label="la_permission_in-portal:user_list.advanced:ban" Module="Core" Type="1">QmFuIFVzZXJz</PHRASE> <PHRASE Label="la_permission_in-portal:user_list.advanced:send_email" Module="Core" Type="1">U2VuZCBFLW1haWwgdG8gVXNlcnMgaW4gQWRtaW4=</PHRASE> <PHRASE Label="la_PermName_Admin_desc" Module="Core" Type="1">QWRtaW4gTG9naW4=</PHRASE> <PHRASE Label="la_PermName_Category.AddPending_desc" Module="Core" Type="1">QWRkIFBlbmRpbmcgQ2F0ZWdvcnk=</PHRASE> <PHRASE Label="la_PermName_Category.Add_desc" Module="Core" Type="1">QWRkIENhdGVnb3J5</PHRASE> <PHRASE Label="la_PermName_Category.Delete_desc" Module="Core" Type="1">RGVsZXRlIENhdGVnb3J5</PHRASE> <PHRASE Label="la_PermName_Category.Modify_desc" Module="Core" Type="1">TW9kaWZ5IENhdGVnb3J5</PHRASE> <PHRASE Label="la_PermName_Category.View_desc" Module="Core" Type="1">VmlldyBDYXRlZ29yeQ==</PHRASE> <PHRASE Label="la_PermName_Debug.Info_desc" Module="Core" Type="1">QXBwZW5kIHBocGluZm8gdG8gYWxsIHBhZ2VzIChEZWJ1Zyk=</PHRASE> <PHRASE Label="la_PermName_Debug.Item_desc" Module="Core" Type="1">RGlzcGxheSBJdGVtIFF1ZXJpZXMgKERlYnVnKQ==</PHRASE> <PHRASE Label="la_PermName_Debug.List_desc" Module="Core" Type="1">RGlzcGxheSBJdGVtIExpc3QgUXVlcmllcyAoRGVidWcp</PHRASE> <PHRASE Label="la_PermName_favorites_desc" Module="Core" Type="1">QWxsb3cgZmF2b3JpdGVz</PHRASE> <PHRASE Label="la_PermName_Login_desc" Module="Core" Type="1">QWxsb3cgTG9naW4=</PHRASE> <PHRASE Label="la_PermName_Profile.Modify_desc" Module="Core" Type="1">Q2hhbmdlIFVzZXIgUHJvZmlsZXM=</PHRASE> <PHRASE Label="la_PermName_ShowLang_desc" Module="Core" Type="1">U2hvdyBMYW5ndWFnZSBUYWdz</PHRASE> <PHRASE Label="la_PermName_SystemAccess.ReadOnly_desc" Module="Core" Type="1">UmVhZC1Pbmx5IEFjY2VzcyBUbyBEYXRhYmFzZQ==</PHRASE> <PHRASE Label="la_PhraseNotTranslated" Module="Core" Type="1">Tm90IFRyYW5zbGF0ZWQ=</PHRASE> <PHRASE Label="la_PhraseTranslated" Module="Core" Type="1">VHJhbnNsYXRlZA==</PHRASE> <PHRASE Label="la_PhraseType_Admin" Module="Core" Type="1">QWRtaW4=</PHRASE> <PHRASE Label="la_PhraseType_Both" Module="Core" Type="1">Qm90aA==</PHRASE> <PHRASE Label="la_PhraseType_Front" Module="Core" Type="1">RnJvbnQ=</PHRASE> <PHRASE Label="la_Pick" Module="Core" Type="1">UGljaw==</PHRASE> <PHRASE Label="la_PickedColumns" Module="Core" Type="1">U2VsZWN0ZWQgQ29sdW1ucw==</PHRASE> <PHRASE Label="la_Pop" Module="Core" Type="1">UG9wdWxhcg==</PHRASE> <PHRASE Label="la_PositionAndVisibility" Module="Core" Type="1">UG9zaXRpb24gQW5kIFZpc2liaWxpdHk=</PHRASE> <PHRASE Label="la_prevcategory" Module="Core" Type="1">UHJldmlvdXMgc2VjdGlvbg==</PHRASE> <PHRASE Label="la_PrimaryCategory" Module="Core" Type="1">UHJpbWFyeQ==</PHRASE> <PHRASE Label="la_prompt_ActiveCategories" Module="Core" Type="1">QWN0aXZlIFNlY3Rpb25z</PHRASE> <PHRASE Label="la_prompt_ActiveUsers" Module="Core" Type="1">QWN0aXZlIFVzZXJz</PHRASE> <PHRASE Label="la_prompt_AddressTo" Module="Core" Type="1">U2VudCBUbw==</PHRASE> <PHRASE Label="la_prompt_AdminMailFrom" Module="Core" Type="1">TWVzc2FnZXMgZnJvbSBTaXRlIEFkbWluIGFyZSBmcm9t</PHRASE> <PHRASE Label="la_prompt_AdvancedSearch" Module="Core" Type="1">QWR2YW5jZWQgU2VhcmNo</PHRASE> <PHRASE Label="la_prompt_AdvancedUserManagement" Module="Core" Type="1">QWR2YW5jZWQgVXNlciBNYW5hZ2VtZW50</PHRASE> <PHRASE Label="la_prompt_allow_reset" Module="Core" Type="1">QWxsb3cgcGFzc3dvcmQgcmVzZXQgYWZ0ZXI=</PHRASE> <PHRASE Label="la_prompt_AutoGen_Excerpt" Module="Core" Type="1">R2VuZXJhdGUgZnJvbSB0aGUgYXJ0aWNsZSBib2R5</PHRASE> <PHRASE Label="la_Prompt_Backup_Date" Module="Core" Type="1">RGF0ZSBvZiBCYWNrdXA6</PHRASE> <PHRASE Label="la_prompt_Backup_Path" Module="Core" Type="1">QmFja3VwIFBhdGg=</PHRASE> <PHRASE Label="la_Prompt_Backup_Status" Module="Core" Type="1">QmFja3VwIHN0YXR1cw==</PHRASE> <PHRASE Label="la_prompt_BannedUsers" Module="Core" Type="1">QmFubmVkIFVzZXJz</PHRASE> <PHRASE Label="la_prompt_birthday" Module="Core" Type="1">RGF0ZSBvZiBCaXJ0aA==</PHRASE> <PHRASE Label="la_prompt_CategoryEditorsPick" Module="Core" Type="1">RWRpdG9yJ3MgUGljayBTZWN0aW9ucw==</PHRASE> <PHRASE Label="la_prompt_CurrentSessions" Module="Core" Type="1">Q3VycmVudCBTZXNzaW9ucw==</PHRASE> <PHRASE Label="la_prompt_DataSize" Module="Core" Type="1">VG90YWwgU2l6ZSBvZiB0aGUgRGF0YWJhc2U=</PHRASE> <PHRASE Label="la_prompt_Default" Module="Core" Type="1">RGVmYXVsdA==</PHRASE> <PHRASE Label="la_prompt_DefaultUserId" Module="Core" Type="1">VXNlciBJRCBmb3IgRGVmYXVsdCBQZXJzaXN0ZW50IFNldHRpbmdz</PHRASE> <PHRASE Label="la_prompt_DefaultValue" Module="Core" Type="1">RGVmYXVsdCBWYWx1ZQ==</PHRASE> <PHRASE Label="la_prompt_DisabledCategories" Module="Core" Type="1">RGlzYWJsZWQgU2VjdGlvbnM=</PHRASE> <PHRASE Label="la_prompt_DisplayInGrid" Module="Core" Type="1">RGlzcGxheSBpbiBHcmlk</PHRASE> <PHRASE Label="la_prompt_DisplayOrder" Module="Core" Type="1">RGlzcGxheSBPcmRlcg==</PHRASE> <PHRASE Label="la_prompt_DupRating" Module="Core" Type="1">QWxsb3cgRHVwbGljYXRlIFJhdGluZyBWb3Rlcw==</PHRASE> <PHRASE Label="la_prompt_DupReviews" Module="Core" Type="1">QWxsb3cgRHVwbGljYXRlIFJldmlld3M=</PHRASE> <PHRASE Label="la_prompt_EditorsPick" Module="Core" Type="1">RWRpdG9yJ3MgUGljaw==</PHRASE> <PHRASE Label="la_prompt_ElementType" Module="Core" Type="1">VHlwZQ==</PHRASE> <PHRASE Label="la_prompt_EmailCompleteMessage" Module="Core" Type="1">VGhlIEVtYWlsIE1lc3NhZ2UgaGFzIGJlZW4gc2VudA==</PHRASE> <PHRASE Label="la_prompt_ExportCompleteMessage" Module="Core" Type="1">RXhwb3J0IENvbXBsZXRlIQ==</PHRASE> <PHRASE Label="la_prompt_FieldId" Module="Core" Type="1">RmllbGQgSWQ=</PHRASE> <PHRASE Label="la_prompt_FieldLabel" Module="Core" Type="1">RmllbGQgTGFiZWw=</PHRASE> <PHRASE Label="la_prompt_FieldName" Module="Core" Type="1">RmllbGQgTmFtZQ==</PHRASE> <PHRASE Label="la_prompt_FieldPrompt" Module="Core" Type="1">RmllbGQgUHJvbXB0</PHRASE> <PHRASE Label="la_prompt_Frequency" Module="Core" Type="1">RnJlcXVlbmN5</PHRASE> <PHRASE Label="la_prompt_FromUsername" Module="Core" Type="1">RnJvbQ==</PHRASE> <PHRASE Label="la_prompt_heading" Module="Core" Type="1">SGVhZGluZw==</PHRASE> <PHRASE Label="la_prompt_HitLimits" Module="Core" Type="1">KE1pbmltdW0gNCk=</PHRASE> <PHRASE Label="la_prompt_Import_Source" Module="Core" Type="1">SW1wb3J0IFNvdXJjZQ==</PHRASE> <PHRASE Label="la_prompt_InputType" Module="Core" Type="1">SW5wdXQgVHlwZQ==</PHRASE> <PHRASE Label="la_prompt_KeepSessionOnBrowserClose" Module="Core" Type="1">S2VlcCBTZXNzaW9uIFdoZW4gQnJvc3dlciBJcyBDbG9zZWQ=</PHRASE> <PHRASE Label="la_prompt_lang_cache_timeout" Module="Core" Type="1">TGFuZ3VhZ2UgQ2FjaGUgVGltZW91dA==</PHRASE> <PHRASE Label="la_prompt_LastCategoryUpdate" Module="Core" Type="1">TGFzdCBTZWN0aW9uIFVwZGF0ZQ==</PHRASE> <PHRASE Label="la_prompt_LastLinkUpdate" Module="Core" Type="1">TGFzdCBVcGRhdGVkIExpbms=</PHRASE> <PHRASE Label="la_prompt_mailauthenticate" Module="Core" Type="1">U2VydmVyIFJlcXVpcmVzIEF1dGhlbnRpY2F0aW9u</PHRASE> <PHRASE Label="la_prompt_mailport" Module="Core" Type="1">UG9ydCAoZS5nLiBwb3J0IDI1KQ==</PHRASE> <PHRASE Label="la_prompt_mailserver" Module="Core" Type="1">TWFpbCBTZXJ2ZXIgQWRkcmVzcw==</PHRASE> <PHRASE Label="la_prompt_max_import_category_levels" Module="Core" Type="1">TWF4aW1hbCBpbXBvcnRlZCBzZWN0aW9uIGxldmVs</PHRASE> <PHRASE Label="la_prompt_MembershipExpires" Module="Core" Type="1">TWVtYmVyc2hpcCBFeHBpcmVz</PHRASE> <PHRASE Label="la_prompt_MenuFrameWidth" Module="Core" Type="1">TGVmdCBNZW51IChUcmVlKSBXaWR0aA==</PHRASE> <PHRASE Label="la_prompt_movedown" Module="Core" Type="1">TW92ZSBkb3du</PHRASE> <PHRASE Label="la_prompt_moveup" Module="Core" Type="1">TW92ZSB1cA==</PHRASE> <PHRASE Label="la_prompt_multipleshow" Module="Core" Type="1">U2hvdyBtdWx0aXBsZQ==</PHRASE> <PHRASE Label="la_prompt_NewCategories" Module="Core" Type="1">TmV3IFNlY3Rpb25z</PHRASE> <PHRASE Label="la_prompt_NewestCategoryDate" Module="Core" Type="1">TmV3ZXN0IFNlY3Rpb24gRGF0ZQ==</PHRASE> <PHRASE Label="la_prompt_NewestLinkDate" Module="Core" Type="1">TmV3ZXN0IExpbmsgRGF0ZQ==</PHRASE> <PHRASE Label="la_prompt_NewestUserDate" Module="Core" Type="1">TmV3ZXN0IFVzZXIgRGF0ZQ==</PHRASE> <PHRASE Label="la_prompt_NonExpiredSessions" Module="Core" Type="1">Q3VycmVudGx5IEFjdGl2ZSBVc2VyIFNlc3Npb25z</PHRASE> <PHRASE Label="la_prompt_overwritephrases" Module="Core" Type="1">T3ZlcndyaXRlIEV4aXN0aW5nIFBocmFzZXM=</PHRASE> <PHRASE Label="la_prompt_PendingCategories" Module="Core" Type="1">UGVuZGluZyBTZWN0aW9ucw==</PHRASE> <PHRASE Label="la_prompt_PendingItems" Module="Core" Type="1">UGVuZGluZyBJdGVtcw==</PHRASE> <PHRASE Label="la_prompt_perform_now" Module="Core" Type="1">UGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBub3c/</PHRASE> <PHRASE Label="la_prompt_PerPage" Module="Core" Type="1">UGVyIFBhZ2U=</PHRASE> <PHRASE Label="la_prompt_PersonalInfo" Module="Core" Type="1">UGVyc29uYWwgSW5mb3JtYXRpb24=</PHRASE> <PHRASE Label="la_prompt_PrimaryGroup" Module="Core" Type="1">UHJpbWFyeSBHcm91cA==</PHRASE> <PHRASE Label="la_prompt_Priority" Module="Core" Type="1">UHJpb3JpdHk=</PHRASE> <PHRASE Label="la_prompt_Rating" Module="Core" Type="1">UmF0aW5n</PHRASE> <PHRASE Label="la_prompt_RatingLimits" Module="Core" Type="1">KE1pbmltdW0gMCwgTWF4aW11bSA1KQ==</PHRASE> <PHRASE Label="la_prompt_RecordsCount" Module="Core" Type="1">TnVtYmVyIG9mIERhdGFiYXNlIFJlY29yZHM=</PHRASE> <PHRASE Label="la_prompt_RegionsCount" Module="Core" Type="1">TnVtYmVyIG9mIFJlZ2lvbiBQYWNrcw==</PHRASE> <PHRASE Label="la_prompt_relevence_percent" Module="Core" Type="1">U2VhcmNoIFJlbGV2YW5jZSBkZXBlbmRzIG9u</PHRASE> <PHRASE Label="la_prompt_relevence_settings" Module="Core" Type="1">U2VhcmNoIFJlbGV2ZW5jZSBTZXR0aW5ncw==</PHRASE> <PHRASE Label="la_prompt_Required" Module="Core" Type="1">UmVxdWlyZWQ=</PHRASE> <PHRASE Label="la_prompt_required_field_increase" Module="Core" Type="1">SW5jcmVhc2UgaW1wb3J0YW5jZSBpZiBmaWVsZCBjb250YWlucyBhIHJlcXVpcmVkIGtleXdvcmQgYnk=</PHRASE> <PHRASE Label="la_Prompt_Restore_Failed" Module="Core" Type="1">UmVzdG9yZSBoYXMgZmFpbGVkIGFuIGVycm9yIG9jY3VyZWQ6</PHRASE> <PHRASE Label="la_Prompt_Restore_Filechoose" Module="Core" Type="1">Q2hvb3NlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGJhY2t1cCBkYXRlcyB0byByZXN0b3JlIG9yIGRlbGV0ZQ==</PHRASE> <PHRASE Label="la_Prompt_Restore_Status" Module="Core" Type="1">UmVzdG9yZSBTdGF0dXM=</PHRASE> <PHRASE Label="la_Prompt_Restore_Success" Module="Core" Type="1">UmVzdG9yZSBoYXMgYmVlbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5</PHRASE> <PHRASE Label="la_prompt_RootCategory" Module="Core" Type="1">U2VsZWN0IE1vZHVsZSBSb290IFNlY3Rpb246</PHRASE> <PHRASE Label="la_prompt_root_pass" Module="Core" Type="1">Um9vdCBQYXNzd29yZA==</PHRASE> <PHRASE Label="la_prompt_SearchType" Module="Core" Type="1">U2VhcmNoIFR5cGU=</PHRASE> <PHRASE Label="la_prompt_Select_Source" Module="Core" Type="1">U2VsZWN0IFNvdXJjZSBMYW5ndWFnZQ==</PHRASE> <PHRASE Label="la_prompt_SentOn" Module="Core" Type="1">U2VudCBPbg==</PHRASE> <PHRASE Label="la_prompt_session_cookie_name" Module="Core" Type="1">U2Vzc2lvbiBDb29raWUgTmFtZQ==</PHRASE> <PHRASE Label="la_prompt_session_management" Module="Core" Type="1">U2Vzc2lvbiBNYW5hZ2VtZW50IE1ldGhvZA==</PHRASE> <PHRASE Label="la_prompt_session_timeout" Module="Core" Type="1">U2Vzc2lvbiBJbmFjdGl2aXR5IFRpbWVvdXQgKHNlY29uZHMp</PHRASE> <PHRASE Label="la_prompt_showgeneraltab" Module="Core" Type="1">U2hvdyBvbiB0aGUgZ2VuZXJhbCB0YWI=</PHRASE> <PHRASE Label="la_prompt_SimpleSearch" Module="Core" Type="1">U2ltcGxlIFNlYXJjaA==</PHRASE> <PHRASE Label="la_prompt_smtpheaders" Module="Core" Type="1">QWRkaXRpb25hbCBNZXNzYWdlIEhlYWRlcnM=</PHRASE> <PHRASE Label="la_prompt_smtp_pass" Module="Core" Type="1">TWFpbCBTZXJ2ZXIgUGFzc3dvcmQ=</PHRASE> <PHRASE Label="la_prompt_smtp_user" Module="Core" Type="1">TWFpbCBTZXJ2ZXIgVXNlcm5hbWU=</PHRASE> <PHRASE Label="la_prompt_socket_blocking_mode" Module="Core" Type="1">VXNlIG5vbi1ibG9ja2luZyBzb2NrZXQgbW9kZQ==</PHRASE> <PHRASE Label="la_prompt_sqlquery" Module="Core" Type="1">U1FMIFF1ZXJ5Og==</PHRASE> <PHRASE Label="la_prompt_sqlquery_header" Module="Core" Type="1">UGVyZm9ybSBTUUwgUXVlcnk=</PHRASE> <PHRASE Label="la_Prompt_Step_One" Module="Core" Type="1">U3RlcCBPbmU=</PHRASE> <PHRASE Label="la_prompt_SumbissionTime" Module="Core" Type="1">U3VibWl0dGVkIE9u</PHRASE> <PHRASE Label="la_prompt_syscache_enable" Module="Core" Type="1">RW5hYmxlIFRhZyBDYWNoaW5n</PHRASE> <PHRASE Label="la_prompt_SystemFileSize" Module="Core" Type="1">VG90YWwgU2l6ZSBvZiBTeXN0ZW0gRmlsZXM=</PHRASE> <PHRASE Label="la_prompt_TablesCount" Module="Core" Type="1">TnVtYmVyIG9mIERhdGFiYXNlIFRhYmxlcw==</PHRASE> <PHRASE Label="la_prompt_ThemeCount" Module="Core" Type="1">TnVtYmVyIG9mIFRoZW1lcw==</PHRASE> <PHRASE Label="la_prompt_TotalCategories" Module="Core" Type="1">VG90YWwgU2VjdGlvbnM=</PHRASE> <PHRASE Label="la_prompt_TotalUserGroups" Module="Core" Type="1">VG90YWwgVXNlciBHcm91cHM=</PHRASE> <PHRASE Label="la_prompt_UsersActive" Module="Core" Type="1">QWN0aXZlIFVzZXJz</PHRASE> <PHRASE Label="la_prompt_UsersDisabled" Module="Core" Type="1">RGlzYWJsZWQgVXNlcnM=</PHRASE> <PHRASE Label="la_prompt_UsersPending" Module="Core" Type="1">UGVuZGluZyBVc2Vycw==</PHRASE> <PHRASE Label="la_prompt_UsersUniqueCountries" Module="Core" Type="1">TnVtYmVyIG9mIFVuaXF1ZSBDb3VudHJpZXMgb2YgVXNlcnM=</PHRASE> <PHRASE Label="la_prompt_UsersUniqueStates" Module="Core" Type="1">TnVtYmVyIG9mIFVuaXF1ZSBTdGF0ZXMgb2YgVXNlcnM=</PHRASE> <PHRASE Label="la_prompt_validation" Module="Core" Type="1">VmFsaWRhdGlvbg==</PHRASE> <PHRASE Label="la_prompt_valuelist" Module="Core" Type="1">TGlzdCBvZiBWYWx1ZXM=</PHRASE> <PHRASE Label="la_prompt_VoteLimits" Module="Core" Type="1">KE1pbmltdW0gMSk=</PHRASE> <PHRASE Label="la_Prompt_Warning" Module="Core" Type="1">V2FybmluZyE=</PHRASE> <PHRASE Label="la_prompt_weight" Module="Core" Type="1">V2VpZ2h0</PHRASE> <PHRASE Label="la_Quotes" Module="Core" Type="1">U2luZ2xlLVF1b3RlcyAoaWUuICcp</PHRASE> <PHRASE Label="la_Reciprocal" Module="Core" Type="1">UmVjaXByb2NhbA==</PHRASE> <PHRASE Label="la_Records" Module="Core" Type="1">UmVjb3Jkcw==</PHRASE> <PHRASE Label="la_record_being_edited_by" Module="Core" Type="1">VGhpcyByZWNvcmQgaXMgYmVpbmcgZWRpdGVkIGJ5IHRoZSBmb2xsb3dpbmcgdXNlcnM6DQolcw==</PHRASE> <PHRASE Label="la_registration_captcha" Module="Core" Type="1">VXNlIENhcHRjaGEgY29kZSBvbiBSZWdpc3RyYXRpb24=</PHRASE> <PHRASE Label="la_Regular" Module="Core" Type="1">UmVndWxhcg==</PHRASE> <PHRASE Label="la_RemoveFrom" Module="Core" Type="1">UmVtb3ZlIEZyb20=</PHRASE> <PHRASE Label="la_RequiredWarning" Module="Core" Type="1">Tm90IGFsbCByZXF1aXJlZCBmaWVsZHMgYXJlIGZpbGxlZC4gUGxlYXNlIGZpbGwgdGhlbSBmaXJzdC4=</PHRASE> <PHRASE Label="la_review_perpage_prompt" Module="Core" Type="1">Q29tbWVudHMgcGVyIFBhZ2U=</PHRASE> <PHRASE Label="la_review_perpage_short_prompt" Module="Core" Type="1">Q29tbWVudHMgcGVyIFBhZ2UgKHNob3J0LWxpc3Qp</PHRASE> <PHRASE Label="la_RevisionNumber" Module="Core" Type="1">UmV2aXNpb24gIyVz</PHRASE> <PHRASE Label="la_rootcategory_name" Module="Core" Type="1">SG9tZQ==</PHRASE> <PHRASE Label="la_SampleText" Module="Core" Type="1">U2FtcGxlIFRleHQ=</PHRASE> <PHRASE Label="la_SavedAt" Module="Core" Type="1">c2F2ZWQgYXQgJXM=</PHRASE> <PHRASE Label="la_SaveLogin" Module="Core" Type="1">U2F2ZSBVc2VybmFtZSBvbiBUaGlzIENvbXB1dGVy</PHRASE> <PHRASE Label="la_Search" Module="Core" Type="1">U2VhcmNo</PHRASE> <PHRASE Label="la_section_BasicPermissions" Module="Core" Type="1">QmFzaWMgUGVybWlzc2lvbnM=</PHRASE> <PHRASE Label="la_section_Category" Module="Core" Type="1">U2VjdGlvbg==</PHRASE> <PHRASE Label="la_section_Configs" Module="Core" Type="1">Q29uZmlnIEZpbGVz</PHRASE> <PHRASE Label="la_section_Counters" Module="Core" Type="1">Q291bnRlcnM=</PHRASE> <PHRASE Label="la_section_CustomFields" Module="Core" Type="1">Q3VzdG9tIEZpZWxkcw==</PHRASE> <PHRASE Label="la_section_Data" Module="Core" Type="1">U3VibWlzc2lvbiBEYXRh</PHRASE> <PHRASE Label="la_section_FrontEnd" Module="Core" Type="1">RnJvbnQtZW5k</PHRASE> <PHRASE Label="la_section_FullSizeImage" Module="Core" Type="1">RnVsbCBTaXplIEltYWdl</PHRASE> <PHRASE Label="la_section_General" Module="Core" Type="1">R2VuZXJhbA==</PHRASE> <PHRASE Label="la_section_Image" Module="Core" Type="1">SW1hZ2U=</PHRASE> <PHRASE Label="la_section_ImageSettings" Module="Core" Type="1">SW1hZ2UgU2V0dGluZ3M=</PHRASE> <PHRASE Label="la_section_ImportCompleted" Module="Core" Type="1">SW1wb3J0IENvbXBsZXRlZA==</PHRASE> <PHRASE Label="la_section_Items" Module="Core" Type="1">VXNlciBJdGVtcw==</PHRASE> <PHRASE Label="la_section_MemoryCache" Module="Core" Type="1">TWVtb3J5IENhY2hl</PHRASE> <PHRASE Label="la_section_Message" Module="Core" Type="1">TWVzc2FnZQ==</PHRASE> <PHRASE Label="la_section_overview" Module="Core" Type="1">U2VjdGlvbiBPdmVydmlldw==</PHRASE> <PHRASE Label="la_section_Page" Module="Core" Type="1">U2VjdGlvbiBQcm9wZXJ0aWVz</PHRASE> <PHRASE Label="la_section_PageCaching" Module="Core" Type="1">U2VjdGlvbiBDYWNoaW5n</PHRASE> <PHRASE Label="la_section_ProjectDeployment" Module="Core" Type="1">UHJvamVjdCBEZXBsb3ltZW50</PHRASE> <PHRASE Label="la_section_Properties" Module="Core" Type="1">UHJvcGVydGllcw==</PHRASE> <PHRASE Label="la_section_QuickLinks" Module="Core" Type="1">UXVpY2sgTGlua3M=</PHRASE> <PHRASE Label="la_section_RecipientsInfo" Module="Core" Type="1">UmVjaXBpZW50cyBJbmZvcm1hdGlvbg==</PHRASE> <PHRASE Label="la_section_Relation" Module="Core" Type="1">UmVsYXRpb24=</PHRASE> <PHRASE Label="la_section_ReplacementTags" Module="Core" Type="1">UmVwbGFjZW1lbnQgVGFncw==</PHRASE> <PHRASE Label="la_section_SenderInfo" Module="Core" Type="1">U2VuZGVyIEluZm9ybWF0aW9u</PHRASE> <PHRASE Label="la_section_Settings" Module="Core" Type="1">U2V0dGluZ3M=</PHRASE> <PHRASE Label="la_section_Settings3rdPartyAPI" Module="Core" Type="1">M3JkIFBhcnR5IEFQSSBTZXR0aW5ncw==</PHRASE> <PHRASE Label="la_section_SettingsAdmin" Module="Core" Type="1">QWRtaW4gQ29uc29sZSBTZXR0aW5ncw==</PHRASE> <PHRASE Label="la_section_SettingsCSVExport" Module="Core" Type="1">Q1NWIEV4cG9ydCBTZXR0aW5ncw==</PHRASE> <PHRASE Label="la_section_SettingsMailling" Module="Core" Type="1">TWFpbGluZyBTZXR0aW5ncw==</PHRASE> <PHRASE Label="la_section_SettingsMaintenance" Module="Core" Type="1">TWFpbnRlbmFuY2UgU2V0dGluZ3M=</PHRASE> <PHRASE Label="la_section_SettingsSession" Module="Core" Type="1">U2Vzc2lvbiBTZXR0aW5ncw==</PHRASE> <PHRASE Label="la_section_SettingsSSL" Module="Core" Type="1">U1NMIFNldHRpbmdz</PHRASE> <PHRASE Label="la_section_SettingsSystem" Module="Core" Type="1">U3lzdGVtIFNldHRpbmdz</PHRASE> <PHRASE Label="la_section_SettingsWebsite" Module="Core" Type="1">V2Vic2l0ZSBTZXR0aW5ncw==</PHRASE> <PHRASE Label="la_section_SubmissionNotes" Module="Core" Type="1">U3VibWlzc2lvbiBOb3Rlcw==</PHRASE> <PHRASE Label="la_section_Templates" Module="Core" Type="1">VGVtcGxhdGVz</PHRASE> <PHRASE Label="la_section_ThumbnailImage" Module="Core" Type="1">VGh1bWJuYWlsIEltYWdl</PHRASE> <PHRASE Label="la_section_Translation" Module="Core" Type="1">VHJhbnNsYXRpb24=</PHRASE> <PHRASE Label="la_section_UsersSearch" Module="Core" Type="1">U2VhcmNoIFVzZXJz</PHRASE> <PHRASE Label="la_section_Values" Module="Core" Type="1">VmFsdWVz</PHRASE> <PHRASE Label="la_SelectColumns" Module="Core" Type="1">U2VsZWN0IENvbHVtbnM=</PHRASE> <PHRASE Label="la_SelectedItems" Module="Core" Type="1">U2VsZWN0ZWQgSXRlbXM=</PHRASE> <PHRASE Label="la_selecting_categories" Module="Core" Type="1">U2VsZWN0aW5nIFNlY3Rpb25z</PHRASE> <PHRASE Label="la_SeparatedCategoryPath" Module="Core" Type="1">T25lIGZpZWxkIGZvciBlYWNoIHNlY3Rpb24gbGV2ZWw=</PHRASE> <PHRASE Label="la_ShortToolTip_Clone" Module="Core" Type="1">Q2xvbmU=</PHRASE> <PHRASE Label="la_ShortToolTip_CloneUser" Module="Core" Type="1">Q2xvbmU=</PHRASE> <PHRASE Label="la_ShortToolTip_Continue" Module="Core" Type="1">Q29udGludWU=</PHRASE> <PHRASE Label="la_ShortToolTip_Edit" Module="Core" Type="1">RWRpdA==</PHRASE> <PHRASE Label="la_ShortToolTip_Export" Module="Core" Type="1">RXhwb3J0</PHRASE> <PHRASE Label="la_ShortToolTip_GoUp" Module="Core" Type="1">R28gVXA=</PHRASE> <PHRASE Label="la_ShortToolTip_Import" Module="Core" Type="1">SW1wb3J0</PHRASE> <PHRASE Label="la_ShortToolTip_MoveDown" Module="Core" Type="1">RG93bg==</PHRASE> <PHRASE Label="la_ShortToolTip_MoveUp" Module="Core" Type="1">VXA=</PHRASE> <PHRASE Label="la_ShortToolTip_New" Module="Core" Type="1">TmV3</PHRASE> <PHRASE Label="la_ShortToolTip_Rebuild" Module="Core" Type="1">UmVidWlsZA==</PHRASE> <PHRASE Label="la_ShortToolTip_RescanThemes" Module="Core" Type="1">UmVzY2FuIFRoZW1lcw==</PHRASE> <PHRASE Label="la_ShortToolTip_ResetSettings" Module="Core" Type="1">UmVzZXQ=</PHRASE> <PHRASE Label="la_ShortToolTip_SetPrimary" Module="Core" Type="1">UHJpbWFyeQ==</PHRASE> <PHRASE Label="la_ShortToolTip_SynchronizeLanguages" Module="Core" Type="1">U3luY2hyb25pemU=</PHRASE> <PHRASE Label="la_ShortToolTip_View" Module="Core" Type="1">Vmlldw==</PHRASE> <PHRASE Label="la_Show" Module="Core" Type="1">U2hvdw==</PHRASE> <PHRASE Label="la_SQLAffectedRows" Module="Core" Type="1">QWZmZWN0ZWQgcm93cw==</PHRASE> <PHRASE Label="la_SQLRuntime" Module="Core" Type="1">RXhlY3V0ZWQgaW46</PHRASE> <PHRASE Label="la_step" Module="Core" Type="1">U3RlcA==</PHRASE> <PHRASE Label="la_StyleDefinition" Module="Core" Type="1">RGVmaW5pdGlvbg==</PHRASE> <PHRASE Label="la_StylePreview" Module="Core" Type="1">UHJldmlldw==</PHRASE> <PHRASE Label="la_sunday" Module="Core" Type="1">U3VuZGF5</PHRASE> <PHRASE Label="la_System" Module="Core" Type="1">U3lzdGVt</PHRASE> <PHRASE Label="la_tab_AdminUI" Module="Core" Type="1">QWRtaW5pc3RyYXRpb24gUGFuZWwgVUk=</PHRASE> <PHRASE Label="la_tab_AdvancedView" Module="Core" Type="1">QWR2YW5jZWQgVmlldw==</PHRASE> <PHRASE Label="la_tab_Backup" Module="Core" Type="1">QmFja3Vw</PHRASE> <PHRASE Label="la_tab_BanList" Module="Core" Type="1">QmFuIFJ1bGVz</PHRASE> <PHRASE Label="la_tab_BaseStyles" Module="Core" Type="1">QmFzZSBTdHlsZXM=</PHRASE> <PHRASE Label="la_tab_BlockStyles" Module="Core" Type="1">QmxvY2sgU3R5bGVz</PHRASE> <PHRASE Label="la_tab_Browse" Module="Core" Type="1">Q2F0YWxvZw==</PHRASE> <PHRASE Label="la_tab_BrowsePages" Module="Core" Type="1">QnJvd3NlIFdlYnNpdGU=</PHRASE> <PHRASE Label="la_tab_Categories" Module="Core" Type="1">U2VjdGlvbnM=</PHRASE> <PHRASE Label="la_tab_ChangeLog" Module="Core" Type="1">Q2hhbmdlcyBMb2c=</PHRASE> <PHRASE Label="la_tab_CMSForms" Module="Core" Type="1">Rm9ybXM=</PHRASE> <PHRASE Label="la_tab_Community" Module="Core" Type="1">VXNlciBNYW5hZ2VtZW50</PHRASE> <PHRASE Label="la_tab_ConfigCustom" Module="Core" Type="1">Q3VzdG9tIEZpZWxkcw==</PHRASE> <PHRASE Label="la_tab_ConfigE-mail" Module="Core" Type="1">RS1tYWlsIEV2ZW50cw==</PHRASE> <PHRASE Label="la_tab_ConfigGeneral" Module="Core" Type="1">R2VuZXJhbCBTZXR0aW5ncw==</PHRASE> <PHRASE Label="la_tab_ConfigOutput" Module="Core" Type="1">T3V0cHV0</PHRASE> <PHRASE Label="la_tab_ConfigSearch" Module="Core" Type="1">U2VhcmNo</PHRASE> <PHRASE Label="la_tab_ConfigSettings" Module="Core" Type="1">R2VuZXJhbA==</PHRASE> <PHRASE Label="la_tab_Custom" Module="Core" Type="1">Q3VzdG9t</PHRASE> <PHRASE Label="la_tab_E-mails" Module="Core" Type="1">RS1tYWlsIFRlbXBsYXRlcw==</PHRASE> <PHRASE Label="la_tab_EmailCommunication" Module="Core" Type="1">RS1tYWlsIENvbW11bmljYXRpb24=</PHRASE> <PHRASE Label="la_tab_EmailEvents" Module="Core" Type="1">RW1haWwgRXZlbnRz</PHRASE> <PHRASE Label="la_tab_EmailLog" Module="Core" Type="1">RS1tYWlsIExvZw==</PHRASE> <PHRASE Label="la_tab_EmailQueue" Module="Core" Type="1">RW1haWwgUXVldWU=</PHRASE> <PHRASE Label="la_tab_Fields" Module="Core" Type="1">RmllbGRz</PHRASE> <PHRASE Label="la_tab_Files" Module="Core" Type="1">RmlsZXM=</PHRASE> <PHRASE Label="la_tab_FormsConfig" Module="Core" Type="1">Rm9ybXMgQ29uZmlndXJhdGlvbg==</PHRASE> <PHRASE Label="la_tab_General" Module="Core" Type="1">R2VuZXJhbA==</PHRASE> <PHRASE Label="la_tab_GeneralSettings" Module="Core" Type="1">R2VuZXJhbA==</PHRASE> <PHRASE Label="la_tab_Groups" Module="Core" Type="1">R3JvdXBz</PHRASE> <PHRASE Label="la_tab_Help" Module="Core" Type="1">SGVscA==</PHRASE> <PHRASE Label="la_tab_Images" Module="Core" Type="1">SW1hZ2Vz</PHRASE> <PHRASE Label="la_tab_ImportData" Module="Core" Type="1">SW1wb3J0IERhdGE=</PHRASE> <PHRASE Label="la_tab_Items" Module="Core" Type="1">SXRlbXM=</PHRASE> <PHRASE Label="la_tab_Labels" Module="Core" Type="1">TGFiZWxz</PHRASE> <PHRASE Label="la_tab_Messages" Module="Core" Type="1">TWVzc2FnZXM=</PHRASE> <PHRASE Label="la_tab_PackageContent" Module="Core" Type="1">UGFja2FnZSBDb250ZW50</PHRASE> <PHRASE Label="la_tab_Permissions" Module="Core" Type="1">UGVybWlzc2lvbnM=</PHRASE> <PHRASE Label="la_tab_PermissionTypes" Module="Core" Type="1">UGVybWlzc2lvbiBUeXBlcw==</PHRASE> <PHRASE Label="la_tab_PromoBlocks" Module="Core" Type="1">UHJvbW8gQmxvY2tz</PHRASE> <PHRASE Label="la_tab_Properties" Module="Core" Type="1">UHJvcGVydGllcw==</PHRASE> <PHRASE Label="la_tab_QueryDB" Module="Core" Type="1">UXVlcnkgRGF0YWJhc2U=</PHRASE> <PHRASE Label="la_tab_Regional" Module="Core" Type="1">UmVnaW9uYWw=</PHRASE> <PHRASE Label="la_tab_Related_Searches" Module="Core" Type="1">UmVsYXRlZCBTZWFyY2hlcw==</PHRASE> <PHRASE Label="la_tab_Relations" Module="Core" Type="1">UmVsYXRpb25z</PHRASE> <PHRASE Label="la_tab_Reports" Module="Core" Type="1">U3lzdGVtIExvZ3M=</PHRASE> <PHRASE Label="la_tab_Restore" Module="Core" Type="1">UmVzdG9yZQ==</PHRASE> <PHRASE Label="la_tab_Reviews" Module="Core" Type="1">Q29tbWVudHM=</PHRASE> <PHRASE Label="la_Tab_Search" Module="Core" Type="1">U2VhcmNo</PHRASE> <PHRASE Label="la_tab_SearchLog" Module="Core" Type="1">U2VhcmNoIExvZw==</PHRASE> <PHRASE Label="la_tab_ServerInfo" Module="Core" Type="1">UEhQIEluZm9ybWF0aW9u</PHRASE> <PHRASE Label="la_Tab_Service" Module="Core" Type="1">U3lzdGVtIFRvb2xz</PHRASE> <PHRASE Label="la_tab_SessionLog" Module="Core" Type="1">U2Vzc2lvbiBMb2c=</PHRASE> <PHRASE Label="la_tab_SessionLogs" Module="Core" Type="1">U2Vzc2lvbiBMb2c=</PHRASE> <PHRASE Label="la_tab_Settings" Module="Core" Type="1">U2V0dGluZ3M=</PHRASE> <PHRASE Label="la_tab_ShowAll" Module="Core" Type="1">U2hvdyBBbGw=</PHRASE> <PHRASE Label="la_tab_ShowStructure" Module="Core" Type="1">U2hvdyBTdHJ1Y3R1cmU=</PHRASE> <PHRASE Label="la_tab_Site_Structure" Module="Core" Type="1">V2Vic2l0ZSAmIENvbnRlbnQ=</PHRASE> <PHRASE Label="la_tab_Skins" Module="Core" Type="1">QWRtaW4gU2tpbnM=</PHRASE> <PHRASE Label="la_tab_Summary" Module="Core" Type="1">U3VtbWFyeQ==</PHRASE> <PHRASE Label="la_tab_Sys_Config" Module="Core" Type="1">Q29uZmlndXJhdGlvbg==</PHRASE> <PHRASE Label="la_tab_taglibrary" Module="Core" Type="1">VGFnIGxpYnJhcnk=</PHRASE> <PHRASE Label="la_tab_Themes" Module="Core" Type="1">VGhlbWVz</PHRASE> <PHRASE Label="la_tab_Tools" Module="Core" Type="1">VG9vbHM=</PHRASE> <PHRASE Label="la_tab_Users" Module="Core" Type="1">VXNlcnM=</PHRASE> <PHRASE Label="la_tab_User_Groups" Module="Core" Type="1">R3JvdXBz</PHRASE> <PHRASE Label="la_tab_User_List" Module="Core" Type="1">VXNlcnM=</PHRASE> <PHRASE Label="la_tab_VisitorLog" Module="Core" Type="1">VmlzaXRvciBMb2c=</PHRASE> <PHRASE Label="la_tab_Visits" Module="Core" Type="1">VmlzaXRz</PHRASE> <PHRASE Label="la_Text" Module="Core" Type="1">dGV4dA==</PHRASE> <PHRASE Label="la_Text_Admin" Module="Core" Type="1">QWRtaW4=</PHRASE> <PHRASE Label="la_text_advanced" Module="Core" Type="1">QWR2YW5jZWQ=</PHRASE> <PHRASE Label="la_Text_All" Module="Core" Type="1">QWxs</PHRASE> <PHRASE Label="la_text_AutoRefresh" Module="Core" Type="1">QXV0by1SZWZyZXNo</PHRASE> <PHRASE Label="la_Text_BackupComplete" Module="Core" Type="1">QmFjayB1cCBoYXMgYmVlbiBjb21wbGV0ZWQuIFRoZSBiYWNrdXAgZmlsZSBpczo=</PHRASE> <PHRASE Label="la_Text_backup_access" Module="Core" Type="1">SW4tUG9ydGFsIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHdyaXRlIHRvIHRoaXMgZGlyZWN0b3J5</PHRASE> <PHRASE Label="la_Text_Backup_Info" Module="Core" Type="1">VGhpcyB1dGlsaXR5IGFsbG93cyB5b3UgdG8gYmFja3VwIHlvdXIgSW4tUG9ydGFsIGRhdGFiYXNlIHNvIGl0IGNhbiBiZSByZXN0b3JlZCBhdCBsYXRlciBpbiBuZWVkZWQu</PHRASE> <PHRASE Label="la_text_Bytes" Module="Core" Type="1">Ynl0ZXM=</PHRASE> <PHRASE Label="la_Text_Catalog" Module="Core" Type="1">Q2F0YWxvZw==</PHRASE> <PHRASE Label="la_Text_Categories" Module="Core" Type="1">U2VjdGlvbnM=</PHRASE> <PHRASE Label="la_Text_Category" Module="Core" Type="1">U2VjdGlvbg==</PHRASE> <PHRASE Label="la_text_ClearClipboardWarning" Module="Core" Type="1">WW91IGFyZSBhYm91dCB0byBjbGVhciBjbGlwYm9hcmQgY29udGVudCENClByZXNzIE9LIHRvIGNvbnRpbnVlIG9yIENhbmNlbCB0byByZXR1cm4gdG8gcHJldmlvdXMgc2NyZWVuLg==</PHRASE> <PHRASE Label="la_Text_CustomFields" Module="Core" Type="1">Q3VzdG9tIEZpZWxkcw==</PHRASE> <PHRASE Label="la_Text_DataType_1" Module="Core" Type="1">c2VjdGlvbnM=</PHRASE> <PHRASE Label="la_Text_Date_Time_Settings" Module="Core" Type="1">RGF0ZS9UaW1lIFNldHRpbmdz</PHRASE> <PHRASE Label="la_text_db_warning" Module="Core" Type="1">UnVubmluZyB0aGlzIHV0aWxpdHkgd2lsbCBhZmZlY3QgeW91ciBkYXRhYmFzZS4gUGxlYXNlIGJlIGFkdmlzZWQgdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHV0aWxpdHkgYXQgeW91ciBvd24gcmlzay4gSW4tUG9ydGFsIG9yIGl0J3MgZGV2ZWxvcGVycyBjYW4gbm90IGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgY29ycnVwdCBkYXRhIG9yIGRhdGEgbG9zcy4=</PHRASE> <PHRASE Label="la_Text_Default" Module="Core" Type="1">RGVmYXVsdA==</PHRASE> <PHRASE Label="la_Text_Delete" Module="Core" Type="1">RGVsZXRl</PHRASE> <PHRASE Label="la_Text_Disable" Module="Core" Type="1">RGlzYWJsZQ==</PHRASE> <PHRASE Label="la_text_disclaimer_part1" Module="Core" Type="1">UnVubmluZyB0aGlzIHV0aWxpdHkgd2lsbCBhZmZlY3QgeW91ciBkYXRhYmFzZS4gUGxlYXNlIGJlIGFkdmlzZWQgdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHV0aWxpdHkgYXQgeW91ciBvd24gcmlzay4gSW4tUG9ydGFsIG9yIGl0J3MgZGV2ZWxvcGVycyBjYW4gbm90IGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgY29ycnVwdCBkYXRhIG9yIGRhdGEgbG9zcy4=</PHRASE> <PHRASE Label="la_text_disclaimer_part2" Module="Core" Type="1">UGxlYXNlIG1ha2Ugc3VyZSB0byBCQUNLVVAgeW91ciBkYXRhYmFzZShzKSBiZWZvcmUgcnVubmluZyB0aGlzIHV0aWxpdHkh</PHRASE> <PHRASE Label="la_Text_Edit" Module="Core" Type="1">RWRpdA==</PHRASE> <PHRASE Label="la_Text_Email" Module="Core" Type="1">RW1haWw=</PHRASE> <PHRASE Label="la_text_FollowingLinesWereNotImported" Module="Core" Type="1">Rm9sbG93aW5nIGxpbmVzIHdlcmUgTk9UIGltcG9ydGVk</PHRASE> <PHRASE Label="la_Text_FrontOnly" Module="Core" Type="1">RnJvbnQtRW5kIE9ubHk=</PHRASE> <PHRASE Label="la_Text_General" Module="Core" Type="1">R2VuZXJhbA==</PHRASE> <PHRASE Label="la_Text_Hot" Module="Core" Type="1">SG90</PHRASE> <PHRASE Label="la_Text_IAgree" Module="Core" Type="1">SSBhZ3JlZSB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnM=</PHRASE> <PHRASE Label="la_text_ImportResults" Module="Core" Type="1">SW1wb3J0IFJlc3VsdHM=</PHRASE> <PHRASE Label="la_Text_InDevelopment" Module="Core" Type="1">SW4gRGV2ZWxvcG1lbnQ=</PHRASE> <PHRASE Label="la_Text_Invert" Module="Core" Type="1">SW52ZXJ0</PHRASE> <PHRASE Label="la_text_keyword" Module="Core" Type="1">S2V5d29yZA==</PHRASE> <PHRASE Label="la_Text_Link" Module="Core" Type="1">TGluaw==</PHRASE> <PHRASE Label="la_Text_MetaInfo" Module="Core" Type="1">RGVmYXVsdCBNRVRBIGtleXdvcmRz</PHRASE> <PHRASE Label="la_text_min_password" Module="Core" Type="1">TWluaW11bSBwYXNzd29yZCBsZW5ndGg=</PHRASE> <PHRASE Label="la_text_min_username" Module="Core" Type="1">VXNlciBuYW1lIGxlbmd0aCAobWluIC0gbWF4KQ==</PHRASE> <PHRASE Label="la_text_multipleshow" Module="Core" Type="1">U2hvdyBtdWx0aXBsZQ==</PHRASE> <PHRASE Label="la_Text_New" Module="Core" Type="1">TmV3</PHRASE> <PHRASE Label="la_Text_None" Module="Core" Type="1">Tm9uZQ==</PHRASE> <PHRASE Label="la_text_NoPermission" Module="Core" Type="1">Tm8gUGVybWlzc2lvbg==</PHRASE> <PHRASE Label="la_text_Or" Module="Core" Type="1">b3I=</PHRASE> <PHRASE Label="la_Text_Phone" Module="Core" Type="1">UGhvbmU=</PHRASE> <PHRASE Label="la_Text_Pop" Module="Core" Type="1">UG9wdWxhcg==</PHRASE> <PHRASE Label="la_text_popularity" Module="Core" Type="1">UG9wdWxhcml0eQ==</PHRASE> <PHRASE Label="la_text_ready_to_install" Module="Core" Type="1">UmVhZHkgdG8gSW5zdGFsbA==</PHRASE> <PHRASE Label="la_text_RecordsAdded" Module="Core" Type="1">cmVjb3JkcyBhZGRlZA==</PHRASE> <PHRASE Label="la_text_RecordsUpdated" Module="Core" Type="1">cmVjb3JkcyB1cGRhdGVk</PHRASE> <PHRASE Label="la_text_RequiredFields" Module="Core" Type="1">UmVxdWlyZWQgZmllbGRz</PHRASE> <PHRASE Label="la_Text_Restore_Heading" Module="Core" Type="1">SGVyZSB5b3UgY2FuIHJlc3RvcmUgeW91ciBkYXRhYmFzZSBmcm9tIGEgcHJldmlvdXNseSBiYWNrZWQgdXAgc25hcHNob3QuIFJlc3RvcmluZyB5b3VyIGRhdGFiYXNlIHdpbGwgZGVsZXRlIGFsbCBvZiB5b3VyIGN1cnJlbnQgZGF0YSBhbmQgbG9nIHlvdSBvdXQgb2YgdGhlIHN5c3RlbS4=</PHRASE> <PHRASE Label="la_text_Review" Module="Core" Type="1">Q29tbWVudA==</PHRASE> <PHRASE Label="la_Text_Reviews" Module="Core" Type="1">Q29tbWVudHM=</PHRASE> <PHRASE Label="la_Text_RootCategory" Module="Core" Type="1">TW9kdWxlIFJvb3QgU2VjdGlvbg==</PHRASE> <PHRASE Label="la_text_Save" Module="Core" Type="1">U2F2ZQ==</PHRASE> <PHRASE Label="la_Text_Select" Module="Core" Type="1">U2VsZWN0</PHRASE> <PHRASE Label="la_text_sess_expired" Module="Core" Type="1">U2Vzc2lvbiBFeHBpcmVk</PHRASE> <PHRASE Label="la_Text_Simple" Module="Core" Type="1">U2ltcGxl</PHRASE> <PHRASE Label="la_Text_Sort" Module="Core" Type="1">U29ydA==</PHRASE> <PHRASE Label="la_Text_Unselect" Module="Core" Type="1">VW5zZWxlY3Q=</PHRASE> <PHRASE Label="la_Text_User" Module="Core" Type="1">VXNlcg==</PHRASE> <PHRASE Label="la_Text_Users" Module="Core" Type="1">VXNlcnM=</PHRASE> <PHRASE Label="la_Text_Version" Module="Core" Type="1">VmVyc2lvbg==</PHRASE> <PHRASE Label="la_Text_View" Module="Core" Type="1">Vmlldw==</PHRASE> <PHRASE Label="la_title_AddingBanRule" Module="Core" Type="1">QWRkaW5nIEJhbiBSdWxl</PHRASE> <PHRASE Label="la_title_AddingCountryState" Module="Core" Type="1">QWRkaW5nIENvdW50cnkvU3RhdGU=</PHRASE> <PHRASE Label="la_title_addingCustom" Module="Core" Type="1">QWRkaW5nIEN1c3RvbSBGaWVsZA==</PHRASE> <PHRASE Label="la_title_AddingFile" Module="Core" Type="1">QWRkaW5nIEZpbGU=</PHRASE> <PHRASE Label="la_title_AddingItemFilter" Module="Core" Type="1">QWRkaW5nIEl0ZW0gRmlsdGVy</PHRASE> <PHRASE Label="la_title_AddingMailingList" Module="Core" Type="1">QWRkaW5nIE1haWxpbmcgTGlzdA==</PHRASE> <PHRASE Label="la_title_AddingPermissionType" Module="Core" Type="1">QWRkaW5nIFBlcm1pc3Npb24gVHlwZQ==</PHRASE> <PHRASE Label="la_title_AddingPromoBlock" Module="Core" Type="1">QWRkaW5nIFByb21vIEJsb2Nr</PHRASE> <PHRASE Label="la_title_AddingPromoBlockGroup" Module="Core" Type="1">QWRkaW5nIFByb21vIEJsb2NrIEdyb3Vw</PHRASE> <PHRASE Label="la_title_AddingScheduledTask" Module="Core" Type="1">QWRkaW5nIFNjaGVkdWxlZCBUYXNr</PHRASE> <PHRASE Label="la_title_AddingSiteDomain" Module="Core" Type="1">QWRkaW5nIFNpdGUgRG9tYWlu</PHRASE> <PHRASE Label="la_title_AddingSkin" Module="Core" Type="1">QWRkaW5nIFNraW4=</PHRASE> <PHRASE Label="la_title_AddingSpellingDictionary" Module="Core" Type="1">QWRkaW5nIFNwZWxsaW5nIERpY3Rpb25hcnk=</PHRASE> <PHRASE Label="la_title_AddingStopWord" Module="Core" Type="1">QWRkaW5nIFN0b3AgV29yZA==</PHRASE> <PHRASE Label="la_title_AddingThemeFile" Module="Core" Type="1">QWRkaW5nIFRoZW1lIFRlbXBsYXRl</PHRASE> <PHRASE Label="la_title_AddingThesaurus" Module="Core" Type="1">QWRkaW5nIFRoZXNhdXJ1cw==</PHRASE> <PHRASE Label="la_title_Adding_BaseStyle" Module="Core" Type="1">QWRkaW5nIEJhc2UgU3R5bGU=</PHRASE> <PHRASE Label="la_title_Adding_BlockStyle" Module="Core" Type="1">QWRkaW5nIEJsb2NrIFN0eWxl</PHRASE> <PHRASE Label="la_title_Adding_Category" Module="Core" Type="1">QWRkaW5nIFNlY3Rpb24=</PHRASE> <PHRASE Label="la_title_Adding_ConfigSearch" Module="Core" Type="1">QWRkaW5nIFNlYXJjaCBGaWVsZA==</PHRASE> <PHRASE Label="la_title_Adding_Content" Module="Core" Type="1">QWRkaW5nIENNUyBCbG9jaw==</PHRASE> <PHRASE Label="la_title_Adding_E-mail" Module="Core" Type="1">QWRkaW5nIEVtYWlsIEV2ZW50</PHRASE> <PHRASE Label="la_title_Adding_Form" Module="Core" Type="1">QWRkaW5nIEZvcm0=</PHRASE> <PHRASE Label="la_title_Adding_FormField" Module="Core" Type="1">QWRkaW5nIEZvcm0gRmllbGQ=</PHRASE> <PHRASE Label="la_title_Adding_Group" Module="Core" Type="1">QWRkaW5nIEdyb3Vw</PHRASE> <PHRASE Label="la_title_Adding_Image" Module="Core" Type="1">QWRkaW5nIEltYWdl</PHRASE> <PHRASE Label="la_title_Adding_Language" Module="Core" Type="1">QWRkaW5nIExhbmd1YWdl</PHRASE> <PHRASE Label="la_title_Adding_Phrase" Module="Core" Type="1">QWRkaW5nIFBocmFzZQ==</PHRASE> <PHRASE Label="la_title_Adding_RelatedSearch_Keyword" Module="Core" Type="1">QWRkaW5nIEtleXdvcmQ=</PHRASE> <PHRASE Label="la_title_Adding_Relationship" Module="Core" Type="1">QWRkaW5nIFJlbGF0aW9uc2hpcA==</PHRASE> <PHRASE Label="la_title_Adding_Review" Module="Core" Type="1">QWRkaW5nIENvbW1lbnQ=</PHRASE> <PHRASE Label="la_title_Adding_Theme" Module="Core" Type="1">QWRkaW5nIFRoZW1l</PHRASE> <PHRASE Label="la_title_Adding_User" Module="Core" Type="1">QWRkaW5nIFVzZXI=</PHRASE> <PHRASE Label="la_title_AdditionalPermissions" Module="Core" Type="1">QWRkaXRpb25hbCBQZXJtaXNzaW9ucw==</PHRASE> <PHRASE Label="la_title_Administrators" Module="Core" Type="1">QWRtaW5pc3RyYXRvcnM=</PHRASE> <PHRASE Label="la_title_Advanced" Module="Core" Type="1">QWR2YW5jZWQ=</PHRASE> <PHRASE Label="la_title_AdvancedView" Module="Core" Type="1">U2hvd2luZyBhbGwgcmVnYXJkbGVzcyBvZiBTdHJ1Y3R1cmU=</PHRASE> <PHRASE Label="la_title_BaseStyles" Module="Core" Type="1">QmFzZSBTdHlsZXM=</PHRASE> <PHRASE Label="la_title_BlockStyles" Module="Core" Type="1">QmxvY2sgU3R5bGVz</PHRASE> <PHRASE Label="la_title_BounceSettings" Module="Core" Type="1">Qm91bmNlIFBPUDMgU2VydmVyIFNldHRpbmdz</PHRASE> <PHRASE Label="la_title_Categories" Module="Core" Type="1">U2VjdGlvbnM=</PHRASE> <PHRASE Label="la_title_category_select" Module="Core" Type="1">U2VsZWN0IHNlY3Rpb24=</PHRASE> <PHRASE Label="la_title_ColumnPicker" Module="Core" Type="1">Q29sdW1uIFBpY2tlcg==</PHRASE> <PHRASE Label="la_title_Configuration" Module="Core" Type="1">Q29uZmlndXJhdGlvbg==</PHRASE> <PHRASE Label="la_Title_ContactInformation" Module="Core" Type="1">Q29udGFjdCBJbmZvcm1hdGlvbg==</PHRASE> <PHRASE Label="la_title_CountryStates" Module="Core" Type="1">Q291bnRyaWVzICYgU3RhdGVz</PHRASE> <PHRASE Label="la_title_CSVExport" Module="Core" Type="1">Q1NWIEV4cG9ydA==</PHRASE> <PHRASE Label="la_title_CSVImport" Module="Core" Type="1">Q1NWIEltcG9ydA==</PHRASE> <PHRASE Label="la_title_Custom" Module="Core" Type="1">Q3VzdG9t</PHRASE> <PHRASE Label="la_title_CustomFields" Module="Core" Type="1">Q3VzdG9tIEZpZWxkcw==</PHRASE> <PHRASE Label="la_title_EditingBanRule" Module="Core" Type="1">RWRpdGluZyBCYW4gUnVsZQ==</PHRASE> <PHRASE Label="la_title_EditingChangeLog" Module="Core" Type="1">RWRpdGluZyBDaGFuZ2VzIExvZw==</PHRASE> <PHRASE Label="la_title_EditingContentAutosaved" Module="Core" Type="1">Q29udGVudCBFZGl0b3IgLSBBdXRvLXNhdmVkIGF0ICVz</PHRASE> <PHRASE Label="la_title_EditingCountryState" Module="Core" Type="1">RWRpdGluZyBDb3VudHJ5L1N0YXRl</PHRASE> <PHRASE Label="la_title_EditingDraft" Module="Core" Type="1">RWRpdGluZyBEcmFmdCAoJTIkcyk=</PHRASE> <PHRASE Label="la_title_EditingEmailEvent" Module="Core" Type="1">RWRpdGluZyBFbWFpbCBFdmVudA==</PHRASE> <PHRASE Label="la_title_EditingFile" Module="Core" Type="1">RWRpdGluZyBGaWxl</PHRASE> <PHRASE Label="la_title_EditingItemFilter" Module="Core" Type="1">RWRpdGluZyBJdGVtIEZpbHRlcg==</PHRASE> <PHRASE Label="la_title_EditingMembership" Module="Core" Type="1">RWRpdGluZyBNZW1iZXJzaGlw</PHRASE> <PHRASE Label="la_title_EditingPermissionType" Module="Core" Type="1">RWRpdGluZyBQZXJtaXNzaW9uIFR5cGU=</PHRASE> <PHRASE Label="la_title_EditingPromoBlock" Module="Core" Type="1">RWRpdGluZyBQcm9tbyBCbG9jaw==</PHRASE> <PHRASE Label="la_title_EditingPromoBlockGroup" Module="Core" Type="1">RWRpdGluZyBQcm9tbyBCbG9jayBHcm91cA==</PHRASE> <PHRASE Label="la_title_EditingScheduledTask" Module="Core" Type="1">RWRpdGluZyBTY2hlZHVsZWQgVGFzaw==</PHRASE> <PHRASE Label="la_title_EditingSiteDomain" Module="Core" Type="1">RWRpdGluZyBTaXRlIERvbWFpbg==</PHRASE> <PHRASE Label="la_title_EditingSkin" Module="Core" Type="1">RWRpdGluZyBTa2lu</PHRASE> <PHRASE Label="la_title_EditingSpamReport" Module="Core" Type="1">RWRpdGluZyBTUEFNIFJlcG9ydA==</PHRASE> <PHRASE Label="la_title_EditingSpellingDictionary" Module="Core" Type="1">RWRpdGluZyBTcGVsbGluZyBEaWN0aW9uYXJ5</PHRASE> <PHRASE Label="la_title_EditingStopWord" Module="Core" Type="1">RWRpdGluZyBTdG9wIFdvcmQ=</PHRASE> <PHRASE Label="la_title_EditingStyle" Module="Core" Type="1">RWRpdGluZyBTdHlsZQ==</PHRASE> <PHRASE Label="la_title_EditingThemeFile" Module="Core" Type="1">RWRpdGluZyBUaGVtZSBGaWxl</PHRASE> <PHRASE Label="la_title_EditingThesaurus" Module="Core" Type="1">RWRpdGluZyBUaGVzYXVydXM=</PHRASE> <PHRASE Label="la_title_EditingTranslation" Module="Core" Type="1">RWRpdGluZyBUcmFuc2xhdGlvbg==</PHRASE> <PHRASE Label="la_title_Editing_BaseStyle" Module="Core" Type="1">RWRpdGluZyBCYXNlIFN0eWxl</PHRASE> <PHRASE Label="la_title_Editing_BlockStyle" Module="Core" Type="1">RWRpdGluZyBCbG9jayBTdHlsZQ==</PHRASE> <PHRASE Label="la_title_Editing_Category" Module="Core" Type="1">RWRpdGluZyBTZWN0aW9u</PHRASE> <PHRASE Label="la_title_Editing_Content" Module="Core" Type="1">RWRpdGluZyBDTVMgQmxvY2s=</PHRASE> <PHRASE Label="la_title_Editing_CustomField" Module="Core" Type="1">RWRpdGluZyBDdXN0b20gRmllbGQ=</PHRASE> <PHRASE Label="la_title_Editing_E-mail" Module="Core" Type="1">RWRpdGluZyBFLW1haWw=</PHRASE> <PHRASE Label="la_title_Editing_Form" Module="Core" Type="1">RWRpdGluZyBGb3Jt</PHRASE> <PHRASE Label="la_title_Editing_FormField" Module="Core" Type="1">RWRpdGluZyBGb3JtIEZpZWxk</PHRASE> <PHRASE Label="la_title_Editing_Group" Module="Core" Type="1">RWRpdGluZyBHcm91cA==</PHRASE> <PHRASE Label="la_title_Editing_Image" Module="Core" Type="1">RWRpdGluZyBJbWFnZQ==</PHRASE> <PHRASE Label="la_title_Editing_Language" Module="Core" Type="1">RWRpdGluZyBMYW5ndWFnZQ==</PHRASE> <PHRASE Label="la_title_Editing_Phrase" Module="Core" Type="1">RWRpdGluZyBQaHJhc2U=</PHRASE> <PHRASE Label="la_title_Editing_RelatedSearch_Keyword" Module="Core" Type="1">RWRpdGluZyBLZXl3b3Jk</PHRASE> <PHRASE Label="la_title_Editing_Relationship" Module="Core" Type="1">RWRpdGluZyBSZWxhdGlvbnNoaXA=</PHRASE> <PHRASE Label="la_title_Editing_Review" Module="Core" Type="1">RWRpdGluZyBDb21tZW50</PHRASE> <PHRASE Label="la_title_Editing_Theme" Module="Core" Type="1">RWRpdGluZyBUaGVtZQ==</PHRASE> <PHRASE Label="la_title_Editing_User" Module="Core" Type="1">RWRpdGluZyBVc2Vy</PHRASE> <PHRASE Label="la_title_EmailCommunication" Module="Core" Type="1">RS1tYWlsIENvbW11bmljYXRpb24=</PHRASE> <PHRASE Label="la_title_EmailEvents" Module="Core" Type="1">RS1tYWlsIEV2ZW50cw==</PHRASE> <PHRASE Label="la_title_EmailMessages" Module="Core" Type="1">RS1tYWlscw==</PHRASE> <PHRASE Label="la_title_EmailSettings" Module="Core" Type="1">RS1tYWlsIFNldHRpbmdz</PHRASE> <PHRASE Label="la_title_ExportLanguagePackResults" Module="Core" Type="1">RXhwb3J0IExhbmd1YWdlIFBhY2sgLSBSZXN1bHRz</PHRASE> <PHRASE Label="la_title_ExportLanguagePackStep1" Module="Core" Type="1">RXhwb3J0IExhbmd1YWdlIFBhY2sgLSBTdGVwMQ==</PHRASE> <PHRASE Label="la_title_Fields" Module="Core" Type="1">RmllbGRz</PHRASE> <PHRASE Label="la_title_Files" Module="Core" Type="1">RmlsZXM=</PHRASE> <PHRASE Label="la_title_Forms" Module="Core" Type="1">Rm9ybXM=</PHRASE> <PHRASE Label="la_title_FormSubmissions" Module="Core" Type="1">Rm9ybSBTdWJtaXNzaW9ucw==</PHRASE> <PHRASE Label="la_title_General" Module="Core" Type="1">R2VuZXJhbA==</PHRASE> <PHRASE Label="la_title_Groups" Module="Core" Type="1">R3JvdXBz</PHRASE> <PHRASE Label="la_title_Images" Module="Core" Type="1">SW1hZ2Vz</PHRASE> <PHRASE Label="la_title_InstallLanguagePackStep1" Module="Core" Type="1">SW5zdGFsbCBMYW5ndWFnZSBQYWNrIC0gU3RlcCAx</PHRASE> <PHRASE Label="la_title_InstallLanguagePackStep2" Module="Core" Type="1">SW5zdGFsbCBMYW5ndWFnZSBQYWNrIC0gU3RlcCAy</PHRASE> <PHRASE Label="la_title_ItemFilters" Module="Core" Type="1">SXRlbSBGaWx0ZXJz</PHRASE> <PHRASE Label="la_title_Items" Module="Core" Type="1">SXRlbXM=</PHRASE> <PHRASE Label="la_title_Labels" Module="Core" Type="1">TGFiZWxz</PHRASE> <PHRASE Label="la_title_LangManagement" Module="Core" Type="1">TGFuZy4gTWFuYWdlbWVudA==</PHRASE> <PHRASE Label="la_title_LanguagePacks" Module="Core" Type="1">TGFuZ3VhZ2UgUGFja3M=</PHRASE> <PHRASE Label="la_title_LanguagesManagement" Module="Core" Type="1">TGFuZ3VhZ2VzIE1hbmFnZW1lbnQ=</PHRASE> <PHRASE Label="la_title_Loading" Module="Core" Type="1">TG9hZGluZyAuLi4=</PHRASE> <PHRASE Label="la_title_MailingLists" Module="Core" Type="1">TWFpbGluZ3M=</PHRASE> <PHRASE Label="la_title_Messages" Module="Core" Type="1">TWVzc2FnZXM=</PHRASE> <PHRASE Label="la_title_Module_Status" Module="Core" Type="1">TW9kdWxlcw==</PHRASE> <PHRASE Label="la_title_NewEmailEvent" Module="Core" Type="1">TmV3IEVtYWlsIEV2ZW50</PHRASE> <PHRASE Label="la_title_NewFile" Module="Core" Type="1">TmV3IEZpbGU=</PHRASE> <PHRASE Label="la_title_NewReply" Module="Core" Type="1">TmV3IFJlcGx5</PHRASE> <PHRASE Label="la_title_NewScheduledTask" Module="Core" Type="1">TmV3IFNjaGVkdWxlZCBUYXNr</PHRASE> <PHRASE Label="la_title_NewTheme" Module="Core" Type="1">TmV3IFRoZW1l</PHRASE> <PHRASE Label="la_title_NewThemeFile" Module="Core" Type="1">TmV3IFRoZW1lIFRlbXBsYXRl</PHRASE> <PHRASE Label="la_title_New_BaseStyle" Module="Core" Type="1">TmV3IEJhc2UgU3R5bGU=</PHRASE> <PHRASE Label="la_title_New_BlockStyle" Module="Core" Type="1">TmV3IEJsb2NrIFN0eWxl</PHRASE> <PHRASE Label="la_title_New_Category" Module="Core" Type="1">TmV3IFNlY3Rpb24=</PHRASE> <PHRASE Label="la_title_New_ConfigSearch" Module="Core" Type="1">TmV3IEZpZWxk</PHRASE> <PHRASE Label="la_title_New_Image" Module="Core" Type="1">TmV3IEltYWdl</PHRASE> <PHRASE Label="la_title_New_Relationship" Module="Core" Type="1">TmV3IFJlbGF0aW9uc2hpcA==</PHRASE> <PHRASE Label="la_title_New_Review" Module="Core" Type="1">TmV3IENvbW1lbnQ=</PHRASE> <PHRASE Label="la_title_NoPermissions" Module="Core" Type="1">Tm8gUGVybWlzc2lvbnM=</PHRASE> <PHRASE Label="la_title_Permissions" Module="Core" Type="1">UGVybWlzc2lvbnM=</PHRASE> <PHRASE Label="la_title_Phrases" Module="Core" Type="1">TGFiZWxzICYgUGhyYXNlcw==</PHRASE> <PHRASE Label="la_Title_PleaseWait" Module="Core" Type="1">UGxlYXNlIFdhaXQ=</PHRASE> <PHRASE Label="la_title_PromoBlockGroups" Module="Core" Type="1">UHJvbW8gQmxvY2sgR3JvdXBz</PHRASE> <PHRASE Label="la_title_PromoBlocks" Module="Core" Type="1">UHJvbW8gQmxvY2tz</PHRASE> <PHRASE Label="la_title_Properties" Module="Core" Type="1">UHJvcGVydGllcw==</PHRASE> <PHRASE Label="la_title_RelatedSearches" Module="Core" Type="1">UmVsYXRlZCBTZWFyY2hlcw==</PHRASE> <PHRASE Label="la_title_Relations" Module="Core" Type="1">UmVsYXRpb25z</PHRASE> <PHRASE Label="la_title_ReplySettings" Module="Core" Type="1">UmVwbHkgUE9QMyBTZXJ2ZXIgU2V0dGluZ3M=</PHRASE> <PHRASE Label="la_title_Reviews" Module="Core" Type="1">Q29tbWVudHM=</PHRASE> <PHRASE Label="la_title_ScheduledTasks" Module="Core" Type="1">U2NoZWR1bGVkIFRhc2tz</PHRASE> <PHRASE Label="la_title_SelectGroup" Module="Core" Type="1">U2VsZWN0IEdyb3VwKHMp</PHRASE> <PHRASE Label="la_title_SelectUser" Module="Core" Type="1">U2VsZWN0IFVzZXI=</PHRASE> <PHRASE Label="LA_TITLE_SENDEMAIL" Module="Core" Type="1">U2VuZCBFLW1haWw=</PHRASE> <PHRASE Label="LA_TITLE_SENDINGPREPAREDEMAILS" Module="Core" Type="1">U2VuZGluZyBQcmVwYXJlZCBFLW1haWxz</PHRASE> <PHRASE Label="la_Title_SendMailComplete" Module="Core" Type="1">TWFpbCBoYXMgYmVlbiBzZW50IFN1Y2Nlc3NmdWxseQ==</PHRASE> <PHRASE Label="la_title_SiteDomains" Module="Core" Type="1">U2l0ZSBEb21haW5z</PHRASE> <PHRASE Label="la_title_SpamReports" Module="Core" Type="1">U1BBTSBSZXBvcnRz</PHRASE> <PHRASE Label="la_title_SpellingDictionary" Module="Core" Type="1">U3BlbGxpbmcgRGljdGlvbmFyeQ==</PHRASE> <PHRASE Label="la_title_StopWords" Module="Core" Type="1">U3RvcCBXb3Jkcw==</PHRASE> <PHRASE Label="la_title_Structure" Module="Core" Type="1">U3RydWN0dXJlICYgRGF0YQ==</PHRASE> <PHRASE Label="la_title_SystemTools" Module="Core" Type="1">U3lzdGVtIFRvb2xz</PHRASE> <PHRASE Label="la_title_SystemToolsClearTemplatesCache" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+RGVsZXRlcyBhbGwgY29tcGlsZWQgdGVtcGxhdGVzIGZyb20gQWRtaW4gQ29uc29sZSBhbmQgRnJvbnQtZW5kIHRoZW1lcy48L2xpPg0KICA8bGk+UmVjb21tZW5kZWQgZm9yIHRoZSBtYWludGVuYW5jZSBwdXJwb3Nlcywgc2luY2UgZG9lcyBub3QgcHJvdmlkZSBhbnkgYWR2YW50YWdlcyBleGNlcHQgZm9yIHRlbXBvcmFyeSBsb3dlcmluZyB1c2FnZSBvZiB0aGUgZGlzayBzcGFjZS4gQWxsIHRlbXBsYXRlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVjb21waWxlZCBhdCB0aGUgdGltZSBvZiB2aXNpdC48L2xpPg0KPC91bD4=">Q2xlYXIgVGVtcGxhdGVzIENhY2hl</PHRASE> <PHRASE Label="la_title_SystemToolsCommonlyUsedKeys" Module="Core" Type="1">Q29tbW9ubHkgVXNlZCBLZXlz</PHRASE> <PHRASE Label="la_title_SystemToolsDeploy" Module="Core" Type="1" Hint="PHVsPg0KPGxpPlRoaXMgZGVwbG95IHNjcmlwdCB3aWxsIGFwcGx5IGFsbCBEYXRhYmFzZSBDaGFuZ2VzIHN0b3JlZCBpbiA8Yj48dT5bbW9kdWxlXS9wcm9qZWN0X3VwZ3JhZGVzLnNxbDwvdT48L2I+IHRvIHRoZSBjdXJyZW50IHdlYnNpdGUgYW5kIHNhdmUgYXBwbGllZCBSZXZpc2lvbnMgaW4gQXBwbGllZERCUmV2aXNpb25zLjwvbGk+DQo8bGk+VGhpcyBkZXBsb3kgc2NyaXB0IHdpbGwgY3JlYXRlIGFsbCBuZXcgbGFuZ3VhZ2UgcGhyYXNlcyBieSByZS1pbXBvcnRpbmcgPGI+PHU+Y3VzdG9tL2luc3RhbGwvZW5nbGlzaC5sYW5nPC91PjwvYj4gZmlsZS48L2xpPg0KPGxpPlRoaXMgZGVwbG95IHNjcmlwdCB3aWxsIHJlc2V0IGFsbCBjYWNoZXMgYXQgb25jZTwvbGk+DQo8L3VsPg==">RGVwbG95IENoYW5nZXM=</PHRASE> <PHRASE Label="la_title_SystemToolsKeyName" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+TmFtZSBvZiB0aGUgS2V5IHVzZWQgdG8gZ2V0IG9yIHNldCB0aGUgZGF0YSAodmFsdWUpIGluIHRoZSBtZW1vcnkgY2FjaGUgKDxzdHJvbmc+PGk+a0FwcGxpY2F0aW9uOjpzZXRDYWNoZTwvaT48L3N0cm9uZz4gYW5kIDxzdHJvbmc+PGk+a0FwcGxpY2F0aW9uOjpnZXRDYWNoZTwvaT48L3N0cm9uZz4gbWV0aG9kcykuPC9saT4NCjwvdWw+">S2V5IE5hbWU=</PHRASE> <PHRASE Label="la_title_SystemToolsKeyValue" Module="Core" Type="1" Hint="Q3VycmVudCB2YWx1ZSBvciBhIG5ldyB2YWx1ZSAoZm9yIHNldHRpbmcpIG9mIHRoZSBrZXkgbmFtZSBzcGVjaWZpZWQgYWJvdmUu">S2V5IFZhbHVl</PHRASE> <PHRASE Label="la_title_SystemToolsLocateUnitConfigFile" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+U2hvd3MgdGhlIGxvY2F0aW9uIG9mIDxzdHJvbmc+PGk+VW5pdCBDb25maWc8L2k+PC9zdHJvbmc+IGZpbGUsIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gPHN0cm9uZz48aT5Vbml0IENvbmZpZyBQcmVmaXg8L2k+PC9zdHJvbmc+IChpZS4gImFkbSIsICJ1IiwgImxhbmciIGFuZCBvdGhlcnMpLjwvbGk+DQo8L3VsPg==">TG9jYXRlIFVuaXQgQ29uZmlnIEZpbGU=</PHRASE> <PHRASE Label="la_title_SystemToolsRebuildMultilingualFields" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+U2NhbnMgYW5kIGFkZHMgbWlzc2luZyBkYXRhYmFzZSB0YWJsZSBjb2x1bW5zIChmb3JtYXQgPHN0cm9uZz48aT4ibCZsdDtOJmd0O19GaWVsZE5hbWUiPC9pPjwvc3Ryb25nPiwgd2hlcmUgTiBpcyBhIExhbmd1YWdlSWQpIHRvIHN0b3JlIHRoZSBkYXRhIGZvciB0cmFuc2xhdGFibGUgZmllbGRzLiBUaGlzIGFjdGlvbiBpcyBwZXJmb3JtZWQgYXV0b21hdGljYWxseSB3aGVuZXZlciBhIG5ldyBMYW5ndWFnZSBpcyBjcmVhdGVkIHZpYSBBZG1pbiBDb25zb2xlLjwvbGk+DQogIDxsaT5Vc2UgdGhpcyAiUmVidWlsZCIgb3B0aW9uIG9ubHkgZm9yIHN5bmNocm9uaXphdGlvbiBvZiBkYXRhYmFzZSB0YWJsZSBjb2x1bW5zIHdpdGggbmV3bHkgYWRkZWQgbXVsdGlsaW5ndWFsIGZpZWxkcyAoa011bHRpTGFuZ3VhZ2UgZm9ybWF0dGVyKSBkZWZpbmVkIHRocm91Z2ggPHN0cm9uZz48aT5Vbml0IENvbmZpZzwvaT48L3N0cm9uZz4gZmlsZXMuPC9saT4NCjwvdWw+">UmVidWlsZCBNdWx0aWxpbmd1YWwgRmllbGRz</PHRASE> <PHRASE Label="la_title_SystemToolsRecompileTemplates" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+Q29tcGxldGVseSByZWNvbXBpbGVzIHRoZSB0ZW1wbGF0ZXMgZm9yIGFsbCBlbmFibGVkIEZyb250LWVuZCB0aGVtZXMgYXMgd2VsbCBhcyBBZG1pbiBDb25zb2xlIHRlbXBsYXRlcyBmb3IgYWxsIGxvYWRlZCBtb2R1bGVzLjwvbGk+DQogIDxsaT5BZGRpdGlvbmFsbHksIGNoZWNrcyBmb3IgdGhlIHN5bnRheCBvZiBhbGwgPHN0cm9uZz48aT4mbHQ7aW5wMjouLi4vJmd0OzwvaT48L3N0cm9uZz4gdGFncyBhY3Jvc3MgdGhlIEluLVBvcnRhbCBpbnN0YWxsYXRpb24uPC9saT4NCiAgPGxpPlRoaXMgYWN0aW9uIGlzIG5ldmVyIHBlcmZvcm1lZCBhdXRvbWF0aWNhbGx5LiBIb3dldmVyLCBhbGwgbmV3bHkgbW9kaWZpZWQgdGVtcGxhdGVzIHdpbGwgYmUgYXV0b21hdGljYWxseSByZWNvbXBpbGVkIGJ5IHRoZSBzeXN0ZW0gYXQgdGhlIHRpbWUgb2YgdmlzaXQuPC9saT4NCjwvdWw+">UmVjb21waWxlIFRlbXBsYXRlcw==</PHRASE> <PHRASE Label="la_title_SystemToolsRefreshThemeFiles" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+U2NhbnMgZm9yIG5ld2x5IGFkZGVkIEZyb250LWVuZCBUaGVtZSB0ZW1wbGF0ZXMgYWNyb3NzIGFsbCA8c3Ryb25nPjxpPmVuYWJsZWQ8L2k+PC9zdHJvbmc+IHRoZW1lcy4gVGhpcyBhY3Rpb24gaXMgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhIG5ldyB0aGVtZSBpcyBhZGRlZCBvciBleGlzdGluZyB0aGVtZSBpcyBlbmFibGVkLjwvbGk+DQogIDxsaT5BZGRpdGlvbmFsbHksIGRlbGV0ZXMgYWxsIGNvbXByZXNzZWQgYW5kIGNhY2hlZCBKYXZhc2NyaXB0L0NTUyBmaWxlcyAoLmpzIC5jc3MpIGxvYWRlZCB1c2luZyA8c3Ryb25nPjxpPiZsdDtpbnAyOm1fQ29tcHJlc3MgLi4uLyZndDs8L2k+PC9zdHJvbmc+IHRhZy48L2xpPg0KICA8bGk+VGhpcyBmdW5jdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhICJSZWZyZXNoIiBidXR0b24gaW4gdGhlIFRoZW1lcyBzZWN0aW9uIHRvb2xiYXIgaW4gQWRtaW4gQ29uc29sZS48L2xpPg0KICA8bGk+VGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gY2FzZSB3aGVuICI0MDQgTm90IEZvdW5kIiBwYWdlIGlzIHNob3duIGluc3RlYWQgb2YgZXhwZWN0ZWQgbmV3bHkgYWRkZWQgcGFnZSBvciB0ZW1wbGF0ZS48L2xpPg0KPC91bD4=">UmVmcmVzaCBUaGVtZSBGaWxlcw==</PHRASE> <PHRASE Label="la_title_SystemToolsResetAdminConsoleSections" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+UmVzZXRzIHRoZSBjYWNoZSBvZiBBZG1pbiBDb25zb2xlIHNlY3Rpb25zIChsZWZ0IG1lbnUpLiBUaGUgZGVmaW5pdGlvbnMgb2Ygc2VjdGlvbnMgYXJlIHJlYWQgYW5kIGNvbGxlY3RlZCBmcm9tIDxzdHJvbmc+PGk+VW5pdCBDb25maWc8L2k+PC9zdHJvbmc+IGZpbGVzIHRoYXQgYWxyZWFkeSBiZWVuIHNjYW5uZWQgYW5kIGNhY2hlZCBieSB0aGUgc3lzdGVtLjwvbGk+DQogIDxsaT5Vc2UgdGhpcyByZXNldCBvcHRpb24gaWYgYSBuZXdseSBhZGRlZCBzZWN0aW9uIGRvZXNuJ3QgYXBwZWFyIGluIHRoZSBsZWZ0IEFkbWluIENvbnNvbGUgbWVudS48L2xpPg0KPC91bD4=">UmVzZXQgQWRtaW4gQ29uc29sZSBTZWN0aW9ucw==</PHRASE> <PHRASE Label="la_title_SystemToolsResetAllKeys" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+UmVzZXRzIDxzdHJvbmc+PGk+QWxsIERhdGE8L2k+PC9zdHJvbmc+IHN0b3JlZCBpbiB0aGUgTWVtb3J5IENhY2hlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFN5c3RlbSBEYXRhIGFuZCBEYXRhYmFzZSBJdGVtcy48L2xpPg0KICA8bGk+VXNlIHdpdGggY2F1dGlvbiBkdWUgdG8gcG9zc2liaWxpdHkgb2YgbG9uZyBleGVjdXRpb24gdGltZS48L2xpPg0KPC91bD4=">UmVzZXQgQWxsIEtleXM=</PHRASE> <PHRASE Label="la_title_SystemToolsResetConfigsAndParsedData" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+U2NhbnMgPHN0cm9uZz48aT4iY29yZSI8L2k+PC9zdHJvbmc+IGFuZCA8c3Ryb25nPjxpPiJtb2R1bGVzIjwvaT48L3N0cm9uZz4gZm9sZGVycyB0byBjYWNoZSB0aGUgbG9jYXRpb24gb2YgYWxsIDxzdHJvbmc+PGk+VW5pdCBDb25maWc8L2k+PC9zdHJvbmc+IGZpbGVzLiBUaGUgZXhlY3V0aW9uIHRpbWUgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIDxzdHJvbmc+PGk+VW5pdCBDb25maWc8L2k+PC9zdHJvbmc+IGZpbGVzIGZvdW5kLjwvbGk+DQogIDxsaT5SZXNldHMgdmFyaW91cyBjYWNoZWQgc3lzdGVtIGRhdGEgc3VjaCBhcyBkZWZpbmVkIFBIUCBDbGFzc2VzIChtYXBwaW5nIGJldHdlZW4gdGhlIGNsYXNzIG5hbWUgYW5kIHBoeXNpY2FsIGZpbGVuYW1lIGFuZCBsb2NhdGlvbiBvZiB0aGUgY2xhc3MpLCBIb29rcywgU2NoZWR1bGVkIFRhc2tzLCBDYWNoZWQgQ29uZmlndXJhdGlvbiBWYXJpYWJsZXMsIFJlcGxhY2VtZW50IFRlbXBsYXRlcywgUmV3cml0ZSBMaXN0ZW5lcnMgYW5kIExvYWRlZCBNb2R1bGVzLiBEYXRhIGlzIHJlYWQgYW5kIGNvbGxlY3RlZCBmcm9tIDxzdHJvbmc+PGk+VW5pdCBDb25maWc8L2k+PC9zdHJvbmc+IGZpbGVzIHRoYXQgYWxyZWFkeSBiZWVuIHNjYW5uZWQgYW5kIGNhY2hlZCBieSB0aGUgc3lzdGVtLjwvbGk+DQogIDxsaT5EZWxldGVzIGNvbXBpbGVkIHNraW5zIGZvciBBZG1pbiBDb25zb2xlIChjc3MgZmlsZXMpLjwvbGk+DQo8L3VsPg==">UmVzZXQgQ29uZmlncyBGaWxlcyBDYWNoZSBhbmQgUGFyc2VkIFN5c3RlbSBEYXRh</PHRASE> <PHRASE Label="la_title_SystemToolsResetModRewriteCache" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+RGVsZXRlcyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBGcm9udC1lbmQgVVJMcyBhbmQgYWN0dWFsIFRoZW1lIFRlbXBsYXRlcy4gVGhpcyBtYXBwaW5nIGlzIHVwZGF0ZWQgYXV0b21hdGljYWxseSwgd2hlbiB0aGUgd2Vic2l0ZSBTdHJ1Y3R1cmUgb3IgU2VjdGlvbnMgYXJlIGNoYW5nZWQuPC9saT4NCiAgPGxpPlVzZSB0aGlzIG9wdGlvbiBvbmx5IGluIGNhc2UgaWYgTW9kUmV3cml0ZSBtb2RlIGlzIGVuYWJsZWQgYW5kIGRpc3BsYXllZCBwYWdlIGRpZmZlcnMgZnJvbSB0aGUgcGFnZSB0aGF0IGl0IHNob3VsZCBiZSwgd2hlbiBnaXZlbiBVUkwgaXMgdmlzaXRlZC48L2xpPg0KPC91bD4=">UmVzZXQgTW9kUmV3cml0ZSBDYWNoZQ==</PHRASE> <PHRASE Label="la_title_SystemToolsResetParsedCachedData" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+UmVzZXRzIHZhcmlvdXMgY2FjaGVkIHN5c3RlbSBkYXRhIHN1Y2ggYXMgZGVmaW5lZCBQSFAgQ2xhc3NlcyAobWFwcGluZyBiZXR3ZWVuIHRoZSBjbGFzcyBuYW1lIGFuZCBwaHlzaWNhbCBmaWxlbmFtZSBhbmQgbG9jYXRpb24gb2YgdGhlIGNsYXNzKSwgSG9va3MsIFNjaGVkdWxlZCBUYXNrcywgQ2FjaGVkIENvbmZpZ3VyYXRpb24gVmFyaWFibGVzLCBSZXBsYWNlbWVudCBUZW1wbGF0ZXMsIFJld3JpdGUgTGlzdGVuZXJzIGFuZCBMb2FkZWQgTW9kdWxlcy4gRGF0YSBpcyByZWFkIGFuZCBjb2xsZWN0ZWQgZnJvbSA8c3Ryb25nPjxpPlVuaXQgQ29uZmlnPC9pPjwvc3Ryb25nPiBmaWxlcyB0aGF0IGFscmVhZHkgYmVlbiBzY2FubmVkIGFuZCBjYWNoZWQgYnkgdGhlIHN5c3RlbS48L2xpPg0KPC91bD4=">UmVzZXQgUGFyc2VkIGFuZCBDYWNoZWQgU3lzdGVtIERhdGE=</PHRASE> <PHRASE Label="la_title_SystemToolsResetSMSMenuCache" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+RGVsZXRlcyB0aGUgY2FjaGVkIHZlcnNpb24gb2YgRnJvbnQtZW5kIG1lbnUgKGRpc3BsYXllZCB2aWEgPHN0cm9uZz48aT4mbHQ7aW5wMjpzdF9DYWNoZWRNZW51IC4uLi8mZ3Q7PC9pPjwvc3Ryb25nPiB0YWcpLiBUaGlzIGNhY2hlIGlzIHVwZGF0ZWQgYXV0b21hdGljYWxseSwgd2hlbiB0aGUgd2Vic2l0ZSBzdHJ1Y3R1cmUgb3Igc2VjdGlvbnMgYXJlIGNoYW5nZWQuPC9saT4NCiAgPGxpPlVzZSB0aGlzIG9wdGlvbiBvbmx5IGluIGNhc2UgaWYgZGlzcGxheWVkIG1lbnUgb24gdGhlIEZyb250LWVuZCBkb2Vzbid0IG1hdGNoIHRoZSBtZW51IGRlZmluZWQgaW4gQWRtaW4gQ29uc29sZS48L2xpPg0KPC91bD4=">UmVzZXQgU01TIE1lbnUgQ2FjaGU=</PHRASE> <PHRASE Label="la_title_SystemToolsShowDatabaseTableStructure" Module="Core" Type="1" Hint="PHVsPg0KICA8bGk+U2hvd3MgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YWJhc2UgdGFibGUgbG9hZGluZyBpdCBieSB0aGUgVGFibGUgTmFtZSAodGFibGUgcHJlZml4IGlzIG9wdGlvbmFsKSBvciA8c3Ryb25nPjxpPlVuaXQgQ29uZmlnIFByZWZpeDwvaT48L3N0cm9uZz4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUuPC9saT4NCjwvdWw+">U2hvdyBEYXRhYmFzZSBUYWJsZSBTdHJ1Y3R1cmU=</PHRASE> <PHRASE Label="la_title_SystemToolsSynchronizeDBRevisions" Module="Core" Type="1" Hint="PHVsPg0KPGxpPkFzIGEgcmVzdWx0LCBzY3JpcHQgd2lsbCBWYWxpZGF0ZSBjdXJyZW50IDxiPjx1PnByb2plY3RfdXBncmFkZXMuc3FsPC91PjwvYj4gZmlsZSBhbmQgb3V0bGluZSBhbnkgZXJyb3JzIG9yIGluY29uc2lzdGVuY2llcywgYW5kIGF1dG8tcG9wdWxhdGUgYWxsIG1pc3NpbmcgREIgUmV2aXNpb25zIGZyb20gdGhlIGZpbGUgaW50byBBcHBsaWVkREJSZXZpc2lvbnMuPC9saT4NCjxsaT48YiBzdHlsZT0iY29sb3I6cmVkIj5OT1RFOjwvYj4gRGV2ZWxvcGVycyBzaG91bGQgT05MWSBydW4gdGhpcyBiZWZvcmUgdGhleSBwZXJmb3JtIFJlcG9zaXRvcnkgVXBkYXRlcyBvbiB0aGVpIHdvcmtpbmcgY29weSE8L2xpPg0KPC91bD4=">U3luY2hyb25pemUgRGF0YWJhc2UgUmV2aXNpb25z</PHRASE> <PHRASE Label="la_title_ThemeFiles" Module="Core" Type="1">VGhlbWUgRmlsZXM=</PHRASE> <PHRASE Label="la_title_Thesaurus" Module="Core" Type="1">VGhlc2F1cnVz</PHRASE> <PHRASE Label="la_title_UpdatingCategories" Module="Core" Type="1">VXBkYXRpbmcgU2VjdGlvbnM=</PHRASE> <PHRASE Label="la_title_Users" Module="Core" Type="1">VXNlcnM=</PHRASE> <PHRASE Label="la_title_ViewingFormSubmission" Module="Core" Type="1">Vmlld2luZyBmb3JtIHN1Ym1pc3Npb24=</PHRASE> <PHRASE Label="la_title_ViewingMailingList" Module="Core" Type="1">Vmlld2luZyBNYWlsaW5nIExpc3Q=</PHRASE> <PHRASE Label="la_title_ViewingReply" Module="Core" Type="1">Vmlld2luZyBSZXBseQ==</PHRASE> <PHRASE Label="la_title_ViewingRevision" Module="Core" Type="1">Vmlld2luZyBSZXZpc2lvbiAjJXMgKCVzKQ==</PHRASE> <PHRASE Label="la_title_Visits" Module="Core" Type="1">VmlzaXRz</PHRASE> <PHRASE Label="la_title_Website" Module="Core" Type="1">V2Vic2l0ZQ==</PHRASE> <PHRASE Label="la_To" Module="Core" Type="1">dG8=</PHRASE> <PHRASE Label="la_ToolTipShort_Edit_Current_Category" Module="Core" Type="1">Q3Vyci4gU2VjdGlvbg==</PHRASE> <PHRASE Label="la_ToolTipShort_Move_Down" Module="Core" Type="1">RG93bg==</PHRASE> <PHRASE Label="la_ToolTipShort_Move_Up" Module="Core" Type="1">VXA=</PHRASE> <PHRASE Label="la_ToolTip_Add" Module="Core" Type="1">QWRk</PHRASE> <PHRASE Label="la_ToolTip_AddToGroup" Module="Core" Type="1">QWRkIFVzZXIgdG8gR3JvdXA=</PHRASE> <PHRASE Label="la_ToolTip_AddUserToGroup" Module="Core" Type="1">QWRkIFVzZXIgVG8gR3JvdXA=</PHRASE> <PHRASE Label="la_ToolTip_Approve" Module="Core" Type="1">QXBwcm92ZQ==</PHRASE> <PHRASE Label="la_ToolTip_Back" Module="Core" Type="1">QmFjaw==</PHRASE> <PHRASE Label="la_ToolTip_cancel" Module="Core" Type="1">Q2FuY2Vs</PHRASE> <PHRASE Label="la_ToolTip_ClearClipboard" Module="Core" Type="1">Q2xlYXIgQ2xpcGJvYXJk</PHRASE> <PHRASE Label="la_ToolTip_Clone" Module="Core" Type="1">Q2xvbmU=</PHRASE> <PHRASE Label="la_ToolTip_CloneUser" Module="Core" Type="1">Q2xvbmUgVXNlcnM=</PHRASE> <PHRASE Label="la_ToolTip_close" Module="Core" Type="1">Q2xvc2U=</PHRASE> <PHRASE Label="la_ToolTip_Copy" Module="Core" Type="1">Q29weQ==</PHRASE> <PHRASE Label="la_ToolTip_Cut" Module="Core" Type="1">Q3V0</PHRASE> <PHRASE Label="la_ToolTip_Decline" Module="Core" Type="1">RGVjbGluZQ==</PHRASE> <PHRASE Label="la_ToolTip_Delete" Module="Core" Type="1">RGVsZXRl</PHRASE> <PHRASE Label="la_ToolTip_DeleteAll" Module="Core" Type="1">RGVsZXRlIEFsbA==</PHRASE> <PHRASE Label="la_ToolTip_DeleteReview" Module="Core" Type="1">RGVsZXRlIFJldmlldw==</PHRASE> <PHRASE Label="la_ToolTip_DeleteSpamReportOnly" Module="Core" Type="1">RGVsZXRlIFJlcG9ydCBPbmx5</PHRASE> <PHRASE Label="la_ToolTip_Deny" Module="Core" Type="1">RGVueQ==</PHRASE> <PHRASE Label="la_ToolTip_Details" Module="Core" Type="1">RGV0YWlscw==</PHRASE> <PHRASE Label="la_ToolTip_Disable" Module="Core" Type="1">RGlzYWJsZQ==</PHRASE> <PHRASE Label="la_ToolTip_Discard" Module="Core" Type="1">RGlzY2FyZA==</PHRASE> <PHRASE Label="la_ToolTip_Edit" Module="Core" Type="1">RWRpdA==</PHRASE> <PHRASE Label="la_ToolTip_Edit_Current_Category" Module="Core" Type="1">RWRpdCBDdXJyZW50IFNlY3Rpb24=</PHRASE> <PHRASE Label="la_ToolTip_Email_FrontOnly" Module="Core" Type="1">RnJvbnQtRW5kIE9ubHk=</PHRASE> <PHRASE Label="la_ToolTip_Enable" Module="Core" Type="1">RW5hYmxl</PHRASE> <PHRASE Label="la_ToolTip_Export" Module="Core" Type="1">RXhwb3J0</PHRASE> <PHRASE Label="la_ToolTip_ExportLanguage" Module="Core" Type="1">RXhwb3J0IExhbmd1YWdl</PHRASE> <PHRASE Label="la_ToolTip_HideMenu" Module="Core" Type="1">SGlkZSBNZW51</PHRASE> <PHRASE Label="la_ToolTip_History" Module="Core" Type="1">SGlzdG9yeQ==</PHRASE> <PHRASE Label="la_ToolTip_Home" Module="Core" Type="1">SG9tZQ==</PHRASE> <PHRASE Label="la_ToolTip_Import" Module="Core" Type="1">SW1wb3J0</PHRASE> <PHRASE Label="la_ToolTip_ImportLanguage" Module="Core" Type="1">SW1wb3J0IExhbmd1YWdl</PHRASE> <PHRASE Label="la_ToolTip_LoginAs" Module="Core" Type="1">TG9naW4gQXM=</PHRASE> <PHRASE Label="la_ToolTip_MoveDown" Module="Core" Type="1">TW92ZSBEb3du</PHRASE> <PHRASE Label="la_ToolTip_MoveUp" Module="Core" Type="1">TW92ZSBVcA==</PHRASE> <PHRASE Label="la_ToolTip_NewBaseStyle" Module="Core" Type="1">TmV3IEJhc2UgU3R5bGU=</PHRASE> <PHRASE Label="la_ToolTip_NewBlockStyle" Module="Core" Type="1">TmV3IEJsb2NrIFN0eWxl</PHRASE> <PHRASE Label="la_ToolTip_NewCountryState" Module="Core" Type="1">TmV3IENvdW50cnkvU3RhdGU=</PHRASE> <PHRASE Label="la_ToolTip_NewGroup" Module="Core" Type="1">TmV3IEdyb3Vw</PHRASE> <PHRASE Label="la_ToolTip_newlabel" Module="Core" Type="1">TmV3IGxhYmVs</PHRASE> <PHRASE Label="la_ToolTip_NewLanguage" Module="Core" Type="1">TmV3IExhbmd1YWdl</PHRASE> <PHRASE Label="la_ToolTip_NewPermission" Module="Core" Type="1">TmV3IFBlcm1pc3Npb24=</PHRASE> <PHRASE Label="la_ToolTip_NewPhrase" Module="Core" Type="1">TmV3IFBocmFzZQ==</PHRASE> <PHRASE Label="la_ToolTip_NewReview" Module="Core" Type="1">TmV3IENvbW1lbnQ=</PHRASE> <PHRASE Label="la_ToolTip_NewScheduledTask" Module="Core" Type="1">TmV3IFNjaGVkdWxlZCBUYXNr</PHRASE> <PHRASE Label="la_ToolTip_NewSearchConfig" Module="Core" Type="1">TmV3IFNlYXJjaCBGaWVsZA==</PHRASE> <PHRASE Label="la_ToolTip_NewSiteDomain" Module="Core" Type="1">TmV3IFNpdGUgRG9tYWlu</PHRASE> <PHRASE Label="la_ToolTip_NewStopWord" Module="Core" Type="1">TmV3IFN0b3AgV29yZA==</PHRASE> <PHRASE Label="la_ToolTip_NewTerm" Module="Core" Type="1">TmV3IFRlcm0=</PHRASE> <PHRASE Label="la_ToolTip_newtheme" Module="Core" Type="1">TmV3IFRoZW1l</PHRASE> <PHRASE Label="la_ToolTip_NewUser" Module="Core" Type="1">TmV3IFVzZXI=</PHRASE> <PHRASE Label="la_ToolTip_New_Category" Module="Core" Type="1">TmV3IFNlY3Rpb24=</PHRASE> <PHRASE Label="la_ToolTip_New_CustomField" Module="Core" Type="1">TmV3IEN1c3RvbSBGaWVsZA==</PHRASE> <PHRASE Label="la_ToolTip_New_Form" Module="Core" Type="1">TmV3IEZvcm0=</PHRASE> <PHRASE Label="la_ToolTip_New_FormField" Module="Core" Type="1">TmV3IEZvcm0gRmllbGQ=</PHRASE> <PHRASE Label="la_ToolTip_new_images" Module="Core" Type="1">TmV3IEltYWdlcw==</PHRASE> <PHRASE Label="la_ToolTip_New_Keyword" Module="Core" Type="1">QWRkIEtleXdvcmQ=</PHRASE> <PHRASE Label="la_ToolTip_New_Relation" Module="Core" Type="1">TmV3IFJlbGF0aW9u</PHRASE> <PHRASE Label="la_ToolTip_New_Template" Module="Core" Type="1">TmV3IFRlbXBsYXRl</PHRASE> <PHRASE Label="la_ToolTip_Next" Module="Core" Type="1">TmV4dA==</PHRASE> <PHRASE Label="la_ToolTip_Paste" Module="Core" Type="1">UGFzdGU=</PHRASE> <PHRASE Label="la_ToolTip_Prev" Module="Core" Type="1">UHJldmlvdXM=</PHRASE> <PHRASE Label="la_ToolTip_Preview" Module="Core" Type="1">UHJldmlldw==</PHRASE> <PHRASE Label="la_ToolTip_PrimaryGroup" Module="Core" Type="1">U2V0IFByaW1hcnkgR3JvdXA=</PHRASE> <PHRASE Label="la_ToolTip_Print" Module="Core" Type="1">UHJpbnQ=</PHRASE> <PHRASE Label="la_ToolTip_ProcessQueue" Module="Core" Type="1">UHJvY2VzcyBRdWV1ZQ==</PHRASE> <PHRASE Label="la_ToolTip_Publish" Module="Core" Type="1">UHVibGlzaA==</PHRASE> <PHRASE Label="la_ToolTip_RebuildCategoryCache" Module="Core" Type="1">UmVidWlsZCBTZWN0aW9uIENhY2hl</PHRASE> <PHRASE Label="la_ToolTip_RecalculatePriorities" Module="Core" Type="1">UmVjYWxjdWxhdGUgUHJpb3JpdGllcw==</PHRASE> <PHRASE Label="la_ToolTip_Refresh" Module="Core" Type="1">UmVmcmVzaA==</PHRASE> <PHRASE Label="la_ToolTip_Reply" Module="Core" Type="1">UmVwbHk=</PHRASE> <PHRASE Label="la_ToolTip_RescanThemes" Module="Core" Type="1">UmVzY2FuIFRoZW1lcw==</PHRASE> <PHRASE Label="la_ToolTip_Resend" Module="Core" Type="1">UmVzZW5k</PHRASE> <PHRASE Label="la_ToolTip_Reset" Module="Core" Type="1">UmVzZXQ=</PHRASE> <PHRASE Label="la_ToolTip_ResetCounters" Module="Core" Type="1">UmVzZXQgQ291bnRlcnM=</PHRASE> <PHRASE Label="la_ToolTip_ResetSettings" Module="Core" Type="1">UmVzZXQgUGVyc2lzdGVudCBTZXR0aW5ncw==</PHRASE> <PHRASE Label="la_ToolTip_ResetToBase" Module="Core" Type="1">UmVzZXQgVG8gQmFzZQ==</PHRASE> <PHRASE Label="la_ToolTip_Run" Module="Core" Type="1">UnVu</PHRASE> <PHRASE Label="la_ToolTip_RunSQL" Module="Core" Type="1">UnVuIFNRTA==</PHRASE> <PHRASE Label="la_ToolTip_save" Module="Core" Type="1">U2F2ZQ==</PHRASE> <PHRASE Label="la_ToolTip_SaveAsDraft" Module="Core" Type="1">U2F2ZSBhcyBEcmFmdA==</PHRASE> <PHRASE Label="la_ToolTip_Search" Module="Core" Type="1">U2VhcmNo</PHRASE> <PHRASE Label="la_ToolTip_SearchReset" Module="Core" Type="1">UmVzZXQ=</PHRASE> <PHRASE Label="la_ToolTip_SelectUser" Module="Core" Type="1">U2VsZWN0IFVzZXI=</PHRASE> <PHRASE Label="la_ToolTip_Send" Module="Core" Type="1">U2VuZA==</PHRASE> <PHRASE Label="la_ToolTip_SendEmail" Module="Core" Type="1">U2VuZCBFLW1haWw=</PHRASE> <PHRASE Label="la_ToolTip_SendMail" Module="Core" Type="1">U2VuZCBFLW1haWw=</PHRASE> <PHRASE Label="la_ToolTip_setPrimary" Module="Core" Type="1">U2V0IFByaW1hcnk=</PHRASE> <PHRASE Label="la_ToolTip_setprimarycategory" Module="Core" Type="1">U2V0IFByaW1hcnkgU2VjdGlvbg==</PHRASE> <PHRASE Label="la_ToolTip_SetPrimaryLanguage" Module="Core" Type="1">U2V0IFByaW1hcnkgTGFuZ3VhZ2U=</PHRASE> <PHRASE Label="la_ToolTip_SetSticky" Module="Core" Type="1">U2V0IFN0aWNreQ==</PHRASE> <PHRASE Label="la_ToolTip_Settings" Module="Core" Type="1">U2V0dGluZ3M=</PHRASE> <PHRASE Label="la_ToolTip_ShowMenu" Module="Core" Type="1">U2hvdyBNZW51</PHRASE> <PHRASE Label="la_ToolTip_SynchronizeLanguages" Module="Core" Type="1">U3luY2hyb25pemUgTGFuZ3VhZ2Vz</PHRASE> <PHRASE Label="la_ToolTip_Tools" Module="Core" Type="1">VG9vbHM=</PHRASE> <PHRASE Label="la_ToolTip_Up" Module="Core" Type="1">VXAgYSBTZWN0aW9u</PHRASE> <PHRASE Label="la_ToolTip_ValidateSelected" Module="Core" Type="1">VmFsaWRhdGU=</PHRASE> <PHRASE Label="la_ToolTip_View" Module="Core" Type="1">Vmlldw==</PHRASE> <PHRASE Label="la_ToolTip_ViewDetails" Module="Core" Type="1">VmlldyBEZXRhaWxz</PHRASE> <PHRASE Label="la_ToolTip_ViewItem" Module="Core" Type="1">Vmlldw==</PHRASE> <PHRASE Label="la_to_date" Module="Core" Type="1">VG8gRGF0ZQ==</PHRASE> <PHRASE Label="la_translate" Module="Core" Type="1">VHJhbnNsYXRl</PHRASE> <PHRASE Label="la_Translated" Module="Core" Type="1">VHJhbnNsYXRlZA==</PHRASE> <PHRASE Label="la_Trees" Module="Core" Type="1">VHJlZQ==</PHRASE> <PHRASE Label="la_type_checkbox" Module="Core" Type="1">Q2hlY2tib3hlcw==</PHRASE> <PHRASE Label="la_type_date" Module="Core" Type="1">RGF0ZQ==</PHRASE> <PHRASE Label="la_type_datetime" Module="Core" Type="1">RGF0ZSAmIFRpbWU=</PHRASE> <PHRASE Label="la_type_label" Module="Core" Type="1">TGFiZWw=</PHRASE> <PHRASE Label="la_type_multiselect" Module="Core" Type="1">TXVsdGlwbGUgU2VsZWN0</PHRASE> <PHRASE Label="la_type_password" Module="Core" Type="1">UGFzc3dvcmQgZmllbGQ=</PHRASE> <PHRASE Label="la_type_radio" Module="Core" Type="1">UmFkaW8gYnV0dG9ucw==</PHRASE> <PHRASE Label="la_type_select" Module="Core" Type="1">RHJvcCBkb3duIGZpZWxk</PHRASE> <PHRASE Label="la_type_SingleCheckbox" Module="Core" Type="1">Q2hlY2tib3g=</PHRASE> <PHRASE Label="la_type_text" Module="Core" Type="1">VGV4dCBmaWVsZA==</PHRASE> <PHRASE Label="la_type_textarea" Module="Core" Type="1">VGV4dCBhcmVh</PHRASE> <PHRASE Label="la_type_Upload" Module="Core" Type="1">RmlsZSBVcGxvYWQ=</PHRASE> <PHRASE Label="la_Unchanged" Module="Core" Type="1">VW5jaGFuZ2Vk</PHRASE> <PHRASE Label="la_Unicode" Module="Core" Type="1">VW5pY29kZQ==</PHRASE> <PHRASE Label="la_updating_config" Module="Core" Type="1">VXBkYXRpbmcgQ29uZmlndXJhdGlvbg==</PHRASE> <PHRASE Label="la_Upload" Module="Core" Type="1">VXBsb2Fk</PHRASE> <PHRASE Label="la_UseCronForRegularEvent" Module="Core" Type="1">VXNlIENyb24gdG8gcnVuIFNjaGVkdWxlZCBUYXNrcw==</PHRASE> <PHRASE Label="la_users_admin_group" Module="Core" Type="1">QXNzaWduIGFkbWluaXN0cmF0b3JzIHRvIGdyb3Vw</PHRASE> <PHRASE Label="la_users_allow_new" Module="Core" Type="1">QWxsb3cgbmV3IHVzZXIgcmVnaXN0cmF0aW9u</PHRASE> <PHRASE Label="la_users_assign_all_to" Module="Core" Type="1">QXNzaWduIEFsbCBVc2VycyBUbyBHcm91cA==</PHRASE> <PHRASE Label="la_users_guest_group" Module="Core" Type="1">QXNzaWduIHVzZXJzIG5vdCBsb2dnZWQgaW4gdG8gZ3JvdXA=</PHRASE> <PHRASE Label="la_users_new_group" Module="Core" Type="1">QXNzaWduIHJlZ2lzdGVyZWQgdXNlcnMgdG8gZ3JvdXA=</PHRASE> <PHRASE Label="la_users_password_auto" Module="Core" Type="1">QXNzaWduIHBhc3N3b3JkIGF1dG9tYXRpY2FsbHk=</PHRASE> <PHRASE Label="la_users_subscriber_group" Module="Core" Type="1">QXNzaWduIG1haWxpbmcgbGlzdCBzdWJzY3JpYmVycyB0byBncm91cA==</PHRASE> <PHRASE Label="la_US_UK" Module="Core" Type="1">VVMvVUs=</PHRASE> <PHRASE Label="la_ValidationEmail" Module="Core" Type="1">RS1tYWlsIGFkZHJlc3M=</PHRASE> <PHRASE Label="la_Value" Module="Core" Type="1">VmFsdWU=</PHRASE> <PHRASE Label="la_visit_DirectReferer" Module="Core" Type="1">RGlyZWN0IGFjY2VzcyBvciBib29rbWFyaw==</PHRASE> <PHRASE Label="la_Warning_Enable_HTML" Module="Core" Type="1">V2FybmluZzogRW5hYmxpbmcgSFRNTCBpcyBhIHNlY3VyaXR5IHJpc2sgYW5kIGNvdWxkIGRhbWFnZSB0aGUgc3lzdGVtIGlmIHVzZWQgaW1wcm9wZXJseSE=</PHRASE> <PHRASE Label="la_Warning_Filter" Module="Core" Type="1">QSBzZWFyY2ggb3IgYSBmaWx0ZXIgaXMgaW4gZWZmZWN0LiBZb3UgbWF5IG5vdCBiZSBzZWVpbmcgYWxsIG9mIHRoZSBkYXRhLg==</PHRASE> <PHRASE Label="la_Warning_NewFormError" Module="Core" Type="1">T25lIG9yIG1vcmUgZmllbGRzIG9uIHRoaXMgZm9ybSBoYXMgYW4gZXJyb3IuPGJyLz4NCjxzbWFsbD5QbGVhc2UgbW92ZSB5b3VyIG1vdXNlIG92ZXIgdGhlIGZpZWxkcyBtYXJrZWQgd2l0aCByZWQgdG8gc2VlIHRoZSBlcnJvciBkZXRhaWxzLjwvc21hbGw+</PHRASE> <PHRASE Label="la_Warning_Save_Item" Module="Core" Type="1">TW9kaWZpY2F0aW9ucyB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB5b3UgY2xpY2sgdGhlIFNhdmUgYnV0dG9uIQ==</PHRASE> <PHRASE Label="la_week" Module="Core" Type="1">d2Vlaw==</PHRASE> <PHRASE Label="la_Windows" Module="Core" Type="1">V2luZG93cw==</PHRASE> <PHRASE Label="la_year" Module="Core" Type="1">eWVhcg==</PHRASE> <PHRASE Label="la_Yes" Module="Core" Type="1">WWVz</PHRASE> <PHRASE Label="lc_field_CachedDescendantCatsQty" Module="Core" Type="2">U3ViLXNlY3Rpb25zIFF1YW50aXR5</PHRASE> <PHRASE Label="lc_field_CachedNavBar" Module="Core" Type="2">TmF2aWdhdGlvbiBCYXI=</PHRASE> <PHRASE Label="lc_field_cachedrating" Module="Core" Type="2">UmF0aW5n</PHRASE> <PHRASE Label="lc_field_cachedreviewsqty" Module="Core" Type="2">TnVtYmVyIG9mIFJldmlld3M=</PHRASE> <PHRASE Label="lc_field_cachedvotesqty" Module="Core" Type="2">TnVtYmVyIG9mIFJhdGluZyBWb3Rlcw==</PHRASE> <PHRASE Label="lc_field_CategoryId" Module="Core" Type="2">U2VjdGlvbiBJRA==</PHRASE> <PHRASE Label="lc_field_createdbyid" Module="Core" Type="2">Q3JlYXRlZCBCeSBVc2VyIElE</PHRASE> <PHRASE Label="lc_field_createdon" Module="Core" Type="2">RGF0ZSBDcmVhdGVk</PHRASE> <PHRASE Label="lc_field_description" Module="Core" Type="2">RGVzY3JpcHRpb24=</PHRASE> <PHRASE Label="lc_field_EditorsPick" Module="Core" Type="2">RWRpdG9ycyBQaWNr</PHRASE> <PHRASE Label="lc_field_hits" Module="Core" Type="2">SGl0cw==</PHRASE> <PHRASE Label="lc_field_hotitem" Module="Core" Type="2">SXRlbSBJcyBIb3Q=</PHRASE> <PHRASE Label="lc_field_linkid" Module="Core" Type="2">TGluayBJRA==</PHRASE> <PHRASE Label="lc_field_MetaDescription" Module="Core" Type="2">TWV0YSBEZXNjcmlwdGlvbg==</PHRASE> <PHRASE Label="lc_field_MetaKeywords" Module="Core" Type="2">TWV0YSBLZXl3b3Jkcw==</PHRASE> <PHRASE Label="lc_field_modified" Module="Core" Type="2">TGFzdCBNb2RpZmllZCBEYXRl</PHRASE> <PHRASE Label="lc_field_modifiedbyid" Module="Core" Type="2">TW9kaWZpZWQgQnkgVXNlciBJRA==</PHRASE> <PHRASE Label="lc_field_name" Module="Core" Type="2">TmFtZQ==</PHRASE> <PHRASE Label="lc_field_newitem" Module="Core" Type="2">SXRlbSBJcyBOZXc=</PHRASE> <PHRASE Label="lc_field_notifyowneronchanges" Module="Core" Type="2">Tm90aWZ5IE93bmVyIG9mIENoYW5nZXM=</PHRASE> <PHRASE Label="lc_field_orgid" Module="Core" Type="2">T3JpZ2luYWwgSXRlbSBJRA==</PHRASE> <PHRASE Label="lc_field_ownerid" Module="Core" Type="2">T3duZXIgVXNlciBJRA==</PHRASE> <PHRASE Label="lc_field_ParentId" Module="Core" Type="2">UGFyZW50IElE</PHRASE> <PHRASE Label="lc_field_ParentPath" Module="Core" Type="2">UGFyZW50IFBhdGg=</PHRASE> <PHRASE Label="lc_field_popitem" Module="Core" Type="2">SXRlbSBJcyBQb3B1bGFy</PHRASE> <PHRASE Label="lc_field_priority" Module="Core" Type="2">UHJpb3JpdHk=</PHRASE> <PHRASE Label="lc_field_qtysold" Module="Core" Type="2">UXR5IFNvbGQ=</PHRASE> <PHRASE Label="lc_field_resourceid" Module="Core" Type="2">UmVzb3VyY2UgSUQ=</PHRASE> <PHRASE Label="lc_field_status" Module="Core" Type="2">U3RhdHVz</PHRASE> <PHRASE Label="lc_field_topseller" Module="Core" Type="2">SXRlbSBJcyBhIFRvcCBTZWxsZXI=</PHRASE> <PHRASE Label="lc_field_url" Module="Core" Type="2">VVJM</PHRASE> <PHRASE Label="lc_importlang_phrasewarning" Module="Core" Type="2">RW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCB1bmRvIGFueSBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUgdG8gZXhpc3RpbmcgcGhyYXNlcw==</PHRASE> <PHRASE Label="lc_of" Module="Core" Type="2">b2Y=</PHRASE> <PHRASE Label="lc_Text_Invalid" Module="Core" Type="2">SW52YWxpZA==</PHRASE> <PHRASE Label="lc_Text_Not_Validated" Module="Core" Type="2">Tm90IFZhbGlkYXRlZA==</PHRASE> <PHRASE Label="lc_Text_Valid" Module="Core" Type="2">VmFsaWQ=</PHRASE> </PHRASES> <EVENTS> - <EVENT MessageType="html" Event="CATEGORY.ADD" Type="0">U3ViamVjdDogTmV3IENhdGVnb3J5ICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIC0gQWRkZWQKCllvdXIgc3VnZ2VzdGVkIGNhdGVnb3J5ICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGhhcyBiZWVuIGFkZGVkLg==</EVENT> - <EVENT MessageType="html" Event="CATEGORY.ADD" Type="1">U3ViamVjdDogTmV3IENhdGVnb3J5ICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIFN1Ym1pdHRlZCBieSBVc2VycwoKQSBjYXRlZ29yeSAiPGlucDI6Y19GaWVsZCBuYW1lPSJOYW1lIi8+IiBoYXMgYmVlbiBhZGRlZC4=</EVENT> - <EVENT MessageType="html" Event="CATEGORY.ADD.PENDING" Type="0">U3ViamVjdDogU3VnZ2VzdGVkIENhdGVnb3J5ICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGlzIFBlbmRpbmcKClRoZSBjYXRlZ29yeSB5b3Ugc3VnZ2VzdGVkICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGlzIHBlbmRpbmcgZm9yIGFkbWluaXN0cmF0aXZlIGFwcHJvdmFsLg0KDQpUaGFuayB5b3Uh</EVENT> - <EVENT MessageType="html" Event="CATEGORY.ADD.PENDING" Type="1">U3ViamVjdDogU3VnZ2VzdGVkIENhdGVnb3J5ICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGlzIFBlbmRpbmcKCkEgY2F0ZWdvcnkgIjxpbnAyOmNfRmllbGQgbmFtZT0iTmFtZSIvPiIgaGFzIGJlZW4gYWRkZWQsIHBlbmRpbmcgeW91ciBjb25maXJtYXRpb24uICBQbGVhc2UgcmV2aWV3IHRoZSBjYXRlZ29yeSBhbmQgYXBwcm92ZSBvciBkZW55IGl0Lg==</EVENT> - <EVENT MessageType="html" Event="CATEGORY.APPROVE" Type="0">U3ViamVjdDogQSBjYXRlZ29yeSBoYXMgYmVlbiBhcHByb3ZlZAoKWW91ciBzdWdnZXN0ZWQgY2F0ZWdvcnkgIjxpbnAyOmNfRmllbGQgbmFtZT0iTmFtZSIvPiIgaGFzIGJlZW4gYXBwcm92ZWQu</EVENT> - <EVENT MessageType="html" Event="CATEGORY.DENY" Type="0">U3ViamVjdDogWW91ciBDYXRlZ29yeSAiPGlucDI6Y19GaWVsZCBuYW1lPSJOYW1lIi8+IiBoYXMgYmVlbiBEZW5pZWQKCllvdXIgY2F0ZWdvcnkgc3VnZ2VzdGlvbiAiPGlucDI6Y19GaWVsZCBuYW1lPSJOYW1lIi8+IiBoYXMgYmVlbiBkZW5pZWQu</EVENT> - <EVENT MessageType="html" Event="COMMON.FOOTER" Type="1">U3ViamVjdDogQ29tbW9uIEZvb3RlciBUZW1wbGF0ZQoKPGJyLz48YnIvPg0KDQpTaW5jZXJlbHksPGJyLz48YnIvPg0KDQpXZWJzaXRlIGFkbWluaXN0cmF0aW9uLg==</EVENT> - <EVENT MessageType="html" Event="FORM.SUBMISSION.REPLY.FROM.USER" Type="1">U3ViamVjdDogTmV3IEVtYWlsIFJFUExZIFJlY2VpdmVkIGluICJGZWVkYmFjayBNYW5hZ2VyIiAoPGlucDI6Zm9ybXN1YnMuLWl0ZW1fRmllbGQgbmFtZT0iRm9ybVN1Ym1pc3Npb25JZCIvPikKCk5ldyBFbWFpbCBSRVBMWSBSZWNlaXZlZCBpbiAmcXVvdDtGZWVkYmFjayBNYW5hZ2VyJnF1b3Q7LjxiciAvPg0KPGJyIC8+DQpPcmlnaW5hbCBGZWVkYmFja0lkOiA8aW5wMjpmb3Jtc3Vicy4taXRlbV9GaWVsZCBuYW1lPSJGb3JtU3VibWlzc2lvbklkIi8+IDxiciAvPg0KT3JpZ2luYWwgU3ViamVjdDogPGlucDI6Zm9ybXN1YnMuLWl0ZW1fRm9ybUZpZWxkIHJvbGU9InN1YmplY3QiLz4gPGJyIC8+DQo8YnIgLz4NClBsZWFzZSBwcm9jZWVkIHRvIHRoZSBBZG1pbiBDb25zb2xlIGluIG9yZGVyIHRvIHJldmlldyBhbmQgcmVwbHkgdG8gdGhlIHVzZXIu</EVENT> - <EVENT MessageType="html" Event="FORM.SUBMISSION.REPLY.FROM.USER.BOUNCED" Type="1">U3ViamVjdDogTmV3IEVtYWlsIC0gRGVsaXZlcnkgRmFpbHVyZSBSZWNlaXZlZCBpbiAiRmVlZGJhY2sgTWFuYWdlciIgKDxpbnAyOmZvcm1zdWJzLi1pdGVtX0ZpZWxkIG5hbWU9IkZvcm1TdWJtaXNzaW9uSWQiLz4pCgpOZXcgRW1haWwgRGVsaXZlcnkgRmFpbHVyZSBSZWNlaXZlZCBpbiAmcXVvdDtGZWVkYmFjayBNYW5hZ2VyJnF1b3Q7LjxiciAvPg0KPGJyIC8+DQpPcmlnaW5hbCBGZWVkYmFja0lkOiA8aW5wMjpmb3Jtc3Vicy4taXRlbV9GaWVsZCBuYW1lPSJGb3JtU3VibWlzc2lvbklkIi8+IDxiciAvPg0KT3JpZ2luYWwgU3ViamVjdDogPGlucDI6Zm9ybXN1YnMuLWl0ZW1fRm9ybUZpZWxkIHJvbGU9InN1YmplY3QiLz4gPGJyIC8+DQo8YnIgLz4NClBsZWFzZSBwcm9jZWVkIHRvIHRoZSBBZG1pbiBDb25zb2xlIGluIG9yZGVyIHRvIHJldmlldyBhbmQgcmVwbHkgdG8gdGhlIHVzZXIu</EVENT> - <EVENT MessageType="text" Event="FORM.SUBMISSION.REPLY.TO.USER" Type="1">U3ViamVjdDogPGlucDI6bV9QYXJhbSBuYW1lPSJzdWJqZWN0Ii8+ICN2ZXJpZnk8aW5wMjpzdWJtaXNzaW9uLWxvZ19GaWVsZCBuYW1lPSJWZXJpZnlDb2RlIi8+Cgo8aW5wMjptX1BhcmFtIG5hbWU9Im1lc3NhZ2UiLz4=</EVENT> - <EVENT MessageType="html" Event="FORM.SUBMITTED" Type="0">U3ViamVjdDogVGhhbmsgWW91IGZvciBDb250YWN0aW5nIFVzIQoKPHA+VGhhbmsgeW91IGZvciBjb250YWN0aW5nIHVzLiBXZSdsbCBiZSBpbiB0b3VjaCB3aXRoIHlvdSBzaG9ydGx5ITwvcD4=</EVENT> - <EVENT MessageType="html" Event="FORM.SUBMITTED" Type="1">U3ViamVjdDogTmV3IGZvcm0gc3VibWlzc2lvbgoKPHA+Rm9ybSBoYXMgYmVlbiBzdWJtaXR0ZWQuIFBsZWFzZSBwcm9jZWVkIHRvIHRoZSBBZG1pbiBDb25zb2xlIHRvIHJldmlldyB0aGUgc3VibWlzc2lvbiE8L3A+</EVENT> - <EVENT MessageType="html" Event="ROOT.RESET.PASSWORD" Type="1">U3ViamVjdDogUm9vdCBSZXNldCBQYXNzd29yZAoKWW91ciBuZXcgcGFzc3dvcmQgaXM6IDxpbnAyOm1fUGFyYW0gbmFtZT0icGFzc3dvcmQiLz4=</EVENT> - <EVENT MessageType="html" Event="USER.ADD" Type="0">U3ViamVjdDogSW4tcG9ydGFsIHJlZ2lzdHJhdGlvbgoKRGVhciA8aW5wMjp1LnJlZ2lzdGVyX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS5yZWdpc3Rlcl9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sDQoNClRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgb24gPGlucDI6bV9CYXNlVXJsLz4uIFlvdXIgcmVnaXN0cmF0aW9uIGlzIG5vdyBhY3RpdmUuDQo8aW5wMjptX2lmIGNoZWNrPSJ1LnJlZ2lzdGVyX0ZpZWxkIiBuYW1lPSJFbWFpbCI+DQo8YnIvPjxici8+DQpQbGVhc2UgY2xpY2sgaGVyZSB0byB2ZXJpZnkgeW91ciBFLW1haWwgYWRkcmVzczoNCjxhIGhyZWY9IjxpbnAyOnUucmVnaXN0ZXJfQ29uZmlybVBhc3N3b3JkTGluayB0PSJwbGF0Zm9ybS9teV9hY2NvdW50L3ZlcmlmeV9lbWFpbCIgbm9fYW1wPSIxIi8+Ij48aW5wMjp1LnJlZ2lzdGVyX0NvbmZpcm1QYXNzd29yZExpbmsgdD0icGxhdGZvcm0vbXlfYWNjb3VudC92ZXJpZnlfZW1haWwiIG5vX2FtcD0iMSIvPjwvYT48YnIvPjxici8+DQo8L2lucDI6bV9pZj4=</EVENT> - <EVENT MessageType="html" Event="USER.ADD" Type="1">U3ViamVjdDogTmV3IFVzZXIgUmVnaXN0cmF0aW9uICg8aW5wMjp1LnJlZ2lzdGVyX0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+KQoKQSBuZXcgdXNlciAiPGlucDI6dS5yZWdpc3Rlcl9GaWVsZCBuYW1lPSdVc2VybmFtZScvPiIgaGFzIGJlZW4gYWRkZWQu</EVENT> - <EVENT MessageType="text" Event="USER.ADD.BYADMIN" Type="0">U3ViamVjdDogTmV3IHVzZXIgaGFzIGJlZW4gY3JlYXRlZAoKRGVhciA8aW5wMjp1X0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIvPiwNCg0KQSBuZXcgdXNlciBoYXMgYmVlbiBjcmVhdGVkIGFuZCBhc3NpZ25lZCB0byB5b3UNCg0KTm93IHlvdSBjYW4gbG9naW4gdXNpbmcgdGhlIGZvbGxvd2luZyBjcmVkZW50aWFsczoNCg0KPGlucDI6bV9pZiBjaGVjaz0idV9GaWVsZCIgbmFtZT0iVXNlcm5hbWUiPlVzZXJuYW1lOiA8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+PGlucDI6bV9lbHNlLz5FLW1haWw6IDxpbnAyOnVfRmllbGQgbmFtZT0iRW1haWwiLz48L2lucDI6bV9pZj4gDQpQYXNzd29yZDogPGlucDI6dV9GaWVsZCBuYW1lPSJQYXNzd29yZF9wbGFpbiIvPiANCg==</EVENT> - <EVENT MessageType="html" Event="USER.ADD.PENDING" Type="0">U3ViamVjdDogTmV3IFVzZXIgUmVnaXN0cmF0aW9uICg8aW5wMjp1LnJlZ2lzdGVyX0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+PGlucDI6bV9pZiBjaGVjaz0ibV9HZXRDb25maWciIG5hbWU9IlVzZXJfQWxsb3dfTmV3IiBlcXVhbHNfdG89IjQiPiAtIEFjdGl2YXRpb24gRW1haWw8L2lucDI6bV9pZj4pCgpEZWFyIDxpbnAyOnUucmVnaXN0ZXJfRmllbGQgbmFtZT0iRmlyc3ROYW1lIiAvPiA8aW5wMjp1LnJlZ2lzdGVyX0ZpZWxkIG5hbWU9Ikxhc3ROYW1lIiAvPiw8YnIgLz4NCjxiciAvPg0KPGlucDI6bV9pZiBjaGVjaz0ibV9HZXRDb25maWciIG5hbWU9IlVzZXJfQWxsb3dfTmV3IiBlcXVhbHNfdG89IjQiPg0KCVRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgb24gPGlucDI6bV9MaW5rIHRlbXBsYXRlPSJpbmRleCIvPiB3ZWJzaXRlLiBUbyBhY3RpdmF0ZSB5b3VyIHJlZ2lzdHJhdGlvbiBwbGVhc2UgZm9sbG93IGxpbmsgYmVsb3cuIDxpbnAyOnUucmVnaXN0ZXJfQWN0aXZhdGlvbkxpbmsgdGVtcGxhdGU9InBsYXRmb3JtL2xvZ2luL2FjdGl2YXRlX2NvbmZpcm0iLz4NCjxpbnAyOm1fZWxzZS8+DQoJVGhhbmsgeW91IGZvciByZWdpc3RlcmluZyBvbiA8aW5wMjptX0xpbmsgdGVtcGxhdGU9ImluZGV4Ii8+IHdlYnNpdGUuIFlvdXIgcmVnaXN0cmF0aW9uIHdpbGwgYmUgYWN0aXZlIGFmdGVyIGFwcHJvdmFsLiANCgkNCgk8aW5wMjptX2lmIGNoZWNrPSJ1LnJlZ2lzdGVyX0ZpZWxkIiBuYW1lPSJFbWFpbCI+DQoJCTxici8+PGJyLz4NCgkJUGxlYXNlIGNsaWNrIGhlcmUgdG8gdmVyaWZ5IHlvdXIgRS1tYWlsIGFkZHJlc3M6DQoJCTxhIGhyZWY9IjxpbnAyOnUucmVnaXN0ZXJfQ29uZmlybVBhc3N3b3JkTGluayB0PSJwbGF0Zm9ybS9teV9hY2NvdW50L3ZlcmlmeV9lbWFpbCIgbm9fYW1wPSIxIi8+Ij48aW5wMjp1LnJlZ2lzdGVyX0NvbmZpcm1QYXNzd29yZExpbmsgdD0icGxhdGZvcm0vbXlfYWNjb3VudC92ZXJpZnlfZW1haWwiIG5vX2FtcD0iMSIvPjwvYT48YnIvPjxici8+DQoJPC9pbnAyOm1faWY+DQo8L2lucDI6bV9pZj4=</EVENT> - <EVENT MessageType="html" Event="USER.ADD.PENDING" Type="1">U3ViamVjdDogTmV3IFVzZXIgUmVnaXN0ZXJlZAoKQSBuZXcgdXNlciAiPGlucDI6dS5yZWdpc3Rlcl9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgaGFzIHJlZ2lzdGVyZWQgYW5kIGlzIHBlbmRpbmcgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWwu</EVENT> - <EVENT MessageType="html" Event="USER.APPROVE" Type="0">U3ViamVjdDogWW91ciBBY2NvdW50IGlzIEFjdGl2ZQoKV2VsY29tZSB0byA8aW5wMjptX0Jhc2VVcmwvPiENCg0KWW91ciB1c2VyIHJlZ2lzdHJhdGlvbiBoYXMgYmVlbiBhcHByb3ZlZC4gWW91ciB1c2VyIG5hbWUgaXM6ICI8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+Ii4=</EVENT> - <EVENT MessageType="html" Event="USER.APPROVE" Type="1">U3ViamVjdDogTmV3IFVzZXIgQWNjb3VudCAiPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgd2FzIEFwcHJvdmVkCgpVc2VyICI8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+IiBoYXMgYmVlbiBhcHByb3ZlZC4=</EVENT> - <EVENT MessageType="html" Event="USER.DENY" Type="0">U3ViamVjdDogWW91ciBSZWdpc3RyYXRpb24gaGFzIGJlZW4gRGVuaWVkCgpZb3VyIHJlZ2lzdHJhdGlvbiBvbiA8YSBocmVmPSI8aW5wMjptX0Jhc2VVcmwvPiI+PGlucDI6bV9CYXNlVXJsLz48L2E+IHdlYnNpdGUgaGFzIGJlZW4gZGVuaWVkLg==</EVENT> - <EVENT MessageType="html" Event="USER.DENY" Type="1">U3ViamVjdDogVXNlciBSZWdpc3RyYXRpb24gZm9yICAiPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgaGFzIGJlZW4gRGVuaWVkCgpVc2VyICI8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+IiBoYXMgYmVlbiBkZW5pZWQu</EVENT> - <EVENT MessageType="html" Event="USER.EMAIL.CHANGE.UNDO" Type="0">U3ViamVjdDogQ2hhbmdlZCBFLW1haWwgUm9sbGJhY2sKCkhlbGxvLDxici8+PGJyLz4NCg0KSXQgc2VlbXMgdGhhdCB5b3UgaGF2ZSBjaGFuZ2VkIGUtbWFpbCBpbiB5b3VyIEluLXBvcnRhbCBhY2NvdW50LiBZb3UgbWF5IHVuZG8gdGhpcyBjaGFuZ2UgYnkgY2xpY2tpbmcgb24gdGhlIGxpbmsgYmVsb3c6PGJyLz48YnIvPg0KDQo8YSBocmVmPSI8aW5wMjp1X1VuZG9FbWFpbENoYW5nZUxpbmsgdGVtcGxhdGU9InBsYXRmb3JtL215X2FjY291bnQvcmVzdG9yZV9lbWFpbCIvPiI+PGlucDI6dV9VbmRvRW1haWxDaGFuZ2VMaW5rIHRlbXBsYXRlPSJwbGF0Zm9ybS9teV9hY2NvdW50L3Jlc3RvcmVfZW1haWwiLz48L2E+PGJyLz48YnIvPg0KDQpJZiB5b3UgYmVsaWV2ZSB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIGVtYWlsIGluIGVycm9yLCBwbGVhc2UgaWdub3JlIHRoaXMgZW1haWwuIFlvdXIgYWNjb3VudCB3aWxsIGJlIGxpbmtlZCB0byBhbm90aGVyIGUtbWFpbCB1bmxlc3MgeW91IGhhdmUgY2xpY2tlZCBvbiB0aGUgYWJvdmUgbGluay4=</EVENT> - <EVENT MessageType="html" Event="USER.EMAIL.CHANGE.VERIFY" Type="0">U3ViamVjdDogQ2hhbmdlZCBFLW1haWwgVmVyaWZpY2F0aW9uCgpIZWxsbyw8YnIvPjxici8+DQoNCkl0IHNlZW1zIHRoYXQgeW91IGhhdmUgY2hhbmdlZCBlLW1haWwgaW4geW91ciBJbi1wb3J0YWwgYWNjb3VudC4gUGxlYXNlIHZlcmlmeSB0aGlzIG5ldyBlLW1haWwgYnkgY2xpY2tpbmcgb24gdGhlIGxpbmsgYmVsb3c6PGJyLz48YnIvPg0KDQo8YSBocmVmPSI8aW5wMjp1X0NvbmZpcm1QYXNzd29yZExpbmsgdD0icGxhdGZvcm0vbXlfYWNjb3VudC92ZXJpZnlfZW1haWwiIG5vX2FtcD0iMSIvPiI+PGlucDI6dV9Db25maXJtUGFzc3dvcmRMaW5rIHQ9InBsYXRmb3JtL215X2FjY291bnQvdmVyaWZ5X2VtYWlsIiBub19hbXA9IjEiLz48L2E+PGJyLz48YnIvPg0KDQpJZiB5b3UgYmVsaWV2ZSB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIGVtYWlsIGluIGVycm9yLCBwbGVhc2UgaWdub3JlIHRoaXMgZW1haWwuIFlvdXIgZW1haWwgd2lsbCBub3QgZ2V0IHZlcmlmaWVkIHN0YXR1cyB1bmxlc3MgeW91IGhhdmUgY2xpY2tlZCBvbiB0aGUgYWJvdmUgbGluay4NCg==</EVENT> - <EVENT MessageType="html" Event="USER.MEMBERSHIP.EXPIRATION.NOTICE" Type="0">U3ViamVjdDogTWVtYmVyc2hpcCBFeHBpcmF0aW9uIE5vdGljZQoKWW91ciBtZW1iZXJzaGlwIG9uIDxpbnAyOm1fQmFzZVVybC8+IHdlYnNpdGUgd2lsbCBzb29uIGV4cGlyZS4=</EVENT> - <EVENT MessageType="html" Event="USER.MEMBERSHIP.EXPIRATION.NOTICE" Type="1">U3ViamVjdDogTWVtYmVyc2hpcCBFeHBpcmF0aW9uIE5vdGljZSBmb3IgIjxpbnAyOnVfRmllbGQgbmFtZT0iVXNlcm5hbWUiLz4iIFNlbnQKClVzZXIgPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiBtZW1iZXJzaGlwIHdpbGwgZXhwaXJlIHNvb24u</EVENT> - <EVENT MessageType="html" Event="USER.MEMBERSHIP.EXPIRED" Type="0">U3ViamVjdDogWW91ciBNZW1iZXJzaGlwIEV4cGlyZWQKCllvdXIgbWVtYmVyc2hpcCBvbiA8aW5wMjptX0Jhc2VVcmwvPiB3ZWJzaXRlIGhhcyBleHBpcmVkLg==</EVENT> - <EVENT MessageType="html" Event="USER.MEMBERSHIP.EXPIRED" Type="1">U3ViamVjdDogVXNlcidzIE1lbWJlcnNoaXAgRXhwaXJlZCAgKCA8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+KQoKVXNlcidzICg8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+KSBtZW1iZXJzaGlwIG9uIDxpbnAyOm1fQmFzZVVybC8+IHdlYnNpdGUgaGFzIGV4cGlyZWQu</EVENT> - <EVENT MessageType="text" Event="USER.NEW.PASSWORD" Type="0">U3ViamVjdDogTmV3IHBhc3N3b3JkIGdlbmVyYXRlZAoKRGVhciA8aW5wMjp1X0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIvPiwNCg0KQSBuZXcgcGFzc3dvcmQgaGFzIGJlZW4gZ2VuZXJhdGVkIGZvciB5b3VyIHVzZXIuDQoNCk5vdyB5b3UgY2FuIGxvZ2luIHVzaW5nIHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbHM6DQoNCjxpbnAyOm1faWYgY2hlY2s9InVfRmllbGQiIG5hbWU9IlVzZXJuYW1lIj5Vc2VybmFtZTogPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPjxpbnAyOm1fZWxzZS8+RS1tYWlsOiA8aW5wMjp1X0ZpZWxkIG5hbWU9IkVtYWlsIi8+PC9pbnAyOm1faWY+IA0KUGFzc3dvcmQ6IDxpbnAyOnVfRmllbGQgbmFtZT0iUGFzc3dvcmRfcGxhaW4iLz4g</EVENT> - <EVENT MessageType="html" Event="USER.PSWDC" Type="0">U3ViamVjdDogUmVzZXQgUGFzc3dvcmQgQ29uZmlybWF0aW9uCgpIZWxsbyw8YnIvPjxici8+DQoNCkl0IHNlZW1zIHRoYXQgeW91IGhhdmUgcmVxdWVzdGVkIGEgcGFzc3dvcmQgcmVzZXQgZm9yIHlvdXIgSW4tcG9ydGFsIGFjY291bnQuIElmIHlvdSB3b3VsZCBsaWtlIHRvIHByb2NlZWQgYW5kIGNoYW5nZSB0aGUgcGFzc3dvcmQsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBiZWxvdzo8YnIvPjxici8+DQoNCjxhIGhyZWY9IjxpbnAyOnVfQ29uZmlybVBhc3N3b3JkTGluayBub19hbXA9IjEiLz4iPjxpbnAyOnVfQ29uZmlybVBhc3N3b3JkTGluayBub19hbXA9IjEiLz48L2E+PGJyLz48YnIvPg0KDQpZb3Ugd2lsbCByZWNlaXZlIGEgc2Vjb25kIGVtYWlsIHdpdGggeW91ciBuZXcgcGFzc3dvcmQgc2hvcnRseS48YnIvPjxici8+DQoNCklmIHlvdSBiZWxpZXZlIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgZW1haWwgaW4gZXJyb3IsIHBsZWFzZSBpZ25vcmUgdGhpcyBlbWFpbC4gWW91ciBwYXNzd29yZCB3aWxsIG5vdCBiZSBjaGFuZ2VkIHVubGVzcyB5b3UgaGF2ZSBjbGlja2VkIG9uIHRoZSBhYm92ZSBsaW5rLg0K</EVENT> - <EVENT MessageType="html" Event="USER.SUBSCRIBE" Type="0">U3ViamVjdDogU3Vic2NyaWJlZCB0byBhIE1haWxpbmcgTGlzdCBvbiA8aW5wMjptX0Jhc2VVcmwvPgoKWW91IGhhdmUgc3Vic2NyaWJlZCB0byBhIG1haWxpbmcgbGlzdCBvbiA8aW5wMjptX0Jhc2VVcmwvPiB3ZWJzaXRlLg==</EVENT> - <EVENT MessageType="html" Event="USER.SUBSCRIBE" Type="1">U3ViamVjdDogTmV3IFVzZXIgaGFzIFN1YnNjcmliZWQgdG8gYSBNYWxsaW5nIExpc3QKCk5ldyB1c2VyIDxpbnAyOnVfRmllbGQgbmFtZT0iRW1haWwiLz4gaGFzIHN1YnNjcmliZWQgdG8gYSBtYWlsaW5nIGxpc3Qgb24gPGEgaHJlZj0iPGlucDI6bV9CYXNlVXJsLz4iPjxpbnAyOm1fQmFzZVVybC8+PC9hPiB3ZWJzaXRlLg==</EVENT> - <EVENT MessageType="html" Event="USER.SUGGEST" Type="0">U3ViamVjdDogQ2hlY2sgb3V0IHRoaXMgV2Vic2l0ZQoKSGVsbG8sPC9icj48L2JyPg0KDQpUaGlzIG1lc3NhZ2UgaGFzIGJlZW4gc2VudCB0byB5b3UgZnJvbSBvbmUgb2YgeW91ciBmcmllbmRzLjwvYnI+PC9icj4NCkNoZWNrIG91dCB0aGlzIHNpdGU6IDxhIGhyZWY9IjxpbnAyOm1fQmFzZVVybC8+Ij48aW5wMjptX0Jhc2VVcmwvPjwvYT4h</EVENT> - <EVENT MessageType="html" Event="USER.SUGGEST" Type="1">U3ViamVjdDogV2Vic2l0ZSBTdWdnZXN0ZWQgdG8gYSBGcmllbmQKCkEgdmlzaXRvciBzdWdnZXN0ZWQgPGEgaHJlZj0iPGlucDI6bV9CYXNlVXJsLz4iPjxpbnAyOm1fQmFzZVVybC8+PC9hPiB3ZWJzaXRlIHRvIGEgZnJpZW5kLg==</EVENT> - <EVENT MessageType="html" Event="USER.UNSUBSCRIBE" Type="0">U3ViamVjdDogWW91IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQKCllvdSBoYXZlIHN1Y2Nlc3NmdWxseSB1bnN1YnNjcmliZWQgZnJvbSB0aGUgbWFpbGluZyBsaXN0IG9uIDxhIGhyZWY9IjxpbnAyOm1fQmFzZVVybCAvPiI+PGlucDI6bV9CYXNlVXJsIC8+PC9hPiB3ZWJzaXRlLg==</EVENT> - <EVENT MessageType="html" Event="USER.UNSUBSCRIBE" Type="1">U3ViamVjdDogVXNlciBVbnN1YnNyaWJlZCBmcm9tIE1haWxpbmcgTGlzdAoKQSB1c2VyICI8aW5wMjp1X0ZpZWxkIG5hbWU9IkVtYWlsIi8+IiBoYXMgdW5zdWJzY3JpYmVkIGZyb20gdGhlIG1haWxpbmcgbGlzdCBvbiA8YSBocmVmPSI8aW5wMjptX0Jhc2VVcmwvPiI+PGlucDI6bV9CYXNlVXJsLz48L2E+Lg==</EVENT> - <EVENT MessageType="html" Event="USER.VALIDATE" Type="0">U3ViamVjdDogVXNlciBSZWdpc3RyYXRpb24gaXMgVmFsaWRhdGVkCgpXZWxjb21lIHRvIEluLXBvcnRhbCE8YnIvPjxici8+DQoNCllvdXIgdXNlciByZWdpc3RyYXRpb24gaGFzIGJlZW4gYXBwcm92ZWQuIFlvdSBjYW4gbG9naW4gbm93IDxhIGhyZWY9IjxpbnAyOm1fQmFzZVVybC8+Ij48aW5wMjptX0Jhc2VVcmwvPjwvYT4gdXNpbmcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8YnIvPjxici8+DQoNCj09PT09PT09PT09PT09PT09PTxici8+DQpVc2VybmFtZTogIjxpbnAyOnVfRmllbGQgbmFtZT0iVXNlcm5hbWUiLz4iPGJyLz4NClBhc3N3b3JkOiAiPGlucDI6dV9GaWVsZCBuYW1lPSJQYXNzd29yZF9wbGFpbiIvPiI8YnIvPg0KPT09PT09PT09PT09PT09PT09PGJyLz48YnIvPg0K</EVENT> - <EVENT MessageType="html" Event="USER.VALIDATE" Type="1">U3ViamVjdDogTmV3IFVzZXIgUmVnaXN0cmF0aW9uIGlzIFZhbGlkYXRlZAoKVXNlciAiPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgaGFzIGJlZW4gdmFsaWRhdGVkLg==</EVENT> + <EVENT Event="CATEGORY.ADD" Type="0"> + <SUBJECT>TmV3IENhdGVnb3J5ICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIC0gQWRkZWQ=</SUBJECT> + <HTMLBODY>WW91ciBzdWdnZXN0ZWQgY2F0ZWdvcnkgIjxpbnAyOmNfRmllbGQgbmFtZT0iTmFtZSIvPiIgaGFzIGJlZW4gYWRkZWQu</HTMLBODY> + </EVENT> + <EVENT Event="CATEGORY.ADD" Type="1"> + <SUBJECT>TmV3IENhdGVnb3J5ICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIFN1Ym1pdHRlZCBieSBVc2Vycw==</SUBJECT> + <HTMLBODY>QSBjYXRlZ29yeSAiPGlucDI6Y19GaWVsZCBuYW1lPSJOYW1lIi8+IiBoYXMgYmVlbiBhZGRlZC4=</HTMLBODY> + </EVENT> + <EVENT Event="CATEGORY.ADD.PENDING" Type="0"> + <SUBJECT>U3VnZ2VzdGVkIENhdGVnb3J5ICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGlzIFBlbmRpbmc=</SUBJECT> + <HTMLBODY>VGhlIGNhdGVnb3J5IHlvdSBzdWdnZXN0ZWQgIjxpbnAyOmNfRmllbGQgbmFtZT0iTmFtZSIvPiIgaXMgcGVuZGluZyBmb3IgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWwuDQoNClRoYW5rIHlvdSE=</HTMLBODY> + </EVENT> + <EVENT Event="CATEGORY.ADD.PENDING" Type="1"> + <SUBJECT>U3VnZ2VzdGVkIENhdGVnb3J5ICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGlzIFBlbmRpbmc=</SUBJECT> + <HTMLBODY>QSBjYXRlZ29yeSAiPGlucDI6Y19GaWVsZCBuYW1lPSJOYW1lIi8+IiBoYXMgYmVlbiBhZGRlZCwgcGVuZGluZyB5b3VyIGNvbmZpcm1hdGlvbi4gIFBsZWFzZSByZXZpZXcgdGhlIGNhdGVnb3J5IGFuZCBhcHByb3ZlIG9yIGRlbnkgaXQu</HTMLBODY> + </EVENT> + <EVENT Event="CATEGORY.APPROVE" Type="0"> + <SUBJECT>QSBjYXRlZ29yeSBoYXMgYmVlbiBhcHByb3ZlZA==</SUBJECT> + <HTMLBODY>WW91ciBzdWdnZXN0ZWQgY2F0ZWdvcnkgIjxpbnAyOmNfRmllbGQgbmFtZT0iTmFtZSIvPiIgaGFzIGJlZW4gYXBwcm92ZWQu</HTMLBODY> + </EVENT> + <EVENT Event="CATEGORY.DENY" Type="0"> + <SUBJECT>WW91ciBDYXRlZ29yeSAiPGlucDI6Y19GaWVsZCBuYW1lPSJOYW1lIi8+IiBoYXMgYmVlbiBEZW5pZWQ=</SUBJECT> + <HTMLBODY>WW91ciBjYXRlZ29yeSBzdWdnZXN0aW9uICI8aW5wMjpjX0ZpZWxkIG5hbWU9Ik5hbWUiLz4iIGhhcyBiZWVuIGRlbmllZC4=</HTMLBODY> + </EVENT> + <EVENT Event="COMMON.FOOTER" Type="1"> + <SUBJECT>Q29tbW9uIEZvb3RlciBUZW1wbGF0ZQ==</SUBJECT> + <HTMLBODY>PGJyLz48YnIvPg0KDQpTaW5jZXJlbHksPGJyLz48YnIvPg0KDQpXZWJzaXRlIGFkbWluaXN0cmF0aW9uLg==</HTMLBODY> + </EVENT> + <EVENT Event="FORM.SUBMISSION.REPLY.FROM.USER" Type="1"> + <SUBJECT>TmV3IEVtYWlsIFJFUExZIFJlY2VpdmVkIGluICJGZWVkYmFjayBNYW5hZ2VyIiAoPGlucDI6Zm9ybXN1YnMuLWl0ZW1fRmllbGQgbmFtZT0iRm9ybVN1Ym1pc3Npb25JZCIvPik=</SUBJECT> + <HTMLBODY>TmV3IEVtYWlsIFJFUExZIFJlY2VpdmVkIGluICZxdW90O0ZlZWRiYWNrIE1hbmFnZXImcXVvdDsuPGJyIC8+DQo8YnIgLz4NCk9yaWdpbmFsIEZlZWRiYWNrSWQ6IDxpbnAyOmZvcm1zdWJzLi1pdGVtX0ZpZWxkIG5hbWU9IkZvcm1TdWJtaXNzaW9uSWQiLz4gPGJyIC8+DQpPcmlnaW5hbCBTdWJqZWN0OiA8aW5wMjpmb3Jtc3Vicy4taXRlbV9Gb3JtRmllbGQgcm9sZT0ic3ViamVjdCIvPiA8YnIgLz4NCjxiciAvPg0KUGxlYXNlIHByb2NlZWQgdG8gdGhlIEFkbWluIENvbnNvbGUgaW4gb3JkZXIgdG8gcmV2aWV3IGFuZCByZXBseSB0byB0aGUgdXNlci4=</HTMLBODY> + </EVENT> + <EVENT Event="FORM.SUBMISSION.REPLY.FROM.USER.BOUNCED" Type="1"> + <SUBJECT>TmV3IEVtYWlsIC0gRGVsaXZlcnkgRmFpbHVyZSBSZWNlaXZlZCBpbiAiRmVlZGJhY2sgTWFuYWdlciIgKDxpbnAyOmZvcm1zdWJzLi1pdGVtX0ZpZWxkIG5hbWU9IkZvcm1TdWJtaXNzaW9uSWQiLz4p</SUBJECT> + <HTMLBODY>TmV3IEVtYWlsIERlbGl2ZXJ5IEZhaWx1cmUgUmVjZWl2ZWQgaW4gJnF1b3Q7RmVlZGJhY2sgTWFuYWdlciZxdW90Oy48YnIgLz4NCjxiciAvPg0KT3JpZ2luYWwgRmVlZGJhY2tJZDogPGlucDI6Zm9ybXN1YnMuLWl0ZW1fRmllbGQgbmFtZT0iRm9ybVN1Ym1pc3Npb25JZCIvPiA8YnIgLz4NCk9yaWdpbmFsIFN1YmplY3Q6IDxpbnAyOmZvcm1zdWJzLi1pdGVtX0Zvcm1GaWVsZCByb2xlPSJzdWJqZWN0Ii8+IDxiciAvPg0KPGJyIC8+DQpQbGVhc2UgcHJvY2VlZCB0byB0aGUgQWRtaW4gQ29uc29sZSBpbiBvcmRlciB0byByZXZpZXcgYW5kIHJlcGx5IHRvIHRoZSB1c2VyLg==</HTMLBODY> + </EVENT> + <EVENT Event="FORM.SUBMISSION.REPLY.TO.USER" Type="1"> + <SUBJECT>PGlucDI6bV9QYXJhbSBuYW1lPSJzdWJqZWN0Ii8+ICN2ZXJpZnk8aW5wMjpzdWJtaXNzaW9uLWxvZ19GaWVsZCBuYW1lPSJWZXJpZnlDb2RlIi8+</SUBJECT> + <PLAINTEXTBODY>PGlucDI6bV9QYXJhbSBuYW1lPSJtZXNzYWdlIi8+</PLAINTEXTBODY> + </EVENT> + <EVENT Event="FORM.SUBMITTED" Type="0"> + <SUBJECT>VGhhbmsgWW91IGZvciBDb250YWN0aW5nIFVzIQ==</SUBJECT> + <HTMLBODY>PHA+VGhhbmsgeW91IGZvciBjb250YWN0aW5nIHVzLiBXZSdsbCBiZSBpbiB0b3VjaCB3aXRoIHlvdSBzaG9ydGx5ITwvcD4=</HTMLBODY> + </EVENT> + <EVENT Event="FORM.SUBMITTED" Type="1"> + <SUBJECT>TmV3IGZvcm0gc3VibWlzc2lvbg==</SUBJECT> + <HTMLBODY>PHA+Rm9ybSBoYXMgYmVlbiBzdWJtaXR0ZWQuIFBsZWFzZSBwcm9jZWVkIHRvIHRoZSBBZG1pbiBDb25zb2xlIHRvIHJldmlldyB0aGUgc3VibWlzc2lvbiE8L3A+</HTMLBODY> + </EVENT> + <EVENT Event="ROOT.RESET.PASSWORD" Type="1"> + <SUBJECT>Um9vdCBSZXNldCBQYXNzd29yZA==</SUBJECT> + <HTMLBODY>WW91ciBuZXcgcGFzc3dvcmQgaXM6IDxpbnAyOm1fUGFyYW0gbmFtZT0icGFzc3dvcmQiLz4=</HTMLBODY> + </EVENT> + <EVENT Event="USER.ADD" Type="0"> + <SUBJECT>SW4tcG9ydGFsIHJlZ2lzdHJhdGlvbg==</SUBJECT> + <HTMLBODY>RGVhciA8aW5wMjp1LnJlZ2lzdGVyX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS5yZWdpc3Rlcl9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sDQoNClRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgb24gPGlucDI6bV9CYXNlVXJsLz4uIFlvdXIgcmVnaXN0cmF0aW9uIGlzIG5vdyBhY3RpdmUuDQo8aW5wMjptX2lmIGNoZWNrPSJ1LnJlZ2lzdGVyX0ZpZWxkIiBuYW1lPSJFbWFpbCI+DQo8YnIvPjxici8+DQpQbGVhc2UgY2xpY2sgaGVyZSB0byB2ZXJpZnkgeW91ciBFLW1haWwgYWRkcmVzczoNCjxhIGhyZWY9IjxpbnAyOnUucmVnaXN0ZXJfQ29uZmlybVBhc3N3b3JkTGluayB0PSJwbGF0Zm9ybS9teV9hY2NvdW50L3ZlcmlmeV9lbWFpbCIgbm9fYW1wPSIxIi8+Ij48aW5wMjp1LnJlZ2lzdGVyX0NvbmZpcm1QYXNzd29yZExpbmsgdD0icGxhdGZvcm0vbXlfYWNjb3VudC92ZXJpZnlfZW1haWwiIG5vX2FtcD0iMSIvPjwvYT48YnIvPjxici8+DQo8L2lucDI6bV9pZj4=</HTMLBODY> + </EVENT> + <EVENT Event="USER.ADD" Type="1"> + <SUBJECT>TmV3IFVzZXIgUmVnaXN0cmF0aW9uICg8aW5wMjp1LnJlZ2lzdGVyX0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+KQ==</SUBJECT> + <HTMLBODY>QSBuZXcgdXNlciAiPGlucDI6dS5yZWdpc3Rlcl9GaWVsZCBuYW1lPSdVc2VybmFtZScvPiIgaGFzIGJlZW4gYWRkZWQu</HTMLBODY> + </EVENT> + <EVENT Event="USER.ADD.BYADMIN" Type="0"> + <SUBJECT>TmV3IHVzZXIgaGFzIGJlZW4gY3JlYXRlZA==</SUBJECT> + <PLAINTEXTBODY>RGVhciA8aW5wMjp1X0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIvPiwNCg0KQSBuZXcgdXNlciBoYXMgYmVlbiBjcmVhdGVkIGFuZCBhc3NpZ25lZCB0byB5b3UNCg0KTm93IHlvdSBjYW4gbG9naW4gdXNpbmcgdGhlIGZvbGxvd2luZyBjcmVkZW50aWFsczoNCg0KPGlucDI6bV9pZiBjaGVjaz0idV9GaWVsZCIgbmFtZT0iVXNlcm5hbWUiPlVzZXJuYW1lOiA8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+PGlucDI6bV9lbHNlLz5FLW1haWw6IDxpbnAyOnVfRmllbGQgbmFtZT0iRW1haWwiLz48L2lucDI6bV9pZj4gDQpQYXNzd29yZDogPGlucDI6dV9GaWVsZCBuYW1lPSJQYXNzd29yZF9wbGFpbiIvPiANCg==</PLAINTEXTBODY> + </EVENT> + <EVENT Event="USER.ADD.PENDING" Type="0"> + <SUBJECT>TmV3IFVzZXIgUmVnaXN0cmF0aW9uICg8aW5wMjp1LnJlZ2lzdGVyX0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+PGlucDI6bV9pZiBjaGVjaz0ibV9HZXRDb25maWciIG5hbWU9IlVzZXJfQWxsb3dfTmV3IiBlcXVhbHNfdG89IjQiPiAtIEFjdGl2YXRpb24gRW1haWw8L2lucDI6bV9pZj4p</SUBJECT> + <HTMLBODY>RGVhciA8aW5wMjp1LnJlZ2lzdGVyX0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dS5yZWdpc3Rlcl9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sPGJyIC8+DQo8YnIgLz4NCjxpbnAyOm1faWYgY2hlY2s9Im1fR2V0Q29uZmlnIiBuYW1lPSJVc2VyX0FsbG93X05ldyIgZXF1YWxzX3RvPSI0Ij4NCglUaGFuayB5b3UgZm9yIHJlZ2lzdGVyaW5nIG9uIDxpbnAyOm1fTGluayB0ZW1wbGF0ZT0iaW5kZXgiLz4gd2Vic2l0ZS4gVG8gYWN0aXZhdGUgeW91ciByZWdpc3RyYXRpb24gcGxlYXNlIGZvbGxvdyBsaW5rIGJlbG93LiA8aW5wMjp1LnJlZ2lzdGVyX0FjdGl2YXRpb25MaW5rIHRlbXBsYXRlPSJwbGF0Zm9ybS9sb2dpbi9hY3RpdmF0ZV9jb25maXJtIi8+DQo8aW5wMjptX2Vsc2UvPg0KCVRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgb24gPGlucDI6bV9MaW5rIHRlbXBsYXRlPSJpbmRleCIvPiB3ZWJzaXRlLiBZb3VyIHJlZ2lzdHJhdGlvbiB3aWxsIGJlIGFjdGl2ZSBhZnRlciBhcHByb3ZhbC4gDQoJDQoJPGlucDI6bV9pZiBjaGVjaz0idS5yZWdpc3Rlcl9GaWVsZCIgbmFtZT0iRW1haWwiPg0KCQk8YnIvPjxici8+DQoJCVBsZWFzZSBjbGljayBoZXJlIHRvIHZlcmlmeSB5b3VyIEUtbWFpbCBhZGRyZXNzOg0KCQk8YSBocmVmPSI8aW5wMjp1LnJlZ2lzdGVyX0NvbmZpcm1QYXNzd29yZExpbmsgdD0icGxhdGZvcm0vbXlfYWNjb3VudC92ZXJpZnlfZW1haWwiIG5vX2FtcD0iMSIvPiI+PGlucDI6dS5yZWdpc3Rlcl9Db25maXJtUGFzc3dvcmRMaW5rIHQ9InBsYXRmb3JtL215X2FjY291bnQvdmVyaWZ5X2VtYWlsIiBub19hbXA9IjEiLz48L2E+PGJyLz48YnIvPg0KCTwvaW5wMjptX2lmPg0KPC9pbnAyOm1faWY+</HTMLBODY> + </EVENT> + <EVENT Event="USER.ADD.PENDING" Type="1"> + <SUBJECT>TmV3IFVzZXIgUmVnaXN0ZXJlZA==</SUBJECT> + <HTMLBODY>QSBuZXcgdXNlciAiPGlucDI6dS5yZWdpc3Rlcl9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgaGFzIHJlZ2lzdGVyZWQgYW5kIGlzIHBlbmRpbmcgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWwu</HTMLBODY> + </EVENT> + <EVENT Event="USER.APPROVE" Type="0"> + <SUBJECT>WW91ciBBY2NvdW50IGlzIEFjdGl2ZQ==</SUBJECT> + <HTMLBODY>V2VsY29tZSB0byA8aW5wMjptX0Jhc2VVcmwvPiENCg0KWW91ciB1c2VyIHJlZ2lzdHJhdGlvbiBoYXMgYmVlbiBhcHByb3ZlZC4gWW91ciB1c2VyIG5hbWUgaXM6ICI8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+Ii4=</HTMLBODY> + </EVENT> + <EVENT Event="USER.APPROVE" Type="1"> + <SUBJECT>TmV3IFVzZXIgQWNjb3VudCAiPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgd2FzIEFwcHJvdmVk</SUBJECT> + <HTMLBODY>VXNlciAiPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgaGFzIGJlZW4gYXBwcm92ZWQu</HTMLBODY> + </EVENT> + <EVENT Event="USER.DENY" Type="0"> + <SUBJECT>WW91ciBSZWdpc3RyYXRpb24gaGFzIGJlZW4gRGVuaWVk</SUBJECT> + <HTMLBODY>WW91ciByZWdpc3RyYXRpb24gb24gPGEgaHJlZj0iPGlucDI6bV9CYXNlVXJsLz4iPjxpbnAyOm1fQmFzZVVybC8+PC9hPiB3ZWJzaXRlIGhhcyBiZWVuIGRlbmllZC4=</HTMLBODY> + </EVENT> + <EVENT Event="USER.DENY" Type="1"> + <SUBJECT>VXNlciBSZWdpc3RyYXRpb24gZm9yICAiPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgaGFzIGJlZW4gRGVuaWVk</SUBJECT> + <HTMLBODY>VXNlciAiPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgaGFzIGJlZW4gZGVuaWVkLg==</HTMLBODY> + </EVENT> + <EVENT Event="USER.EMAIL.CHANGE.UNDO" Type="0"> + <SUBJECT>Q2hhbmdlZCBFLW1haWwgUm9sbGJhY2s=</SUBJECT> + <HTMLBODY>SGVsbG8sPGJyLz48YnIvPg0KDQpJdCBzZWVtcyB0aGF0IHlvdSBoYXZlIGNoYW5nZWQgZS1tYWlsIGluIHlvdXIgSW4tcG9ydGFsIGFjY291bnQuIFlvdSBtYXkgdW5kbyB0aGlzIGNoYW5nZSBieSBjbGlja2luZyBvbiB0aGUgbGluayBiZWxvdzo8YnIvPjxici8+DQoNCjxhIGhyZWY9IjxpbnAyOnVfVW5kb0VtYWlsQ2hhbmdlTGluayB0ZW1wbGF0ZT0icGxhdGZvcm0vbXlfYWNjb3VudC9yZXN0b3JlX2VtYWlsIi8+Ij48aW5wMjp1X1VuZG9FbWFpbENoYW5nZUxpbmsgdGVtcGxhdGU9InBsYXRmb3JtL215X2FjY291bnQvcmVzdG9yZV9lbWFpbCIvPjwvYT48YnIvPjxici8+DQoNCklmIHlvdSBiZWxpZXZlIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgZW1haWwgaW4gZXJyb3IsIHBsZWFzZSBpZ25vcmUgdGhpcyBlbWFpbC4gWW91ciBhY2NvdW50IHdpbGwgYmUgbGlua2VkIHRvIGFub3RoZXIgZS1tYWlsIHVubGVzcyB5b3UgaGF2ZSBjbGlja2VkIG9uIHRoZSBhYm92ZSBsaW5rLg==</HTMLBODY> + </EVENT> + <EVENT Event="USER.EMAIL.CHANGE.VERIFY" Type="0"> + <SUBJECT>Q2hhbmdlZCBFLW1haWwgVmVyaWZpY2F0aW9u</SUBJECT> + <HTMLBODY>SGVsbG8sPGJyLz48YnIvPg0KDQpJdCBzZWVtcyB0aGF0IHlvdSBoYXZlIGNoYW5nZWQgZS1tYWlsIGluIHlvdXIgSW4tcG9ydGFsIGFjY291bnQuIFBsZWFzZSB2ZXJpZnkgdGhpcyBuZXcgZS1tYWlsIGJ5IGNsaWNraW5nIG9uIHRoZSBsaW5rIGJlbG93Ojxici8+PGJyLz4NCg0KPGEgaHJlZj0iPGlucDI6dV9Db25maXJtUGFzc3dvcmRMaW5rIHQ9InBsYXRmb3JtL215X2FjY291bnQvdmVyaWZ5X2VtYWlsIiBub19hbXA9IjEiLz4iPjxpbnAyOnVfQ29uZmlybVBhc3N3b3JkTGluayB0PSJwbGF0Zm9ybS9teV9hY2NvdW50L3ZlcmlmeV9lbWFpbCIgbm9fYW1wPSIxIi8+PC9hPjxici8+PGJyLz4NCg0KSWYgeW91IGJlbGlldmUgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyBlbWFpbCBpbiBlcnJvciwgcGxlYXNlIGlnbm9yZSB0aGlzIGVtYWlsLiBZb3VyIGVtYWlsIHdpbGwgbm90IGdldCB2ZXJpZmllZCBzdGF0dXMgdW5sZXNzIHlvdSBoYXZlIGNsaWNrZWQgb24gdGhlIGFib3ZlIGxpbmsuDQo=</HTMLBODY> + </EVENT> + <EVENT Event="USER.MEMBERSHIP.EXPIRATION.NOTICE" Type="0"> + <SUBJECT>TWVtYmVyc2hpcCBFeHBpcmF0aW9uIE5vdGljZQ==</SUBJECT> + <HTMLBODY>WW91ciBtZW1iZXJzaGlwIG9uIDxpbnAyOm1fQmFzZVVybC8+IHdlYnNpdGUgd2lsbCBzb29uIGV4cGlyZS4=</HTMLBODY> + </EVENT> + <EVENT Event="USER.MEMBERSHIP.EXPIRATION.NOTICE" Type="1"> + <SUBJECT>TWVtYmVyc2hpcCBFeHBpcmF0aW9uIE5vdGljZSBmb3IgIjxpbnAyOnVfRmllbGQgbmFtZT0iVXNlcm5hbWUiLz4iIFNlbnQ=</SUBJECT> + <HTMLBODY>VXNlciA8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+IG1lbWJlcnNoaXAgd2lsbCBleHBpcmUgc29vbi4=</HTMLBODY> + </EVENT> + <EVENT Event="USER.MEMBERSHIP.EXPIRED" Type="0"> + <SUBJECT>WW91ciBNZW1iZXJzaGlwIEV4cGlyZWQ=</SUBJECT> + <HTMLBODY>WW91ciBtZW1iZXJzaGlwIG9uIDxpbnAyOm1fQmFzZVVybC8+IHdlYnNpdGUgaGFzIGV4cGlyZWQu</HTMLBODY> + </EVENT> + <EVENT Event="USER.MEMBERSHIP.EXPIRED" Type="1"> + <SUBJECT>VXNlcidzIE1lbWJlcnNoaXAgRXhwaXJlZCAgKCA8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+KQ==</SUBJECT> + <HTMLBODY>VXNlcidzICg8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+KSBtZW1iZXJzaGlwIG9uIDxpbnAyOm1fQmFzZVVybC8+IHdlYnNpdGUgaGFzIGV4cGlyZWQu</HTMLBODY> + </EVENT> + <EVENT Event="USER.NEW.PASSWORD" Type="0"> + <SUBJECT>TmV3IHBhc3N3b3JkIGdlbmVyYXRlZA==</SUBJECT> + <PLAINTEXTBODY>RGVhciA8aW5wMjp1X0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIvPiwNCg0KQSBuZXcgcGFzc3dvcmQgaGFzIGJlZW4gZ2VuZXJhdGVkIGZvciB5b3VyIHVzZXIuDQoNCk5vdyB5b3UgY2FuIGxvZ2luIHVzaW5nIHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbHM6DQoNCjxpbnAyOm1faWYgY2hlY2s9InVfRmllbGQiIG5hbWU9IlVzZXJuYW1lIj5Vc2VybmFtZTogPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPjxpbnAyOm1fZWxzZS8+RS1tYWlsOiA8aW5wMjp1X0ZpZWxkIG5hbWU9IkVtYWlsIi8+PC9pbnAyOm1faWY+IA0KUGFzc3dvcmQ6IDxpbnAyOnVfRmllbGQgbmFtZT0iUGFzc3dvcmRfcGxhaW4iLz4g</PLAINTEXTBODY> + </EVENT> + <EVENT Event="USER.PSWDC" Type="0"> + <SUBJECT>UmVzZXQgUGFzc3dvcmQgQ29uZmlybWF0aW9u</SUBJECT> + <HTMLBODY>SGVsbG8sPGJyLz48YnIvPg0KDQpJdCBzZWVtcyB0aGF0IHlvdSBoYXZlIHJlcXVlc3RlZCBhIHBhc3N3b3JkIHJlc2V0IGZvciB5b3VyIEluLXBvcnRhbCBhY2NvdW50LiBJZiB5b3Ugd291bGQgbGlrZSB0byBwcm9jZWVkIGFuZCBjaGFuZ2UgdGhlIHBhc3N3b3JkLCBwbGVhc2UgY2xpY2sgb24gdGhlIGxpbmsgYmVsb3c6PGJyLz48YnIvPg0KDQo8YSBocmVmPSI8aW5wMjp1X0NvbmZpcm1QYXNzd29yZExpbmsgbm9fYW1wPSIxIi8+Ij48aW5wMjp1X0NvbmZpcm1QYXNzd29yZExpbmsgbm9fYW1wPSIxIi8+PC9hPjxici8+PGJyLz4NCg0KWW91IHdpbGwgcmVjZWl2ZSBhIHNlY29uZCBlbWFpbCB3aXRoIHlvdXIgbmV3IHBhc3N3b3JkIHNob3J0bHkuPGJyLz48YnIvPg0KDQpJZiB5b3UgYmVsaWV2ZSB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIGVtYWlsIGluIGVycm9yLCBwbGVhc2UgaWdub3JlIHRoaXMgZW1haWwuIFlvdXIgcGFzc3dvcmQgd2lsbCBub3QgYmUgY2hhbmdlZCB1bmxlc3MgeW91IGhhdmUgY2xpY2tlZCBvbiB0aGUgYWJvdmUgbGluay4NCg==</HTMLBODY> + </EVENT> + <EVENT Event="USER.SUBSCRIBE" Type="0"> + <SUBJECT>U3Vic2NyaWJlZCB0byBhIE1haWxpbmcgTGlzdCBvbiA8aW5wMjptX0Jhc2VVcmwvPg==</SUBJECT> + <HTMLBODY>WW91IGhhdmUgc3Vic2NyaWJlZCB0byBhIG1haWxpbmcgbGlzdCBvbiA8aW5wMjptX0Jhc2VVcmwvPiB3ZWJzaXRlLg==</HTMLBODY> + </EVENT> + <EVENT Event="USER.SUBSCRIBE" Type="1"> + <SUBJECT>TmV3IFVzZXIgaGFzIFN1YnNjcmliZWQgdG8gYSBNYWxsaW5nIExpc3Q=</SUBJECT> + <HTMLBODY>TmV3IHVzZXIgPGlucDI6dV9GaWVsZCBuYW1lPSJFbWFpbCIvPiBoYXMgc3Vic2NyaWJlZCB0byBhIG1haWxpbmcgbGlzdCBvbiA8YSBocmVmPSI8aW5wMjptX0Jhc2VVcmwvPiI+PGlucDI6bV9CYXNlVXJsLz48L2E+IHdlYnNpdGUu</HTMLBODY> + </EVENT> + <EVENT Event="USER.SUGGEST" Type="0"> + <SUBJECT>Q2hlY2sgb3V0IHRoaXMgV2Vic2l0ZQ==</SUBJECT> + <HTMLBODY>SGVsbG8sPC9icj48L2JyPg0KDQpUaGlzIG1lc3NhZ2UgaGFzIGJlZW4gc2VudCB0byB5b3UgZnJvbSBvbmUgb2YgeW91ciBmcmllbmRzLjwvYnI+PC9icj4NCkNoZWNrIG91dCB0aGlzIHNpdGU6IDxhIGhyZWY9IjxpbnAyOm1fQmFzZVVybC8+Ij48aW5wMjptX0Jhc2VVcmwvPjwvYT4h</HTMLBODY> + </EVENT> + <EVENT Event="USER.SUGGEST" Type="1"> + <SUBJECT>V2Vic2l0ZSBTdWdnZXN0ZWQgdG8gYSBGcmllbmQ=</SUBJECT> + <HTMLBODY>QSB2aXNpdG9yIHN1Z2dlc3RlZCA8YSBocmVmPSI8aW5wMjptX0Jhc2VVcmwvPiI+PGlucDI6bV9CYXNlVXJsLz48L2E+IHdlYnNpdGUgdG8gYSBmcmllbmQu</HTMLBODY> + </EVENT> + <EVENT Event="USER.UNSUBSCRIBE" Type="0"> + <SUBJECT>WW91IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQ=</SUBJECT> + <HTMLBODY>WW91IGhhdmUgc3VjY2Vzc2Z1bGx5IHVuc3Vic2NyaWJlZCBmcm9tIHRoZSBtYWlsaW5nIGxpc3Qgb24gPGEgaHJlZj0iPGlucDI6bV9CYXNlVXJsIC8+Ij48aW5wMjptX0Jhc2VVcmwgLz48L2E+IHdlYnNpdGUu</HTMLBODY> + </EVENT> + <EVENT Event="USER.UNSUBSCRIBE" Type="1"> + <SUBJECT>VXNlciBVbnN1YnNyaWJlZCBmcm9tIE1haWxpbmcgTGlzdA==</SUBJECT> + <HTMLBODY>QSB1c2VyICI8aW5wMjp1X0ZpZWxkIG5hbWU9IkVtYWlsIi8+IiBoYXMgdW5zdWJzY3JpYmVkIGZyb20gdGhlIG1haWxpbmcgbGlzdCBvbiA8YSBocmVmPSI8aW5wMjptX0Jhc2VVcmwvPiI+PGlucDI6bV9CYXNlVXJsLz48L2E+Lg==</HTMLBODY> + </EVENT> + <EVENT Event="USER.VALIDATE" Type="0"> + <SUBJECT>VXNlciBSZWdpc3RyYXRpb24gaXMgVmFsaWRhdGVk</SUBJECT> + <HTMLBODY>V2VsY29tZSB0byBJbi1wb3J0YWwhPGJyLz48YnIvPg0KDQpZb3VyIHVzZXIgcmVnaXN0cmF0aW9uIGhhcyBiZWVuIGFwcHJvdmVkLiBZb3UgY2FuIGxvZ2luIG5vdyA8YSBocmVmPSI8aW5wMjptX0Jhc2VVcmwvPiI+PGlucDI6bV9CYXNlVXJsLz48L2E+IHVzaW5nIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PGJyLz48YnIvPg0KDQo9PT09PT09PT09PT09PT09PT08YnIvPg0KVXNlcm5hbWU6ICI8aW5wMjp1X0ZpZWxkIG5hbWU9IlVzZXJuYW1lIi8+Ijxici8+DQpQYXNzd29yZDogIjxpbnAyOnVfRmllbGQgbmFtZT0iUGFzc3dvcmRfcGxhaW4iLz4iPGJyLz4NCj09PT09PT09PT09PT09PT09PTxici8+PGJyLz4NCg==</HTMLBODY> + </EVENT> + <EVENT Event="USER.VALIDATE" Type="1"> + <SUBJECT>TmV3IFVzZXIgUmVnaXN0cmF0aW9uIGlzIFZhbGlkYXRlZA==</SUBJECT> + <HTMLBODY>VXNlciAiPGlucDI6dV9GaWVsZCBuYW1lPSJVc2VybmFtZSIvPiIgaGFzIGJlZW4gdmFsaWRhdGVkLg==</HTMLBODY> + </EVENT> </EVENTS> <COUNTRIES> <COUNTRY Iso="ABW" Translation="QXJ1YmE="/> <COUNTRY Iso="AFG" Translation="QWZnaGFuaXN0YW4="/> <COUNTRY Iso="AGO" Translation="QW5nb2xh"/> <COUNTRY Iso="AIA" Translation="QW5ndWlsbGE="/> <COUNTRY Iso="ALB" Translation="QWxiYW5pYQ=="/> <COUNTRY Iso="AND" Translation="QW5kb3JyYQ=="/> <COUNTRY Iso="ANT" Translation="TmV0aGVybGFuZHMgQW50aWxsZXM="/> <COUNTRY Iso="ARE" Translation="VW5pdGVkIEFyYWIgRW1pcmF0ZXM="/> <COUNTRY Iso="ARG" Translation="QXJnZW50aW5h"/> <COUNTRY Iso="ARM" Translation="QXJtZW5pYQ=="/> <COUNTRY Iso="ASM" Translation="QW1lcmljYW4gc2Ftb2E="/> <COUNTRY Iso="ATA" Translation="QW50YXJjdGljYQ=="/> <COUNTRY Iso="ATF" Translation="RnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVz"/> <COUNTRY Iso="ATG" Translation="QW50aWd1YSBhbmQgYmFyYnVkYQ=="/> <COUNTRY Iso="AUS" Translation="QXVzdHJhbGlh"/> <COUNTRY Iso="AUT" Translation="QXVzdHJpYQ=="/> <COUNTRY Iso="AZE" Translation="QXplcmJhaWphbg=="/> <COUNTRY Iso="BDI" Translation="QnVydW5kaQ=="/> <COUNTRY Iso="BEL" Translation="QmVsZ2l1bQ=="/> <COUNTRY Iso="BEN" Translation="QmVuaW4="/> <COUNTRY Iso="BFA" Translation="QnVya2luYSBGYXNv"/> <COUNTRY Iso="BGD" Translation="QmFuZ2xhZGVzaA=="/> <COUNTRY Iso="BGR" Translation="QnVsZ2FyaWE="/> <COUNTRY Iso="BHR" Translation="QmFocmFpbg=="/> <COUNTRY Iso="BHS" Translation="QmFoYW1hcw=="/> <COUNTRY Iso="BIH" Translation="Qm9zbmlhIGFuZCBIZXJ6ZWdvd2luYQ=="/> <COUNTRY Iso="BLR" Translation="QmVsYXJ1cw=="/> <COUNTRY Iso="BLZ" Translation="QmVsaXpl"/> <COUNTRY Iso="BMU" Translation="QmVybXVkYQ=="/> <COUNTRY Iso="BOL" Translation="Qm9saXZpYQ=="/> <COUNTRY Iso="BRA" Translation="QnJhemls"/> <COUNTRY Iso="BRB" Translation="QmFyYmFkb3M="/> <COUNTRY Iso="BRN" Translation="QnJ1bmVpIERhcnVzc2FsYW0="/> <COUNTRY Iso="BTN" Translation="Qmh1dGFu"/> <COUNTRY Iso="BVT" Translation="Qm91dmV0IElzbGFuZA=="/> <COUNTRY Iso="BWA" Translation="Qm90c3dhbmE="/> <COUNTRY Iso="CAF" Translation="Q2VudHJhbCBBZnJpY2FuIFJlcHVibGlj"/> <COUNTRY Iso="CAN" Translation="Q2FuYWRh"> <STATE Iso="AB" Translation="QWxiZXJ0YQ=="/> <STATE Iso="BC" Translation="QnJpdGlzaCBDb2x1bWJpYQ=="/> <STATE Iso="MB" Translation="TWFuaXRvYmE="/> <STATE Iso="NB" Translation="TmV3IEJydW5zd2ljaw=="/> <STATE Iso="NL" Translation="TmV3Zm91bmRsYW5kIGFuZCBMYWJyYWRvcg=="/> <STATE Iso="NS" Translation="Tm92YSBTY290aWE="/> <STATE Iso="NT" Translation="Tm9ydGh3ZXN0IFRlcnJpdG9yaWVz"/> <STATE Iso="NU" Translation="TnVuYXZ1dA=="/> <STATE Iso="ON" Translation="T250YXJpbw=="/> <STATE Iso="PE" Translation="UHJpbmNlIEVkd2FyZCBJc2xhbmQ="/> <STATE Iso="QC" Translation="UXVlYmVj"/> <STATE Iso="SK" Translation="U2Fza2F0Y2hld2Fu"/> <STATE Iso="YT" Translation="WXVrb24="/> </COUNTRY> <COUNTRY Iso="CCK" Translation="Q29jb3MgKEtlZWxpbmcpIElzbGFuZHM="/> <COUNTRY Iso="CHE" Translation="U3dpdHplcmxhbmQ="/> <COUNTRY Iso="CHL" Translation="Q2hpbGU="/> <COUNTRY Iso="CHN" Translation="Q2hpbmE="/> <COUNTRY Iso="CIV" Translation="Q290ZSBkJ0l2b2lyZQ=="/> <COUNTRY Iso="CMR" Translation="Q2FtZXJvb24="/> <COUNTRY Iso="COD" Translation="Q29uZ28sIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgKFdhcyBaYWlyZSk="/> <COUNTRY Iso="COG" Translation="Q29uZ28sIFBlb3BsZSdzIFJlcHVibGljIG9m"/> <COUNTRY Iso="COK" Translation="Q29vayBJc2xhbmRz"/> <COUNTRY Iso="COL" Translation="Q29sb21iaWE="/> <COUNTRY Iso="COM" Translation="Q29tb3Jvcw=="/> <COUNTRY Iso="CPV" Translation="Q2FwZSBWZXJkZQ=="/> <COUNTRY Iso="CRI" Translation="Q29zdGEgUmljYQ=="/> <COUNTRY Iso="CUB" Translation="Q3ViYQ=="/> <COUNTRY Iso="CXR" Translation="Q2hyaXN0bWFzIElzbGFuZA=="/> <COUNTRY Iso="CYM" Translation="Q2F5bWFuIElzbGFuZHM="/> <COUNTRY Iso="CYP" Translation="Q3lwcnVz"/> <COUNTRY Iso="CZE" Translation="Q3plY2ggUmVwdWJsaWM="/> <COUNTRY Iso="DEU" Translation="R2VybWFueQ=="/> <COUNTRY Iso="DJI" Translation="RGppYm91dGk="/> <COUNTRY Iso="DMA" Translation="RG9taW5pY2E="/> <COUNTRY Iso="DNK" Translation="RGVubWFyaw=="/> <COUNTRY Iso="DOM" Translation="RG9taW5pY2FuIFJlcHVibGlj"/> <COUNTRY Iso="DZA" Translation="QWxnZXJpYQ=="/> <COUNTRY Iso="ECU" Translation="RWN1YWRvcg=="/> <COUNTRY Iso="EGY" Translation="RWd5cHQ="/> <COUNTRY Iso="ERI" Translation="RXJpdHJlYQ=="/> <COUNTRY Iso="ESH" Translation="V2VzdGVybiBTYWhhcmE="/> <COUNTRY Iso="ESP" Translation="U3BhaW4="/> <COUNTRY Iso="EST" Translation="RXN0b25pYQ=="/> <COUNTRY Iso="ETH" Translation="RXRoaW9waWE="/> <COUNTRY Iso="FIN" Translation="RmlubGFuZA=="/> <COUNTRY Iso="FJI" Translation="RmlqaQ=="/> <COUNTRY Iso="FLK" Translation="RmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMp"/> <COUNTRY Iso="FRA" Translation="RnJhbmNl"/> <COUNTRY Iso="FRO" Translation="RmFyb2UgSXNsYW5kcw=="/> <COUNTRY Iso="FSM" Translation="TWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZg=="/> <COUNTRY Iso="FXX" Translation="RnJhbmNlLCBNZXRyb3BvbGl0YW4="/> <COUNTRY Iso="GAB" Translation="R2Fib24="/> <COUNTRY Iso="GBR" Translation="VW5pdGVkIEtpbmdkb20="/> <COUNTRY Iso="GEO" Translation="R2VvcmdpYQ=="/> <COUNTRY Iso="GHA" Translation="R2hhbmE="/> <COUNTRY Iso="GIB" Translation="R2licmFsdGFy"/> <COUNTRY Iso="GIN" Translation="R3VpbmVh"/> <COUNTRY Iso="GLP" Translation="R3VhZGVsb3VwZQ=="/> <COUNTRY Iso="GMB" Translation="R2FtYmlh"/> <COUNTRY Iso="GNB" Translation="R3VpbmVhLUJpc3NhdQ=="/> <COUNTRY Iso="GNQ" Translation="RXF1YXRvcmlhbCBHdWluZWE="/> <COUNTRY Iso="GRC" Translation="R3JlZWNl"/> <COUNTRY Iso="GRD" Translation="R3JlbmFkYQ=="/> <COUNTRY Iso="GRL" Translation="R3JlZW5sYW5k"/> <COUNTRY Iso="GTM" Translation="R3VhdGVtYWxh"/> <COUNTRY Iso="GUF" Translation="RnJlbmNoIEd1aWFuYQ=="/> <COUNTRY Iso="GUM" Translation="R3VhbQ=="/> <COUNTRY Iso="GUY" Translation="R3V5YW5h"/> <COUNTRY Iso="HKG" Translation="SG9uZyBrb25n"/> <COUNTRY Iso="HMD" Translation="SGVhcmQgYW5kIE1jIERvbmFsZCBJc2xhbmRz"/> <COUNTRY Iso="HND" Translation="SG9uZHVyYXM="/> <COUNTRY Iso="HRV" Translation="Q3JvYXRpYSAobG9jYWwgbmFtZTogSHJ2YXRza2Ep"/> <COUNTRY Iso="HTI" Translation="SGFpdGk="/> <COUNTRY Iso="HUN" Translation="SHVuZ2FyeQ=="/> <COUNTRY Iso="IDN" Translation="SW5kb25lc2lh"/> <COUNTRY Iso="IND" Translation="SW5kaWE="/> <COUNTRY Iso="IOT" Translation="QnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5"/> <COUNTRY Iso="IRL" Translation="SXJlbGFuZA=="/> <COUNTRY Iso="IRN" Translation="SXJhbiAoSXNsYW1pYyBSZXB1YmxpYyBvZik="/> <COUNTRY Iso="IRQ" Translation="SXJhcQ=="/> <COUNTRY Iso="ISL" Translation="SWNlbGFuZA=="/> <COUNTRY Iso="ISR" Translation="SXNyYWVs"/> <COUNTRY Iso="ITA" Translation="SXRhbHk="/> <COUNTRY Iso="JAM" Translation="SmFtYWljYQ=="/> <COUNTRY Iso="JOR" Translation="Sm9yZGFu"/> <COUNTRY Iso="JPN" Translation="SmFwYW4="/> <COUNTRY Iso="KAZ" Translation="S2F6YWtoc3Rhbg=="/> <COUNTRY Iso="KEN" Translation="S2VueWE="/> <COUNTRY Iso="KGZ" Translation="S3lyZ3l6c3Rhbg=="/> <COUNTRY Iso="KHM" Translation="Q2FtYm9kaWE="/> <COUNTRY Iso="KIR" Translation="S2lyaWJhdGk="/> <COUNTRY Iso="KNA" Translation="U2FpbnQgS2l0dHMgYW5kIE5ldmlz"/> <COUNTRY Iso="KOR" Translation="S29yZWEsIFJlcHVibGljIG9m"/> <COUNTRY Iso="KWT" Translation="S3V3YWl0"/> <COUNTRY Iso="LAO" Translation="TGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWM="/> <COUNTRY Iso="LBN" Translation="TGViYW5vbg=="/> <COUNTRY Iso="LBR" Translation="TGliZXJpYQ=="/> <COUNTRY Iso="LBY" Translation="TGlieWFuIEFyYWIgSmFtYWhpcml5YQ=="/> <COUNTRY Iso="LCA" Translation="U2FpbnQgTHVjaWE="/> <COUNTRY Iso="LIE" Translation="TGllY2h0ZW5zdGVpbg=="/> <COUNTRY Iso="LKA" Translation="U3JpIGxhbmth"/> <COUNTRY Iso="LSO" Translation="TGVzb3Robw=="/> <COUNTRY Iso="LTU" Translation="TGl0aHVhbmlh"/> <COUNTRY Iso="LUX" Translation="THV4ZW1ib3VyZw=="/> <COUNTRY Iso="LVA" Translation="TGF0dmlh"/> <COUNTRY Iso="MAC" Translation="TWFjYXU="/> <COUNTRY Iso="MAR" Translation="TW9yb2Njbw=="/> <COUNTRY Iso="MCO" Translation="TW9uYWNv"/> <COUNTRY Iso="MDA" Translation="TW9sZG92YSwgUmVwdWJsaWMgb2Y="/> <COUNTRY Iso="MDG" Translation="TWFkYWdhc2Nhcg=="/> <COUNTRY Iso="MDV" Translation="TWFsZGl2ZXM="/> <COUNTRY Iso="MEX" Translation="TWV4aWNv"/> <COUNTRY Iso="MHL" Translation="TWFyc2hhbGwgSXNsYW5kcw=="/> <COUNTRY Iso="MKD" Translation="TWFjZWRvbmlh"/> <COUNTRY Iso="MLI" Translation="TWFsaQ=="/> <COUNTRY Iso="MLT" Translation="TWFsdGE="/> <COUNTRY Iso="MMR" Translation="TXlhbm1hcg=="/> <COUNTRY Iso="MNG" Translation="TW9uZ29saWE="/> <COUNTRY Iso="MNP" Translation="Tm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRz"/> <COUNTRY Iso="MOZ" Translation="TW96YW1iaXF1ZQ=="/> <COUNTRY Iso="MRT" Translation="TWF1cml0YW5pYQ=="/> <COUNTRY Iso="MSR" Translation="TW9udHNlcnJhdA=="/> <COUNTRY Iso="MTQ" Translation="TWFydGluaXF1ZQ=="/> <COUNTRY Iso="MUS" Translation="TWF1cml0aXVz"/> <COUNTRY Iso="MWI" Translation="TWFsYXdp"/> <COUNTRY Iso="MYS" Translation="TWFsYXlzaWE="/> <COUNTRY Iso="MYT" Translation="TWF5b3R0ZQ=="/> <COUNTRY Iso="NAM" Translation="TmFtaWJpYQ=="/> <COUNTRY Iso="NCL" Translation="TmV3IENhbGVkb25pYQ=="/> <COUNTRY Iso="NER" Translation="TmlnZXI="/> <COUNTRY Iso="NFK" Translation="Tm9yZm9sayBJc2xhbmQ="/> <COUNTRY Iso="NGA" Translation="TmlnZXJpYQ=="/> <COUNTRY Iso="NIC" Translation="TmljYXJhZ3Vh"/> <COUNTRY Iso="NIU" Translation="Tml1ZQ=="/> <COUNTRY Iso="NLD" Translation="TmV0aGVybGFuZHM="/> <COUNTRY Iso="NOR" Translation="Tm9yd2F5"/> <COUNTRY Iso="NPL" Translation="TmVwYWw="/> <COUNTRY Iso="NRU" Translation="TmF1cnU="/> <COUNTRY Iso="NZL" Translation="TmV3IFplYWxhbmQ="/> <COUNTRY Iso="OMN" Translation="T21hbg=="/> <COUNTRY Iso="PAK" Translation="UGFraXN0YW4="/> <COUNTRY Iso="PAN" Translation="UGFuYW1h"/> <COUNTRY Iso="PCN" Translation="UGl0Y2Fpcm4="/> <COUNTRY Iso="PER" Translation="UGVydQ=="/> <COUNTRY Iso="PHL" Translation="UGhpbGlwcGluZXM="/> <COUNTRY Iso="PLW" Translation="UGFsYXU="/> <COUNTRY Iso="PNG" Translation="UGFwdWEgTmV3IEd1aW5lYQ=="/> <COUNTRY Iso="POL" Translation="UG9sYW5k"/> <COUNTRY Iso="PRI" Translation="UHVlcnRvIFJpY28="/> <COUNTRY Iso="PRK" Translation="S29yZWEsIERlbW9jcmF0aWMgUGVvcGxlJ3MgUmVwdWJsaWMgb2Y="/> <COUNTRY Iso="PRT" Translation="UG9ydHVnYWw="/> <COUNTRY Iso="PRY" Translation="UGFyYWd1YXk="/> <COUNTRY Iso="PSE" Translation="UGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZA=="/> <COUNTRY Iso="PYF" Translation="RnJlbmNoIFBvbHluZXNpYQ=="/> <COUNTRY Iso="QAT" Translation="UWF0YXI="/> <COUNTRY Iso="REU" Translation="UmV1bmlvbg=="/> <COUNTRY Iso="ROU" Translation="Um9tYW5pYQ=="/> <COUNTRY Iso="RUS" Translation="UnVzc2lhbiBGZWRlcmF0aW9u"/> <COUNTRY Iso="RWA" Translation="UndhbmRh"/> <COUNTRY Iso="SAU" Translation="U2F1ZGkgQXJhYmlh"/> <COUNTRY Iso="SDN" Translation="U3VkYW4="/> <COUNTRY Iso="SEN" Translation="U2VuZWdhbA=="/> <COUNTRY Iso="SGP" Translation="U2luZ2Fwb3Jl"/> <COUNTRY Iso="SGS" Translation="U291dGggR2VvcmdpYSBhbmQgVGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHM="/> <COUNTRY Iso="SHN" Translation="U3QuIGhlbGVuYQ=="/> <COUNTRY Iso="SJM" Translation="U3ZhbGJhcmQgYW5kIEphbiBNYXllbiBJc2xhbmRz"/> <COUNTRY Iso="SLB" Translation="U29sb21vbiBJc2xhbmRz"/> <COUNTRY Iso="SLE" Translation="U2llcnJhIExlb25l"/> <COUNTRY Iso="SLV" Translation="RWwgU2FsdmFkb3I="/> <COUNTRY Iso="SMR" Translation="U2FuIE1hcmlubw=="/> <COUNTRY Iso="SOM" Translation="U29tYWxpYQ=="/> <COUNTRY Iso="SPM" Translation="U3QuIFBpZXJyZSBhbmQgTWlxdWVsb24="/> <COUNTRY Iso="STP" Translation="U2FvIFRvbWUgYW5kIFByaW5jaXBl"/> <COUNTRY Iso="SUR" Translation="U3VyaW5hbWU="/> <COUNTRY Iso="SVK" Translation="U2xvdmFraWEgKFNsb3ZhayBSZXB1YmxpYyk="/> <COUNTRY Iso="SVN" Translation="U2xvdmVuaWE="/> <COUNTRY Iso="SWE" Translation="U3dlZGVu"/> <COUNTRY Iso="SWZ" Translation="U3dhemlsYW5k"/> <COUNTRY Iso="SYC" Translation="U2V5Y2hlbGxlcw=="/> <COUNTRY Iso="SYR" Translation="U3lyaWFuIEFyYWIgUmVwdWJsaWM="/> <COUNTRY Iso="TCA" Translation="VHVya3MgYW5kIENhaWNvcyBJc2xhbmRz"/> <COUNTRY Iso="TCD" Translation="Q2hhZA=="/> <COUNTRY Iso="TGO" Translation="VG9nbw=="/> <COUNTRY Iso="THA" Translation="VGhhaWxhbmQ="/> <COUNTRY Iso="TJK" Translation="VGFqaWtpc3Rhbg=="/> <COUNTRY Iso="TKL" Translation="VG9rZWxhdQ=="/> <COUNTRY Iso="TKM" Translation="VHVya21lbmlzdGFu"/> <COUNTRY Iso="TLS" Translation="RWFzdCBUaW1vcg=="/> <COUNTRY Iso="TON" Translation="VG9uZ2E="/> <COUNTRY Iso="TTO" Translation="VHJpbmlkYWQgYW5kIFRvYmFnbw=="/> <COUNTRY Iso="TUN" Translation="VHVuaXNpYQ=="/> <COUNTRY Iso="TUR" Translation="VHVya2V5"/> <COUNTRY Iso="TUV" Translation="VHV2YWx1"/> <COUNTRY Iso="TWN" Translation="VGFpd2Fu"/> <COUNTRY Iso="TZA" Translation="VGFuemFuaWEsIFVuaXRlZCBSZXB1YmxpYyBvZg=="/> <COUNTRY Iso="UGA" Translation="VWdhbmRh"/> <COUNTRY Iso="UKR" Translation="VWtyYWluZQ=="/> <COUNTRY Iso="UMI" Translation="VW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRz"/> <COUNTRY Iso="URY" Translation="VXJ1Z3VheQ=="/> <COUNTRY Iso="USA" Translation="VW5pdGVkIFN0YXRlcw=="> <STATE Iso="AK" Translation="QWxhc2th"/> <STATE Iso="AL" Translation="QWxhYmFtYQ=="/> <STATE Iso="AR" Translation="QXJrYW5zYXM="/> <STATE Iso="AZ" Translation="QXJpem9uYQ=="/> <STATE Iso="CA" Translation="Q2FsaWZvcm5pYQ=="/> <STATE Iso="CO" Translation="Q29sb3JhZG8="/> <STATE Iso="CT" Translation="Q29ubmVjdGljdXQ="/> <STATE Iso="DC" Translation="RGlzdHJpY3Qgb2YgQ29sdW1iaWE="/> <STATE Iso="DE" Translation="RGVsYXdhcmU="/> <STATE Iso="FL" Translation="RmxvcmlkYQ=="/> <STATE Iso="GA" Translation="R2VvcmdpYQ=="/> <STATE Iso="HI" Translation="SGF3YWlp"/> <STATE Iso="IA" Translation="SW93YQ=="/> <STATE Iso="ID" Translation="SWRhaG8="/> <STATE Iso="IL" Translation="SWxsaW5vaXM="/> <STATE Iso="IN" Translation="SW5kaWFuYQ=="/> <STATE Iso="KS" Translation="S2Fuc2Fz"/> <STATE Iso="KY" Translation="S2VudHVja3k="/> <STATE Iso="LA" Translation="TG91aXNpYW5h"/> <STATE Iso="MA" Translation="TWFzc2FjaHVzZXR0cw=="/> <STATE Iso="MD" Translation="TWFyeWxhbmQ="/> <STATE Iso="ME" Translation="TWFpbmU="/> <STATE Iso="MI" Translation="TWljaGlnYW4="/> <STATE Iso="MN" Translation="TWlubmVzb3Rh"/> <STATE Iso="MO" Translation="TWlzc291cmk="/> <STATE Iso="MS" Translation="TWlzc2lzc2lwcGk="/> <STATE Iso="MT" Translation="TW9udGFuYQ=="/> <STATE Iso="NC" Translation="Tm9ydGggQ2Fyb2xpbmE="/> <STATE Iso="ND" Translation="Tm9ydGggRGFrb3Rh"/> <STATE Iso="NE" Translation="TmVicmFza2E="/> <STATE Iso="NH" Translation="TmV3IEhhbXBzaGlyZQ=="/> <STATE Iso="NJ" Translation="TmV3IEplcnNleQ=="/> <STATE Iso="NM" Translation="TmV3IE1leGljbw=="/> <STATE Iso="NV" Translation="TmV2YWRh"/> <STATE Iso="NY" Translation="TmV3IFlvcms="/> <STATE Iso="OH" Translation="T2hpbw=="/> <STATE Iso="OK" Translation="T2tsYWhvbWE="/> <STATE Iso="OR" Translation="T3JlZ29u"/> <STATE Iso="PA" Translation="UGVubnN5bHZhbmlh"/> <STATE Iso="PR" Translation="UHVlcnRvIFJpY28="/> <STATE Iso="RI" Translation="UmhvZGUgSXNsYW5k"/> <STATE Iso="SC" Translation="U291dGggQ2Fyb2xpbmE="/> <STATE Iso="SD" Translation="U291dGggRGFrb3Rh"/> <STATE Iso="TN" Translation="VGVubmVzc2Vl"/> <STATE Iso="TX" Translation="VGV4YXM="/> <STATE Iso="UT" Translation="VXRhaA=="/> <STATE Iso="VA" Translation="VmlyZ2luaWE="/> <STATE Iso="VT" Translation="VmVybW9udA=="/> <STATE Iso="WA" Translation="V2FzaGluZ3Rvbg=="/> <STATE Iso="WI" Translation="V2lzY29uc2lu"/> <STATE Iso="WV" Translation="V2VzdCBWaXJnaW5pYQ=="/> <STATE Iso="WY" Translation="V3lvbWluZw=="/> </COUNTRY> <COUNTRY Iso="UZB" Translation="VXpiZWtpc3Rhbg=="/> <COUNTRY Iso="VAT" Translation="VmF0aWNhbiBDaXR5IFN0YXRlIChIb2x5IFNlZSk="/> <COUNTRY Iso="VCT" Translation="U2FpbnQgVmluY2VudCBhbmQgVGhlIEdyZW5hZGluZXM="/> <COUNTRY Iso="VEN" Translation="VmVuZXp1ZWxh"/> <COUNTRY Iso="VGB" Translation="VmlyZ2luIElzbGFuZHMgKEJyaXRpc2gp"/> <COUNTRY Iso="VIR" Translation="VmlyZ2luIElzbGFuZHMgKFUuUy4p"/> <COUNTRY Iso="VNM" Translation="VmlldG5hbQ=="/> <COUNTRY Iso="VUT" Translation="VmFudWF0dQ=="/> <COUNTRY Iso="WLF" Translation="V2FsbGlzIGFuZCBGdXR1bmEgSXNsYW5kcw=="/> <COUNTRY Iso="WSM" Translation="U2Ftb2E="/> <COUNTRY Iso="YEM" Translation="WWVtZW4="/> <COUNTRY Iso="YUG" Translation="WXVnb3NsYXZpYQ=="/> <COUNTRY Iso="ZAF" Translation="U291dGggQWZyaWNh"/> <COUNTRY Iso="ZMB" Translation="WmFtYmlh"/> <COUNTRY Iso="ZWE" Translation="WmltYmFid2U="/> </COUNTRIES> </LANGUAGE> </LANGUAGES> \ No newline at end of file