Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Sat, Jul 19, 12:08 PM

in-portal

This file is larger than 256 KB, so syntax highlighting was skipped.
Index: branches/RC/kernel/install.php
===================================================================
--- branches/RC/kernel/install.php (nonexistent)
+++ branches/RC/kernel/install.php (revision 10832)
@@ -0,0 +1,25 @@
+<?php
+ if (!defined('IS_INSTALL')) {
+ // separate module install
+ define('IS_INSTALL', 1);
+ define('ADMIN', 1);
+ define('REL_PATH', 'proj-base');
+ define('FULL_PATH', realpath(dirname(__FILE__) . '/..') );
+
+ include_once(FULL_PATH . '/core/kernel/startup.php');
+ require_once FULL_PATH . '/core/install/install_toolkit.php';
+
+ $toolkit = new kInstallToolkit();
+ }
+ else {
+ // install, using installation wizard
+ $toolkit =& $this->toolkit;
+ /* @var $toolkit kInstallToolkit */
+ }
+
+ $application =& kApplication::Instance();
+ $application->Init();
+
+ $toolkit->RunSQL('/kernel/install/install_schema.sql');
+ $toolkit->RunSQL('/kernel/install/install_data.sql');
+ $toolkit->ImportLanguage('/kernel/install/english');
\ No newline at end of file
Property changes on: branches/RC/kernel/install.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/kernel/units/images/image_tag_processor.php
===================================================================
--- branches/RC/kernel/units/images/image_tag_processor.php (revision 10831)
+++ branches/RC/kernel/units/images/image_tag_processor.php (revision 10832)
@@ -1,331 +1,341 @@
<?php
class ImageTagProcessor extends kDBTagProcessor {
/**
* Prepares all image parameters as list block parameters (for easy usage)
*
* @param kDBList $object
* @param Array $block_params
* @author Alex
*/
function PrepareListElementParams(&$object, &$block_params)
{
$image_url = $this->ImageSrc($block_params);
if (!$image_url) {
return ;
}
$parent_prefix = $this->Application->getUnitOption($object->Prefix, 'ParentPrefix');
$parent_item =& $this->Application->recallObject($parent_prefix);
$block_params['img_path'] = $image_url;
$image_dimensions = $this->ImageSize($block_params);
$block_params['img_size'] = $image_dimensions ? $image_dimensions : ' width="'.$block_params['DefaultWidth'].'"';
$block_params['alt'] = htmlspecialchars($this->getItemTitle($parent_item)); // $object->GetField('AltName') really used ?
$block_params['align'] = array_key_exists('align', $block_params) ? $block_params['align'] : 'left';
}
/**
* Returns value of object's title field
*
* @param kDBItem $object
* @return string
*/
function getItemTitle(&$object)
{
$title_field = $this->Application->getUnitOption($object->Prefix, 'TitleField');
return $object->GetField($title_field);
}
/**
* [AGGREGATED TAGS] works as <inp2:CatalogItemPrefix_Image, ImageSize, ImageSrc ..../>
*
* @param Array $params
* @return string
*/
function ItemImageTag($params)
{
$this->LoadItemImage($params);
return $this->$params['original_tag']($params);
}
function LargeImageExists($params)
{
$object =& $this->getObject($params);
if ($object->GetDBField('SameImages') == null || $object->GetDBField('SameImages') == 1) {
return false;
}
else {
return true;
}
}
function LoadItemImage($params)
{
$parent_item =& $this->Application->recallObject($params['PrefixSpecial']);
/* @var $parent_item kCatDBItem */
$object =& $this->Application->recallObject($this->getPrefixSpecial(), null, Array('skip_autoload' => true));
/* @var $object kDBItem */
$object->Clear();
// if we need primary thumbnail which is preloaded with category item's list
$is_primary = $this->SelectParam($params, 'primary,Primary');
$image_id = $this->Application->GetVar($this->Prefix.'_id');
if (
// is primary, when primary mark set OR name & field not given
($is_primary || !(isset($params['name']) || isset($params['field']))) &&
// primary image is preloaded AND direct id not given
isset($parent_item->Fields['ThumbPath']) && !$image_id
) {
$object->SetDefaultValues();
$object->SetDBField('Url', $parent_item->GetDBField('FullUrl'));
$object->SetDBField('AltName', $this->getItemTitle($parent_item));
$object->SetDBFieldsFromHash($parent_item->GetFieldValues(), Array('SameImages', 'LocalThumb', 'ThumbPath', 'ThumbUrl', 'LocalImage', 'LocalPath'));
$object->Loaded = true;
}
else { // if requested image is not primary thumbnail - load it directly
$id_field = $this->Application->getUnitOption($this->Prefix, 'ForeignKey');
$parent_table_key = $this->Application->getUnitOption($this->Prefix, 'ParentTableKey');
$keys[$id_field] = $parent_item->GetDBField($parent_table_key);
// which image to load?
if ($is_primary) {
// by PrimaryImage mark
$keys['DefaultImg'] = 1;
}
elseif (getArrayValue($params, 'name')) {
// by ImageName
$keys['Name'] = $params['name'];
}
elseif (getArrayValue($params, 'field')) {
// by virtual field name in main object
$field_options = $parent_item->GetFieldOptions($params['field']);
$keys['Name'] = isset($field_options['original_field']) ? $field_options['original_field'] : $params['field'];
}
elseif ($image_id) {
// by ID
$keys['ImageId'] = $image_id;
}
else {
// by PrimaryImage if no other criteria given
$keys['DefaultImg'] = 1;
}
$object->Load($keys);
if (isset($params['field'])) {
$image_src = $parent_item->GetDBField($params['field']);
// when image is uploaded to virtual field in main item, but not saved to db
$object->SetDBField('ThumbPath', $image_src);
if (!$object->isLoaded()) {
// set fields for displaing new image during main item suggestion with errors
$fields_hash = Array (
'Url' => '',
'ThumbUrl' => '',
'LocalPath' => '',
'SameImages' => 1,
'LocalThumb' => 1,
'LocalImage' => 1,
);
$object->SetDBFieldsFromHash($fields_hash);
$object->Loaded = true;
}
}
}
}
function getImageDimension($type, $params)
{
$ret = isset($params['Max'.$type]) ? $params['Max'.$type] : false;
if (!$ret) {
return $ret;
}
$parent_prefix = $this->Application->getUnitOption($this->Prefix, 'ParentPrefix');
if ($ret == 'thumbnail') {
$ret = $this->Application->ConfigValue($parent_prefix.'_ThumbnailImage'.$type);
}
if ($ret == 'fullsize') {
$ret = $this->Application->ConfigValue($parent_prefix.'_FullImage'.$type);
}
return $ret;
}
/**
* Appends "/" to beginning of image path (in case when missing)
*
* @param kDBItem $object
* @todo old in-portal doesn't append first slash, but we do => append first slash for him :)
*/
function makeRelativePaths(&$object)
{
$thumb_path = $object->GetDBField('ThumbPath');
if ($thumb_path && substr($thumb_path, 0, 1) != '/') {
$object->SetDBField('ThumbPath', '/'.$thumb_path);
}
$local_path = $object->GetDBField('LocalPath');
if ($local_path && substr($local_path, 0, 1) != '/') {
$object->SetDBField('LocalPath', '/'.$local_path);
}
}
function ImageSrc($params)
{
$object =& $this->getObject($params);
$this->makeRelativePaths($object);
$base_url = rtrim($this->Application->BaseURL(), '/');
if ($object->GetDBField('SameImages') && $object->GetDBField('ThumbPath')) {
// we can auto-resize image, when source image available & we use same image for thumbnail & full image in admin
$max_width = $this->getImageDimension('Width', $params);
$max_height = $this->getImageDimension('Height', $params);
+ $format = array_key_exists('format', $params) ? $params['format'] : false;
- // user watermarks from format param
- if (!$max_width) {
- $max_width = $params['format'];
- if ($max_width) {
- $max_height = null;
- }
+ if (!$max_width && $format) {
+ // user watermarks from format param
+ $max_width = $format;
}
- if ($max_width > 0 || $max_height > 0 || $params['format']) {
+ if ($max_width > 0 || $max_height > 0 || $format) {
$image_helper =& $this->Application->recallObject('ImageHelper');
/* @var $image_helper ImageHelper */
$src_image = FULL_PATH.$object->GetDBField('ThumbPath');
return $image_helper->ResizeImage($src_image, $max_width, $max_height);
}
}
$ret = '';
// if we need thumbnail, or full image is same as thumbnail
$show_thumbnail = $this->SelectParam($params, 'thumbnail,Thumbnail') || // old style
(isset($params['MaxWidth']) && $params['MaxWidth'] == 'thumbnail') || // new style
(isset($params['MaxHeight']) && $params['MaxHeight'] == 'thumbnail');
if ($show_thumbnail || $object->GetDBField('SameImages')) {
// return local image or url
$ret = $object->GetDBField('LocalThumb') ? $base_url.$object->GetDBField('ThumbPath') : $object->GetDBField('ThumbUrl');
if ($object->GetDBField('LocalThumb') && !file_exists(FULL_PATH.$object->GetDBField('ThumbPath')) && !constOn('DBG_IMAGE_RECOVERY')) {
// local thumbnail file is missing
$ret = '';
}
}
else { // if we need full which is not the same as thumb
$ret = $object->GetDBField('LocalImage') ? $base_url.$object->GetDBField('LocalPath') : $object->GetDBField('Url');
if ($object->GetDBField('LocalImage') && !file_exists(FULL_PATH.$object->GetDBField('LocalPath'))) {
// local full image file is missing
$ret = '';
}
}
$default_image = $this->SelectParam($params, 'default_image,DefaultImage');
- return ($ret && $ret != $base_url) ? $ret : ($default_image ? $base_url.THEMES_PATH.'/'.$default_image : false);
+
+ if ($ret && $ret != $base_url) {
+ // image name and it's not just folder name
+ return $ret;
+ }
+ elseif ($default_image) {
+ // show default image, use different base urls for admin and front-end
+ $sub_folder = $this->Application->IsAdmin() ? rtrim(IMAGES_PATH, '/') : THEMES_PATH;
+ return $base_url . $sub_folder . '/' . $default_image;
+ }
+
+ return false;
}
function getFullPath($path)
{
if (!$path) {
return $path;
}
// absolute url
if (preg_match('/^(.*):\/\/(.*)$/U', $path)) {
return preg_replace('/^'.preg_quote($this->Application->BaseURL(), '/').'(.*)/', FULL_PATH.'/\\1', $path);
}
// relative url
return FULL_PATH.'/'.mb_substr(THEMES_PATH, 1).'/'.$path;
}
/**
* Makes size clause for img tag, such as
* ' width="80" height="100"' according to max_width
* and max_heght limits.
*
* @param array $params
* @return string
*/
function ImageSize($params)
{
$img_path = $this->getFullPath($params['img_path']);
$image_helper =& $this->Application->recallObject('ImageHelper');
/* @var $image_helper ImageHelper */
$max_width = $this->getImageDimension('Width', $params);
$max_height = $this->getImageDimension('Height', $params);
$image_dimensions = $image_helper->GetImageDimensions($img_path, $max_width, $max_height);
if (!$image_dimensions) {
return false;
}
return ' width="'.$image_dimensions[0].'" height="'.$image_dimensions[1].'"';
}
/**
* Prepares image parameters & parses block with them (for admin)
*
* @param Array $params
* @return string
*/
function Image($params)
{
$image_url = $this->ImageSrc($params);
if (!$image_url) {
return ;
}
$object =& $this->getObject($params);
$params['img_path'] = $image_url;
$image_dimensions = $this->ImageSize($params);
$params['img_size'] = $image_dimensions ? $image_dimensions : ' width="'.$params['DefaultWidth'].'"';
$params['alt'] = htmlspecialchars($object->GetField('AltName')); // really used ?
$params['name'] = $this->SelectParam($params, 'block,render_as');
$params['align'] = array_key_exists('align', $params) ? $params['align'] : 'left';
+ $params['no_editing'] = 1;
if (!$object->isLoaded() && !$this->SelectParam($params, 'default_image,DefaultImage')) {
return false;
}
return $this->Application->ParseBlock($params);
}
/**
* Returns url for image in case when image source is url (for admin)
*
* @param Array $params
* @return string
*/
function ImageUrl($params)
{
$object =& $this->getObject($params);
if ($object->GetDBField('SameImages') ? $object->GetDBField('LocalThumb') : $object->GetDBField('LocalImage') ) {
$ret = $this->Application->Phrase(getArrayValue($params,'local_phrase'));
}
else {
$ret = $object->GetDBField('SameImages') ? $object->GetDBField('ThumbUrl') : $object->GetDBField('Url');
}
return $ret;
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/kernel/units/images/image_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.13.2.6
\ No newline at end of property
+1.13.2.7
\ No newline at end of property
Index: branches/RC/kernel/units/stylesheets/stylesheets_item.php
===================================================================
--- branches/RC/kernel/units/stylesheets/stylesheets_item.php (revision 10831)
+++ branches/RC/kernel/units/stylesheets/stylesheets_item.php (revision 10832)
@@ -1,43 +1,43 @@
<?php
class StylesheetsItem extends kDBItem
{
function Compile()
{
$selector_item =& $this->Application->recallObject('selectors.item', 'selectors', Array('live_table'=>true, 'skip_autoload' => true) );
$parent_field = $this->Application->getUnitOption($selector_item->Prefix, 'ForeignKey');
$sql_template = 'SELECT '.$selector_item->IDField.' FROM '.$selector_item->TableName.' WHERE '.$parent_field.' = %s ORDER BY SelectorName ASC';
$selectors_ids = $this->Conn->GetCol( sprintf($sql_template, $this->GetID() ) );
$ret = '/* This file is generated automatically. Don\'t edit it manually ! */'."\n\n";
foreach($selectors_ids as $selector_id)
{
$selector_item->Load($selector_id);
$ret .= $selector_item->CompileStyle()."\n";
}
$ret .= $this->GetDBField('AdvancedCSS');
$compile_ts = adodb_mktime();
- $css_path = FULL_PATH.'/kernel/stylesheets/';
+ $css_path = (defined('WRITEABLE') ? WRITEABLE : FULL_PATH . '/kernel') . '/stylesheets/';
$css_file = $css_path.mb_strtolower($this->GetDBField('Name')).'-'.$compile_ts.'.css';
$fp = fopen($css_file,'w');
if($fp)
{
$prev_css = $css_path.mb_strtolower($this->GetDBField('Name')).'-'.$this->GetDBField('LastCompiled').'.css';
if( file_exists($prev_css) ) unlink($prev_css);
fwrite($fp, $ret);
fclose($fp);
$sql = 'UPDATE '.$this->TableName.' SET LastCompiled = '.$compile_ts.' WHERE '.$this->IDField.' = '.$this->GetID();
$this->Conn->Query($sql);
}
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/kernel/units/stylesheets/stylesheets_item.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.6.2.1
\ No newline at end of property
+1.6.2.2
\ No newline at end of property
Index: branches/RC/kernel/install/install_order.txt
===================================================================
--- branches/RC/kernel/install/install_order.txt (nonexistent)
+++ branches/RC/kernel/install/install_order.txt (revision 10832)
@@ -0,0 +1 @@
+101
\ No newline at end of file
Property changes on: branches/RC/kernel/install/install_order.txt
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/kernel/install/upgrades.php
===================================================================
--- branches/RC/kernel/install/upgrades.php (nonexistent)
+++ branches/RC/kernel/install/upgrades.php (revision 10832)
@@ -0,0 +1,95 @@
+<?php
+ $upgrade_class = 'InPortalUpgrades';
+
+ /**
+ * Class, that holds all upgrade scripts for "Proj-Base" module
+ *
+ */
+ class InPortalUpgrades extends kHelper {
+
+ /**
+ * Install toolkit instance
+ *
+ * @var kInstallToolkit
+ */
+ var $_toolkit = null;
+
+ /**
+ * Sets common instance of installator toolkit
+ *
+ * @param kInstallToolkit $instance
+ */
+ function setToolkit(&$instance)
+ {
+ $this->_toolkit =& $instance;
+ }
+
+ /**
+ * Replace any mensions of "/kernel/" in database to "/system/"
+ *
+ * @param string $mode when called mode {before, after)
+ */
+ function Upgrade_4_3_1($mode)
+ {
+ if ($mode == 'after') {
+ // Tables: PageContent, Images
+
+ if ($this->Conn->TableFound('PageContent')) {
+ // 1. replaces "/kernel/user_files/" references in content blocks
+ $ml_helper =& $this->Application->recallObject('kMultiLanguageHelper');
+ /* @var $ml_helper kMultiLanguageHelper */
+
+ $language_count = $ml_helper->getLanguageCount();
+ $replace_sql = '%1$s = REPLACE(%1$s, "/kernel/user_files/", "/system/user_files/")';
+
+ $update_sqls = Array ();
+ for ($i = 1; $i <= $language_count; $i++) {
+ if (!$ml_helper->LanguageFound($i)) {
+ continue;
+ }
+
+ $field = 'l' . $i . '_Content';
+ $update_sqls[] = sprintf($replace_sql, $field);
+ }
+
+ 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);
+ }
+ }
+
+?>
\ No newline at end of file
Property changes on: branches/RC/kernel/install/upgrades.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/kernel/install/install_schema.sql
===================================================================
--- branches/RC/kernel/install/install_schema.sql (nonexistent)
+++ branches/RC/kernel/install/install_schema.sql (revision 10832)
@@ -0,0 +1,318 @@
+CREATE TABLE BanRules (
+ RuleId int(11) NOT NULL auto_increment,
+ RuleType tinyint(4) NOT NULL default '0',
+ ItemField varchar(255) default NULL,
+ ItemVerb tinyint(4) NOT NULL default '0',
+ ItemValue varchar(255) NOT NULL default '',
+ ItemType int(11) NOT NULL default '0',
+ Priority int(11) NOT NULL default '0',
+ Status tinyint(4) NOT NULL default '1',
+ ErrorTag varchar(255) default NULL,
+ PRIMARY KEY (RuleId),
+ KEY Status (Status),
+ KEY Priority (Priority),
+ KEY ItemType (ItemType)
+);
+
+CREATE TABLE CountCache (
+ ListType int(11) NOT NULL default '0',
+ ItemType int(11) NOT NULL default '-1',
+ Value int(11) NOT NULL default '0',
+ CountCacheId int(11) NOT NULL auto_increment,
+ LastUpdate int(11) NOT NULL default '0',
+ ExtraId varchar(50) default NULL,
+ TodayOnly tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (CountCacheId)
+);
+
+CREATE TABLE Favorites (
+ FavoriteId int(11) NOT NULL auto_increment,
+ PortalUserId int(11) NOT NULL default '0',
+ ResourceId int(11) NOT NULL default '0',
+ ItemTypeId int(11) NOT NULL default '0',
+ Modified int(11) NOT NULL default '0',
+ PRIMARY KEY (FavoriteId),
+ UNIQUE KEY main (PortalUserId,ResourceId),
+ KEY Modified (Modified),
+ KEY ItemTypeId (ItemTypeId)
+);
+
+CREATE TABLE Images (
+ ImageId int(11) NOT NULL auto_increment,
+ ResourceId int(11) NOT NULL default '0',
+ Url varchar(255) NOT NULL default '',
+ Name varchar(255) NOT NULL default '',
+ AltName VARCHAR(255) NOT NULL DEFAULT '',
+ ImageIndex int(11) NOT NULL default '0',
+ LocalImage tinyint(4) NOT NULL default '1',
+ LocalPath varchar(240) NOT NULL default '',
+ Enabled int(11) NOT NULL default '1',
+ DefaultImg int(11) NOT NULL default '0',
+ ThumbUrl varchar(255) default NULL,
+ Priority int(11) NOT NULL default '0',
+ ThumbPath varchar(255) default NULL,
+ LocalThumb tinyint(4) NOT NULL default '1',
+ SameImages tinyint(4) NOT NULL default '1',
+ PRIMARY KEY (ImageId),
+ KEY ResourceId (ResourceId),
+ KEY Enabled (Enabled),
+ KEY Priority (Priority)
+);
+
+CREATE TABLE ItemRating (
+ RatingId int(11) NOT NULL auto_increment,
+ IPAddress varchar(255) NOT NULL default '',
+ CreatedOn INT UNSIGNED NULL DEFAULT NULL,
+ RatingValue int(11) NOT NULL default '0',
+ ItemId int(11) NOT NULL default '0',
+ PRIMARY KEY (RatingId),
+ KEY CreatedOn (CreatedOn),
+ KEY ItemId (ItemId),
+ KEY RatingValue (RatingValue)
+);
+
+CREATE TABLE ItemReview (
+ ReviewId int(11) NOT NULL auto_increment,
+ CreatedOn INT UNSIGNED NULL DEFAULT NULL,
+ ReviewText longtext NOT NULL,
+ Rating tinyint(3) unsigned default NULL,
+ IPAddress varchar(255) NOT NULL default '',
+ ItemId int(11) NOT NULL default '0',
+ CreatedById int(11) NOT NULL default '-1',
+ ItemType tinyint(4) NOT NULL default '0',
+ Priority int(11) NOT NULL default '0',
+ Status tinyint(4) NOT NULL default '2',
+ TextFormat int(11) NOT NULL default '0',
+ Module varchar(255) NOT NULL default '',
+ PRIMARY KEY (ReviewId),
+ KEY CreatedOn (CreatedOn),
+ KEY ItemId (ItemId),
+ KEY ItemType (ItemType),
+ KEY Priority (Priority),
+ KEY Status (Status)
+);
+
+CREATE TABLE ItemTypes (
+ ItemType int(11) NOT NULL default '0',
+ Module varchar(50) NOT NULL default '',
+ Prefix varchar(20) NOT NULL default '',
+ SourceTable varchar(100) NOT NULL default '',
+ TitleField varchar(50) default NULL,
+ CreatorField varchar(255) NOT NULL default '',
+ PopField varchar(255) default NULL,
+ RateField varchar(255) default NULL,
+ LangVar varchar(255) NOT NULL default '',
+ PrimaryItem int(11) NOT NULL default '0',
+ EditUrl varchar(255) NOT NULL default '',
+ ClassName varchar(40) NOT NULL default '',
+ ItemName varchar(50) NOT NULL default '',
+ PRIMARY KEY (ItemType),
+ KEY Module (Module)
+);
+
+CREATE TABLE ItemFiles (
+ FileId int(11) NOT NULL auto_increment,
+ ResourceId int(11) unsigned NOT NULL default '0',
+ FileName varchar(255) NOT NULL default '',
+ FilePath varchar(255) NOT NULL default '',
+ Size int(11) NOT NULL default '0',
+ `Status` tinyint(4) NOT NULL default '1',
+ CreatedOn int(11) unsigned NOT NULL default '0',
+ CreatedById int(11) NOT NULL default '-1',
+ MimeType varchar(255) NOT NULL default '',
+ PRIMARY KEY (FileId),
+ KEY ResourceId (ResourceId),
+ KEY CreatedOn (CreatedOn),
+ KEY Status (Status)
+);
+
+CREATE TABLE Relationship (
+ RelationshipId int(11) NOT NULL auto_increment,
+ SourceId int(11) default NULL,
+ TargetId int(11) default NULL,
+ SourceType tinyint(4) NOT NULL default '0',
+ TargetType tinyint(4) NOT NULL default '0',
+ Type int(11) NOT NULL default '0',
+ Enabled int(11) NOT NULL default '1',
+ Priority int(11) NOT NULL default '0',
+ PRIMARY KEY (RelationshipId),
+ KEY RelSource (SourceId),
+ KEY RelTarget (TargetId),
+ KEY `Type` (`Type`),
+ KEY Enabled (Enabled),
+ KEY Priority (Priority),
+ KEY SourceType (SourceType),
+ KEY TargetType (TargetType)
+);
+
+CREATE TABLE SearchConfig (
+ TableName varchar(40) NOT NULL default '',
+ FieldName varchar(40) NOT NULL default '',
+ SimpleSearch tinyint(4) NOT NULL default '1',
+ AdvancedSearch tinyint(4) NOT NULL default '1',
+ Description varchar(255) default NULL,
+ DisplayName varchar(80) default NULL,
+ ModuleName VARCHAR(20) NOT NULL DEFAULT 'In-Portal',
+ ConfigHeader varchar(255) default NULL,
+ DisplayOrder int(11) NOT NULL default '0',
+ SearchConfigId int(11) NOT NULL auto_increment,
+ Priority int(11) NOT NULL default '0',
+ FieldType varchar(20) NOT NULL default 'text',
+ ForeignField TEXT,
+ JoinClause TEXT,
+ IsWhere text,
+ IsNotWhere text,
+ ContainsWhere text,
+ NotContainsWhere text,
+ CustomFieldId int(11) default NULL,
+ PRIMARY KEY (SearchConfigId),
+ KEY SimpleSearch (SimpleSearch),
+ KEY AdvancedSearch (AdvancedSearch),
+ KEY DisplayOrder (DisplayOrder),
+ KEY Priority (Priority),
+ KEY CustomFieldId (CustomFieldId)
+);
+
+CREATE TABLE SearchLog (
+ SearchLogId int(11) NOT NULL auto_increment,
+ Keyword varchar(255) NOT NULL default '',
+ Indices bigint(20) NOT NULL default '0',
+ SearchType int(11) NOT NULL default '0',
+ PRIMARY KEY (SearchLogId),
+ KEY SearchType (SearchType)
+);
+
+CREATE TABLE IgnoreKeywords (
+ keyword varchar(20) NOT NULL default '',
+ PRIMARY KEY (keyword)
+);
+
+CREATE TABLE SpamControl (
+ ItemResourceId int(11) NOT NULL default '0',
+ IPaddress varchar(20) NOT NULL default '',
+ Expire INT UNSIGNED NULL DEFAULT NULL,
+ PortalUserId int(11) NOT NULL default '0',
+ DataType varchar(20) default NULL,
+ KEY PortalUserId (PortalUserId),
+ KEY Expire (Expire),
+ KEY ItemResourceId (ItemResourceId)
+);
+
+CREATE TABLE StatItem (
+ StatItemId int(11) NOT NULL auto_increment,
+ Module varchar(20) NOT NULL default '',
+ ValueSQL varchar(255) default NULL,
+ ResetSQL varchar(255) default NULL,
+ ListLabel varchar(255) NOT NULL default '',
+ Priority int(11) NOT NULL default '0',
+ AdminSummary int(11) NOT NULL default '0',
+ PRIMARY KEY (StatItemId),
+ KEY AdminSummary (AdminSummary),
+ KEY Priority (Priority)
+);
+
+CREATE TABLE SuggestMail (
+ email varchar(255) NOT NULL default '',
+ sent INT UNSIGNED NULL DEFAULT NULL,
+ PRIMARY KEY (email),
+ KEY sent (sent)
+);
+
+CREATE TABLE SysCache (
+ SysCacheId int(11) NOT NULL auto_increment,
+ Name varchar(255) NOT NULL default '',
+ Value mediumtext,
+ Expire INT UNSIGNED NULL DEFAULT NULL,
+ Module varchar(20) default NULL,
+ Context varchar(255) default NULL,
+ GroupList varchar(255) NOT NULL default '',
+ PRIMARY KEY (SysCacheId),
+ KEY Name (Name)
+);
+
+CREATE TABLE TagLibrary (
+ TagId int(11) NOT NULL auto_increment,
+ name varchar(255) NOT NULL default '',
+ description text,
+ example text,
+ scope varchar(20) NOT NULL default 'global',
+ PRIMARY KEY (TagId)
+);
+
+CREATE TABLE TagAttributes (
+ AttrId int(11) NOT NULL auto_increment,
+ TagId int(11) NOT NULL default '0',
+ Name varchar(255) NOT NULL default '',
+ AttrType varchar(20) default NULL,
+ DefValue varchar(255) default NULL,
+ Description TEXT,
+ Required int(11) NOT NULL default '0',
+ PRIMARY KEY (AttrId),
+ KEY TagId (TagId)
+);
+
+CREATE TABLE ImportScripts (
+ is_id smallint(5) unsigned NOT NULL auto_increment,
+ is_Module varchar(50) NOT NULL default '',
+ is_string_id varchar(10) NOT NULL default '',
+ is_script varchar(100) NOT NULL default '',
+ is_label varchar(255) NOT NULL default '',
+ is_field_prefix varchar(50) NOT NULL default '',
+ is_requred_fields varchar(255) NOT NULL default '',
+ is_enabled tinyint(1) unsigned NOT NULL default '0',
+ is_type varchar(10) NOT NULL default '',
+ PRIMARY KEY (is_id),
+ KEY is_enabled (is_enabled)
+);
+
+CREATE TABLE StylesheetSelectors (
+ SelectorId int(11) NOT NULL auto_increment,
+ StylesheetId int(11) NOT NULL default '0',
+ Name varchar(255) NOT NULL default '',
+ SelectorName varchar(255) NOT NULL default '',
+ SelectorData text NOT NULL,
+ Description text NOT NULL,
+ Type tinyint(4) NOT NULL default '0',
+ AdvancedCSS text NOT NULL,
+ ParentId int(11) NOT NULL default '0',
+ PRIMARY KEY (SelectorId),
+ KEY StylesheetId (StylesheetId),
+ KEY ParentId (ParentId),
+ KEY `Type` (`Type`)
+);
+
+CREATE TABLE Visits (
+ VisitId int(11) NOT NULL auto_increment,
+ VisitDate int(10) unsigned NOT NULL default '0',
+ Referer varchar(255) NOT NULL default '',
+ IPAddress varchar(15) NOT NULL default '',
+ AffiliateId int(10) unsigned NOT NULL default '0',
+ PortalUserId int(11) NOT NULL default '-2',
+ PRIMARY KEY (VisitId),
+ KEY PortalUserId (PortalUserId),
+ KEY AffiliateId (AffiliateId),
+ KEY VisitDate (VisitDate)
+);
+
+CREATE TABLE ImportCache (
+ CacheId int(11) NOT NULL auto_increment,
+ CacheName varchar(255) NOT NULL default '',
+ VarName int(11) NOT NULL default '0',
+ VarValue text NOT NULL,
+ PRIMARY KEY (CacheId),
+ KEY CacheName (CacheName),
+ KEY VarName (VarName)
+);
+
+CREATE TABLE RelatedSearches (
+ RelatedSearchId int(11) NOT NULL auto_increment,
+ ResourceId int(11) NOT NULL default '0',
+ Keyword varchar(255) NOT NULL default '',
+ ItemType tinyint(4) NOT NULL default '0',
+ Enabled tinyint(4) NOT NULL default '1',
+ Priority int(11) NOT NULL default '0',
+ PRIMARY KEY (RelatedSearchId),
+ KEY Enabled (Enabled),
+ KEY ItemType (ItemType),
+ KEY ResourceId (ResourceId)
+);
\ No newline at end of file
Property changes on: branches/RC/kernel/install/install_schema.sql
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/kernel/install/upgrades.sql
===================================================================
--- branches/RC/kernel/install/upgrades.sql (nonexistent)
+++ branches/RC/kernel/install/upgrades.sql (revision 10832)
@@ -0,0 +1 @@
+# ===== v 4.3.2 =====
Property changes on: branches/RC/kernel/install/upgrades.sql
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/kernel/install/english.lang
===================================================================
--- branches/RC/kernel/install/english.lang (nonexistent)
+++ branches/RC/kernel/install/english.lang (revision 10832)
@@ -0,0 +1,2983 @@
+<LANGUAGES>
+ <LANGUAGE PackName="English" Encoding="base64"><DATEFORMAT>m/d/Y</DATEFORMAT><TIMEFORMAT>g:i:s A</TIMEFORMAT><INPUTDATEFORMAT>m/d/Y</INPUTDATEFORMAT><INPUTTIMEFORMAT>g:i:s A</INPUTTIMEFORMAT><DECIMAL>.</DECIMAL><THOUSANDS>,</THOUSANDS><CHARSET>iso-8859-1</CHARSET><UNITSYSTEM>2</UNITSYSTEM>
+ <PHRASES>
+ <PHRASE Label=" lu_resetpw_confirm_text" Module="In-Portal" Type="0">WW91ciBwYXNzd29yZCBoYXMgYmVlbiByZXNldC4gWW91IHdpbGwgcmVjZWl2ZSB5b3VyIG5ldyBwYXNzd29yZCBpbiB0aGUgZW1haWwgc2hvcnRseS4=</PHRASE>
+ <PHRASE Label="cust_shipping_addr_block" Module="In-Portal" Type="1">QmxvY2sgU2hpcHBpbmcgQWRkcmVzcyBFZGl0aW5n</PHRASE>
+ <PHRASE Label="la_Active" Module="In-Portal" Type="1">QWN0aXZl</PHRASE>
+ <PHRASE Label="LA_ADD" Module="In-Portal" Type="1">QWRk</PHRASE>
+ <PHRASE Label="la_added" Module="In-Portal" Type="1">QWRkZWQ=</PHRASE>
+ <PHRASE Label="la_AddTo" Module="In-Portal" Type="1">QWRkIFRv</PHRASE>
+ <PHRASE Label="la_AdministrativeConsole" Module="In-Portal" Type="1">QWRtaW5pc3RyYXRpdmUgQ29uc29sZQ==</PHRASE>
+ <PHRASE Label="la_AllowDeleteRootCats" Module="In-Portal" Type="1">QWxsb3cgZGVsZXRpbmcgTW9kdWxlIFJvb3QgQ2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_Always" Module="In-Portal" Type="1">QWx3YXlz</PHRASE>
+ <PHRASE Label="la_and" Module="In-Portal" Type="1">YW5k</PHRASE>
+ <PHRASE Label="la_approve_description" Module="In-Portal" Type="1">QWN0aXZl</PHRASE>
+ <PHRASE Label="la_Article_Author" Module="In-Portal" Type="1">QXV0aG9y</PHRASE>
+ <PHRASE Label="la_Article_Date" Module="In-Portal" Type="1">RGF0ZQ==</PHRASE>
+ <PHRASE Label="la_Article_Excerpt" Module="In-Portal" Type="1">QXJ0aWNsZSBFeGNlcnB0</PHRASE>
+ <PHRASE Label="la_Article_Hits" Module="In-Portal" Type="1">SGl0cw==</PHRASE>
+ <PHRASE Label="la_Article_Rating" Module="In-Portal" Type="1">UmF0aW5n</PHRASE>
+ <PHRASE Label="la_article_reviewed" Module="In-Portal" Type="1">QXJ0aWNsZSByZXZpZXdlZA==</PHRASE>
+ <PHRASE Label="la_Article_Title" Module="In-Portal" Type="1">QXJ0aWNsZSBUaXRsZQ==</PHRASE>
+ <PHRASE Label="la_Auto" Module="In-Portal" Type="1">QXV0bw==</PHRASE>
+ <PHRASE Label="la_Automatic" Module="In-Portal" Type="1">QXV0b21hdGlj</PHRASE>
+ <PHRASE Label="la_AvailableColumns" Module="In-Portal" Type="1">QXZhaWxhYmxlIENvbHVtbnM=</PHRASE>
+ <PHRASE Label="la_Background" Module="In-Portal" Type="1">QmFja2dyb3VuZA==</PHRASE>
+ <PHRASE Label="la_ban_email" Module="In-Portal" Type="1">QmFuIGVtYWlsIGFkZHJlc3M=</PHRASE>
+ <PHRASE Label="la_ban_ip" Module="In-Portal" Type="1">QmFuIElQIGFkZHJlc3M=</PHRASE>
+ <PHRASE Label="la_ban_login" Module="In-Portal" Type="1">QmFuIHVzZXIgbmFtZQ==</PHRASE>
+ <PHRASE Label="la_bb" Module="In-Portal" Type="1">SW1wb3J0ZWQ=</PHRASE>
+ <PHRASE Label="la_Borders" Module="In-Portal" Type="1">Qm9yZGVycw==</PHRASE>
+ <PHRASE Label="la_btn_Change" Module="In-Portal" Type="1">Q2hhbmdl</PHRASE>
+ <PHRASE Label="la_btn_Down" Module="In-Portal" Type="1">RG93bg==</PHRASE>
+ <PHRASE Label="la_btn_Up" Module="In-Portal" Type="1">VXA=</PHRASE>
+ <PHRASE Label="la_button_ok" Module="In-Portal" Type="1">T0s=</PHRASE>
+ <PHRASE Label="la_bytes" Module="In-Portal" Type="1">Ynl0ZXM=</PHRASE>
+ <PHRASE Label="la_by_theme" Module="In-Portal" Type="1">QnkgdGhlbWU=</PHRASE>
+ <PHRASE Label="la_Cancel" Module="In-Portal" Type="1">Q2FuY2Vs</PHRASE>
+ <PHRASE Label="la_category" Module="In-Portal" Type="1">Q2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_Category_Date" Module="In-Portal" Type="1">RGF0ZQ==</PHRASE>
+ <PHRASE Label="la_category_daysnew_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIGRheXMgZm9yIGEgY2F0LiB0byBiZSBORVc=</PHRASE>
+ <PHRASE Label="la_Category_Description" Module="In-Portal" Type="1">Q2F0ZWdvcnkgRGVzY3JpcHRpb24=</PHRASE>
+ <PHRASE Label="la_category_metadesc" Module="In-Portal" Type="1">RGVmYXVsdCBNRVRBIGRlc2NyaXB0aW9u</PHRASE>
+ <PHRASE Label="la_category_metakey" Module="In-Portal" Type="1">RGVmYXVsdCBNRVRBIEtleXdvcmRz</PHRASE>
+ <PHRASE Label="la_Category_Name" Module="In-Portal" Type="1">Q2F0ZWdvcnkgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_category_perpage_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIGNhdGVnb3JpZXMgcGVyIHBhZ2U=</PHRASE>
+ <PHRASE Label="la_category_perpage__short_prompt" Module="In-Portal" Type="1">Q2F0ZWdvcmllcyBQZXIgUGFnZSAoU2hvcnRsaXN0KQ==</PHRASE>
+ <PHRASE Label="la_Category_Pick" Module="In-Portal" Type="1">UGljaw==</PHRASE>
+ <PHRASE Label="la_Category_Pop" Module="In-Portal" Type="1">UG9wdWxhcml0eQ==</PHRASE>
+ <PHRASE Label="la_category_showpick_prompt" Module="In-Portal" Type="1">RGlzcGxheSBlZGl0b3IgUElDS3MgYWJvdmUgcmVndWxhciBjYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="la_category_sortfield2_prompt" Module="In-Portal" Type="1">QW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_category_sortfield_prompt" Module="In-Portal" Type="1">T3JkZXIgY2F0ZWdvcmllcyBieQ==</PHRASE>
+ <PHRASE Label="la_Close" Module="In-Portal" Type="1">Q2xvc2U=</PHRASE>
+ <PHRASE Label="la_ColHeader_AltValue" Module="In-Portal" Type="1">QWx0IFZhbHVl</PHRASE>
+ <PHRASE Label="la_ColHeader_BadWord" Module="In-Portal" Type="1">Q2Vuc29yZWQgV29yZA==</PHRASE>
+ <PHRASE Label="la_ColHeader_CreatedOn" Module="In-Portal" Type="2">Q3JlYXRlZCBPbg==</PHRASE>
+ <PHRASE Label="la_ColHeader_Date" Module="In-Portal" Type="1">RGF0ZS9UaW1l</PHRASE>
+ <PHRASE Label="la_ColHeader_Enabled" Module="In-Portal" Type="1">U3RhdHVz</PHRASE>
+ <PHRASE Label="la_ColHeader_FieldLabel" Module="In-Portal" Type="1">TGFiZWw=</PHRASE>
+ <PHRASE Label="la_ColHeader_FieldName" Module="In-Portal" Type="1">RmllbGQgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_Colheader_GroupType" Module="In-Portal" Type="1">VHlwZQ==</PHRASE>
+ <PHRASE Label="la_ColHeader_Image" Module="In-Portal" Type="1">SW1hZ2U=</PHRASE>
+ <PHRASE Label="la_ColHeader_InheritFrom" Module="In-Portal" Type="1">SW5oZXJpdGVkIEZyb20=</PHRASE>
+ <PHRASE Label="la_ColHeader_Item" Module="In-Portal" Type="1">SXRlbQ==</PHRASE>
+ <PHRASE Label="la_Colheader_ItemField" Module="In-Portal" Type="1">SXRlbSBGaWVsZA==</PHRASE>
+ <PHRASE Label="la_ColHeader_ItemType" Module="In-Portal" Type="1">SXRlbSBUeXBl</PHRASE>
+ <PHRASE Label="la_Colheader_ItemValue" Module="In-Portal" Type="1">SXRlbSBWYWx1ZQ==</PHRASE>
+ <PHRASE Label="la_ColHeader_ItemVerb" Module="In-Portal" Type="1">Q29tcGFyaXNvbiBPcGVyYXRvcg==</PHRASE>
+ <PHRASE Label="la_ColHeader_Name" Module="In-Portal" Type="2">TGluayBOYW1l</PHRASE>
+ <PHRASE Label="la_ColHeader_PermAccess" Module="In-Portal" Type="1">QWNjZXNz</PHRASE>
+ <PHRASE Label="la_ColHeader_PermInherited" Module="In-Portal" Type="1">SW5oZXJpdGVk</PHRASE>
+ <PHRASE Label="la_ColHeader_Poster" Module="In-Portal" Type="1">UG9zdGVy</PHRASE>
+ <PHRASE Label="la_ColHeader_Preview" Module="In-Portal" Type="1">UHJldmlldw==</PHRASE>
+ <PHRASE Label="la_ColHeader_Replacement" Module="In-Portal" Type="1">UmVwbGFjZW1lbnQ=</PHRASE>
+ <PHRASE Label="la_ColHeader_Reply" Module="In-Portal" Type="1">UmVwbGllcw==</PHRASE>
+ <PHRASE Label="la_ColHeader_RuleType" Module="In-Portal" Type="1">UnVsZSBUeXBl</PHRASE>
+ <PHRASE Label="la_ColHeader_Status" Module="In-Portal" Type="1">U3RhdHVz</PHRASE>
+ <PHRASE Label="la_ColHeader_Topic" Module="In-Portal" Type="1">VG9waWM=</PHRASE>
+ <PHRASE Label="la_ColHeader_Url" Module="In-Portal" Type="1">VVJM</PHRASE>
+ <PHRASE Label="la_ColHeader_ValidationStatus" Module="In-Portal" Type="2">U3RhdHVz</PHRASE>
+ <PHRASE Label="la_ColHeader_ValidationTime" Module="In-Portal" Type="2">VmFsaWRhdGVkIE9u</PHRASE>
+ <PHRASE Label="la_ColHeader_Value" Module="In-Portal" Type="1">VmFsdWU=</PHRASE>
+ <PHRASE Label="la_ColHeader_Views" Module="In-Portal" Type="1">Vmlld3M=</PHRASE>
+ <PHRASE Label="la_colon" Module="In-Portal" Type="1">Q29sb24=</PHRASE>
+ <PHRASE Label="la_col_Access" Module="In-Portal" Type="1">QWNjZXNz</PHRASE>
+ <PHRASE Label="la_col_AdditionalPermissions" Module="In-Portal" Type="1">QWRkaXRpb25hbA==</PHRASE>
+ <PHRASE Label="la_col_AdminInterfaceLang" Module="In-Portal" Type="1">QWRtaW4gSW50ZXJmYWNl</PHRASE>
+ <PHRASE Label="la_col_Basedon" Module="In-Portal" Type="1">QmFzZWQgT24=</PHRASE>
+ <PHRASE Label="la_col_Category" Module="In-Portal" Type="1">Q2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_col_CategoryName" Module="In-Portal" Type="1">Q2F0ZWdvcnkgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_col_CreatedOn" Module="In-Portal" Type="1">Q3JlYXRlZCBPbg==</PHRASE>
+ <PHRASE Label="la_col_Description" Module="In-Portal" Type="1">RGVzY3JpcHRpb24=</PHRASE>
+ <PHRASE Label="la_col_Duration" Module="In-Portal" Type="1">RHVyYXRpb24=</PHRASE>
+ <PHRASE Label="la_col_DurationType" Module="In-Portal" Type="1">RHVyYXRpb24gVHlwZQ==</PHRASE>
+ <PHRASE Label="la_col_Effective" Module="In-Portal" Type="1">RWZmZWN0aXZl</PHRASE>
+ <PHRASE Label="la_col_Email" Module="In-Portal" Type="1">RW1haWw=</PHRASE>
+ <PHRASE Label="la_col_Error" Module="In-Portal" Type="1">Jm5ic3A7</PHRASE>
+ <PHRASE Label="la_col_Event" Module="In-Portal" Type="1">RXZlbnQ=</PHRASE>
+ <PHRASE Label="la_col_FieldName" Module="In-Portal" Type="1">RmllbGQgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_col_FirstName" Module="In-Portal" Type="1">Rmlyc3QgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_col_GroupName" Module="In-Portal" Type="1">R3JvdXAgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_col_Id" Module="In-Portal" Type="1">SUQ=</PHRASE>
+ <PHRASE Label="la_col_ImageEnabled" Module="In-Portal" Type="1">U3RhdHVz</PHRASE>
+ <PHRASE Label="la_col_ImageName" Module="In-Portal" Type="1">SW1hZ2U=</PHRASE>
+ <PHRASE Label="la_col_ImageUrl" Module="In-Portal" Type="1">VVJM</PHRASE>
+ <PHRASE Label="la_col_Inherited" Module="In-Portal" Type="1">SW5oZXJpdGVk</PHRASE>
+ <PHRASE Label="la_col_InheritedFrom" Module="In-Portal" Type="1">SW5oZXJpdGVkIEZyb20=</PHRASE>
+ <PHRASE Label="la_col_IsPopular" Module="In-Portal" Type="1">UG9wdWxhcg==</PHRASE>
+ <PHRASE Label="la_col_IsPrimary" Module="In-Portal" Type="1">UHJpbWFyeQ==</PHRASE>
+ <PHRASE Label="la_col_IsSystem" Module="In-Portal" Type="1">U3lzdGVt</PHRASE>
+ <PHRASE Label="la_col_Keyword" Module="In-Portal" Type="1">S2V5d29yZA==</PHRASE>
+ <PHRASE Label="la_col_Label" Module="In-Portal" Type="1">TGFiZWw=</PHRASE>
+ <PHRASE Label="la_col_LastChanged" Module="In-Portal" Type="1">TGFzdCBDaGFuZ2Vk</PHRASE>
+ <PHRASE Label="la_col_LastCompiled" Module="In-Portal" Type="1">TGFzdCBDb21waWxlZA==</PHRASE>
+ <PHRASE Label="la_col_LastName" Module="In-Portal" Type="1">TGFzdCBOYW1l</PHRASE>
+ <PHRASE Label="la_col_LinkUrl" Module="In-Portal" Type="1">TGluayBVUkw=</PHRASE>
+ <PHRASE Label="la_col_LocalName" Module="In-Portal" Type="1">TmFtZQ==</PHRASE>
+ <PHRASE Label="la_col_membershipexpires" Module="In-Portal" Type="1">TWVtYmVyc2hpcCBFeHBpcmVz</PHRASE>
+ <PHRASE Label="la_col_Module" Module="In-Portal" Type="1">TW9kdWxl</PHRASE>
+ <PHRASE Label="la_col_Name" Module="In-Portal" Type="1">TmFtZQ==</PHRASE>
+ <PHRASE Label="la_col_PackName" Module="In-Portal" Type="1">UGFjayBOYW1l</PHRASE>
+ <PHRASE Label="la_col_PermAdd" Module="In-Portal" Type="1">QWRk</PHRASE>
+ <PHRASE Label="la_col_PermDelete" Module="In-Portal" Type="1">RGVsZXRl</PHRASE>
+ <PHRASE Label="la_col_PermEdit" Module="In-Portal" Type="1">RWRpdA==</PHRASE>
+ <PHRASE Label="la_col_PermissionName" Module="In-Portal" Type="1">UGVybWlzc2lvbiBOYW1l</PHRASE>
+ <PHRASE Label="la_col_PermissionValue" Module="In-Portal" Type="1">QWNjZXNz</PHRASE>
+ <PHRASE Label="la_col_PermView" Module="In-Portal" Type="1">Vmlldw==</PHRASE>
+ <PHRASE Label="la_col_PhraseType" Module="In-Portal" Type="1">VHlwZQ==</PHRASE>
+ <PHRASE Label="la_col_Preview" Module="In-Portal" Type="1">UHJldmlldw==</PHRASE>
+ <PHRASE Label="la_col_PrimaryGroup" Module="In-Portal" Type="1">UHJpbWFyeSBHcm91cA==</PHRASE>
+ <PHRASE Label="la_col_PrimaryValue" Module="In-Portal" Type="1">UHJpbWFyeSBWYWx1ZQ==</PHRASE>
+ <PHRASE Label="la_col_Prompt" Module="In-Portal" Type="1">RmllbGQgUHJvbXB0</PHRASE>
+ <PHRASE Label="la_col_PurchaseDate" Module="In-Portal" Type="1">RGF0ZQ==</PHRASE>
+ <PHRASE Label="la_col_RebateAmount" Module="In-Portal" Type="1">JA==</PHRASE>
+ <PHRASE Label="la_col_RebatePercent" Module="In-Portal" Type="1">JQ==</PHRASE>
+ <PHRASE Label="la_col_RelationshipType" Module="In-Portal" Type="1">UmVsYXRpb24gVHlwZQ==</PHRASE>
+ <PHRASE Label="la_col_ReviewedBy" Module="In-Portal" Type="1">UmV2aWV3ZWQgQnk=</PHRASE>
+ <PHRASE Label="la_col_ReviewText" Module="In-Portal" Type="1">UmV2aWV3IFRleHQ=</PHRASE>
+ <PHRASE Label="la_col_SelectorName" Module="In-Portal" Type="1">U2VsZWN0b3I=</PHRASE>
+ <PHRASE Label="la_col_Status" Module="In-Portal" Type="1">U3RhdHVz</PHRASE>
+ <PHRASE Label="la_col_TargetId" Module="In-Portal" Type="1">SXRlbQ==</PHRASE>
+ <PHRASE Label="la_col_TargetType" Module="In-Portal" Type="1">SXRlbSBUeXBl</PHRASE>
+ <PHRASE Label="la_col_Title" Module="In-Portal" Type="1">VGl0bGU=</PHRASE>
+ <PHRASE Label="la_col_Translation" Module="In-Portal" Type="1">VmFsdWU=</PHRASE>
+ <PHRASE Label="la_col_Type" Module="In-Portal" Type="1">VHlwZQ==</PHRASE>
+ <PHRASE Label="la_col_UserCount" Module="In-Portal" Type="1">VXNlciBDb3VudA==</PHRASE>
+ <PHRASE Label="la_col_Value" Module="In-Portal" Type="1">RmllbGQgVmFsdWU=</PHRASE>
+ <PHRASE Label="la_col_Version" Module="In-Portal" Type="1">VmVyc2lvbg==</PHRASE>
+ <PHRASE Label="la_col_VisitDate" Module="In-Portal" Type="1">VmlzaXQgRGF0ZQ==</PHRASE>
+ <PHRASE Label="la_comma" Module="In-Portal" Type="1">Q29tbWE=</PHRASE>
+ <PHRASE Label="la_common_ascending" Module="In-Portal" Type="1">QXNjZW5kaW5n</PHRASE>
+ <PHRASE Label="la_common_CreatedOn" Module="In-Portal" Type="1">RGF0ZQ==</PHRASE>
+ <PHRASE Label="la_common_descending" Module="In-Portal" Type="1">RGVzY2VuZGluZw==</PHRASE>
+ <PHRASE Label="la_common_ReviewText" Module="In-Portal" Type="1">UmV2aWV3IFRleHQ=</PHRASE>
+ <PHRASE Label="la_configerror_review" Module="In-Portal" Type="1">UmV2aWV3IG5vdCBhZGRlZCBkdWUgdG8gYSBzeXN0ZW0gZXJyb3I=</PHRASE>
+ <PHRASE Label="la_config_AutoRefreshIntervals" Module="In-Portal" Type="1">QXV0by1SZWZyZXNoIEludGVydmFscyBmb3IgR3JpZHM=</PHRASE>
+ <PHRASE Label="la_config_backup_path" Module="In-Portal" Type="1">QmFja3VwIFBhdGg=</PHRASE>
+ <PHRASE Label="la_config_CatalogPreselectModuleTab" Module="In-Portal" Type="1">U3dpdGNoIENhdGFsb2cgdGFicyBiYXNlZCBvbiBNb2R1bGU=</PHRASE>
+ <PHRASE Label="la_config_company" Module="In-Portal" Type="1">Q29tcGFueQ==</PHRASE>
+ <PHRASE Label="la_config_CSVExportDelimiter" Module="In-Portal" Type="1">RGVmYXVsdCBDU1YgRXhwb3J0IERlbGltaXRlcg==</PHRASE>
+ <PHRASE Label="la_config_CSVExportEnclosure" Module="In-Portal" Type="1">RGVmYXVsdCBDU1YgRXhwb3J0IEVuY2xvc3VyZSBDaGFyYWN0ZXI=</PHRASE>
+ <PHRASE Label="la_config_CSVExportEncoding" Module="In-Portal" Type="1">RGVmYXVsdCBDU1YgRXhwb3J0IEVuY29kaW5n</PHRASE>
+ <PHRASE Label="la_config_CSVExportSeparator" Module="In-Portal" Type="1">RGVmYXVsdCBDU1YgRXhwb3J0IE5ldyBMaW5lIFNlcGFyYXRvcg==</PHRASE>
+ <PHRASE Label="la_config_DefaultRegistrationCountry" Module="In-Portal" Type="1">RGVmYXVsdCBSZWdpc3RyYXRpb24gQ291bnRyeQ==</PHRASE>
+ <PHRASE Label="la_config_error_template" Module="In-Portal" Type="1">RmlsZSBub3QgZm91bmQgKDQwNCkgdGVtcGxhdGU=</PHRASE>
+ <PHRASE Label="la_config_first_day_of_week" Module="In-Portal" Type="1">Rmlyc3QgRGF5IE9mIFdlZWs=</PHRASE>
+ <PHRASE Label="la_config_force_http" Module="In-Portal" Type="1">UmVkaXJlY3QgdG8gSFRUUCB3aGVuIFNTTCBpcyBub3QgcmVxdWlyZWQ=</PHRASE>
+ <PHRASE Label="la_config_FullImageHeight" Module="In-Portal" Type="1">RnVsbCBpbWFnZSBIZWlnaHQ=</PHRASE>
+ <PHRASE Label="la_config_FullImageWidth" Module="In-Portal" Type="1">RnVsbCBpbWFnZSBXaWR0aA==</PHRASE>
+ <PHRASE Label="la_config_MailFunctionHeaderSeparator" Module="In-Portal" Type="1">SGVhZGVyIFNlcGFyYXRvciBUeXBl</PHRASE>
+ <PHRASE Label="la_config_MaxImageCount" Module="In-Portal" Type="1">TWF4aW11bSBudW1iZXIgb2YgaW1hZ2Vz</PHRASE>
+ <PHRASE Label="la_config_name" Module="In-Portal" Type="1">TmFtZQ==</PHRASE>
+ <PHRASE Label="la_config_nopermission_template" Module="In-Portal" Type="1">SW5zdWZmaWNlbnQgcGVybWlzc2lvbnMgdGVtcGxhdGU=</PHRASE>
+ <PHRASE Label="la_config_OutputCompressionLevel" Module="In-Portal" Type="1">R1pJUCBjb21wcmVzc2lvbiBsZXZlbCAwLTk=</PHRASE>
+ <PHRASE Label="la_config_PerpageReviews" Module="In-Portal" Type="1">UmV2aWV3cyBwZXIgcGFnZQ==</PHRASE>
+ <PHRASE Label="la_config_RecycleBinFolder" Module="In-Portal" Type="1">IlJlY3ljbGUgQmluIiBDYXRlZ29yeUlk</PHRASE>
+ <PHRASE Label="la_config_reg_number" Module="In-Portal" Type="1">UmVnaXN0cmF0aW9uIE51bWJlcg==</PHRASE>
+ <PHRASE Label="la_config_require_ssl" Module="In-Portal" Type="1">UmVxdWlyZSBTU0wgZm9yIGxvZ2luICYgY2hlY2tvdXQ=</PHRASE>
+ <PHRASE Label="la_config_RememberLastAdminTemplate" Module="In-Portal" Type="1">UmVtZW1iZXIgTGFzdCBBZG1pbiBUZW1wbGF0ZQ==</PHRASE>
+ <PHRASE Label="la_config_server_name" Module="In-Portal" Type="1">U2VydmVyIE5hbWU=</PHRASE>
+ <PHRASE Label="la_config_server_path" Module="In-Portal" Type="1">U2VydmVyIFBhdGg=</PHRASE>
+ <PHRASE Label="la_config_site_zone" Module="In-Portal" Type="1">VGltZSB6b25lIG9mIHRoZSBzaXRl</PHRASE>
+ <PHRASE Label="la_config_ssl_url" Module="In-Portal" Type="1">U1NMIEZ1bGwgVVJMIChodHRwczovL3d3dy5kb21haW4uY29tL3BhdGgp</PHRASE>
+ <PHRASE Label="la_config_ThumbnailImageHeight" Module="In-Portal" Type="1">VGh1bWJuYWlsIEhlaWdodA==</PHRASE>
+ <PHRASE Label="la_config_ThumbnailImageWidth" Module="In-Portal" Type="1">VGh1bWJuYWlsIFdpZHRo</PHRASE>
+ <PHRASE Label="la_config_time_server" Module="In-Portal" Type="1">VGltZSB6b25lIG9mIHRoZSBzZXJ2ZXI=</PHRASE>
+ <PHRASE Label="la_config_TrimRequiredFields" Module="In-Portal" Type="1">VHJpbSBSZXF1aXJlZCBmaWVsZHM=</PHRASE>
+ <PHRASE Label="la_config_UseChangeLog" Module="In-Portal" Type="1">RW5hYmxlIENoYW5nZSBMb2cgKEJldGEp</PHRASE>
+ <PHRASE Label="la_config_UseColumnFreezer" Module="In-Portal" Type="1">VXNlIGNvbHVtbiBmcmVlemVy</PHRASE>
+ <PHRASE Label="la_config_UseOutputCompression" Module="In-Portal" Type="1">RW5hYmxlIEhUTUwgR1pJUCBjb21wcmVzc2lvbg==</PHRASE>
+ <PHRASE Label="la_config_UsePageHitCounter" Module="In-Portal" Type="1">VXNlIFBhZ2VIaXQgY291bnRlcg==</PHRASE>
+ <PHRASE Label="la_config_UseSmallHeader" Module="In-Portal" Type="1">VXNlIFNtYWxsIEhlYWRlcg==</PHRASE>
+ <PHRASE Label="la_config_UseToolbarLabels" Module="In-Portal" Type="1">VXNlIFRvb2xiYXIgTGFiZWxz</PHRASE>
+ <PHRASE Label="la_config_use_js_redirect" Module="In-Portal" Type="1">VXNlIEphdmFTY3JpcHQgcmVkaXJlY3Rpb24gYWZ0ZXIgbG9naW4vbG9nb3V0IChmb3IgSUlTKQ==</PHRASE>
+ <PHRASE Label="la_config_use_modrewrite" Module="In-Portal" Type="1">VXNlIE1PRCBSRVdSSVRF</PHRASE>
+ <PHRASE Label="la_config_use_modrewrite_with_ssl" Module="In-Portal" Type="1">RW5hYmxlIE1PRF9SRVdSSVRFIGZvciBTU0w=</PHRASE>
+ <PHRASE Label="la_config_website_address" Module="In-Portal" Type="1">V2Vic2l0ZSBhZGRyZXNz</PHRASE>
+ <PHRASE Label="la_config_website_name" Module="In-Portal" Type="1">V2Vic2l0ZSBuYW1l</PHRASE>
+ <PHRASE Label="la_config_web_address" Module="In-Portal" Type="1">V2ViIGFkZHJlc3M=</PHRASE>
+ <PHRASE Label="la_ConfirmDeleteExportPreset" Module="In-Portal" Type="1">QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBzZWxlY3RlZCBFeHBvcnQgUHJlc2V0Pw==</PHRASE>
+ <PHRASE Label="la_confirm_maintenance" Module="In-Portal" Type="1">VGhlIGNhdGVnb3J5IHRyZWUgbXVzdCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGxhdGVzdCBjaGFuZ2Vz</PHRASE>
+ <PHRASE Label="la_Continue" Module="In-Portal" Type="1">Q29udGludWU=</PHRASE>
+ <PHRASE Label="la_country_ABW" Module="In-Portal" Type="1">QXJ1YmE=</PHRASE>
+ <PHRASE Label="la_country_AFG" Module="In-Portal" Type="1">QWZnaGFuaXN0YW4=</PHRASE>
+ <PHRASE Label="la_country_AGO" Module="In-Portal" Type="1">QW5nb2xh</PHRASE>
+ <PHRASE Label="la_country_AIA" Module="In-Portal" Type="1">QW5ndWlsbGE=</PHRASE>
+ <PHRASE Label="la_country_ALB" Module="In-Portal" Type="1">QWxiYW5pYQ==</PHRASE>
+ <PHRASE Label="la_country_AND" Module="In-Portal" Type="1">QW5kb3JyYQ==</PHRASE>
+ <PHRASE Label="la_country_ANT" Module="In-Portal" Type="1">TmV0aGVybGFuZHMgQW50aWxsZXM=</PHRASE>
+ <PHRASE Label="la_country_ARE" Module="In-Portal" Type="1">VW5pdGVkIEFyYWIgRW1pcmF0ZXM=</PHRASE>
+ <PHRASE Label="la_country_ARG" Module="In-Portal" Type="1">QXJnZW50aW5h</PHRASE>
+ <PHRASE Label="la_country_ARM" Module="In-Portal" Type="1">QXJtZW5pYQ==</PHRASE>
+ <PHRASE Label="la_country_ASM" Module="In-Portal" Type="1">QW1lcmljYW4gc2Ftb2E=</PHRASE>
+ <PHRASE Label="la_country_ATA" Module="In-Portal" Type="1">QW50YXJjdGljYQ==</PHRASE>
+ <PHRASE Label="la_country_ATF" Module="In-Portal" Type="1">RnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVz</PHRASE>
+ <PHRASE Label="la_country_ATG" Module="In-Portal" Type="1">QW50aWd1YSBhbmQgYmFyYnVkYQ==</PHRASE>
+ <PHRASE Label="la_country_AUS" Module="In-Portal" Type="1">QXVzdHJhbGlh</PHRASE>
+ <PHRASE Label="la_country_AUT" Module="In-Portal" Type="1">QXVzdHJpYQ==</PHRASE>
+ <PHRASE Label="la_country_AZE" Module="In-Portal" Type="1">QXplcmJhaWphbg==</PHRASE>
+ <PHRASE Label="la_country_BDI" Module="In-Portal" Type="1">QnVydW5kaQ==</PHRASE>
+ <PHRASE Label="la_country_BEL" Module="In-Portal" Type="1">QmVsZ2l1bQ==</PHRASE>
+ <PHRASE Label="la_country_BEN" Module="In-Portal" Type="1">QmVuaW4=</PHRASE>
+ <PHRASE Label="la_country_BFA" Module="In-Portal" Type="1">QnVya2luYSBGYXNv</PHRASE>
+ <PHRASE Label="la_country_BGD" Module="In-Portal" Type="1">QmFuZ2xhZGVzaA==</PHRASE>
+ <PHRASE Label="la_country_BGR" Module="In-Portal" Type="1">QnVsZ2FyaWE=</PHRASE>
+ <PHRASE Label="la_country_BHR" Module="In-Portal" Type="1">QmFocmFpbg==</PHRASE>
+ <PHRASE Label="la_country_BHS" Module="In-Portal" Type="1">QmFoYW1hcw==</PHRASE>
+ <PHRASE Label="la_country_BIH" Module="In-Portal" Type="1">Qm9zbmlhIGFuZCBIZXJ6ZWdvd2luYQ==</PHRASE>
+ <PHRASE Label="la_country_BLR" Module="In-Portal" Type="1">QmVsYXJ1cw==</PHRASE>
+ <PHRASE Label="la_country_BLZ" Module="In-Portal" Type="1">QmVsaXpl</PHRASE>
+ <PHRASE Label="la_country_BMU" Module="In-Portal" Type="1">QmVybXVkYQ==</PHRASE>
+ <PHRASE Label="la_country_BOL" Module="In-Portal" Type="1">Qm9saXZpYQ==</PHRASE>
+ <PHRASE Label="la_country_BRA" Module="In-Portal" Type="1">QnJhemls</PHRASE>
+ <PHRASE Label="la_country_BRB" Module="In-Portal" Type="1">QmFyYmFkb3M=</PHRASE>
+ <PHRASE Label="la_country_BRN" Module="In-Portal" Type="1">QnJ1bmVpIERhcnVzc2FsYW0=</PHRASE>
+ <PHRASE Label="la_country_BTN" Module="In-Portal" Type="1">Qmh1dGFu</PHRASE>
+ <PHRASE Label="la_country_BVT" Module="In-Portal" Type="1">Qm91dmV0IElzbGFuZA==</PHRASE>
+ <PHRASE Label="la_country_BWA" Module="In-Portal" Type="1">Qm90c3dhbmE=</PHRASE>
+ <PHRASE Label="la_country_CAF" Module="In-Portal" Type="1">Q2VudHJhbCBBZnJpY2FuIFJlcHVibGlj</PHRASE>
+ <PHRASE Label="la_country_CAN" Module="In-Portal" Type="1">Q2FuYWRh</PHRASE>
+ <PHRASE Label="la_country_CCK" Module="In-Portal" Type="1">Q29jb3MgKEtlZWxpbmcpIElzbGFuZHM=</PHRASE>
+ <PHRASE Label="la_country_CHE" Module="In-Portal" Type="1">U3dpdHplcmxhbmQ=</PHRASE>
+ <PHRASE Label="la_country_CHL" Module="In-Portal" Type="1">Q2hpbGU=</PHRASE>
+ <PHRASE Label="la_country_CHN" Module="In-Portal" Type="1">Q2hpbmE=</PHRASE>
+ <PHRASE Label="la_country_CIV" Module="In-Portal" Type="1">Q290ZSBkJ0l2b2lyZQ==</PHRASE>
+ <PHRASE Label="la_country_CMR" Module="In-Portal" Type="1">Q2FtZXJvb24=</PHRASE>
+ <PHRASE Label="la_country_COD" Module="In-Portal" Type="1">Q29uZ28sIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgKFdhcyBaYWlyZSk=</PHRASE>
+ <PHRASE Label="la_country_COG" Module="In-Portal" Type="1">Q29uZ28sIFBlb3BsZSdzIFJlcHVibGljIG9m</PHRASE>
+ <PHRASE Label="la_country_COK" Module="In-Portal" Type="1">Q29vayBJc2xhbmRz</PHRASE>
+ <PHRASE Label="la_country_COL" Module="In-Portal" Type="1">Q29sb21iaWE=</PHRASE>
+ <PHRASE Label="la_country_COM" Module="In-Portal" Type="1">Q29tb3Jvcw==</PHRASE>
+ <PHRASE Label="la_country_CPV" Module="In-Portal" Type="1">Q2FwZSBWZXJkZQ==</PHRASE>
+ <PHRASE Label="la_country_CRI" Module="In-Portal" Type="1">Q29zdGEgUmljYQ==</PHRASE>
+ <PHRASE Label="la_country_CUB" Module="In-Portal" Type="1">Q3ViYQ==</PHRASE>
+ <PHRASE Label="la_country_CXR" Module="In-Portal" Type="1">Q2hyaXN0bWFzIElzbGFuZA==</PHRASE>
+ <PHRASE Label="la_country_CYM" Module="In-Portal" Type="1">Q2F5bWFuIElzbGFuZHM=</PHRASE>
+ <PHRASE Label="la_country_CYP" Module="In-Portal" Type="1">Q3lwcnVz</PHRASE>
+ <PHRASE Label="la_country_CZE" Module="In-Portal" Type="1">Q3plY2ggUmVwdWJsaWM=</PHRASE>
+ <PHRASE Label="la_country_DEU" Module="In-Portal" Type="1">R2VybWFueQ==</PHRASE>
+ <PHRASE Label="la_country_DJI" Module="In-Portal" Type="1">RGppYm91dGk=</PHRASE>
+ <PHRASE Label="la_country_DMA" Module="In-Portal" Type="1">RG9taW5pY2E=</PHRASE>
+ <PHRASE Label="la_country_DNK" Module="In-Portal" Type="1">RGVubWFyaw==</PHRASE>
+ <PHRASE Label="la_country_DOM" Module="In-Portal" Type="1">RG9taW5pY2FuIFJlcHVibGlj</PHRASE>
+ <PHRASE Label="la_country_DZA" Module="In-Portal" Type="1">QWxnZXJpYQ==</PHRASE>
+ <PHRASE Label="la_country_ECU" Module="In-Portal" Type="1">RWN1YWRvcg==</PHRASE>
+ <PHRASE Label="la_country_EGY" Module="In-Portal" Type="1">RWd5cHQ=</PHRASE>
+ <PHRASE Label="la_country_ERI" Module="In-Portal" Type="1">RXJpdHJlYQ==</PHRASE>
+ <PHRASE Label="la_country_ESH" Module="In-Portal" Type="1">V2VzdGVybiBTYWhhcmE=</PHRASE>
+ <PHRASE Label="la_country_ESP" Module="In-Portal" Type="1">U3BhaW4=</PHRASE>
+ <PHRASE Label="la_country_EST" Module="In-Portal" Type="1">RXN0b25pYQ==</PHRASE>
+ <PHRASE Label="la_country_ETH" Module="In-Portal" Type="1">RXRoaW9waWE=</PHRASE>
+ <PHRASE Label="la_country_FIN" Module="In-Portal" Type="1">RmlubGFuZA==</PHRASE>
+ <PHRASE Label="la_country_FJI" Module="In-Portal" Type="1">RmlqaQ==</PHRASE>
+ <PHRASE Label="la_country_FLK" Module="In-Portal" Type="1">RmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMp</PHRASE>
+ <PHRASE Label="la_country_FRA" Module="In-Portal" Type="1">RnJhbmNl</PHRASE>
+ <PHRASE Label="la_country_FRO" Module="In-Portal" Type="1">RmFyb2UgSXNsYW5kcw==</PHRASE>
+ <PHRASE Label="la_country_FSM" Module="In-Portal" Type="1">TWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZg==</PHRASE>
+ <PHRASE Label="la_country_FXX" Module="In-Portal" Type="1">RnJhbmNlLCBNZXRyb3BvbGl0YW4=</PHRASE>
+ <PHRASE Label="la_country_GAB" Module="In-Portal" Type="1">R2Fib24=</PHRASE>
+ <PHRASE Label="la_country_GBR" Module="In-Portal" Type="1">VW5pdGVkIEtpbmdkb20=</PHRASE>
+ <PHRASE Label="la_country_GEO" Module="In-Portal" Type="1">R2VvcmdpYQ==</PHRASE>
+ <PHRASE Label="la_country_GHA" Module="In-Portal" Type="1">R2hhbmE=</PHRASE>
+ <PHRASE Label="la_country_GIB" Module="In-Portal" Type="1">R2licmFsdGFy</PHRASE>
+ <PHRASE Label="la_country_GIN" Module="In-Portal" Type="1">R3VpbmVh</PHRASE>
+ <PHRASE Label="la_country_GLP" Module="In-Portal" Type="1">R3VhZGVsb3VwZQ==</PHRASE>
+ <PHRASE Label="la_country_GMB" Module="In-Portal" Type="1">R2FtYmlh</PHRASE>
+ <PHRASE Label="la_country_GNB" Module="In-Portal" Type="1">R3VpbmVhLUJpc3NhdQ==</PHRASE>
+ <PHRASE Label="la_country_GNQ" Module="In-Portal" Type="1">RXF1YXRvcmlhbCBHdWluZWE=</PHRASE>
+ <PHRASE Label="la_country_GRC" Module="In-Portal" Type="1">R3JlZWNl</PHRASE>
+ <PHRASE Label="la_country_GRD" Module="In-Portal" Type="1">R3JlbmFkYQ==</PHRASE>
+ <PHRASE Label="la_country_GRL" Module="In-Portal" Type="1">R3JlZW5sYW5k</PHRASE>
+ <PHRASE Label="la_country_GTM" Module="In-Portal" Type="1">R3VhdGVtYWxh</PHRASE>
+ <PHRASE Label="la_country_GUF" Module="In-Portal" Type="1">RnJlbmNoIEd1aWFuYQ==</PHRASE>
+ <PHRASE Label="la_country_GUM" Module="In-Portal" Type="1">R3VhbQ==</PHRASE>
+ <PHRASE Label="la_country_GUY" Module="In-Portal" Type="1">R3V5YW5h</PHRASE>
+ <PHRASE Label="la_country_HKG" Module="In-Portal" Type="1">SG9uZyBrb25n</PHRASE>
+ <PHRASE Label="la_country_HMD" Module="In-Portal" Type="1">SGVhcmQgYW5kIE1jIERvbmFsZCBJc2xhbmRz</PHRASE>
+ <PHRASE Label="la_country_HND" Module="In-Portal" Type="1">SG9uZHVyYXM=</PHRASE>
+ <PHRASE Label="la_country_HRV" Module="In-Portal" Type="1">Q3JvYXRpYSAobG9jYWwgbmFtZTogSHJ2YXRza2Ep</PHRASE>
+ <PHRASE Label="la_country_HTI" Module="In-Portal" Type="1">SGFpdGk=</PHRASE>
+ <PHRASE Label="la_country_HUN" Module="In-Portal" Type="1">SHVuZ2FyeQ==</PHRASE>
+ <PHRASE Label="la_country_IDN" Module="In-Portal" Type="1">SW5kb25lc2lh</PHRASE>
+ <PHRASE Label="la_country_IND" Module="In-Portal" Type="1">SW5kaWE=</PHRASE>
+ <PHRASE Label="la_country_IOT" Module="In-Portal" Type="1">QnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5</PHRASE>
+ <PHRASE Label="la_country_IRL" Module="In-Portal" Type="1">SXJlbGFuZA==</PHRASE>
+ <PHRASE Label="la_country_IRN" Module="In-Portal" Type="1">SXJhbiAoSXNsYW1pYyBSZXB1YmxpYyBvZik=</PHRASE>
+ <PHRASE Label="la_country_IRQ" Module="In-Portal" Type="1">SXJhcQ==</PHRASE>
+ <PHRASE Label="la_country_ISL" Module="In-Portal" Type="1">SWNlbGFuZA==</PHRASE>
+ <PHRASE Label="la_country_ISR" Module="In-Portal" Type="1">SXNyYWVs</PHRASE>
+ <PHRASE Label="la_country_ITA" Module="In-Portal" Type="1">SXRhbHk=</PHRASE>
+ <PHRASE Label="la_country_JAM" Module="In-Portal" Type="1">SmFtYWljYQ==</PHRASE>
+ <PHRASE Label="la_country_JOR" Module="In-Portal" Type="1">Sm9yZGFu</PHRASE>
+ <PHRASE Label="la_country_JPN" Module="In-Portal" Type="1">SmFwYW4=</PHRASE>
+ <PHRASE Label="la_country_KAZ" Module="In-Portal" Type="1">S2F6YWtoc3Rhbg==</PHRASE>
+ <PHRASE Label="la_country_KEN" Module="In-Portal" Type="1">S2VueWE=</PHRASE>
+ <PHRASE Label="la_country_KGZ" Module="In-Portal" Type="1">S3lyZ3l6c3Rhbg==</PHRASE>
+ <PHRASE Label="la_country_KHM" Module="In-Portal" Type="1">Q2FtYm9kaWE=</PHRASE>
+ <PHRASE Label="la_country_KIR" Module="In-Portal" Type="1">S2lyaWJhdGk=</PHRASE>
+ <PHRASE Label="la_country_KNA" Module="In-Portal" Type="1">U2FpbnQgS2l0dHMgYW5kIE5ldmlz</PHRASE>
+ <PHRASE Label="la_country_KOR" Module="In-Portal" Type="1">S29yZWEsIFJlcHVibGljIG9m</PHRASE>
+ <PHRASE Label="la_country_KWT" Module="In-Portal" Type="1">S3V3YWl0</PHRASE>
+ <PHRASE Label="la_country_LAO" Module="In-Portal" Type="1">TGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWM=</PHRASE>
+ <PHRASE Label="la_country_LBN" Module="In-Portal" Type="1">TGViYW5vbg==</PHRASE>
+ <PHRASE Label="la_country_LBR" Module="In-Portal" Type="1">TGliZXJpYQ==</PHRASE>
+ <PHRASE Label="la_country_LBY" Module="In-Portal" Type="1">TGlieWFuIEFyYWIgSmFtYWhpcml5YQ==</PHRASE>
+ <PHRASE Label="la_country_LCA" Module="In-Portal" Type="1">U2FpbnQgTHVjaWE=</PHRASE>
+ <PHRASE Label="la_country_LIE" Module="In-Portal" Type="1">TGllY2h0ZW5zdGVpbg==</PHRASE>
+ <PHRASE Label="la_country_LKA" Module="In-Portal" Type="1">U3JpIGxhbmth</PHRASE>
+ <PHRASE Label="la_country_LSO" Module="In-Portal" Type="1">TGVzb3Robw==</PHRASE>
+ <PHRASE Label="la_country_LTU" Module="In-Portal" Type="1">TGl0aHVhbmlh</PHRASE>
+ <PHRASE Label="la_country_LUX" Module="In-Portal" Type="1">THV4ZW1ib3VyZw==</PHRASE>
+ <PHRASE Label="la_country_LVA" Module="In-Portal" Type="1">TGF0dmlh</PHRASE>
+ <PHRASE Label="la_country_MAC" Module="In-Portal" Type="1">TWFjYXU=</PHRASE>
+ <PHRASE Label="la_country_MAR" Module="In-Portal" Type="1">TW9yb2Njbw==</PHRASE>
+ <PHRASE Label="la_country_MCO" Module="In-Portal" Type="1">TW9uYWNv</PHRASE>
+ <PHRASE Label="la_country_MDA" Module="In-Portal" Type="1">TW9sZG92YSwgUmVwdWJsaWMgb2Y=</PHRASE>
+ <PHRASE Label="la_country_MDG" Module="In-Portal" Type="1">TWFkYWdhc2Nhcg==</PHRASE>
+ <PHRASE Label="la_country_MDV" Module="In-Portal" Type="1">TWFsZGl2ZXM=</PHRASE>
+ <PHRASE Label="la_country_MEX" Module="In-Portal" Type="1">TWV4aWNv</PHRASE>
+ <PHRASE Label="la_country_MHL" Module="In-Portal" Type="1">TWFyc2hhbGwgSXNsYW5kcw==</PHRASE>
+ <PHRASE Label="la_country_MKD" Module="In-Portal" Type="1">TWFjZWRvbmlh</PHRASE>
+ <PHRASE Label="la_country_MLI" Module="In-Portal" Type="1">TWFsaQ==</PHRASE>
+ <PHRASE Label="la_country_MLT" Module="In-Portal" Type="1">TWFsdGE=</PHRASE>
+ <PHRASE Label="la_country_MMR" Module="In-Portal" Type="1">TXlhbm1hcg==</PHRASE>
+ <PHRASE Label="la_country_MNG" Module="In-Portal" Type="1">TW9uZ29saWE=</PHRASE>
+ <PHRASE Label="la_country_MNP" Module="In-Portal" Type="1">Tm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRz</PHRASE>
+ <PHRASE Label="la_country_MOZ" Module="In-Portal" Type="1">TW96YW1iaXF1ZQ==</PHRASE>
+ <PHRASE Label="la_country_MRT" Module="In-Portal" Type="1">TWF1cml0YW5pYQ==</PHRASE>
+ <PHRASE Label="la_country_MSR" Module="In-Portal" Type="1">TW9udHNlcnJhdA==</PHRASE>
+ <PHRASE Label="la_country_MTQ" Module="In-Portal" Type="1">TWFydGluaXF1ZQ==</PHRASE>
+ <PHRASE Label="la_country_MUS" Module="In-Portal" Type="1">TWF1cml0aXVz</PHRASE>
+ <PHRASE Label="la_country_MWI" Module="In-Portal" Type="1">TWFsYXdp</PHRASE>
+ <PHRASE Label="la_country_MYS" Module="In-Portal" Type="1">TWFsYXlzaWE=</PHRASE>
+ <PHRASE Label="la_country_MYT" Module="In-Portal" Type="1">TWF5b3R0ZQ==</PHRASE>
+ <PHRASE Label="la_country_NAM" Module="In-Portal" Type="1">TmFtaWJpYQ==</PHRASE>
+ <PHRASE Label="la_country_NCL" Module="In-Portal" Type="1">TmV3IENhbGVkb25pYQ==</PHRASE>
+ <PHRASE Label="la_country_NER" Module="In-Portal" Type="1">TmlnZXI=</PHRASE>
+ <PHRASE Label="la_country_NFK" Module="In-Portal" Type="1">Tm9yZm9sayBJc2xhbmQ=</PHRASE>
+ <PHRASE Label="la_country_NGA" Module="In-Portal" Type="1">TmlnZXJpYQ==</PHRASE>
+ <PHRASE Label="la_country_NIC" Module="In-Portal" Type="1">TmljYXJhZ3Vh</PHRASE>
+ <PHRASE Label="la_country_NIU" Module="In-Portal" Type="1">Tml1ZQ==</PHRASE>
+ <PHRASE Label="la_country_NLD" Module="In-Portal" Type="1">TmV0aGVybGFuZHM=</PHRASE>
+ <PHRASE Label="la_country_NOR" Module="In-Portal" Type="1">Tm9yd2F5</PHRASE>
+ <PHRASE Label="la_country_NPL" Module="In-Portal" Type="1">TmVwYWw=</PHRASE>
+ <PHRASE Label="la_country_NRU" Module="In-Portal" Type="1">TmF1cnU=</PHRASE>
+ <PHRASE Label="la_country_NZL" Module="In-Portal" Type="1">TmV3IFplYWxhbmQ=</PHRASE>
+ <PHRASE Label="la_country_OMN" Module="In-Portal" Type="1">T21hbg==</PHRASE>
+ <PHRASE Label="la_country_PAK" Module="In-Portal" Type="1">UGFraXN0YW4=</PHRASE>
+ <PHRASE Label="la_country_PAN" Module="In-Portal" Type="1">UGFuYW1h</PHRASE>
+ <PHRASE Label="la_country_PCN" Module="In-Portal" Type="1">UGl0Y2Fpcm4=</PHRASE>
+ <PHRASE Label="la_country_PER" Module="In-Portal" Type="1">UGVydQ==</PHRASE>
+ <PHRASE Label="la_country_PHL" Module="In-Portal" Type="1">UGhpbGlwcGluZXM=</PHRASE>
+ <PHRASE Label="la_country_PLW" Module="In-Portal" Type="1">UGFsYXU=</PHRASE>
+ <PHRASE Label="la_country_PNG" Module="In-Portal" Type="1">UGFwdWEgTmV3IEd1aW5lYQ==</PHRASE>
+ <PHRASE Label="la_country_POL" Module="In-Portal" Type="1">UG9sYW5k</PHRASE>
+ <PHRASE Label="la_country_PRI" Module="In-Portal" Type="1">UHVlcnRvIFJpY28=</PHRASE>
+ <PHRASE Label="la_country_PRK" Module="In-Portal" Type="1">S29yZWEsIERlbW9jcmF0aWMgUGVvcGxlJ3MgUmVwdWJsaWMgb2Y=</PHRASE>
+ <PHRASE Label="la_country_PRT" Module="In-Portal" Type="1">UG9ydHVnYWw=</PHRASE>
+ <PHRASE Label="la_country_PRY" Module="In-Portal" Type="1">UGFyYWd1YXk=</PHRASE>
+ <PHRASE Label="la_country_PSE" Module="In-Portal" Type="1">UGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZA==</PHRASE>
+ <PHRASE Label="la_country_PYF" Module="In-Portal" Type="1">RnJlbmNoIFBvbHluZXNpYQ==</PHRASE>
+ <PHRASE Label="la_country_QAT" Module="In-Portal" Type="1">UWF0YXI=</PHRASE>
+ <PHRASE Label="la_country_REU" Module="In-Portal" Type="1">UmV1bmlvbg==</PHRASE>
+ <PHRASE Label="la_country_ROU" Module="In-Portal" Type="1">Um9tYW5pYQ==</PHRASE>
+ <PHRASE Label="la_country_RUS" Module="In-Portal" Type="1">UnVzc2lhbiBGZWRlcmF0aW9u</PHRASE>
+ <PHRASE Label="la_country_RWA" Module="In-Portal" Type="1">UndhbmRh</PHRASE>
+ <PHRASE Label="la_country_SAU" Module="In-Portal" Type="1">U2F1ZGkgQXJhYmlh</PHRASE>
+ <PHRASE Label="la_country_SDN" Module="In-Portal" Type="1">U3VkYW4=</PHRASE>
+ <PHRASE Label="la_country_SEN" Module="In-Portal" Type="1">U2VuZWdhbA==</PHRASE>
+ <PHRASE Label="la_country_SGP" Module="In-Portal" Type="1">U2luZ2Fwb3Jl</PHRASE>
+ <PHRASE Label="la_country_SGS" Module="In-Portal" Type="1">U291dGggR2VvcmdpYSBhbmQgVGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHM=</PHRASE>
+ <PHRASE Label="la_country_SHN" Module="In-Portal" Type="1">U3QuIGhlbGVuYQ==</PHRASE>
+ <PHRASE Label="la_country_SJM" Module="In-Portal" Type="1">U3ZhbGJhcmQgYW5kIEphbiBNYXllbiBJc2xhbmRz</PHRASE>
+ <PHRASE Label="la_country_SLB" Module="In-Portal" Type="1">U29sb21vbiBJc2xhbmRz</PHRASE>
+ <PHRASE Label="la_country_SLE" Module="In-Portal" Type="1">U2llcnJhIExlb25l</PHRASE>
+ <PHRASE Label="la_country_SLV" Module="In-Portal" Type="1">RWwgU2FsdmFkb3I=</PHRASE>
+ <PHRASE Label="la_country_SMR" Module="In-Portal" Type="1">U2FuIE1hcmlubw==</PHRASE>
+ <PHRASE Label="la_country_SOM" Module="In-Portal" Type="1">U29tYWxpYQ==</PHRASE>
+ <PHRASE Label="la_country_SPM" Module="In-Portal" Type="1">U3QuIFBpZXJyZSBhbmQgTWlxdWVsb24=</PHRASE>
+ <PHRASE Label="la_country_STP" Module="In-Portal" Type="1">U2FvIFRvbWUgYW5kIFByaW5jaXBl</PHRASE>
+ <PHRASE Label="la_country_SUR" Module="In-Portal" Type="1">U3VyaW5hbWU=</PHRASE>
+ <PHRASE Label="la_country_SVK" Module="In-Portal" Type="1">U2xvdmFraWEgKFNsb3ZhayBSZXB1YmxpYyk=</PHRASE>
+ <PHRASE Label="la_country_SVN" Module="In-Portal" Type="1">U2xvdmVuaWE=</PHRASE>
+ <PHRASE Label="la_country_SWE" Module="In-Portal" Type="1">U3dlZGVu</PHRASE>
+ <PHRASE Label="la_country_SWZ" Module="In-Portal" Type="1">U3dhemlsYW5k</PHRASE>
+ <PHRASE Label="la_country_SYC" Module="In-Portal" Type="1">U2V5Y2hlbGxlcw==</PHRASE>
+ <PHRASE Label="la_country_SYR" Module="In-Portal" Type="1">U3lyaWFuIEFyYWIgUmVwdWJsaWM=</PHRASE>
+ <PHRASE Label="la_country_TCA" Module="In-Portal" Type="1">VHVya3MgYW5kIENhaWNvcyBJc2xhbmRz</PHRASE>
+ <PHRASE Label="la_country_TCD" Module="In-Portal" Type="1">Q2hhZA==</PHRASE>
+ <PHRASE Label="la_country_TGO" Module="In-Portal" Type="1">VG9nbw==</PHRASE>
+ <PHRASE Label="la_country_THA" Module="In-Portal" Type="1">VGhhaWxhbmQ=</PHRASE>
+ <PHRASE Label="la_country_TJK" Module="In-Portal" Type="1">VGFqaWtpc3Rhbg==</PHRASE>
+ <PHRASE Label="la_country_TKL" Module="In-Portal" Type="1">VG9rZWxhdQ==</PHRASE>
+ <PHRASE Label="la_country_TKM" Module="In-Portal" Type="1">VHVya21lbmlzdGFu</PHRASE>
+ <PHRASE Label="la_country_TLS" Module="In-Portal" Type="1">RWFzdCBUaW1vcg==</PHRASE>
+ <PHRASE Label="la_country_TON" Module="In-Portal" Type="1">VG9uZ2E=</PHRASE>
+ <PHRASE Label="la_country_TTO" Module="In-Portal" Type="1">VHJpbmlkYWQgYW5kIFRvYmFnbw==</PHRASE>
+ <PHRASE Label="la_country_TUN" Module="In-Portal" Type="1">VHVuaXNpYQ==</PHRASE>
+ <PHRASE Label="la_country_TUR" Module="In-Portal" Type="1">VHVya2V5</PHRASE>
+ <PHRASE Label="la_country_TUV" Module="In-Portal" Type="1">VHV2YWx1</PHRASE>
+ <PHRASE Label="la_country_TWN" Module="In-Portal" Type="1">VGFpd2Fu</PHRASE>
+ <PHRASE Label="la_country_TZA" Module="In-Portal" Type="1">VGFuemFuaWEsIFVuaXRlZCBSZXB1YmxpYyBvZg==</PHRASE>
+ <PHRASE Label="la_country_UGA" Module="In-Portal" Type="1">VWdhbmRh</PHRASE>
+ <PHRASE Label="la_country_UKR" Module="In-Portal" Type="1">VWtyYWluZQ==</PHRASE>
+ <PHRASE Label="la_country_UMI" Module="In-Portal" Type="1">VW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRz</PHRASE>
+ <PHRASE Label="la_country_URY" Module="In-Portal" Type="1">VXJ1Z3VheQ==</PHRASE>
+ <PHRASE Label="la_country_USA" Module="In-Portal" Type="1">VW5pdGVkIFN0YXRlcw==</PHRASE>
+ <PHRASE Label="la_country_UZB" Module="In-Portal" Type="1">VXpiZWtpc3Rhbg==</PHRASE>
+ <PHRASE Label="la_country_VAT" Module="In-Portal" Type="1">VmF0aWNhbiBDaXR5IFN0YXRlIChIb2x5IFNlZSk=</PHRASE>
+ <PHRASE Label="la_country_VCT" Module="In-Portal" Type="1">U2FpbnQgVmluY2VudCBhbmQgVGhlIEdyZW5hZGluZXM=</PHRASE>
+ <PHRASE Label="la_country_VEN" Module="In-Portal" Type="1">VmVuZXp1ZWxh</PHRASE>
+ <PHRASE Label="la_country_VGB" Module="In-Portal" Type="1">VmlyZ2luIElzbGFuZHMgKEJyaXRpc2gp</PHRASE>
+ <PHRASE Label="la_country_VIR" Module="In-Portal" Type="1">VmlyZ2luIElzbGFuZHMgKFUuUy4p</PHRASE>
+ <PHRASE Label="la_country_VNM" Module="In-Portal" Type="1">VmlldG5hbQ==</PHRASE>
+ <PHRASE Label="la_country_VUT" Module="In-Portal" Type="1">VmFudWF0dQ==</PHRASE>
+ <PHRASE Label="la_country_WLF" Module="In-Portal" Type="1">V2FsbGlzIGFuZCBGdXR1bmEgSXNsYW5kcw==</PHRASE>
+ <PHRASE Label="la_country_WSM" Module="In-Portal" Type="1">U2Ftb2E=</PHRASE>
+ <PHRASE Label="la_country_YEM" Module="In-Portal" Type="1">WWVtZW4=</PHRASE>
+ <PHRASE Label="la_country_YUG" Module="In-Portal" Type="1">WXVnb3NsYXZpYQ==</PHRASE>
+ <PHRASE Label="la_country_ZAF" Module="In-Portal" Type="1">U291dGggQWZyaWNh</PHRASE>
+ <PHRASE Label="la_country_ZMB" Module="In-Portal" Type="1">WmFtYmlh</PHRASE>
+ <PHRASE Label="la_country_ZWE" Module="In-Portal" Type="1">WmltYmFid2U=</PHRASE>
+ <PHRASE Label="la_CreatedOn" Module="In-Portal" Type="1">Q3JlYXRlZCBPbg==</PHRASE>
+ <PHRASE Label="la_Credits_Title" Module="In-Portal" Type="1">Q3JlZGl0cw==</PHRASE>
+ <PHRASE Label="la_days" Module="In-Portal" Type="1">ZGF5cw==</PHRASE>
+ <PHRASE Label="la_DefaultRegistrationCountry" Module="In-Portal" Type="1">RGVmYXVsdCBDb3VudHJ5</PHRASE>
+ <PHRASE Label="la_Delete_Confirm" Module="In-Portal" Type="1">QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgaXRlbShzKT8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4=</PHRASE>
+ <PHRASE Label="la_Description_in-bulletin" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tQnVsbGV0aW4gc2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_Description_in-bulletin:configuration_censorship" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgY2Vuc29yZWQgd29yZHMgYW5kIHRoZWlyIHJlcGxhY2VtZW50cw==</PHRASE>
+ <PHRASE Label="la_Description_in-bulletin:configuration_custom" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgY3VzdG9tIGZpZWxkcw==</PHRASE>
+ <PHRASE Label="la_Description_in-bulletin:configuration_email" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tYnVsbHRlaW4gZW1haWwgc2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_Description_in-bulletin:configuration_emoticon" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2Ugc2ltbGV5cw==</PHRASE>
+ <PHRASE Label="la_Description_in-bulletin:configuration_output" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tYnVsbHRlaW4gb3V0cHV0IHNldHRpbmdz</PHRASE>
+ <PHRASE Label="la_Description_in-bulletin:configuration_search" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tYnVsbHRlaW4gZGVmYXVsdCBzZWFyY2ggc2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_Description_in-bulletin:inbulletin_general" Module="In-Portal" Type="2">SW4tYnVsbGV0aW4gZ2VuZXJhbCBjb25maWd1cmF0aW9uIG9wdGlvbnM=</PHRASE>
+ <PHRASE Label="la_Description_in-link" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tbGluayBzZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_Description_in-link:configuration_custom" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgY3VzdG9tIGZpZWxkcw==</PHRASE>
+ <PHRASE Label="la_Description_in-link:configuration_email" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgZW1haWwgZXZlbnRz</PHRASE>
+ <PHRASE Label="la_Description_in-link:configuration_output" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tbGluayBvdXRwdXQgc2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_Description_in-link:configuration_search" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2Ugc2VhcmNoIHNldHRpbmdzIGFuZCBmaWVsZHM=</PHRASE>
+ <PHRASE Label="la_Description_in-link:inlink_general" Module="In-Portal" Type="2">SW4tTGluayBHZW5lcmFsIENvbmZpZ3VyYXRpb24gT3B0aW9ucw==</PHRASE>
+ <PHRASE Label="la_Description_in-link:validation_list" Module="In-Portal" Type="2">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBydW4gdmFsaWRhdGlvbiBvbiB0aGUgbGlua3M=</PHRASE>
+ <PHRASE Label="la_Description_in-news" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tbmV3eiBzZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_Description_in-news:configuration_custom" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tbmV3eiBjdXN0b20gZmllbGRz</PHRASE>
+ <PHRASE Label="la_Description_in-news:configuration_email" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tbmV3eiBlbWFpbCBjb25maWd1cmF0aW9u</PHRASE>
+ <PHRASE Label="la_Description_in-news:configuration_output" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tbmV3eiBvdXRwdXQgc2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_Description_in-news:configuration_search" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgSW4tbmV3eiBkZWZhdWx0IHNlYXJjaCBjb25maWd1cmF0aW9u</PHRASE>
+ <PHRASE Label="la_Description_in-news:innews_general" Module="In-Portal" Type="2">SW4tTmV3eiBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:addmodule" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBpbnN0YWxsIG5ldyBtb2R1bGVz</PHRASE>
+ <PHRASE Label="la_Description_in-portal:advanced_view" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gbWFuYWdlIGNhdGVnb3JpZXMgYW5kIGl0ZW1zIGFjcm9zcyBhbGwgY2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:backup" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBwZXJmb3JtIHN5c3RlbSBiYWNrdXBz</PHRASE>
+ <PHRASE Label="la_Description_in-portal:browse" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gYnJvd3NlIHRoZSBjYXRhbG9nIGFuZCBtYW5hZ2UgY2F0ZWdvcmllcyBhbmQgaXRlbXM=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:configuration_custom" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIGNhdGVnb3J5IGN1c3RvbSBmaWVsZHM=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:configuration_email" Module="In-Portal" Type="2">Q29uZmlndXJlIENhdGVnb3J5IEVtYWlsIEV2ZW50cw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:configuration_search" Module="In-Portal" Type="2">Q29uZmlndXJlIENhdGVnb3J5IHNlYXJjaCBvcHRpb25z</PHRASE>
+ <PHRASE Label="la_Description_in-portal:configure_categories" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIGdlbmVyYWwgY2F0ZWdvcnkgc2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:configure_general" Module="In-Portal" Type="1">VGhpcyBpcyBhIGdlbmVyYWwgY29uZmd1cmF0aW9uIHNlY3Rpb24=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:configure_lang" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgcmVnaW9uYWwgc2V0dGluZ3MsIG1hbmFnZSBhbmQgZWRpdCBsYW5ndWFnZXM=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:configure_styles" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgQ1NTIHN0eWxlc2hlZXRzIGZvciB0aGVtZXMu</PHRASE>
+ <PHRASE Label="la_Description_in-portal:configure_themes" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYW5hZ2UgdGhlbWVzIGFuZCBlZGl0IHRoZSBpbmRpdmlkdWFsIHRlbXBsYXRlcw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:configure_users" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIGdlbmVyYWwgdXNlciBzZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:emaillog" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIHNob3dzIGFsbCBlLW1haWxzIHNlbnQgYnkgSW4tUG9ydGFs</PHRASE>
+ <PHRASE Label="la_Description_in-portal:export" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBleHBvcnQgSW4tcG9ydGFsIGRhdGE=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:help" Module="In-Portal" Type="1">SGVscCBzZWN0aW9uIGZvciBJbi1wb3J0YWwgYW5kIGFsbCBvZiBpdHMgbW9kdWxlcy4gQWxzbyBhY2Nlc3NpYmxlIHZpYSB0aGUgc2VjdGlvbi1zcGVjaWZpYyBpbnRlcmFjdGl2ZSBoZWxwIGZlYXR1cmUu</PHRASE>
+ <PHRASE Label="la_Description_in-portal:inlink_inport" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBpbXBvcnQgZGF0YSBmcm9tIG90aGVyIHByb2dyYW1zIGludG8gSW4tcG9ydGFs</PHRASE>
+ <PHRASE Label="la_Description_in-portal:log_summary" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIHNob3dzIHN1bW1hcnkgc3RhdGlzdGljcw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:main_import" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBwZXJmb3JtIGRhdGEgaW1wb3J0IGZyb20gb3RoZXIgc3lzdGVtcw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:modules" Module="In-Portal" Type="1">TWFuYWdlIHN0YXR1cyBvZiBhbGwgbW9kdWxlcyB3aGljaCBhcmUgaW5zdGFsbGVkIG9uIHlvdXIgSW4tcG9ydGFsIHN5c3RlbS4=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:mod_status" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBlbmFibGVkIGFuZCBkaXNhYmxlIG1vZHVsZXM=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:reports" Module="In-Portal" Type="1">VmlldyBzeXN0ZW0gc3RhdGlzdGljcywgbG9ncyBhbmQgcmVwb3J0cw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:restore" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBwZXJmb3JtIGRhdGFiYXNlIHJlc3RvcmVz</PHRASE>
+ <PHRASE Label="la_Description_in-portal:reviews" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGRpc3BsYXlzIGEgbGlzdCBvZiBhbGwgcmV2aWV3cyBpbiB0aGUgc3lzdGVtLg==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:searchlog" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIHNob3dzIHRoZSBzZWFyY2ggbG9nIGFuZCBhbGxvd3MgdG8gbWFuYWdlIGl0</PHRASE>
+ <PHRASE Label="la_Description_in-portal:server_info" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byB2aWV3IFBIUCBjb25maWd1cmF0aW9u</PHRASE>
+ <PHRASE Label="la_Description_in-portal:sessionlog" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIHNob3dzIGFsbCBhY3RpdmUgc2Vzc2lvbnMgYW5kIGFsbG93cyB0byBtYW5hZ2UgdGhlbQ==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:site" Module="In-Portal" Type="1">TWFuYWdlIHRoZSBzdHJ1Y3R1cmUgb2YgeW91ciBzaXRlLCBpbmNsdWRpbmcgY2F0ZWdvcmllcywgaXRlbXMgYW5kIGNhdGVnb3J5IHNldHRpbmdzLg==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:sql_query" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBwZXJmb3JtIGRpcmVjdCBTUUwgcXVlcmllcyBvbiBJbi1wb3J0YWwgZGF0YWJhc2U=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:system" Module="In-Portal" Type="1">TWFuYWdlIHN5c3RlbS13aWRlIHNldHRpbmdzLCBlZGl0IHRoZW1lcyBhbmQgbGFuZ3VhZ2Vz</PHRASE>
+ <PHRASE Label="la_Description_in-portal:tag_library" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIHNob3dzIGF2YWlsYWJsZSB0YWdzIGZvciB1c2luZyBpbiB0ZW1wbGF0ZXM=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:tools" Module="In-Portal" Type="1">VXNlIHZhcmlvdXMgSW4tcG9ydGFsIGRhdGEgbWFuYWdlbWVudCB0b29scywgaW5jbHVkaW5nIGJhY2t1cCwgcmVzdG9yZSwgaW1wb3J0IGFuZCBleHBvcnQ=</PHRASE>
+ <PHRASE Label="la_Description_in-portal:users" Module="In-Portal" Type="1">TWFuYWdlIHVzZXJzIGFuZCBncm91cHMsIHNldCB1c2VyICYgZ3JvdXAgcGVybWlzc2lvbnMgYW5kIGRlZmluZSB1c2VyIHNldHRpbmdzLg==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:user_banlist" Module="In-Portal" Type="2">TWFuYWdlIFVzZXIgQmFuIFJ1bGVz</PHRASE>
+ <PHRASE Label="la_Description_in-portal:user_custom" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIHVzZXIgY3VzdG9tIGZpZWxkcw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:user_email" Module="In-Portal" Type="2">Q29uZmlndXJlIFVzZXIgZW1haWwgZXZlbnRz</PHRASE>
+ <PHRASE Label="la_Description_in-portal:user_groups" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIGFsbG93cyB0byBtYWdhbmUgZ3JvdXBzLCBhc3NpZ24gdXNlcnMgdG8gZ3JvdXBzIGFuZCBwZXJmb3JtIG1hc3MgZW1haWwgc2VuZGluZw==</PHRASE>
+ <PHRASE Label="la_Description_in-portal:user_list" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9ucyBhbGxvd3MgdG8gbWFuYWdlIHVzZXJzLCB0aGVpciBwZXJtaXNzaW9ucyBhbmQgcGVyZm9ybSBtYXNzIGVtYWls</PHRASE>
+ <PHRASE Label="la_Description_in-portal:visits" Module="In-Portal" Type="1">VGhpcyBzZWN0aW9uIHNob3dzIHRoZSBzaXRlIHZpc2l0b3JzIGxvZw==</PHRASE>
+ <PHRASE Label="la_Disabled" Module="In-Portal" Type="1">RGlzYWJsZWQ=</PHRASE>
+ <PHRASE Label="la_Doublequotes" Module="In-Portal" Type="1">RG91YmxlLXF1b3Rlcw==</PHRASE>
+ <PHRASE Label="la_DownloadExportFile" Module="In-Portal" Type="1">RG93bmxvYWQgRXhwb3J0IEZpbGU=</PHRASE>
+ <PHRASE Label="la_DownloadLanguageExport" Module="In-Portal" Type="1">RG93bmxvYWQgTGFuZ3VhZ2UgRXhwb3J0</PHRASE>
+ <PHRASE Label="la_EditingInProgress" Module="In-Portal" Type="1">WW91IGhhdmUgbm90IHNhdmVkIGNoYW5nZXMgdG8gdGhlIGl0ZW0geW91IGFyZSBlZGl0aW5nITxiciAvPkNsaWNrIE9LIHRvIGxvb3NlIGNoYW5nZXMgYW5kIGdvIHRvIHRoZSBzZWxlY3RlZCBzZWN0aW9uPGJyIC8+b3IgQ2FuY2VsIHRvIHN0YXkgaW4gdGhlIGN1cnJlbnQgc2VjdGlvbi4=</PHRASE>
+ <PHRASE Label="la_EmptyFile" Module="In-Portal" Type="1">RmlsZSBpcyBlbXB0eQ==</PHRASE>
+ <PHRASE Label="la_EmptyValue" Module="In-Portal" Type="1">IA==</PHRASE>
+ <PHRASE Label="la_empty_file" Module="In-Portal" Type="1">RmlsZSBpcyBlbXB0eQ==</PHRASE>
+ <PHRASE Label="la_Enabled" Module="In-Portal" Type="1">RW5hYmxlZA==</PHRASE>
+ <PHRASE Label="la_error_cant_save_file" Module="In-Portal" Type="1">Q2FuJ3Qgc2F2ZSBhIGZpbGU=</PHRASE>
+ <PHRASE Label="la_error_copy_subcategory" Module="In-Portal" Type="1">RXJyb3IgY29weWluZyBzdWJjYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="la_error_CustomExists" Module="In-Portal" Type="1">Q3VzdG9tIGZpZWxkIHdpdGggaWRlbnRpY2FsIG5hbWUgYWxyZWFkeSBleGlzdHM=</PHRASE>
+ <PHRASE Label="la_error_duplicate_username" Module="In-Portal" Type="1">VXNlcm5hbWUgeW91IGhhdmUgZW50ZXJlZCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc3lzdGVtLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIgdXNlcm5hbWUu</PHRASE>
+ <PHRASE Label="la_error_FileTooLarge" Module="In-Portal" Type="1">RmlsZSBpcyB0b28gbGFyZ2U=</PHRASE>
+ <PHRASE Label="la_error_InvalidFileFormat" Module="In-Portal" Type="1">SW52YWxpZCBGaWxlIEZvcm1hdA==</PHRASE>
+ <PHRASE Label="la_error_invalidoption" Module="In-portal" Type="1">aW52YWxpZCBvcHRpb24=</PHRASE>
+ <PHRASE Label="la_error_move_subcategory" Module="In-Portal" Type="1">RXJyb3IgbW92aW5nIHN1YmNhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_error_PasswordMatch" Module="In-Portal" Type="1">UGFzc3dvcmRzIGRvIG5vdCBtYXRjaCE=</PHRASE>
+ <PHRASE Label="la_error_RequiredColumnsMissing" Module="In-Portal" Type="1">cmVxdWlyZWQgY29sdW1ucyBtaXNzaW5n</PHRASE>
+ <PHRASE Label="la_error_RootCategoriesDelete" Module="In-Portal" Type="1">Um9vdCBjYXRlZ29yeSBvZiB0aGUgbW9kdWxlKHMpIGNhbiBub3QgYmUgZGVsZXRlZCE=</PHRASE>
+ <PHRASE Label="la_error_unique_category_field" Module="In-Portal" Type="1">Q2F0ZWdvcnkgZmllbGQgbm90IHVuaXF1ZQ==</PHRASE>
+ <PHRASE Label="la_error_unknown_category" Module="In-Portal" Type="1">VW5rbm93biBjYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="LA_ERROR_USERNOTFOUND" Module="In-Portal" Type="1">dXNlciBub3QgZm91bmQ=</PHRASE>
+ <PHRASE Label="la_err_bad_date_format" Module="In-Portal" Type="1">SW5jb3JyZWN0IGRhdGUgZm9ybWF0LCBwbGVhc2UgdXNlICglcykgZXguICglcyk=</PHRASE>
+ <PHRASE Label="la_err_bad_type" Module="In-Portal" Type="1">SW5jb3JyZWN0IGRhdGEgZm9ybWF0LCBwbGVhc2UgdXNlICVz</PHRASE>
+ <PHRASE Label="la_err_invalid_format" Module="In-Portal" Type="1">SW52YWxpZCBGb3JtYXQ=</PHRASE>
+ <PHRASE Label="la_err_length_out_of_range" Module="In-Portal" Type="1">RmllbGQgaXMgb3V0IG9mIHJhbmdl</PHRASE>
+ <PHRASE Label="la_err_required" Module="In-Portal" Type="1">RmllbGQgaXMgcmVxdWlyZWQ=</PHRASE>
+ <PHRASE Label="la_err_unique" Module="In-Portal" Type="1">RmllbGQgdmFsdWUgbXVzdCBiZSB1bmlxdWU=</PHRASE>
+ <PHRASE Label="la_err_value_out_of_range" Module="In-Portal" Type="1">RmllbGQgaXMgb3V0IG9mIHJhbmdlLCBwb3NzaWJsZSB2YWx1ZXMgZnJvbSAlcyB0byAlcw==</PHRASE>
+ <PHRASE Label="la_event_article.add" Module="In-Portal" Type="1">QWRkIEFydGljbGU=</PHRASE>
+ <PHRASE Label="la_event_article.approve" Module="In-Portal" Type="1">QXBwcm92ZSBBcnRpY2xl</PHRASE>
+ <PHRASE Label="la_event_article.deny" Module="In-Portal" Type="1">RGVjbGluZSBBcnRpY2xl</PHRASE>
+ <PHRASE Label="la_event_article.modify" Module="In-Portal" Type="1">TW9kaWZ5IEFydGljbGU=</PHRASE>
+ <PHRASE Label="la_event_article.modify.approve" Module="In-Portal" Type="1">QXBwcm92ZSBBcnRpY2xlIE1vZGlmaWNhdGlvbg==</PHRASE>
+ <PHRASE Label="la_event_article.modify.deny" Module="In-Portal" Type="1">RGVjbGluZSBBcnRpY2xlIE1vZGlmaWNhdGlvbg==</PHRASE>
+ <PHRASE Label="la_event_article.review.add" Module="In-Portal" Type="1">QXJ0aWNsZSBSZXZpZXcgQWRkZWQ=</PHRASE>
+ <PHRASE Label="la_event_article.review.add.pending" Module="In-Portal" Type="1">UGVuZGluZyBBcnRpY2xlIFJldmlldyBBZGRlZA==</PHRASE>
+ <PHRASE Label="la_event_article.review.approve" Module="In-Portal" Type="1">QXBwcm92ZSBBcnRpY2xlIFJldmlldw==</PHRASE>
+ <PHRASE Label="la_event_article.review.deny" Module="In-Portal" Type="1">RGVjbGluZSBBcnRpY2xlIFJldmlldw==</PHRASE>
+ <PHRASE Label="la_event_category.add" Module="In-Portal" Type="1">QWRkIENhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_event_category.add.pending" Module="In-Portal" Type="1">QWRkIFBlbmRpbmcgQ2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_event_category.approve" Module="In-Portal" Type="1">QXBwcm92ZSBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="la_event_category.deny" Module="In-Portal" Type="1">RGVueSBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="la_event_category.modify" Module="In-Portal" Type="1">TW9kaWZ5IENhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_event_category_delete" Module="In-Portal" Type="1">RGVsZXRlIENhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_event_common.footer" Module="In-Portal" Type="1">Q29tbW9uIEZvb3RlciBUZW1wbGF0ZQ==</PHRASE>
+ <PHRASE Label="la_event_import_progress" Module="In-Portal" Type="1">RW1haWwgZXZlbnRzIGltcG9ydCBwcm9ncmVzcw==</PHRASE>
+ <PHRASE Label="la_event_link.add" Module="In-Portal" Type="1">QWRkIExpbms=</PHRASE>
+ <PHRASE Label="la_event_link.add.pending" Module="In-Portal" Type="1">QWRkIFBlbmRpbmcgTGluaw==</PHRASE>
+ <PHRASE Label="la_event_link.approve" Module="In-Portal" Type="1">QXBwcm92ZSBQZW5kaW5nIExpbms=</PHRASE>
+ <PHRASE Label="la_event_link.deny" Module="In-Portal" Type="1">RGVueSBMaW5r</PHRASE>
+ <PHRASE Label="la_event_link.modify" Module="In-Portal" Type="1">TW9kaWZ5IExpbms=</PHRASE>
+ <PHRASE Label="la_event_link.modify.approve" Module="In-Portal" Type="1">QXBwcm92ZSBMaW5rIE1vZGlmaWNhdGlvbg==</PHRASE>
+ <PHRASE Label="la_event_link.modify.deny" Module="In-Portal" Type="1">RGVjbGluZSBsaW5rIG1vZGlmaWNhdGlvbg==</PHRASE>
+ <PHRASE Label="la_event_link.modify.pending" Module="In-Portal" Type="1">TGluayBNb2RpZmljYXRpb24gUGVuZGluZw==</PHRASE>
+ <PHRASE Label="la_event_link.review.add" Module="In-Portal" Type="1">TGluayBSZXZpZXcgQWRkZWQ=</PHRASE>
+ <PHRASE Label="la_event_link.review.add.pending" Module="In-Portal" Type="1">UGVuZGluZyBSZXZpZXcgQWRkZWQ=</PHRASE>
+ <PHRASE Label="la_event_link.review.approve" Module="In-Portal" Type="1">QXBwcm92ZSBMaW5rIFJldmlldw==</PHRASE>
+ <PHRASE Label="la_event_link.review.deny" Module="In-Portal" Type="1">RGVjbGluZSBMaW5rIFJldmlldw==</PHRASE>
+ <PHRASE Label="la_event_pm.add" Module="In-Portal" Type="1">TmV3IFByaXZhdGUgTWVzc2FnZQ==</PHRASE>
+ <PHRASE Label="la_event_post.add" Module="In-Portal" Type="1">UG9zdCBBZGRlZA==</PHRASE>
+ <PHRASE Label="la_event_post.modify" Module="In-Portal" Type="1">UG9zdCBNb2RpZmllZA==</PHRASE>
+ <PHRASE Label="la_event_topic.add" Module="In-Portal" Type="1">VG9waWMgQWRkZWQ=</PHRASE>
+ <PHRASE Label="la_event_user.add" Module="In-Portal" Type="1">QWRkIFVzZXI=</PHRASE>
+ <PHRASE Label="la_event_user.add.pending" Module="In-Portal" Type="1">QWRkIFBlbmRpbmcgVXNlcg==</PHRASE>
+ <PHRASE Label="la_event_user.approve" Module="In-Portal" Type="1">QXBwcm92ZSBVc2Vy</PHRASE>
+ <PHRASE Label="la_event_user.deny" Module="In-Portal" Type="1">RGVueSBVc2Vy</PHRASE>
+ <PHRASE Label="la_event_user.forgotpw" Module="In-Portal" Type="1">Rm9yZ290IFBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="la_event_user.membership_expiration_notice" Module="In-Portal" Type="1">TWVtYmVyc2hpcCBleHBpcmF0aW9uIG5vdGljZQ==</PHRASE>
+ <PHRASE Label="la_event_user.membership_expired" Module="In-Portal" Type="1">TWVtYmVyc2hpcCBleHBpcmVk</PHRASE>
+ <PHRASE Label="la_event_user.pswd_confirm" Module="In-Portal" Type="1">UGFzc3dvcmQgQ29uZmlybWF0aW9u</PHRASE>
+ <PHRASE Label="la_event_user.subscribe" Module="In-Portal" Type="1">VXNlciBzdWJzY3JpYmVk</PHRASE>
+ <PHRASE Label="la_event_user.suggest" Module="In-Portal" Type="1">U3VnZ2VzdCB0byBhIGZyaWVuZA==</PHRASE>
+ <PHRASE Label="la_event_user.unsubscribe" Module="In-Portal" Type="1">VXNlciB1bnN1YnNjcmliZWQ=</PHRASE>
+ <PHRASE Label="la_event_user.validate" Module="In-Portal" Type="1">VmFsaWRhdGUgVXNlcg==</PHRASE>
+ <PHRASE Label="la_exportfoldernotwritable" Module="In-Portal" Type="1">RXhwb3J0IGZvbGRlciBpcyBub3Qgd3JpdGFibGU=</PHRASE>
+ <PHRASE Label="la_Field" Module="In-Portal" Type="1">RmllbGQ=</PHRASE>
+ <PHRASE Label="la_field_displayorder" Module="In-Portal" Type="1">RGlzcGxheSBPcmRlcg==</PHRASE>
+ <PHRASE Label="la_fld_AddressLine" Module="In-Portal" Type="1">QWRkcmVzcyBMaW5l</PHRASE>
+ <PHRASE Label="la_fld_AdminInterfaceLang" Module="In-Portal" Type="1">QWRtaW4gSW50ZXJmYWNl</PHRASE>
+ <PHRASE Label="la_fld_AdvancedCSS" Module="In-Portal" Type="1">QWR2YW5jZWQgQ1NT</PHRASE>
+ <PHRASE Label="la_fld_AltValue" Module="In-Portal" Type="1">QWx0IFZhbHVl</PHRASE>
+ <PHRASE Label="la_fld_AssignedCoupon" Module="In-Portal" Type="1">QXNzaWduZWQgQ291cG9u</PHRASE>
+ <PHRASE Label="LA_FLD_ATTACHMENT" Module="In-Portal" Type="1">QXR0YWNobWVudA==</PHRASE>
+ <PHRASE Label="la_fld_AutomaticFilename" Module="In-Portal" Type="1">QXV0b21hdGljIEZpbGVuYW1l</PHRASE>
+ <PHRASE Label="la_fld_AvailableColumns" Module="In-Portal" Type="1">QXZhaWxhYmxlIENvbHVtbnM=</PHRASE>
+ <PHRASE Label="la_fld_Background" Module="In-Portal" Type="1">QmFja2dyb3VuZA==</PHRASE>
+ <PHRASE Label="la_fld_BackgroundAttachment" Module="In-Portal" Type="1">QmFja2dyb3VuZCBBdHRhY2htZW50</PHRASE>
+ <PHRASE Label="la_fld_BackgroundColor" Module="In-Portal" Type="1">QmFja2dyb3VuZCBDb2xvcg==</PHRASE>
+ <PHRASE Label="la_fld_BackgroundImage" Module="In-Portal" Type="1">QmFja2dyb3VuZCBJbWFnZQ==</PHRASE>
+ <PHRASE Label="la_fld_BackgroundPosition" Module="In-Portal" Type="1">QmFja2dyb3VuZCBQb3NpdGlvbg==</PHRASE>
+ <PHRASE Label="la_fld_BackgroundRepeat" Module="In-Portal" Type="1">QmFja2dyb3VuZCBSZXBlYXQ=</PHRASE>
+ <PHRASE Label="la_fld_BorderBottom" Module="In-Portal" Type="1">Qm9yZGVyIEJvdHRvbQ==</PHRASE>
+ <PHRASE Label="la_fld_BorderLeft" Module="In-Portal" Type="1">Qm9yZGVyIExlZnQ=</PHRASE>
+ <PHRASE Label="la_fld_BorderRight" Module="In-Portal" Type="1">Qm9yZGVyIFJpZ2h0</PHRASE>
+ <PHRASE Label="la_fld_Borders" Module="In-Portal" Type="1">Qm9yZGVycw==</PHRASE>
+ <PHRASE Label="la_fld_BorderTop" Module="In-Portal" Type="1">Qm9yZGVyIFRvcA==</PHRASE>
+ <PHRASE Label="la_fld_Category" Module="In-Portal" Type="1">Q2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_fld_CategoryAutomaticFilename" Module="In-Portal" Type="1">QXV0b21hdGljIERpcmVjdG9yeSBOYW1l</PHRASE>
+ <PHRASE Label="la_fld_CategoryFilename" Module="In-Portal" Type="1">RGlyZWN0b3J5IE5hbWU=</PHRASE>
+ <PHRASE Label="la_fld_CategoryFormat" Module="In-Portal" Type="1">Q2F0ZWdvcnkgRm9ybWF0</PHRASE>
+ <PHRASE Label="la_fld_CategoryId" Module="In-Portal" Type="1">Q2F0ZWdvcnkgSUQ=</PHRASE>
+ <PHRASE Label="la_fld_CategorySeparator" Module="In-Portal" Type="1">Q2F0ZWdvcnkgc2VwYXJhdG9y</PHRASE>
+ <PHRASE Label="la_fld_CategoryTemplate" Module="In-Portal" Type="1">Q2F0ZWdvcnkgVGVtcGxhdGU=</PHRASE>
+ <PHRASE Label="la_fld_Charset" Module="In-Portal" Type="1">Q2hhcnNldA==</PHRASE>
+ <PHRASE Label="la_fld_CheckDuplicatesMethod" Module="In-Portal" Type="1">Q2hlY2sgRHVwbGljYXRlcyBieQ==</PHRASE>
+ <PHRASE Label="la_fld_Company" Module="In-Portal" Type="1">Q29tcGFueQ==</PHRASE>
+ <PHRASE Label="la_fld_CopyLabels" Module="In-Portal" Type="1">Q29weSBMYWJlbHMgZnJvbSB0aGlzIExhbmd1YWdl</PHRASE>
+ <PHRASE Label="la_fld_CreatedById" Module="In-Portal" Type="1">Q3JlYXRlZCBCeQ==</PHRASE>
+ <PHRASE Label="la_fld_CreatedOn" Module="In-Portal" Type="1">Q3JlYXRlZCBPbg==</PHRASE>
+ <PHRASE Label="la_fld_Cursor" Module="In-Portal" Type="1">Q3Vyc29y</PHRASE>
+ <PHRASE Label="la_fld_CustomDetailTemplate" Module="In-Portal" Type="1">Q3VzdG9tIERldGFpbHMgVGVtcGxhdGU=</PHRASE>
+ <PHRASE Label="la_fld_CustomTemplate" Module="In-Portal" Type="1">DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KRGV0YWlscyBUZW1wbGF0ZQ==</PHRASE>
+ <PHRASE Label="la_fld_DateFormat" Module="In-Portal" Type="1">RGF0ZSBGb3JtYXQ=</PHRASE>
+ <PHRASE Label="la_fld_DecimalPoint" Module="In-Portal" Type="1">RGVjaW1hbCBQb2ludA==</PHRASE>
+ <PHRASE Label="la_fld_Description" Module="In-Portal" Type="1">RGVzY3JpcHRpb24=</PHRASE>
+ <PHRASE Label="la_fld_Display" Module="In-Portal" Type="1">RGlzcGxheQ==</PHRASE>
+ <PHRASE Label="la_fld_DoNotEncode" Module="In-Portal" Type="1">QXMgUGxhaW4gVGV4dA==</PHRASE>
+ <PHRASE Label="la_fld_Duration" Module="In-Portal" Type="1">RHVyYXRpb24=</PHRASE>
+ <PHRASE Label="la_fld_EditorsPick" Module="In-Portal" Type="1">RWRpdG9ycyBQaWNr</PHRASE>
+ <PHRASE Label="la_fld_ElapsedTime" Module="In-Portal" Type="1">RWxhcHNlZCBUaW1l</PHRASE>
+ <PHRASE Label="la_fld_Enabled" Module="In-Portal" Type="1">RW5hYmxlZA==</PHRASE>
+ <PHRASE Label="la_fld_EstimatedTime" Module="In-Portal" Type="1">RXN0aW1hdGVkIFRpbWU=</PHRASE>
+ <PHRASE Label="la_fld_Expire" Module="In-Portal" Type="1">RXhwaXJl</PHRASE>
+ <PHRASE Label="la_fld_ExportColumns" Module="In-Portal" Type="1">RXhwb3J0IGNvbHVtbnM=</PHRASE>
+ <PHRASE Label="la_fld_ExportFileName" Module="In-Portal" Type="1">RXhwb3J0IEZpbGVuYW1l</PHRASE>
+ <PHRASE Label="la_fld_ExportFormat" Module="In-Portal" Type="1">RXhwb3J0IGZvcm1hdA==</PHRASE>
+ <PHRASE Label="la_fld_ExportModules" Module="In-Portal" Type="1">RXhwb3J0IE1vZHVsZXM=</PHRASE>
+ <PHRASE Label="la_fld_ExportPhraseTypes" Module="In-Portal" Type="1">RXhwb3J0IFBocmFzZSBUeXBlcw==</PHRASE>
+ <PHRASE Label="la_fld_ExportPresetName" Module="In-Portal" Type="1">RXhwb3J0IFByZXNldCBUaXRsZQ==</PHRASE>
+ <PHRASE Label="la_fld_ExportPresets" Module="In-Portal" Type="1">RXhwb3J0IFByZXNldA==</PHRASE>
+ <PHRASE Label="la_fld_ExportSavePreset" Module="In-Portal" Type="1">U2F2ZS9VcGRhdGUgRXhwb3J0IFByZXNldA==</PHRASE>
+ <PHRASE Label="la_fld_ExternalUrl" Module="In-Portal" Type="1">RXh0ZXJuYWwgVVJM</PHRASE>
+ <PHRASE Label="la_fld_ExtraHeaders" Module="In-Portal" Type="1">RXh0cmEgSGVhZGVycw==</PHRASE>
+ <PHRASE Label="la_fld_Fax" Module="In-Portal" Type="1">RmF4</PHRASE>
+ <PHRASE Label="la_fld_FieldsEnclosedBy" Module="In-Portal" Type="1">RmllbGRzIGVuY2xvc2VkIGJ5</PHRASE>
+ <PHRASE Label="la_fld_FieldsSeparatedBy" Module="In-Portal" Type="1">RmllbGRzIHNlcGFyYXRlZCBieQ==</PHRASE>
+ <PHRASE Label="la_fld_FieldTitles" Module="In-Portal" Type="1">RmllbGQgVGl0bGVz</PHRASE>
+ <PHRASE Label="la_fld_Filename" Module="In-Portal" Type="1">RmlsZW5hbWU=</PHRASE>
+ <PHRASE Label="la_fld_FirstName" Module="In-Portal" Type="1">Rmlyc3QgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_fld_Font" Module="In-Portal" Type="1">Rm9udA==</PHRASE>
+ <PHRASE Label="la_fld_FontColor" Module="In-Portal" Type="1">Rm9udCBDb2xvcg==</PHRASE>
+ <PHRASE Label="la_fld_FontFamily" Module="In-Portal" Type="1">Rm9udCBGYW1pbHk=</PHRASE>
+ <PHRASE Label="la_fld_FontSize" Module="In-Portal" Type="1">Rm9udCBTaXpl</PHRASE>
+ <PHRASE Label="la_fld_FontStyle" Module="In-Portal" Type="1">Rm9udCBTdHlsZQ==</PHRASE>
+ <PHRASE Label="la_fld_FontWeight" Module="In-Portal" Type="1">Rm9udCBXZWlnaHQ=</PHRASE>
+ <PHRASE Label="la_fld_GroupId" Module="In-Portal" Type="1">SUQ=</PHRASE>
+ <PHRASE Label="la_fld_GroupName" Module="In-Portal" Type="1">R3JvdXAgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_fld_Height" Module="In-Portal" Type="1">SGVpZ2h0</PHRASE>
+ <PHRASE Label="la_fld_Hits" Module="In-Portal" Type="1">SGl0cw==</PHRASE>
+ <PHRASE Label="la_fld_Hot" Module="In-Portal" Type="1">SG90</PHRASE>
+ <PHRASE Label="LA_FLD_HTMLVERSION" Module="In-Portal" Type="1">SFRNTCBWZXJzaW9u</PHRASE>
+ <PHRASE Label="la_fld_IconURL" Module="In-Portal" Type="1">SWNvbiBVUkw=</PHRASE>
+ <PHRASE Label="la_fld_Id" Module="In-Portal" Type="1">SUQ=</PHRASE>
+ <PHRASE Label="la_fld_ImageId" Module="In-Portal" Type="1">SW1hZ2UgSUQ=</PHRASE>
+ <PHRASE Label="la_fld_ImportCategory" Module="In-Portal" Type="1">SW1wb3J0IENhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_fld_ImportFilename" Module="In-Portal" Type="1">SW1wb3J0IEZpbGVuYW1l</PHRASE>
+ <PHRASE Label="la_fld_IncludeFieldTitles" Module="In-Portal" Type="1">SW5jbHVkZSBmaWVsZCB0aXRsZXM=</PHRASE>
+ <PHRASE Label="la_fld_InputDateFormat" Module="In-Portal" Type="1">SW5wdXQgRGF0ZSBGb3JtYXQ=</PHRASE>
+ <PHRASE Label="la_fld_InputTimeFormat" Module="In-Portal" Type="1">SW5wdXQgVGltZSBGb3JtYXQ=</PHRASE>
+ <PHRASE Label="la_fld_InstallModules" Module="In-Portal" Type="1">SW5zdGFsbCBNb2R1bGVz</PHRASE>
+ <PHRASE Label="la_fld_InstallPhraseTypes" Module="In-Portal" Type="1">SW5zdGFsbCBQaHJhc2UgVHlwZXM=</PHRASE>
+ <PHRASE Label="la_fld_IsBaseCategory" Module="In-Portal" Type="1">VXNlIGN1cnJlbnQgY2F0ZWdvcnkgYXMgcm9vdCBmb3IgdGhlIGV4cG9ydA==</PHRASE>
+ <PHRASE Label="la_fld_IsFreePromoShipping" Module="In-Portal" Type="1">VXNlIGFzIEZyZWUgUHJvbW8gU2hpcHBpbmc=</PHRASE>
+ <PHRASE Label="la_fld_IsPrimary" Module="In-Portal" Type="1">UHJpbWFyeQ==</PHRASE>
+ <PHRASE Label="la_fld_IsSystem" Module="In-Portal" Type="1">SXMgU3lzdGVt</PHRASE>
+ <PHRASE Label="la_fld_ItemTemplate" Module="In-Portal" Type="1">SXRlbSBUZW1wbGF0ZQ==</PHRASE>
+ <PHRASE Label="la_fld_LanguageFile" Module="In-Portal" Type="1">TGFuZ3VhZ2UgRmlsZQ==</PHRASE>
+ <PHRASE Label="la_fld_LanguageId" Module="In-Portal" Type="1">TGFuZ3VhZ2UgSUQ=</PHRASE>
+ <PHRASE Label="la_fld_LastName" Module="In-Portal" Type="1">TGFzdCBOYW1l</PHRASE>
+ <PHRASE Label="la_fld_Left" Module="In-Portal" Type="1">TGVmdA==</PHRASE>
+ <PHRASE Label="la_fld_LineEndings" Module="In-Portal" Type="1">TGluZSBlbmRpbmdz</PHRASE>
+ <PHRASE Label="la_fld_LineEndingsInside" Module="In-Portal" Type="1">TGluZSBFbmRpbmdzIEluc2lkZSBGaWVsZHM=</PHRASE>
+ <PHRASE Label="la_fld_LocalName" Module="In-Portal" Type="1">TG9jYWwgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_fld_Location" Module="In-Portal" Type="1">TG9jYXRpb24=</PHRASE>
+ <PHRASE Label="la_fld_Logo" Module="In-Portal" Type="1">TG9nbw==</PHRASE>
+ <PHRASE Label="la_fld_MarginBottom" Module="In-Portal" Type="1">TWFyZ2luIEJvdHRvbQ==</PHRASE>
+ <PHRASE Label="la_fld_MarginLeft" Module="In-Portal" Type="1">TWFyZ2luIExlZnQ=</PHRASE>
+ <PHRASE Label="la_fld_MarginRight" Module="In-Portal" Type="1">TWFyZ2luIFJpZ2h0</PHRASE>
+ <PHRASE Label="la_fld_Margins" Module="In-Portal" Type="1">TWFyZ2lucw==</PHRASE>
+ <PHRASE Label="la_fld_MarginTop" Module="In-Portal" Type="1">TWFyZ2luIFRvcA==</PHRASE>
+ <PHRASE Label="la_fld_MaxCategories" Module="In-Portal" Type="1">TWF4aW11bSBudW1iZXIgb2YgQ2F0ZWdvcmllcyBvbiBJdGVtIGNhbiBiZSBhZGRlZCB0bw==</PHRASE>
+ <PHRASE Label="la_fld_MenuIcon" Module="In-Portal" Type="1">Q3VzdG9tIE1lbnUgSWNvbiAoaWUuIGltZy9tZW51X3Byb2R1Y3RzLmdpZik=</PHRASE>
+ <PHRASE Label="la_fld_MessageBody" Module="In-Portal" Type="1">TWVzc2FnZSBCb2R5</PHRASE>
+ <PHRASE Label="la_fld_MessageType" Module="In-Portal" Type="1">TWVzc2FnZSBUeXBl</PHRASE>
+ <PHRASE Label="la_fld_Modified" Module="In-Portal" Type="1">TW9kaWZpZWQ=</PHRASE>
+ <PHRASE Label="la_fld_Module" Module="In-Portal" Type="1">TW9kdWxl</PHRASE>
+ <PHRASE Label="la_fld_MultiLingual" Module="In-Portal" Type="1">TXVsdGlsaW5ndWFs</PHRASE>
+ <PHRASE Label="la_fld_Name" Module="In-Portal" Type="1">TmFtZQ==</PHRASE>
+ <PHRASE Label="la_fld_New" Module="In-Portal" Type="1">TmV3</PHRASE>
+ <PHRASE Label="la_fld_PackName" Module="In-Portal" Type="1">UGFjayBOYW1l</PHRASE>
+ <PHRASE Label="la_fld_PaddingBottom" Module="In-Portal" Type="1">UGFkZGluZyBCb3R0b20=</PHRASE>
+ <PHRASE Label="la_fld_PaddingLeft" Module="In-Portal" Type="1">UGFkZGluZyBMZWZ0</PHRASE>
+ <PHRASE Label="la_fld_PaddingRight" Module="In-Portal" Type="1">UGFkZGluZyBSaWdodA==</PHRASE>
+ <PHRASE Label="la_fld_Paddings" Module="In-Portal" Type="1">UGFkZGluZ3M=</PHRASE>
+ <PHRASE Label="la_fld_PaddingTop" Module="In-Portal" Type="1">UGFkZGluZyBUb3A=</PHRASE>
+ <PHRASE Label="la_fld_PercentsCompleted" Module="In-Portal" Type="1">UGVyY2VudHMgQ29tcGxldGVk</PHRASE>
+ <PHRASE Label="la_fld_Phrase" Module="In-Portal" Type="1">TGFiZWw=</PHRASE>
+ <PHRASE Label="la_fld_PhraseType" Module="In-Portal" Type="1">UGhyYXNlIFR5cGU=</PHRASE>
+ <PHRASE Label="la_fld_Pop" Module="In-Portal" Type="1">UG9w</PHRASE>
+ <PHRASE Label="la_fld_Popular" Module="In-Portal" Type="1">UG9wdWxhcg==</PHRASE>
+ <PHRASE Label="la_fld_Position" Module="In-Portal" Type="1">UG9zaXRpb24=</PHRASE>
+ <PHRASE Label="la_fld_Primary" Module="In-Portal" Type="1">UHJpbWFyeQ==</PHRASE>
+ <PHRASE Label="la_fld_PrimaryCategory" Module="In-Portal" Type="1">UHJpbWFyeSBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="la_fld_PrimaryLang" Module="In-Portal" Type="1">UHJpbWFyeQ==</PHRASE>
+ <PHRASE Label="la_fld_PrimaryTranslation" Module="In-Portal" Type="1">UHJpbWFyeSBUcmFuc2xhdGlvbg==</PHRASE>
+ <PHRASE Label="la_fld_Priority" Module="In-Portal" Type="1">UHJpb3JpdHk=</PHRASE>
+ <PHRASE Label="la_fld_ProductFreeShipping" Module="In-Portal" Type="1">TWluaW11bSBxdWFudGl0eSBmb3IgRnJlZSBTaGlwcGluZw==</PHRASE>
+ <PHRASE Label="la_fld_Rating" Module="In-Portal" Type="1">UmF0aW5n</PHRASE>
+ <PHRASE Label="la_fld_RelatedSearchKeyword" Module="In-Portal" Type="1">S2V5d29yZA==</PHRASE>
+ <PHRASE Label="la_fld_RelationshipId" Module="In-Portal" Type="1">UmVsYXRpb24gSUQ=</PHRASE>
+ <PHRASE Label="la_fld_RelationshipType" Module="In-Portal" Type="1">VHlwZQ==</PHRASE>
+ <PHRASE Label="la_fld_RemoteUrl" Module="In-Portal" Type="1">UmVtb3RlIFVSTA==</PHRASE>
+ <PHRASE Label="la_fld_ReplaceDuplicates" Module="In-Portal" Type="1">UmVwbGFjZSBEdXBsaWNhdGVz</PHRASE>
+ <PHRASE Label="la_fld_ReviewId" Module="In-Portal" Type="0">UmV2aWV3IElE</PHRASE>
+ <PHRASE Label="la_fld_ReviewText" Module="In-Portal" Type="1">UmV2aWV3IFRleHQ=</PHRASE>
+ <PHRASE Label="la_fld_SameAsThumb" Module="In-Portal" Type="1">U2FtZSBBcyBUaHVtYg==</PHRASE>
+ <PHRASE Label="la_fld_SelectorBase" Module="In-Portal" Type="1">QmFzZWQgT24=</PHRASE>
+ <PHRASE Label="la_fld_SelectorData" Module="In-Portal" Type="1">U3R5bGU=</PHRASE>
+ <PHRASE Label="la_fld_SelectorId" Module="In-Portal" Type="1">U2VsZWN0b3IgSUQ=</PHRASE>
+ <PHRASE Label="la_fld_SelectorName" Module="In-Portal" Type="1">U2VsZWN0b3IgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_fld_SkipFirstRow" Module="In-Portal" Type="1">U2tpcCBGaXJzdCBSb3c=</PHRASE>
+ <PHRASE Label="la_fld_Status" Module="In-Portal" Type="1">U3RhdHVz</PHRASE>
+ <PHRASE Label="la_fld_StylesheetId" Module="In-Portal" Type="1">U3R5bGVzaGVldCBJRA==</PHRASE>
+ <PHRASE Label="la_fld_Subject" Module="In-Portal" Type="1">U3ViamVjdA==</PHRASE>
+ <PHRASE Label="la_fld_SymLinkCategoryId" Module="In-Portal" Type="1">UG9pbnRzIHRvIENhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_fld_TargetId" Module="In-Portal" Type="1">SXRlbQ==</PHRASE>
+ <PHRASE Label="la_fld_TextAlign" Module="In-Portal" Type="1">VGV4dCBBbGlnbg==</PHRASE>
+ <PHRASE Label="la_fld_TextDecoration" Module="In-Portal" Type="1">VGV4dCBEZWNvcmF0aW9u</PHRASE>
+ <PHRASE Label="LA_FLD_TEXTVERSION" Module="In-Portal" Type="1">VGV4dCBWZXJzaW9u</PHRASE>
+ <PHRASE Label="la_fld_ThousandSep" Module="In-Portal" Type="1">VGhvdXNhbmRzIFNlcGFyYXRvcg==</PHRASE>
+ <PHRASE Label="la_fld_TimeFormat" Module="In-Portal" Type="1">VGltZSBGb3JtYXQ=</PHRASE>
+ <PHRASE Label="la_fld_Title" Module="In-Portal" Type="1">VGl0bGU=</PHRASE>
+ <PHRASE Label="la_fld_To" Module="In-Portal" Type="1">VG8=</PHRASE>
+ <PHRASE Label="la_fld_Top" Module="In-Portal" Type="1">VG9w</PHRASE>
+ <PHRASE Label="la_fld_Translation" Module="In-Portal" Type="1">VmFsdWU=</PHRASE>
+ <PHRASE Label="la_fld_UnitSystem" Module="In-Portal" Type="1">TWVhc3VyZXMgU3lzdGVt</PHRASE>
+ <PHRASE Label="la_fld_Upload" Module="In-Portal" Type="1">VXBsb2FkIEZpbGUgRnJvbSBMb2NhbCBQQw==</PHRASE>
+ <PHRASE Label="la_fld_URL" Module="In-Portal" Type="1">VVJM</PHRASE>
+ <PHRASE Label="la_fld_UseExternalUrl" Module="In-Portal" Type="1">TGluayB0byBFeHRlcm5hbCBVUkw=</PHRASE>
+ <PHRASE Label="la_fld_UseMenuIcon" Module="In-Portal" Type="1">VXNlIEN1c3RvbSBNZW51IEljb24=</PHRASE>
+ <PHRASE Label="la_fld_Version" Module="In-Portal" Type="1">VmVyc2lvbg==</PHRASE>
+ <PHRASE Label="la_fld_Visibility" Module="In-Portal" Type="1">VmlzaWJpbGl0eQ==</PHRASE>
+ <PHRASE Label="la_fld_Votes" Module="In-Portal" Type="1">Vm90ZXM=</PHRASE>
+ <PHRASE Label="la_fld_Width" Module="In-Portal" Type="1">V2lkdGg=</PHRASE>
+ <PHRASE Label="la_fld_Z-Index" Module="In-Portal" Type="1">Wi1JbmRleA==</PHRASE>
+ <PHRASE Label="la_Font" Module="In-Portal" Type="1">Rm9udCBQcm9wZXJ0aWVz</PHRASE>
+ <PHRASE Label="la_from_date" Module="In-Portal" Type="1">RnJvbSBEYXRl</PHRASE>
+ <PHRASE Label="la_front_end" Module="In-Portal" Type="1">RnJvbnQgZW5k</PHRASE>
+ <PHRASE Label="la_gigabytes" Module="In-Portal" Type="1">Z2lnYWJ5dGUocyk=</PHRASE>
+ <PHRASE Label="la_help_in_progress" Module="In-Portal" Type="1">VGhpcyBoZWxwIHNlY3Rpb24gZG9lcyBub3QgeWV0IGV4aXN0LCBpdCdzIGNvbWluZyBzb29uIQ==</PHRASE>
+ <PHRASE Label="la_Html" Module="In-Portal" Type="1">aHRtbA==</PHRASE>
+ <PHRASE Label="la_IDField" Module="In-Portal" Type="1">SUQgRmllbGQ=</PHRASE>
+ <PHRASE Label="la_ImportingEmailEvents" Module="In-Portal" Type="1">SW1wb3J0aW5nIEVtYWlsIEV2ZW50cyAuLi4=</PHRASE>
+ <PHRASE Label="la_ImportingLanguages" Module="In-Portal" Type="1">SW1wb3J0aW5nIExhbmd1YWdlcyAuLi4=</PHRASE>
+ <PHRASE Label="la_ImportingPhrases" Module="In-Portal" Type="1">SW1wb3J0aW5nIFBocmFzZXMgLi4u</PHRASE>
+ <PHRASE Label="la_importlang_phrasewarning" Module="In-Portal" Type="2">RW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCB1bmRvIGFueSBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUgdG8gZXhpc3RpbmcgcGhyYXNlcw==</PHRASE>
+ <PHRASE Label="la_importPhrases" Module="In-Portal" Type="1">SW1wb3J0aW5nIFBocmFzZXM=</PHRASE>
+ <PHRASE Label="la_inlink" Module="In-Portal" Type="1">SW4tbGluaw==</PHRASE>
+ <PHRASE Label="la_invalid_email" Module="In-Portal" Type="1">SW52YWxpZCBFLU1haWw=</PHRASE>
+ <PHRASE Label="la_invalid_integer" Module="In-Portal" Type="1">SW5jb3JyZWN0IGRhdGEgZm9ybWF0LCBwbGVhc2UgdXNlIGludGVnZXI=</PHRASE>
+ <PHRASE Label="la_invalid_license" Module="In-Portal" Type="1">TWlzc2luZyBvciBpbnZhbGlkIEluLVBvcnRhbCBMaWNlbnNl</PHRASE>
+ <PHRASE Label="la_Invalid_Password" Module="In-Portal" Type="1">SW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZA==</PHRASE>
+ <PHRASE Label="la_invalid_state" Module="In-Portal" Type="0">SW52YWxpZCBzdGF0ZQ==</PHRASE>
+ <PHRASE Label="la_ItemTab_Categories" Module="In-Portal" Type="1">Q2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_ItemTab_Links" Module="In-Portal" Type="1">TGlua3M=</PHRASE>
+ <PHRASE Label="la_ItemTab_News" Module="In-Portal" Type="1">QXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="la_ItemTab_Topics" Module="In-Portal" Type="1">VG9waWNz</PHRASE>
+ <PHRASE Label="la_K4_AdvancedView" Module="In-Portal" Type="1">SzQgQWR2YW5jZWQgVmlldw==</PHRASE>
+ <PHRASE Label="la_K4_Catalog" Module="In-Portal" Type="1">SzQgQ2F0YWxvZw==</PHRASE>
+ <PHRASE Label="la_kilobytes" Module="In-Portal" Type="1">S0I=</PHRASE>
+ <PHRASE Label="la_language" Module="In-Portal" Type="1">TGFuZ3VhZ2U=</PHRASE>
+ <PHRASE Label="la_lang_import_progress" Module="In-Portal" Type="1">SW1wb3J0IHByb2dyZXNz</PHRASE>
+ <PHRASE Label="la_LastUpdate" Module="In-Portal" Type="1">TGFzdCBVcGRhdGVk</PHRASE>
+ <PHRASE Label="la_Link_Date" Module="In-Portal" Type="1">RGF0ZQ==</PHRASE>
+ <PHRASE Label="la_Link_Description" Module="In-Portal" Type="1">TGluayBEZXNjcmlwdGlvbg==</PHRASE>
+ <PHRASE Label="la_link_editorspick_prompt" Module="In-Portal" Type="1">RGlzcGxheSBlZGl0b3IgUElDS3MgYWJvdmUgcmVndWxhciBsaW5rcw==</PHRASE>
+ <PHRASE Label="la_Link_Hits" Module="In-Portal" Type="1">SGl0cw==</PHRASE>
+ <PHRASE Label="la_Link_Name" Module="In-Portal" Type="1">TGluayBOYW1l</PHRASE>
+ <PHRASE Label="la_link_newdays_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIGRheXMgZm9yIGEgbGluayB0byBiZSBORVc=</PHRASE>
+ <PHRASE Label="la_link_perpage_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIGxpbmtzIHBlciBwYWdl</PHRASE>
+ <PHRASE Label="la_link_perpage_short_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIGxpbmtzIHBlciBwYWdlIG9uIGEgc2hvcnQgbGlzdGluZw==</PHRASE>
+ <PHRASE Label="la_Link_Rating" Module="In-Portal" Type="1">UmF0aW5n</PHRASE>
+ <PHRASE Label="la_link_reviewed" Module="In-Portal" Type="1">TGluayByZXZpZXdlZA==</PHRASE>
+ <PHRASE Label="la_link_sortfield2_prompt" Module="In-Portal" Type="1">QW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_link_sortfield_prompt" Module="In-Portal" Type="1">T3JkZXIgbGlua3MgYnk=</PHRASE>
+ <PHRASE Label="la_link_sortreviews2_prompt" Module="In-Portal" Type="1">YW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_link_sortreviews_prompt" Module="In-Portal" Type="1">U29ydCByZXZpZXdzIGJ5</PHRASE>
+ <PHRASE Label="la_Link_URL" Module="In-Portal" Type="1">VVJM</PHRASE>
+ <PHRASE Label="la_link_urlstatus_prompt" Module="In-Portal" Type="1">RGlzcGxheSBsaW5rIFVSTCBpbiBzdGF0dXMgYmFy</PHRASE>
+ <PHRASE Label="la_Linux" Module="In-Portal" Type="1">TGludXggKG4p</PHRASE>
+ <PHRASE Label="la_LocalImage" Module="In-Portal" Type="1">TG9jYWwgSW1hZ2U=</PHRASE>
+ <PHRASE Label="la_Logged_in_as" Module="In-Portal" Type="1">TG9nZ2VkIGluIGFz</PHRASE>
+ <PHRASE Label="la_login" Module="In-Portal" Type="1">TG9naW4=</PHRASE>
+ <PHRASE Label="la_m0" Module="In-Portal" Type="1">KEdNVCk=</PHRASE>
+ <PHRASE Label="la_m1" Module="In-Portal" Type="1">KEdNVCAtMDE6MDAp</PHRASE>
+ <PHRASE Label="la_m10" Module="In-Portal" Type="1">KEdNVCAtMTA6MDAp</PHRASE>
+ <PHRASE Label="la_m11" Module="In-Portal" Type="1">KEdNVCAtMTE6MDAp</PHRASE>
+ <PHRASE Label="la_m12" Module="In-Portal" Type="1">KEdNVCAtMTI6MDAp</PHRASE>
+ <PHRASE Label="la_m2" Module="In-Portal" Type="1">KEdNVCAtMDI6MDAp</PHRASE>
+ <PHRASE Label="la_m3" Module="In-Portal" Type="1">KEdNVCAtMDM6MDAp</PHRASE>
+ <PHRASE Label="la_m4" Module="In-Portal" Type="1">KEdNVCAtMDQ6MDAp</PHRASE>
+ <PHRASE Label="la_m5" Module="In-Portal" Type="1">KEdNVCAtMDU6MDAp</PHRASE>
+ <PHRASE Label="la_m6" Module="In-Portal" Type="1">KEdNVCAtMDY6MDAp</PHRASE>
+ <PHRASE Label="la_m7" Module="In-Portal" Type="1">KEdNVCAtMDc6MDAp</PHRASE>
+ <PHRASE Label="la_m8" Module="In-Portal" Type="1">KEdNVCAtMDg6MDAp</PHRASE>
+ <PHRASE Label="la_m9" Module="In-Portal" Type="1">KEdNVCAtMDk6MDAp</PHRASE>
+ <PHRASE Label="la_Margins" Module="In-Portal" Type="1">TWFyZ2lucw==</PHRASE>
+ <PHRASE Label="la_megabytes" Module="In-Portal" Type="1">TUI=</PHRASE>
+ <PHRASE Label="la_MembershipExpirationReminder" Module="In-Portal" Type="1">R3JvdXAgTWVtYmVyc2hpcCBFeHBpcmF0aW9uIFJlbWluZGVyIChkYXlzKQ==</PHRASE>
+ <PHRASE Label="la_MenuTreeTitle" Module="In-Portal" Type="1">TWFpbiBNZW51</PHRASE>
+ <PHRASE Label="la_Metric" Module="In-Portal" Type="1">TWV0cmlj</PHRASE>
+ <PHRASE Label="la_missing_theme" Module="In-Portal" Type="1">TWlzc2luZyBJbiBUaGVtZQ==</PHRASE>
+ <PHRASE Label="la_MixedCategoryPath" Module="In-Portal" Type="1">Q2F0ZWdvcnkgcGF0aCBpbiBvbmUgZmllbGQ=</PHRASE>
+ <PHRASE Label="la_module_not_licensed" Module="In-Portal" Type="1">TW9kdWxlIG5vdCBsaWNlbnNlZA==</PHRASE>
+ <PHRASE Label="la_monday" Module="In-Portal" Type="1">TW9uZGF5</PHRASE>
+ <PHRASE Label="la_Never" Module="In-Portal" Type="1">TmV2ZXI=</PHRASE>
+ <PHRASE Label="la_NeverExpires" Module="In-Portal" Type="1">TmV2ZXIgRXhwaXJlcw==</PHRASE>
+ <PHRASE Label="la_New" Module="In-Portal" Type="1">TmV3</PHRASE>
+ <PHRASE Label="la_news_daysarchive_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIGRheXMgdG8gYXJjaGl2ZSBhcnRpY2xlcyBhdXRvbWF0aWNhbGx5</PHRASE>
+ <PHRASE Label="la_news_editorpicksabove_prompt" Module="In-Portal" Type="1">RGlzcGxheSBlZGl0b3IgUElDS3MgYWJvdmUgcmVndWxhciBhcnRpY2xlcw==</PHRASE>
+ <PHRASE Label="la_news_newdays_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIGRheXMgZm9yIGEgYXJ0aWNsZSB0byBiZSBORVc=</PHRASE>
+ <PHRASE Label="la_news_perpage_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIGFydGljbGVzIHBlciBwYWdl</PHRASE>
+ <PHRASE Label="la_news_perpage_short_prompt" Module="In-Portal" Type="1">QXJ0aWNsZXMgUGVyIFBhZ2UgKFNob3J0bGlzdCk=</PHRASE>
+ <PHRASE Label="la_news_sortfield2_pompt" Module="In-Portal" Type="1">QW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_news_sortfield_pompt" Module="In-Portal" Type="1">T3JkZXIgYXJ0aWNsZXMgYnk=</PHRASE>
+ <PHRASE Label="la_news_sortreviews2_prompt" Module="In-Portal" Type="1">QW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_news_sortreviews_prompt" Module="In-Portal" Type="1">U29ydCByZXZpZXdzIGJ5</PHRASE>
+ <PHRASE Label="la_nextcategory" Module="In-Portal" Type="1">TmV4dCBjYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="la_nextgroup" Module="In-Portal" Type="1">TmV4dCBncm91cA==</PHRASE>
+ <PHRASE Label="la_NextUser" Module="In-Portal" Type="1">TmV4dCBVc2Vy</PHRASE>
+ <PHRASE Label="la_No" Module="In-Portal" Type="1">Tm8=</PHRASE>
+ <PHRASE Label="la_none" Module="In-Portal" Type="1">Tm9uZQ==</PHRASE>
+ <PHRASE Label="la_NoSubject" Module="In-Portal" Type="1">Tm8gU3ViamVjdA==</PHRASE>
+ <PHRASE Label="la_no_topics" Module="In-Portal" Type="1">Tm8gdG9waWNz</PHRASE>
+ <PHRASE Label="la_Number_of_Posts" Module="In-Portal" Type="1">TnVtYmVyIG9mIFBvc3Rz</PHRASE>
+ <PHRASE Label="la_of" Module="In-Portal" Type="1">b2Y=</PHRASE>
+ <PHRASE Label="la_Off" Module="In-Portal" Type="1">T2Zm</PHRASE>
+ <PHRASE Label="la_On" Module="In-Portal" Type="1">T24=</PHRASE>
+ <PHRASE Label="la_OneWay" Module="In-Portal" Type="1">T25lIFdheQ==</PHRASE>
+ <PHRASE Label="la_opt_day" Module="In-Portal" Type="1">ZGF5KHMp</PHRASE>
+ <PHRASE Label="la_opt_hour" Module="In-Portal" Type="1">aG91cihzKQ==</PHRASE>
+ <PHRASE Label="la_opt_min" Module="In-Portal" Type="1">bWludXRlKHMp</PHRASE>
+ <PHRASE Label="la_opt_month" Module="In-Portal" Type="1">bW9udGgocyk=</PHRASE>
+ <PHRASE Label="la_opt_sec" Module="In-Portal" Type="1">c2Vjb25kKHMp</PHRASE>
+ <PHRASE Label="la_opt_week" Module="In-Portal" Type="1">d2VlayhzKQ==</PHRASE>
+ <PHRASE Label="la_opt_year" Module="In-Portal" Type="1">eWVhcihzKQ==</PHRASE>
+ <PHRASE Label="la_original_values" Module="In-Portal" Type="1">T3JpZ2luYWwgVmFsdWVz</PHRASE>
+ <PHRASE Label="la_origional_value" Module="In-Portal" Type="1">T3JpZ2luYWwgVmFsdWU=</PHRASE>
+ <PHRASE Label="la_origional_values" Module="In-Portal" Type="1">T3JpZ2luYWwgVmFsdWVz</PHRASE>
+ <PHRASE Label="la_OtherFields" Module="In-Portal" Type="1">T3RoZXIgRmllbGRz</PHRASE>
+ <PHRASE Label="la_p1" Module="In-Portal" Type="1">KEdNVCArMDE6MDAp</PHRASE>
+ <PHRASE Label="la_p10" Module="In-Portal" Type="1">KEdNVCArMTA6MDAp</PHRASE>
+ <PHRASE Label="la_p11" Module="In-Portal" Type="1">KEdNVCArMTE6MDAp</PHRASE>
+ <PHRASE Label="la_p12" Module="In-Portal" Type="1">KEdNVCArMTI6MDAp</PHRASE>
+ <PHRASE Label="la_p13" Module="In-Portal" Type="1">KEdNVCArMTM6MDAp</PHRASE>
+ <PHRASE Label="la_p2" Module="In-Portal" Type="1">KEdNVCArMDI6MDAp</PHRASE>
+ <PHRASE Label="la_p3" Module="In-Portal" Type="1">KEdNVCArMDM6MDAp</PHRASE>
+ <PHRASE Label="la_p4" Module="In-Portal" Type="1">KEdNVCArMDQ6MDAp</PHRASE>
+ <PHRASE Label="la_p5" Module="In-Portal" Type="1">KEdNVCArMDU6MDAp</PHRASE>
+ <PHRASE Label="la_p6" Module="In-Portal" Type="1">KEdNVCArMDY6MDAp</PHRASE>
+ <PHRASE Label="la_p7" Module="In-Portal" Type="1">KEdNVCArMDc6MDAp</PHRASE>
+ <PHRASE Label="la_p8" Module="In-Portal" Type="1">KEdNVCArMDg6MDAp</PHRASE>
+ <PHRASE Label="la_p9" Module="In-Portal" Type="1">KEdNVCArMDk6MDAp</PHRASE>
+ <PHRASE Label="la_Paddings" Module="In-Portal" Type="1">UGFkZGluZ3M=</PHRASE>
+ <PHRASE Label="la_Page" Module="In-Portal" Type="1">UGFnZQ==</PHRASE>
+ <PHRASE Label="la_password_info" Module="In-Portal" Type="2">VG8gY2hhbmdlIHRoZSBwYXNzd29yZCwgZW50ZXIgdGhlIHBhc3N3b3JkIGhlcmUgYW5kIGluIHRoZSBib3ggYmVsb3c=</PHRASE>
+ <PHRASE Label="la_Pending" Module="In-Portal" Type="0">UGVuZGluZw==</PHRASE>
+ <PHRASE Label="la_performing_backup" Module="In-Portal" Type="1">UGVyZm9ybWluZyBCYWNrdXA=</PHRASE>
+ <PHRASE Label="la_performing_export" Module="In-Portal" Type="1">UGVyZm9ybWluZyBFeHBvcnQ=</PHRASE>
+ <PHRASE Label="la_performing_import" Module="In-Portal" Type="1">UGVyZm9ybWluZyBJbXBvcnQ=</PHRASE>
+ <PHRASE Label="la_performing_restore" Module="In-Portal" Type="1">UGVyZm9ybWluZyBSZXN0b3Jl</PHRASE>
+ <PHRASE Label="la_PermName_Admin_desc" Module="In-Portal" Type="1">QWxsb3dzIGFjY2VzcyB0byB0aGUgQWRtaW5pc3RyYXRpb24gdXRpbGl0eQ==</PHRASE>
+ <PHRASE Label="la_PermName_SystemAccess.ReadOnly_desc" Module="In-Portal" Type="1">UmVhZC1Pbmx5IEFjY2VzcyBUbyBEYXRhYmFzZQ==</PHRASE>
+ <PHRASE Label="la_PermTab_category" Module="In-Portal" Type="1">Q2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_PermTab_link" Module="In-Portal" Type="1">TGlua3M=</PHRASE>
+ <PHRASE Label="la_PermTab_news" Module="In-Portal" Type="1">QXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="la_PermTab_topic" Module="In-Portal" Type="1">VG9waWNz</PHRASE>
+ <PHRASE Label="la_PermType_Admin" Module="In-Portal" Type="1">UGVybWlzc2lvbiBUeXBlIEFkbWlu</PHRASE>
+ <PHRASE Label="la_PermType_AdminSection" Module="In-Portal" Type="1">QWRtaW5pc3RyYXRpb24=</PHRASE>
+ <PHRASE Label="la_PermType_Front" Module="In-Portal" Type="1">UGVybWlzc2lvbiBUeXBlIEZyb250IEVuZA==</PHRASE>
+ <PHRASE Label="la_PermType_FrontEnd" Module="In-Portal" Type="1">RnJvbnQgRW5k</PHRASE>
+ <PHRASE Label="la_PhraseNotTranslated" Module="In-Portal" Type="1">Tm90IFRyYW5zbGF0ZWQ=</PHRASE>
+ <PHRASE Label="la_PhraseTranslated" Module="In-Portal" Type="1">VHJhbnNsYXRlZA==</PHRASE>
+ <PHRASE Label="la_PhraseType_Admin" Module="In-Portal" Type="1">QWRtaW4=</PHRASE>
+ <PHRASE Label="la_PhraseType_Both" Module="In-Portal" Type="2">Qm90aA==</PHRASE>
+ <PHRASE Label="la_PhraseType_Front" Module="In-Portal" Type="1">RnJvbnQ=</PHRASE>
+ <PHRASE Label="la_Pick" Module="In-Portal" Type="1">RWRpdG9yJ3MgcGljaw==</PHRASE>
+ <PHRASE Label="la_PickedColumns" Module="In-Portal" Type="1">U2VsZWN0ZWQgQ29sdW1ucw==</PHRASE>
+ <PHRASE Label="la_Pop" Module="In-Portal" Type="1">UG9w</PHRASE>
+ <PHRASE Label="la_PositionAndVisibility" Module="In-Portal" Type="1">UG9zaXRpb24gQW5kIFZpc2liaWxpdHk=</PHRASE>
+ <PHRASE Label="la_posts_newdays_prompt" Module="In-Portal" Type="1">TmV3IHBvc3RzIChkYXlzKQ==</PHRASE>
+ <PHRASE Label="la_posts_perpage_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIHBvc3RzIHBlciBwYWdl</PHRASE>
+ <PHRASE Label="la_posts_subheading" Module="In-Portal" Type="1">UG9zdHM=</PHRASE>
+ <PHRASE Label="la_prevcategory" Module="In-Portal" Type="1">UHJldmlvdXMgY2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_prevgroup" Module="In-Portal" Type="1">UHJldmlvdXMgZ3JvdXA=</PHRASE>
+ <PHRASE Label="la_PrevUser" Module="In-Portal" Type="1">UHJldmlvdXMgVXNlcg==</PHRASE>
+ <PHRASE Label="la_PrimaryCategory" Module="In-Portal" Type="1">UHJpbWFyeQ==</PHRASE>
+ <PHRASE Label="la_prompt_ActiveArticles" Module="In-Portal" Type="1">QWN0aXZlIEFydGljbGVz</PHRASE>
+ <PHRASE Label="la_prompt_ActiveCategories" Module="In-Portal" Type="1">QWN0aXZlIENhdGVnb3JpZXM=</PHRASE>
+ <PHRASE Label="la_prompt_ActiveLinks" Module="In-Portal" Type="1">QWN0aXZlIExpbmtz</PHRASE>
+ <PHRASE Label="la_prompt_ActiveTopics" Module="In-Portal" Type="1">QWN0aXZlIFRvcGljcw==</PHRASE>
+ <PHRASE Label="la_prompt_ActiveUsers" Module="In-Portal" Type="1">QWN0aXZlIFVzZXJz</PHRASE>
+ <PHRASE Label="la_prompt_addmodule" Module="In-Portal" Type="1">QWRkIE1vZHVsZQ==</PHRASE>
+ <PHRASE Label="la_prompt_AddressTo" Module="In-Portal" Type="1">U2VudCBUbw==</PHRASE>
+ <PHRASE Label="la_prompt_AdminId" Module="In-Portal" Type="1">QWRtaW4gZ3JvdXA=</PHRASE>
+ <PHRASE Label="la_prompt_AdminMailFrom" Module="In-Portal" Type="1">TWVzc2FnZXMgZnJvbSBTaXRlIEFkbWluIGFyZSBmcm9t</PHRASE>
+ <PHRASE Label="la_prompt_AdvancedSearch" Module="In-Portal" Type="1">QWR2YW5jZWQgU2VhcmNo</PHRASE>
+ <PHRASE Label="la_prompt_allow_reset" Module="In-Portal" Type="1">QWxsb3cgcGFzc3dvcmQgcmVzZXQgYWZ0ZXI=</PHRASE>
+ <PHRASE Label="la_prompt_all_templates" Module="In-Portal" Type="1">QWxsIHRlbXBsYXRlcw==</PHRASE>
+ <PHRASE Label="la_prompt_AltName" Module="In-Portal" Type="1">QWx0IHZhbHVl</PHRASE>
+ <PHRASE Label="la_prompt_applyingbanlist" Module="In-Portal" Type="2">QXBwbHlpbmcgQmFuIExpc3QgdG8gRXhpc3RpbmcgVXNlcnMuLg==</PHRASE>
+ <PHRASE Label="la_prompt_approve_warning" Module="In-Portal" Type="1">Q29udGludWUgdG8gcmVzdG9yZSBhdCBteSBvd24gcmlzaz8=</PHRASE>
+ <PHRASE Label="la_prompt_Archived" Module="In-Portal" Type="1">QXJjaGl2ZWQ=</PHRASE>
+ <PHRASE Label="la_prompt_ArchiveDate" Module="In-Portal" Type="1">QXJjaGl2YXRpb24gRGF0ZQ==</PHRASE>
+ <PHRASE Label="la_prompt_ArticleAverageRating" Module="In-Portal" Type="1">QXZlcmFnZSBSYXRpbmcgb2YgQXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="la_prompt_ArticleBody" Module="In-Portal" Type="1">QXJ0aWNsZSBCb2R5</PHRASE>
+ <PHRASE Label="la_prompt_ArticleExcerpt" Module="In-Portal" Type="1">QXJ0aWNsZSBFeGNlcnB0</PHRASE>
+ <PHRASE Label="la_prompt_ArticleExcerpt!" Module="In-Portal" Type="1">QXJ0aWNsZSBFeGNlcnB0</PHRASE>
+ <PHRASE Label="la_prompt_ArticleReviews" Module="In-Portal" Type="1">VG90YWwgQXJ0aWNsZSBSZXZpZXdz</PHRASE>
+ <PHRASE Label="la_prompt_ArticlesActive" Module="In-Portal" Type="1">QWN0aXZlIEFydGljbGVz</PHRASE>
+ <PHRASE Label="la_prompt_ArticlesArchived" Module="In-Portal" Type="1">QXJjaGl2ZWQgQXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="la_prompt_ArticlesPending" Module="In-Portal" Type="1">UGVuZGluZyBBcnRpY2xlcw==</PHRASE>
+ <PHRASE Label="la_prompt_ArticlesTotal" Module="In-Portal" Type="1">VG90YWwgQXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="la_prompt_Attatchment" Module="In-Portal" Type="1">QXR0YWNobWVudA==</PHRASE>
+ <PHRASE Label="la_Prompt_Attention" Module="In-Portal" Type="1">QXR0ZW50aW9uIQ==</PHRASE>
+ <PHRASE Label="la_prompt_Author" Module="In-Portal" Type="1">QXV0aG9y</PHRASE>
+ <PHRASE Label="la_prompt_AutoGen_Excerpt" Module="In-Portal" Type="1">R2VuZXJhdGUgZnJvbSB0aGUgYXJ0aWNsZSBib2R5</PHRASE>
+ <PHRASE Label="la_prompt_AutomaticDirectoryName" Module="In-Portal" Type="1">QXV0b21hdGljIERpcmVjdG9yeSBOYW1l</PHRASE>
+ <PHRASE Label="la_prompt_AutomaticFilename" Module="In-Portal" Type="1">QXV0b21hdGljIEZpbGVuYW1l</PHRASE>
+ <PHRASE Label="la_prompt_Available_Modules" Module="In-Portal" Type="1">TW9kdWxlcw==</PHRASE>
+ <PHRASE Label="la_Prompt_Backup_Date" Module="In-Portal" Type="1">QmFjayBVcCBEYXRl</PHRASE>
+ <PHRASE Label="la_prompt_Backup_Path" Module="In-Portal" Type="1">QmFja3VwIFBhdGg=</PHRASE>
+ <PHRASE Label="la_Prompt_Backup_Status" Module="In-Portal" Type="1">QmFja3VwIHN0YXR1cw==</PHRASE>
+ <PHRASE Label="la_prompt_BannedUsers" Module="In-Portal" Type="1">QmFubmVkIFVzZXJz</PHRASE>
+ <PHRASE Label="la_prompt_birthday" Module="In-Portal" Type="1">RGF0ZSBvZiBCaXJ0aA==</PHRASE>
+ <PHRASE Label="la_prompt_CacheTimeout" Module="In-Portal" Type="1">Q2FjaGUgVGltZW91dCAoc2Vjb25kcyk=</PHRASE>
+ <PHRASE Label="la_prompt_CategoryEditorsPick" Module="In-Portal" Type="1">RWRpdG9yJ3MgUGljayBDYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="la_prompt_CategoryId" Module="In-Portal" Type="1">Q2F0ZWdvcnkgSUQ=</PHRASE>
+ <PHRASE Label="la_prompt_CategoryLeadStoryArticles" Module="In-Portal" Type="1">Q2F0ZWdvcnkgTGVhZCBTdG9yeSBBcnRpY2xlcw==</PHRASE>
+ <PHRASE Label="la_Prompt_CategoryPermissions" Module="In-Portal" Type="1">Q2F0ZWdvcnkgUGVybWlzc2lvbnM=</PHRASE>
+ <PHRASE Label="la_prompt_CatLead" Module="In-Portal" Type="1">Q2F0ZWdvcnkgTGVhZCBTdG9yeQ==</PHRASE>
+ <PHRASE Label="la_prompt_CensorhipId" Module="In-Portal" Type="1">Q2Vuc29yc2hpcCBJZA==</PHRASE>
+ <PHRASE Label="la_prompt_CensorWord" Module="In-Portal" Type="1">Q2Vuc29yc2hpcCBXb3Jk</PHRASE>
+ <PHRASE Label="la_prompt_charset" Module="In-Portal" Type="1">Q2hhcnNldA==</PHRASE>
+ <PHRASE Label="la_prompt_City" Module="In-Portal" Type="1">Q2l0eQ==</PHRASE>
+ <PHRASE Label="la_prompt_Comments" Module="In-Portal" Type="1">Q29tbWVudHM=</PHRASE>
+ <PHRASE Label="la_prompt_continue" Module="In-Portal" Type="1">Q29udGludWU=</PHRASE>
+ <PHRASE Label="la_prompt_CopyLabels" Module="In-Portal" Type="1">Q29weSBMYWJlbHMgZnJvbSB0aGlzIExhbmd1YWdl</PHRASE>
+ <PHRASE Label="la_prompt_Country" Module="In-Portal" Type="1">Q291bnRyeQ==</PHRASE>
+ <PHRASE Label="la_prompt_CreatedBy" Module="In-Portal" Type="1">Q3JlYXRlZCBieQ==</PHRASE>
+ <PHRASE Label="la_prompt_CreatedOn" Module="In-Portal" Type="1">Q3JlYXRlZCBvbg==</PHRASE>
+ <PHRASE Label="la_prompt_CreatedOn_Time" Module="In-Portal" Type="1">Q3JlYXRlZCBhdA==</PHRASE>
+ <PHRASE Label="la_prompt_CurrentSessions" Module="In-Portal" Type="1">Q3VycmVudCBTZXNzaW9ucw==</PHRASE>
+ <PHRASE Label="la_prompt_CustomFilename" Module="In-Portal" Type="1">Q3VzdG9tIEZpbGVuYW1l</PHRASE>
+ <PHRASE Label="la_prompt_DatabaseSettings" Module="In-Portal" Type="1">RGF0YWJhc2UgU2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_prompt_DataSize" Module="In-Portal" Type="1">VG90YWwgU2l6ZSBvZiB0aGUgRGF0YWJhc2U=</PHRASE>
+ <PHRASE Label="la_prompt_DateFormat" Module="In-Portal" Type="1">KG1tLWRkLXl5eXkp</PHRASE>
+ <PHRASE Label="la_prompt_DbName" Module="In-Portal" Type="1">U2VydmVyIERhdGFiYXNl</PHRASE>
+ <PHRASE Label="la_prompt_DbPass" Module="In-Portal" Type="1">U2VydmVyIFBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="la_prompt_DbUsername" Module="In-Portal" Type="1">RGF0YWJhc2UgVXNlciBOYW1l</PHRASE>
+ <PHRASE Label="la_prompt_decimal" Module="In-Portal" Type="2">RGVjaW1hbCBQb2ludA==</PHRASE>
+ <PHRASE Label="la_prompt_Default" Module="In-Portal" Type="1">RGVmYXVsdA==</PHRASE>
+ <PHRASE Label="la_prompt_delete" Module="In-Portal" Type="1">RGVsZXRl</PHRASE>
+ <PHRASE Label="la_prompt_Description" Module="In-Portal" Type="1">RGVzY3JpcHRpb24=</PHRASE>
+ <PHRASE Label="la_prompt_DirectoryName" Module="In-Portal" Type="1">RGlyZWN0b3J5IE5hbWU=</PHRASE>
+ <PHRASE Label="la_prompt_DisabledArticles" Module="In-Portal" Type="1">RGlzYWJsZWQgQXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="la_prompt_DisabledCategories" Module="In-Portal" Type="1">RGlzYWJsZWQgQ2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_prompt_DisabledLinks" Module="In-Portal" Type="1">RGlzYWJsZWQgTGlua3M=</PHRASE>
+ <PHRASE Label="la_prompt_DisplayOrder" Module="In-Portal" Type="1">RGlzcGxheSBPcmRlcg==</PHRASE>
+ <PHRASE Label="la_prompt_download_export" Module="In-Portal" Type="2">RG93bmxvYWQgTGFuZ3VhZ2UgRXhwb3J0Og==</PHRASE>
+ <PHRASE Label="la_prompt_DupRating" Module="In-Portal" Type="2">QWxsb3cgRHVwbGljYXRlIFJhdGluZyBWb3Rlcw==</PHRASE>
+ <PHRASE Label="la_prompt_DupReviews" Module="In-Portal" Type="2">QWxsb3cgRHVwbGljYXRlIFJldmlld3M=</PHRASE>
+ <PHRASE Label="la_prompt_edit" Module="In-Portal" Type="1">RWRpdA==</PHRASE>
+ <PHRASE Label="la_prompt_EditorsPick" Module="In-Portal" Type="1">RWRpdG9yJ3MgUGljaw==</PHRASE>
+ <PHRASE Label="la_prompt_EditorsPickArticles" Module="In-Portal" Type="1">RWRpdG9yJ3MgUGljayBBcnRpY2xlcw==</PHRASE>
+ <PHRASE Label="la_prompt_EditorsPickLinks" Module="In-Portal" Type="1">RWRpdG9yJ3MgUGljayBMaW5rcw==</PHRASE>
+ <PHRASE Label="la_prompt_EditorsPickTopics" Module="In-Portal" Type="1">RWRpdG9yIFBpY2sgVG9waWNz</PHRASE>
+ <PHRASE Label="la_prompt_edit_query" Module="In-Portal" Type="1">RWRpdCBRdWVyeQ==</PHRASE>
+ <PHRASE Label="la_prompt_Email" Module="In-Portal" Type="1">RW1haWw=</PHRASE>
+ <PHRASE Label="la_prompt_EmailBody" Module="In-Portal" Type="1">RW1haWwgQm9keQ==</PHRASE>
+ <PHRASE Label="la_prompt_EmailCancelMessage" Module="In-Portal" Type="1">RW1haWwgZGVsaXZlcnkgYWJvcnRlZA==</PHRASE>
+ <PHRASE Label="la_prompt_EmailCompleteMessage" Module="In-Portal" Type="1">VGhlIEVtYWlsIE1lc3NhZ2UgaGFzIGJlZW4gc2VudA==</PHRASE>
+ <PHRASE Label="la_prompt_EmailInitMessage" Module="In-Portal" Type="1">UGxlYXNlIFdhaXQgd2hpbGUgSW4tUG9ydGFsIHByZXBhcmVzIHRvIHNlbmQgdGhlIG1lc3NhZ2UuLg==</PHRASE>
+ <PHRASE Label="la_prompt_EmailSubject" Module="In-Portal" Type="1">RW1haWwgU3ViamVjdA==</PHRASE>
+ <PHRASE Label="la_prompt_EmoticonId" Module="In-Portal" Type="1">RW1vdGlvbiBJZA==</PHRASE>
+ <PHRASE Label="la_prompt_EnableCache" Module="In-Portal" Type="1">RW5hYmxlIFRlbXBsYXRlIENhY2hpbmc=</PHRASE>
+ <PHRASE Label="la_prompt_Enabled" Module="In-Portal" Type="1">RW5hYmxlZA==</PHRASE>
+ <PHRASE Label="la_prompt_Enable_HTML" Module="In-Portal" Type="1">RW5hYmxlIEhUTUw/</PHRASE>
+ <PHRASE Label="la_prompt_ErrorTag" Module="In-Portal" Type="2">RXJyb3IgVGFn</PHRASE>
+ <PHRASE Label="la_prompt_Event" Module="In-Portal" Type="1">RXZlbnQ=</PHRASE>
+ <PHRASE Label="la_prompt_Expired" Module="In-Portal" Type="0">RXhwaXJhdGlvbiBEYXRl</PHRASE>
+ <PHRASE Label="la_prompt_ExportFileName" Module="In-Portal" Type="2">RXhwb3J0IEZpbGVuYW1l</PHRASE>
+ <PHRASE Label="la_prompt_export_error" Module="In-Portal" Type="1">R2VuZXJhbCBlcnJvcjogdW5hYmxlIHRvIGV4cG9ydA==</PHRASE>
+ <PHRASE Label="la_prompt_FieldId" Module="In-Portal" Type="1">RmllbGQgSWQ=</PHRASE>
+ <PHRASE Label="la_prompt_FieldLabel" Module="In-Portal" Type="1">RmllbGQgTGFiZWw=</PHRASE>
+ <PHRASE Label="la_prompt_FieldName" Module="In-Portal" Type="1">RmllbGQgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_prompt_FieldPrompt" Module="In-Portal" Type="1">RmllbGQgUHJvbXB0</PHRASE>
+ <PHRASE Label="la_prompt_FileId" Module="In-Portal" Type="1">RmlsZSBJZA==</PHRASE>
+ <PHRASE Label="la_prompt_FileName" Module="In-Portal" Type="1">RmlsZSBuYW1l</PHRASE>
+ <PHRASE Label="la_prompt_FirstName" Module="In-Portal" Type="1">Rmlyc3QgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_prompt_First_Name" Module="In-Portal" Type="1">Rmlyc3QgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_prompt_Frequency" Module="In-Portal" Type="1">RnJlcXVlbmN5</PHRASE>
+ <PHRASE Label="la_prompt_FromUser" Module="In-Portal" Type="1">RnJvbS9UbyBVc2Vy</PHRASE>
+ <PHRASE Label="la_prompt_FromUsername" Module="In-Portal" Type="1">RnJvbQ==</PHRASE>
+ <PHRASE Label="la_prompt_FrontLead" Module="In-Portal" Type="1">RnJvbnQgcGFnZSBsZWFkIGFydGljbGU=</PHRASE>
+ <PHRASE Label="la_Prompt_GeneralPermissions" Module="In-Portal" Type="1">R2VuZXJhbCBQZXJtaXNzaW9ucw==</PHRASE>
+ <PHRASE Label="la_prompt_GroupName" Module="In-Portal" Type="1">R3JvdXAgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_prompt_headers" Module="In-Portal" Type="1">RXh0cmEgTWFpbCBIZWFkZXJz</PHRASE>
+ <PHRASE Label="la_prompt_heading" Module="In-Portal" Type="1">SGVhZGluZw==</PHRASE>
+ <PHRASE Label="la_prompt_HitLimits" Module="In-Portal" Type="1">KE1pbmltdW0gNCk=</PHRASE>
+ <PHRASE Label="la_prompt_Hits" Module="In-Portal" Type="1">SGl0cw==</PHRASE>
+ <PHRASE Label="la_prompt_Hot" Module="In-Portal" Type="1">SG90</PHRASE>
+ <PHRASE Label="la_prompt_HotArticles" Module="In-Portal" Type="1">SG90IEFydGljbGVz</PHRASE>
+ <PHRASE Label="la_prompt_HotLinks" Module="In-Portal" Type="1">SG90IExpbmtz</PHRASE>
+ <PHRASE Label="la_prompt_HotTopics" Module="In-Portal" Type="1">SG90IFRvcGljcw==</PHRASE>
+ <PHRASE Label="la_prompt_html" Module="In-Portal" Type="1">SFRNTA==</PHRASE>
+ <PHRASE Label="la_prompt_html_version" Module="In-Portal" Type="1">SFRNTCBWZXJzaW9u</PHRASE>
+ <PHRASE Label="la_prompt_icon_url" Module="In-Portal" Type="1">SWNvbiBVUkw=</PHRASE>
+ <PHRASE Label="la_prompt_Image" Module="In-Portal" Type="1">SW1hZ2U=</PHRASE>
+ <PHRASE Label="la_prompt_ImageId" Module="In-Portal" Type="1">SW1hZ2UgSUQ=</PHRASE>
+ <PHRASE Label="la_prompt_import_error" Module="In-Portal" Type="1">SW1wb3J0IGVuY291bnRlcmVkIGFuIGVycm9yIGFuZCBkaWQgbm90IGNvbXBsZXRlLg==</PHRASE>
+ <PHRASE Label="la_prompt_Import_ImageName" Module="In-Portal" Type="1">TGluayBJbWFnZSBOYW1l</PHRASE>
+ <PHRASE Label="la_prompt_Import_Prefix" Module="In-Portal" Type="1">VGFibGUgTmFtZSBQcmVmaXg=</PHRASE>
+ <PHRASE Label="la_prompt_InitImportCat" Module="In-Portal" Type="1">SW5pdGlhbCBJbXBvcnQgQ2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_prompt_InlinkDbName" Module="In-Portal" Type="1">SW4tTGluayBEYXRhYmFzZSBOYW1l</PHRASE>
+ <PHRASE Label="la_prompt_InlinkDbPass" Module="In-Portal" Type="1">SW4tTGluayBEYXRhYmFzZSBQYXNzd29yZA==</PHRASE>
+ <PHRASE Label="la_prompt_InlinkDbUsername" Module="In-Portal" Type="1">SW4tTGluayBEYXRhYmFzZSBVc2VybmFtZQ==</PHRASE>
+ <PHRASE Label="la_prompt_InlinkServer" Module="In-Portal" Type="1">SW4tTGluayBTZXJ2ZXIgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_prompt_InlinkSqlType" Module="In-Portal" Type="1">SW4tTGluayBTUUwgVHlwZQ==</PHRASE>
+ <PHRASE Label="la_prompt_InputType" Module="In-Portal" Type="1">SW5wdXQgVHlwZQ==</PHRASE>
+ <PHRASE Label="la_prompt_Install_Status" Module="In-Portal" Type="1">SW5zdGFsbGF0aW9uIFN0YXR1cw==</PHRASE>
+ <PHRASE Label="la_prompt_ip" Module="In-Portal" Type="1">SVAgQWRkcmVzcw==</PHRASE>
+ <PHRASE Label="la_prompt_IPAddress" Module="In-Portal" Type="1">SVAgQWRkcmVzcw==</PHRASE>
+ <PHRASE Label="la_prompt_Item" Module="In-Portal" Type="1">SXRlbQ==</PHRASE>
+ <PHRASE Label="la_prompt_ItemField" Module="In-Portal" Type="2">SXRlbSBGaWVsZA==</PHRASE>
+ <PHRASE Label="la_prompt_ItemValue" Module="In-Portal" Type="2">RmllbGQgVmFsdWU=</PHRASE>
+ <PHRASE Label="la_prompt_ItemVerb" Module="In-Portal" Type="2">RmllbGQgQ29tcGFyaXNvbg==</PHRASE>
+ <PHRASE Label="la_prompt_KeyStroke" Module="In-Portal" Type="1">S2V5IFN0cm9rZQ==</PHRASE>
+ <PHRASE Label="la_prompt_Keyword" Module="In-Portal" Type="1">S2V5d29yZA==</PHRASE>
+ <PHRASE Label="la_prompt_Label" Module="In-Portal" Type="1">TGFiZWw=</PHRASE>
+ <PHRASE Label="la_prompt_LanguageFile" Module="In-Portal" Type="1">TGFuZ3VhZ2UgRmlsZQ==</PHRASE>
+ <PHRASE Label="la_prompt_LanguageId" Module="In-Portal" Type="1">TGFuZ3VhZ2UgSWQ=</PHRASE>
+ <PHRASE Label="la_prompt_lang_cache_timeout" Module="In-Portal" Type="1">TGFuZ3VhZ2UgQ2FjaGUgVGltZW91dA==</PHRASE>
+ <PHRASE Label="la_prompt_lang_dateformat" Module="In-Portal" Type="2">RGF0ZSBGb3JtYXQ=</PHRASE>
+ <PHRASE Label="la_prompt_lang_timeformat" Module="In-Portal" Type="0">VGltZSBGb3JtYXQ=</PHRASE>
+ <PHRASE Label="la_prompt_LastArticleUpdate" Module="In-Portal" Type="1">TGFzdCBVcGRhdGVkIEFydGljbGU=</PHRASE>
+ <PHRASE Label="la_prompt_LastCategoryUpdate" Module="In-Portal" Type="1">TGFzdCBDYXRlZ29yeSBVcGRhdGU=</PHRASE>
+ <PHRASE Label="la_prompt_LastLinkUpdate" Module="In-Portal" Type="1">TGFzdCBVcGRhdGVkIExpbms=</PHRASE>
+ <PHRASE Label="la_prompt_LastName" Module="In-Portal" Type="1">TGFzdCBOYW1l</PHRASE>
+ <PHRASE Label="la_prompt_LastUpdatedPostDate" Module="In-Portal" Type="1">TGFzdCBVcGRhdGVkIFBvc3QgRGF0ZQ==</PHRASE>
+ <PHRASE Label="la_prompt_LastUpdatedPostTime" Module="In-Portal" Type="1">TGFzdCBVcGRhdGVkIFBvc3QgVGltZQ==</PHRASE>
+ <PHRASE Label="la_prompt_LastUpdatedTopicDate" Module="In-Portal" Type="1">TGFzdCBVcGRhdGVkIFRvcGljIERhdGU=</PHRASE>
+ <PHRASE Label="la_prompt_LastUpdatedTopicTime" Module="In-Portal" Type="1">TGFzdCBVcGRhdGVkIFRvcGljIFRpbWU=</PHRASE>
+ <PHRASE Label="la_prompt_Last_Name" Module="In-Portal" Type="1">TGFzdCBOYW1l</PHRASE>
+ <PHRASE Label="la_prompt_LeadArticle" Module="In-Portal" Type="1">U2l0ZSBMZWFkIFN0b3J5</PHRASE>
+ <PHRASE Label="la_prompt_LeadCat" Module="In-Portal" Type="1">Q2F0ZWdvcnkgbGVhZCBhcnRpY2xl</PHRASE>
+ <PHRASE Label="la_prompt_LeadStoryArticles" Module="In-Portal" Type="1">TGVhZCBTdG9yeSBBcnRpY2xlcw==</PHRASE>
+ <PHRASE Label="la_prompt_LinkId" Module="In-Portal" Type="1">TGluayBJZA==</PHRASE>
+ <PHRASE Label="la_prompt_LinkReviews" Module="In-Portal" Type="1">VG90YWwgTGluayBSZXZpZXdz</PHRASE>
+ <PHRASE Label="la_prompt_LinksAverageRating" Module="In-Portal" Type="1">QXZlcmFnZSBSYXRpbmcgb2YgTGlua3M=</PHRASE>
+ <PHRASE Label="la_prompt_link_owner" Module="In-Portal" Type="1">TGluayBPd25lcg==</PHRASE>
+ <PHRASE Label="la_prompt_LoadLangTypes" Module="In-Portal" Type="1">SW5zdGFsbCBQaHJhc2UgVHlwZXM6</PHRASE>
+ <PHRASE Label="la_prompt_LocalName" Module="In-Portal" Type="1">TG9jYWwgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_prompt_Location" Module="In-Portal" Type="1">TG9jYXRpb24=</PHRASE>
+ <PHRASE Label="la_prompt_mailauthenticate" Module="In-Portal" Type="1">U2VydmVyIFJlcXVpcmVzIEF1dGhlbnRpY2F0aW9u</PHRASE>
+ <PHRASE Label="la_prompt_mailhtml" Module="In-Portal" Type="1">U2VuZCBIVE1MIGVtYWls</PHRASE>
+ <PHRASE Label="la_prompt_mailport" Module="In-Portal" Type="1">UG9ydCAoZS5nLiBwb3J0IDI1KQ==</PHRASE>
+ <PHRASE Label="la_prompt_mailserver" Module="In-Portal" Type="1">TWFpbCBTZXJ2ZXIgQWRkcmVzcw==</PHRASE>
+ <PHRASE Label="la_prompt_MaxHitsArticles" Module="In-Portal" Type="1">TWF4aW11bSBIaXRzIG9mIGFuIEFydGljbGU=</PHRASE>
+ <PHRASE Label="la_prompt_MaxLinksHits" Module="In-Portal" Type="1">TWF4aW11bSBIaXRzIG9mIGEgTGluaw==</PHRASE>
+ <PHRASE Label="la_prompt_MaxLinksVotes" Module="In-Portal" Type="1">TWF4aW11bSBWb3RlcyBvZiBhIExpbms=</PHRASE>
+ <PHRASE Label="la_prompt_MaxTopicHits" Module="In-Portal" Type="1">VG9waWMgTWF4aW11bSBIaXRz</PHRASE>
+ <PHRASE Label="la_prompt_MaxTopicVotes" Module="In-Portal" Type="1">VG9waWMgTWF4aW11bSBWb3Rlcw==</PHRASE>
+ <PHRASE Label="la_prompt_MaxVotesArticles" Module="In-Portal" Type="1">TWF4aW11bSBWb3RlcyBvZiBhbiBBcnRpY2xl</PHRASE>
+ <PHRASE Label="la_prompt_max_import_category_levels" Module="In-Portal" Type="1">TWF4aW1hbCBpbXBvcnRlZCBjYXRlZ29yeSBsZXZlbA==</PHRASE>
+ <PHRASE Label="la_prompt_MembershipExpires" Module="In-Portal" Type="1">TWVtYmVyc2hpcCBFeHBpcmVz</PHRASE>
+ <PHRASE Label="la_prompt_MessageType" Module="In-Portal" Type="1">Rm9ybWF0</PHRASE>
+ <PHRASE Label="la_prompt_MetaDescription" Module="In-Portal" Type="1">TWV0YSBEZXNjcmlwdGlvbg==</PHRASE>
+ <PHRASE Label="la_prompt_MetaKeywords" Module="In-Portal" Type="1">TWV0YSBLZXl3b3Jkcw==</PHRASE>
+ <PHRASE Label="la_prompt_minkeywordlength" Module="In-Portal" Type="1">TWluaW11bSBrZXl3b3JkIGxlbmd0aA==</PHRASE>
+ <PHRASE Label="la_prompt_ModifedOn" Module="In-Portal" Type="1">TW9kaWZpZWQgT24=</PHRASE>
+ <PHRASE Label="la_prompt_ModifedOn_Time" Module="In-Portal" Type="1">TW9kaWZpZWQgYXQ=</PHRASE>
+ <PHRASE Label="la_prompt_Module" Module="In-Portal" Type="1">TW9kdWxl</PHRASE>
+ <PHRASE Label="la_prompt_movedown" Module="In-Portal" Type="1">TW92ZSBkb3du</PHRASE>
+ <PHRASE Label="la_prompt_moveup" Module="In-Portal" Type="1">TW92ZSB1cA==</PHRASE>
+ <PHRASE Label="la_prompt_multipleshow" Module="In-Portal" Type="1">U2hvdyBtdWx0aXBsZQ==</PHRASE>
+ <PHRASE Label="la_prompt_Name" Module="In-Portal" Type="1">TmFtZQ==</PHRASE>
+ <PHRASE Label="la_prompt_New" Module="In-Portal" Type="1">TmV3</PHRASE>
+ <PHRASE Label="la_prompt_NewArticles" Module="In-Portal" Type="1">TmV3IEFydGljbGVz</PHRASE>
+ <PHRASE Label="la_prompt_NewCategories" Module="In-Portal" Type="1">TmV3IENhdGVnb3JpZXM=</PHRASE>
+ <PHRASE Label="la_prompt_NewestArticleDate" Module="In-Portal" Type="1">TmV3ZXN0IEFydGljbGUgRGF0ZQ==</PHRASE>
+ <PHRASE Label="la_prompt_NewestCategoryDate" Module="In-Portal" Type="1">TmV3ZXN0IENhdGVnb3J5IERhdGU=</PHRASE>
+ <PHRASE Label="la_prompt_NewestLinkDate" Module="In-Portal" Type="1">TmV3ZXN0IExpbmsgRGF0ZQ==</PHRASE>
+ <PHRASE Label="la_prompt_NewestPostDate" Module="In-Portal" Type="1">TmV3ZXN0IFBvc3QgRGF0ZQ==</PHRASE>
+ <PHRASE Label="la_prompt_NewestPostTime" Module="In-Portal" Type="1">TmV3ZXN0IFBvc3QgVGltZQ==</PHRASE>
+ <PHRASE Label="la_prompt_NewestTopicDate" Module="In-Portal" Type="1">TmV3ZXN0IFRvcGljIERhdGU=</PHRASE>
+ <PHRASE Label="la_prompt_NewestTopicTime" Module="In-Portal" Type="1">TmV3ZXN0IFRvcGljIFRpbWU=</PHRASE>
+ <PHRASE Label="la_prompt_NewestUserDate" Module="In-Portal" Type="1">TmV3ZXN0IFVzZXIgRGF0ZQ==</PHRASE>
+ <PHRASE Label="la_prompt_NewLinks" Module="In-Portal" Type="1">TmV3IExpbmtz</PHRASE>
+ <PHRASE Label="la_prompt_NewsId" Module="In-Portal" Type="1">TmV3cyBBcnRpY2xlIElE</PHRASE>
+ <PHRASE Label="la_prompt_NewTopics" Module="In-Portal" Type="1">TmV3IFRvcGljcw==</PHRASE>
+ <PHRASE Label="la_prompt_NonExpiredSessions" Module="In-Portal" Type="1">Q3VycmVudGx5IEFjdGl2ZSBVc2VyIFNlc3Npb25z</PHRASE>
+ <PHRASE Label="la_prompt_NotifyOwner" Module="In-Portal" Type="1">Tm90aWZ5IE93bmVy</PHRASE>
+ <PHRASE Label="la_prompt_NotRegUsers" Module="In-Portal" Type="1">TGluayBwZXJtaXNzaW9uIElEIGZvciBhbGwgdW5yZWdpc3RlcmVkIHVzZXJzIHRvIHZpZXcgaXQ=</PHRASE>
+ <PHRASE Label="la_prompt_overwritephrases" Module="In-Portal" Type="2">T3ZlcndyaXRlIEV4aXN0aW5nIFBocmFzZXM=</PHRASE>
+ <PHRASE Label="la_prompt_PackName" Module="In-Portal" Type="1">UGFjayBOYW1l</PHRASE>
+ <PHRASE Label="la_prompt_Parameter" Module="In-Portal" Type="1">UGFyYW1ldGVy</PHRASE>
+ <PHRASE Label="la_prompt_parent_templates" Module="In-Portal" Type="1">UGFyZW50IHRlbXBsYXRlcw==</PHRASE>
+ <PHRASE Label="la_prompt_Password" Module="In-Portal" Type="1">UGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="la_prompt_PasswordRepeat" Module="In-Portal" Type="1">UmVwZWF0IFBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="la_prompt_Pending" Module="In-Portal" Type="1">UGVuZGluZw==</PHRASE>
+ <PHRASE Label="la_prompt_PendingCategories" Module="In-Portal" Type="1">UGVuZGluZyBDYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="la_prompt_PendingItems" Module="In-Portal" Type="1">UGVuZGluZyBJdGVtcw==</PHRASE>
+ <PHRASE Label="la_prompt_PendingLinks" Module="In-Portal" Type="1">UGVuZGluZyBMaW5rcw==</PHRASE>
+ <PHRASE Label="la_prompt_perform_now" Module="In-Portal" Type="1">UGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBub3c/</PHRASE>
+ <PHRASE Label="la_prompt_PerPage" Module="In-Portal" Type="1">UGVyIFBhZ2U=</PHRASE>
+ <PHRASE Label="la_prompt_PersonalInfo" Module="In-Portal" Type="1">UGVyc29uYWwgSW5mb3JtYXRpb24=</PHRASE>
+ <PHRASE Label="la_prompt_Phone" Module="In-Portal" Type="1">UGhvbmU=</PHRASE>
+ <PHRASE Label="la_prompt_PhraseId" Module="In-Portal" Type="1">UGhyYXNlIElk</PHRASE>
+ <PHRASE Label="la_prompt_Phrases" Module="In-Portal" Type="1">UGhyYXNlcw==</PHRASE>
+ <PHRASE Label="la_prompt_PhraseType" Module="In-Portal" Type="1">UGhyYXNlIFR5cGU=</PHRASE>
+ <PHRASE Label="la_prompt_plaintext" Module="In-Portal" Type="1">UGxhaW4gVGV4dA==</PHRASE>
+ <PHRASE Label="la_prompt_Pop" Module="In-Portal" Type="1">UG9wdWxhcml0eQ==</PHRASE>
+ <PHRASE Label="la_prompt_PopularArticles" Module="In-Portal" Type="1">UG9wdWxhciBBcnRpY2xlcw==</PHRASE>
+ <PHRASE Label="la_prompt_PopularLinks" Module="In-Portal" Type="1">UG9wdWxhciBMaW5rcw==</PHRASE>
+ <PHRASE Label="la_prompt_PopularTopics" Module="In-Portal" Type="1">UG9wdWxhciBUb3BpY3M=</PHRASE>
+ <PHRASE Label="la_prompt_PostedBy" Module="In-Portal" Type="1">UG9zdGVkIGJ5</PHRASE>
+ <PHRASE Label="la_prompt_PostsToLock" Module="In-Portal" Type="1">UG9zdHMgdG8gbG9jaw==</PHRASE>
+ <PHRASE Label="la_prompt_PostsTotal" Module="In-Portal" Type="1">VG90YWwgUG9zdHM=</PHRASE>
+ <PHRASE Label="la_prompt_Primary" Module="In-Portal" Type="1">UHJpbWFyeQ==</PHRASE>
+ <PHRASE Label="la_prompt_PrimaryGroup" Module="In-Portal" Type="1">UHJpbWFyeSBHcm91cA==</PHRASE>
+ <PHRASE Label="la_prompt_PrimaryValue" Module="In-Portal" Type="1">UHJpbWFyeSBWYWx1ZQ==</PHRASE>
+ <PHRASE Label="la_prompt_Priority" Module="In-Portal" Type="1">UHJpb3JpdHk=</PHRASE>
+ <PHRASE Label="la_prompt_Properties" Module="In-Portal" Type="1">UHJvcGVydGllcw==</PHRASE>
+ <PHRASE Label="la_prompt_Rating" Module="In-Portal" Type="1">UmF0aW5n</PHRASE>
+ <PHRASE Label="la_prompt_RatingLimits" Module="In-Portal" Type="1">KE1pbmltdW0gMCwgTWF4aW11bSA1KQ==</PHRASE>
+ <PHRASE Label="la_prompt_RecordsCount" Module="In-Portal" Type="1">TnVtYmVyIG9mIERhdGFiYXNlIFJlY29yZHM=</PHRASE>
+ <PHRASE Label="la_prompt_RegionsCount" Module="In-Portal" Type="1">TnVtYmVyIG9mIFJlZ2lvbiBQYWNrcw==</PHRASE>
+ <PHRASE Label="la_prompt_RegUserId" Module="In-Portal" Type="1">UmVndWxhciBVc2VyIEdyb3Vw</PHRASE>
+ <PHRASE Label="la_prompt_RegUsers" Module="In-Portal" Type="1">TGluayBwZXJtaXNzaW9uIElEIGZvciBhbGwgcmVnaXN0ZXJlZCB1c2VycyB0byB2aWV3IGl0</PHRASE>
+ <PHRASE Label="la_prompt_RelationId" Module="In-Portal" Type="1">UmVsYXRpb24gSUQ=</PHRASE>
+ <PHRASE Label="la_prompt_RelationType" Module="In-Portal" Type="1">UmVsYXRpb24gVHlwZQ==</PHRASE>
+ <PHRASE Label="la_prompt_relevence_percent" Module="In-Portal" Type="1">U2VhcmNoIFJlbGV2YW5jZSBkZXBlbmRzIG9u</PHRASE>
+ <PHRASE Label="la_prompt_relevence_settings" Module="In-Portal" Type="1">U2VhcmNoIFJlbGV2ZW5jZSBTZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_prompt_remote_url" Module="In-Portal" Type="1">VXNlIHJlbW90ZSBpbWFnZSAoVVJMKQ==</PHRASE>
+ <PHRASE Label="la_prompt_ReplacementWord" Module="In-Portal" Type="1">UmVwbGFjZW1lbnQgV29yZA==</PHRASE>
+ <PHRASE Label="la_prompt_required_field_increase" Module="In-Portal" Type="1">SW5jcmVhc2UgaW1wb3J0YW5jZSBpZiBmaWVsZCBjb250YWlucyBhIHJlcXVpcmVkIGtleXdvcmQgYnk=</PHRASE>
+ <PHRASE Label="la_Prompt_Restore_Failed" Module="In-Portal" Type="1">UmVzdG9yZSBoYXMgZmFpbGVkIGFuIGVycm9yIG9jY3VyZWQ6</PHRASE>
+ <PHRASE Label="la_Prompt_Restore_Filechoose" Module="In-Portal" Type="1">Q2hvb3NlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGJhY2t1cCBkYXRlcyB0byByZXN0b3JlIG9yIGRlbGV0ZQ==</PHRASE>
+ <PHRASE Label="la_Prompt_Restore_Status" Module="In-Portal" Type="1">UmVzdG9yZSBTdGF0dXM=</PHRASE>
+ <PHRASE Label="la_Prompt_Restore_Success" Module="In-Portal" Type="1">UmVzdG9yZSBoYXMgYmVlbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5</PHRASE>
+ <PHRASE Label="la_Prompt_ReviewedBy" Module="In-Portal" Type="1">UmV2aWV3ZWQgQnk=</PHRASE>
+ <PHRASE Label="la_prompt_ReviewId" Module="In-Portal" Type="1">UmV2aWV3IElE</PHRASE>
+ <PHRASE Label="la_prompt_ReviewText" Module="In-Portal" Type="1">UmV2aWV3IFRleHQ=</PHRASE>
+ <PHRASE Label="la_prompt_RootCategory" Module="In-Portal" Type="1">U2VsZWN0IE1vZHVsZSBSb290IENhdGVnb3J5Og==</PHRASE>
+ <PHRASE Label="la_prompt_root_name" Module="In-Portal" Type="1">Um9vdCBjYXRlZ29yeSBuYW1lIChsYW5ndWFnZSB2YXJpYWJsZSk=</PHRASE>
+ <PHRASE Label="la_prompt_root_pass" Module="In-Portal" Type="1">Um9vdCBQYXNzd29yZA==</PHRASE>
+ <PHRASE Label="la_prompt_Root_Password" Module="In-Portal" Type="1">UGxlYXNlIGVudGVyIHRoZSBSb290IHBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="la_prompt_root_pass_verify" Module="In-Portal" Type="1">VmVyaWZ5IFJvb3QgUGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="la_prompt_RuleType" Module="In-Portal" Type="2">UnVsZSBUeXBl</PHRASE>
+ <PHRASE Label="la_prompt_runlink_validation" Module="In-Portal" Type="2">VmFsaWRhdGlvbiBQcm9ncmVzcw==</PHRASE>
+ <PHRASE Label="la_prompt_Search" Module="In-Portal" Type="1">U2VhcmNo</PHRASE>
+ <PHRASE Label="la_prompt_SearchType" Module="In-Portal" Type="1">U2VhcmNoIFR5cGU=</PHRASE>
+ <PHRASE Label="la_prompt_Select_Source" Module="In-Portal" Type="1">U2VsZWN0IFNvdXJjZSBMYW5ndWFnZQ==</PHRASE>
+ <PHRASE Label="la_prompt_sendmethod" Module="In-Portal" Type="1">U2VuZCBFbWFpbCBBcw==</PHRASE>
+ <PHRASE Label="la_prompt_SentOn" Module="In-Portal" Type="1">U2VudCBPbg==</PHRASE>
+ <PHRASE Label="la_prompt_Server" Module="In-Portal" Type="1">U2VydmVyIEhvc3RuYW1l</PHRASE>
+ <PHRASE Label="la_prompt_SessionKey" Module="In-Portal" Type="1">U0lE</PHRASE>
+ <PHRASE Label="la_prompt_session_cookie_name" Module="In-Portal" Type="1">U2Vzc2lvbiBDb29raWUgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_prompt_session_management" Module="In-Portal" Type="1">U2Vzc2lvbiBNYW5hZ2VtZW50IE1ldGhvZA==</PHRASE>
+ <PHRASE Label="la_prompt_session_timeout" Module="In-Portal" Type="1">U2Vzc2lvbiBJbmFjdGl2aXR5IFRpbWVvdXQgKHNlY29uZHMp</PHRASE>
+ <PHRASE Label="la_prompt_showgeneraltab" Module="In-Portal" Type="1">U2hvdyBvbiB0aGUgZ2VuZXJhbCB0YWI=</PHRASE>
+ <PHRASE Label="la_prompt_SimpleSearch" Module="In-Portal" Type="1">U2ltcGxlIFNlYXJjaA==</PHRASE>
+ <PHRASE Label="la_prompt_smtpheaders" Module="In-Portal" Type="1">QWRkaXRpb25hbCBNZXNzYWdlIEhlYWRlcnM=</PHRASE>
+ <PHRASE Label="la_prompt_smtp_pass" Module="In-Portal" Type="1">TWFpbCBTZXJ2ZXIgUGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="la_prompt_smtp_user" Module="In-Portal" Type="1">TWFpbCBTZXJ2ZXIgVXNlcm5hbWU=</PHRASE>
+ <PHRASE Label="la_prompt_socket_blocking_mode" Module="In-Portal" Type="1">VXNlIG5vbi1ibG9ja2luZyBzb2NrZXQgbW9kZQ==</PHRASE>
+ <PHRASE Label="la_prompt_sqlquery" Module="In-Portal" Type="1">U1FMIFF1ZXJ5Og==</PHRASE>
+ <PHRASE Label="la_prompt_sqlquery_error" Module="In-Portal" Type="1">QW4gU1FMIGVycm9yIGhhcyBvY2N1cmVk</PHRASE>
+ <PHRASE Label="la_prompt_sqlquery_header" Module="In-Portal" Type="1">UGVyZm9ybSBTUUwgUXVlcnk=</PHRASE>
+ <PHRASE Label="la_prompt_sqlquery_result" Module="In-Portal" Type="1">U1FMIFF1ZXJ5IFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="la_prompt_SqlType" Module="In-Portal" Type="1">U2VydmVyIFR5cGU=</PHRASE>
+ <PHRASE Label="la_prompt_StartDate" Module="In-Portal" Type="1">U3RhcnQgRGF0ZQ==</PHRASE>
+ <PHRASE Label="la_prompt_State" Module="In-Portal" Type="1">U3RhdGU=</PHRASE>
+ <PHRASE Label="la_prompt_Status" Module="In-Portal" Type="1">U3RhdHVz</PHRASE>
+ <PHRASE Label="la_Prompt_Step_One" Module="In-Portal" Type="1">U3RlcCBPbmU=</PHRASE>
+ <PHRASE Label="la_prompt_Street" Module="In-Portal" Type="1">U3RyZWV0</PHRASE>
+ <PHRASE Label="la_prompt_Stylesheet" Module="In-Portal" Type="1">U3R5bGVzaGVldA==</PHRASE>
+ <PHRASE Label="la_prompt_Subject" Module="In-Portal" Type="1">U3ViamVjdA==</PHRASE>
+ <PHRASE Label="la_prompt_SubSearch" Module="In-Portal" Type="1">U3ViIFNlYXJjaA==</PHRASE>
+ <PHRASE Label="la_prompt_syscache_enable" Module="In-Portal" Type="1">RW5hYmxlIFRhZyBDYWNoaW5n</PHRASE>
+ <PHRASE Label="la_prompt_SystemFileSize" Module="In-Portal" Type="1">VG90YWwgU2l6ZSBvZiBTeXN0ZW0gRmlsZXM=</PHRASE>
+ <PHRASE Label="la_Prompt_SystemPermissions" Module="In-Portal" Type="1">U3lzdGVtIHByZW1pc3Npb25z</PHRASE>
+ <PHRASE Label="la_prompt_TablesCount" Module="In-Portal" Type="1">TnVtYmVyIG9mIERhdGFiYXNlIFRhYmxlcw==</PHRASE>
+ <PHRASE Label="la_prompt_Template" Module="In-Portal" Type="1">VGVtcGxhdGU=</PHRASE>
+ <PHRASE Label="la_prompt_text_version" Module="In-Portal" Type="1">VGV4dCBWZXJzaW9u</PHRASE>
+ <PHRASE Label="la_prompt_Theme" Module="In-Portal" Type="1">VGhlbWU=</PHRASE>
+ <PHRASE Label="la_prompt_ThemeCount" Module="In-Portal" Type="1">TnVtYmVyIG9mIFRoZW1lcw==</PHRASE>
+ <PHRASE Label="la_prompt_ThemeId" Module="In-Portal" Type="1">VGhlbWUgSWQ=</PHRASE>
+ <PHRASE Label="la_prompt_thousand" Module="In-Portal" Type="2">VGhvdXNhbmRzIFNlcGFyYXRvcg==</PHRASE>
+ <PHRASE Label="la_prompt_ThumbURL" Module="In-Portal" Type="1">UmVtb3RlIFVSTA==</PHRASE>
+ <PHRASE Label="la_prompt_TimeFormat" Module="In-Portal" Type="1">KGhoOm1tOnNzKQ==</PHRASE>
+ <PHRASE Label="la_Prompt_Title" Module="In-Portal" Type="1">VGl0bGU=</PHRASE>
+ <PHRASE Label="la_prompt_To" Module="In-Portal" Type="1">VG8=</PHRASE>
+ <PHRASE Label="la_prompt_TopicAverageRating" Module="In-Portal" Type="1">VG9waWNzIEF2ZXJhZ2UgUmF0aW5n</PHRASE>
+ <PHRASE Label="la_prompt_TopicId" Module="In-Portal" Type="1">VG9waWMgSUQ=</PHRASE>
+ <PHRASE Label="la_prompt_TopicLocked" Module="In-Portal" Type="1">VG9waWMgTG9ja2Vk</PHRASE>
+ <PHRASE Label="la_prompt_TopicReviews" Module="In-Portal" Type="1">VG90YWwgVG9waWMgUmV2aWV3cw==</PHRASE>
+ <PHRASE Label="la_prompt_TopicsActive" Module="In-Portal" Type="1">QWN0aXZlIFRvcGljcw==</PHRASE>
+ <PHRASE Label="la_prompt_TopicsDisabled" Module="In-Portal" Type="1">RGlzYWJsZWQgVG9waWNz</PHRASE>
+ <PHRASE Label="la_prompt_TopicsPending" Module="In-Portal" Type="1">UGVuZGluZyBUb3BpY3M=</PHRASE>
+ <PHRASE Label="la_prompt_TopicsTotal" Module="In-Portal" Type="1">VG90YWwgVG9waWNz</PHRASE>
+ <PHRASE Label="la_prompt_TopicsUsers" Module="In-Portal" Type="1">VG90YWwgVXNlcnMgd2l0aCBUb3BpY3M=</PHRASE>
+ <PHRASE Label="la_prompt_TotalCategories" Module="In-Portal" Type="1">VG90YWwgQ2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_prompt_TotalLinks" Module="In-Portal" Type="1">VG90YWwgTGlua3M=</PHRASE>
+ <PHRASE Label="la_prompt_TotalUserGroups" Module="In-Portal" Type="1">VG90YWwgVXNlciBHcm91cHM=</PHRASE>
+ <PHRASE Label="la_prompt_Type" Module="In-Portal" Type="1">VHlwZQ==</PHRASE>
+ <PHRASE Label="la_prompt_updating" Module="In-Portal" Type="1">VXBkYXRpbmc=</PHRASE>
+ <PHRASE Label="la_prompt_upload" Module="In-Portal" Type="1">VXBsb2FkIGltYWdlIGZyb20gbG9jYWwgUEM=</PHRASE>
+ <PHRASE Label="la_prompt_URL" Module="In-Portal" Type="1">VVJM</PHRASE>
+ <PHRASE Label="la_prompt_UserCount" Module="In-Portal" Type="1">VXNlciBDb3VudA==</PHRASE>
+ <PHRASE Label="la_prompt_Usermame" Module="In-Portal" Type="1">VXNlcm5hbWU=</PHRASE>
+ <PHRASE Label="la_prompt_Username" Module="In-Portal" Type="1">VXNlcm5hbWU=</PHRASE>
+ <PHRASE Label="la_prompt_UsersActive" Module="In-Portal" Type="1">QWN0aXZlIFVzZXJz</PHRASE>
+ <PHRASE Label="la_prompt_UsersDisabled" Module="In-Portal" Type="1">RGlzYWJsZWQgVXNlcnM=</PHRASE>
+ <PHRASE Label="la_prompt_UsersPending" Module="In-Portal" Type="1">UGVuZGluZyBVc2Vycw==</PHRASE>
+ <PHRASE Label="la_prompt_UsersUniqueCountries" Module="In-Portal" Type="1">TnVtYmVyIG9mIFVuaXF1ZSBDb3VudHJpZXMgb2YgVXNlcnM=</PHRASE>
+ <PHRASE Label="la_prompt_UsersUniqueStates" Module="In-Portal" Type="1">TnVtYmVyIG9mIFVuaXF1ZSBTdGF0ZXMgb2YgVXNlcnM=</PHRASE>
+ <PHRASE Label="la_prompt_Value" Module="In-Portal" Type="1">VmFsdWU=</PHRASE>
+ <PHRASE Label="la_prompt_valuelist" Module="In-Portal" Type="1">TGlzdCBvZiBWYWx1ZXM=</PHRASE>
+ <PHRASE Label="la_prompt_Views" Module="In-Portal" Type="1">Vmlld3M=</PHRASE>
+ <PHRASE Label="la_prompt_Visible" Module="In-Portal" Type="1">VmlzaWJsZQ==</PHRASE>
+ <PHRASE Label="la_prompt_VoteLimits" Module="In-Portal" Type="1">KE1pbmltdW0gMSk=</PHRASE>
+ <PHRASE Label="la_prompt_Votes" Module="In-Portal" Type="1">Vm90ZXM=</PHRASE>
+ <PHRASE Label="la_Prompt_Warning" Module="In-Portal" Type="1">V2FybmluZyE=</PHRASE>
+ <PHRASE Label="la_prompt_weight" Module="In-Portal" Type="1">V2VpZ2h0</PHRASE>
+ <PHRASE Label="la_prompt_Zip" Module="In-Portal" Type="1">Wmlw</PHRASE>
+ <PHRASE Label="la_promt_ReferrerCheck" Module="In-Portal" Type="1">U2Vzc2lvbiBSZWZlcnJlciBDaGVja2luZw==</PHRASE>
+ <PHRASE Label="la_Quotes" Module="In-Portal" Type="1">U2luZ2xlLXF1b3Rl</PHRASE>
+ <PHRASE Label="la_Rating" Module="In-Portal" Type="1">bGFfUmF0aW5n</PHRASE>
+ <PHRASE Label="la_rating_alreadyvoted" Module="In-Portal" Type="1">QWxyZWFkeSB2b3RlZA==</PHRASE>
+ <PHRASE Label="la_Reciprocal" Module="In-Portal" Type="1">UmVjaXByb2NhbA==</PHRASE>
+ <PHRASE Label="la_registration_captcha" Module="In-Portal" Type="1">VXNlIENhcHRjaGEgY29kZSBvbiBSZWdpc3RyYXRpb24=</PHRASE>
+ <PHRASE Label="la_RemoveFrom" Module="In-Portal" Type="1">UmVtb3ZlIEZyb20=</PHRASE>
+ <PHRASE Label="la_RequiredWarning" Module="In-Portal" Type="1">Tm90IGFsbCByZXF1aXJlZCBmaWVsZHMgYXJlIGZpbGxlZC4gUGxlYXNlIGZpbGwgdGhlbSBmaXJzdC4=</PHRASE>
+ <PHRASE Label="la_restore_access_denied" Module="In-Portal" Type="1">QWNjZXNzIGRlbmllZA==</PHRASE>
+ <PHRASE Label="la_restore_file_error" Module="In-Portal" Type="1">RmlsZSBlcnJvcg==</PHRASE>
+ <PHRASE Label="la_restore_file_not_found" Module="In-Portal" Type="1">RmlsZSBub3QgZm91bmQ=</PHRASE>
+ <PHRASE Label="la_restore_read_error" Module="In-Portal" Type="1">VW5hYmxlIHRvIHJlYWQgZnJvbSBmaWxl</PHRASE>
+ <PHRASE Label="la_restore_unknown_error" Module="In-Portal" Type="1">QW4gdW5kZWZpbmVkIGVycm9yIGhhcyBvY2N1cmVk</PHRASE>
+ <PHRASE Label="la_reviewer" Module="In-Portal" Type="1">UmV2aWV3ZXI=</PHRASE>
+ <PHRASE Label="la_review_added" Module="In-Portal" Type="1">UmV2aWV3IGFkZGVkIHN1Y2Nlc3NmdWxseQ==</PHRASE>
+ <PHRASE Label="la_review_alreadyreviewed" Module="In-Portal" Type="1">VGhpcyBpdGVtIGhhcyBhbHJlYWR5IGJlZW4gcmV2aWV3ZWQ=</PHRASE>
+ <PHRASE Label="la_review_error" Module="In-Portal" Type="1">RXJyb3IgYWRkaW5nIHJldmlldw==</PHRASE>
+ <PHRASE Label="la_review_perpage_prompt" Module="In-Portal" Type="1">UmV2aWV3cyBQZXIgUGFnZQ==</PHRASE>
+ <PHRASE Label="la_review_perpage_short_prompt" Module="In-Portal" Type="1">UmV2aWV3cyBQZXIgUGFnZSAoU2hvcnRsaXN0KQ==</PHRASE>
+ <PHRASE Label="la_rootpass_verify_error" Module="In-Portal" Type="1">RXJyb3IgdmVyaWZ5aW5nIHBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="la_running_query" Module="In-Portal" Type="1">UnVubmluZyBRdWVyeQ==</PHRASE>
+ <PHRASE Label="la_SampleText" Module="In-Portal" Type="1">U2FtcGxlIFRleHQ=</PHRASE>
+ <PHRASE Label="la_Save" Module="In-Portal" Type="1">U2F2ZQ==</PHRASE>
+ <PHRASE Label="la_Search" Module="In-Portal" Type="1">U2VhcmNo</PHRASE>
+ <PHRASE Label="la_SearchLabel" Module="In-Portal" Type="1">U2VhcmNo</PHRASE>
+ <PHRASE Label="la_SearchLabel_Categories" Module="In-Portal" Type="1">U2VhcmNoIENhdGVnb3JpZXM=</PHRASE>
+ <PHRASE Label="la_SearchLabel_Links" Module="In-Portal" Type="1">U2VhcmNoIExpbmtz</PHRASE>
+ <PHRASE Label="la_SearchLabel_News" Module="In-Portal" Type="1">U2VhcmNoIEFydGljbGVz</PHRASE>
+ <PHRASE Label="la_SearchLabel_Topics" Module="In-Portal" Type="1">U2VhcmNoIFRvcGljcw==</PHRASE>
+ <PHRASE Label="la_SearchMenu_Categories" Module="In-Portal" Type="1">Q2F0ZWdvcmllczE=</PHRASE>
+ <PHRASE Label="la_SearchMenu_Clear" Module="In-Portal" Type="1">Q2xlYXIgU2VhcmNo</PHRASE>
+ <PHRASE Label="la_SearchMenu_New" Module="In-Portal" Type="1">TmV3IFNlYXJjaA==</PHRASE>
+ <PHRASE Label="la_Sectionheader_MetaInformation" Module="In-Portal" Type="1">TUVUQSBJbmZvcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="la_section_Category" Module="In-Portal" Type="1">Q2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_section_Counters" Module="In-Portal" Type="1">Q291bnRlcnM=</PHRASE>
+ <PHRASE Label="la_section_CustomFields" Module="In-Portal" Type="1">Q3VzdG9tIEZpZWxkcw==</PHRASE>
+ <PHRASE Label="la_section_FullSizeImage" Module="In-Portal" Type="1">RnVsbCBTaXplIEltYWdl</PHRASE>
+ <PHRASE Label="la_section_General" Module="In-Portal" Type="1">R2VuZXJhbA==</PHRASE>
+ <PHRASE Label="la_section_Image" Module="In-Portal" Type="1">SW1hZ2U=</PHRASE>
+ <PHRASE Label="la_section_ImageSettings" Module="In-Portal" Type="1">SW1hZ2UgU2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_section_Items" Module="In-Portal" Type="1">VXNlciBJdGVtcw==</PHRASE>
+ <PHRASE Label="la_section_Message" Module="In-Portal" Type="1">TWVzc2FnZQ==</PHRASE>
+ <PHRASE Label="la_section_overview" Module="In-Portal" Type="1">U2VjdGlvbiBPdmVydmlldw==</PHRASE>
+ <PHRASE Label="la_section_Properties" Module="In-Portal" Type="1">UHJvcGVydGllcw==</PHRASE>
+ <PHRASE Label="la_section_QuickLinks" Module="In-Portal" Type="1">UXVpY2sgTGlua3M=</PHRASE>
+ <PHRASE Label="la_section_Relation" Module="In-Portal" Type="1">UmVsYXRpb24=</PHRASE>
+ <PHRASE Label="la_section_Templates" Module="In-Portal" Type="1">VGVtcGxhdGVz</PHRASE>
+ <PHRASE Label="la_section_ThumbnailImage" Module="In-Portal" Type="1">VGh1bWJuYWlsIEltYWdl</PHRASE>
+ <PHRASE Label="la_section_Translation" Module="In-Portal" Type="1">VHJhbnNsYXRpb24=</PHRASE>
+ <PHRASE Label="la_section_UsersSearch" Module="In-Portal" Type="1">U2VhcmNoIFVzZXJz</PHRASE>
+ <PHRASE Label="la_SelectColumns" Module="In-Portal" Type="1">U2VsZWN0IENvbHVtbnM=</PHRASE>
+ <PHRASE Label="la_selecting_categories" Module="In-Portal" Type="1">U2VsZWN0aW5nIENhdGVnb3JpZXM=</PHRASE>
+ <PHRASE Label="la_Selection_Empty" Module="In-Portal" Type="1">RW1wdHkgc2VsZWN0aW9u</PHRASE>
+ <PHRASE Label="la_semicolon" Module="In-Portal" Type="1">U2VtaWNvbG9u</PHRASE>
+ <PHRASE Label="la_SeparatedCategoryPath" Module="In-Portal" Type="1">T25lIGZpZWxkIGZvciBlYWNoIGNhdGVnb3J5IGxldmVs</PHRASE>
+ <PHRASE Label="la_shorttooltip_clone" Module="In-Portal" Type="1">Q2xvbmU=</PHRASE>
+ <PHRASE Label="LA_SHORTTOOLTIP_EDIT" Module="In-Portal" Type="1">RWRpdA==</PHRASE>
+ <PHRASE Label="LA_SHORTTOOLTIP_EXPORT" Module="In-Portal" Type="1">RXhwb3J0</PHRASE>
+ <PHRASE Label="LA_SHORTTOOLTIP_GOUP" Module="In-Portal" Type="1">R28gVXA=</PHRASE>
+ <PHRASE Label="LA_SHORTTOOLTIP_IMPORT" Module="In-Portal" Type="1">SW1wb3J0</PHRASE>
+ <PHRASE Label="la_shorttooltip_movedown" Module="In-Portal" Type="1">TW92ZSBEb3du</PHRASE>
+ <PHRASE Label="la_shorttooltip_moveup" Module="In-Portal" Type="1">TW92ZSBVcA==</PHRASE>
+ <PHRASE Label="LA_SHORTTOOLTIP_REBUILD" Module="In-Portal" Type="1">UmVidWlsZA==</PHRASE>
+ <PHRASE Label="la_shorttooltip_rescanthemes" Module="In-Portal" Type="1">UmVzY2FuIFRoZW1lcw==</PHRASE>
+ <PHRASE Label="LA_SHORTTOOLTIP_SETPRIMARY" Module="In-Portal" Type="1">U2V0IFByaW1hcnk=</PHRASE>
+ <PHRASE Label="la_Showing_Logs" Module="In-Portal" Type="1">U2hvd2luZyBMb2dz</PHRASE>
+ <PHRASE Label="la_Showing_Stats" Module="In-Portal" Type="1">U2hvd2luZyBTdGF0aXN0aWNz</PHRASE>
+ <PHRASE Label="la_Show_EmailLog" Module="In-Portal" Type="1">U2hvdyBFbWFpbCBMb2c=</PHRASE>
+ <PHRASE Label="la_Show_Log" Module="In-Portal" Type="1">U2hvd2luZyBMb2dz</PHRASE>
+ <PHRASE Label="la_sortfield2_prompt" Module="In-Portal" Type="1">QW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_space" Module="In-Portal" Type="1">U3BhY2U=</PHRASE>
+ <PHRASE Label="la_state_AB" Module="In-Portal" Type="1">QWxiZXJ0YQ==</PHRASE>
+ <PHRASE Label="la_state_AK" Module="In-Portal" Type="1">QWxhc2th</PHRASE>
+ <PHRASE Label="la_state_AL" Module="In-Portal" Type="1">QWxhYmFtYQ==</PHRASE>
+ <PHRASE Label="la_state_AR" Module="In-Portal" Type="1">QXJrYW5zYXM=</PHRASE>
+ <PHRASE Label="la_state_AZ" Module="In-Portal" Type="1">QXJpem9uYQ==</PHRASE>
+ <PHRASE Label="la_state_BC" Module="In-Portal" Type="1">QnJpdGlzaCBDb2x1bWJpYQ==</PHRASE>
+ <PHRASE Label="la_state_CA" Module="In-Portal" Type="1">Q2FsaWZvcm5pYQ==</PHRASE>
+ <PHRASE Label="la_state_CO" Module="In-Portal" Type="1">Q29sb3JhZG8=</PHRASE>
+ <PHRASE Label="la_state_CT" Module="In-Portal" Type="1">Q29ubmVjdGljdXQ=</PHRASE>
+ <PHRASE Label="la_state_DC" Module="In-Portal" Type="1">RGlzdHJpY3Qgb2YgQ29sdW1iaWE=</PHRASE>
+ <PHRASE Label="la_state_DE" Module="In-Portal" Type="1">RGVsYXdhcmU=</PHRASE>
+ <PHRASE Label="la_state_FL" Module="In-Portal" Type="1">RmxvcmlkYQ==</PHRASE>
+ <PHRASE Label="la_state_GA" Module="In-Portal" Type="1">R2VvcmdpYQ==</PHRASE>
+ <PHRASE Label="la_state_HI" Module="In-Portal" Type="1">SGF3YWlp</PHRASE>
+ <PHRASE Label="la_state_IA" Module="In-Portal" Type="1">SW93YQ==</PHRASE>
+ <PHRASE Label="la_state_ID" Module="In-Portal" Type="1">SWRhaG8=</PHRASE>
+ <PHRASE Label="la_state_IL" Module="In-Portal" Type="1">SWxsaW5vaXM=</PHRASE>
+ <PHRASE Label="la_state_IN" Module="In-Portal" Type="1">SW5kaWFuYQ==</PHRASE>
+ <PHRASE Label="la_state_KS" Module="In-Portal" Type="1">S2Fuc2Fz</PHRASE>
+ <PHRASE Label="la_state_KY" Module="In-Portal" Type="1">S2VudHVja3k=</PHRASE>
+ <PHRASE Label="la_state_LA" Module="In-Portal" Type="1">TG91aXNpYW5h</PHRASE>
+ <PHRASE Label="la_state_MA" Module="In-Portal" Type="1">TWFzc2FjaHVzZXR0cw==</PHRASE>
+ <PHRASE Label="la_state_MB" Module="In-Portal" Type="1">TWFuaXRvYmE=</PHRASE>
+ <PHRASE Label="la_state_MD" Module="In-Portal" Type="1">TWFyeWxhbmQ=</PHRASE>
+ <PHRASE Label="la_state_ME" Module="In-Portal" Type="1">TWFpbmU=</PHRASE>
+ <PHRASE Label="la_state_MI" Module="In-Portal" Type="1">TWljaGlnYW4=</PHRASE>
+ <PHRASE Label="la_state_MN" Module="In-Portal" Type="1">TWlubmVzb3Rh</PHRASE>
+ <PHRASE Label="la_state_MO" Module="In-Portal" Type="1">TWlzc291cmk=</PHRASE>
+ <PHRASE Label="la_state_MS" Module="In-Portal" Type="1">TWlzc2lzc2lwcGk=</PHRASE>
+ <PHRASE Label="la_state_MT" Module="In-Portal" Type="1">TW9udGFuYQ==</PHRASE>
+ <PHRASE Label="la_state_NB" Module="In-Portal" Type="1">TmV3IEJydW5zd2ljaw==</PHRASE>
+ <PHRASE Label="la_state_NC" Module="In-Portal" Type="1">Tm9ydGggQ2Fyb2xpbmE=</PHRASE>
+ <PHRASE Label="la_state_ND" Module="In-Portal" Type="1">Tm9ydGggRGFrb3Rh</PHRASE>
+ <PHRASE Label="la_state_NE" Module="In-Portal" Type="1">TmVicmFza2E=</PHRASE>
+ <PHRASE Label="la_state_NH" Module="In-Portal" Type="1">TmV3IEhhbXBzaGlyZQ==</PHRASE>
+ <PHRASE Label="la_state_NJ" Module="In-Portal" Type="1">TmV3IEplcnNleQ==</PHRASE>
+ <PHRASE Label="la_state_NL" Module="In-Portal" Type="1">TmV3Zm91bmRsYW5kIGFuZCBMYWJyYWRvcg==</PHRASE>
+ <PHRASE Label="la_state_NM" Module="In-Portal" Type="1">TmV3IE1leGljbw==</PHRASE>
+ <PHRASE Label="la_state_NS" Module="In-Portal" Type="1">Tm92YSBTY290aWE=</PHRASE>
+ <PHRASE Label="la_state_NT" Module="In-Portal" Type="1">Tm9ydGh3ZXN0IFRlcnJpdG9yaWVz</PHRASE>
+ <PHRASE Label="la_state_NU" Module="In-Portal" Type="1">TnVuYXZ1dA==</PHRASE>
+ <PHRASE Label="la_state_NV" Module="In-Portal" Type="1">TmV2YWRh</PHRASE>
+ <PHRASE Label="la_state_NY" Module="In-Portal" Type="1">TmV3IFlvcms=</PHRASE>
+ <PHRASE Label="la_state_OH" Module="In-Portal" Type="1">T2hpbw==</PHRASE>
+ <PHRASE Label="la_state_OK" Module="In-Portal" Type="1">T2tsYWhvbWE=</PHRASE>
+ <PHRASE Label="la_state_ON" Module="In-Portal" Type="1">T250YXJpbw==</PHRASE>
+ <PHRASE Label="la_state_OR" Module="In-Portal" Type="1">T3JlZ29u</PHRASE>
+ <PHRASE Label="la_state_PA" Module="In-Portal" Type="1">UGVubnN5bHZhbmlh</PHRASE>
+ <PHRASE Label="la_state_PE" Module="In-Portal" Type="1">UHJpbmNlIEVkd2FyZCBJc2xhbmQ=</PHRASE>
+ <PHRASE Label="la_state_PR" Module="In-Portal" Type="1">UHVlcnRvIFJpY28=</PHRASE>
+ <PHRASE Label="la_state_QC" Module="In-Portal" Type="1">UXVlYmVj</PHRASE>
+ <PHRASE Label="la_state_RI" Module="In-Portal" Type="1">UmhvZGUgSXNsYW5k</PHRASE>
+ <PHRASE Label="la_state_SC" Module="In-Portal" Type="1">U291dGggQ2Fyb2xpbmE=</PHRASE>
+ <PHRASE Label="la_state_SD" Module="In-Portal" Type="1">U291dGggRGFrb3Rh</PHRASE>
+ <PHRASE Label="la_state_SK" Module="In-Portal" Type="1">U2Fza2F0Y2hld2Fu</PHRASE>
+ <PHRASE Label="la_state_TN" Module="In-Portal" Type="1">VGVubmVzc2Vl</PHRASE>
+ <PHRASE Label="la_state_TX" Module="In-Portal" Type="1">VGV4YXM=</PHRASE>
+ <PHRASE Label="la_state_UT" Module="In-Portal" Type="1">VXRhaA==</PHRASE>
+ <PHRASE Label="la_state_VA" Module="In-Portal" Type="1">VmlyZ2luaWE=</PHRASE>
+ <PHRASE Label="la_state_VT" Module="In-Portal" Type="1">VmVybW9udA==</PHRASE>
+ <PHRASE Label="la_state_WA" Module="In-Portal" Type="1">V2FzaGluZ3Rvbg==</PHRASE>
+ <PHRASE Label="la_state_WI" Module="In-Portal" Type="1">V2lzY29uc2lu</PHRASE>
+ <PHRASE Label="la_state_WV" Module="In-Portal" Type="1">V2VzdCBWaXJnaW5pYQ==</PHRASE>
+ <PHRASE Label="la_state_WY" Module="In-Portal" Type="1">V3lvbWluZw==</PHRASE>
+ <PHRASE Label="la_state_YT" Module="In-Portal" Type="1">WXVrb24=</PHRASE>
+ <PHRASE Label="la_step" Module="In-Portal" Type="1">U3RlcA==</PHRASE>
+ <PHRASE Label="la_StyleDefinition" Module="In-Portal" Type="1">RGVmaW5pdGlvbg==</PHRASE>
+ <PHRASE Label="la_StylePreview" Module="In-Portal" Type="1">UHJldmlldw==</PHRASE>
+ <PHRASE Label="la_sunday" Module="In-Portal" Type="1">U3VuZGF5</PHRASE>
+ <PHRASE Label="la_tab" Module="In-Portal" Type="1">VGFi</PHRASE>
+ <PHRASE Label="la_tab_AdminUI" Module="In-Portal" Type="1">QWRtaW5pc3RyYXRpb24gUGFuZWwgVUk=</PHRASE>
+ <PHRASE Label="la_tab_AdvancedView" Module="In-Portal" Type="1">QWR2YW5jZWQgVmlldw==</PHRASE>
+ <PHRASE Label="la_tab_Backup" Module="In-Portal" Type="1">QmFja3Vw</PHRASE>
+ <PHRASE Label="la_tab_BanList" Module="In-Portal" Type="1">VXNlciBCYW4gTGlzdA==</PHRASE>
+ <PHRASE Label="la_tab_BaseStyles" Module="In-Portal" Type="1">QmFzZSBTdHlsZXM=</PHRASE>
+ <PHRASE Label="la_tab_BlockStyles" Module="In-Portal" Type="1">QmxvY2sgU3R5bGVz</PHRASE>
+ <PHRASE Label="la_tab_Browse" Module="In-Portal" Type="1">Q2F0YWxvZw==</PHRASE>
+ <PHRASE Label="la_tab_Categories" Module="In-Portal" Type="1">Q2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_tab_Category_RelationSelect" Module="In-Portal" Type="1">U2VsZWN0IEl0ZW0=</PHRASE>
+ <PHRASE Label="la_tab_Category_Select" Module="In-Portal" Type="1">Q2F0ZWdvcnkgU2VsZWN0</PHRASE>
+ <PHRASE Label="la_tab_Censorship" Module="In-Portal" Type="1">Q2Vuc29yc2hpcA==</PHRASE>
+ <PHRASE Label="la_tab_Community" Module="In-Portal" Type="1">Q29tbXVuaXR5</PHRASE>
+ <PHRASE Label="la_tab_ConfigCategories" Module="In-Portal" Type="1">R2VuZXJhbCBTZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_tab_ConfigCensorship" Module="In-Portal" Type="1">Q2Vuc29yc2hpcA==</PHRASE>
+ <PHRASE Label="la_tab_ConfigCustom" Module="In-Portal" Type="1">Q3VzdG9tIEZpZWxkcw==</PHRASE>
+ <PHRASE Label="la_tab_ConfigE-mail" Module="In-Portal" Type="1">RS1tYWlsIFNldHRpbmdz</PHRASE>
+ <PHRASE Label="la_tab_ConfigGeneral" Module="In-Portal" Type="1">R2VuZXJhbCBTZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_tab_ConfigOutput" Module="In-Portal" Type="1">T3V0cHV0IFNldHRpbmdz</PHRASE>
+ <PHRASE Label="la_tab_ConfigSearch" Module="In-Portal" Type="1">U2VhcmNoIFNldHRpbmdz</PHRASE>
+ <PHRASE Label="la_tab_ConfigSettings" Module="In-Portal" Type="1">R2VuZXJhbCBTZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_tab_ConfigSmileys" Module="In-Portal" Type="1">U21pbGV5cw==</PHRASE>
+ <PHRASE Label="la_tab_ConfigUsers" Module="In-Portal" Type="1">R2VuZXJhbCBTZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_tab_Custom" Module="In-Portal" Type="1">Q3VzdG9t</PHRASE>
+ <PHRASE Label="la_tab_Editing_Review" Module="In-Portal" Type="1">RWRpdGluZyBSZXZpZXc=</PHRASE>
+ <PHRASE Label="la_tab_EmailEvents" Module="In-Portal" Type="1">RW1haWwgRXZlbnRz</PHRASE>
+ <PHRASE Label="la_tab_EmailLog" Module="In-Portal" Type="1">RW1haWwgTG9n</PHRASE>
+ <PHRASE Label="la_tab_EmailMessage" Module="In-Portal" Type="1">RW1haWwgTWVzc2FnZQ==</PHRASE>
+ <PHRASE Label="la_tab_ExportData" Module="In-Portal" Type="1">RXhwb3J0IERhdGE=</PHRASE>
+ <PHRASE Label="la_tab_ExportLang" Module="In-Portal" Type="1">RXhwb3J0IExhbmd1YWdlIFBhY2s=</PHRASE>
+ <PHRASE Label="la_tab_files" Module="In-Portal" Type="1">RmlsZXM=</PHRASE>
+ <PHRASE Label="la_tab_General" Module="In-Portal" Type="1">R2VuZXJhbA==</PHRASE>
+ <PHRASE Label="la_tab_GeneralSettings" Module="In-Portal" Type="1">R2VuZXJhbCBTZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_tab_Group" Module="In-Portal" Type="1">R3JvdXA=</PHRASE>
+ <PHRASE Label="la_tab_Groups" Module="In-Portal" Type="1">R3JvdXBz</PHRASE>
+ <PHRASE Label="la_tab_GroupSelect" Module="In-Portal" Type="1">U2VsZWN0IEdyb3Vw</PHRASE>
+ <PHRASE Label="la_tab_Help" Module="In-Portal" Type="1">SGVscA==</PHRASE>
+ <PHRASE Label="la_tab_Images" Module="In-Portal" Type="1">SW1hZ2Vz</PHRASE>
+ <PHRASE Label="la_tab_ImportData" Module="In-Portal" Type="1">SW1wb3J0IERhdGE=</PHRASE>
+ <PHRASE Label="la_tab_ImportLang" Module="In-Portal" Type="1">SW1wb3J0IExhbmd1YWdlIFBhY2s=</PHRASE>
+ <PHRASE Label="la_tab_inlinkimport" Module="In-Portal" Type="1">SW4tbGluayBpbXBvcnQ=</PHRASE>
+ <PHRASE Label="la_tab_Install" Module="In-Portal" Type="1">SW5zdGFsbA==</PHRASE>
+ <PHRASE Label="la_tab_ItemList" Module="In-Portal" Type="1">SXRlbSBMaXN0</PHRASE>
+ <PHRASE Label="la_tab_Items" Module="In-Portal" Type="1">SXRlbXM=</PHRASE>
+ <PHRASE Label="la_tab_label" Module="In-Portal" Type="1">TGFiZWw=</PHRASE>
+ <PHRASE Label="la_tab_Labels" Module="In-Portal" Type="1">TGFiZWxz</PHRASE>
+ <PHRASE Label="la_tab_LinkValidation" Module="In-Portal" Type="2">TGluayBWYWxpZGF0aW9u</PHRASE>
+ <PHRASE Label="la_tab_Mail_List" Module="In-Portal" Type="1">TWFpbCBMaXN0</PHRASE>
+ <PHRASE Label="la_tab_Message" Module="In-Portal" Type="1">TWVzc2FnZQ==</PHRASE>
+ <PHRASE Label="la_tab_MissingLabels" Module="In-Portal" Type="1">TWlzc2luZyBMYWJlbHM=</PHRASE>
+ <PHRASE Label="la_tab_modules" Module="In-Portal" Type="1">TW9kdWxlcw==</PHRASE>
+ <PHRASE Label="la_tab_ModulesManagement" Module="In-Portal" Type="1">TW9kdWxlcyBNYW5hZ2VtZW50</PHRASE>
+ <PHRASE Label="la_tab_ModulesSettings" Module="In-Portal" Type="1">TW9kdWxlcyAmIFNldHRpbmdz</PHRASE>
+ <PHRASE Label="la_tab_Overview" Module="In-Portal" Type="1">T3ZlcnZpZXc=</PHRASE>
+ <PHRASE Label="la_tab_PackageContent" Module="In-Portal" Type="1">UGFja2FnZSBDb250ZW50</PHRASE>
+ <PHRASE Label="la_tab_Permissions" Module="In-Portal" Type="1">UGVybWlzc2lvbnM=</PHRASE>
+ <PHRASE Label="la_tab_phpbbimport" Module="In-Portal" Type="1">cGhwQkIgSW1wb3J0</PHRASE>
+ <PHRASE Label="la_tab_Properties" Module="In-Portal" Type="1">UHJvcGVydGllcw==</PHRASE>
+ <PHRASE Label="la_tab_QueryDB" Module="In-Portal" Type="1">UXVlcnkgRGF0YWJhc2U=</PHRASE>
+ <PHRASE Label="la_tab_Regional" Module="In-Portal" Type="1">UmVnaW9uYWw=</PHRASE>
+ <PHRASE Label="la_tab_Related_Searches" Module="In-Portal" Type="1">UmVsYXRlZCBTZWFyY2hlcw==</PHRASE>
+ <PHRASE Label="la_tab_Relations" Module="In-Portal" Type="1">UmVsYXRpb25z</PHRASE>
+ <PHRASE Label="la_tab_Reports" Module="In-Portal" Type="1">U3VtbWFyeSAmIExvZ3M=</PHRASE>
+ <PHRASE Label="la_tab_Restore" Module="In-Portal" Type="1">UmVzdG9yZQ==</PHRASE>
+ <PHRASE Label="la_tab_Review" Module="In-Portal" Type="1">UmV2aWV3</PHRASE>
+ <PHRASE Label="la_tab_Reviews" Module="In-Portal" Type="1">UmV2aWV3cw==</PHRASE>
+ <PHRASE Label="la_tab_Rule" Module="In-Portal" Type="2">UnVsZSBQcm9wZXJ0aWVz</PHRASE>
+ <PHRASE Label="la_Tab_Search" Module="In-Portal" Type="1">U2VhcmNo</PHRASE>
+ <PHRASE Label="la_tab_SearchLog" Module="In-Portal" Type="1">U2VhcmNoIExvZw==</PHRASE>
+ <PHRASE Label="la_tab_Search_Groups" Module="In-Portal" Type="1">U2VhcmNoIEdyb3Vwcw==</PHRASE>
+ <PHRASE Label="la_tab_Search_Users" Module="In-Portal" Type="1">U2VhcmNoIFVzZXJz</PHRASE>
+ <PHRASE Label="la_tab_SendMail" Module="In-Portal" Type="1">U2VuZCBlLW1haWw=</PHRASE>
+ <PHRASE Label="la_tab_ServerInfo" Module="In-Portal" Type="1">U2VydmVyIEluZm9ybWF0aW9u</PHRASE>
+ <PHRASE Label="la_tab_service" Module="In-Portal" Type="1">U2VydmljZQ==</PHRASE>
+ <PHRASE Label="la_tab_SessionLog" Module="In-Portal" Type="1">U2Vzc2lvbiBMb2c=</PHRASE>
+ <PHRASE Label="la_tab_Settings" Module="In-Portal" Type="1">R2VuZXJhbCBTZXR0aW5ncw==</PHRASE>
+ <PHRASE Label="la_tab_Site_Structure" Module="In-Portal" Type="1">U3RydWN0dXJlICYgRGF0YQ==</PHRASE>
+ <PHRASE Label="la_tab_Stats" Module="In-Portal" Type="1">U3RhdGlzdGljcw==</PHRASE>
+ <PHRASE Label="la_tab_Stylesheets" Module="In-Portal" Type="1">U3R5bGVzaGVldHM=</PHRASE>
+ <PHRASE Label="la_tab_Summary" Module="In-Portal" Type="1">U3VtbWFyeQ==</PHRASE>
+ <PHRASE Label="la_tab_Sys_Config" Module="In-Portal" Type="1">Q29uZmlndXJhdGlvbg==</PHRASE>
+ <PHRASE Label="la_tab_taglibrary" Module="In-Portal" Type="1">VGFnIGxpYnJhcnk=</PHRASE>
+ <PHRASE Label="la_tab_Template" Module="In-Portal" Type="1">VGVtcGxhdGU=</PHRASE>
+ <PHRASE Label="la_tab_Templates" Module="In-Portal" Type="1">VGVtcGxhdGVz</PHRASE>
+ <PHRASE Label="la_tab_Themes" Module="In-Portal" Type="1">VGhlbWVz</PHRASE>
+ <PHRASE Label="la_tab_Tools" Module="In-Portal" Type="1">VG9vbHM=</PHRASE>
+ <PHRASE Label="la_tab_upgrade_license" Module="In-Portal" Type="1">VXBkYXRlIExpY2Vuc2U=</PHRASE>
+ <PHRASE Label="la_tab_userban" Module="In-Portal" Type="1">QmFuIHVzZXI=</PHRASE>
+ <PHRASE Label="la_tab_UserBanList" Module="In-Portal" Type="1">VXNlciBCYW4gTGlzdA==</PHRASE>
+ <PHRASE Label="la_tab_Users" Module="In-Portal" Type="1">VXNlcnM=</PHRASE>
+ <PHRASE Label="la_tab_UserSelect" Module="In-Portal" Type="1">VXNlciBTZWxlY3Q=</PHRASE>
+ <PHRASE Label="la_tab_User_Groups" Module="In-Portal" Type="1">R3JvdXBz</PHRASE>
+ <PHRASE Label="la_tab_User_List" Module="In-Portal" Type="1">VXNlcnM=</PHRASE>
+ <PHRASE Label="la_tab_Visits" Module="In-Portal" Type="1">VmlzaXRz</PHRASE>
+ <PHRASE Label="la_taglib_link" Module="In-Portal" Type="1">VGFnIExpYnJhcnk=</PHRASE>
+ <PHRASE Label="la_tag_library" Module="In-Portal" Type="1">VGFnIExpYnJhcnk=</PHRASE>
+ <PHRASE Label="la_terabytes" Module="In-Portal" Type="1">dGVyYWJ5dGUocyk=</PHRASE>
+ <PHRASE Label="la_Text" Module="In-Portal" Type="1">dGV4dA==</PHRASE>
+ <PHRASE Label="la_Text_Access_Denied" Module="In-Portal" Type="1">SW52YWxpZCB1c2VyIG5hbWUgb3IgcGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="la_Text_Active" Module="In-Portal" Type="1">QWN0aXZl</PHRASE>
+ <PHRASE Label="la_Text_Adding" Module="In-Portal" Type="1">QWRkaW5n</PHRASE>
+ <PHRASE Label="la_Text_Address" Module="In-Portal" Type="1">QWRkcmVzcw==</PHRASE>
+ <PHRASE Label="la_text_address_denied" Module="In-Portal" Type="1">TG9naW4gbm90IGFsbG93ZWQgZnJvbSB0aGlzIGFkZHJlc3M=</PHRASE>
+ <PHRASE Label="la_Text_Admin" Module="In-Portal" Type="1">QWRtaW4=</PHRASE>
+ <PHRASE Label="la_Text_AdminEmail" Module="In-Portal" Type="1">QWRtaW5pc3RyYXRvciBSZWNlaXZlIE5vdGljZXMgV2hlbg==</PHRASE>
+ <PHRASE Label="la_text_advanced" Module="In-Portal" Type="1">QWR2YW5jZWQ=</PHRASE>
+ <PHRASE Label="la_Text_All" Module="In-Portal" Type="1">QWxs</PHRASE>
+ <PHRASE Label="la_Text_Allow" Module="In-Portal" Type="1">QWxsb3c=</PHRASE>
+ <PHRASE Label="la_Text_Any" Module="In-Portal" Type="1">QW55</PHRASE>
+ <PHRASE Label="la_Text_Archived" Module="In-Portal" Type="1">QXJjaGl2ZWQ=</PHRASE>
+ <PHRASE Label="la_Text_Article" Module="In-Portal" Type="1">QXJ0aWNsZQ==</PHRASE>
+ <PHRASE Label="la_Text_Articles" Module="In-Portal" Type="1">QXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="la_text_As" Module="In-Portal" Type="1">YXM=</PHRASE>
+ <PHRASE Label="la_text_AutoRefresh" Module="In-Portal" Type="1">QXV0by1SZWZyZXNo</PHRASE>
+ <PHRASE Label="la_Text_backing_up" Module="In-Portal" Type="1">QmFja2luZyB1cA==</PHRASE>
+ <PHRASE Label="la_Text_BackupComplete" Module="In-Portal" Type="1">QmFjayB1cCBoYXMgYmVlbiBjb21wbGV0ZWQuIFRoZSBiYWNrdXAgZmlsZSBpczo=</PHRASE>
+ <PHRASE Label="la_Text_BackupPath" Module="In-Portal" Type="1">QmFja3VwIFBhdGg=</PHRASE>
+ <PHRASE Label="la_Text_backup_access" Module="In-Portal" Type="2">SW4tUG9ydGFsIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHdyaXRlIHRvIHRoaXMgZGlyZWN0b3J5</PHRASE>
+ <PHRASE Label="la_Text_Backup_Info" Module="In-Portal" Type="1">VGhpcyB1dGlsaXR5IGFsbG93cyB5b3UgdG8gYmFja3VwIHlvdXIgY3VycmVudCBkYXRhIGZyb20gSW4tUG9ydGFsIGRhdGFiYXNlLg==</PHRASE>
+ <PHRASE Label="la_text_Backup_in_progress" Module="In-Portal" Type="1">QmFja3VwIGluIHByb2dyZXNz</PHRASE>
+ <PHRASE Label="la_Text_Ban" Module="In-Portal" Type="1">QmFu</PHRASE>
+ <PHRASE Label="la_Text_BanRules" Module="In-Portal" Type="2">VXNlciBCYW4gUnVsZXM=</PHRASE>
+ <PHRASE Label="la_Text_BanUserFields" Module="In-Portal" Type="1">QmFuIFVzZXIgSW5mb3JtYXRpb24=</PHRASE>
+ <PHRASE Label="la_Text_Blank_Field" Module="In-Portal" Type="1">QmxhbmsgdXNlcm5hbWUgb3IgcGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="la_Text_Both" Module="In-Portal" Type="1">Qm90aA==</PHRASE>
+ <PHRASE Label="la_Text_BuiltIn" Module="In-Portal" Type="1">QnVpbHQgSW4=</PHRASE>
+ <PHRASE Label="la_text_Bytes" Module="In-Portal" Type="1">Ynl0ZXM=</PHRASE>
+ <PHRASE Label="la_Text_Catalog" Module="In-Portal" Type="1">Q2F0YWxvZw==</PHRASE>
+ <PHRASE Label="la_Text_Categories" Module="In-Portal" Type="1">Q2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_Text_Category" Module="In-Portal" Type="1">Q2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_Text_Censorship" Module="In-Portal" Type="1">Q2Vuc29yc2hpcA==</PHRASE>
+ <PHRASE Label="la_Text_City" Module="In-Portal" Type="1">Q2l0eQ==</PHRASE>
+ <PHRASE Label="la_text_ClearClipboardWarning" Module="In-Portal" Type="1">WW91IGFyZSBhYm91dCB0byBjbGVhciBjbGlwYm9hcmQgY29udGVudCENClByZXNzIE9LIHRvIGNvbnRpbnVlIG9yIENhbmNlbCB0byByZXR1cm4gdG8gcHJldmlvdXMgc2NyZWVuLg==</PHRASE>
+ <PHRASE Label="la_Text_ComingSoon" Module="In-Portal" Type="1">U2VjdGlvbiBDb21pbmcgU29vbg==</PHRASE>
+ <PHRASE Label="la_Text_Complete" Module="In-Portal" Type="1">Q29tcGxldGU=</PHRASE>
+ <PHRASE Label="la_Text_Configuration" Module="In-Portal" Type="1">Q29uZmlndXJhdGlvbg==</PHRASE>
+ <PHRASE Label="la_text_Contains" Module="In-Portal" Type="1">Q29udGFpbnM=</PHRASE>
+ <PHRASE Label="la_Text_Counters" Module="In-Portal" Type="1">Q291bnRlcnM=</PHRASE>
+ <PHRASE Label="la_Text_CSV_Export" Module="In-Portal" Type="1">Q1NWIEV4cG9ydA==</PHRASE>
+ <PHRASE Label="la_Text_Current" Module="In-Portal" Type="1">Q3VycmVudA==</PHRASE>
+ <PHRASE Label="la_text_custom" Module="In-Portal" Type="1">Q3VzdG9t</PHRASE>
+ <PHRASE Label="la_Text_CustomField" Module="In-Portal" Type="1">Q3VzdG9tIEZpZWxk</PHRASE>
+ <PHRASE Label="la_Text_CustomFields" Module="In-Portal" Type="1">Q3VzdG9tIEZpZWxkcw==</PHRASE>
+ <PHRASE Label="la_Text_DatabaseSettings" Module="In-Portal" Type="1">RGF0YWJhc2UgU2V0dGluZ3MgLSBJbnRlY2huaWMgSW4tTGluayAyLng=</PHRASE>
+ <PHRASE Label="la_Text_DataType_1" Module="In-Portal" Type="1">Y2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_Text_DataType_2" Module="In-Portal" Type="1">RGF0YSBUeXBlIDI=</PHRASE>
+ <PHRASE Label="la_Text_DataType_3" Module="In-Portal" Type="1">cG9zdA==</PHRASE>
+ <PHRASE Label="la_Text_DataType_4" Module="In-Portal" Type="1">bGlua3M=</PHRASE>
+ <PHRASE Label="la_Text_DataType_6" Module="In-Portal" Type="1">dXNlcnM=</PHRASE>
+ <PHRASE Label="la_Text_Date_Time_Settings" Module="In-Portal" Type="1">RGF0ZS9UaW1lIFNldHRpbmdz</PHRASE>
+ <PHRASE Label="la_Text_Day" Module="In-Portal" Type="1">RGF5</PHRASE>
+ <PHRASE Label="la_text_db_warning" Module="In-Portal" Type="1">UnVubmluZyB0aGlzIHV0aWxpdHkgd2lsbCBhZmZlY3QgeW91ciBkYXRhYmFzZS4gIFBsZWFzZSBiZSBhZHZpc2VkIHRoYXQgeW91IGNhbiB1c2UgdGhpcyB1dGlsaXR5IGF0IHlvdXIgb3duIHJpc2suICBJbnRlY2huaWMgQ29ycG9yYXRpb24gY2FuIG5vdCBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGNvcnJ1cHQgZGF0YSBvciBkYXRhIGxvc3Mu</PHRASE>
+ <PHRASE Label="la_Text_Default" Module="In-Portal" Type="1">RGVmYXVsdA==</PHRASE>
+ <PHRASE Label="la_Text_Delete" Module="In-Portal" Type="1">RGVsZXRl</PHRASE>
+ <PHRASE Label="la_text_denied" Module="In-Portal" Type="1">RGVuaWVk</PHRASE>
+ <PHRASE Label="la_Text_Deny" Module="In-Portal" Type="1">RGVueQ==</PHRASE>
+ <PHRASE Label="la_Text_Disable" Module="In-Portal" Type="1">RGlzYWJsZQ==</PHRASE>
+ <PHRASE Label="la_Text_Disabled" Module="In-Portal" Type="1">RGlzYWJsZWQ=</PHRASE>
+ <PHRASE Label="la_text_disclaimer_part1" Module="In-Portal" Type="1">UnVubmluZyB0aGlzIHV0aWxpdHkgd2lsbCBhZmZlY3QgeW91ciBkYXRhYmFzZS4gUGxlYXNlIGJlIGFkdmlzZWQgdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHV0aWxpdHkgYXQgeW91ciBvd24gcmlzay4gSW50ZWNobmljIENvcnBvcmF0aW9uIGNhbiBub3QgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBjb3JydXB0IGRhdGEgb3IgZGF0YSBsb3NzLg==</PHRASE>
+ <PHRASE Label="la_text_disclaimer_part2" Module="In-Portal" Type="1">UGxlYXNlIG1ha2Ugc3VyZSB0byBiYWNrIHVwIHlvdXIgZGF0YWJhc2UocykgYmVmb3JlIHJ1bm5pbmcgdGhpcyB1dGlsaXR5Lg==</PHRASE>
+ <PHRASE Label="la_Text_Edit" Module="In-Portal" Type="1">RWRpdA==</PHRASE>
+ <PHRASE Label="la_Text_Editing" Module="In-Portal" Type="1">RWRpdGluZw==</PHRASE>
+ <PHRASE Label="la_Text_Editor" Module="In-Portal" Type="1">RWRpdG9y</PHRASE>
+ <PHRASE Label="la_Text_Email" Module="In-Portal" Type="1">RW1haWw=</PHRASE>
+ <PHRASE Label="la_Text_Emoticons" Module="In-Portal" Type="1">RW1vdGlvbiBJY29ucw==</PHRASE>
+ <PHRASE Label="la_Text_Enable" Module="In-Portal" Type="1">RW5hYmxl</PHRASE>
+ <PHRASE Label="la_Text_Enabled" Module="In-Portal" Type="1">RW5hYmxlZA==</PHRASE>
+ <PHRASE Label="la_Text_Events" Module="In-Portal" Type="1">RXZlbnRz</PHRASE>
+ <PHRASE Label="la_Text_example" Module="In-Portal" Type="2">RXhhbXBsZQ==</PHRASE>
+ <PHRASE Label="la_Text_Exists" Module="In-Portal" Type="1">RXhpc3Rz</PHRASE>
+ <PHRASE Label="la_Text_Expired" Module="In-Portal" Type="1">RXhwaXJlZA==</PHRASE>
+ <PHRASE Label="la_Text_Export" Module="In-Portal" Type="2">RXhwb3J0</PHRASE>
+ <PHRASE Label="la_Text_Fields" Module="In-Portal" Type="1">RmllbGRz</PHRASE>
+ <PHRASE Label="la_Text_Filter" Module="In-Portal" Type="1">RmlsdGVy</PHRASE>
+ <PHRASE Label="la_Text_FirstName" Module="In-Portal" Type="1">Rmlyc3QgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_text_for" Module="In-Portal" Type="1">Zm9y</PHRASE>
+ <PHRASE Label="la_Text_Front" Module="In-Portal" Type="1">RnJvbnQ=</PHRASE>
+ <PHRASE Label="la_Text_FrontEnd" Module="In-Portal" Type="1">RnJvbnQgRW5k</PHRASE>
+ <PHRASE Label="la_Text_FrontOnly" Module="In-Portal" Type="1">RnJvbnQtZW5kIE9ubHk=</PHRASE>
+ <PHRASE Label="la_Text_Full" Module="In-Portal" Type="1">RnVsbA==</PHRASE>
+ <PHRASE Label="la_Text_Full_Size_Image" Module="In-Portal" Type="1">RnVsbCBTaXplIEltYWdl</PHRASE>
+ <PHRASE Label="la_Text_General" Module="In-Portal" Type="1">R2VuZXJhbA==</PHRASE>
+ <PHRASE Label="la_Text_GreaterThan" Module="In-Portal" Type="1">R3JlYXRlciBUaGFu</PHRASE>
+ <PHRASE Label="la_Text_Group" Module="In-Portal" Type="1">R3JvdXA=</PHRASE>
+ <PHRASE Label="la_Text_Groups" Module="In-Portal" Type="1">R3JvdXBz</PHRASE>
+ <PHRASE Label="la_Text_Group_Name" Module="In-Portal" Type="1">R3JvdXAgTmFtZQ==</PHRASE>
+ <PHRASE Label="la_Text_Guest" Module="In-Portal" Type="1">R3Vlc3Q=</PHRASE>
+ <PHRASE Label="la_Text_GuestUsers" Module="In-Portal" Type="1">R3Vlc3QgVXNlcnM=</PHRASE>
+ <PHRASE Label="la_Text_Hot" Module="In-Portal" Type="1">SG90</PHRASE>
+ <PHRASE Label="la_Text_Hour" Module="In-Portal" Type="1">SG91cg==</PHRASE>
+ <PHRASE Label="la_Text_IAgree" Module="In-Portal" Type="1">SSBhZ3JlZSB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnM=</PHRASE>
+ <PHRASE Label="la_Text_Image" Module="In-Portal" Type="1">SW1hZ2U=</PHRASE>
+ <PHRASE Label="la_Text_Images" Module="In-Portal" Type="1">SW1hZ2Vz</PHRASE>
+ <PHRASE Label="la_Text_Inactive" Module="In-Portal" Type="1">SW5hY3RpdmU=</PHRASE>
+ <PHRASE Label="la_Text_InDevelopment" Module="In-Portal" Type="1">SW4gRGV2ZWxvcG1lbnQ=</PHRASE>
+ <PHRASE Label="la_Text_Install" Module="In-Portal" Type="1">SW5zdGFsbA==</PHRASE>
+ <PHRASE Label="la_Text_Installed" Module="In-Portal" Type="1">SW5zdGFsbGVk</PHRASE>
+ <PHRASE Label="la_Text_Invalid" Module="In-Portal" Type="2">SW52YWxpZA==</PHRASE>
+ <PHRASE Label="la_Text_Invert" Module="In-Portal" Type="1">SW52ZXJ0</PHRASE>
+ <PHRASE Label="la_Text_IPAddress" Module="In-Portal" Type="1">SVAgQWRkcmVzcw==</PHRASE>
+ <PHRASE Label="la_Text_Is" Module="In-Portal" Type="1">SXM=</PHRASE>
+ <PHRASE Label="la_Text_IsNot" Module="In-Portal" Type="1">SXMgTm90</PHRASE>
+ <PHRASE Label="la_Text_Items" Module="In-Portal" Type="1">SXRlbXM=</PHRASE>
+ <PHRASE Label="la_text_keyword" Module="In-Portal" Type="1">S2V5d29yZA==</PHRASE>
+ <PHRASE Label="la_Text_Label" Module="In-Portal" Type="1">TGFiZWw=</PHRASE>
+ <PHRASE Label="la_Text_LangImport" Module="In-Portal" Type="1">TGFuZ3VhZ2UgSW1wb3J0</PHRASE>
+ <PHRASE Label="la_Text_Languages" Module="In-Portal" Type="2">TGFuZ3VhZ2U=</PHRASE>
+ <PHRASE Label="la_Text_LastName" Module="In-Portal" Type="1">TGFzdCBOYW1l</PHRASE>
+ <PHRASE Label="la_text_leading" Module="In-Portal" Type="1">TGVhZGluZw==</PHRASE>
+ <PHRASE Label="la_Text_LessThan" Module="In-Portal" Type="1">TGVzcyBUaGFu</PHRASE>
+ <PHRASE Label="la_Text_Licence" Module="In-Portal" Type="1">TGljZW5zZQ==</PHRASE>
+ <PHRASE Label="la_Text_Link" Module="In-Portal" Type="1">TGluaw==</PHRASE>
+ <PHRASE Label="la_Text_Links" Module="In-Portal" Type="1">TGlua3M=</PHRASE>
+ <PHRASE Label="la_Text_Link_Validation" Module="In-Portal" Type="2">VmFsaWRhdGluZyBMaW5rcw==</PHRASE>
+ <PHRASE Label="la_Text_Local" Module="In-Portal" Type="1">TG9jYWw=</PHRASE>
+ <PHRASE Label="la_Text_Locked" Module="In-Portal" Type="1">TG9ja2Vk</PHRASE>
+ <PHRASE Label="la_Text_Login" Module="In-Portal" Type="1">VXNlcm5hbWU=</PHRASE>
+ <PHRASE Label="la_Text_MailEvent" Module="In-Portal" Type="1">RW1haWwgRXZlbnQ=</PHRASE>
+ <PHRASE Label="la_Text_MetaInfo" Module="In-Portal" Type="1">RGVmYXVsdCBNRVRBIGtleXdvcmRz</PHRASE>
+ <PHRASE Label="la_text_minkeywordlength" Module="In-Portal" Type="1">TWluaW11bSBrZXl3b3JkIGxlbmd0aA==</PHRASE>
+ <PHRASE Label="la_Text_Minute" Module="In-Portal" Type="1">TWludXRl</PHRASE>
+ <PHRASE Label="la_text_min_password" Module="In-Portal" Type="1">TWluaW11bSBwYXNzd29yZCBsZW5ndGg=</PHRASE>
+ <PHRASE Label="la_text_min_username" Module="In-Portal" Type="1">TWluaW11bSB1c2VyIG5hbWUgbGVuZ3Ro</PHRASE>
+ <PHRASE Label="la_Text_Missing_Password" Module="In-Portal" Type="1">QmxhbmsgcGFzc3dvcmRzIGFyZSBub3QgYWxsb3dlZA==</PHRASE>
+ <PHRASE Label="la_Text_Missing_Username" Module="In-Portal" Type="1">QmxhbmsgdXNlciBuYW1l</PHRASE>
+ <PHRASE Label="la_Text_Modules" Module="In-Portal" Type="1">TW9kdWxlcw==</PHRASE>
+ <PHRASE Label="la_Text_Month" Module="In-Portal" Type="1">TW9udGhz</PHRASE>
+ <PHRASE Label="la_text_multipleshow" Module="In-Portal" Type="1">U2hvdyBtdWx0aXBsZQ==</PHRASE>
+ <PHRASE Label="la_Text_New" Module="In-Portal" Type="1">TmV3</PHRASE>
+ <PHRASE Label="la_Text_NewCensorWord" Module="In-Portal" Type="1">TmV3IENlbnNvciBXb3Jk</PHRASE>
+ <PHRASE Label="la_Text_NewField" Module="In-Portal" Type="1">TmV3IEZpZWxk</PHRASE>
+ <PHRASE Label="la_Text_NewTheme" Module="In-Portal" Type="1">TmV3IFRoZW1l</PHRASE>
+ <PHRASE Label="la_text_NoCategories" Module="In-Portal" Type="1">Tm8gQ2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_Text_None" Module="In-Portal" Type="1">Tm9uZQ==</PHRASE>
+ <PHRASE Label="la_text_nopermissions" Module="In-Portal" Type="1">Tm8gcGVybWlzc2lvbnM=</PHRASE>
+ <PHRASE Label="la_Text_NotContains" Module="In-Portal" Type="1">RG9lcyBOb3QgQ29udGFpbg==</PHRASE>
+ <PHRASE Label="la_Text_Not_Validated" Module="In-Portal" Type="2">Tm90IFZhbGlkYXRlZA==</PHRASE>
+ <PHRASE Label="la_Text_No_permissions" Module="In-Portal" Type="1">Tm8gcGVybWlzc2lvbnM=</PHRASE>
+ <PHRASE Label="la_Text_OneWay" Module="In-Portal" Type="1">T25lIFdheQ==</PHRASE>
+ <PHRASE Label="la_Text_Pack" Module="In-Portal" Type="1">UGFjaw==</PHRASE>
+ <PHRASE Label="la_Text_Pending" Module="In-Portal" Type="1">UGVuZGluZw==</PHRASE>
+ <PHRASE Label="la_text_Permission" Module="In-Portal" Type="1">UGVybWlzc2lvbg==</PHRASE>
+ <PHRASE Label="la_Text_Phone" Module="In-Portal" Type="1">UGhvbmU=</PHRASE>
+ <PHRASE Label="la_Text_Pop" Module="In-Portal" Type="1">UG9wdWxhcg==</PHRASE>
+ <PHRASE Label="la_text_popularity" Module="In-Portal" Type="1">UG9wdWxhcml0eQ==</PHRASE>
+ <PHRASE Label="la_Text_PostBody" Module="In-Portal" Type="1">UG9zdCBCb2R5</PHRASE>
+ <PHRASE Label="la_Text_Posts" Module="In-Portal" Type="1">UG9zdHM=</PHRASE>
+ <PHRASE Label="la_text_prerequisit_not_passed" Module="In-Portal" Type="1">UHJlcmVxdWlzaXRlIG5vdCBmdWxmaWxsZWQsIGluc3RhbGxhdGlvbiBjYW5ub3QgY29udGludWUh</PHRASE>
+ <PHRASE Label="la_Text_Primary" Module="In-Portal" Type="1">UHJpbWFyeQ==</PHRASE>
+ <PHRASE Label="la_text_quicklinks" Module="In-Portal" Type="1">UXVpY2sgbGlua3M=</PHRASE>
+ <PHRASE Label="la_text_ReadOnly" Module="In-Portal" Type="1">UmVhZCBPbmx5</PHRASE>
+ <PHRASE Label="la_text_ready_to_install" Module="In-Portal" Type="1">UmVhZHkgdG8gSW5zdGFsbA==</PHRASE>
+ <PHRASE Label="la_Text_Reciprocal" Module="In-Portal" Type="1">UmVjaXByb2NhbA==</PHRASE>
+ <PHRASE Label="la_Text_Relation" Module="In-Portal" Type="1">UmVsYXRpb24=</PHRASE>
+ <PHRASE Label="la_Text_Relations" Module="In-Portal" Type="1">UmVsYXRpb25z</PHRASE>
+ <PHRASE Label="la_Text_Replies" Module="In-Portal" Type="1">UmVwbGllcw==</PHRASE>
+ <PHRASE Label="la_text_restore warning" Module="In-Portal" Type="1">VGhlIHZlcnNpb25zIG9mIHRoZSBiYWNrdXAgYW5kIHlvdXIgY29kZSBkb24ndCBtYXRjaC4gWW91ciBpbnN0YWxsYXRpb24gd2lsbCBwcm9iYWJseSBiZSBub24gb3BlcmF0aW9uYWwu</PHRASE>
+ <PHRASE Label="la_Text_Restore_Heading" Module="In-Portal" Type="1">SGVyZSB5b3UgY2FuIHJlc3RvcmUgeW91ciBkYXRhYmFzZSBmcm9tIGEgcHJldmlvdXNseSBiYWNrZWQgdXAgc25hcHNob3QuIFJlc3RvcmluZyB5b3VyIGRhdGFiYXNlIHdpbGwgZGVsZXRlIGFsbCBvZiB5b3VyIGN1cnJlbnQgZGF0YSBhbmQgbG9nIHlvdSBvdXQgb2YgdGhlIHN5c3RlbS4=</PHRASE>
+ <PHRASE Label="la_text_Restore_in_progress" Module="In-Portal" Type="1">UmVzdG9yZSBpcyBpbiBwcm9ncmVzcw==</PHRASE>
+ <PHRASE Label="la_Text_Restore_Warning" Module="In-Portal" Type="1">IFJ1bm5pbmcgdGhpcyB1dGlsaXR5IHdpbGwgYWZmZWN0IHlvdXIgZGF0YWJhc2UuICBQbGVhc2UgYmUgYWR2aXNlZCB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgdXRpbGl0eSBhdCB5b3VyIG93biByaXNrLiAgSW50ZWNobmljIGNvcnBvcmF0aW9uIGNhbiBub3QgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBjb3JydXB0IGRhdGEgb3IgZGF0YSBsb3NzLiAgUGxlYXNlIG1ha2Ugc3VyZSB0byBiYWNrIHVwIHlvdXIgZGF0YWJhc2UocykgYmVmb3JlIHJ1bm5p</PHRASE>
+ <PHRASE Label="la_Text_Restrictions" Module="In-Portal" Type="1">UmVzdHJpY3Rpb25z</PHRASE>
+ <PHRASE Label="la_Text_Results" Module="In-Portal" Type="2">UmVzdWx0cw==</PHRASE>
+ <PHRASE Label="la_text_review" Module="In-Portal" Type="1">UmV2aWV3</PHRASE>
+ <PHRASE Label="la_Text_Reviews" Module="In-Portal" Type="1">UmV2aWV3cw==</PHRASE>
+ <PHRASE Label="la_Text_Root" Module="In-Portal" Type="1">Um9vdA==</PHRASE>
+ <PHRASE Label="la_Text_RootCategory" Module="In-Portal" Type="1">TW9kdWxlIFJvb3QgQ2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_text_Rows" Module="In-Portal" Type="1">cm93KHMp</PHRASE>
+ <PHRASE Label="la_Text_Rule" Module="In-Portal" Type="2">UnVsZQ==</PHRASE>
+ <PHRASE Label="la_text_Same" Module="In-Portal" Type="1">U2FtZQ==</PHRASE>
+ <PHRASE Label="la_text_Same_As_Thumbnail" Module="In-Portal" Type="1">U2FtZSBhcyB0aHVtYm5haWw=</PHRASE>
+ <PHRASE Label="la_text_Save" Module="In-Portal" Type="1">U2F2ZQ==</PHRASE>
+ <PHRASE Label="la_Text_Scanning" Module="In-Portal" Type="1">U2Nhbm5pbmc=</PHRASE>
+ <PHRASE Label="la_Text_Search_Results" Module="In-Portal" Type="1">U2VhcmNoIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="la_Text_Second" Module="In-Portal" Type="1">U2Vjb25kcw==</PHRASE>
+ <PHRASE Label="la_Text_Select" Module="In-Portal" Type="1">U2VsZWN0</PHRASE>
+ <PHRASE Label="la_Text_Send" Module="In-Portal" Type="1">U2VuZA==</PHRASE>
+ <PHRASE Label="la_Text_Sessions" Module="In-Portal" Type="1">U2Vzc2lvbnM=</PHRASE>
+ <PHRASE Label="la_text_sess_expired" Module="In-Portal" Type="0">U2Vzc2lvbiBFeHBpcmVk</PHRASE>
+ <PHRASE Label="la_Text_Settings" Module="In-Portal" Type="1">U2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_Text_ShowingGroups" Module="In-Portal" Type="1">U2hvd2luZyBHcm91cHM=</PHRASE>
+ <PHRASE Label="la_Text_ShowingUsers" Module="In-Portal" Type="1">U2hvd2luZyBVc2Vycw==</PHRASE>
+ <PHRASE Label="la_Text_Simple" Module="In-Portal" Type="1">U2ltcGxl</PHRASE>
+ <PHRASE Label="la_Text_Size" Module="In-Portal" Type="1">U2l6ZQ==</PHRASE>
+ <PHRASE Label="la_Text_Smiley" Module="In-Portal" Type="1">U21pbGV5</PHRASE>
+ <PHRASE Label="la_Text_smtp_server" Module="In-Portal" Type="1">U01UUCAobWFpbCkgU2VydmVy</PHRASE>
+ <PHRASE Label="la_Text_Sort" Module="In-Portal" Type="1">U29ydA==</PHRASE>
+ <PHRASE Label="la_Text_State" Module="In-Portal" Type="1">U3RhdGU=</PHRASE>
+ <PHRASE Label="la_Text_Step" Module="In-Portal" Type="1">U3RlcA==</PHRASE>
+ <PHRASE Label="la_Text_SubCats" Module="In-Portal" Type="1">U3ViQ2F0cw==</PHRASE>
+ <PHRASE Label="la_Text_Subitems" Module="In-Portal" Type="1">U3ViSXRlbXM=</PHRASE>
+ <PHRASE Label="la_Text_Table" Module="In-Portal" Type="1">VGFibGU=</PHRASE>
+ <PHRASE Label="la_Text_Template" Module="In-Portal" Type="1">VGVtcGxhdGU=</PHRASE>
+ <PHRASE Label="la_Text_Templates" Module="In-Portal" Type="1">VGVtcGxhdGVz</PHRASE>
+ <PHRASE Label="la_Text_Theme" Module="In-Portal" Type="1">VGhlbWU=</PHRASE>
+ <PHRASE Label="la_text_Thumbnail" Module="In-Portal" Type="1">VGh1bWJuYWls</PHRASE>
+ <PHRASE Label="la_text_Thumbnail_Image" Module="In-Portal" Type="1">VGh1bWJuYWlsIEltYWdl</PHRASE>
+ <PHRASE Label="la_Text_to" Module="In-Portal" Type="1">dG8=</PHRASE>
+ <PHRASE Label="la_Text_Topic" Module="In-Portal" Type="1">VG9waWM=</PHRASE>
+ <PHRASE Label="la_Text_Topics" Module="In-Portal" Type="1">VG9waWNz</PHRASE>
+ <PHRASE Label="la_Text_Type" Module="In-Portal" Type="1">VHlwZQ==</PHRASE>
+ <PHRASE Label="la_text_types" Module="In-Portal" Type="1">dHlwZXM=</PHRASE>
+ <PHRASE Label="la_Text_Unique" Module="In-Portal" Type="1">SXMgVW5pcXVl</PHRASE>
+ <PHRASE Label="la_Text_Unselect" Module="In-Portal" Type="1">VW5zZWxlY3Q=</PHRASE>
+ <PHRASE Label="la_Text_Update_Licence" Module="In-Portal" Type="1">VXBkYXRlIExpY2Vuc2U=</PHRASE>
+ <PHRASE Label="la_text_upgrade_disclaimer" Module="In-Portal" Type="1">WW91ciBkYXRhIHdpbGwgYmUgbW9kaWZpZWQgZHVyaW5nIHRoZSB1cGdyYWRlLiBXZSBzdHJvbmdseSByZWNvbW1lbmQgdGhhdCB5b3UgbWFrZSBhIGJhY2t1cCBvZiB5b3VyIGRhdGFiYXNlLiBQcm9jZWVkIHdpdGggdGhlIHVwZ3JhZGU/</PHRASE>
+ <PHRASE Label="la_Text_Upload" Module="In-Portal" Type="1">VXBsb2Fk</PHRASE>
+ <PHRASE Label="la_Text_User" Module="In-Portal" Type="1">VXNlcg==</PHRASE>
+ <PHRASE Label="la_Text_UserEmail" Module="In-Portal" Type="1">VXNlciBSZWNlaXZlcyBOb3RpY2VzIFdoZW4=</PHRASE>
+ <PHRASE Label="la_Text_Users" Module="In-Portal" Type="1">VXNlcnM=</PHRASE>
+ <PHRASE Label="la_Text_User_Count" Module="In-Portal" Type="1">VXNlciBDb3VudA==</PHRASE>
+ <PHRASE Label="la_Text_Valid" Module="In-Portal" Type="1">VmFsaWQ=</PHRASE>
+ <PHRASE Label="la_Text_Version" Module="In-Portal" Type="1">VmVyc2lvbg==</PHRASE>
+ <PHRASE Label="la_Text_View" Module="In-Portal" Type="1">Vmlldw==</PHRASE>
+ <PHRASE Label="la_Text_Views" Module="In-Portal" Type="1">Vmlld3M=</PHRASE>
+ <PHRASE Label="la_Text_Website" Module="In-Portal" Type="1">V2Vic2l0ZQ==</PHRASE>
+ <PHRASE Label="la_Text_Week" Module="In-Portal" Type="1">V2Vla3M=</PHRASE>
+ <PHRASE Label="la_Text_Within" Module="In-Portal" Type="1">V2l0aGlu</PHRASE>
+ <PHRASE Label="la_Text_Year" Module="In-Portal" Type="1">WWVhcnM=</PHRASE>
+ <PHRASE Label="la_Text_Zip" Module="In-Portal" Type="1">Wmlw</PHRASE>
+ <PHRASE Label="la_title_addingCustom" Module="In-Portal" Type="1">QWRkaW5nIEN1c3RvbSBGaWVsZA==</PHRASE>
+ <PHRASE Label="la_title_AddingFile" Module="In-Portal" Type="1">QWRkaW5nIEZpbGU=</PHRASE>
+ <PHRASE Label="la_title_Adding_BaseStyle" Module="In-Portal" Type="1">QWRkaW5nIEJhc2UgU3R5bGU=</PHRASE>
+ <PHRASE Label="la_title_Adding_BlockStyle" Module="In-Portal" Type="1">QWRkaW5nIEJsb2NrIFN0eWxl</PHRASE>
+ <PHRASE Label="la_title_Adding_Category" Module="In-Portal" Type="1">QWRkaW5nIENhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_title_Adding_Group" Module="In-Portal" Type="1">QWRkaW5nIEdyb3Vw</PHRASE>
+ <PHRASE Label="la_title_Adding_Image" Module="In-Portal" Type="1">QWRkaW5nIEltYWdl</PHRASE>
+ <PHRASE Label="la_title_Adding_Language" Module="In-Portal" Type="1">QWRkaW5nIExhbmd1YWdl</PHRASE>
+ <PHRASE Label="la_title_Adding_Phrase" Module="In-Portal" Type="1">QWRkaW5nIFBocmFzZQ==</PHRASE>
+ <PHRASE Label="la_title_Adding_RelatedSearch_Keyword" Module="In-Portal" Type="1">QWRkaW5nIEtleXdvcmQ=</PHRASE>
+ <PHRASE Label="la_title_Adding_Relationship" Module="In-Portal" Type="1">QWRkaW5nIFJlbGF0aW9uc2hpcA==</PHRASE>
+ <PHRASE Label="la_title_Adding_Review" Module="In-Portal" Type="1">QWRkaW5nIFJldmlldw==</PHRASE>
+ <PHRASE Label="la_title_Adding_Stylesheet" Module="In-Portal" Type="1">QWRkaW5nIFN0eWxlc2hlZXQ=</PHRASE>
+ <PHRASE Label="la_title_Adding_User" Module="In-Portal" Type="1">QWRkaW5nIFVzZXI=</PHRASE>
+ <PHRASE Label="la_title_AdditionalPermissions" Module="In-Portal" Type="1">QWRkaXRpb25hbCBQZXJtaXNzaW9ucw==</PHRASE>
+ <PHRASE Label="la_title_Add_Module" Module="In-Portal" Type="1">QWRkIE1vZHVsZQ==</PHRASE>
+ <PHRASE Label="la_title_AdvancedView" Module="In-Portal" Type="1">QWR2YW5jZWQgVmlldw==</PHRASE>
+ <PHRASE Label="la_title_Backup" Module="In-Portal" Type="1">QmFja3Vw</PHRASE>
+ <PHRASE Label="la_title_BaseStyles" Module="In-Portal" Type="1">QmFzZSBTdHlsZXM=</PHRASE>
+ <PHRASE Label="la_title_BlockStyles" Module="In-Portal" Type="1">QmxvY2sgU3R5bGVz</PHRASE>
+ <PHRASE Label="la_title_Browse" Module="In-Portal" Type="1">Q2F0YWxvZw==</PHRASE>
+ <PHRASE Label="la_title_Categories" Module="In-Portal" Type="1">Q2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_title_category_relationselect" Module="In-Portal" Type="1">U2VsZWN0IHJlbGF0aW9u</PHRASE>
+ <PHRASE Label="la_title_category_select" Module="In-Portal" Type="1">U2VsZWN0IGNhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_title_Censorship" Module="In-Portal" Type="1">Q2Vuc29yc2hpcA==</PHRASE>
+ <PHRASE Label="la_title_ColumnPicker" Module="In-Portal" Type="1">Q29sdW1uIFBpY2tlcg==</PHRASE>
+ <PHRASE Label="la_title_Community" Module="In-Portal" Type="1">Q29tbXVuaXR5</PHRASE>
+ <PHRASE Label="la_title_Configuration" Module="In-Portal" Type="1">Q29uZmlndXJhdGlvbg==</PHRASE>
+ <PHRASE Label="la_Title_ContactInformation" Module="In-Portal" Type="1">Q29udGFjdCBJbmZvcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="la_title_CouponSelector" Module="In-Portal" Type="1">Q291cG9uIFNlbGVjdG9y</PHRASE>
+ <PHRASE Label="la_title_Custom" Module="In-Portal" Type="1">Q3VzdG9t</PHRASE>
+ <PHRASE Label="la_title_CustomFields" Module="In-Portal" Type="1">Q3VzdG9tIEZpZWxkcw==</PHRASE>
+ <PHRASE Label="la_title_Done" Module="In-Portal" Type="1">RG9uZQ==</PHRASE>
+ <PHRASE Label="la_title_EditingEmailEvent" Module="In-Portal" Type="1">RWRpdGluZyBFbWFpbCBFdmVudA==</PHRASE>
+ <PHRASE Label="la_title_EditingFile" Module="In-Portal" Type="1">RWRpdGluZyBGaWxl</PHRASE>
+ <PHRASE Label="la_title_EditingGroup" Module="In-Portal" Type="1">RWRpdGluZyBHcm91cA==</PHRASE>
+ <PHRASE Label="la_title_EditingStyle" Module="In-Portal" Type="1">RWRpdGluZyBTdHlsZQ==</PHRASE>
+ <PHRASE Label="la_title_EditingTranslation" Module="In-Portal" Type="1">RWRpdGluZyBUcmFuc2xhdGlvbg==</PHRASE>
+ <PHRASE Label="la_title_Editing_BaseStyle" Module="In-Portal" Type="1">RWRpdGluZyBCYXNlIFN0eWxl</PHRASE>
+ <PHRASE Label="la_title_Editing_BlockStyle" Module="In-Portal" Type="1">RWRpdGluZyBCbG9jayBTdHlsZQ==</PHRASE>
+ <PHRASE Label="la_title_Editing_Category" Module="In-Portal" Type="1">RWRpdGluZyBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="la_title_Editing_CustomField" Module="In-Portal" Type="1">RWRpdGluZyBDdXN0b20gRmllbGQ=</PHRASE>
+ <PHRASE Label="la_title_Editing_Group" Module="In-Portal" Type="1">RWRpdGluZyBHcm91cA==</PHRASE>
+ <PHRASE Label="la_title_Editing_Image" Module="In-Portal" Type="1">RWRpdGluZyBJbWFnZQ==</PHRASE>
+ <PHRASE Label="la_title_Editing_Language" Module="In-Portal" Type="1">RWRpdGluZyBMYW5ndWFnZQ==</PHRASE>
+ <PHRASE Label="la_title_Editing_Phrase" Module="In-Portal" Type="1">RWRpdGluZyBQaHJhc2U=</PHRASE>
+ <PHRASE Label="la_title_Editing_RelatedSearch_Keyword" Module="In-Portal" Type="1">RWRpdGluZyBLZXl3b3Jk</PHRASE>
+ <PHRASE Label="la_title_Editing_RelatedSerch_Keyword" Module="In-Portal" Type="1">S2V5d29yZA==</PHRASE>
+ <PHRASE Label="la_title_Editing_Relationship" Module="In-Portal" Type="1">RWRpdGluZyBSZWxhdGlvbnNoaXA=</PHRASE>
+ <PHRASE Label="la_title_Editing_Review" Module="In-Portal" Type="1">RWRpdGluZyBSZXZpZXc=</PHRASE>
+ <PHRASE Label="la_title_Editing_Stylesheet" Module="In-Portal" Type="1">RWRpdGluZyBTdHlsZXNoZWV0</PHRASE>
+ <PHRASE Label="la_title_Editing_User" Module="In-Portal" Type="1">RWRpdCBVc2Vy</PHRASE>
+ <PHRASE Label="la_title_Edit_Article" Module="In-Portal" Type="1">U2l0ZSBTdHJ1Y3R1cmU=</PHRASE>
+ <PHRASE Label="la_title_edit_category" Module="In-Portal" Type="1">RWRpdCBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="la_title_Edit_Group" Module="In-Portal" Type="1">RWRpdCBHcm91cA==</PHRASE>
+ <PHRASE Label="la_title_Edit_Link" Module="In-Portal" Type="1">U2l0ZSBTdHJ1Y3R1cmU=</PHRASE>
+ <PHRASE Label="la_title_Edit_Topic" Module="In-Portal" Type="1">U2l0ZSBTdHJ1Y3R1cmU=</PHRASE>
+ <PHRASE Label="la_title_Edit_User" Module="In-Portal" Type="1">RWRpdCBVc2Vy</PHRASE>
+ <PHRASE Label="la_title_EmailEvents" Module="In-Portal" Type="1">RS1tYWlsIEV2ZW50cw==</PHRASE>
+ <PHRASE Label="la_title_EmailSettings" Module="In-Portal" Type="1">RS1tYWlsIFNldHRpbmdz</PHRASE>
+ <PHRASE Label="la_title_ExportData" Module="In-Portal" Type="1">RXhwb3J0IERhdGE=</PHRASE>
+ <PHRASE Label="la_title_ExportLanguagePack" Module="In-Portal" Type="1">RXhwb3J0IExhbmd1YWdlIFBhY2s=</PHRASE>
+ <PHRASE Label="la_title_ExportLanguagePackResults" Module="In-Portal" Type="1">RXhwb3J0IExhbmd1YWdlIFBhY2sgLSBSZXN1bHRz</PHRASE>
+ <PHRASE Label="la_title_ExportLanguagePackStep1" Module="In-Portal" Type="1">RXhwb3J0IExhbmd1YWdlIFBhY2sgLSBTdGVwMQ==</PHRASE>
+ <PHRASE Label="la_title_Files" Module="In-Portal" Type="1">RmlsZXM=</PHRASE>
+ <PHRASE Label="la_title_General" Module="In-Portal" Type="1">R2VuZXJhbA==</PHRASE>
+ <PHRASE Label="la_title_General_Configuration" Module="In-Portal" Type="1">R2VuZXJhbCBDb25maWd1cmF0aW9u</PHRASE>
+ <PHRASE Label="la_title_Groups" Module="In-Portal" Type="1">R3JvdXBz</PHRASE>
+ <PHRASE Label="la_title_groupselect" Module="In-Portal" Type="1">U2VsZWN0IGdyb3Vw</PHRASE>
+ <PHRASE Label="la_title_Help" Module="In-Portal" Type="1">SGVscA==</PHRASE>
+ <PHRASE Label="la_title_Images" Module="In-Portal" Type="1">SW1hZ2Vz</PHRASE>
+ <PHRASE Label="la_title_ImportData" Module="In-Portal" Type="1">SW1wb3J0IERhdGE=</PHRASE>
+ <PHRASE Label="la_title_ImportLanguagePack" Module="In-Portal" Type="1">SW1wb3J0IExhbmd1YWdlIFBhY2s=</PHRASE>
+ <PHRASE Label="la_title_In-Bulletin" Module="In-Portal" Type="1">SW4tYnVsbGV0aW4=</PHRASE>
+ <PHRASE Label="la_title_In-Link" Module="In-Portal" Type="1">SW4tbGluaw==</PHRASE>
+ <PHRASE Label="la_title_In-News" Module="In-Portal" Type="1">SW4tbmV3eg==</PHRASE>
+ <PHRASE Label="la_title_Install" Module="In-Portal" Type="1">SW5zdGFsbGF0aW9uIEhlbHA=</PHRASE>
+ <PHRASE Label="la_title_InstallLanguagePackStep1" Module="In-Portal" Type="1">SW5zdGFsbCBMYW5ndWFnZSBQYWNrIC0gU3RlcCAx</PHRASE>
+ <PHRASE Label="la_title_InstallLanguagePackStep2" Module="In-Portal" Type="1">SW5zdGFsbCBMYW5ndWFnZSBQYWNrIC0gU3RlcCAy</PHRASE>
+ <PHRASE Label="la_title_Items" Module="In-Portal" Type="1">SXRlbXM=</PHRASE>
+ <PHRASE Label="la_title_label" Module="In-Portal" Type="1">TGFiZWw=</PHRASE>
+ <PHRASE Label="la_title_Labels" Module="In-Portal" Type="1">TGFiZWxz</PHRASE>
+ <PHRASE Label="la_Title_LanguageImport" Module="In-Portal" Type="1">SW5zdGFsbCBMYW5ndWFnZSBQYWNr</PHRASE>
+ <PHRASE Label="la_title_LanguagePacks" Module="In-Portal" Type="1">TGFuZ3VhZ2UgUGFja3M=</PHRASE>
+ <PHRASE Label="la_title_Loading" Module="In-Portal" Type="1">TG9hZGluZyAuLi4=</PHRASE>
+ <PHRASE Label="la_title_Module_Status" Module="In-Portal" Type="1">TW9kdWxlIFN0YXR1cw==</PHRASE>
+ <PHRASE Label="la_title_NewCustomField" Module="In-Portal" Type="1">TmV3IEN1c3RvbSBGaWVsZA==</PHRASE>
+ <PHRASE Label="la_title_NewFile" Module="In-Portal" Type="1">TmV3IEZpbGU=</PHRASE>
+ <PHRASE Label="la_title_New_BaseStyle" Module="In-Portal" Type="1">TmV3IEJhc2UgU3R5bGU=</PHRASE>
+ <PHRASE Label="la_title_New_BlockStyle" Module="In-Portal" Type="1">TmV3IEJsb2NrIFN0eWxl</PHRASE>
+ <PHRASE Label="la_title_New_Category" Module="In-Portal" Type="1">TmV3IENhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_title_New_Group" Module="In-Portal" Type="1">TmV3IEdyb3Vw</PHRASE>
+ <PHRASE Label="la_title_New_Image" Module="In-Portal" Type="1">TmV3IEltYWdl</PHRASE>
+ <PHRASE Label="la_title_New_Language" Module="In-Portal" Type="1">TmV3IExhbmd1YWdl</PHRASE>
+ <PHRASE Label="la_title_New_Phrase" Module="In-Portal" Type="1">TmV3IFBocmFzZQ==</PHRASE>
+ <PHRASE Label="la_title_New_Relationship" Module="In-Portal" Type="1">TmV3IFJlbGF0aW9uc2hpcA==</PHRASE>
+ <PHRASE Label="la_title_New_Review" Module="In-Portal" Type="1">TmV3IFJldmlldw==</PHRASE>
+ <PHRASE Label="la_title_New_Stylesheet" Module="In-Portal" Type="1">TmV3IFN0eWxlc2hlZXQ=</PHRASE>
+ <PHRASE Label="la_title_NoPermissions" Module="In-Portal" Type="1">Tm8gUGVybWlzc2lvbnM=</PHRASE>
+ <PHRASE Label="la_title_Permissions" Module="In-Portal" Type="1">UGVybWlzc2lvbnM=</PHRASE>
+ <PHRASE Label="la_Title_PleaseWait" Module="In-Portal" Type="1">UGxlYXNlIFdhaXQ=</PHRASE>
+ <PHRASE Label="la_title_Properties" Module="In-Portal" Type="1">UHJvcGVydGllcw==</PHRASE>
+ <PHRASE Label="la_title_Regional" Module="In-Portal" Type="1">UmVnaW9uYWw=</PHRASE>
+ <PHRASE Label="la_title_RegionalSettings" Module="In-Portal" Type="1">UmVnaW9uYWwgU2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="la_title_RelatedSearches" Module="In-Portal" Type="1">UmVsYXRlZCBTZWFyY2hlcw==</PHRASE>
+ <PHRASE Label="la_title_Relations" Module="In-Portal" Type="1">UmVsYXRpb25z</PHRASE>
+ <PHRASE Label="la_title_Reports" Module="In-Portal" Type="1">U3VtbWFyeSAmIExvZ3M=</PHRASE>
+ <PHRASE Label="la_title_Restore" Module="In-Portal" Type="1">UmVzdG9yZQ==</PHRASE>
+ <PHRASE Label="la_title_reviews" Module="In-Portal" Type="1">UmV2aWV3cw==</PHRASE>
+ <PHRASE Label="la_title_SearchLog" Module="In-Portal" Type="1">U2VhcmNoIExvZw==</PHRASE>
+ <PHRASE Label="la_title_searchresults" Module="In-Portal" Type="1">U2VhcmNoIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="la_title_SelectUser" Module="In-Portal" Type="1">U2VsZWN0IFVzZXI=</PHRASE>
+ <PHRASE Label="la_title_select_item" Module="In-Portal" Type="1">U2VsZWN0IGl0ZW0=</PHRASE>
+ <PHRASE Label="la_title_select_target_item" Module="In-Portal" Type="1">U2VsZWN0IGl0ZW0=</PHRASE>
+ <PHRASE Label="LA_TITLE_SENDEMAIL" Module="In-Portal" Type="1">U2VuZCBFLW1haWw=</PHRASE>
+ <PHRASE Label="LA_TITLE_SENDINGPREPAREDEMAILS" Module="In-Portal" Type="1">U2VuZGluZyBQcmVwYXJlZCBFLW1haWxz</PHRASE>
+ <PHRASE Label="la_Title_SendInit" Module="In-Portal" Type="1">UHJlcGFyaW5nIHRvIFNlbmQgTWFpbA==</PHRASE>
+ <PHRASE Label="la_title_sendmail" Module="In-Portal" Type="1">U2VuZCBlbWFpbA==</PHRASE>
+ <PHRASE Label="la_title_sendmailcancel" Module="In-Portal" Type="1">Q2FuY2VsIHNlbmRpbmcgbWFpbA==</PHRASE>
+ <PHRASE Label="la_Title_SendMailComplete" Module="In-Portal" Type="1">TWFpbCBoYXMgYmVlbiBzZW50IFN1Y2Nlc3NmdWxseQ==</PHRASE>
+ <PHRASE Label="la_Title_SendMailInit" Module="In-Portal" Type="1">UHJlcGFyaW5nIHRvIFNlbmQgTWVzc2FnZXM=</PHRASE>
+ <PHRASE Label="la_Title_SendMailProgress" Module="In-Portal" Type="1">U2VuZGluZyBNZXNzYWdlLi4=</PHRASE>
+ <PHRASE Label="la_title_SessionLog" Module="In-Portal" Type="1">U2Vzc2lvbiBMb2c=</PHRASE>
+ <PHRASE Label="la_title_Settings" Module="In-Portal" Type="1">TW9kdWxlcyAmIFNldHRpbmdz</PHRASE>
+ <PHRASE Label="la_title_Site_Structure" Module="In-Portal" Type="1">U3RydWN0dXJlICYgRGF0YQ==</PHRASE>
+ <PHRASE Label="la_title_Stylesheets" Module="In-Portal" Type="1">U3R5bGVzaGVldHM=</PHRASE>
+ <PHRASE Label="la_title_Summary" Module="In-Portal" Type="1">U3VtbWFyeQ==</PHRASE>
+ <PHRASE Label="la_title_Sys_Config" Module="In-Portal" Type="1">Q29uZmlndXJhdGlvbg==</PHRASE>
+ <PHRASE Label="la_title_Tools" Module="In-Portal" Type="1">VG9vbHM=</PHRASE>
+ <PHRASE Label="la_title_UpdatingCategories" Module="In-Portal" Type="1">VXBkYXRpbmcgQ2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="la_title_Users" Module="In-Portal" Type="1">VXNlcnM=</PHRASE>
+ <PHRASE Label="la_title_userselect" Module="In-Portal" Type="1">U2VsZWN0IHVzZXI=</PHRASE>
+ <PHRASE Label="la_title_Visits" Module="In-Portal" Type="1">VmlzaXRz</PHRASE>
+ <PHRASE Label="la_to" Module="In-Portal" Type="1">dG8=</PHRASE>
+ <PHRASE Label="LA_TOOLTIPSHORT_EDIT_CURRENT_CATEGORY" Module="In-Portal" Type="1">Q3Vyci4gQ2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_ToolTipShort_Move_Down" Module="In-Portal" Type="1">RG93bg==</PHRASE>
+ <PHRASE Label="la_ToolTipShort_Move_Up" Module="In-Portal" Type="1">VXA=</PHRASE>
+ <PHRASE Label="LA_TOOLTIP_ADD" Module="In-Portal" Type="1">QWRk</PHRASE>
+ <PHRASE Label="la_ToolTip_AddToGroup" Module="In-Portal" Type="1">QWRkIFVzZXIgdG8gR3JvdXA=</PHRASE>
+ <PHRASE Label="la_ToolTip_AddUserToGroup" Module="In-Portal" Type="1">QWRkIFVzZXIgVG8gR3JvdXA=</PHRASE>
+ <PHRASE Label="la_ToolTip_Add_Category" Module="In-Portal" Type="1">QWRkIENhdGVnb3J5</PHRASE>
+ <PHRASE Label="LA_TOOLTIP_ADD_PRODUCT" Module="In-Portal" Type="1">QWRkIFByb2R1Y3Q=</PHRASE>
+ <PHRASE Label="la_ToolTip_Apply_Rules" Module="In-Portal" Type="1">QXBwbHkgUnVsZXM=</PHRASE>
+ <PHRASE Label="la_ToolTip_Approve" Module="In-Portal" Type="1">QXBwcm92ZQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Back" Module="In-Portal" Type="1">QmFjaw==</PHRASE>
+ <PHRASE Label="la_ToolTip_Ban" Module="In-Portal" Type="1">QmFu</PHRASE>
+ <PHRASE Label="la_tooltip_cancel" Module="In-Portal" Type="1">Q2FuY2Vs</PHRASE>
+ <PHRASE Label="la_ToolTip_ClearClipboard" Module="In-Portal" Type="1">Q2xlYXIgQ2xpcGJvYXJk</PHRASE>
+ <PHRASE Label="la_ToolTip_Clone" Module="In-Portal" Type="1">Q2xvbmU=</PHRASE>
+ <PHRASE Label="la_tooltip_close" Module="In-Portal" Type="1">Q2xvc2U=</PHRASE>
+ <PHRASE Label="la_ToolTip_ContinueValidation" Module="In-Portal" Type="1">Q29udGludWUgTGluayBWYWxpZGF0aW9u</PHRASE>
+ <PHRASE Label="la_ToolTip_Copy" Module="In-Portal" Type="1">Q29weQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Cut" Module="In-Portal" Type="1">Q3V0</PHRASE>
+ <PHRASE Label="la_ToolTip_Decline" Module="In-Portal" Type="1">RGVjbGluZQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Delete" Module="In-Portal" Type="1">RGVsZXRl</PHRASE>
+ <PHRASE Label="la_ToolTip_DeleteAll" Module="In-Portal" Type="1">RGVsZXRlIEFsbA==</PHRASE>
+ <PHRASE Label="la_ToolTip_DeleteFromGroup" Module="In-Portal" Type="1">RGVsZXRlIFVzZXIgRnJvbSBHcm91cA==</PHRASE>
+ <PHRASE Label="la_ToolTip_Deny" Module="In-Portal" Type="1">RGVueQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Disable" Module="In-Portal" Type="1">RGlzYWJsZQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Edit" Module="In-Portal" Type="1">RWRpdA==</PHRASE>
+ <PHRASE Label="la_ToolTip_Edit_Current_Category" Module="In-Portal" Type="1">RWRpdCBDdXJyZW50IENhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_ToolTip_Email_Disable" Module="In-Portal" Type="1">RGlzYWJsZQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Email_Enable" Module="In-Portal" Type="1">RW5hYmxl</PHRASE>
+ <PHRASE Label="la_ToolTip_Email_FrontOnly" Module="In-Portal" Type="1">RnJvbnQgT25seQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Email_UserSelect" Module="In-Portal" Type="1">U2VsZWN0IFVzZXI=</PHRASE>
+ <PHRASE Label="la_ToolTip_Enable" Module="In-Portal" Type="1">RW5hYmxl</PHRASE>
+ <PHRASE Label="la_ToolTip_Export" Module="In-Portal" Type="0">RXhwb3J0</PHRASE>
+ <PHRASE Label="la_tooltip_ExportLanguage" Module="In-Portal" Type="1">RXhwb3J0IExhbmd1YWdl</PHRASE>
+ <PHRASE Label="la_ToolTip_Home" Module="In-Portal" Type="1">SG9tZQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Import" Module="In-Portal" Type="1">SW1wb3J0</PHRASE>
+ <PHRASE Label="la_tooltip_ImportLanguage" Module="In-Portal" Type="1">SW1wb3J0IExhbmd1YWdl</PHRASE>
+ <PHRASE Label="la_ToolTip_Import_Langpack" Module="In-Portal" Type="1">SW1wb3J0IGEgTGFnbnVhZ2UgUGFja2FnZQ==</PHRASE>
+ <PHRASE Label="la_tooltip_movedown" Module="In-Portal" Type="0">TW92ZSBEb3du</PHRASE>
+ <PHRASE Label="la_tooltip_moveup" Module="In-Portal" Type="0">TW92ZSBVcA==</PHRASE>
+ <PHRASE Label="la_ToolTip_Move_Down" Module="In-Portal" Type="1">TW92ZSBEb3du</PHRASE>
+ <PHRASE Label="la_ToolTip_Move_Up" Module="In-Portal" Type="1">TW92ZSBVcA==</PHRASE>
+ <PHRASE Label="la_tooltip_NewBaseStyle" Module="In-Portal" Type="1">TmV3IEJhc2UgU3R5bGU=</PHRASE>
+ <PHRASE Label="la_tooltip_NewBlockStyle" Module="In-Portal" Type="1">TmV3IEJsb2NrIFN0eWxl</PHRASE>
+ <PHRASE Label="la_ToolTip_NewGroup" Module="In-Portal" Type="1">TmV3IEdyb3Vw</PHRASE>
+ <PHRASE Label="la_tooltip_newlabel" Module="In-Portal" Type="1">TmV3IGxhYmVs</PHRASE>
+ <PHRASE Label="la_tooltip_NewLanguage" Module="In-Portal" Type="1">TmV3IExhbmd1YWdl</PHRASE>
+ <PHRASE Label="la_tooltip_NewReview" Module="In-Portal" Type="1">TmV3IFJldmlldw==</PHRASE>
+ <PHRASE Label="LA_TOOLTIP_NEWSEARCHCONFIG" Module="In-Portal" Type="1">TmV3IFNlYXJjaCBGaWVsZA==</PHRASE>
+ <PHRASE Label="la_tooltip_newstylesheet" Module="In-Portal" Type="1">TmV3IFN0eWxlc2hlZXQ=</PHRASE>
+ <PHRASE Label="la_tooltip_newtheme" Module="In-Portal" Type="1">TmV3IFRoZW1l</PHRASE>
+ <PHRASE Label="la_tooltip_NewUser" Module="In-Portal" Type="1">TmV3IFVzZXI=</PHRASE>
+ <PHRASE Label="la_ToolTip_NewValidation" Module="In-Portal" Type="1">U3RhcnQgTmV3IFZhbGlkYXRpb24=</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Category" Module="In-Portal" Type="1">TmV3IENhdGVnb3J5</PHRASE>
+ <PHRASE Label="la_ToolTip_New_CensorWord" Module="In-Portal" Type="1">TmV3IENlbnNvciBXb3Jk</PHRASE>
+ <PHRASE Label="la_tooltip_New_Coupon" Module="In-Portal" Type="0">TmV3IENvdXBvbg==</PHRASE>
+ <PHRASE Label="la_ToolTip_New_CustomField" Module="In-Portal" Type="1">TmV3IEN1c3RvbSBGaWVsZA==</PHRASE>
+ <PHRASE Label="la_tooltip_New_Discount" Module="In-Portal" Type="0">TmV3IERpc2NvdW50</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Emoticon" Module="In-Portal" Type="1">TmV3IEVtb3Rpb24gSWNvbg==</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Image" Module="In-Portal" Type="1">TmV3IEltYWdl</PHRASE>
+ <PHRASE Label="la_tooltip_new_images" Module="In-Portal" Type="1">TmV3IEltYWdlcw==</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Keyword" Module="In-Portal" Type="1">QWRkIEtleXdvcmQ=</PHRASE>
+ <PHRASE Label="la_ToolTip_New_label" Module="In-Portal" Type="1">QWRkIG5ldyBsYWJlbA==</PHRASE>
+ <PHRASE Label="la_ToolTip_New_LangPack" Module="In-Portal" Type="1">TmV3IExhbmd1YWdlIFBhY2s=</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Permission" Module="In-Portal" Type="1">TmV3IFBlcm1pc3Npb24=</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Relation" Module="In-Portal" Type="1">TmV3IFJlbGF0aW9u</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Review" Module="In-Portal" Type="1">TmV3IFJldmlldw==</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Rule" Module="In-Portal" Type="1">TmV3IFJ1bGU=</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Template" Module="In-Portal" Type="1">TmV3IFRlbXBsYXRl</PHRASE>
+ <PHRASE Label="la_ToolTip_New_Theme" Module="In-Portal" Type="1">TmV3IFRoZW1l</PHRASE>
+ <PHRASE Label="la_ToolTip_New_User" Module="In-Portal" Type="1">TmV3IFVzZXI=</PHRASE>
+ <PHRASE Label="la_ToolTip_Next" Module="In-Portal" Type="1">TmV4dA==</PHRASE>
+ <PHRASE Label="la_tooltip_nextstep" Module="In-Portal" Type="1">TmV4dCBzdGVw</PHRASE>
+ <PHRASE Label="la_ToolTip_Paste" Module="In-Portal" Type="1">UGFzdGU=</PHRASE>
+ <PHRASE Label="la_tooltip_prev" Module="In-Portal" Type="1">UHJldmlvdXM=</PHRASE>
+ <PHRASE Label="la_ToolTip_Preview" Module="In-Portal" Type="1">UHJldmlldw==</PHRASE>
+ <PHRASE Label="la_ToolTip_Previous" Module="In-Portal" Type="1">UHJldmlvdXM=</PHRASE>
+ <PHRASE Label="la_tooltip_previousstep" Module="In-Portal" Type="1">UHJldmlvdXMgc3RlcA==</PHRASE>
+ <PHRASE Label="la_ToolTip_Primary" Module="In-Portal" Type="1">U2V0IFByaW1hcnkgVGhlbWU=</PHRASE>
+ <PHRASE Label="la_ToolTip_PrimaryGroup" Module="In-Portal" Type="1">U2V0IFByaW1hcnkgR3JvdXA=</PHRASE>
+ <PHRASE Label="la_ToolTip_Print" Module="In-Portal" Type="1">UHJpbnQ=</PHRASE>
+ <PHRASE Label="la_ToolTip_RebuildCategoryCache" Module="In-Portal" Type="1">UmVidWlsZCBDYXRlZ29yeSBDYWNoZQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Refresh" Module="In-Portal" Type="1">UmVmcmVzaA==</PHRASE>
+ <PHRASE Label="la_ToolTip_RemoveUserFromGroup" Module="In-Portal" Type="1">RGVsZXRlIFVzZXIgRnJvbSBHcm91cA==</PHRASE>
+ <PHRASE Label="la_ToolTip_RescanThemes" Module="In-Portal" Type="1">UmVzY2FuIFRoZW1lcw==</PHRASE>
+ <PHRASE Label="la_ToolTip_Reset" Module="In-Portal" Type="1">UmVzZXQ=</PHRASE>
+ <PHRASE Label="la_ToolTip_ResetToBase" Module="In-Portal" Type="1">UmVzZXQgVG8gQmFzZQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_ResetValidationStatus" Module="In-Portal" Type="1">UmVzZXQgVmFsaWRhdGlvbiBTdGF0dXM=</PHRASE>
+ <PHRASE Label="la_ToolTip_Restore" Module="In-Portal" Type="1">UmVzdG9yZQ==</PHRASE>
+ <PHRASE Label="la_tooltip_save" Module="In-Portal" Type="1">U2F2ZQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_Search" Module="In-Portal" Type="1">U2VhcmNo</PHRASE>
+ <PHRASE Label="la_ToolTip_SearchReset" Module="In-Portal" Type="1">UmVzZXQ=</PHRASE>
+ <PHRASE Label="la_ToolTip_Select" Module="In-Portal" Type="1">U2VsZWN0</PHRASE>
+ <PHRASE Label="la_tooltip_SelectUser" Module="In-Portal" Type="1">U2VsZWN0IFVzZXI=</PHRASE>
+ <PHRASE Label="la_ToolTip_SendEmail" Module="In-Portal" Type="1">U2VuZCBFLW1haWw=</PHRASE>
+ <PHRASE Label="la_ToolTip_SendMail" Module="In-Portal" Type="1">U2VuZCBFLW1haWw=</PHRASE>
+ <PHRASE Label="la_tooltip_setPrimary" Module="In-Portal" Type="1">U2V0IFByaW1hcnk=</PHRASE>
+ <PHRASE Label="la_tooltip_setprimarycategory" Module="In-Portal" Type="1">U2V0IFByaW1hcnkgQ2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="la_ToolTip_SetPrimaryLanguage" Module="In-Portal" Type="1">U2V0IFByaW1hcnkgTGFuZ3VhZ2U=</PHRASE>
+ <PHRASE Label="la_ToolTip_Stop" Module="In-Portal" Type="1">Q2FuY2Vs</PHRASE>
+ <PHRASE Label="la_ToolTip_Up" Module="In-Portal" Type="1">VXAgYSBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="la_ToolTip_ValidateSelected" Module="In-Portal" Type="1">VmFsaWRhdGU=</PHRASE>
+ <PHRASE Label="la_ToolTip_View" Module="In-Portal" Type="1">Vmlldw==</PHRASE>
+ <PHRASE Label="la_topic_editorpicksabove_prompt" Module="In-Portal" Type="1">RGlzcGxheSBlZGl0b3IgcGlja3MgYWJvdmUgcmVndWxhciB0b3BpY3M=</PHRASE>
+ <PHRASE Label="la_topic_newdays_prompt" Module="In-Portal" Type="1">TmV3IFRvcGljcyAoRGF5cyk=</PHRASE>
+ <PHRASE Label="la_topic_perpage_prompt" Module="In-Portal" Type="1">TnVtYmVyIG9mIHRvcGljcyBwZXIgcGFnZQ==</PHRASE>
+ <PHRASE Label="la_topic_perpage_short_prompt" Module="In-Portal" Type="1">VG9waWNzIFBlciBQYWdlIChTaG9ydGxpc3Qp</PHRASE>
+ <PHRASE Label="la_Topic_Pick" Module="In-Portal" Type="1">UGljaw==</PHRASE>
+ <PHRASE Label="la_topic_reviewed" Module="In-Portal" Type="1">VG9waWMgcmV2aWV3ZWQ=</PHRASE>
+ <PHRASE Label="la_topic_sortfield2_pompt" Module="In-Portal" Type="1">QW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_topic_sortfield2_prompt" Module="In-Portal" Type="1">QW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_topic_sortfield2_prompt!" Module="In-Portal" Type="1">YW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_topic_sortfield_pompt" Module="In-Portal" Type="1">T3JkZXIgVG9waWNzIEJ5</PHRASE>
+ <PHRASE Label="la_topic_sortfield_prompt" Module="In-Portal" Type="1">U29ydCB0b3BpY3MgYnk=</PHRASE>
+ <PHRASE Label="la_topic_sortoder2_prompt" Module="In-Portal" Type="1">QW5kIHRoZW4gYnk=</PHRASE>
+ <PHRASE Label="la_topic_sortoder_prompt" Module="In-Portal" Type="1">T3JkZXIgdG9waWNzIGJ5</PHRASE>
+ <PHRASE Label="la_Topic_Text" Module="In-Portal" Type="1">VG9waWMgVGV4dA==</PHRASE>
+ <PHRASE Label="la_Topic_Views" Module="In-Portal" Type="1">Vmlld3M=</PHRASE>
+ <PHRASE Label="la_to_date" Module="In-Portal" Type="1">VG8gRGF0ZQ==</PHRASE>
+ <PHRASE Label="la_translate" Module="In-Portal" Type="1">VHJhbnNsYXRl</PHRASE>
+ <PHRASE Label="la_type_checkbox" Module="In-Portal" Type="1">Q2hlY2tib3hlcw==</PHRASE>
+ <PHRASE Label="la_type_date" Module="In-Portal" Type="1">RGF0ZQ==</PHRASE>
+ <PHRASE Label="la_type_datetime" Module="In-Portal" Type="1">RGF0ZSAmIFRpbWU=</PHRASE>
+ <PHRASE Label="la_type_label" Module="In-Portal" Type="1">TGFiZWw=</PHRASE>
+ <PHRASE Label="la_type_multiselect" Module="In-Portal" Type="1">TXVsdGlwbGUgU2VsZWN0</PHRASE>
+ <PHRASE Label="la_type_password" Module="In-Portal" Type="1">UGFzc3dvcmQgZmllbGQ=</PHRASE>
+ <PHRASE Label="la_type_radio" Module="In-Portal" Type="1">UmFkaW8gYnV0dG9ucw==</PHRASE>
+ <PHRASE Label="la_type_select" Module="In-Portal" Type="1">RHJvcCBkb3duIGZpZWxk</PHRASE>
+ <PHRASE Label="la_type_SingleCheckbox" Module="In-Portal" Type="1">Q2hlY2tib3g=</PHRASE>
+ <PHRASE Label="la_type_text" Module="In-Portal" Type="1">VGV4dCBmaWVsZA==</PHRASE>
+ <PHRASE Label="la_type_textarea" Module="In-Portal" Type="1">VGV4dCBhcmVh</PHRASE>
+ <PHRASE Label="la_Unchanged" Module="In-Portal" Type="1">VW5jaGFuZ2Vk</PHRASE>
+ <PHRASE Label="la_undefined" Module="In-Portal" Type="1">VW5kZWZpbmVk</PHRASE>
+ <PHRASE Label="la_Unicode" Module="In-Portal" Type="1">VW5pY29kZQ==</PHRASE>
+ <PHRASE Label="la_updating_config" Module="In-Portal" Type="1">VXBkYXRpbmcgQ29uZmlndXJhdGlvbg==</PHRASE>
+ <PHRASE Label="la_updating_rules" Module="In-Portal" Type="1">VXBkYXRpbmcgUnVsZXM=</PHRASE>
+ <PHRASE Label="la_UseCronForRegularEvent" Module="In-Portal" Type="1">VXNlIENyb24gZm9yIFJ1bm5pbmcgUmVndWxhciBFdmVudHM=</PHRASE>
+ <PHRASE Label="la_users_allow_new" Module="In-Portal" Type="1">QWxsb3cgbmV3IHVzZXIgcmVnaXN0cmF0aW9u</PHRASE>
+ <PHRASE Label="la_users_assign_all_to" Module="In-Portal" Type="1">QXNzaWduIEFsbCBVc2VycyBUbyBHcm91cA==</PHRASE>
+ <PHRASE Label="la_users_email_validate" Module="In-Portal" Type="1">VmFsaWRhdGUgZS1tYWlsIGFkZHJlc3M=</PHRASE>
+ <PHRASE Label="la_users_guest_group" Module="In-Portal" Type="1">QXNzaWduIHVzZXJzIG5vdCBsb2dnZWQgaW4gdG8gZ3JvdXA=</PHRASE>
+ <PHRASE Label="la_users_new_group" Module="In-Portal" Type="1">QXNzaWduIHJlZ2lzdGVyZWQgdXNlcnMgdG8gZ3JvdXA=</PHRASE>
+ <PHRASE Label="la_users_password_auto" Module="In-Portal" Type="1">QXNzaWduIHBhc3N3b3JkIGF1dG9tYXRpY2FsbHk=</PHRASE>
+ <PHRASE Label="la_users_review_deny" Module="In-Portal" Type="1">TnVtYmVyIG9mIGRheXMgdG8gZGVueSBtdWx0aXBsZSByZXZpZXdzIGZyb20gdGhlIHNhbWUgdXNlcg==</PHRASE>
+ <PHRASE Label="la_users_subscriber_group" Module="In-Portal" Type="2">QXNzaWduIG1haWxpbmcgbGlzdCBzdWJzY3JpYmVycyB0byBncm91cA==</PHRASE>
+ <PHRASE Label="la_users_votes_deny" Module="In-Portal" Type="1">TnVtYmVyIG9mIGRheXMgdG8gZGVueSBtdWx0aXBsZSB2b3RlcyBmcm9tIHRoZSBzYW1lIHVzZXI=</PHRASE>
+ <PHRASE Label="la_User_Instant" Module="In-Portal" Type="1">SW5zdGFudA==</PHRASE>
+ <PHRASE Label="la_User_Not_Allowed" Module="In-Portal" Type="1">Tm90IEFsbG93ZWQ=</PHRASE>
+ <PHRASE Label="la_User_Upon_Approval" Module="In-Portal" Type="1">VXBvbiBBcHByb3ZhbA==</PHRASE>
+ <PHRASE Label="LA_USETOOLBARLABELS" Module="In-Portal" Type="1">VXNlIFRvb2xiYXIgTGFiZWxz</PHRASE>
+ <PHRASE Label="la_use_emails_as_login" Module="In-Portal" Type="1">VXNlIEVtYWlscyBBcyBMb2dpbg==</PHRASE>
+ <PHRASE Label="la_US_UK" Module="In-Portal" Type="1">VVMvVUs=</PHRASE>
+ <PHRASE Label="la_validation_AlertMsg" Module="In-Portal" Type="1">UGxlYXNlIGNoZWNrIHRoZSByZXF1aXJlZCBmaWVsZHMgYW5kIHRyeSBhZ2FpbiE=</PHRASE>
+ <PHRASE Label="la_Value" Module="In-Portal" Type="1">VmFsdWU=</PHRASE>
+ <PHRASE Label="la_valuelist_help" Module="In-Portal" Type="1">RW50ZXIgbGlzdCBvZiB2YWx1ZXMgYW5kIHRoZWlyIGRlc2NyaXB0aW9ucywgbGlrZSAxPU9uZSwgMj1Ud28=</PHRASE>
+ <PHRASE Label="la_val_Active" Module="In-Portal" Type="1">QWN0aXZl</PHRASE>
+ <PHRASE Label="la_val_Always" Module="In-Portal" Type="1">QWx3YXlz</PHRASE>
+ <PHRASE Label="la_val_Auto" Module="In-Portal" Type="1">QXV0bw==</PHRASE>
+ <PHRASE Label="la_val_Disabled" Module="In-Portal" Type="1">RGlzYWJsZWQ=</PHRASE>
+ <PHRASE Label="la_val_Enabled" Module="In-Portal" Type="1">RW5hYmxlZA==</PHRASE>
+ <PHRASE Label="la_val_Never" Module="In-Portal" Type="1">TmV2ZXI=</PHRASE>
+ <PHRASE Label="la_val_Password" Module="In-Portal" Type="1">SW52YWxpZCBQYXNzd29yZA==</PHRASE>
+ <PHRASE Label="la_val_Pending" Module="In-Portal" Type="1">UGVuZGluZw==</PHRASE>
+ <PHRASE Label="la_val_RequiredField" Module="In-Portal" Type="1">UmVxdWlyZWQgRmllbGQ=</PHRASE>
+ <PHRASE Label="la_val_Username" Module="In-Portal" Type="1">SW52YWxpZCBVc2VybmFtZQ==</PHRASE>
+ <PHRASE Label="la_visit_DirectReferer" Module="In-Portal" Type="1">RGlyZWN0IGFjY2VzcyBvciBib29rbWFyaw==</PHRASE>
+ <PHRASE Label="la_vote_added" Module="In-Portal" Type="1">Vm90ZSBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5</PHRASE>
+ <PHRASE Label="la_Warning_Enable_HTML" Module="In-Portal" Type="1">V2FybmluZzogRW5hYmxpbmcgSFRNTCBpcyBhIHNlY3VyaXR5IHJpc2sgYW5kIGNvdWxkIGRhbWFnZSB0aGUgc3lzdGVtIGlmIHVzZWQgaW1wcm9wZXJseSE=</PHRASE>
+ <PHRASE Label="la_Warning_Filter" Module="In-Portal" Type="1">QSBzZWFyY2ggb3IgYSBmaWx0ZXIgaXMgaW4gZWZmZWN0LiBZb3UgbWF5IG5vdCBiZSBzZWVpbmcgYWxsIG9mIHRoZSBkYXRhLg==</PHRASE>
+ <PHRASE Label="la_warning_primary_delete" Module="In-Portal" Type="1">WW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIHByaW1hcnkgdGhlbWUuIENvbnRpbnVlPw==</PHRASE>
+ <PHRASE Label="la_Warning_Save_Item" Module="In-Portal" Type="1">TW9kaWZpY2F0aW9ucyB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB5b3UgY2xpY2sgdGhlIFNhdmUgYnV0dG9uIQ==</PHRASE>
+ <PHRASE Label="la_week" Module="In-Portal" Type="1">d2Vlaw==</PHRASE>
+ <PHRASE Label="la_Windows" Module="In-Portal" Type="1">V2luZG93cyAocm4p</PHRASE>
+ <PHRASE Label="la_year" Module="In-Portal" Type="1">eWVhcg==</PHRASE>
+ <PHRASE Label="la_Yes" Module="In-Portal" Type="1">WWVz</PHRASE>
+ <PHRASE Label="lu_access_denied" Module="In-Portal" Type="0">WW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9u</PHRASE>
+ <PHRASE Label="lu_account_info" Module="In-Portal" Type="0">QWNjb3VudCBJbmZvcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="lu_action" Module="In-Portal" Type="0">QWN0aW9u</PHRASE>
+ <PHRASE Label="lu_action_box_title" Module="In-Portal" Type="0">QWN0aW9uIEJveA==</PHRASE>
+ <PHRASE Label="lu_action_prompt" Module="In-Portal" Type="0">SGVyZSBZb3UgQ2FuOg==</PHRASE>
+ <PHRASE Label="lu_add" Module="In-Portal" Type="0">QWRk</PHRASE>
+ <PHRASE Label="lu_addcat_confirm" Module="In-Portal" Type="0">U3VnZ2VzdCBDYXRlZ29yeSBSZXN1bHRz</PHRASE>
+ <PHRASE Label="lu_addcat_confirm_pending" Module="In-Portal" Type="0">Q2F0ZWdvcnkgQWRkZWQgUGVuZGluZyBBcHByb3ZhbA==</PHRASE>
+ <PHRASE Label="lu_addcat_confirm_pending_text" Module="In-Portal" Type="0">WW91ciBjYXRlZ29yeSBzdWdnZXN0aW9uIGhhcyBiZWVuIGFjY2VwdGVkIGFuZCBpcyBwZW5kaW5nIGFkbWluaXN0cmF0aXZlIGFwcHJvdmFsLg==</PHRASE>
+ <PHRASE Label="lu_addcat_confirm_text" Module="In-Portal" Type="0">VGhlIENhdGVnb3J5IHlvdSBzdWdnZXN0ZWQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHN5c3RlbS4=</PHRASE>
+ <PHRASE Label="lu_added" Module="In-Portal" Type="0">QWRkZWQ=</PHRASE>
+ <PHRASE Label="lu_AddedToday" Module="In-Portal" Type="0">QWRkZWQgdG9kYXk=</PHRASE>
+ <PHRASE Label="lu_added_today" Module="In-Portal" Type="0">QWRkZWQgVG9kYXk=</PHRASE>
+ <PHRASE Label="lu_additional_cats" Module="In-Portal" Type="0">QWRkaXRpb25hbCBjYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="lu_addlink_confirm" Module="In-Portal" Type="0">QWRkIExpbmsgUmVzdWx0cw==</PHRASE>
+ <PHRASE Label="lu_addlink_confirm_pending" Module="In-Portal" Type="0">QWRkIFBlbmRpbmcgTGluayBSZXN1bHRz</PHRASE>
+ <PHRASE Label="lu_addlink_confirm_pending_text" Module="In-Portal" Type="0">WW91ciBsaW5rIGhhcyBiZWVuIGFkZGVkIHBlbmRpbmcgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWwu</PHRASE>
+ <PHRASE Label="lu_addlink_confirm_text" Module="In-Portal" Type="0">VGhlIGxpbmsgeW91IGhhdmUgc3VnZ2VzdGVkIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBkYXRhYmFzZS4=</PHRASE>
+ <PHRASE Label="lu_address" Module="In-Portal" Type="0">QWRkcmVzcw==</PHRASE>
+ <PHRASE Label="lu_address_line" Module="In-Portal" Type="0">QWRkcmVzcyBMaW5l</PHRASE>
+ <PHRASE Label="lu_Address_Line1" Module="In-Portal" Type="0">QWRkcmVzcyBMaW5lIDE=</PHRASE>
+ <PHRASE Label="lu_Address_Line2" Module="In-Portal" Type="0">QWRkcmVzcyBMaW5lIDI=</PHRASE>
+ <PHRASE Label="lu_add_friend" Module="In-Portal" Type="0">QWRkIEZyaWVuZA==</PHRASE>
+ <PHRASE Label="lu_add_link" Module="In-Portal" Type="0">QWRkIExpbms=</PHRASE>
+ <PHRASE Label="lu_add_pm" Module="In-Portal" Type="0">U2VuZCBQcml2YXRlIE1lc3NhZ2U=</PHRASE>
+ <PHRASE Label="lu_add_review" Module="In-Portal" Type="0">QWRkIFJldmlldw==</PHRASE>
+ <PHRASE Label="lu_add_topic" Module="In-Portal" Type="0">QWRkIFRvcGlj</PHRASE>
+ <PHRASE Label="lu_add_to_favorites" Module="In-Portal" Type="0">QWRkIHRvIEZhdm9yaXRlcw==</PHRASE>
+ <PHRASE Label="lu_AdvancedSearch" Module="In-Portal" Type="0">QWR2YW5jZWQgU2VhcmNo</PHRASE>
+ <PHRASE Label="lu_advanced_search" Module="In-Portal" Type="0">QWR2YW5jZWQgU2VhcmNo</PHRASE>
+ <PHRASE Label="lu_advanced_search_link" Module="In-Portal" Type="0">QWR2YW5jZWQ=</PHRASE>
+ <PHRASE Label="lu_advsearch_any" Module="In-Portal" Type="0">QW55</PHRASE>
+ <PHRASE Label="lu_advsearch_contains" Module="In-Portal" Type="0">Q29udGFpbnM=</PHRASE>
+ <PHRASE Label="lu_advsearch_is" Module="In-Portal" Type="0">SXMgRXF1YWwgVG8=</PHRASE>
+ <PHRASE Label="lu_advsearch_isnot" Module="In-Portal" Type="0">SXMgTm90IEVxdWFsIFRv</PHRASE>
+ <PHRASE Label="lu_advsearch_notcontains" Module="In-Portal" Type="0">RG9lcyBOb3QgQ29udGFpbg==</PHRASE>
+ <PHRASE Label="lu_AllProducts" Module="In-Portal" Type="0">QWxsIFByb2R1Y3Rz</PHRASE>
+ <PHRASE Label="lu_AllRightsReserved" Module="In-Portal" Type="0">QWxsIHJpZ2h0cyByZXNlcnZlZC4=</PHRASE>
+ <PHRASE Label="lu_AllWebsite" Module="In-Portal" Type="0">RW50aXJlIFdlYnNpdGU=</PHRASE>
+ <PHRASE Label="lu_already_suggested" Module="In-Portal" Type="0">IGhhcyBhbHJlYWR5IGJlZW4gc3VnZ2VzdGVkIHRvIHRoaXMgc2l0ZSBvbg==</PHRASE>
+ <PHRASE Label="lu_and" Module="In-Portal" Type="0">QW5k</PHRASE>
+ <PHRASE Label="lu_aol_im" Module="In-Portal" Type="0">QU9MIElN</PHRASE>
+ <PHRASE Label="lu_Apr" Module="In-Portal" Type="0">QXBy</PHRASE>
+ <PHRASE Label="lu_AProblemInForm" Module="In-Portal" Type="0">VGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIGZvcm0sIHBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbWVzc2FnZXMgYmVsb3cu</PHRASE>
+ <PHRASE Label="lu_AProblemWithForm" Module="In-Portal" Type="0">VGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIGZvcm0sIHBsZWFzZSBjaGVjayB0aGUgZXJyb3IgbWVzc2FnZXMgYmVsb3c=</PHRASE>
+ <PHRASE Label="lu_articles" Module="In-Portal" Type="0">QXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="lu_article_details" Module="In-Portal" Type="0">QXJ0aWNsZSBEZXRhaWxz</PHRASE>
+ <PHRASE Label="lu_article_name" Module="In-Portal" Type="0">QXJ0aWNsZSBuYW1l</PHRASE>
+ <PHRASE Label="lu_article_reviews" Module="In-Portal" Type="0">QXJ0aWNsZSBSZXZpZXdz</PHRASE>
+ <PHRASE Label="lu_ascending" Module="In-Portal" Type="0">QXNjZW5kaW5n</PHRASE>
+ <PHRASE Label="lu_Aug" Module="In-Portal" Type="0">QXVn</PHRASE>
+ <PHRASE Label="lu_author" Module="In-Portal" Type="0">QXV0aG9y</PHRASE>
+ <PHRASE Label="lu_auto" Module="In-Portal" Type="1">QXV0b21hdGlj</PHRASE>
+ <PHRASE Label="lu_avatar_disabled" Module="In-Portal" Type="0">RGlzYWJsZWQgYXZhdGFy</PHRASE>
+ <PHRASE Label="lu_back" Module="In-Portal" Type="0">QmFjaw==</PHRASE>
+ <PHRASE Label="lu_bbcode" Module="In-Portal" Type="0">QkJDb2Rl</PHRASE>
+ <PHRASE Label="lu_birth_date" Module="In-Portal" Type="0">QmlydGggRGF0ZQ==</PHRASE>
+ <PHRASE Label="lu_blank_password" Module="In-Portal" Type="0">QmxhbmsgcGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="lu_box" Module="In-Portal" Type="0">Ym94</PHRASE>
+ <PHRASE Label="lu_BrowseByCategories" Module="In-Portal" Type="0">QnJvd3NlIEJ5IENhdGVnb3JpZXM=</PHRASE>
+ <PHRASE Label="lu_btn_AddReview" Module="In-Portal" Type="0">QWRkIFJldmlldw==</PHRASE>
+ <PHRASE Label="lu_btn_AddToFavorites" Module="In-Portal" Type="0">QWRkIFRvIEZhdm9yaXRlcw==</PHRASE>
+ <PHRASE Label="lu_btn_AddToWishList" Module="In-Portal" Type="0">QWRkIFRvIFdpc2ggTGlzdA==</PHRASE>
+ <PHRASE Label="lu_btn_advancedsearch" Module="In-Portal" Type="0">QWR2YW5jZWQgc2VhcmNo</PHRASE>
+ <PHRASE Label="lu_btn_Cancel" Module="In-Portal" Type="0">Q2FuY2Vs</PHRASE>
+ <PHRASE Label="lu_btn_Clear" Module="In-Portal" Type="0">Q2xlYXI=</PHRASE>
+ <PHRASE Label="lu_btn_CloseWindow" Module="In-Portal" Type="0">Q2xvc2UgV2luZG93</PHRASE>
+ <PHRASE Label="lu_btn_Contact" Module="In-Portal" Type="0">Q29udGFjdA==</PHRASE>
+ <PHRASE Label="lu_btn_Create" Module="In-Portal" Type="0">Q3JlYXRl</PHRASE>
+ <PHRASE Label="lu_btn_Delete" Module="In-Portal" Type="0">RGVsZXRl</PHRASE>
+ <PHRASE Label="lu_btn_DeleteFile" Module="In-Portal" Type="0">RGVsZXRlIEZpbGU=</PHRASE>
+ <PHRASE Label="lu_btn_DeleteImage" Module="In-Portal" Type="0">RGVsZXRlIEltYWdl</PHRASE>
+ <PHRASE Label="lu_btn_Details" Module="In-Portal" Type="0">RGV0YWlscw==</PHRASE>
+ <PHRASE Label="lu_btn_FindIt" Module="In-Portal" Type="0">RmluZCBpdA==</PHRASE>
+ <PHRASE Label="lu_btn_Go" Module="In-Portal" Type="0">R28=</PHRASE>
+ <PHRASE Label="lu_btn_Modify" Module="In-Portal" Type="0">TW9kaWZ5</PHRASE>
+ <PHRASE Label="lu_btn_MoreImages" Module="In-Portal" Type="0">TW9yZSBJbWFnZXM=</PHRASE>
+ <PHRASE Label="lu_btn_NewLink" Module="In-Portal" Type="0">TmV3IExpbms=</PHRASE>
+ <PHRASE Label="lu_btn_newtopic" Module="In-Portal" Type="0">TmV3IHRvcGlj</PHRASE>
+ <PHRASE Label="lu_btn_No" Module="In-Portal" Type="0">Tm8=</PHRASE>
+ <PHRASE Label="lu_btn_Ok" Module="In-Portal" Type="0">T0s=</PHRASE>
+ <PHRASE Label="lu_btn_Recommend" Module="In-Portal" Type="0">UmVjb21tZW5k</PHRASE>
+ <PHRASE Label="lu_btn_register" Module="In-Portal" Type="0">UmVnaXN0ZXI=</PHRASE>
+ <PHRASE Label="lu_btn_RemoveFromFavorites" Module="In-Portal" Type="0">UmVtb3ZlIEZyb20gRmF2b3JpdGVz</PHRASE>
+ <PHRASE Label="lu_btn_Reset" Module="In-Portal" Type="0">UmVzZXQ=</PHRASE>
+ <PHRASE Label="lu_btn_Select" Module="In-Portal" Type="0">U2VsZWN0</PHRASE>
+ <PHRASE Label="LU_BTN_SENDPASSWORD" Module="In-Portal" Type="0">UmVjb3ZlciBQYXNzd29yZA==</PHRASE>
+ <PHRASE Label="lu_btn_Set" Module="In-Portal" Type="0">U2V0</PHRASE>
+ <PHRASE Label="lu_btn_Sort" Module="In-Portal" Type="0">U29ydA==</PHRASE>
+ <PHRASE Label="lu_btn_Subscribe" Module="In-Portal" Type="0">U3Vic2NyaWJl</PHRASE>
+ <PHRASE Label="lu_btn_Unsubscribe" Module="In-Portal" Type="0">VW5zdWJzY3JpYmU=</PHRASE>
+ <PHRASE Label="lu_btn_Update" Module="In-Portal" Type="0">VXBkYXRl</PHRASE>
+ <PHRASE Label="lu_btn_Yes" Module="In-Portal" Type="0">WWVz</PHRASE>
+ <PHRASE Label="lu_button_forgotpw" Module="In-Portal" Type="0">U2VuZCBQYXNzd29yZA==</PHRASE>
+ <PHRASE Label="lu_button_go" Module="In-Portal" Type="0">R28=</PHRASE>
+ <PHRASE Label="lu_button_join" Module="In-Portal" Type="0">Sm9pbg==</PHRASE>
+ <PHRASE Label="lu_button_mailinglist" Module="In-Portal" Type="0">U3Vic2NyaWJl</PHRASE>
+ <PHRASE Label="lu_button_no" Module="In-Portal" Type="0">Tm8=</PHRASE>
+ <PHRASE Label="lu_button_ok" Module="In-Portal" Type="0">T2s=</PHRASE>
+ <PHRASE Label="lu_button_rate" Module="In-Portal" Type="0">UmF0ZQ==</PHRASE>
+ <PHRASE Label="lu_button_search" Module="In-Portal" Type="0">U2VhcmNo</PHRASE>
+ <PHRASE Label="lu_button_unsubscribe" Module="In-Portal" Type="0">VW5zdWJzY3JpYmU=</PHRASE>
+ <PHRASE Label="lu_button_yes" Module="In-Portal" Type="0">WWVz</PHRASE>
+ <PHRASE Label="lu_by" Module="In-Portal" Type="0">Ynk=</PHRASE>
+ <PHRASE Label="lu_cancel" Module="In-Portal" Type="0">Q2FuY2Vs</PHRASE>
+ <PHRASE Label="lu_captcha" Module="In-Portal" Type="0">U2VjdXJpdHkgY29kZQ==</PHRASE>
+ <PHRASE Label="lu_captcha_error" Module="In-Portal" Type="0">U2VjdXJpdHkgY29kZSBlbnRlcmVkIGluY29ycmVjdGx5</PHRASE>
+ <PHRASE Label="lu_captcha_prompt" Module="In-Portal" Type="0">RW50ZXIgU2VjdXJpdHkgQ29kZQ==</PHRASE>
+ <PHRASE Label="lu_cat" Module="In-Portal" Type="0">Q2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="lu_categories" Module="In-Portal" Type="0">Q2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="lu_CategoriesUpdated" Module="In-Portal" Type="0">TGFzdCB1cGRhdGVkIG9u</PHRASE>
+ <PHRASE Label="lu_categories_updated" Module="In-Portal" Type="0">Y2F0ZWdvcmllcyB1cGRhdGVk</PHRASE>
+ <PHRASE Label="lu_category" Module="In-Portal" Type="0">Q2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="lu_category_information" Module="In-Portal" Type="0">Q2F0ZWdvcnkgSW5mb3JtYXRpb24=</PHRASE>
+ <PHRASE Label="lu_category_search_results" Module="In-Portal" Type="0">Q2F0ZWdvcnkgU2VhcmNoIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="lu_CatLead_Story" Module="In-Portal" Type="0">Q2F0ZWdvcnkgTGVhZCBTdG9yeQ==</PHRASE>
+ <PHRASE Label="lu_cats" Module="In-Portal" Type="0">Q2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="lu_Checkout" Module="In-Portal" Type="0">Q2hlY2tvdXQ=</PHRASE>
+ <PHRASE Label="lu_city" Module="In-Portal" Type="0">Q2l0eQ==</PHRASE>
+ <PHRASE Label="lu_ClickHere" Module="In-Portal" Type="0">Y2xpY2sgaGVyZQ==</PHRASE>
+ <PHRASE Label="lu_close" Module="In-Portal" Type="0">Q2xvc2U=</PHRASE>
+ <PHRASE Label="lu_close_window" Module="In-Portal" Type="0">Q2xvc2UgV2luZG93</PHRASE>
+ <PHRASE Label="lu_code_expired" Module="In-Portal" Type="0">UGFzc3dvcmQgcmVzZXQgaGFzIGNvZGUgZXhwaXJlZA==</PHRASE>
+ <PHRASE Label="lu_code_is_not_valid" Module="In-Portal" Type="0">UGFzc3dvcmQgcmVzZXQgY29kZSBpcyBub3QgdmFsaWQ=</PHRASE>
+ <PHRASE Label="lu_col_AccountInformation" Module="In-Portal" Type="0">QWNjb3VudCBJbmZvcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="lu_col_CurrentValue" Module="In-Portal" Type="0">Q3VycmVudCBWYWx1ZQ==</PHRASE>
+ <PHRASE Label="lu_col_Date" Module="In-Portal" Type="0">RGF0ZQ==</PHRASE>
+ <PHRASE Label="lu_col_DisplayToPublic" Module="In-Portal" Type="0">RGlzcGxheSB0byBQdWJsaWM=</PHRASE>
+ <PHRASE Label="lu_col_Email" Module="In-Portal" Type="0">RW1haWw=</PHRASE>
+ <PHRASE Label="lu_col_LastUpdate" Module="In-Portal" Type="0">TGFzdCBVcGRhdGU=</PHRASE>
+ <PHRASE Label="lu_col_loggedin" Module="In-Portal" Type="0">T25saW5l</PHRASE>
+ <PHRASE Label="lu_col_login" Module="In-Portal" Type="0">TG9naW4=</PHRASE>
+ <PHRASE Label="lu_col_MemberSince" Module="In-Portal" Type="0">TWVtYmVyIHNpbmNl</PHRASE>
+ <PHRASE Label="lu_col_Message" Module="In-Portal" Type="0">TWVzc2FnZQ==</PHRASE>
+ <PHRASE Label="lu_col_Name" Module="In-Portal" Type="0">TmFtZQ==</PHRASE>
+ <PHRASE Label="lu_col_Price" Module="In-Portal" Type="0">UHJpY2U=</PHRASE>
+ <PHRASE Label="lu_col_Views" Module="In-Portal" Type="0">Vmlld3M=</PHRASE>
+ <PHRASE Label="lu_comm_CartChangedAfterLogin" Module="In-Portal" Type="0">UHJpY2VzIG9mIG9uZSBvciBtb3JlIGl0ZW1zIGluIHlvdXIgc2hvcHBpbmcgY2FydCBoYXZlIGJlZW4gY2hhbmdlZCBkdWUgdG8geW91ciBsb2dpbiwgcGxlYXNlIHJldmlldyBjaGFuZ2VzLg==</PHRASE>
+ <PHRASE Label="lu_comm_EmailAddress" Module="In-Portal" Type="0">RW1haWxBZGRyZXNz</PHRASE>
+ <PHRASE Label="lu_comm_Go" Module="In-Portal" Type="0">R28=</PHRASE>
+ <PHRASE Label="lu_comm_NoPermissions" Module="In-Portal" Type="0">Tm8gUGVybWlzc2lvbnM=</PHRASE>
+ <PHRASE Label="lu_comm_Page" Module="In-Portal" Type="0">UGFnZQ==</PHRASE>
+ <PHRASE Label="lu_comm_ProductDescription" Module="In-Portal" Type="0">UHJvZHVjdCBEZXNjcmlwdGlvbg==</PHRASE>
+ <PHRASE Label="lu_company" Module="In-Portal" Type="0">Q29tcGFueQ==</PHRASE>
+ <PHRASE Label="lu_confirm" Module="In-Portal" Type="0">Y29uZmlybQ==</PHRASE>
+ <PHRASE Label="lu_confirmation_title" Module="In-Portal" Type="0">Q29uZmlybWF0aW9uIFRpdGxl</PHRASE>
+ <PHRASE Label="lu_confirm_link_delete_subtitle" Module="In-Portal" Type="0">WW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGxpbmsgYmVsb3cu</PHRASE>
+ <PHRASE Label="lu_confirm_subtitle" Module="In-Portal" Type="0">Q29uZmlybWF0aW9uIFN1YnRpdGxl</PHRASE>
+ <PHRASE Label="lu_confirm_text" Module="In-Portal" Type="0">Q29uZmlybWF0aW9uIHRleHQ=</PHRASE>
+ <PHRASE Label="lu_ContactUs" Module="In-Portal" Type="0">Q29udGFjdCBVcw==</PHRASE>
+ <PHRASE Label="lu_contact_information" Module="In-Portal" Type="0">Q29udGFjdCBJbmZvcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="lu_continue" Module="In-Portal" Type="0">Q29udGludWU=</PHRASE>
+ <PHRASE Label="lu_cookies" Module="In-Portal" Type="1">Q29va2llcw==</PHRASE>
+ <PHRASE Label="lu_cookies_error" Module="In-Portal" Type="0">UGxlYXNlIGVuYWJsZSBjb29raWVzIHRvIGxvZ2luIQ==</PHRASE>
+ <PHRASE Label="lu_country" Module="In-Portal" Type="0">Q291bnRyeQ==</PHRASE>
+ <PHRASE Label="lu_created" Module="In-Portal" Type="0">Y3JlYXRlZA==</PHRASE>
+ <PHRASE Label="lu_create_password" Module="In-Portal" Type="0">Q3JlYXRlIFBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="lu_CreditCards" Module="In-Portal" Type="0">Q3JlZGl0IENhcmRz</PHRASE>
+ <PHRASE Label="lu_CurrentTheme" Module="In-Portal" Type="0">WW91ciBUaGVtZQ==</PHRASE>
+ <PHRASE Label="lu_current_value" Module="In-Portal" Type="0">Q3VycmVudCBWYWx1ZQ==</PHRASE>
+ <PHRASE Label="lu_date" Module="In-Portal" Type="0">RGF0ZQ==</PHRASE>
+ <PHRASE Label="lu_date_created" Module="In-Portal" Type="0">RGF0ZSBjcmVhdGVk</PHRASE>
+ <PHRASE Label="lu_Dec" Module="In-Portal" Type="0">RGVj</PHRASE>
+ <PHRASE Label="lu_default_bbcode" Module="In-Portal" Type="0">RW5hYmxlIEJCQ29kZQ==</PHRASE>
+ <PHRASE Label="lu_default_notify_owner" Module="In-Portal" Type="0">Tm90aWZ5IG1lIG9uIGNoYW5nZXMgdG8gdG9waWNzIEkgY3JlYXRl</PHRASE>
+ <PHRASE Label="lu_default_notify_pm" Module="In-Portal" Type="0">UmVjZWl2ZSBQcml2YXRlIE1lc3NhZ2UgTm90aWZpY2F0aW9ucw==</PHRASE>
+ <PHRASE Label="lu_default_signature" Module="In-Portal" Type="0">QXR0YXRjaCBNeSBTaWduYXR1cmUgdG8gUG9zdHM=</PHRASE>
+ <PHRASE Label="lu_default_smileys" Module="In-Portal" Type="0">U2ltbGllcyBvbiBieSBkZWZhdWx0</PHRASE>
+ <PHRASE Label="lu_default_user_signatures" Module="In-Portal" Type="0">U2lnbmF0dXJlcyBvbiBieSBkZWZhdWx0</PHRASE>
+ <PHRASE Label="lu_delete" Module="In-Portal" Type="0">RGVsZXRl</PHRASE>
+ <PHRASE Label="lu_delete_confirm_title" Module="In-Portal" Type="0">Q29uZmlybSBEZWxldGU=</PHRASE>
+ <PHRASE Label="lu_delete_friend" Module="In-Portal" Type="0">RGVsZXRlIEZyaWVuZA==</PHRASE>
+ <PHRASE Label="lu_delete_link_question" Module="In-Portal" Type="0">QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGxpbms/</PHRASE>
+ <PHRASE Label="lu_del_favorites" Module="In-Portal" Type="0">VGhlIGxpbmsgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gIEZhdm9yaXRlcy4=</PHRASE>
+ <PHRASE Label="lu_descending" Module="In-Portal" Type="0">RGVzY2VuZGluZw==</PHRASE>
+ <PHRASE Label="lu_DescriptionAZ" Module="In-Portal" Type="0">RGVzY3JpcHRpb24gQSB0byBa</PHRASE>
+ <PHRASE Label="lu_DescriptionZA" Module="In-Portal" Type="0">RGVzY3JpcHRpb24gWiB0byBB</PHRASE>
+ <PHRASE Label="lu_description_MyFavorites" Module="In-Portal" Type="0">WW91ciBGYXZvcml0ZSBJdGVtcw==</PHRASE>
+ <PHRASE Label="lu_description_MyPreferences" Module="In-Portal" Type="0">RWRpdCB5b3VyIFByZWZlcmVuY2Vz</PHRASE>
+ <PHRASE Label="lu_description_MyProfile" Module="In-Portal" Type="0">WW91ciBQcm9maWxlIEluZm9ybWF0aW9u</PHRASE>
+ <PHRASE Label="lu_description_PrivateMessages" Module="In-Portal" Type="0">WW91ciBQcml2YXRlIE1lc3NhZ2Vz</PHRASE>
+ <PHRASE Label="lu_details" Module="In-Portal" Type="0">RGV0YWlscw==</PHRASE>
+ <PHRASE Label="lu_details_updated" Module="In-Portal" Type="0">ZGV0YWlscyB1cGRhdGVk</PHRASE>
+ <PHRASE Label="lu_directory" Module="In-Portal" Type="0">RGlyZWN0b3J5</PHRASE>
+ <PHRASE Label="lu_disable" Module="In-Portal" Type="0">RGlzYWJsZQ==</PHRASE>
+ <PHRASE Label="lu_edit" Module="In-Portal" Type="0">TW9kaWZ5</PHRASE>
+ <PHRASE Label="lu_editedby" Module="In-Portal" Type="0">RWRpdGVkIEJ5</PHRASE>
+ <PHRASE Label="lu_editors_pick" Module="In-Portal" Type="0">RWRpdG9ycyBQaWNr</PHRASE>
+ <PHRASE Label="lu_editors_picks" Module="In-Portal" Type="0">RWRpdG9yJ3MgUGlja3M=</PHRASE>
+ <PHRASE Label="lu_edittopic_confirm" Module="In-Portal" Type="0">RWRpdCBUb3BpYyBSZXN1bHRz</PHRASE>
+ <PHRASE Label="lu_edittopic_confirm_pending" Module="In-Portal" Type="0">VG9waWMgbW9kaWZpZWQ=</PHRASE>
+ <PHRASE Label="lu_edittopic_confirm_pending_text" Module="In-Portal" Type="0">VG9waWMgaGFzIGJlZW4gbW9kaWZpZWQgcGVuZGluZyBhZG1pbmlzdHJhdGl2ZSBhcHByb3ZhbA==</PHRASE>
+ <PHRASE Label="lu_edittopic_confirm_text" Module="In-Portal" Type="0">Q2hhbmdlcyBtYWRlIHRvIHRoZSB0b3BpYyBoYXZlIGJlZW4gc2F2ZWQu</PHRASE>
+ <PHRASE Label="lu_edit_post" Module="In-Portal" Type="0">TW9kaWZ5IFBvc3Q=</PHRASE>
+ <PHRASE Label="lu_edit_topic" Module="In-Portal" Type="0">TW9kaWZ5IFRvcGlj</PHRASE>
+ <PHRASE Label="LU_EMAIL" Module="In-Portal" Type="0">RS1NYWls</PHRASE>
+ <PHRASE Label="lu_email_already_exist" Module="In-Portal" Type="0">QSB1c2VyIHdpdGggc3VjaCBlLW1haWwgYWxyZWFkeSBleGlzdHMu</PHRASE>
+ <PHRASE Label="lu_email_send_error" Module="In-Portal" Type="0">TWFpbCBzZW5kaW5nIGZhaWxlZA==</PHRASE>
+ <PHRASE Label="lu_enabled" Module="In-Portal" Type="0">RW5hYmxlZA==</PHRASE>
+ <PHRASE Label="lu_end_on" Module="In-Portal" Type="0">RW5kIE9u</PHRASE>
+ <PHRASE Label="lu_enlarge_picture" Module="In-Portal" Type="0">Wm9vbSBpbg==</PHRASE>
+ <PHRASE Label="lu_enter" Module="In-Portal" Type="0">RW50ZXI=</PHRASE>
+ <PHRASE Label="lu_EnterEmailToRecommend" Module="In-Portal" Type="0">RnJpZW5kJ3MgZS1tYWlsIGFkZHJlc3M=</PHRASE>
+ <PHRASE Label="lu_EnterEmailToSubscribe" Module="In-Portal" Type="0">WW91ciBlLW1haWwgYWRkcmVzcw==</PHRASE>
+ <PHRASE Label="lu_EnterForgotEmail" Module="In-Portal" Type="0">RW50ZXIgeW91ciBFbWFpbCBBZGRyZXNzIGJlbG93IHRvIGhhdmUgeW91ciBhY2NvdW50IGluZm9ybWF0aW9uIHNlbnQgdG8gdGhlIGVtYWlsIGFkZHJlc3Mgb2YgeW91ciBhY2NvdW50Lg==</PHRASE>
+ <PHRASE Label="lu_EnterForgotUserEmail" Module="In-Portal" Type="0">RW50ZXIgeW91ciBVc2VybmFtZSBvciBFbWFpbCBBZGRyZXNzIGJlbG93IHRvIGhhdmUgeW91ciBhY2NvdW50IGluZm9ybWF0aW9uIHNlbnQgdG8gdGhlIGVtYWlsIGFkZHJlc3Mgb2YgeW91ciBhY2NvdW50Lg==</PHRASE>
+ <PHRASE Label="lu_ErrorAlreadyReviewed" Module="In-Portal" Type="0">WW91IGhhdmUgYWxyZWFkeSByZXZpZXdlZCB0aGlzIGl0ZW0hIFlvdXIgYXBwcm92ZWQgcmV2aWV3cyBhcmUgbGlzdGVkIGJlbG93Lg==</PHRASE>
+ <PHRASE Label="lu_errors_on_form" Module="In-Portal" Type="0">TWlzc2luZyBvciBpbnZhbGlkIHZhbHVlcy4gUGxlYXNlIGNoZWNrIGFsbCB0aGUgZmllbGRzIGFuZCB0cnkgYWdhaW4u</PHRASE>
+ <PHRASE Label="lu_error_404_description" Module="In-Portal" Type="0">U29ycnksIHRoZSByZXF1ZXN0ZWQgVVJMIHdhcyBub3QgZm91bmQgb24gb3VyIHNlcnZlci4=</PHRASE>
+ <PHRASE Label="lu_error_404_title" Module="In-Portal" Type="0">RXJyb3IgNDA0IC0gTm90IEZvdW5k</PHRASE>
+ <PHRASE Label="lu_error_alreadyadded" Module="In-Portal" Type="0">Q2F0ZWdvcnkgYWxyZWFkeSBhZGRlZCE=</PHRASE>
+ <PHRASE Label="lu_error_categorylimitreached" Module="In-Portal" Type="0">Q2F0ZWdvcnkgbGltaXQgcmVhY2hlZCE=</PHRASE>
+ <PHRASE Label="lu_error_Required" Module="In-Portal" Type="0">UmVxdWlyZWQ=</PHRASE>
+ <PHRASE Label="lu_error_subtitle" Module="In-Portal" Type="0">RXJyb3I=</PHRASE>
+ <PHRASE Label="lu_error_title" Module="In-Portal" Type="0">RXJyb3I=</PHRASE>
+ <PHRASE Label="lu_error_UserNotFound" Module="In-Portal" Type="0">VXNlciBOb3QgRm91bmQ=</PHRASE>
+ <PHRASE Label="lu_existing_users" Module="In-Portal" Type="0">RXhpc3RpbmcgVXNlcnM=</PHRASE>
+ <PHRASE Label="lu_expires" Module="In-Portal" Type="0">RXhwaXJlcw==</PHRASE>
+ <PHRASE Label="lu_false" Module="In-Portal" Type="0">RmFsc2U=</PHRASE>
+ <PHRASE Label="lu_favorite" Module="In-Portal" Type="0">RmF2b3JpdGU=</PHRASE>
+ <PHRASE Label="lu_favorite_denied" Module="In-Portal" Type="0">VW5hYmxlIHRvIGFkZCBmYXZvcml0ZSwgYWNjZXNzIGRlbmllZA==</PHRASE>
+ <PHRASE Label="lu_Feb" Module="In-Portal" Type="0">RmVi</PHRASE>
+ <PHRASE Label="lu_ferror_forgotpw_nodata" Module="In-Portal" Type="1">WW91IG11c3QgZW50ZXIgYSBVc2VybmFtZSBvciBFbWFpbCBBZGRyZXNzIHRvIHJldHJpdmUgeW91ciBhY2NvdW50IGluZm9ybWF0aW9u</PHRASE>
+ <PHRASE Label="lu_ferror_loginboth" Module="In-Portal" Type="1">Qm90aCBhIFVzZXJuYW1lIGFuZCBQYXNzd29yZCBpcyByZXF1aXJlZA==</PHRASE>
+ <PHRASE Label="lu_ferror_login_login_password" Module="In-Portal" Type="1">UGxlYXNlIGVudGVyIHlvdXIgcGFzc3dvcmQgYW5kIHRyeSBhZ2Fpbg==</PHRASE>
+ <PHRASE Label="lu_ferror_login_login_user" Module="In-Portal" Type="1">WW91IGRpZCBub3QgZW50ZXIgeW91ciBVc2VybmFtZQ==</PHRASE>
+ <PHRASE Label="lu_ferror_m_acctinfo_dob" Module="In-Portal" Type="0">RGF0ZSBvZiBiaXJ0aCBpcyByZXF1aXJlZA==</PHRASE>
+ <PHRASE Label="lu_ferror_m_acctinfo_firstname" Module="In-Portal" Type="0">TWlzc2luZyBmaXJzdCBuYW1l</PHRASE>
+ <PHRASE Label="lu_ferror_m_profile_userid" Module="In-Portal" Type="0">TWlzc2luZyB1c2Vy</PHRASE>
+ <PHRASE Label="lu_ferror_m_register_dob" Module="In-Portal" Type="0">RGF0ZSBvZiBiaXJ0aCBpcyByZXF1aXJlZA==</PHRASE>
+ <PHRASE Label="lu_ferror_m_register_email" Module="In-Portal" Type="0">RW1haWwgaXMgcmVxdWlyZWQ=</PHRASE>
+ <PHRASE Label="lu_ferror_m_register_firstname" Module="In-Portal" Type="0">Rmlyc3QgbmFtZSBpcyByZXF1aXJlZA==</PHRASE>
+ <PHRASE Label="lu_ferror_m_register_password" Module="In-Portal" Type="0">UGFzc3dvcmQgcmVxdWlyZWQ=</PHRASE>
+ <PHRASE Label="lu_ferror_no_access" Module="In-Portal" Type="0">QWNjZXNzIGRlbmllZA==</PHRASE>
+ <PHRASE Label="lu_ferror_pswd_mismatch" Module="In-Portal" Type="0">UGFzc3dvcmRzIGRvIG5vdCBtYXRjaA==</PHRASE>
+ <PHRASE Label="lu_ferror_pswd_toolong" Module="In-Portal" Type="0">VGhlIHBhc3N3b3JkIGlzIHRvbyBsb25n</PHRASE>
+ <PHRASE Label="lu_ferror_pswd_tooshort" Module="In-Portal" Type="0">UGFzc3dvcmQgaXMgdG9vIHNob3J0</PHRASE>
+ <PHRASE Label="lu_ferror_reset_denied" Module="In-Portal" Type="0">Tm90IHJlc2V0</PHRASE>
+ <PHRASE Label="lu_ferror_review_duplicate" Module="In-Portal" Type="0">WW91IGhhdmUgYWxyZWFkeSByZXZpZXdlZCB0aGlzIGl0ZW0u</PHRASE>
+ <PHRASE Label="lu_ferror_toolarge" Module="In-Portal" Type="0">RmlsZSBpcyB0b28gbGFyZ2U=</PHRASE>
+ <PHRASE Label="lu_ferror_unknown_email" Module="In-Portal" Type="1">VXNlciBhY2NvdW50IHdpdGggZ2l2ZW4gRS1tYWlsIG5vdCBmb3VuZA==</PHRASE>
+ <PHRASE Label="lu_ferror_unknown_username" Module="In-Portal" Type="1">VXNlciBhY2NvdW50IHdpdGggZ2l2ZW4gVXNlcm5hbWUgbm90IGZvdW5k</PHRASE>
+ <PHRASE Label="lu_ferror_username_tooshort" Module="In-Portal" Type="0">VXNlciBuYW1lIGlzIHRvbyBzaG9ydA==</PHRASE>
+ <PHRASE Label="lu_ferror_wrongtype" Module="In-Portal" Type="0">V3JvbmcgZmlsZSB0eXBl</PHRASE>
+ <PHRASE Label="lu_fieldcustom__cc1" Module="In-Portal" Type="2">Y2Mx</PHRASE>
+ <PHRASE Label="lu_fieldcustom__cc2" Module="In-Portal" Type="2">Y2My</PHRASE>
+ <PHRASE Label="lu_fieldcustom__cc3" Module="In-Portal" Type="2">Y2Mz</PHRASE>
+ <PHRASE Label="lu_fieldcustom__cc4" Module="In-Portal" Type="2">Y2M0</PHRASE>
+ <PHRASE Label="lu_fieldcustom__cc5" Module="In-Portal" Type="2">Y2M1</PHRASE>
+ <PHRASE Label="lu_fieldcustom__cc6" Module="In-Portal" Type="2">Y2M2</PHRASE>
+ <PHRASE Label="lu_fieldcustom__lc1" Module="In-Portal" Type="2">bGMx</PHRASE>
+ <PHRASE Label="lu_fieldcustom__lc2" Module="In-Portal" Type="2">bGMy</PHRASE>
+ <PHRASE Label="lu_fieldcustom__lc3" Module="In-Portal" Type="2">bGMz</PHRASE>
+ <PHRASE Label="lu_fieldcustom__lc4" Module="In-Portal" Type="2">bGM0</PHRASE>
+ <PHRASE Label="lu_fieldcustom__lc5" Module="In-Portal" Type="2">bGM1</PHRASE>
+ <PHRASE Label="lu_fieldcustom__lc6" Module="In-Portal" Type="2">bGM2</PHRASE>
+ <PHRASE Label="lu_fieldcustom__uc1" Module="In-Portal" Type="2">dWMx</PHRASE>
+ <PHRASE Label="lu_fieldcustom__uc2" Module="In-Portal" Type="2">dWMy</PHRASE>
+ <PHRASE Label="lu_fieldcustom__uc3" Module="In-Portal" Type="2">dWMz</PHRASE>
+ <PHRASE Label="lu_fieldcustom__uc4" Module="In-Portal" Type="2">dWM0</PHRASE>
+ <PHRASE Label="lu_fieldcustom__uc5" Module="In-Portal" Type="2">dWM1</PHRASE>
+ <PHRASE Label="lu_fieldcustom__uc6" Module="In-Portal" Type="2">dWM2</PHRASE>
+ <PHRASE Label="lu_field_archived" Module="In-Portal" Type="0">QXJjaGl2ZSBEYXRl</PHRASE>
+ <PHRASE Label="lu_field_author" Module="In-Portal" Type="0">QXJ0aWNsZSBBdXRob3I=</PHRASE>
+ <PHRASE Label="lu_field_body" Module="In-Portal" Type="0">QXJ0aWNsZSBCb2R5</PHRASE>
+ <PHRASE Label="lu_field_cacheddescendantcatsqty" Module="In-Portal" Type="0">TnVtYmVyIG9mIERlc2NlbmRhbnRz</PHRASE>
+ <PHRASE Label="lu_field_cachednavbar" Module="In-Portal" Type="0">Q2F0ZWdvcnkgUGF0aA==</PHRASE>
+ <PHRASE Label="lu_field_cachedrating" Module="In-Portal" Type="2">UmF0aW5n</PHRASE>
+ <PHRASE Label="lu_field_cachedreviewsqty" Module="In-Portal" Type="2">TnVtYmVyIG9mIFJldmlld3M=</PHRASE>
+ <PHRASE Label="lu_field_cachedvotesqty" Module="In-Portal" Type="2">TnVtYmVyIG9mIFJhdGluZyBWb3Rlcw==</PHRASE>
+ <PHRASE Label="lu_field_categoryid" Module="In-Portal" Type="0">Q2F0ZWdvcnkgSWQ=</PHRASE>
+ <PHRASE Label="lu_field_city" Module="In-Portal" Type="0">Q2l0eQ==</PHRASE>
+ <PHRASE Label="lu_field_country" Module="In-Portal" Type="0">Q291bnRyeQ==</PHRASE>
+ <PHRASE Label="lu_field_createdbyid" Module="In-Portal" Type="2">Q3JlYXRlZCBCeSBVc2VyIElE</PHRASE>
+ <PHRASE Label="lu_field_createdon" Module="In-Portal" Type="2">RGF0ZSBDcmVhdGVk</PHRASE>
+ <PHRASE Label="lu_field_description" Module="In-Portal" Type="2">RGVzY3JpcHRpb24=</PHRASE>
+ <PHRASE Label="lu_field_dob" Module="In-Portal" Type="0">RGF0ZSBvZiBCaXJ0aA==</PHRASE>
+ <PHRASE Label="lu_field_editorspick" Module="In-Portal" Type="0">RWRpdG9yJ3MgcGljaw==</PHRASE>
+ <PHRASE Label="lu_field_email" Module="In-Portal" Type="0">RS1tYWls</PHRASE>
+ <PHRASE Label="lu_field_endon" Module="In-Portal" Type="0">RW5kcyBPbg==</PHRASE>
+ <PHRASE Label="lu_field_excerpt" Module="In-Portal" Type="0">QXJ0aWNsZSBFeGNlcnB0</PHRASE>
+ <PHRASE Label="lu_field_firstname" Module="In-Portal" Type="0">Rmlyc3QgTmFtZQ==</PHRASE>
+ <PHRASE Label="lu_field_hits" Module="In-Portal" Type="2">SGl0cw==</PHRASE>
+ <PHRASE Label="lu_field_hotitem" Module="In-Portal" Type="2">SXRlbSBJcyBIb3Q=</PHRASE>
+ <PHRASE Label="lu_field_lastname" Module="In-Portal" Type="0">TGFzdCBOYW1l</PHRASE>
+ <PHRASE Label="lu_field_lastpostid" Module="In-Portal" Type="2">TGFzdCBQb3N0IElE</PHRASE>
+ <PHRASE Label="lu_field_leadcatstory" Module="In-Portal" Type="0">Q2F0ZWdvcnkgTGVhZCBTdG9yeT8=</PHRASE>
+ <PHRASE Label="lu_field_leadstory" Module="In-Portal" Type="0">TGVhZCBTdG9yeT8=</PHRASE>
+ <PHRASE Label="lu_field_linkid" Module="In-Portal" Type="2">TGluayBJRA==</PHRASE>
+ <PHRASE Label="lu_field_login" Module="In-Portal" Type="0">TG9naW4gKFVzZXIgbmFtZSk=</PHRASE>
+ <PHRASE Label="lu_field_metadescription" Module="In-Portal" Type="0">TWV0YSBEZXNjcmlwdGlvbg==</PHRASE>
+ <PHRASE Label="lu_field_metakeywords" Module="In-Portal" Type="0">TWV0YSBLZXl3b3Jkcw==</PHRASE>
+ <PHRASE Label="lu_field_modified" Module="In-Portal" Type="2">TGFzdCBNb2RpZmllZCBEYXRl</PHRASE>
+ <PHRASE Label="lu_field_modifiedbyid" Module="In-Portal" Type="2">TW9kaWZpZWQgQnkgVXNlciBJRA==</PHRASE>
+ <PHRASE Label="lu_field_name" Module="In-Portal" Type="2">TmFtZQ==</PHRASE>
+ <PHRASE Label="lu_field_newitem" Module="In-Portal" Type="2">SXRlbSBJcyBOZXc=</PHRASE>
+ <PHRASE Label="lu_field_newsid" Module="In-Portal" Type="0">QXJ0aWNsZSBJRA==</PHRASE>
+ <PHRASE Label="lu_field_notifyowneronchanges" Module="In-Portal" Type="2">Tm90aWZ5IE93bmVyIG9mIENoYW5nZXM=</PHRASE>
+ <PHRASE Label="lu_field_orgid" Module="In-Portal" Type="2">T3JpZ2luYWwgSXRlbSBJRA==</PHRASE>
+ <PHRASE Label="lu_field_ownerid" Module="In-Portal" Type="2">T3duZXIgVXNlciBJRA==</PHRASE>
+ <PHRASE Label="lu_field_parentid" Module="In-Portal" Type="0">UGFyZW50IElk</PHRASE>
+ <PHRASE Label="lu_field_parentpath" Module="In-Portal" Type="0">UGFyZW50IENhdGVnb3J5IFBhdGg=</PHRASE>
+ <PHRASE Label="lu_field_password" Module="In-Portal" Type="0">UGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="lu_field_phone" Module="In-Portal" Type="0">VGVsZXBob25l</PHRASE>
+ <PHRASE Label="lu_field_popitem" Module="In-Portal" Type="2">SXRlbSBJcyBQb3B1bGFy</PHRASE>
+ <PHRASE Label="lu_field_portaluserid" Module="In-Portal" Type="0">VXNlciBJRA==</PHRASE>
+ <PHRASE Label="lu_field_postedby" Module="In-Portal" Type="2">UG9zdGVkIEJ5</PHRASE>
+ <PHRASE Label="lu_field_posts" Module="In-Portal" Type="0">VG9waWMgUG9zdHM=</PHRASE>
+ <PHRASE Label="lu_field_priority" Module="In-Portal" Type="2">UHJpb3JpdHk=</PHRASE>
+ <PHRASE Label="lu_field_qtysold" Module="In-Portal" Type="1">UXR5IFNvbGQ=</PHRASE>
+ <PHRASE Label="lu_field_resourceid" Module="In-Portal" Type="2">UmVzb3VyY2UgSUQ=</PHRASE>
+ <PHRASE Label="lu_field_startdate" Module="In-Portal" Type="0">U3RhcnQgRGF0ZQ==</PHRASE>
+ <PHRASE Label="lu_field_state" Module="In-Portal" Type="0">U3RhdGU=</PHRASE>
+ <PHRASE Label="lu_field_status" Module="In-Portal" Type="2">U3RhdHVz</PHRASE>
+ <PHRASE Label="lu_field_street" Module="In-Portal" Type="0">U3RyZWV0IEFkZHJlc3M=</PHRASE>
+ <PHRASE Label="lu_field_textformat" Module="In-Portal" Type="0">QXJ0aWNsZSBUZXh0</PHRASE>
+ <PHRASE Label="lu_field_title" Module="In-Portal" Type="0">QXJ0aWNsZSBUaXRsZQ==</PHRASE>
+ <PHRASE Label="lu_field_topicid" Module="In-Portal" Type="2">VG9waWMgSUQ=</PHRASE>
+ <PHRASE Label="lu_field_topictext" Module="In-Portal" Type="2">VG9waWMgVGV4dA==</PHRASE>
+ <PHRASE Label="lu_field_topictype" Module="In-Portal" Type="0">VG9waWMgVHlwZQ==</PHRASE>
+ <PHRASE Label="lu_field_topseller" Module="In-Portal" Type="1">SXRlbSBJcyBhIFRvcCBTZWxsZXI=</PHRASE>
+ <PHRASE Label="lu_field_tz" Module="In-Portal" Type="0">VGltZSBab25l</PHRASE>
+ <PHRASE Label="lu_field_url" Module="In-Portal" Type="2">VVJM</PHRASE>
+ <PHRASE Label="lu_field_views" Module="In-Portal" Type="0">Vmlld3M=</PHRASE>
+ <PHRASE Label="lu_field_zip" Module="In-Portal" Type="0">WmlwIChQb3N0YWwpIENvZGU=</PHRASE>
+ <PHRASE Label="lu_first_name" Module="In-Portal" Type="0">Rmlyc3QgTmFtZQ==</PHRASE>
+ <PHRASE Label="lu_fld_AddressLine1" Module="In-Portal" Type="0">QWRkcmVzcyBsaW5lIDE=</PHRASE>
+ <PHRASE Label="lu_fld_AddressLine2" Module="In-Portal" Type="0">QWRkcmVzcyBsaW5lIDI=</PHRASE>
+ <PHRASE Label="lu_fld_BirthDate" Module="In-Portal" Type="0">RGF0ZSBvZiBiaXJ0aA==</PHRASE>
+ <PHRASE Label="lu_fld_body" Module="In-Portal" Type="0">Qm9keQ==</PHRASE>
+ <PHRASE Label="lu_fld_Captcha" Module="In-Portal" Type="0">Q2FwdGNoYSBJbWFnZQ==</PHRASE>
+ <PHRASE Label="lu_fld_City" Module="In-Portal" Type="0">Q2l0eQ==</PHRASE>
+ <PHRASE Label="lu_fld_Comments" Module="In-Portal" Type="0">UXVlc3Rpb25z</PHRASE>
+ <PHRASE Label="lu_fld_Company" Module="In-Portal" Type="0">Q29tcGFueQ==</PHRASE>
+ <PHRASE Label="lu_fld_Country" Module="In-Portal" Type="0">Q291bnRyeQ==</PHRASE>
+ <PHRASE Label="lu_fld_Description" Module="In-Portal" Type="0">RGVzY3JpcHRpb24=</PHRASE>
+ <PHRASE Label="lu_fld_Duration" Module="In-Portal" Type="0">RHVyYXRpb24=</PHRASE>
+ <PHRASE Label="lu_fld_Email" Module="In-Portal" Type="0">RS1NYWls</PHRASE>
+ <PHRASE Label="lu_fld_Fax" Module="In-Portal" Type="0">RmF4</PHRASE>
+ <PHRASE Label="lu_fld_File1" Module="In-Portal" Type="0">UHJpbWFyeSBGaWxl</PHRASE>
+ <PHRASE Label="lu_fld_File2" Module="In-Portal" Type="0">Mm5kIEZpbGU=</PHRASE>
+ <PHRASE Label="lu_fld_File3" Module="In-Portal" Type="0">M3JkIEZpbGU=</PHRASE>
+ <PHRASE Label="lu_fld_FileName" Module="In-Portal" Type="0">RmlsZW5hbWU=</PHRASE>
+ <PHRASE Label="lu_fld_FirstName" Module="In-Portal" Type="0">Rmlyc3QgbmFtZQ==</PHRASE>
+ <PHRASE Label="lu_fld_FullName" Module="In-Portal" Type="0">RnVsbCBuYW1l</PHRASE>
+ <PHRASE Label="lu_fld_Image1" Module="In-Portal" Type="0">Mm5kIEltYWdl</PHRASE>
+ <PHRASE Label="lu_fld_Image2" Module="In-Portal" Type="0">M3JkIEltYWdl</PHRASE>
+ <PHRASE Label="lu_fld_LastName" Module="In-Portal" Type="0">TGFzdCBuYW1l</PHRASE>
+ <PHRASE Label="lu_fld_Login" Module="In-Portal" Type="0">VXNlcm5hbWU=</PHRASE>
+ <PHRASE Label="lu_fld_module" Module="In-Portal" Type="0">TW9kdWxl</PHRASE>
+ <PHRASE Label="lu_fld_MoreCategories" Module="In-Portal" Type="0">QWRkaXRpb25hbCBDYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="lu_fld_Name" Module="In-Portal" Type="0">TmFtZQ==</PHRASE>
+ <PHRASE Label="lu_fld_Password" Module="In-Portal" Type="0">UGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="lu_fld_Phone" Module="In-Portal" Type="0">UGhvbmU=</PHRASE>
+ <PHRASE Label="lu_fld_phrase" Module="In-Portal" Type="0">UGhyYXNl</PHRASE>
+ <PHRASE Label="lu_fld_Price" Module="In-Portal" Type="0">UHJpY2U=</PHRASE>
+ <PHRASE Label="lu_fld_PrimaryImage" Module="In-Portal" Type="0">UHJpbWFyeSBJbWFnZQ==</PHRASE>
+ <PHRASE Label="lu_fld_primary_translation" Module="In-Portal" Type="0">UHJpbWFyeSBUcmFuc2xhdGlvbg==</PHRASE>
+ <PHRASE Label="lu_fld_Rating" Module="In-Portal" Type="0">UmF0aW5n</PHRASE>
+ <PHRASE Label="lu_fld_Referrer" Module="In-Portal" Type="0">UmVmZXJyZXI=</PHRASE>
+ <PHRASE Label="lu_fld_ReviewText" Module="In-Portal" Type="0">UmV2aWV3IHRleHQ=</PHRASE>
+ <PHRASE Label="lu_fld_SelectAddress" Module="In-Portal" Type="0">UGxlYXNlIHNlbGVjdCB5b3VyIGFkZHJlc3M=</PHRASE>
+ <PHRASE Label="lu_fld_size" Module="In-Portal" Type="0">U2l6ZQ==</PHRASE>
+ <PHRASE Label="lu_fld_State" Module="In-Portal" Type="0">U3RhdGU=</PHRASE>
+ <PHRASE Label="lu_fld_street" Module="In-Portal" Type="0">U3RyZWV0</PHRASE>
+ <PHRASE Label="lu_fld_title" Module="In-Portal" Type="0">VGl0bGU=</PHRASE>
+ <PHRASE Label="lu_fld_translation" Module="In-Portal" Type="0">VHJhbnNsYXRpb24=</PHRASE>
+ <PHRASE Label="lu_fld_VerifyPassword" Module="In-Portal" Type="0">VmVyaWZ5IFBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="lu_fld_version" Module="In-Portal" Type="0">VmVyc2lvbg==</PHRASE>
+ <PHRASE Label="lu_fld_Zip" Module="In-Portal" Type="0">WmlwIGNvZGU=</PHRASE>
+ <PHRASE Label="lu_fld_ZipCode" Module="In-Portal" Type="0">WmlwIGNvZGU=</PHRASE>
+ <PHRASE Label="lu_folder_Inbox" Module="In-Portal" Type="0">SW5ib3g=</PHRASE>
+ <PHRASE Label="lu_ForgotPassword" Module="In-Portal" Type="0">Rm9yZ290IHBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="lu_forgotpw_confirm" Module="In-Portal" Type="0">UGFzc3dvcmQgUmVxdWVzdCBDb25maXJtYXRpb24=</PHRASE>
+ <PHRASE Label="lu_forgotpw_confirm_reset" Module="In-Portal" Type="0">Q29uZmlybSBwYXNzd29yZCByZXNldA==</PHRASE>
+ <PHRASE Label="lu_forgotpw_confirm_text" Module="In-Portal" Type="0">WW91IGhhdmUgY2hvc2VkIHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQuIEEgbmV3IHBhc3N3b3JkIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHRoZSBzeXN0ZW0uIEl0IGhhcyBiZWVuIGVtYWlsZWQgdG8geW91ciBhZGRyZXNzIG9uIGZpbGUu</PHRASE>
+ <PHRASE Label="lu_forgotpw_confirm_text_reset" Module="In-Portal" Type="0">UGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZXNldCB5b3VyIHBhc3N3b3JkLg==</PHRASE>
+ <PHRASE Label="lu_forgot_password" Module="In-Portal" Type="0">Rm9yZ290IFBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="lu_forgot_password_link" Module="In-Portal" Type="0">Rm9yZ290IFBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="lu_forgot_pw_description" Module="In-Portal" Type="1">RW50ZXIgeW91ciBVc2VybmFtZSBvciBFbWFpbCBBZGRyZXNzIGJlbG93IHRvIGhhdmUgeW91ciBhY2NvdW50IGluZm9ybWF0aW9uIHNlbnQgdG8gdGhlIGVtYWlsIGFkZHJlc3Mgb2YgeW91ciBhY2NvdW50Lg==</PHRASE>
+ <PHRASE Label="lu_forums" Module="In-Portal" Type="0">Rm9ydW1z</PHRASE>
+ <PHRASE Label="lu_forum_hdrtext" Module="In-Portal" Type="0">V2VsY29tZSB0byBJbi1wb3J0YWwgZm9ydW1zIQ==</PHRASE>
+ <PHRASE Label="lu_forum_hdrwelcometext" Module="In-Portal" Type="0">V2VsY29tZSB0byBJbi1idWxsZXRpbiBGb3J1bXMh</PHRASE>
+ <PHRASE Label="lu_forum_locked_for_posting" Module="In-Portal" Type="0">Rm9ydW0gaXMgbG9ja2VkIGZvciBwb3N0aW5n</PHRASE>
+ <PHRASE Label="lu_found" Module="In-Portal" Type="0">Rm91bmQ6</PHRASE>
+ <PHRASE Label="lu_from" Module="In-Portal" Type="0">RnJvbQ==</PHRASE>
+ <PHRASE Label="lu_FullName" Module="In-Portal" Type="2">RnVsbCBuYW1l</PHRASE>
+ <PHRASE Label="lu_full_story" Module="In-Portal" Type="0">RnVsbCBTdG9yeQ==</PHRASE>
+ <PHRASE Label="lu_getting_rated" Module="In-Portal" Type="0">R2V0dGluZyBSYXRlZA==</PHRASE>
+ <PHRASE Label="lu_getting_rated_text" Module="In-Portal" Type="0">WW91IG1heSBwbGFjZSB0aGUgZm9sbG93aW5nIEhUTUwgY29kZSBvbiB5b3VyIHdlYiBzaXRlIHRvIGFsbG93IHlvdXIgc2l0ZSB2aXNpdG9ycyB0byB2b3RlIGZvciB0aGlzIHJlc291cmNl</PHRASE>
+ <PHRASE Label="lu_Go" Module="In-Portal" Type="0">R28=</PHRASE>
+ <PHRASE Label="lu_guest" Module="In-Portal" Type="0">R3Vlc3Q=</PHRASE>
+ <PHRASE Label="lu_help" Module="In-Portal" Type="0">SGVscA==</PHRASE>
+ <PHRASE Label="lu_Here" Module="In-Portal" Type="0">SGVyZQ==</PHRASE>
+ <PHRASE Label="lu_hits" Module="In-Portal" Type="0">SGl0cw==</PHRASE>
+ <PHRASE Label="lu_HitsHL" Module="In-Portal" Type="0">SGl0cyBIbyB0byBMb3c=</PHRASE>
+ <PHRASE Label="lu_HitsLH" Module="In-Portal" Type="0">SGl0cyBMb3cgdG8gSGk=</PHRASE>
+ <PHRASE Label="lu_home" Module="In-Portal" Type="0">SG9tZQ==</PHRASE>
+ <PHRASE Label="lu_hot" Module="In-Portal" Type="0">SG90</PHRASE>
+ <PHRASE Label="lu_hot_links" Module="In-Portal" Type="0">SG90IExpbmtz</PHRASE>
+ <PHRASE Label="lu_in" Module="In-Portal" Type="0">aW4=</PHRASE>
+ <PHRASE Label="lu_inbox" Module="In-Portal" Type="0">SW5ib3g=</PHRASE>
+ <PHRASE Label="lu_incorrect_login" Module="In-Portal" Type="0">VXNlcm5hbWUvUGFzc3dvcmQgSW5jb3JyZWN0</PHRASE>
+ <PHRASE Label="lu_IndicatesRequired" Module="In-Portal" Type="0">SW5kaWNhdGVzIFJlcXVpcmVkIGZpZWxkcw==</PHRASE>
+ <PHRASE Label="lu_InvalidEmail" Module="In-Portal" Type="0">SW52YWxpZCBlLW1haWwgYWRkcmVzcw==</PHRASE>
+ <PHRASE Label="lu_invalid_emailaddress" Module="In-Portal" Type="0">RS1tYWlsIGFkZHJlc3MgbWlzc2luZyBvciBpbnZhbGlk</PHRASE>
+ <PHRASE Label="lu_invalid_password" Module="In-Portal" Type="0">SW52YWxpZCBQYXNzd29yZA==</PHRASE>
+ <PHRASE Label="lu_in_this_message" Module="In-Portal" Type="0">SW4gdGhpcyBtZXNzYWdl</PHRASE>
+ <PHRASE Label="lu_ItemPrimaryCategory" Module="In-Portal" Type="0">UHJpbWFyeSBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="lu_ItemsPerPage" Module="In-Portal" Type="0">SXRlbXMgUGVyIFBhZ2U=</PHRASE>
+ <PHRASE Label="lu_items_since_last" Module="In-Portal" Type="0">SXRlbXMgc2luY2UgbGFzdCBsb2dpbg==</PHRASE>
+ <PHRASE Label="lu_Jan" Module="In-Portal" Type="0">SmFu</PHRASE>
+ <PHRASE Label="lu_joined" Module="In-Portal" Type="0">Sm9pbmVk</PHRASE>
+ <PHRASE Label="lu_Jul" Module="In-Portal" Type="0">SnVs</PHRASE>
+ <PHRASE Label="lu_Jun" Module="In-Portal" Type="0">SnVu</PHRASE>
+ <PHRASE Label="lu_keywords_tooshort" Module="In-Portal" Type="0">S2V5d29yZCBpcyB0b28gc2hvcnQ=</PHRASE>
+ <PHRASE Label="lu_lastpost" Module="In-Portal" Type="0">TGFzdCBQb3N0</PHRASE>
+ <PHRASE Label="lu_lastposter" Module="In-Portal" Type="0">TGFzdCBQb3N0IEJ5</PHRASE>
+ <PHRASE Label="lu_lastupdate" Module="In-Portal" Type="0">TGFzdCBVcGRhdGU=</PHRASE>
+ <PHRASE Label="lu_last_name" Module="In-Portal" Type="0">TGFzdCBOYW1l</PHRASE>
+ <PHRASE Label="lu_legend" Module="In-Portal" Type="0">TGVnZW5k</PHRASE>
+ <PHRASE Label="lu_links" Module="In-Portal" Type="0">TGlua3M=</PHRASE>
+ <PHRASE Label="lu_links_updated" Module="In-Portal" Type="0">bGlua3MgdXBkYXRlZA==</PHRASE>
+ <PHRASE Label="lu_link_addreview_confirm_pending_text" Module="In-Portal" Type="0">WW91ciByZXZpZXcgaGFzIGJlZW4gYWRkZWQgcGVuZGluZyBhZG1pbmlzdHJhdGl2ZSBhcHByb3ZhbA==</PHRASE>
+ <PHRASE Label="lu_link_addreview_confirm_text" Module="In-Portal" Type="0">WW91ciByZXZpZXcgaGFzIGJlZW4gYWRkZWQ=</PHRASE>
+ <PHRASE Label="lu_link_details" Module="In-Portal" Type="0">TGluayBEZXRhaWxz</PHRASE>
+ <PHRASE Label="lu_link_information" Module="In-Portal" Type="0">TGluayBJbmZvcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="lu_link_name" Module="In-Portal" Type="0">TGluayBOYW1l</PHRASE>
+ <PHRASE Label="lu_link_rate_confirm" Module="In-Portal" Type="0">TGluayBSYXRpbmcgUmVzdWx0cw==</PHRASE>
+ <PHRASE Label="lu_link_rate_confirm_duplicate_text" Module="In-Portal" Type="0">WW91IGhhdmUgYWxyZWFkeSByYXRlZCB0aGlzIGxpbmsu</PHRASE>
+ <PHRASE Label="lu_link_rate_confirm_text" Module="In-Portal" Type="0">VGhhbmsgZm9yIHJhdGluZyB0aGlzIGxpbmsuICBZb3VyIGlucHV0IGhhcyBiZWVuIHJlY29yZGVkLg==</PHRASE>
+ <PHRASE Label="lu_link_reviews" Module="In-Portal" Type="0">TGluayBSZXZpZXdz</PHRASE>
+ <PHRASE Label="lu_link_review_confirm" Module="In-Portal" Type="0">TGluayBSZXZpZXcgUmVzdWx0cw==</PHRASE>
+ <PHRASE Label="lu_link_review_confirm_pending" Module="In-Portal" Type="0">TGluayBSZXZpZXcgUGVuZGluZw==</PHRASE>
+ <PHRASE Label="lu_link_search_results" Module="In-Portal" Type="0">TGluayBTZWFyY2ggUmVzdWx0cw==</PHRASE>
+ <PHRASE Label="lu_location" Module="In-Portal" Type="0">TG9jYXRpb24=</PHRASE>
+ <PHRASE Label="lu_locked_topic" Module="In-Portal" Type="0">TG9ja2VkIHRvcGlj</PHRASE>
+ <PHRASE Label="lu_lock_unlock" Module="In-Portal" Type="0">TG9jay9VbmxvY2s=</PHRASE>
+ <PHRASE Label="lu_login" Module="In-Portal" Type="0">TG9naW4=</PHRASE>
+ <PHRASE Label="lu_login_information" Module="In-Portal" Type="0">TG9naW4gSW5mb3JtYXRpb24=</PHRASE>
+ <PHRASE Label="lu_login_name" Module="In-Portal" Type="0">TG9naW4gTmFtZQ==</PHRASE>
+ <PHRASE Label="lu_login_title" Module="In-Portal" Type="0">TG9naW4=</PHRASE>
+ <PHRASE Label="lu_logout" Module="In-Portal" Type="0">TG9nIE91dA==</PHRASE>
+ <PHRASE Label="lu_LogoutText" Module="In-Portal" Type="0">TG9nb3V0IG9mIHlvdXIgYWNjb3VudA==</PHRASE>
+ <PHRASE Label="lu_logout_description" Module="In-Portal" Type="0">TG9nIG91dCBvZiB0aGUgc3lzdGVt</PHRASE>
+ <PHRASE Label="lu_mailinglist" Module="In-Portal" Type="0">TWFpbGluZyBMaXN0</PHRASE>
+ <PHRASE Label="lu_Mar" Module="In-Portal" Type="0">TWFy</PHRASE>
+ <PHRASE Label="lu_May" Module="In-Portal" Type="0">TWF5</PHRASE>
+ <PHRASE Label="lu_message" Module="In-Portal" Type="0">TWVzc2FnZQ==</PHRASE>
+ <PHRASE Label="lu_message_body" Module="In-Portal" Type="0">TWVzc2FnZSBCb2R5</PHRASE>
+ <PHRASE Label="lu_min_pw_reset_interval" Module="In-Portal" Type="0">UGFzc3dvcmQgcmVzZXQgaW50ZXJ2YWw=</PHRASE>
+ <PHRASE Label="lu_missing_error" Module="In-Portal" Type="0">TWlzc2luZyBUZW1wbGF0ZQ==</PHRASE>
+ <PHRASE Label="lu_modified" Module="In-Portal" Type="0">TW9kaWZpZWQ=</PHRASE>
+ <PHRASE Label="lu_modifylink_confirm" Module="In-Portal" Type="0">TGluayBNb2RpZmljYXRpb24gQ29uZmlybWF0aW9u</PHRASE>
+ <PHRASE Label="lu_modifylink_confirm_text" Module="In-Portal" Type="0">WW91ciBsaW5rIGhhcyBiZWVuIG1vZGlmaWVkLg==</PHRASE>
+ <PHRASE Label="lu_modifylink_pending_confirm" Module="In-Portal" Type="0">TGluayBtb2RpZmljYXRpb24gY29tcGxldGU=</PHRASE>
+ <PHRASE Label="lu_modifylink_pending_confirm_text" Module="In-Portal" Type="0">WW91ciBsaW5rIG1vZGlmaWNhdGlvbiBoYXMgYmVlbiBzdWJtaXR0ZWQgcGVuZGluZyBhZG1pbmlzdHJhdGl2ZSBhcHByb3ZhbA==</PHRASE>
+ <PHRASE Label="lu_modify_link" Module="In-Portal" Type="0">TW9kaWZ5IExpbms=</PHRASE>
+ <PHRASE Label="lu_more" Module="In-Portal" Type="0">TW9yZQ==</PHRASE>
+ <PHRASE Label="lu_MoreDetails" Module="In-Portal" Type="0">TW9yZSBkZXRhaWxz</PHRASE>
+ <PHRASE Label="lu_more_info" Module="In-Portal" Type="0">TW9yZSBJbmZv</PHRASE>
+ <PHRASE Label="lu_msg_welcome" Module="In-Portal" Type="0">V2VsY29tZQ==</PHRASE>
+ <PHRASE Label="lu_myaccount" Module="In-Portal" Type="0">TXkgQWNjb3VudA==</PHRASE>
+ <PHRASE Label="lu_MyFavorites" Module="In-Portal" Type="0">TXkgRmF2b3JpdGVz</PHRASE>
+ <PHRASE Label="lu_MyPreferences" Module="In-Portal" Type="0">TXkgUHJlZmVyZW5jZXM=</PHRASE>
+ <PHRASE Label="lu_MyProfile" Module="In-Portal" Type="0">TXkgUHJvZmlsZQ==</PHRASE>
+ <PHRASE Label="lu_my_articles" Module="In-Portal" Type="0">TXkgQXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="lu_my_articles_description" Module="In-Portal" Type="0">TmV3cyBBcnRpY2xlcyB5b3UgaGF2ZSB3cml0dGVu</PHRASE>
+ <PHRASE Label="lu_my_favorites" Module="In-Portal" Type="0">TXkgRmF2b3JpdGVz</PHRASE>
+ <PHRASE Label="lu_my_favorites_description" Module="In-Portal" Type="0">SXRlbXMgeW91IGhhdmUgbWFya2VkIGFzIGZhdm9yaXRl</PHRASE>
+ <PHRASE Label="lu_my_friends" Module="In-Portal" Type="0">TXkgRnJpZW5kcw==</PHRASE>
+ <PHRASE Label="lu_my_friends_description" Module="In-Portal" Type="0">VmlldyB5b3VyIGxpc3Qgb2YgZnJpZW5kcw==</PHRASE>
+ <PHRASE Label="lu_my_info" Module="In-Portal" Type="0">TXkgUHJvZmlsZQ==</PHRASE>
+ <PHRASE Label="lu_my_info_description" Module="In-Portal" Type="0">WW91ciBBY2NvdW50IEluZm9ybWF0aW9u</PHRASE>
+ <PHRASE Label="lu_my_items_title" Module="In-Portal" Type="0">TXkgSXRlbXM=</PHRASE>
+ <PHRASE Label="lu_my_links" Module="In-Portal" Type="0">TXkgTGlua3M=</PHRASE>
+ <PHRASE Label="lu_my_links_description" Module="In-Portal" Type="0">TGlua3MgeW91IGhhdmUgYWRkZWQgdG8gdGhlIHN5c3RlbQ==</PHRASE>
+ <PHRASE Label="lu_my_link_favorites" Module="In-Portal" Type="0">TXkgRmF2b3JpdGVz</PHRASE>
+ <PHRASE Label="lu_my_news" Module="In-Portal" Type="0">TXkgTmV3cw==</PHRASE>
+ <PHRASE Label="lu_my_news_favorites" Module="In-Portal" Type="0">RmF2b3JpdGUgQXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="lu_my_preferences" Module="In-Portal" Type="0">TXkgUHJlZmVyZW5jZXM=</PHRASE>
+ <PHRASE Label="lu_my_preferences_description" Module="In-Portal" Type="0">RWRpdCB5b3VyIEluLVBvcnRhbCBQcmVmZXJlbmNlcw==</PHRASE>
+ <PHRASE Label="lu_my_profile" Module="In-Portal" Type="0">TXkgUHJvZmlsZQ==</PHRASE>
+ <PHRASE Label="lu_my_topics" Module="In-Portal" Type="0">TXkgVG9waWNz</PHRASE>
+ <PHRASE Label="lu_my_topics_description" Module="In-Portal" Type="0">RGlzY3Vzc2lvbnMgeW91IGhhdmUgY3JlYXRlZA==</PHRASE>
+ <PHRASE Label="lu_my_topic_favorites" Module="In-Portal" Type="0">TXkgVG9waWNz</PHRASE>
+ <PHRASE Label="lu_Name" Module="In-Portal" Type="0">TmFtZQ==</PHRASE>
+ <PHRASE Label="lu_nav_addlink" Module="In-Portal" Type="0">QWRkIExpbms=</PHRASE>
+ <PHRASE Label="lu_new" Module="In-Portal" Type="0">TmV3</PHRASE>
+ <PHRASE Label="lu_NewCustomers" Module="In-Portal" Type="0">TmV3IEN1c3RvbWVycw==</PHRASE>
+ <PHRASE Label="lu_newpm_confirm" Module="In-Portal" Type="0">TmV3IFByaXZhdGUgTWVzc2FnZSBDb25maXJtYXRpb24=</PHRASE>
+ <PHRASE Label="lu_newpm_confirm_text" Module="In-Portal" Type="0">WW91ciBwcml2YXRlIG1lc3NhZ2UgaGFzIGJlZW4gc2VudC4=</PHRASE>
+ <PHRASE Label="lu_news" Module="In-Portal" Type="0">TmV3cw==</PHRASE>
+ <PHRASE Label="lu_news_addreview_confirm_text" Module="In-Portal" Type="0">VGhlIGFydGljbGUgcmV2aWV3IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBkYXRhYmFzZS4=</PHRASE>
+ <PHRASE Label="lu_news_addreview_confirm__pending_text" Module="In-Portal" Type="0">QXJ0aWNsZSByZXZpZXcgaGFzIGJlZW4gc3VibWl0dGVkIHBlbmRpbmcgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWw=</PHRASE>
+ <PHRASE Label="lu_news_details" Module="In-Portal" Type="0">TmV3cyBEZXRhaWxz</PHRASE>
+ <PHRASE Label="lu_news_rate_confirm" Module="In-Portal" Type="0">UmF0ZSBBcnRpY2xlIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="lu_news_rate_confirm_duplicate_text" Module="In-Portal" Type="0">WW91IGhhdmUgYWxyZWFkeSByYXRlZCB0aGlzIGFydGljbGU=</PHRASE>
+ <PHRASE Label="lu_news_rate_confirm_text" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciByYXRpbmcgdGhpcyBhcnRpY2xlLiBZb3VyIHZvdGUgaGFzIGJlZW4gcmVjb3JkZWQu</PHRASE>
+ <PHRASE Label="lu_news_review_confirm" Module="In-Portal" Type="0">VGhlIHJldmlldyBoYXMgYmVlbiBhZGRlZA==</PHRASE>
+ <PHRASE Label="lu_news_review_confirm_pending" Module="In-Portal" Type="0">QXJ0aWNsZSByZXZpZXcgc3VibWl0dGVk</PHRASE>
+ <PHRASE Label="lu_news_search_results" Module="In-Portal" Type="0">U2VhcmNoIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="lu_news_updated" Module="In-Portal" Type="0">bmV3cyB1cGRhdGVk</PHRASE>
+ <PHRASE Label="lu_newtopic_confirm" Module="In-Portal" Type="0">QWRkIFRvcGljIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="lu_newtopic_confirm_pending" Module="In-Portal" Type="0">WW91ciB0b3BpYyBoYXMgYmVlbiBhZGRlZA==</PHRASE>
+ <PHRASE Label="lu_newtopic_confirm_pending_text" Module="In-Portal" Type="0">VGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIG11c3QgYXBwcm92ZSB5b3VyIHRvcGljIGJlZm9yZSBpdCBpcyBwdWJsaWNseSBhdmFpbGFibGUu</PHRASE>
+ <PHRASE Label="lu_newtopic_confirm_text" Module="In-Portal" Type="0">VGhlIFRvcGljIHlvdSBoYXZlIGNyZWF0ZWQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHN5c3RlbQ==</PHRASE>
+ <PHRASE Label="lu_new_articles" Module="In-Portal" Type="0">TmV3IGFydGljbGVz</PHRASE>
+ <PHRASE Label="lu_new_links" Module="In-Portal" Type="0">TmV3IExpbmtz</PHRASE>
+ <PHRASE Label="lu_new_news" Module="In-Portal" Type="0">TmV3IGFydGljbGVz</PHRASE>
+ <PHRASE Label="lu_new_pm" Module="In-Portal" Type="0">TmV3IFByaXZhdGUgTWVzc2FnZQ==</PHRASE>
+ <PHRASE Label="lu_new_posts" Module="In-Portal" Type="0">Rm9ydW0gaGFzIG5ldyBwb3N0cw==</PHRASE>
+ <PHRASE Label="lu_new_private_message" Module="In-Portal" Type="0">TmV3IHByaXZhdGUgbWVzc2FnZQ==</PHRASE>
+ <PHRASE Label="lu_new_since_links" Module="In-Portal" Type="0">TmV3IGxpbmtz</PHRASE>
+ <PHRASE Label="lu_new_since_news" Module="In-Portal" Type="0">TmV3IGFydGljbGVz</PHRASE>
+ <PHRASE Label="lu_new_since_topics" Module="In-Portal" Type="0">TmV3IHRvcGljcw==</PHRASE>
+ <PHRASE Label="lu_new_topic" Module="In-Portal" Type="0">TmV3IFRvcGlj</PHRASE>
+ <PHRASE Label="lu_new_users" Module="In-Portal" Type="0">TmV3IFVzZXJz</PHRASE>
+ <PHRASE Label="lu_no" Module="In-Portal" Type="0">Tm8=</PHRASE>
+ <PHRASE Label="lu_NoAccess" Module="In-Portal" Type="0">U29ycnksIHlvdSBoYXZlIG5vIGFjY2VzcyB0byB0aGlzIHBhZ2Uh</PHRASE>
+ <PHRASE Label="lu_NoCategories" Module="In-Portal" Type="0">Tm8gQ2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="lu_NoFavorites" Module="In-Portal" Type="0">Tm8gZmF2b3JpdGUgaXRlbXMgc2F2ZWQ=</PHRASE>
+ <PHRASE Label="lu_NoMembers" Module="In-Portal" Type="0">Tm8gbWVtYmVycyBmb3VuZA==</PHRASE>
+ <PHRASE Label="lu_none" Module="In-Portal" Type="0">Tm9uZQ==</PHRASE>
+ <PHRASE Label="lu_NoReviews" Module="In-Portal" Type="0">QmUgdGhlIGZpcnN0IHRvIHJldmlldw==</PHRASE>
+ <PHRASE Label="lu_notify_owner" Module="In-Portal" Type="0">Tm90aWZ5IG1lIHdoZW4gcG9zdHMgYXJlIG1hZGUgaW4gdGhpcyB0b3BpYw==</PHRASE>
+ <PHRASE Label="lu_NotLoggedIn" Module="In-Portal" Type="0">bm90IGxvZ2dlZCBpbg==</PHRASE>
+ <PHRASE Label="lu_not_logged_in" Module="In-Portal" Type="0">Tm90IGxvZ2dlZCBpbg==</PHRASE>
+ <PHRASE Label="lu_Nov" Module="In-Portal" Type="0">Tm92</PHRASE>
+ <PHRASE Label="lu_no_articles" Module="In-Portal" Type="0">Tm8gQXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="lu_no_categories" Module="In-Portal" Type="0">Tm8gQ2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="lu_no_expiration" Module="In-Portal" Type="0">Tm8gZXhwaXJhdGlvbg==</PHRASE>
+ <PHRASE Label="lu_no_favorites" Module="In-Portal" Type="0">Tm8gZmF2b3JpdGVz</PHRASE>
+ <PHRASE Label="lu_no_items" Module="In-Portal" Type="0">Tm8gSXRlbXM=</PHRASE>
+ <PHRASE Label="lu_no_keyword" Module="In-Portal" Type="0">S2V5d29yZCBtaXNzaW5n</PHRASE>
+ <PHRASE Label="lu_no_links" Module="In-Portal" Type="0">Tm8gTGlua3M=</PHRASE>
+ <PHRASE Label="lu_no_new_posts" Module="In-Portal" Type="0">Rm9ydW0gaGFzIG5vIG5ldyBwb3N0cw==</PHRASE>
+ <PHRASE Label="lu_no_permissions" Module="In-Portal" Type="0">Tm8gUGVybWlzc2lvbnM=</PHRASE>
+ <PHRASE Label="lu_no_related_categories" Module="In-Portal" Type="0">Tm8gUmVsYXRlZCBDYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="lu_no_session_error" Module="In-Portal" Type="0">RXJyb3I6IG5vIHNlc3Npb24=</PHRASE>
+ <PHRASE Label="lu_no_template_error" Module="In-Portal" Type="0">TWlzc2luZyB0ZW1wbGF0ZQ==</PHRASE>
+ <PHRASE Label="lu_no_topics" Module="In-Portal" Type="0">Tm8gVG9waWNz</PHRASE>
+ <PHRASE Label="lu_Oct" Module="In-Portal" Type="0">T2N0</PHRASE>
+ <PHRASE Label="lu_of" Module="In-Portal" Type="2">b2Y=</PHRASE>
+ <PHRASE Label="lu_offline" Module="In-Portal" Type="0">T2ZmbGluZQ==</PHRASE>
+ <PHRASE Label="lu_ok" Module="In-Portal" Type="0">T2s=</PHRASE>
+ <PHRASE Label="lu_OldToRecent" Module="In-Portal" Type="0">T2xkIHRvIFJlY2VudA==</PHRASE>
+ <PHRASE Label="lu_on" Module="In-Portal" Type="0">b24=</PHRASE>
+ <PHRASE Label="lu_online" Module="In-Portal" Type="0">T25saW5l</PHRASE>
+ <PHRASE Label="lu_on_this_post" Module="In-Portal" Type="0">b24gdGhpcyBwb3N0</PHRASE>
+ <PHRASE Label="lu_operation_notallowed" Module="In-Portal" Type="0">WW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9u</PHRASE>
+ <PHRASE Label="lu_optional" Module="In-Portal" Type="0">T3B0aW9uYWw=</PHRASE>
+ <PHRASE Label="lu_options" Module="In-Portal" Type="0">T3B0aW9ucw==</PHRASE>
+ <PHRASE Label="LU_Opt_SelectCategory" Module="In-Portal" Type="0">U2VsZWN0IENhdGVnb3J5</PHRASE>
+ <PHRASE Label="lu_or" Module="In-Portal" Type="0">b3I=</PHRASE>
+ <PHRASE Label="lu_page" Module="In-Portal" Type="0">UGFnZQ==</PHRASE>
+ <PHRASE Label="lu_page_label" Module="In-Portal" Type="0">UGFnZTo=</PHRASE>
+ <PHRASE Label="lu_password" Module="In-Portal" Type="0">UGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="lu_passwords_do_not_match" Module="In-Portal" Type="0">UGFzc3dvcmRzIGRvIG5vdCBtYXRjaA==</PHRASE>
+ <PHRASE Label="lu_passwords_too_short" Module="In-Portal" Type="0">UGFzc3dvcmQgaXMgdG9vIHNob3J0LCBwbGVhc2UgZW50ZXIgYXQgbGVhc3QgJXMgY2hhcmFjdGVycw==</PHRASE>
+ <PHRASE Label="lu_password_again" Module="In-Portal" Type="0">UGFzc3dvcmQgQWdhaW4=</PHRASE>
+ <PHRASE Label="lu_PendingItem" Module="In-Portal" Type="0">cGVuZGluZyBpdGVt</PHRASE>
+ <PHRASE Label="lu_pending_approval" Module="In-Portal" Type="0">UGVuZGluZyBBcHByb3ZhbA==</PHRASE>
+ <PHRASE Label="lu_PermName_Admin_desc" Module="In-Portal" Type="1">QWRtaW4gTG9naW4=</PHRASE>
+ <PHRASE Label="lu_PermName_Category.AddPending_desc" Module="In-Portal" Type="0">QWRkIFBlbmRpbmcgQ2F0ZWdvcnk=</PHRASE>
+ <PHRASE Label="lu_PermName_Category.Add_desc" Module="In-Portal" Type="0">QWRkIENhdGVnb3J5</PHRASE>
+ <PHRASE Label="lu_PermName_Category.Delete_desc" Module="In-Portal" Type="0">RGVsZXRlIENhdGVnb3J5</PHRASE>
+ <PHRASE Label="lu_PermName_Category.Modify_desc" Module="In-Portal" Type="0">TW9kaWZ5IENhdGVnb3J5</PHRASE>
+ <PHRASE Label="lu_PermName_Category.View_desc" Module="In-Portal" Type="0">VmlldyBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="lu_PermName_Debug.Info_desc" Module="In-Portal" Type="1">QXBwZW5kIHBocGluZm8gdG8gYWxsIHBhZ2VzIChEZWJ1Zyk=</PHRASE>
+ <PHRASE Label="lu_PermName_Debug.Item_desc" Module="In-Portal" Type="1">RGlzcGxheSBJdGVtIFF1ZXJpZXMgKERlYnVnKQ==</PHRASE>
+ <PHRASE Label="lu_PermName_Debug.List_desc" Module="In-Portal" Type="1">RGlzcGxheSBJdGVtIExpc3QgUXVlcmllcyAoRGVidWcp</PHRASE>
+ <PHRASE Label="lu_PermName_favorites_desc" Module="In-Portal" Type="2">QWxsb3cgZmF2b3JpdGVz</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Add.Pending_desc" Module="In-Portal" Type="0">UGVuZGluZyBMaW5r</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Add_desc" Module="In-Portal" Type="0">QWRkIExpbms=</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Delete_desc" Module="In-Portal" Type="0">RGVsZXRlIExpbms=</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Modify.Pending_desc" Module="In-Portal" Type="2">TW9kaWZ5IExpbmsgUGVuZGluZw==</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Modify_desc" Module="In-Portal" Type="0">TW9kaWZ5IExpbms=</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Owner.Delete_desc" Module="In-Portal" Type="2">TGluayBEZWxldGUgYnkgT3duZXI=</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Owner.Modify.Pending_desc" Module="In-Portal" Type="2">TGluayBNb2RpZnkgUGVuZGluZyBieSBPd25lcg==</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Owner.Modify_desc" Module="In-Portal" Type="2">TGluayBNb2RpZnkgYnkgT3duZXI=</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Rate_desc" Module="In-Portal" Type="0">UmF0ZSBMaW5r</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Review_desc" Module="In-Portal" Type="0">UmV2aWV3IExpbms=</PHRASE>
+ <PHRASE Label="lu_PermName_Link.Review_Pending_desc" Module="In-Portal" Type="2">UmV2aWV3IExpbmsgUGVuZGluZw==</PHRASE>
+ <PHRASE Label="lu_PermName_Link.View_desc" Module="In-Portal" Type="0">VmlldyBMaW5r</PHRASE>
+ <PHRASE Label="lu_PermName_Login_desc" Module="In-Portal" Type="1">QWxsb3cgTG9naW4=</PHRASE>
+ <PHRASE Label="lu_PermName_News.Add.Pending_desc" Module="In-Portal" Type="0">QWRkIFBlbmRpbmcgTmV3cw==</PHRASE>
+ <PHRASE Label="lu_PermName_News.Add_desc" Module="In-Portal" Type="0">QWRkIE5ld3M=</PHRASE>
+ <PHRASE Label="lu_PermName_News.Delete_desc" Module="In-Portal" Type="0">RGVsZXRlIE5ld3M=</PHRASE>
+ <PHRASE Label="lu_PermName_News.Modify_desc" Module="In-Portal" Type="0">TW9kaWZ5IE5ld3M=</PHRASE>
+ <PHRASE Label="lu_PermName_News.Rate_desc" Module="In-Portal" Type="0">UmF0ZSBOZXdz</PHRASE>
+ <PHRASE Label="lu_PermName_News.Review.Pending_desc" Module="In-Portal" Type="2">UmV2aWV3IE5ld3MgUGVuZGluZw==</PHRASE>
+ <PHRASE Label="lu_PermName_News.Review_desc" Module="In-Portal" Type="0">UmV2aWV3IE5ld3M=</PHRASE>
+ <PHRASE Label="lu_PermName_News.View_desc" Module="In-Portal" Type="0">VmlldyBOZXdz</PHRASE>
+ <PHRASE Label="lu_PermName_Profile.Modify_desc" Module="In-Portal" Type="1">Q2hhbmdlIFVzZXIgUHJvZmlsZXM=</PHRASE>
+ <PHRASE Label="lu_PermName_ShowLang_desc" Module="In-Portal" Type="1">U2hvdyBMYW5ndWFnZSBUYWdz</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Add.Pending_desc" Module="In-Portal" Type="0">QWRkIFBlbmRpbmcgVG9waWM=</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Add_desc" Module="In-Portal" Type="0">QWRkIFRvcGlj</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Delete_desc" Module="In-Portal" Type="0">RGVsZXRlIFRvcGlj</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Lock_desc" Module="In-Portal" Type="1">TG9jay9VbmxvY2sgVG9waWNz</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Modify.Pending_desc" Module="In-Portal" Type="1">TW9kaWZ5IFRvcGljIFBlbmRpbmc=</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Modify_desc" Module="In-Portal" Type="0">TW9kaWZ5IFRvcGlj</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Owner.Delete_desc" Module="In-Portal" Type="1">VG9waWMgT3duZXIgRGVsZXRl</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Owner.Modify.Pending_desc" Module="In-Portal" Type="1">T3duZXIgTW9kaWZ5IFRvcGljIFBlbmRpbmc=</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Owner.Modify_desc" Module="In-Portal" Type="1">VG9waWMgT3duZXIgTW9kaWZ5</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Rate_desc" Module="In-Portal" Type="0">UmF0ZSBUb3BpYw==</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Reply.Add_desc" Module="In-Portal" Type="0">QWRkIFRvcGljIFJlcGx5</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Reply.Delete_desc" Module="In-Portal" Type="0">RGVsZXRlIFRvcGlj</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Reply.Modify_desc" Module="In-Portal" Type="0">UmVwbHkgVG9waWMgTW9kaWZ5</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Reply.Owner.Delete_desc" Module="In-Portal" Type="1">UG9zdCBPd25lciBEZWxldGU=</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Reply.Owner.Modify_desc" Module="In-Portal" Type="1">UG9zdCBPd25lciBNb2RpZnk=</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Reply.View_desc" Module="In-Portal" Type="0">VmlldyBUb3BpYyBSZXBseQ==</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.Review_desc" Module="In-Portal" Type="0">UmV2aWV3IFRvcGlj</PHRASE>
+ <PHRASE Label="lu_PermName_Topic.View_desc" Module="In-Portal" Type="0">VmlldyBUb3BpYw==</PHRASE>
+ <PHRASE Label="lu_phone" Module="In-Portal" Type="0">UGhvbmU=</PHRASE>
+ <PHRASE Label="lu_pick" Module="In-Portal" Type="0">UGljaw==</PHRASE>
+ <PHRASE Label="lu_pick_links" Module="In-Portal" Type="0">RWRpdG9yJ3MgUGljayBMaW5rcw==</PHRASE>
+ <PHRASE Label="lu_pick_news" Module="In-Portal" Type="0">RWRpdG9yJ3MgUGljayBBcnRpY2xlcw==</PHRASE>
+ <PHRASE Label="lu_pick_topics" Module="In-Portal" Type="0">RWRpdG9yJ3MgcGljayB0b3BpY3M=</PHRASE>
+ <PHRASE Label="lu_PleaseRegister" Module="In-Portal" Type="0">UGxlYXNlIFJlZ2lzdGVy</PHRASE>
+ <PHRASE Label="lu_pm_delete_confirm" Module="In-Portal" Type="0">QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHByaXZhdGUgbWVzc2FnZT8=</PHRASE>
+ <PHRASE Label="lu_pm_list" Module="In-Portal" Type="0">UHJpdmF0ZSBNZXNzYWdlcw==</PHRASE>
+ <PHRASE Label="lu_pm_list_description" Module="In-Portal" Type="0">UHJpdmF0ZSBNZXNzYWdlcw==</PHRASE>
+ <PHRASE Label="lu_Pop" Module="In-Portal" Type="0">UG9wdWxhcg==</PHRASE>
+ <PHRASE Label="lu_pop_links" Module="In-Portal" Type="0">TW9zdCBQb3B1bGFyIExpbmtz</PHRASE>
+ <PHRASE Label="lu_post" Module="In-Portal" Type="0">UG9zdA==</PHRASE>
+ <PHRASE Label="lu_posted" Module="In-Portal" Type="0">UG9zdGVk</PHRASE>
+ <PHRASE Label="lu_poster" Module="In-Portal" Type="0">UG9zdGVy</PHRASE>
+ <PHRASE Label="lu_posts" Module="In-Portal" Type="0">cG9zdHM=</PHRASE>
+ <PHRASE Label="lu_posts_updated" Module="In-Portal" Type="0">cG9zdHMgdXBkYXRlZA==</PHRASE>
+ <PHRASE Label="lu_PoweredBy" Module="In-Portal" Type="0">UG93ZXJlZCBieQ==</PHRASE>
+ <PHRASE Label="lu_pp_city" Module="In-Portal" Type="0">Q2l0eQ==</PHRASE>
+ <PHRASE Label="lu_pp_company" Module="In-Portal" Type="0">Q29tcGFueQ==</PHRASE>
+ <PHRASE Label="lu_pp_country" Module="In-Portal" Type="0">Q291bnRyeQ==</PHRASE>
+ <PHRASE Label="lu_pp_dob" Module="In-Portal" Type="0">QmlydGhkYXRl</PHRASE>
+ <PHRASE Label="lu_pp_email" Module="In-Portal" Type="0">RS1tYWls</PHRASE>
+ <PHRASE Label="lu_pp_fax" Module="In-Portal" Type="0">RmF4</PHRASE>
+ <PHRASE Label="lu_pp_firstname" Module="In-Portal" Type="0">Rmlyc3QgTmFtZQ==</PHRASE>
+ <PHRASE Label="lu_pp_lastname" Module="In-Portal" Type="0">TGFzdCBOYW1l</PHRASE>
+ <PHRASE Label="lu_pp_phone" Module="In-Portal" Type="0">UGhvbmU=</PHRASE>
+ <PHRASE Label="lu_pp_state" Module="In-Portal" Type="0">U3RhdGU=</PHRASE>
+ <PHRASE Label="lu_pp_street" Module="In-Portal" Type="0">U3RyZWV0</PHRASE>
+ <PHRASE Label="lu_pp_street2" Module="In-Portal" Type="0">U3RyZWV0IDI=</PHRASE>
+ <PHRASE Label="lu_pp_zip" Module="In-Portal" Type="0">Wmlw</PHRASE>
+ <PHRASE Label="lu_privacy" Module="In-Portal" Type="0">UHJpdmFjeQ==</PHRASE>
+ <PHRASE Label="lu_PrivacyPolicy" Module="In-Portal" Type="0">UHJpdmFjeSBQb2xpY3k=</PHRASE>
+ <PHRASE Label="lu_privatemessages_updated" Module="In-Portal" Type="0">UHJpdmF0ZSBtZXNzYWdlcyB1cGRhdGVk</PHRASE>
+ <PHRASE Label="lu_private_messages" Module="In-Portal" Type="0">UHJpdmF0ZSBNZXNzYWdlcw==</PHRASE>
+ <PHRASE Label="lu_ProductsUpdated" Module="In-Portal" Type="0">UHJvZHVjdHMgdXBkYXRlZA==</PHRASE>
+ <PHRASE Label="lu_profile" Module="In-Portal" Type="0">UHJvZmlsZQ==</PHRASE>
+ <PHRASE Label="lu_profile_field" Module="In-Portal" Type="0">UHJvZmlsZQ==</PHRASE>
+ <PHRASE Label="lu_profile_updated" Module="In-Portal" Type="0">cHJvZmlsZSB1cGRhdGVk</PHRASE>
+ <PHRASE Label="lu_prompt_avatar" Module="In-Portal" Type="0">QXZhdGFyIEltYWdl</PHRASE>
+ <PHRASE Label="lu_prompt_catdesc" Module="In-Portal" Type="0">RGVzY3JpcHRpb24=</PHRASE>
+ <PHRASE Label="lu_prompt_catname" Module="In-Portal" Type="0">Q2F0ZWdvcnkgTmFtZQ==</PHRASE>
+ <PHRASE Label="lu_prompt_email" Module="In-Portal" Type="0">RW1haWw=</PHRASE>
+ <PHRASE Label="lu_prompt_fullimage" Module="In-Portal" Type="0">RnVsbC1TaXplIEltYWdlOg==</PHRASE>
+ <PHRASE Label="lu_prompt_linkdesc" Module="In-Portal" Type="0">RGVzY3JpcHRpb24=</PHRASE>
+ <PHRASE Label="lu_prompt_linkname" Module="In-Portal" Type="0">TGluayBOYW1l</PHRASE>
+ <PHRASE Label="lu_prompt_linkurl" Module="In-Portal" Type="0">VVJM</PHRASE>
+ <PHRASE Label="lu_prompt_metadesc" Module="In-Portal" Type="0">TWV0YSBUYWcgRGVzY3JpcHRpb24=</PHRASE>
+ <PHRASE Label="lu_prompt_metakeywords" Module="In-Portal" Type="0">TWV0YSBUYWcgS2V5d29yZHM=</PHRASE>
+ <PHRASE Label="lu_prompt_password" Module="In-Portal" Type="0">UGFzc3dvcmQ=</PHRASE>
+ <PHRASE Label="lu_prompt_perpage_posts" Module="In-Portal" Type="0">UG9zdHMgUGVyIFBhZ2U=</PHRASE>
+ <PHRASE Label="lu_prompt_perpage_topics" Module="In-Portal" Type="0">VG9waWNzIFBlciBQYWdl</PHRASE>
+ <PHRASE Label="lu_prompt_post_subject" Module="In-Portal" Type="0">UG9zdCBTdWJqZWN0</PHRASE>
+ <PHRASE Label="lu_prompt_recommend" Module="In-Portal" Type="0">UmVjb21tZW5kIHRoaXMgc2l0ZSB0byBhIGZyaWVuZA==</PHRASE>
+ <PHRASE Label="lu_prompt_review" Module="In-Portal" Type="0">UmV2aWV3Og==</PHRASE>
+ <PHRASE Label="lu_prompt_signature" Module="In-Portal" Type="0">U2lnbmF0dXJl</PHRASE>
+ <PHRASE Label="lu_prompt_subscribe" Module="In-Portal" Type="0">RW50ZXIgeW91ciBlLW1haWwgYWRkcmVzcyB0byBzdWJzY3JpYmUgdG8gdGhlIG1haWxpbmcgbGlzdC4=</PHRASE>
+ <PHRASE Label="lu_prompt_thumbnail" Module="In-Portal" Type="0">VGh1bWJuYWlsIEltYWdlOg==</PHRASE>
+ <PHRASE Label="lu_prompt_username" Module="In-Portal" Type="0">VXNlcm5hbWU=</PHRASE>
+ <PHRASE Label="lu_public_display" Module="In-Portal" Type="0">RGlzcGxheSB0byBQdWJsaWM=</PHRASE>
+ <PHRASE Label="lu_query_string" Module="In-Portal" Type="1">UXVlcnkgU3RyaW5n</PHRASE>
+ <PHRASE Label="lu_question" Module="In-Portal" Type="2">UXVlc3Rpb25z</PHRASE>
+ <PHRASE Label="lu_QuickSearch" Module="In-Portal" Type="0">UXVpY2sgU2VhcmNo</PHRASE>
+ <PHRASE Label="lu_quick_links" Module="In-Portal" Type="0">UXVpY2sgTGlua3M=</PHRASE>
+ <PHRASE Label="lu_quote_reply" Module="In-Portal" Type="0">UmVwbHkgUXVvdGVk</PHRASE>
+ <PHRASE Label="lu_rateit" Module="In-Portal" Type="0">UmF0ZSBUaGlzIExpbms=</PHRASE>
+ <PHRASE Label="lu_rate_access_denied" Module="In-Portal" Type="0">VW5hYmxlIHRvIHJhdGUsIGFjY2VzcyBkZW5pZWQ=</PHRASE>
+ <PHRASE Label="lu_rate_article" Module="In-Portal" Type="0">UmF0ZSB0aGlzIGFydGljbGU=</PHRASE>
+ <PHRASE Label="lu_rate_link" Module="In-Portal" Type="0">UmF0ZSBMaW5r</PHRASE>
+ <PHRASE Label="lu_rate_news" Module="In-Portal" Type="0">UmF0ZSBBcnRpY2xl</PHRASE>
+ <PHRASE Label="lu_rate_this_article" Module="In-Portal" Type="0">UmF0ZSB0aGlzIGFydGljbGU=</PHRASE>
+ <PHRASE Label="lu_rate_topic" Module="In-Portal" Type="0">UmF0ZSBUb3BpYw==</PHRASE>
+ <PHRASE Label="lu_rating" Module="In-Portal" Type="0">UmF0aW5n</PHRASE>
+ <PHRASE Label="lu_RatingHL" Module="In-Portal" Type="0">UmF0aW5nIEhpIHRvIExvdw==</PHRASE>
+ <PHRASE Label="lu_RatingLH" Module="In-Portal" Type="0">UmF0aW5nIExvdyB0byBIaQ==</PHRASE>
+ <PHRASE Label="lu_rating_0" Module="In-Portal" Type="0">UG9vcg==</PHRASE>
+ <PHRASE Label="lu_rating_1" Module="In-Portal" Type="0">RmFpcg==</PHRASE>
+ <PHRASE Label="lu_rating_2" Module="In-Portal" Type="0">QXZlcmFnZQ==</PHRASE>
+ <PHRASE Label="lu_rating_3" Module="In-Portal" Type="0">R29vZA==</PHRASE>
+ <PHRASE Label="lu_rating_4" Module="In-Portal" Type="0">VmVyeSBHb29k</PHRASE>
+ <PHRASE Label="lu_rating_5" Module="In-Portal" Type="0">RXhjZWxsZW50</PHRASE>
+ <PHRASE Label="lu_rating_alreadyvoted" Module="In-Portal" Type="0">QWxyZWFkeSB2b3RlZA==</PHRASE>
+ <PHRASE Label="lu_read_error" Module="In-Portal" Type="0">VW5hYmxlIHRvIHJlYWQgZnJvbSBmaWxl</PHRASE>
+ <PHRASE Label="lu_RecentToOld" Module="In-Portal" Type="0">UmVjZW50IHRvIE9sZA==</PHRASE>
+ <PHRASE Label="lu_recipent_required" Module="In-Portal" Type="0">VGhlIHJlY2lwaWVudCBpcyByZXF1aXJlZA==</PHRASE>
+ <PHRASE Label="lu_recipient_doesnt_exist" Module="In-Portal" Type="0">VXNlciBkb2VzIG5vdCBleGlzdA==</PHRASE>
+ <PHRASE Label="lu_recipient_doesnt_exit" Module="In-Portal" Type="0">VGhlIHJlY2lwaWVudCBkb2VzIG5vdCBleGlzdA==</PHRASE>
+ <PHRASE Label="lu_recommend" Module="In-Portal" Type="0">UmVjb21tZW5k</PHRASE>
+ <PHRASE Label="lu_RecommendToFriend" Module="In-Portal" Type="0">UmVjb21tZW5kIHRvIGEgRnJpZW5k</PHRASE>
+ <PHRASE Label="lu_recommend_confirm" Module="In-Portal" Type="0">UmVjb21tZW5kYXRpb24gQ29uZmlybWF0aW9u</PHRASE>
+ <PHRASE Label="lu_recommend_confirm_text" Module="In-Portal" Type="0">VGhhbmtzIGZvciByZWNvbW1lbmRpbmcgb3VyIHNpdGUgdG8geW91ciBmcmllbmQuIFRoZSBlbWFpbCBoYXMgYmVlbiBzZW50IG91dC4=</PHRASE>
+ <PHRASE Label="lu_recommend_title" Module="In-Portal" Type="0">UmVjb21tZW5kIHRvIGEgZnJpZW5k</PHRASE>
+ <PHRASE Label="lu_redirecting_text" Module="In-Portal" Type="0">Q2xpY2sgaGVyZSBpZiB5b3VyIGJyb3dzZXIgZG9lcyBub3QgYXV0b21hdGljYWxseSByZWRpcmVjdCB5b3Uu</PHRASE>
+ <PHRASE Label="lu_redirecting_title" Module="In-Portal" Type="0">UmVkaXJlY3RpbmcgLi4u</PHRASE>
+ <PHRASE Label="lu_register" Module="In-Portal" Type="0">UmVnaXN0ZXI=</PHRASE>
+ <PHRASE Label="lu_RegisterConfirm" Module="In-Portal" Type="0">UmVnaXN0cmF0aW9uIENvbmZpcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="lu_register_confirm" Module="In-Portal" Type="0">UmVnaXN0cmF0aW9uIENvbXBsZXRl</PHRASE>
+ <PHRASE Label="lu_register_confirm_text" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciBSZWdpc3RlcmluZyEgIFBsZWFzZSBlbnRlciB5b3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBiZWxvdw==</PHRASE>
+ <PHRASE Label="lu_register_text" Module="In-Portal" Type="2">UmVnaXN0ZXIgd2l0aCBJbi1Qb3J0YWwgZm9yIGNvbnZlbmllbnQgYWNjZXNzIHRvIHVzZXIgYWNjb3VudCBzZXR0aW5ncyBhbmQgcHJlZmVyZW5jZXMu</PHRASE>
+ <PHRASE Label="lu_RegistrationCompleted" Module="In-Portal" Type="0">VGhhbmsgWW91LiBSZWdpc3RyYXRpb24gY29tcGxldGVkLg==</PHRASE>
+ <PHRASE Label="lu_RegistrationEmailed" Module="In-Portal" Type="0">WW91ciBsb2dpbiBpbmZvcm1hdGlvbiBoYXMgYmVlbiBlbWFpbGVkIHRvIHlvdS4gUGxlYXNlIGNoZWNrIHlvdXIgZW1haWwu</PHRASE>
+ <PHRASE Label="lu_related_articles" Module="In-Portal" Type="0">UmVsYXRlZCBhcnRpY2xlcw==</PHRASE>
+ <PHRASE Label="lu_related_categories" Module="In-Portal" Type="0">UmVsYXRlZCBDYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="lu_related_cats" Module="In-Portal" Type="0">UmVsYXRlZCBDYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="lu_related_links" Module="In-Portal" Type="0">UmVsYXRlZCBMaW5rcw==</PHRASE>
+ <PHRASE Label="lu_related_news" Module="In-Portal" Type="0">UmVsYXRlZCBOZXdz</PHRASE>
+ <PHRASE Label="lu_Relevance" Module="In-Portal" Type="0">UmVsZXZhbmNl</PHRASE>
+ <PHRASE Label="lu_remember_login" Module="In-Portal" Type="0">UmVtZW1iZXIgTG9naW4=</PHRASE>
+ <PHRASE Label="lu_remove" Module="In-Portal" Type="0">UmVtb3Zl</PHRASE>
+ <PHRASE Label="lu_remove_from_favorites" Module="In-Portal" Type="0">UmVtb3ZlIEZyb20gRmF2b3JpdGVz</PHRASE>
+ <PHRASE Label="lu_repeat_password" Module="In-Portal" Type="0">UmVwZWF0IFBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="lu_replies" Module="In-Portal" Type="0">UmVwbGllcw==</PHRASE>
+ <PHRASE Label="lu_reply" Module="In-Portal" Type="0">UmVwbHk=</PHRASE>
+ <PHRASE Label="lu_required_field" Module="In-Portal" Type="0">UmVxdWlyZWQgRmllbGQ=</PHRASE>
+ <PHRASE Label="lu_reset" Module="In-Portal" Type="0">UmVzZXQ=</PHRASE>
+ <PHRASE Label="lu_resetpw_confirm_text" Module="In-Portal" Type="0">QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlc2V0IHRoZSBwYXNzd29yZD8=</PHRASE>
+ <PHRASE Label="lu_reset_confirm_text" Module="In-Portal" Type="0">UGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZXNldCB5b3VyIHBhc3N3b3JkLg==</PHRASE>
+ <PHRASE Label="lu_ReturnToHome" Module="In-Portal" Type="0">UmV0dXJuIHRvIGhvbWVwYWdl</PHRASE>
+ <PHRASE Label="lu_reviews" Module="In-Portal" Type="0">UmV2aWV3cw==</PHRASE>
+ <PHRASE Label="lu_reviews_updated" Module="In-Portal" Type="0">cmV2aWV3cyB1cGRhdGVk</PHRASE>
+ <PHRASE Label="lu_review_access_denied" Module="In-Portal" Type="0">VW5hYmxlIHRvIHJldmlldywgYWNjZXNzIGRlbmllZA==</PHRASE>
+ <PHRASE Label="lu_review_article" Module="In-Portal" Type="0">UmV2aWV3IGFydGljbGU=</PHRASE>
+ <PHRASE Label="lu_review_link" Module="In-Portal" Type="0">UmV2aWV3IExpbms=</PHRASE>
+ <PHRASE Label="lu_review_news" Module="In-Portal" Type="0">UmV2aWV3IG5ld3MgYXJ0aWNsZQ==</PHRASE>
+ <PHRASE Label="lu_review_this_article" Module="In-Portal" Type="0">UmV2aWV3IHRoaXMgYXJ0aWNsZQ==</PHRASE>
+ <PHRASE Label="lu_rootcategory_name" Module="In-Portal" Type="0">SG9tZQ==</PHRASE>
+ <PHRASE Label="lu_search" Module="In-Portal" Type="0">U2VhcmNo</PHRASE>
+ <PHRASE Label="lu_searched_for" Module="In-Portal" Type="0">U2VhcmNoZWQgRm9yOg==</PHRASE>
+ <PHRASE Label="lu_SearchProducts" Module="In-Portal" Type="0">U2VhcmNoIFByb2R1Y3Rz</PHRASE>
+ <PHRASE Label="lu_searchtitle_article" Module="In-Portal" Type="0">U2VhcmNoIEFydGljbGVz</PHRASE>
+ <PHRASE Label="lu_searchtitle_category" Module="In-Portal" Type="0">U2VhcmNoIENhdGVnb3JpZXM=</PHRASE>
+ <PHRASE Label="lu_searchtitle_link" Module="In-Portal" Type="0">U2VhcmNoIExpbmtz</PHRASE>
+ <PHRASE Label="lu_searchtitle_topic" Module="In-Portal" Type="0">U2VhcmNoIFRvcGljcw==</PHRASE>
+ <PHRASE Label="lu_search_again" Module="In-Portal" Type="0">U2VhcmNoIEFnYWlu</PHRASE>
+ <PHRASE Label="lu_search_error" Module="In-Portal" Type="0">Rm9ybSBFcnJvcg==</PHRASE>
+ <PHRASE Label="lu_search_results" Module="In-Portal" Type="0">U2VhcmNoIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="lu_search_tips_link" Module="In-Portal" Type="0">U2VhcmNoIFRpcHM=</PHRASE>
+ <PHRASE Label="lu_search_type" Module="In-Portal" Type="0">U2VhcmNoIFR5cGU=</PHRASE>
+ <PHRASE Label="lu_search_within" Module="In-Portal" Type="0">U2VhcmNoIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="lu_section_AdditionalImages" Module="In-Portal" Type="0">QWRkaXRpb25hbCBJbWFnZXM=</PHRASE>
+ <PHRASE Label="lu_section_Images" Module="In-Portal" Type="0">SW1hZ2Vz</PHRASE>
+ <PHRASE Label="lu_section_MyAccount" Module="In-Portal" Type="0">TXlBY2NvdW50</PHRASE>
+ <PHRASE Label="lu_section_MyItems" Module="In-Portal" Type="0">TXkgSXRlbXM=</PHRASE>
+ <PHRASE Label="lu_section_Reviews" Module="In-Portal" Type="0">UmV2aWV3cw==</PHRASE>
+ <PHRASE Label="lu_see_also" Module="In-Portal" Type="0">U2VlIEFsc28=</PHRASE>
+ <PHRASE Label="lu_select_language" Module="In-Portal" Type="0">U2VsZWN0IExhbmd1YWdl</PHRASE>
+ <PHRASE Label="lu_select_theme" Module="In-Portal" Type="0">U2VsZWN0IFRoZW1l</PHRASE>
+ <PHRASE Label="lu_select_username" Module="In-Portal" Type="0">U2VsZWN0IFVzZXJuYW1l</PHRASE>
+ <PHRASE Label="lu_send" Module="In-Portal" Type="0">U2VuZA==</PHRASE>
+ <PHRASE Label="lu_send_pm" Module="In-Portal" Type="0">U2VuZCBQcml2YXRlIE1lc3NhZ2U=</PHRASE>
+ <PHRASE Label="lu_sent" Module="In-Portal" Type="0">U2VudA==</PHRASE>
+ <PHRASE Label="lu_Sep" Module="In-Portal" Type="0">U2Vw</PHRASE>
+ <PHRASE Label="lu_ShoppingCart" Module="In-Portal" Type="0">U2hvcHBpbmcgQ2FydA==</PHRASE>
+ <PHRASE Label="lu_show" Module="In-Portal" Type="0">U2hvdw==</PHRASE>
+ <PHRASE Label="lu_show_signature" Module="In-Portal" Type="0">U2hvdyBTaWduYXR1cmU=</PHRASE>
+ <PHRASE Label="lu_show_user_signatures" Module="In-Portal" Type="0">U2hvdyBNeSBTaWduYXR1cmU=</PHRASE>
+ <PHRASE Label="lu_SiteLead_Story" Module="In-Portal" Type="0">U2l0ZSBMZWFkIFN0b3J5</PHRASE>
+ <PHRASE Label="lu_SiteMap" Module="In-Portal" Type="0">U2l0ZW1hcA==</PHRASE>
+ <PHRASE Label="lu_site_map" Module="In-Portal" Type="0">U2l0ZSBNYXA=</PHRASE>
+ <PHRASE Label="lu_smileys" Module="In-Portal" Type="0">U21pbGV5cw==</PHRASE>
+ <PHRASE Label="lu_sorted_list" Module="In-Portal" Type="0">U29ydGVkIGxpc3Q=</PHRASE>
+ <PHRASE Label="lu_sort_by" Module="In-Portal" Type="0">U29ydA==</PHRASE>
+ <PHRASE Label="lu_state" Module="In-Portal" Type="0">U3RhdGU=</PHRASE>
+ <PHRASE Label="lu_Statistics" Module="In-Portal" Type="0">U3RhdGlzdGljcw==</PHRASE>
+ <PHRASE Label="lu_street" Module="In-Portal" Type="0">U3RyZWV0</PHRASE>
+ <PHRASE Label="lu_street2" Module="In-Portal" Type="0">U3RyZWV0IDI=</PHRASE>
+ <PHRASE Label="lu_subaction_prompt" Module="In-Portal" Type="0">QWxzbyBZb3UgQ2FuOg==</PHRASE>
+ <PHRASE Label="lu_subcats" Module="In-Portal" Type="0">U3ViY2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="lu_subject" Module="In-Portal" Type="0">U3ViamVjdA==</PHRASE>
+ <PHRASE Label="lu_submitting_to" Module="In-Portal" Type="0">U3VibWl0dGluZyB0bw==</PHRASE>
+ <PHRASE Label="lu_subscribe_banned" Module="In-Portal" Type="0">U3Vic2NyaXB0aW9uIGRlbmllZA==</PHRASE>
+ <PHRASE Label="lu_subscribe_confirm" Module="In-Portal" Type="0">U3Vic2NyaXB0aW9uIENvbmZpcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="lu_subscribe_confirm_prompt" Module="In-Portal" Type="0">QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHN1YnNjcmliZSB0byBvdXIgbWFpbGluZyBsaXN0PyAoWW91IGNhbiB1bnN1YnNjcmliZSBhbnkgdGltZSBieSBlbnRlcmluZyB5b3VyIGVtYWlsIG9uIHRoZSBmcm9udCBwYWdlKS4=</PHRASE>
+ <PHRASE Label="lu_subscribe_confirm_text" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciBzdWJzY3JpYmluZyB0byBvdXIgbWFpbGluZyBsaXN0IQ==</PHRASE>
+ <PHRASE Label="lu_subscribe_error" Module="In-Portal" Type="0">Rm9ybSBFcnJvcg==</PHRASE>
+ <PHRASE Label="lu_subscribe_missing_address" Module="In-Portal" Type="0">TWlzc2luZyBlbWFpbCBhZGRyZXNz</PHRASE>
+ <PHRASE Label="lu_subscribe_no_address" Module="In-Portal" Type="0">RS1tYWlsIGFkZHJlc3MgbWlzc2luZyBvciBpbnZhbGlk</PHRASE>
+ <PHRASE Label="lu_subscribe_success" Module="In-Portal" Type="0">U3Vic2NyaXB0aW9uIHN1Y2Nlc3NmdWw=</PHRASE>
+ <PHRASE Label="lu_subscribe_title" Module="In-Portal" Type="0">U3Vic2NyaWJlZA==</PHRASE>
+ <PHRASE Label="lu_subscribe_unknown_error" Module="In-Portal" Type="0">VW5kZWZpbmVkIGVycm9yIG9jY3VycmVkLCBzdWJzY3JpcHRpb24gbm90IGNvbXBsZXRlZA==</PHRASE>
+ <PHRASE Label="lu_subsection_Categories" Module="In-Portal" Type="0">U3VibWl0dGluZyB0byBDYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="lu_SuggestCategory" Module="In-Portal" Type="0">U3VnZ2VzdCBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="lu_suggest_category" Module="In-Portal" Type="0">U3VnZ2VzdCBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="lu_suggest_category_pending" Module="In-Portal" Type="0">Q2F0ZWdvcnkgU3VnZ2VzdGVkIChQZW5kaW5nIEFwcHJvdmFsKQ==</PHRASE>
+ <PHRASE Label="lu_suggest_error" Module="In-Portal" Type="0">Rm9ybSBFcnJvcg==</PHRASE>
+ <PHRASE Label="lu_suggest_link" Module="In-Portal" Type="0">U3VnZ2VzdCBMaW5r</PHRASE>
+ <PHRASE Label="lu_suggest_no_address" Module="In-Portal" Type="0">RS1tYWlsIGFkZHJlc3MgbWlzc2luZyBvciBpbnZhbGlk</PHRASE>
+ <PHRASE Label="lu_suggest_success" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciBzdWdnZXN0aW5nIG91ciBzaXRlIHRv</PHRASE>
+ <PHRASE Label="lu_tab_Privacy" Module="In-Portal" Type="0">UHJpdmFjeQ==</PHRASE>
+ <PHRASE Label="lu_template_error" Module="In-Portal" Type="0">VGVtcGxhdGUgRXJyb3I=</PHRASE>
+ <PHRASE Label="lu_TermAndCondition" Module="In-Portal" Type="0">VGVybXMgYW5kIENvbmRpdGlvbnMgb2YgVXNl</PHRASE>
+ <PHRASE Label="lu_TextUnsubscribe" Module="In-Portal" Type="0">IFdlIGFyZSBzb3JyeSB5b3UgaGF2ZSB1bnN1YnNjcmliZWQgZnJvbSBvdXIgbWFpbGluZyBsaXN0</PHRASE>
+ <PHRASE Label="lu_text_ForgotPassHasBeenReset" Module="In-Portal" Type="0">WW91ciBwYXNzd29yZCBoYXMgYmVlbiByZXNldC4gVGhlIG5ldyBwYXNzd29yZCBoYXMgYmVlbiBzZW50IHRvIHlvdXIgZS1tYWlsIGFkZHJlc3MuIFlvdSBtYXkgbm93IGxvZ2luIHdpdGggdGhlIG5ldyBwYXNzd29yZC4=</PHRASE>
+ <PHRASE Label="lu_text_ForgotPassResetEmailSent" Module="In-Portal" Type="0">WW91IGhhdmUgY2hvc2VuIHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQuPEJSLz48QlIvPg0KQW4gYXV0b21hdGljIGVtYWlsIGhhcyBiZWVuIHNlbnQgdG8geW91ciBlbWFpbCBhZGRyZXNzIG9uIGZpbGUuIFBsZWFzZSBmb2xsb3cgdGhlIGxpbmsgaW4gdGhlIGVtYWlsIGluIG9yZGVyIHRvIHJlY2VpdmUgYSBuZXcgcGFzc3dvcmQu</PHRASE>
+ <PHRASE Label="lu_text_keyword" Module="In-Portal" Type="0">S2V5d29yZA==</PHRASE>
+ <PHRASE Label="lu_text_KeywordsTooShort" Module="In-Portal" Type="0">VGhlIGtleXdvcmQgaXMgdG9vIHNob3J0</PHRASE>
+ <PHRASE Label="lu_text_NoPermission" Module="In-Portal" Type="0">Tm8gcGVybWlzc2lvbnMgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbg==</PHRASE>
+ <PHRASE Label="lu_text_nosuggestcategorypermission" Module="In-Portal" Type="0">Tm8gcGVybWlzc2lvbnMgdG8gc3VnZ2VzdCBuZXcgY2F0ZWdvcmllcyBpbnRvIGN1cnJlbnQgY2F0ZWdvcnku</PHRASE>
+ <PHRASE Label="lu_text_NothingFound" Module="In-Portal" Type="0">Tm90aGluZyBGb3VuZA==</PHRASE>
+ <PHRASE Label="lu_text_pagenotfound" Module="In-Portal" Type="0">NDA0LiBQYWdlIG5vdCBmb3VuZCBvbiB0aGUgc2VydmVyLg==</PHRASE>
+ <PHRASE Label="lu_text_PasswordRequestConfirm" Module="In-Portal" Type="0">UGxlYXNlIGNvbmZpcm0gdGhhdCB5b3Ugd2FudCB0byByZXNldCB5b3VyIHBhc3N3b3JkLg==</PHRASE>
+ <PHRASE Label="lu_text_registrationpending" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciByZWdpc3RlcmluZyBvbiBvdXIgd2Vic2l0ZS4gWW91ciByZWdpc3RyYXRpb24gaXMgcGVuZGluZyBhZG1pbmlzdHJhdGl2ZSBhcHByb3ZhbC4gWW91IHdpbGwgZ2V0IGEgc2VwYXJhdGUgZW1haWwgb25jZSBpdCdzIGFjdGl2YXRlZC4=</PHRASE>
+ <PHRASE Label="lu_text_suggestcategoryconfirm" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciBzdWdnZXN0aW5nIHlvdXIgY2F0ZWdvcnku</PHRASE>
+ <PHRASE Label="lu_text_SuggestCategoryPendingConfirm" Module="In-Portal" Type="0">U3VnZ2VzdGVkIGNhdGVnb3J5IGlzIHBlbmRpbmcgZm9yIEFkbWluaXN0cmF0aXZlIGFwcHJvdmFsIA==</PHRASE>
+ <PHRASE Label="lu_text_ThankYou" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciBzdWJtaXR0aW5nIHlvdXIgcmVxdWVzdC4=</PHRASE>
+ <PHRASE Label="lu_ThankForSubscribing" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciBzdWJzY3JpYmluZyB0byBvdXIgbWFpbGluZyBsaXN0</PHRASE>
+ <PHRASE Label="lu_ThisCategory" Module="In-Portal" Type="0">Q3VycmVudCBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="lu_title_ActionBox" Module="In-Portal" Type="0">QWN0aW9uIEJveA==</PHRASE>
+ <PHRASE Label="lu_title_AddAddress" Module="In-Portal" Type="0">QWRkaW5nIEFkZHJlc3M=</PHRASE>
+ <PHRASE Label="lu_title_Advertisements" Module="In-Portal" Type="0">QWR2ZXJ0aXNlbWVudHM=</PHRASE>
+ <PHRASE Label="lu_title_Categories" Module="In-Portal" Type="0">Q2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="lu_title_confirm" Module="In-Portal" Type="0">Q29uZmlybWF0aW9u</PHRASE>
+ <PHRASE Label="lu_title_ContentPages" Module="In-Portal" Type="0">Q29udGVudCBQYWdlcw==</PHRASE>
+ <PHRASE Label="lu_title_EditAddress" Module="In-Portal" Type="0">RWRpdCBBZGRyZXNz</PHRASE>
+ <PHRASE Label="lu_title_enhancementconfirmation" Module="In-Portal" Type="0">WW91ciBGYXZvcml0ZSBJdGVtcw==</PHRASE>
+ <PHRASE Label="lu_title_Favorites" Module="In-Portal" Type="0">WW91ciBGYXZvcml0ZXM=</PHRASE>
+ <PHRASE Label="lu_title_ForgotPassword" Module="In-Portal" Type="0">Rm9yZ290IFBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="lu_title_forgotpasswordconfirm" Module="In-Portal" Type="0">Rm9yZ290IFBhc3N3b3JkIENvbmZpcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="lu_title_ForgotPasswordNotification" Module="In-Portal" Type="0">Rm9yZ290IFBhc3N3b3JkIE5vdGlmaWNhdGlvbg==</PHRASE>
+ <PHRASE Label="lu_title_LoginBox" Module="In-Portal" Type="0">TG9naW4gQm94</PHRASE>
+ <PHRASE Label="lu_title_mailinglist" Module="In-Portal" Type="0">TWFpbGluZyBMaXN0</PHRASE>
+ <PHRASE Label="lu_title_Members" Module="In-Portal" Type="0">TWVtYmVycw==</PHRASE>
+ <PHRASE Label="lu_title_MissingPhraseAdding" Module="In-Portal" Type="0">TWlzc2luZyBQaHJhc2UgQWRkaW5n</PHRASE>
+ <PHRASE Label="lu_title_MyAccount" Module="In-Portal" Type="0">TXkgQWNjb3VudA==</PHRASE>
+ <PHRASE Label="lu_title_MyAddresses" Module="In-Portal" Type="0">TXkgQWRkcmVzc2Vz</PHRASE>
+ <PHRASE Label="lu_title_MyFavorites" Module="In-Portal" Type="0">TXkgRmF2b3JpdGVz</PHRASE>
+ <PHRASE Label="lu_title_MyItems" Module="In-Portal" Type="0">TXkgSXRlbXM=</PHRASE>
+ <PHRASE Label="lu_title_MyPreferences" Module="In-Portal" Type="0">TXkgUHJlZmVyZW5jZXM=</PHRASE>
+ <PHRASE Label="lu_title_MyProfile" Module="In-Portal" Type="0">TXkgUHJvZmlsZQ==</PHRASE>
+ <PHRASE Label="lu_title_NoPermission" Module="In-Portal" Type="0">Tm8gUGVybWlzc2lvbg==</PHRASE>
+ <PHRASE Label="lu_title_pagenotfound" Module="In-Portal" Type="0">UGFnZSBOb3QgRm91bmQ=</PHRASE>
+ <PHRASE Label="lu_title_PasswordRequestConfirm" Module="In-Portal" Type="0">UGFzc3dvcmQgUmVxdWVzdCBDb25maXJtYXRpb24=</PHRASE>
+ <PHRASE Label="lu_title_PrivacyPolicy" Module="In-Portal" Type="0">UHJpdmFjeSBQb2xpY3k=</PHRASE>
+ <PHRASE Label="lu_title_recommendconfirm" Module="In-Portal" Type="0">UmVjb21tZW5kIENvbmZpcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="lu_title_RecommendSite" Module="In-Portal" Type="0">UmVjb21tZW5kIHRvIGEgRnJpZW5k</PHRASE>
+ <PHRASE Label="lu_title_registrationconfirmation" Module="In-Portal" Type="0">VXNlciBSZWdpc3RyYXRpb24gQ29uZmlybWF0aW9u</PHRASE>
+ <PHRASE Label="lu_title_registrationpendingconfirmation" Module="In-Portal" Type="0">VXNlciBSZWdpc3RyYXRpb24gUGVuZGluZw==</PHRASE>
+ <PHRASE Label="lu_title_RelatedCategories" Module="In-Portal" Type="0">UmVsYXRlZCBDYXRlZ29yaWVz</PHRASE>
+ <PHRASE Label="lu_title_RelatedItems" Module="In-Portal" Type="0">UmVsYXRlZCBJdGVtcw==</PHRASE>
+ <PHRASE Label="lu_title_RelatedSearches" Module="In-Portal" Type="0">UmVsYXRlZCBTZWFyY2hlcw==</PHRASE>
+ <PHRASE Label="lu_title_Reviews" Module="In-Portal" Type="0">UmV2aWV3cw==</PHRASE>
+ <PHRASE Label="lu_title_SearchBox" Module="In-Portal" Type="0">U2VhcmNoIEJveA==</PHRASE>
+ <PHRASE Label="lu_title_SearchResults" Module="In-Portal" Type="0">U2VhcmNoIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="lu_title_Sitemap" Module="In-Portal" Type="0">U2l0ZSBtYXA=</PHRASE>
+ <PHRASE Label="lu_title_SubscribeConfirm" Module="In-Portal" Type="0">U3Vic2NyaXB0aW9uIENvbmZpcm1hdGlvbg==</PHRASE>
+ <PHRASE Label="lu_title_subscribeok" Module="In-Portal" Type="0">U3Vic2NyaXB0aW9uIENvbmZpcm1lZA==</PHRASE>
+ <PHRASE Label="lu_title_SuggestCategory" Module="In-Portal" Type="0">U3VnZ2VzdCBDYXRlZ29yeQ==</PHRASE>
+ <PHRASE Label="lu_title_suggestcategoryconfirm" Module="In-Portal" Type="0">Q2F0ZWdvcnkgQWRkZWQ=</PHRASE>
+ <PHRASE Label="lu_title_suggestcategorypendingconfirm" Module="In-Portal" Type="0">Q2F0ZWdvcnkgUGVuZGluZw==</PHRASE>
+ <PHRASE Label="lu_title_TermsAndConditions" Module="In-Portal" Type="0">VGVybXMgYW5kIENvbmRpdGlvbnM=</PHRASE>
+ <PHRASE Label="lu_title_ThankYou" Module="In-Portal" Type="0">VGhhbmsgeW91IQ==</PHRASE>
+ <PHRASE Label="lu_title_unsubscribeconfirm" Module="In-Portal" Type="0">VW5zdWJzY3JpYmUgQ29uZmlybWF0aW9u</PHRASE>
+ <PHRASE Label="lu_title_unsubscribeok" Module="In-Portal" Type="0">VW5zdWJzY3JpcHRpb24gQ29uZmlybWVk</PHRASE>
+ <PHRASE Label="lu_title_UserProfile" Module="In-Portal" Type="0">VXNlciBQcm9maWxl</PHRASE>
+ <PHRASE Label="lu_title_UserRegistration" Module="In-Portal" Type="0">VXNlciBSZWdpc3RyYXRpb24=</PHRASE>
+ <PHRASE Label="lu_title_WelcomeTitle" Module="In-Portal" Type="0">V2VsY29tZSB0byBJbi1Qb3J0YWw=</PHRASE>
+ <PHRASE Label="lu_to" Module="In-Portal" Type="0">VG8=</PHRASE>
+ <PHRASE Label="lu_top" Module="In-Portal" Type="0">VG9wIFJhdGVk</PHRASE>
+ <PHRASE Label="lu_topics" Module="In-Portal" Type="0">VG9waWNz</PHRASE>
+ <PHRASE Label="lu_topics_updated" Module="In-Portal" Type="0">VG9waWNzIFVwZGF0ZWQ=</PHRASE>
+ <PHRASE Label="lu_topic_rate_confirm" Module="In-Portal" Type="0">VG9waWMgUmF0aW5nIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="lu_topic_rate_confirm_duplicate_text" Module="In-Portal" Type="0">WW91IGhhdmUgYWxyZWFkeSByYXRlZCB0aGlzIHRvcGlj</PHRASE>
+ <PHRASE Label="lu_topic_rate_confirm_text" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciB2b3RpbmchICBZb3VyIGlucHV0IGhhcyBiZWVuIHJlY29yZGVkLg==</PHRASE>
+ <PHRASE Label="lu_topic_reply" Module="In-Portal" Type="0">UG9zdCBSZXBseQ==</PHRASE>
+ <PHRASE Label="lu_topic_search_results" Module="In-Portal" Type="0">VG9waWMgU2VhcmNoIFJlc3VsdHM=</PHRASE>
+ <PHRASE Label="lu_topic_updated" Module="In-Portal" Type="0">VG9waWMgVXBkYXRlZA==</PHRASE>
+ <PHRASE Label="lu_top_rated" Module="In-Portal" Type="0">VG9wIFJhdGVkIExpbmtz</PHRASE>
+ <PHRASE Label="lu_TotalCategories" Module="In-Portal" Type="0">VG90YWwgQ2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="lu_total_categories" Module="In-Portal" Type="0">VG90YWwgQ2F0ZWdvcmllcw==</PHRASE>
+ <PHRASE Label="lu_total_links" Module="In-Portal" Type="0">VG90YWwgbGlua3MgaW4gdGhlIGRhdGFiYXNl</PHRASE>
+ <PHRASE Label="lu_total_news" Module="In-Portal" Type="0">VG90YWwgQXJ0aWNsZXM=</PHRASE>
+ <PHRASE Label="lu_total_topics" Module="In-Portal" Type="0">VG90YWwgVG9waWNz</PHRASE>
+ <PHRASE Label="lu_true" Module="In-Portal" Type="0">VHJ1ZQ==</PHRASE>
+ <PHRASE Label="lu_Undefined" Module="In-Portal" Type="0">Ti9B</PHRASE>
+ <PHRASE Label="lu_unknown_error" Module="In-Portal" Type="0">U3lzdGVtIGVycm9yIGhhcyBvY2N1cmVk</PHRASE>
+ <PHRASE Label="lu_unsorted_list" Module="In-Portal" Type="0">VW5zb3J0ZWQgbGlzdA==</PHRASE>
+ <PHRASE Label="lu_unsubscribe_confirm" Module="In-Portal" Type="0">VW5zdWJzY3JpcHRpb24gQ29uZmlybWF0aW9u</PHRASE>
+ <PHRASE Label="lu_unsubscribe_confirm_prompt" Module="In-Portal" Type="0">QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc3Vic2NyaWJlIGZyb20gb3VyIG1haWxpbmcgbGlzdD8gKFlvdSBjYW4gYWx3YXlzIHN1YnNjcmliZSBhZ2FpbiBieSBlbnRlcmluZyB5b3VyIGVtYWlsIGF0IHRoZSBob21lIHBhZ2Up</PHRASE>
+ <PHRASE Label="lu_unsubscribe_confirm_text" Module="In-Portal" Type="0">V2UgYXJlIHNvcnJ5IHlvdSBoYXZlIHVuc3Vic2NyaWJlZCBmcm9tIG91ciBtYWlsaW5nIGxpc3Q=</PHRASE>
+ <PHRASE Label="lu_unsubscribe_title" Module="In-Portal" Type="0">VW5zdWJzY3JpYmU=</PHRASE>
+ <PHRASE Label="lu_update" Module="In-Portal" Type="0">VXBkYXRl</PHRASE>
+ <PHRASE Label="lu_username" Module="In-Portal" Type="0">VXNlcm5hbWU=</PHRASE>
+ <PHRASE Label="lu_users_online" Module="In-Portal" Type="0">VXNlcnMgT25saW5l</PHRASE>
+ <PHRASE Label="lu_user_already_exist" Module="In-Portal" Type="0">QSB1c2VyIHdpdGggc3VjaCB1c2VybmFtZSBhbHJlYWR5IGV4aXN0cy4=</PHRASE>
+ <PHRASE Label="lu_user_and_email_already_exist" Module="In-Portal" Type="0">QSB1c2VyIHdpdGggc3VjaCB1c2VybmFtZS9lLW1haWwgYWxyZWFkeSBleGlzdHMu</PHRASE>
+ <PHRASE Label="lu_user_exists" Module="In-Portal" Type="0">VXNlciBhbHJlYWR5IGV4aXN0cw==</PHRASE>
+ <PHRASE Label="lu_user_pending_aproval" Module="In-Portal" Type="0">UGVuZGluZyBSZWdpc3RyYXRpb24gQ29tcGxldGU=</PHRASE>
+ <PHRASE Label="lu_user_pending_aproval_text" Module="In-Portal" Type="0">VGhhbmsgeW91IGZvciByZWdpc3RlcmluZy4gWW91ciByZWdpc3RyYXRpb24gaXMgcGVuZGluZyBhZG1pbmlzdHJhdGl2ZSBhcHByb3ZhbC4=</PHRASE>
+ <PHRASE Label="lu_VerifyPassword" Module="In-Portal" Type="0">VmVyaWZ5IHBhc3N3b3Jk</PHRASE>
+ <PHRASE Label="lu_views" Module="In-Portal" Type="0">Vmlld3M=</PHRASE>
+ <PHRASE Label="lu_view_flat" Module="In-Portal" Type="0">VmlldyBGbGF0</PHRASE>
+ <PHRASE Label="lu_view_pm" Module="In-Portal" Type="0">VmlldyBQTQ==</PHRASE>
+ <PHRASE Label="lu_view_profile" Module="In-Portal" Type="0">VmlldyBVc2VyIFByb2ZpbGU=</PHRASE>
+ <PHRASE Label="lu_view_threaded" Module="In-Portal" Type="0">VmlldyBUaHJlYWRlZA==</PHRASE>
+ <PHRASE Label="lu_view_your_profile" Module="In-Portal" Type="0">VmlldyBZb3VyIFByb2ZpbGU=</PHRASE>
+ <PHRASE Label="lu_visit_DirectReferer" Module="In-Portal" Type="0">RGlyZWN0IGFjY2VzcyBvciBib29rbWFyaw==</PHRASE>
+ <PHRASE Label="lu_votes" Module="In-Portal" Type="0">Vm90ZXM=</PHRASE>
+ <PHRASE Label="lu_VotesHL" Module="In-Portal" Type="0">Vm90ZXMgSGkgdG8gTG93</PHRASE>
+ <PHRASE Label="lu_VotesLH" Module="In-Portal" Type="0">Vm90ZXMgTG93IHRvIEhp</PHRASE>
+ <PHRASE Label="lu_Warning" Module="In-Portal" Type="0">V2FybmluZw==</PHRASE>
+ <PHRASE Label="lu_WeAcceptCards" Module="In-Portal" Type="0">V2UgYWNjZXB0IGNyZWRpdCBjYXJkcw==</PHRASE>
+ <PHRASE Label="lu_wrote" Module="In-Portal" Type="0">d3JvdGU=</PHRASE>
+ <PHRASE Label="lu_yes" Module="In-Portal" Type="0">WWVz</PHRASE>
+ <PHRASE Label="lu_YourAccount" Module="In-Portal" Type="0">WW91ciBBY2NvdW50</PHRASE>
+ <PHRASE Label="lu_YourCart" Module="In-Portal" Type="0">U2hvcHBpbmcgQ2FydA==</PHRASE>
+ <PHRASE Label="lu_YourCurrency" Module="In-Portal" Type="0">Q3VycmVuY3k=</PHRASE>
+ <PHRASE Label="lu_YourLanguage" Module="In-Portal" Type="0">TGFuZ3VhZ2U=</PHRASE>
+ <PHRASE Label="lu_YourWishList" Module="In-Portal" Type="0">WW91ciBXaXNoIExpc3Q=</PHRASE>
+ <PHRASE Label="lu_zip" Module="In-Portal" Type="0">Wmlw</PHRASE>
+ <PHRASE Label="lu_ZipCode" Module="In-Portal" Type="0">WklQIENvZGU=</PHRASE>
+ <PHRASE Label="lu_zip_code" Module="In-Portal" Type="0">WklQIENvZGU=</PHRASE>
+ <PHRASE Label="lu_zoom" Module="In-Portal" Type="0">Wm9vbQ==</PHRASE>
+ <PHRASE Label="my_account_title" Module="In-Portal" Type="0">TXkgU2V0dGluZ3M=</PHRASE>
+ <PHRASE Label="Next Theme" Module="In-Portal" Type="0">TmV4dCBUaGVtZQ==</PHRASE>
+ <PHRASE Label="Previous Theme" Module="In-Portal" Type="0">UHJldmlvdXMgVGhlbWU=</PHRASE>
+ <PHRASE Label="test 1" Module="In-Portal" Type="0">dGVzdCAy</PHRASE>
+ </PHRASES>
+ <EVENTS>
+ <EVENT MessageType="text" Event="CATEGORY.ADD" Type="0">U3ViamVjdDogQ2F0ZWdvcnkgYWRkZWQKCllvdXIgc3VnZ2VzdGVkIGNhdGVnb3J5ICI8aW5wOm1fY2F0ZWdvcnlfZmllbGQgX0ZpZWxkPSJOYW1lIiBfU3RyaXBIVE1MPSIxIi8+IiBoYXMgYmVlbiBhZGRlZC4=</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.ADD" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQSBjYXRlZ29yeSBoYXMgYmVlbiBhZGRlZAoKQSBjYXRlZ29yeSAiPGlucDptX2NhdGVnb3J5X2ZpZWxkIF9GaWVsZD0iTmFtZSIgX1N0cmlwSFRNTD0iMSIvPiIgaGFzIGJlZW4gYWRkZWQu</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.ADD.PENDING" Type="0"></EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.ADD.PENDING" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQ2F0ZWdvcnkgYWRkZWQgKHBlbmRpbmcpCgpBIGNhdGVnb3J5ICI8aW5wOm1fY2F0ZWdvcnlfZmllbGQgX0ZpZWxkPSJOYW1lIiBfU3RyaXBIVE1MPSIxIi8+IiBoYXMgYmVlbiBhZGRlZCwgcGVuZGluZyB5b3VyIGNvbmZpcm1hdGlvbi4gIFBsZWFzZSByZXZpZXcgdGhlIGNhdGVnb3J5IGFuZCBhcHByb3ZlIG9yIGRlbnkgaXQu</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.APPROVE" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQSBjYXRlZ29yeSBoYXMgYmVlbiBhcHByb3ZlZAoKWW91ciBzdWdnZXN0ZWQgY2F0ZWdvcnkgIjxpbnA6bV9jYXRlZ29yeV9maWVsZCBfRmllbGQ9Ik5hbWUiIF9TdHJpcEhUTUw9IjEiLz4iIGhhcyBiZWVuIGFwcHJvdmVkLg==</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.APPROVE" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQSBjYXRlZ29yeSBoYXMgYmVlbiBhcHByb3ZlZAoKQSBjYXRlZ29yeSAiPGlucDptX2NhdGVnb3J5X2ZpZWxkIF9GaWVsZD0iTmFtZSIgX1N0cmlwSFRNTD0iMSIvPiIgaGFzIGJlZW4gYXBwcm92ZWQu</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.DELETE" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQSBjYXRlZ29yeSBoYXMgYmVlbiBkZWxldGVkCgpBIGNhdGVnb3J5ICI8aW5wOm1fY2F0ZWdvcnlfZmllbGQgX0ZpZWxkPSJOYW1lIiBfU3RyaXBIVE1MPSIxIi8+IiBoYXMgYmVlbiBkZWxldGVkLg==</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.DELETE" Type="1">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IEEgY2F0ZWdvcnkgaGFzIGJlZW4gZGVsZXRlZAoKQSBjYXRlZ29yeSAiPGlucDptX2NhdGVnb3J5X2ZpZWxkIF9GaWVsZD0iTmFtZSIgX1N0cmlwSFRNTD0iMSIvPiIgaGFzIGJlZW4gZGVsZXRlZC4=</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.DENY" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQSBjYXRlZ29yeSBoYXMgYmVlbiBkZW5pZWQKCllvdXIgY2F0ZWdvcnkgc3VnZ2VzdGlvbiAiPGlucDptX2NhdGVnb3J5X2ZpZWxkIF9GaWVsZD0iTmFtZSIgX1N0cmlwSFRNTD0iMSIvPiIgaGFzIGJlZW4gZGVuaWVkLg==</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.DENY" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQSBjYXRlZ29yeSBoYXMgYmVlbiBkZW5pZWQKCkEgY2F0ZWdvcnkgIjxpbnA6bV9jYXRlZ29yeV9maWVsZCBfRmllbGQ9Ik5hbWUiIF9TdHJpcEhUTUw9IjEiLz4iIGhhcyBiZWVuIGRlbmllZC4=</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.MODIFY" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQSBjYXRlZ29yeSBoYXMgYmVlbiBtb2RpZmllZAoKWW91ciBzdWdnZXN0ZWQgY2F0ZWdvcnkgIjxpbnA6bV9jYXRlZ29yeV9maWVsZCBfRmllbGQ9Ik5hbWUiIF9TdHJpcEhUTUw9IjEiLz4iIGhhcyBiZWVuIG1vZGlmaWVkLg==</EVENT>
+ <EVENT MessageType="text" Event="CATEGORY.MODIFY" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQSBjYXRlZ29yeSBoYXMgYmVlbiBtb2RpZmllZAoKQSBjYXRlZ29yeSAiPGlucDptX2NhdGVnb3J5X2ZpZWxkIF9GaWVsZD0iTmFtZSIgX1N0cmlwSFRNTD0iMSIvPiIgaGFzIGJlZW4gbW9kaWZpZWQu</EVENT>
+ <EVENT MessageType="html" Event="COMMON.FOOTER" Type="1">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IENvbW1vbiBGb290ZXIgVGVtcGxhdGUKCg==</EVENT>
+ <EVENT MessageType="text" Event="USER.ADD" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogSW4tcG9ydGFsIHJlZ2lzdHJhdGlvbgoKRGVhciA8aW5wOnRvdXNlciBfRmllbGQ9IkZpcnN0TmFtZSIgLz4gPGlucDp0b3VzZXIgX0ZpZWxkPSJMYXN0TmFtZSIgLz4sDQoNClRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgb24gPGlucDptX3BhZ2VfdGl0bGUgLz4uIFlvdXIgcmVnaXN0cmF0aW9uIGlzIG5vdyBhY3RpdmUu</EVENT>
+ <EVENT MessageType="text" Event="USER.ADD" Type="1">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IE5ldyB1c2VyIGhhcyBiZWVuIGFkZGVkCgpBIG5ldyB1c2VyICI8aW5wOnRvdXNlciBfRmllbGQ9IkxvZ2luIiAvPiIgaGFzIGJlZW4gYWRkZWQu</EVENT>
+ <EVENT MessageType="text" Event="USER.ADD.PENDING" Type="0">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IEluLVBvcnRhbCBSZWdpc3RyYXRpb24KCkRlYXIgPGlucDp0b3VzZXIgX0ZpZWxkPSJGaXJzdE5hbWUiIC8+IDxpbnA6dG91c2VyIF9GaWVsZD0iTGFzdE5hbWUiIC8+LA0KDQpUaGFuayB5b3UgZm9yIHJlZ2lzdGVyaW5nIG9uIDxpbnA6bV9wYWdlX3RpdGxlIC8+LiBZb3VyIHJlZ2lzdHJhdGlvbiB3aWxsIGJlIGFjdGl2ZSBhZnRlciBhcHByb3ZhbC4=</EVENT>
+ <EVENT MessageType="text" Event="USER.ADD.PENDING" Type="1">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IFVzZXIgcmVnaXN0ZXJlZAoKQSBuZXcgdXNlciAiPGlucDp0b3VzZXIgX0ZpZWxkPSJMb2dpbiIgLz4iIGhhcyByZWdpc3RlcmVkIGFuZCBpcyBwZW5kaW5nIGFkbWluaXN0cmF0aXZlIGFwcHJvdmFsLg==</EVENT>
+ <EVENT MessageType="text" Event="USER.APPROVE" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogWW91IGhhdmUgYmVlbiBhcHByb3ZlZAoKV2VsY29tZSB0byBJbi1wb3J0YWwhDQpZb3VyIHVzZXIgcmVnaXN0cmF0aW9uIGhhcyBiZWVuIGFwcHJvdmVkLiBZb3VyIHVzZXIgbmFtZSBpcyAiPGlucDp0b3VzZXIgX0ZpZWxkPSJVc2VyTmFtZSIgLz4iLg==</EVENT>
+ <EVENT MessageType="text" Event="USER.APPROVE" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogVXNlciBhcHByb3ZlZAoKVXNlciAiPGlucDp0b3VzZXIgX0ZpZWxkPSJVc2VyTmFtZSIgLz4iIGhhcyBiZWVuIGFwcHJvdmVkLg==</EVENT>
+ <EVENT MessageType="text" Event="USER.DENY" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQWNjZXNzIGRlbmllZAoKWW91ciByZWdpc3RyYXRpb24gdG8gPGlucDptX3BhZ2VfdGl0bGUgLz4gaGFzIGJlZW4gZGVuaWVkLg==</EVENT>
+ <EVENT MessageType="text" Event="USER.DENY" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogVXNlciBkZW5pZWQKClVzZXIgIjxpbnA6dG91c2VyIF9GaWVsZD0iVXNlck5hbWUiIC8+IiBoYXMgYmVlbiBkZW5pZWQu</EVENT>
+ <EVENT MessageType="text" Event="USER.MEMBERSHIP.EXPIRATION.NOTICE" Type="0">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IE1lbWJlcnNoaXAgZXhwaXJhdGlvbiBub3RpY2UKCk1lbWJlcnNoaXAgZXhwaXJhdGlvbiBub3RpY2U=</EVENT>
+ <EVENT MessageType="text" Event="USER.MEMBERSHIP.EXPIRATION.NOTICE" Type="1">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IE1lbWJlcnNoaXAgZXhwaXJhdGlvbiBub3RpY2UKCk1lbWJlcnNoaXAgZXhwaXJhdGlvbiBub3RpY2U=</EVENT>
+ <EVENT MessageType="text" Event="USER.MEMBERSHIP.EXPIRED" Type="0">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IE1lbWJlcnNoaXAgZXhwaXJlZAoKTWVtYmVyc2hpcCBleHBpcmVk</EVENT>
+ <EVENT MessageType="text" Event="USER.MEMBERSHIP.EXPIRED" Type="1">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IE1lbWJlcnNoaXAgZXhwaXJlZAoKTWVtYmVyc2hpcCBleHBpcmVk</EVENT>
+ <EVENT MessageType="text" Event="USER.PSWD" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogTG9zdCBwYXNzd29yZAoKWW91ciBsb3N0IHBhc3N3b3JkIGhhcyBiZWVuIHJlc2V0LiBZb3VyIG5ldyBwYXNzd29yZCBpczogIjxpbnAyOnVfRm9yZ290dGVuUGFzc3dvcmQgLz4iLg==</EVENT>
+ <EVENT MessageType="text" Event="USER.PSWD" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogTG9zdCBwYXNzd29yZAoKWW91ciBsb3N0IHBhc3N3b3JkIGhhcyBiZWVuIHJlc2V0LiBZb3VyIG5ldyBwYXNzd29yZCBpczogIjxpbnAyOnVfRm9yZ290dGVuUGFzc3dvcmQgLz4iLg==</EVENT>
+ <EVENT MessageType="text" Event="USER.PSWDC" Type="0">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IFBhc3N3b3JkIHJlc2V0IGNvbmZpcm1hdGlvbgoKSGVsbG8sDQoNCkl0IHNlZW1zIHRoYXQgeW91IGhhdmUgcmVxdWVzdGVkIGEgcGFzc3dvcmQgcmVzZXQgZm9yIHlvdXIgSW4tcG9ydGFsIGFjY291bnQuIElmIHlvdSB3b3VsZCBsaWtlIHRvIHByb2NlZWQgYW5kIGNoYW5nZSB0aGUgcGFzc3dvcmQsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBiZWxvdzoNCjxpbnAyOnVfQ29uZmlybVBhc3N3b3JkTGluayBub19hbXA9IjEiLz4NCg0KWW91IHdpbGwgcmVjZWl2ZSBhIHNlY29uZCBlbWFpbCB3aXRoIHlvdXIgbmV3IHBhc3N3b3JkIHNob3J0bHkuDQoNCklmIHlvdSBiZWxpZXZlIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgZW1haWwgaW4gZXJyb3IsIHBsZWFzZSBpZ25vcmUgdGhpcyBlbWFpbC4gWW91ciBwYXNzd29yZCB3aWxsIG5vdCBiZSBjaGFuZ2VkIHVubGVzcyB5b3UgaGF2ZSBjbGlja2VkIG9uIHRoZSBhYm92ZSBsaW5rLg0K</EVENT>
+ <EVENT MessageType="text" Event="USER.SUBSCRIBE" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogU3Vic2NyaXB0aW9uIGNvbmZpcm1hdGlvbgoKWW91IGhhdmUgc3Vic2NyaWJlZCB0byA8aW5wOm1fcGFnZV90aXRsZSAvPiBtYWlsaW5nIGxpc3Qu</EVENT>
+ <EVENT MessageType="text" Event="USER.SUBSCRIBE" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQSB1c2VyIGhhcyBzdWJzY3JpYmVkCgpBIHVzZXIgaGFzIHN1YnNjcmliZWQgdG8gPGlucDptX3BhZ2VfdGl0bGUgLz4gbWFpbGluZyBsaXN0Lg==</EVENT>
+ <EVENT MessageType="html" Event="USER.SUGGEST" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogQ2hlY2sgb3V0IHRoaXMgc2l0ZQoKSGksDQoNClRoaXMgbWVzc2FnZSBoYXMgYmVlbiBzZW50IHRvIHlvdSBmcm9tIG9uZSBvZiB5b3VyIGZyaWVuZHMuDQpDaGVjayBvdXQgdGhpcyBzaXRlOiA8YSBocmVmPSI8aW5wOm1fdGhlbWVfdXJsIF9wYWdlPSJjdXJyZW50Ii8+Ij48aW5wOm1fcGFnZV90aXRsZSAvPjwvYT4h</EVENT>
+ <EVENT MessageType="text" Event="USER.SUGGEST" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogVGhlIHNpdGUgaGFzIGJlZW4gc3VnZ2VzdGVkCgpBIHZpc2l0b3Igc3VnZ2VzdGVkIHlvdXIgc2l0ZSB0byBhIGZyaWVuZC4=</EVENT>
+ <EVENT MessageType="text" Event="USER.UNSUBSCRIBE" Type="0">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogWW91IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQKCllvdSBoYXZlIHN1Y2Nlc3NmdWxseSB1bnN1YnNyaWJlZCBmcm9tIDxpbnA6bV9wYWdlX3RpdGxlIC8+IG1haWxpbmcgbGlzdC4=</EVENT>
+ <EVENT MessageType="text" Event="USER.UNSUBSCRIBE" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogVXNlciB1bnN1YnNyaWJlZAoKQSB1c2VyIGhhcyB1bnN1YnNjcmliZWQu</EVENT>
+ <EVENT MessageType="text" Event="USER.VALIDATE" Type="0">WC1Qcmlvcml0eTogMQpYLU1TTWFpbC1Qcmlvcml0eTogSGlnaApYLU1haWxlcjogSW4tUG9ydGFsClN1YmplY3Q6IEluLXBvcnRhbCByZWdpc3RyYXRpb24KCldlbGNvbWUgdG8gSW4tcG9ydGFsIQ0KDQpZb3VyIHVzZXIgcmVnaXN0cmF0aW9uIGhhcyBiZWVuIGFwcHJvdmVkIQ0KDQpZb3VyIHVzZXIgcmVnaXN0cmF0aW9uIGhhcyBiZWVuIGFwcHJvdmVkLiBZb3UgY2FuIGxvZ2luIG5vdyB1c2luZyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOg0KDQo9PT09PT09PT09PT09PT09PT0NClVzZXJuYW1lOiAiPGlucDp0b3VzZXIgX0ZpZWxkPSJVc2VyTmFtZSIgLz4iDQpQYXNzd29yZDogIjxpbnA6dG91c2VyIF9GaWVsZD0icGFzc3dvcmQiIC8+Ig0KPT09PT09PT09PT09PT09PT09DQo=</EVENT>
+ <EVENT MessageType="text" Event="USER.VALIDATE" Type="1">WC1Qcmlvcml0eTogMQ0KWC1NU01haWwtUHJpb3JpdHk6IEhpZ2gNClgtTWFpbGVyOiBJbi1Qb3J0YWwKU3ViamVjdDogVXNlciB2YWxpZGF0ZWQKClVzZXIgIjxpbnA6dG91c2VyIF9GaWVsZD0iVXNlck5hbWUiIC8+IiBoYXMgYmVlbiB2YWxpZGF0ZWQu</EVENT>
+ </EVENTS>
+ </LANGUAGE>
+</LANGUAGES>
\ No newline at end of file
Property changes on: branches/RC/kernel/install/english.lang
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/kernel/install/prerequisites.php
===================================================================
--- branches/RC/kernel/install/prerequisites.php (nonexistent)
+++ branches/RC/kernel/install/prerequisites.php (revision 10832)
@@ -0,0 +1,50 @@
+<?php
+ $prerequisite_class = 'InPortalPrerequisites';
+
+ /**
+ * Class, that holds all prerequisite scripts for "In-Portal" module
+ *
+ */
+ class InPortalPrerequisites extends kHelper {
+
+ /**
+ * Install toolkit instance
+ *
+ * @var kInstallToolkit
+ */
+ var $_toolkit = null;
+
+ /**
+ * Sets common instance of installator toolkit
+ *
+ * @param kInstallToolkit $instance
+ */
+ function setToolkit(&$instance)
+ {
+ $this->_toolkit =& $instance;
+ }
+
+ /**
+ * Checks minimal version, that could be upgradeable
+ *
+ * @param string $mode when called mode {install, upgrade)
+ */
+ function CheckPrerequisites($versions, $mode)
+ {
+ $errors = Array ();
+
+ if ($mode == 'upgrade') {
+ $min_version = '4.3.2';
+
+ $current_version = $this->_toolkit->ConvertModuleVersion($versions[0]);
+ $needed_version = $this->_toolkit->ConvertModuleVersion($min_version);
+ if ($current_version < $needed_version) {
+ $errors[] = 'Please upgrade "In-Portal" to version ' . $min_version . ' or above';
+ }
+ }
+
+ return $errors;
+ }
+ }
+
+?>
\ No newline at end of file
Property changes on: branches/RC/kernel/install/prerequisites.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/kernel/install/install_data.sql
===================================================================
--- branches/RC/kernel/install/install_data.sql (nonexistent)
+++ branches/RC/kernel/install/install_data.sql (revision 10832)
@@ -0,0 +1,243 @@
+INSERT INTO ConfigurationAdmin VALUES ('AllowDeleteRootCats', 'la_Text_General', 'la_AllowDeleteRootCats', 'checkbox', NULL , NULL , 10.09, 0, 0);
+INSERT INTO ConfigurationAdmin VALUES ('Catalog_PreselectModuleTab', 'la_Text_General', 'la_config_CatalogPreselectModuleTab', 'checkbox', NULL, NULL, 10.10, 0, 1);
+INSERT INTO ConfigurationAdmin VALUES ('RecycleBinFolder', 'la_Text_General', 'la_config_RecycleBinFolder', 'text', NULL , NULL , 10.11, 0, 0);
+
+INSERT INTO ConfigurationValues VALUES (DEFAULT, 'AllowDeleteRootCats', '0', 'In-Portal', 'in-portal:configure_categories');
+INSERT INTO ConfigurationValues VALUES (DEFAULT, 'Catalog_PreselectModuleTab', 1, 'In-Portal', 'in-portal:configure_categories');
+INSERT INTO ConfigurationValues VALUES (DEFAULT, 'RecycleBinFolder', '', 'In-Portal', 'in-portal:configure_categories');
+
+INSERT INTO ItemTypes VALUES (1, 'In-Portal', 'c', 'Category', 'Name', 'CreatedById', NULL, NULL, 'la_ItemTab_Categories', 1, 'admin/category/addcategory.php', 'clsCategory', 'Category');
+INSERT INTO ItemTypes VALUES (6, 'In-Portal', 'u', 'PortalUser', 'Login', 'PortalUserId', NULL, NULL, '', 0, '', 'clsPortalUser', 'User');
+
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'CATEGORY.ADD', 'lu_PermName_Category.Add_desc', 'lu_PermName_Category.Add_error', 'In-Portal');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'CATEGORY.DELETE', 'lu_PermName_Category.Delete_desc', 'lu_PermName_Category.Delete_error', 'In-Portal');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'CATEGORY.ADD.PENDING', 'lu_PermName_Category.AddPending_desc', 'lu_PermName_Category.AddPending_error', 'In-Portal');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'CATEGORY.MODIFY', 'lu_PermName_Category.Modify_desc', 'lu_PermName_Category.Modify_error', 'In-Portal');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'ADMIN', 'lu_PermName_Admin_desc', 'lu_PermName_Admin_error', 'Admin');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'LOGIN', 'lu_PermName_Login_desc', 'lu_PermName_Admin_error', 'Front');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'DEBUG.ITEM', 'lu_PermName_Debug.Item_desc', '', 'Admin');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'DEBUG.LIST', 'lu_PermName_Debug.List_desc', '', 'Admin');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'DEBUG.INFO', 'lu_PermName_Debug.Info_desc', '', 'Admin');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'PROFILE.MODIFY', 'lu_PermName_Profile.Modify_desc', '', 'Admin');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'SHOWLANG', 'lu_PermName_ShowLang_desc', '', 'Admin');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'FAVORITES', 'lu_PermName_favorites_desc', 'lu_PermName_favorites_error', 'In-Portal');
+INSERT INTO PermissionConfig VALUES (DEFAULT, 'SYSTEM_ACCESS.READONLY', 'la_PermName_SystemAccess.ReadOnly_desc', 'la_PermName_SystemAccess.ReadOnly_error', 'Admin');
+
+INSERT INTO Permissions VALUES (DEFAULT, 'LOGIN', 12, 1, 1, 0);
+
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:site.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:browse.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:advanced_view.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:reviews.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_categories.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_categories.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configuration_search.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configuration_search.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configuration_email.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configuration_email.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configuration_custom.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configuration_custom.add', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configuration_custom.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configuration_custom.delete', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:users.view', 11, 1, 1, 0);
+
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_list.advanced:ban', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_list.advanced:send_email', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_groups.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_groups.add', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_groups.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_groups.delete', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_groups.advanced:send_email', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_groups.advanced:manage_permissions', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_users.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_users.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_email.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_email.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_custom.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_custom.add', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_custom.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_custom.delete', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_banlist.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_banlist.add', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_banlist.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:user_banlist.delete', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:reports.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:log_summary.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:searchlog.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:searchlog.delete', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:sessionlog.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:sessionlog.delete', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:emaillog.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:emaillog.delete', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:visits.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:visits.delete', 11, 1, 1, 0);
+
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_general.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_general.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:modules.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:mod_status.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:mod_status.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:mod_status.advanced:approve', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:mod_status.advanced:decline', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:addmodule.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:addmodule.add', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:addmodule.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:tag_library.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_themes.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_themes.add', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_themes.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_themes.delete', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_styles.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_styles.add', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_styles.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_styles.delete', 11, 1, 1, 0);
+
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_lang.advanced:set_primary', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_lang.advanced:import', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:configure_lang.advanced:export', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:tools.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:backup.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:restore.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:export.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:main_import.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:sql_query.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:sql_query.edit', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:server_info.view', 11, 1, 1, 0);
+INSERT INTO Permissions VALUES (DEFAULT, 'in-portal:help.view', 11, 1, 1, 0);
+
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+INSERT INTO SearchConfig VALUES ('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);
+
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT count(*) FROM <%prefix%>Category WHERE Status=1 ', NULL, 'la_prompt_ActiveCategories', '0', '1');
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT count(*) FROM <%prefix%>PortalUser WHERE Status=1 ', NULL, 'la_prompt_ActiveUsers', '0', '1');
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT count(*) FROM <%prefix%>UserSession', NULL, 'la_prompt_CurrentSessions', '0', '1');
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) as CategoryCount FROM <%prefix%>Category', NULL, 'la_prompt_TotalCategories', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS ActiveCategories FROM <%prefix%>Category WHERE Status = 1', NULL, 'la_prompt_ActiveCategories', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS PendingCategories FROM <%prefix%>Category WHERE Status = 2', NULL, 'la_prompt_PendingCategories', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS DisabledCategories FROM <%prefix%>Category WHERE Status = 0', NULL, 'la_prompt_DisabledCategories', 0, 2);
+INSERT INTO StatItem VALUES (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);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) FROM <%prefix%>Category WHERE EditorsPick = 1', NULL, 'la_prompt_CategoryEditorsPick', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT <%m:post_format field="MAX(CreatedOn)" type="date"%> FROM <%prefix%>Category', NULL, 'la_prompt_NewestCategoryDate', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT <%m:post_format field="MAX(Modified)" type="date"%> FROM <%prefix%>Category', NULL, 'la_prompt_LastCategoryUpdate', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS TotalUsers FROM <%prefix%>PortalUser', NULL, 'la_prompt_TopicsUsers', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS ActiveUsers FROM <%prefix%>PortalUser WHERE Status = 1', NULL, 'la_prompt_UsersActive', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS PendingUsers FROM <%prefix%>PortalUser WHERE Status = 2', NULL, 'la_prompt_UsersPending', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS DisabledUsers FROM <%prefix%>PortalUser WHERE Status = 0', NULL, 'la_prompt_UsersDisabled', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT <%m:post_format field="MAX(CreatedOn)" type="date"%> FROM <%prefix%>PortalUser', NULL, 'la_prompt_NewestUserDate', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT( DISTINCT LOWER( Country ) ) FROM <%prefix%>PortalUser WHERE LENGTH(Country) > 0', NULL, 'la_prompt_UsersUniqueCountries', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT( DISTINCT LOWER( State ) ) FROM <%prefix%>PortalUser WHERE LENGTH(State) > 0', NULL, 'la_prompt_UsersUniqueStates', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS TotalUserGroups FROM <%prefix%>PortalGroup', NULL, 'la_prompt_TotalUserGroups', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS BannedUsers FROM <%prefix%>PortalUser WHERE IsBanned = 1', NULL, 'la_prompt_BannedUsers', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS NonExipedSessions FROM <%prefix%>UserSession WHERE Status = 1', NULL, 'la_prompt_NonExpiredSessions', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS ThemeCount FROM <%prefix%>Theme', NULL, 'la_prompt_ThemeCount', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', 'SELECT COUNT(*) AS RegionsCount FROM <%prefix%>Language', NULL, 'la_prompt_RegionsCount', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', '<%m:sql_action sql="SHOW+TABLES" action="COUNT" field="*"%>', NULL, 'la_prompt_TablesCount', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', '<%m:sql_action sql="SHOW+TABLE+STATUS" action="SUM" field="Rows"%>', NULL, 'la_prompt_RecordsCount', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', '<%m:custom_action sql="empty" action="SysFileSize"%>', NULL, 'la_prompt_SystemFileSize', 0, 2);
+INSERT INTO StatItem VALUES (DEFAULT, 'In-Portal', '<%m:sql_action sql="SHOW+TABLE+STATUS" action="SUM" format_as="file" field="Data_length"%>', NULL, 'la_prompt_DataSize', 0, 2);
+
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (118, 8, 'Data grid row', 'td.block-data-row', 'a:0:{}', '', 2, 'border-bottom: 1px solid #cccccc;', 48);
+INSERT INTO StylesheetSelectors VALUES (81, 8, '"More" link', 'a.link-more', 'a:0:{}', '', 2, 'text-decoration: underline;', 64);
+INSERT INTO StylesheetSelectors VALUES (88, 8, 'Block data, separated rows', 'td.block-data-grid', 'a:0:{}', '', 2, 'border: 1px solid #cccccc;', 48);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (76, 8, 'Navigation bar menu', 'tr.head-nav td', 'a:0:{}', '', 1, 'vertical-align: middle;', 0);
+INSERT INTO StylesheetSelectors VALUES (48, 8, 'Block data', 'td.block-data', 'a:2:{s:9:"font-size";s:5:"12px;";s:7:"padding";s:3:"5px";}', '', 1, '', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (58, 8, 'Main table', 'table.main-table', 'a:0:{}', '', 1, 'width: 770px;\r\nmargin: 0px;\r\n/*table-layout: fixed;*/', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (64, 8, 'Link', 'a', 'a:0:{}', '', 1, '', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (75, 8, 'Copy of Main path link', 'table.main-path td a:hover', 'a:0:{}', '', 1, 'color: #ffffff;', 0);
+INSERT INTO StylesheetSelectors VALUES (160, 8, 'Current item in navigation bar', '.checkout-step-current', 'a:0:{}', '', 1, 'color: #A20303;\r\nfont-weight: bold;', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (45, 8, 'Category link', 'a.subcat', 'a:0:{}', 'Category link', 1, 'color: #2069A4', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (73, 8, 'Main path link', 'table.main-path td a', 'a:0:{}', '', 1, 'color: #d5e231;', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (65, 8, 'Link in product list additional row', 'td.product-list-additional a', 'a:1:{s:5:"color";s:7:"#8B898B";}', '', 2, '', 64);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (66, 8, 'Pagination bar block', 'table.block-pagination', 'a:0:{}', '', 1, '', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (87, 8, 'Cart item input form element', 'td.cart-item-atributes input', 'a:0:{}', '', 1, 'border: 1px solid #7BB2E6;', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (82, 8, '"More" link image', 'a.link-more img', 'a:0:{}', '', 2, 'text-decoration: none;\r\npadding-left: 5px;', 64);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (80, 8, 'Right block data - text', 'td.right-block-data td', 'a:1:{s:9:"font-size";s:5:"11px;";}', '', 2, '', 48);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (56, 8, 'Main table, middle column', 'td.main-column-center', 'a:0:{}', '', 1, '\r\n', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (59, 8, 'Block without border', 'table.block-no-border', 'a:0:{}', '', 1, 'border: 0px; \r\nmargin-bottom: 10px;\r\nwidth: 100%;', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (171, 8, 'Calendar''s highlighted day', '.calendar tbody .hilite', 'a:0:{}', '', 1, 'background-color: #f6f6f6;\r\nborder: 1px solid #83B2C5 !important;', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (170, 8, 'Calendar''s weekends', '.calendar .weekend', 'a:0:{}', '', 1, 'color: #990000;', 0);
+INSERT INTO StylesheetSelectors VALUES (173, 8, 'Calendar''s control buttons', '.calendar .calendar_button', 'a:0:{}', '', 1, 'color: black;\r\nfont-size: 12px;\r\nbackground-color: #eeeeee;', 0);
+INSERT INTO StylesheetSelectors VALUES (174, 8, 'Calendar''s day names', '.calendar thead .name', 'a:0:{}', '', 1, 'background-color: #DEEEF6;\r\nborder-bottom: 1px solid #000000;', 0);
+INSERT INTO StylesheetSelectors VALUES (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);
+INSERT INTO StylesheetSelectors VALUES (60, 8, 'Block header for featured product', 'td.featured-block-header', 'a:0:{}', '', 2, '\r\n', 42);
+INSERT INTO StylesheetSelectors VALUES (54, 8, 'Right block', 'table.right-block', 'a:0:{}', '', 2, 'background-color: #E3EEF9;\r\nborder: 0px;\r\nwidth: 100%;', 43);
+INSERT INTO StylesheetSelectors VALUES (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);
+
+INSERT INTO Stylesheets VALUES (8, 'Default', 'In-Portal Default Theme', '', 1124952555, 1);
+
+INSERT INTO Counters VALUES (DEFAULT, 'members_count', 'SELECT COUNT(*) FROM <%PREFIX%>PortalUser WHERE Status = 1', NULL , NULL , '3600', '0', '|PortalUser|');
+INSERT INTO Counters VALUES (DEFAULT, 'members_online', 'SELECT COUNT(*) FROM <%PREFIX%>UserSession WHERE PortalUserId > 0', NULL , NULL , '3600', '0', '|UserSession|');
+INSERT INTO Counters VALUES (DEFAULT, 'guests_online', 'SELECT COUNT(*) FROM <%PREFIX%>UserSession WHERE PortalUserId <= 0', NULL , NULL , '3600', '0', '|UserSession|');
+INSERT INTO Counters VALUES (DEFAULT, 'users_online', 'SELECT COUNT(*) FROM <%PREFIX%>UserSession', NULL , NULL , '3600', '0', '|UserSession|');
+
+UPDATE ConfigurationValues SET VariableValue = 1 WHERE VariableName = 'KeepSessionOnBrowserClose';
+
+INSERT INTO Modules VALUES ('In-Portal', 'kernel/', 'm', '0.0.0', 1, 0, '', 0, '1054738405');
Property changes on: branches/RC/kernel/install/install_data.sql
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/kernel/admin_templates/incs/image_blocks.tpl
===================================================================
--- branches/RC/kernel/admin_templates/incs/image_blocks.tpl (revision 10831)
+++ branches/RC/kernel/admin_templates/incs/image_blocks.tpl (revision 10832)
@@ -1,152 +1,152 @@
<inp2:m_DefineElement name="image_block">
<img src="<inp2:m_param name="img_path" />" <inp2:m_param name="img_size"/> border="0" /><br />
</inp2:m_DefineElement>
<inp2:m_DefineElement name="thumbnail_section" prefix="" size="" class="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text">
<inp2:m_phrase label="la_fld_Location"/><br>
<span class="error"><inp2:{$prefix}_Error field="ThumbPath"/><inp2:{$prefix}_Error field="ThumbUrl"/></span>&nbsp;
</td>
<td>
<table border="0">
<tr>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="radio" <inp2:m_if check="{$prefix}_FieldEquals" field="LocalThumb" value="1">checked</inp2:m_if> name="<inp2:{$prefix}_InputName field="LocalThumb"/>" id="<inp2:{$prefix}_InputName field="LocalThumb"/>_1" value="1">
</td>
<td>
<inp2:m_phrase label="la_fld_Upload"/>:
</td>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="file" name="<inp2:{$prefix}_InputName field="ThumbPath"/>" id="<inp2:{$prefix}_InputName field="ThumbPath"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" onclick="document.getElementById('<inp2:m_param name="prefix"/>[<inp2:{$prefix}_Field field="ImageId"/>][LocalThumb]_1').checked = true">
<input type="hidden" name="<inp2:{$prefix}_InputName field="ThumbPath"/>[upload]" id="<inp2:{$prefix}_InputName field="ThumbPath"/>[upload]" value="<inp2:{$prefix}_Field field="ThumbPath"/>">
</td>
</tr>
<tr>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="radio" <inp2:m_if check="{$prefix}_FieldEquals" field="LocalThumb" value="0">checked</inp2:m_if> name="<inp2:{$prefix}_InputName field="LocalThumb"/>" id="<inp2:{$prefix}_InputName field="LocalThumb"/>_0" value="0">
</td>
<td>
<inp2:m_phrase label="la_fld_RemoteUrl"/>:
</td>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="text" name="<inp2:{$prefix}_InputName field="ThumbUrl"/>" id="<inp2:{$prefix}_InputName field="ThumbUrl"/>" value="<inp2:{$prefix}_Field field="ThumbUrl"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" onclick="document.getElementById('<inp2:m_param name="prefix"/>[<inp2:{$prefix}_Field field="ImageId"/>][LocalThumb]_0').checked = true">
</td>
</tr>
</table>
</td>
<td>
- <inp2:{$prefix}_Image block="image_block" Thumbnail="1" DefaultImage="../../kernel/images/noimage.gif"/>
+ <inp2:{$prefix}_Image block="image_block" Thumbnail="1" DefaultImage="noimage.gif"/>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="fullsize_section" prefix="" size="" class="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text">
<inp2:m_phrase label="la_fld_Location"/><br>
<span class="error"><inp2:{$prefix}_Error field="LocalPath"/><inp2:{$prefix}_Error field="Url"/></span>&nbsp;
</td>
<td>
<table border="0">
<tr>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="radio" <inp2:m_if check="{$prefix}_FieldEquals" field="LocalImage" value="1">checked</inp2:m_if> name="<inp2:{$prefix}_InputName field="LocalImage"/>" id="<inp2:{$prefix}_InputName field="LocalImage"/>_1" value="1">
</td>
<td>
<inp2:m_phrase label="la_fld_Upload"/>:
</td>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="file" name="<inp2:{$prefix}_InputName field="LocalPath"/>" id="<inp2:{$prefix}_InputName field="LocalPath"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" onclick="document.getElementById('<inp2:m_param name="prefix"/>[<inp2:{$prefix}_field field="ImageId"/>][LocalImage]_1').checked = true">
<input type="hidden" name="<inp2:{$prefix}_InputName field="LocalPath"/>[upload]" id="<inp2:{$prefix}_InputName field="LocalPath"/>[upload]" value="<inp2:{$prefix}_Field field="LocalPath"/>">
</td>
</tr>
<tr>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="radio" <inp2:m_if check="{$prefix}_FieldEquals" field="LocalImage" value="0">checked</inp2:m_if> name="<inp2:{$prefix}_InputName field="LocalImage"/>" id="<inp2:{$prefix}_InputName field="LocalImage"/>_0" value="0">
</td>
<td>
<inp2:m_phrase label="la_fld_RemoteUrl"/>:
</td>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="text" name="<inp2:{$prefix}_InputName field="Url"/>" id="<inp2:{$prefix}_InputName field="Url"/>" value="<inp2:{$prefix}_Field field="Url"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" onclick="document.getElementById('<inp2:m_param name="prefix"/>[<inp2:{$prefix}_Field field="ImageId"/>][LocalImage]_0').checked = true">
</td>
</tr>
</table>
</td>
<td>
- <inp2:{$prefix}_Image block="image_block" DefaultImage="../../kernel/images/noimage.gif"/>
+ <inp2:{$prefix}_Image block="image_block" DefaultImage="noimage.gif"/>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="images_edit_js">
function FieldID($field_name) {
var $field_mask = '<inp2:{$prefix}_InputName field="#FIELD#"/>';
return $field_mask.replace('#FIELD#', $field_name);
}
function toggle_fullsize() {
if (document.getElementById('_cb_' + FieldID('SameImages')).checked) {
document.getElementById(FieldID('LocalImage') + '_0').disabled = true;
document.getElementById(FieldID('LocalImage') + '_1').disabled = true;
document.getElementById(FieldID('LocalPath')).disabled = true;
document.getElementById(FieldID('Url')).disabled = true;
}
else {
document.getElementById(FieldID('LocalImage') + '_0').disabled = false;
document.getElementById(FieldID('LocalImage') + '_1').disabled = false;
document.getElementById(FieldID('LocalPath')).disabled = false;
document.getElementById(FieldID('Url')).disabled = false;
}
}
if (document.getElementById('_cb_' + FieldID('DefaultImg')).checked) {
document.getElementById('_cb_' + FieldID('DefaultImg')).disabled = true;
document.getElementById('_cb_' + FieldID('Enabled')).disabled = true;
}
function check_status() {
if (document.getElementById('_cb_' + FieldID('DefaultImg')).checked) {
document.getElementById('_cb_' + FieldID('Enabled')).checked = true;
document.getElementById(FieldID('Enabled')).value = 1;
}
}
function check_primary() {
if (!document.getElementById('_cb_' + FieldID('Enabled')).checked) {
document.getElementById('_cb_' + FieldID('DefaultImg')).checked = false;
document.getElementById(FieldID('DefaultImg')).value = 0;
}
}
</inp2:m_DefineElement>
<inp2:m_DefineElement name="image_caption_td" >
<td valign="top" class="text">
<input type="checkbox" name="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>" id="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>">
<img src="<inp2:ModulePath module="In-Portal"/>img/itemicons/<inp2:{$PrefixSpecial}_ItemIcon grid="$grid"/>">
<inp2:Field field="$field" grid="$grid"/><span class="priority"><inp2:m_if check="{$PrefixSpecial}_fieldequals" field="Priority" value="0"><inp2:m_else/><sup><inp2:{$PrefixSpecial}_field field="Priority" /></sup></inp2:m_if></span>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="image_preview_td">
<td>
- <inp2:Image block="image_block" Thumbnail="1" DefaultImage="../../kernel/images/noimage.gif" MaxWidth="120" MaxHeight="120"/>
+ <inp2:Image block="image_block" Thumbnail="1" DefaultImage="noimage.gif" MaxWidth="120" MaxHeight="120"/>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="image_url_td">
<td valign="top" class="text">
<inp2:ImageUrl local_phrase="!la_LocalImage!"/>
</td>
</inp2:m_DefineElement>
Property changes on: branches/RC/kernel/admin_templates/incs/image_blocks.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.7.2.1
\ No newline at end of property
+1.7.2.2
\ No newline at end of property
Index: branches/RC/system/backupdata
===================================================================
--- branches/RC/system/backupdata (nonexistent)
+++ branches/RC/system/backupdata (revision 10832)
Property changes on: branches/RC/system/backupdata
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/user_files/Images
===================================================================
--- branches/RC/system/user_files/Images (nonexistent)
+++ branches/RC/system/user_files/Images (revision 10832)
Property changes on: branches/RC/system/user_files/Images
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/export
===================================================================
--- branches/RC/system/export (nonexistent)
+++ branches/RC/system/export (revision 10832)
Property changes on: branches/RC/system/export
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/cache
===================================================================
--- branches/RC/system/cache (revision 10831)
+++ branches/RC/system/cache (revision 10832)
Property changes on: branches/RC/system/cache
___________________________________________________________________
Modified: svn:ignore
## -2,5 +2,6 ##
proj-*
custom
core
+kernel
in-*
themes
Index: branches/RC/system/images/manufacturers/resized
===================================================================
--- branches/RC/system/images/manufacturers/resized (nonexistent)
+++ branches/RC/system/images/manufacturers/resized (revision 10832)
Property changes on: branches/RC/system/images/manufacturers/resized
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/images/manufacturers
===================================================================
--- branches/RC/system/images/manufacturers (nonexistent)
+++ branches/RC/system/images/manufacturers (revision 10832)
Property changes on: branches/RC/system/images/manufacturers
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/images/emoticons
===================================================================
--- branches/RC/system/images/emoticons (nonexistent)
+++ branches/RC/system/images/emoticons (revision 10832)
Property changes on: branches/RC/system/images/emoticons
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/images/pending/resized
===================================================================
--- branches/RC/system/images/pending/resized (nonexistent)
+++ branches/RC/system/images/pending/resized (revision 10832)
Property changes on: branches/RC/system/images/pending/resized
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/images/pending
===================================================================
--- branches/RC/system/images/pending (nonexistent)
+++ branches/RC/system/images/pending (revision 10832)
Property changes on: branches/RC/system/images/pending
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/images/resized
===================================================================
--- branches/RC/system/images/resized (nonexistent)
+++ branches/RC/system/images/resized (revision 10832)
Property changes on: branches/RC/system/images/resized
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/images
===================================================================
--- branches/RC/system/images (nonexistent)
+++ branches/RC/system/images (revision 10832)
Property changes on: branches/RC/system/images
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system/stylesheets
===================================================================
--- branches/RC/system/stylesheets (nonexistent)
+++ branches/RC/system/stylesheets (revision 10832)
Property changes on: branches/RC/system/stylesheets
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.*
Index: branches/RC/system
===================================================================
--- branches/RC/system (revision 10831)
+++ branches/RC/system (revision 10832)
Property changes on: branches/RC/system
___________________________________________________________________
Modified: svn:ignore
## -1,2 +1 ##
-export
user_files
Index: branches/RC/admin/modules/addmodule.php
===================================================================
--- branches/RC/admin/modules/addmodule.php (revision 10831)
+++ branches/RC/admin/modules/addmodule.php (revision 10832)
@@ -1,171 +1,179 @@
<?php
##############################################################
##In-portal ##
##############################################################
## In-portal ##
## Intechnic Corporation ##
## All Rights Reserved, 1998-2002 ##
-## ##
-## No portion of this code may be copied, reproduced or ##
+## ##
+## No portion of this code may be copied, reproduced or ##
## otherwise redistributed without proper written ##
## consent of Intechnic Corporation. Violation will ##
## result in revocation of the license and support ##
## privileges along maximum prosecution allowed by law. ##
##############################################################
// new startup: begin
define('REL_PATH', 'admin/modules');
$relation_level = count( explode('/', REL_PATH) );
define('FULL_PATH', realpath(dirname(__FILE__) . str_repeat('/..', $relation_level) ) );
require_once FULL_PATH.'/kernel/startup.php';
// new startup: end
checkViewPermission('in-portal:addmodule');
$pathtolocal = $pathtoroot."kernel/";
require_once ($pathtoroot.$admin."/include/elements.php");
require_once $pathtoroot.$admin.'/install/install_lib.php';
require_once ($pathtoroot."kernel/admin/include/navmenu.php");
require_once ($pathtolocal."admin/include/navmenu.php");
require_once($pathtoroot.$admin."/toolbar.php");
require_once($pathtoroot.$admin."/listview/listview.php");
$pathtolocal = $pathtoroot;
//Set Section
$section = 'in-portal:addmodule';
//Set Environment Variable
$envar = "env=" . BuildEnv();
//Display header
$order = $objConfig->Get("Module_SortOrder");
$orderBy = trim($objConfig->Get("Module_SortField")." ".$order);
if(strlen($orderBy))
{
$orderBy = " ORDER BY LoadOrder,".$orderBy;
}
else
$orderBy = " ORDER BY LoadOrder";
// 1. get list of modules installed in system
$objModules->Clear();
$sql = "SELECT * FROM ".GetTablePrefix()."Modules";
$objModules->Query_Item($sql);
$objModList = new clsModList();
$path = $pathtoroot;
// 2. get folders on HDD, that probably are modules, but not installed yet
$new = array();
if ($dir = @opendir($path)) {
while (($file = readdir($dir)) !== false) {
if ($file !="." && $file !=".." && substr($file,0,1)!="_") {
if (is_dir($path.'/'.$file)) {
- $inst_file = $path.'/'.$file.'/'.$admin."/install.php";
- if (file_exists($inst_file)) {
+ if (file_exists($path . '/' . $file . '/' . $admin . '/install.php')) {
if (!$objModules->ModuleInstalled($file)) {
- $new[$file] = $inst_file;
+ $new[$file] = false; // not new module
+ }
+ }
+
+ if (file_exists($path . '/' . $file . '/install.php')) {
+ if ('/' . $file == ADMIN_DIRECTORY) {
+ // don't count in-portal folder as module
+ continue;
+ }
+
+ if (!$objModules->ModuleInstalled($file)) {
+ $new[$file] = true; // new module
}
}
}
}
}
closedir($dir);
}
-foreach ($new as $mod => $file)
+foreach ($new as $mod => $new_module)
{
$m = new clsModule();
+ $script_location = $new_module ? '' : '/admin';
+
unset($data);
$data = array();
$status= admin_language("la_text_ready_to_install");
$pre_error = admin_language("la_text_prerequisit_not_passed");
-
- $mod_tmp_name_arr = explode('-', $mod);
-
- $mod_tmp_name = '';
- foreach ($mod_tmp_name_arr as $names) {
- $mod_tmp_name .= ucfirst($names)."-";
- }
-
- $mod_tmp_name = substr($mod_tmp_name, 0, strlen($mod_tmp_name) - 1);
-
+
+ $mod_tmp_name = implode('-', array_map('ucfirst', explode('-', $mod)));
if (ed592fe427e1ce60e32ffcb0c82d8557($mod_tmp_name)) {
- if (file_exists($pathtoroot.strtolower($mod_tmp_name)."/admin/install/prerequisit.php")) {
- include_once($pathtoroot.strtolower($mod_tmp_name)."/admin/install/prerequisit.php");
+ $result = true;
+
+ if (file_exists($pathtoroot.strtolower($mod_tmp_name) . $script_location . '/install/prerequisit.php')) {
+ include_once($pathtoroot.strtolower($mod_tmp_name) . $script_location . '/install/prerequisit.php');
}
-
+
if ($result) {
// prerequisit check is ok
- $data["Url"] = "<A HREF=\"".$rootURL.$mod."/admin/install.php?env=".BuildEnv()."&redirect=1&admin=1\">$status</A>";
+ $url = $application->HREF('dummy', '_FRONT_END_', Array ('redirect' => 1, 'admin' => 1), $mod . $script_location . '/install.php');
+ $data['Url'] = '<a href="' . $url . '">' . $status . '</a>';
}
else {
// prerequisit check failed
$show_errors = true;
- $data["Url"] = '<span style="color: #FF0000; cursor: hand; cursor: pointer" onClick="javascript:CreatePopup(\'ModuleErrors\', \''.$rootURL.'admin/install/prerequisit_errors.php?module='.strtolower($mod_tmp_name).'\');">'.$pre_error.'</span>';
+ $url = $application->HREF('dummy', '', Array ('module' => strtolower($mod_tmp_name), 'is_new' => (int)$new_module), 'install/prerequisit_errors.php');
+ $data['Url'] = '<span style="color: #FF0000; cursor: hand; cursor: pointer" onclick="javascript:CreatePopup(\'ModuleErrors\', \'' . $url . '\');">'.$pre_error.'</span>';
}
}
else {
- $data["Url"] = '<a href="'.$rootURL.'admin/modules/upgrade_lic.php?env='.BuildEnv().'"><font color="#FF0000">'.admin_language("la_module_not_licensed").'</font></a>';
+ $data['Url'] = '<a href="' . $rootURL . $script_location . 'modules/upgrade_lic.php?env='.BuildEnv().'"><font color="#FF0000">'.admin_language("la_module_not_licensed").'</font></a>';
}
-
- $data["Name"] = $mod_tmp_name;
- $objModList->AddItemFromArray($data);
+
+ $data['Name'] = $mod_tmp_name;
+ $objModList->AddItemFromArray($data);
}
$itemcount = $objModList->NumItems();
$title = admin_language("la_Text_Install")." ".admin_language("la_Text_Modules")." (".$itemcount.")";
$objListView = new clsListView(NULL,$objModList);
$objListView->IdField = "Name";
$objListView->PageLinkTemplate = $pathtoroot.$admin."/templates/user_page_link.tpl";
$objListView->ColumnHeaders->Add("Name", admin_language("la_prompt_Available_Modules"),1,0,$order,"width=\"50%\"","Module_SortField","Module_SortOrder","Name");
$objListView->ColumnHeaders->Add("Url",admin_language("la_prompt_Install_Status"),1,0,$order,"width=\"50%\"","Module_SortField","Module_SortOrder","Version");
$objListView->ColumnHeaders->SetSort("Name",$order);
$objListView->PrintToolBar = FALSE;
$objListView->SearchBar = FALSE;
$objListView->checkboxes= FALSE;
$objListView->SearchAction="";
$objListView->CurrentPageVar = "Page_Modules";
$objListView->PerPageVar = "Perpage_Modules";
$objListView->CheckboxName = "";
$objListView->TotalItemCount = $itemcount;
$objListView->SelectorType="none";
int_header(null,NULL,$title);
?>
<FORM method="POST" ACTION="" NAME="modlistform" ID="modlistform">
<?php
$objListView->PageLinks = $objListView->PrintPageLinks(); /* call this before we slice! */
$objListView->SliceItems();
print $objListView->PrintList();
?>
<input type="hidden" name="Action" value="">
</FORM>
<!-- CODE FOR VIEW MENU -->
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]."?env=".BuildEnv(); ?>" name="viewmenu">
<input type="hidden" name="fieldname" value="">
<input type="hidden" name="varvalue" value="">
<input type="hidden" name="varvalue2" value="">
<input type="hidden" name="Action" value="">
</form>
<script src="<?php echo $adminURL; ?>/listview/listview.js"></script>
<script>
initSelectiorContainers()
</script>
<!-- END CODE-->
<?php int_footer(); ?>
Property changes on: branches/RC/admin/modules/addmodule.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.17
\ No newline at end of property
+1.17.2.1
\ No newline at end of property
Index: branches/RC/admin/install.php
===================================================================
--- branches/RC/admin/install.php (revision 10831)
+++ branches/RC/admin/install.php (revision 10832)
@@ -1,2058 +1,2060 @@
<?php
error_reporting(E_ALL);
set_time_limit(0);
ini_set('memory_limit', -1);
define('BACKUP_NAME', 'dump(.*).txt'); // how backup dump files are named
$general_error = '';
// new path detection without K4 init: begin
define('FULL_PATH', realpath(dirname(__FILE__).'/..'));
define('ADMIN_DIRECTORY', preg_replace('/^'.preg_quote(FULL_PATH, '/').'/', '', realpath(dirname(__FILE__))));
define('BASE_PATH', rtrim(preg_replace('#'.ADMIN_DIRECTORY.'$#', '', str_replace('\\', '/', dirname($_SERVER['PHP_SELF']))), '/'));
$rootURL = 'http://'.$_SERVER['HTTP_HOST'].rtrim(BASE_PATH, '/').ADMIN_DIRECTORY.'/';
// new path detection without K4 init: end
$pathtoroot = FULL_PATH.'/';
$admin = trim(ADMIN_DIRECTORY, '/');
ini_set('include_path', '.');
if (!defined('IS_INSTALL')) define('IS_INSTALL',1);
if( file_exists($pathtoroot.'debug.php') && !(defined('DEBUG_MODE') && DEBUG_MODE) ) include_once($pathtoroot.'debug.php');
$state = isset($_GET["state"]) ? $_GET["state"] : '';
if(!strlen($state))
{
$state = isset($_POST['state']) ? $_POST['state'] : '';
}
if (!defined("GET_LICENSE_URL")) {
define("GET_LICENSE_URL", "http://www.intechnic.com/myaccount/license.php");
}
require_once $pathtoroot.$admin.'/install/install_lib.php';
$install_type = GetVar('install_type', true);
$force_finish = isset($_REQUEST['ff']) ? true : false;
$ini_file = FULL_PATH.'/config.php';
if (file_exists($ini_file)) {
$write_access = is_writable($ini_file);
$ini_vars = inst_parse_portal_ini($ini_file, true);
foreach ($ini_vars as $secname => $section) {
foreach ($section as $key => $value) {
$key = 'g_'.str_replace('-', '', $key);
global $$key;
$$key = $value;
}
}
}
else
{
$state="";
$write_access = is_writable($pathtoroot);
if($write_access)
{
set_ini_value('Database', 'DBType', '');
set_ini_value('Database', 'DBHost', '');
set_ini_value('Database', 'DBUser', '');
set_ini_value('Database', 'DBUserPassword', '');
set_ini_value('Database', 'DBName', '');
set_ini_value('Module Versions', 'In-Portal', '');
save_values();
}
}
$titles[1] = "General Site Setup";
$configs[1] = "in-portal:configure_general";
$mods[1] = "In-Portal";
$titles[2] = "User Setup";
$configs[2] = "in-portal:configure_users";
$mods[2] = "In-Portal:Users";
$titles[3] = "Category Display Setup";
$configs[3] = "in-portal:configure_categories";
$mods[3] = "In-Portal";
// simulate rootURL variable: begin
$rootURL = 'http://'.dirname($_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']);
$tmp = explode('/', $rootURL);
if( $tmp[ count($tmp) - 1 ] == $admin) unset( $tmp[ count($tmp) - 1 ] );
$rootURL = implode('/', $tmp).'/';
unset($tmp);
//echo "RU: $rootURL<br>";
// simulate rootURL variable: end
$db_savings = Array('dbinfo', 'db_config_save', 'db_reconfig_save'); //, 'reinstall_process'
if( isset($g_DBType) && $g_DBType && strlen($state)>0 && !in_array($state, $db_savings) )
{
define('REL_PATH', 'admin');
require_once($pathtoroot."kernel/startup.php");
$localURL=$rootURL."kernel/";
$adminURL = $rootURL.$admin;
$imagesURL = $adminURL."/images";
//admin only util
$pathtolocal = $pathtoroot."kernel/";
require_once ($pathtoroot.$admin."/include/elements.php");
//require_once ($pathtoroot."kernel/admin/include/navmenu.php");
require_once ($pathtolocal."admin/include/navmenu.php");
require_once($pathtoroot.$admin."/toolbar.php");
set_cookie(SESSION_COOKIE_NAME, '', adodb_mktime() - 3600, rtrim(BASE_PATH, '/') );
}
function GetPathChar($path = null)
{
if( !isset($path) ) $path = $GLOBALS['pathtoroot'];
$pos = strpos($path, ':');
return ($pos === false) ? "/" : "\\";
}
function SuperStrip($str, $inverse = false)
{
$str = $inverse ? str_replace("%5C","\\",$str) : str_replace("\\","%5C",$str);
return stripslashes($str);
}
$skip_step = false;
require_once($pathtoroot.$admin."/install/inst_ado.php");
$helpURL = $rootURL.$admin.'/help/install_help.php?destform=popup&help_usage=install';
?>
<html>
<head>
<title>In-Portal Installation</title>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<meta name="generator" content="Notepad">
<link rel="stylesheet" type="text/css" href="include/style.css">
<LINK REL="stylesheet" TYPE="text/css" href="install/2col.css">
<SCRIPT LANGUAGE="JavaScript1.2">
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function swap(imgid, src){
var ob = document.getElementById(imgid);
ob.src = 'images/' + src;
}
function Continue() {
document.iform1.submit();
}
function CreatePopup(window_name, url, width, height)
{
// creates a popup window & returns it
if(url == null && typeof(url) == 'undefined' ) url = '';
if(width == null && typeof(width) == 'undefined' ) width = 750;
if(height == null && typeof(height) == 'undefined' ) height = 400;
return window.open(url,window_name,'width='+width+',height='+height+',status=yes,resizable=yes,menubar=no,scrollbars=yes,toolbar=no');
}
function ShowHelp(section)
{
var frm = document.getElementById('help_form');
frm.section.value = section;
frm.method = 'POST';
CreatePopup('HelpPopup','<?php echo $rootURL.$admin; ?>/help/blank.html'); // , null, 600);
frm.target = 'HelpPopup';
frm.submit();
}
</SCRIPT>
</head>
<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" style="height: 100%">
<form name="help_form" id="help_form" action="<?php echo $helpURL; ?>" method="post"><input type="hidden" id="section" name="section" value=""></form>
<form enctype="multipart/form-data" name="iform1" id="iform1" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
<tr>
<td height="90">
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="90">
<tr>
<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img title="In-portal" src="images/globe.gif" width="84" height="91" border="0"></a></td>
<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img title="In-portal" src="images/logo.gif" width="150" height="91" border="0"></a></td>
<td rowspan="3" width="100000" align="right">&nbsp;</td>
<td width="400"><img title="" src="images/blocks.gif" width="400" height="73"></td>
</tr>
<tr><td align="right" background="images/version_bg.gif" class="head_version" valign="top"><img title="" src="images/spacer.gif" width="1" height="14">In-Portal Version <?php echo GetMaxPortalVersion($pathtoroot.$admin)?>: English US</td></tr>
<tr><td><img title="" src="images/blocks2.gif" width="400" height="2"><br></td></tr>
<tr><td bgcolor="black" colspan="4"><img title="" src="images/spacer.gif" width="1" height="1"><br></td></tr>
</table>
</td>
</tr>
<?php
require_once($pathtoroot."kernel/include/adodb/adodb.inc.php");
if(!strlen($state))
$state = @$_POST["state"];
//echo $state;
if(strlen($state)==0)
{
$ado =& inst_GetADODBConnection();
$installed = $ado ? TableExists($ado,"ConfigurationAdmin,Category,Permissions") : false;
if(!minimum_php_version("4.1.2"))
{
$general_error = "You have version ".phpversion()." - please upgrade!";
//die();
}
if(!$write_access)
{
if ($general_error != '') {
$general_error .= '<br /><br />';
}
$general_error .= "Install cannot write to config.php in the root directory of your in-portal installation ($pathtoroot).";
//die();
}
if(!is_writable($pathtoroot."themes/"))
{
if ($general_error != '') {
$general_error .= '<br /><br />';
}
$general_error .= "In-portal's Theme directory must be writable (".$pathtoroot."themes/).";
//die();
}
if(!is_writable($pathtoroot."kernel/images/"))
{
if ($general_error != '') {
$general_error .= '<br /><br />';
}
$general_error .= "In-portal's Image Upload directory must be writable (".$pathtoroot."kernel/images/).";
//die();
}
if(!is_writable($pathtoroot."kernel/images/pending"))
{
if ($general_error != '') {
$general_error .= '<br /><br />';
}
$general_error .= "In-portal's Pending Image Upload directory must be writable (".$pathtoroot."kernel/images/pending).";
//die();
}
if(!is_writable($pathtoroot.$admin."/backupdata/"))
{
if ($general_error != '') {
$general_error .= '<br /><br />';
}
$general_error .= "In-portal's Backup directory must be writable (".$pathtoroot.$admin."/backupdata/).";
//die();
}
if(!is_writable($pathtoroot.$admin."/export/"))
{
if ($general_error != '') {
$general_error .= '<br /><br />';
}
$general_error .= "In-portal's Export directory must be writable (".$pathtoroot.$admin."/export/).";
//die();
}
if(!is_writable($pathtoroot."kernel/stylesheets/"))
{
if ($general_error != '') {
$general_error .= '<br /><br />';
}
$general_error .= "In-portal's stylesheets directory must be writable (".$pathtoroot."kernel/stylesheets/).";
//die();
}
if(!is_writable($pathtoroot."kernel/user_files/"))
{
if ($general_error != '') {
$general_error .= '<br /><br />';
}
$general_error .= "In-portal's CMS images directory must be writable (".$pathtoroot."kernel/user_files/).";
//die();
}
if(!is_writable($pathtoroot."kernel/cache/"))
{
if ($general_error != '') {
$general_error .= '<br /><br />';
}
$general_error .= "In-portal's templates cache directory must be writable (".$pathtoroot."kernel/cache/).";
//die();
}
if($installed)
{
$state="reinstall";
}
else {
$state="dbinfo";
}
}
if($state=="reinstall_process")
{
$login_err_mesg = ''; // always init vars before use
if( !isset($g_License) ) $g_License = '';
$lic = base64_decode($g_License);
if(strlen($lic))
{
a83570933e44bc66b31dd7127cf3f23a($lic);
$ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
}
$LoggedIn = FALSE;
if($_POST["UserName"]=="root")
{
$ado =& inst_GetADODBConnection();
$sql = "SELECT * FROM ".$g_TablePrefix."ConfigurationValues WHERE VariableName='RootPass'";
$rs = $ado->Execute($sql);
if($rs && !$rs->EOF)
{
$RootPass = $rs->fields["VariableValue"];
if(strlen($RootPass)>0) {
if (ConvertVersion($g_InPortal) >= ConvertVersion("1.3.0")) {
$LoggedIn = ($RootPass==md5(md5($_POST["UserPass"]).'b38'));
}
else {
$LoggedIn = ($RootPass==md5($_POST["UserPass"]));
}
}
}
else {
$login_err_mesg = 'Invalid username or password';
}
}
else
{
$act = '';
if (ConvertVersion($g_InPortal) >= ConvertVersion("1.0.5")) {
$act = 'check';
}
$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['UserName'])."&password=".md5($_POST['UserPass'])."&action=$act&license_code=".base64_encode($g_LicenseCode)."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".base64_encode($_SERVER['HTTP_HOST']), "r");
if (!$rfile) {
$login_err_mesg = "Unable to connect to the Intechnic server!";
$LoggedIn = false;
}
else {
$rcontents = '';
while (!feof($rfile)) {
$line = fgets($rfile, 10000);
$rcontents .= $line;
}
@fclose($rfile);
if (substr($rcontents, 0, 5) == 'Error') {
$login_err_mesg = substr($rcontents, 6);
$LoggedIn = false;
}
else {
$LoggedIn = true;
}
}
//$LoggedIn = ($i_User == $_POST["UserName"] && ($i_Pswd == $_POST["UserPass"]) && strlen($i_User)>0) || strlen($i_User)==0;
}
if($LoggedIn)
{
if (!(int)$_POST["inp_opt"]) {
$state="reinstall";
$inst_error = "Please select one of the options above!";
}
else {
switch((int)$_POST["inp_opt"])
{
case 0:
$inst_error = "Please select an option above";
break;
case 1:
/* clean out all tables */
$install_type = 4;
$ado =& inst_GetADODBConnection();
$filename = $pathtoroot.$admin."/install/inportal_remove.sql";
RunSchemaFile($ado,$filename);
// removing other tables
$tables = $ado->MetaTables();
foreach($tables as $tab_name) {
if (stristr($tab_name, $g_TablePrefix."ses_")) {
$sql = "DROP TABLE IF EXISTS $tab_name";
$ado->Execute($sql);
}
}
/* run install again */
$state="license";
break;
case 2:
$install_type = 3;
$state="dbinfo";
break;
case 3:
$install_type = 5;
$state="license";
break;
case 4:
$install_type = 6;
/* clean out all tables */
$ado =& inst_GetADODBConnection();
//$filename = $pathtoroot.$admin."/install/inportal_remove.sql";
//RunSchemaFile($ado,$filename);
/* run install again */
$state="restore_select";
break;
case 5:
$install_type = 7;
/* change DB config */
$state="db_reconfig";
break;
case 6:
$install_type = 8;
$state = "upgrade";
break;
case 7:
$install_type = 9;
$state = "fix_paths";
break;
}
}
}
else
{
$state="reinstall";
$login_error = $login_err_mesg;//"Invalid Username or Password - Try Again";
}
}
if ($state == "upgrade") {
$ado =& inst_GetADODBConnection();
$Modules = array();
$Texts = array();
if (ConvertVersion(GetMaxPortalVersion($pathtoroot.$admin)) >= ConvertVersion("1.0.5") && ($g_LicenseCode == '' && $g_License != '')) {
$state = 'reinstall';
$inst_error = "Your license must be updated before you can upgrade. Please don't use 'Existing License' option, instead either Download from Intechnic or Upload a new license file!";
}
else {
$sql = "SELECT Name, Version, Path FROM ".$g_TablePrefix."Modules ORDER BY LoadOrder asc";
$rs = $ado->Execute($sql);
$i = 0;
while ($rs && !$rs->EOF) {
$p = $rs->fields['Path'];
if ($rs->fields['Name'] == 'In-Portal') {
$p = '';
}
$dir_name = $pathtoroot.$p."admin";///install/upgrades/";
if($rs->fields['Version'] != $newver = GetMaxPortalVersion($dir_name))
{
////////////////////
$mod_path = $rs->fields['Path'];
$current_version = $rs->fields['Version'];
if ($rs->fields['Name'] == 'In-Portal') $mod_path = '';
$dir_name = $pathtoroot.$mod_path."/admin/install/upgrades/";
$dir = @dir($dir_name);
if (!$dir) {
$rs->MoveNext();
continue;
}
$upgrades_arr = Array();
$new_version = '';
while ($file = $dir->read()) {
if ($file != "." && $file != ".." && !is_dir($dir_name.$file)) {
if (strstr($file, 'inportal_check_v')) {
$upgrades_arr[] = $file;
}
}
}
usort($upgrades_arr, "VersionSort");
$result=0;
$failCheck=1;
$stopCheck=2;
$CheckErrors = Array();
foreach($upgrades_arr as $file)
{
$file_tmp = str_replace("inportal_check_v", "", $file);
$file_tmp = str_replace(".php", "", $file_tmp);
if (ConvertVersion($file_tmp) > ConvertVersion($current_version)) {
$filename = $pathtoroot.$mod_path."/admin/install/upgrades/$file";
if(file_exists($filename))
{
include($filename);
if( $result & 2 ) break;
}
}
}
////////////////////
$Modules[] = Array('module'=>$rs->fields['Name'],'curver'=>$rs->fields['Version'],'newver'=>$newver,'error'=>$result!='pass');
// $Texts[] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".GetMaxPortalVersion($dir_name).")";
}
/*$dir = @dir($dir_name);
while ($file = $dir->read()) {
if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
{
if (strstr($file, 'inportal_upgrade_v')) {
$file = str_replace("inportal_upgrade_v", "", $file);
$file = str_replace(".sql", "", $file);
//$sql = "SELECT count(*) AS count FROM ".$g_TablePrefix."Modules WHERE Name = '".$rs->fields['Name']."' AND Version = '$file'";
//$rs1 = $ado->Execute($sql);
if ($rs1->fields['count'] == 0 && ConvertVersion($file) > ConvertVersion($rs->fields['Version'])) {
if ($Modules[$i-1] == $rs->fields['Name']) {
$Texts[$i-1] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".$file.")";
$i--;
}
else {
$Texts[$i] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".$file.")";
$Modules[$i] = $rs->fields['Name'];
}
$i++;
}
}
}
}*/
$rs->MoveNext();
}
$sql = 'DELETE FROM '.$g_TablePrefix.'Cache WHERE VarName IN ("config_files","configs_parsed","sections_parsed")';
$ado->Execute($sql);
$include_file = $pathtoroot.$admin."/install/upgrade.php";
}
}
if ($state == "upgrade_process") {
// K4 applition is now always available during upgrade process
if (!defined('FULL_PATH')) {
define('FULL_PATH', realpath(dirname(__FILE__).'/..'));
}
include_once(FULL_PATH.'/core/kernel/startup.php');
$application =& kApplication::Instance();
$application->Init();
// force rereading of configs
$unit_config_reader =& $application->recallObject('kUnitConfigReader');
$unit_config_reader->scanModules(MODULES_PATH);
$ado =& inst_GetADODBConnection();
$mod_arr = $_POST['modules'];
$mod_str = '';
foreach ($mod_arr as $tmp_mod) {
$mod_str .= "'$tmp_mod',";
}
$mod_str = substr($mod_str, 0, strlen($mod_str) - 1);
$sql = "SELECT Name FROM ".$g_TablePrefix."Modules WHERE Name IN ($mod_str) ORDER BY LoadOrder";
$rs = $ado->Execute($sql);
$mod_arr = array();
while ($rs && !$rs->EOF) {
$mod_arr[] = $rs->fields['Name'];
$rs->MoveNext();
}
foreach($mod_arr as $p)
{
$mod_name = strtolower($p);
$sql = "SELECT Version, Path FROM ".$g_TablePrefix."Modules WHERE Name = '$p'";
$rs = $ado->Execute($sql);
$current_version = $rs->fields['Version'];
if ($mod_name == 'in-portal') {
$mod_path = '';
}
else {
$mod_path = $rs->fields['Path'];
}
$dir_name = $pathtoroot.$mod_path."/admin/install/upgrades/";
$dir = @dir($dir_name);
$upgrades_arr = Array();
$new_version = '';
while ($file = $dir->read()) {
if ($file != "." && $file != ".." && !is_dir($dir_name.$file)) {
if (strstr($file, 'inportal_upgrade_v')) {
$upgrades_arr[] = $file;
}
}
}
usort($upgrades_arr, "VersionSort");
foreach($upgrades_arr as $file)
{
preg_match('/inportal_upgrade_v(.*).(php|sql)$/', $file, $rets);
$tmp_version = $rets[1];
$tmp_extension = $rets[2];
if (ConvertVersion($tmp_version) > ConvertVersion($current_version) )
{
$filename = $pathtoroot.$mod_path."/admin/install/upgrades/$file";
//echo "Running: $filename<br>";
// SQL is processed FIRST (before corresponding PHP according to the sorting order in VersionSort()
if( file_exists($filename) )
{
if($tmp_extension == 'sql')
{
RunSQLFile($ado, $filename);
}
else
{
include_once $filename;
}
}
}
}
set_ini_value("Module Versions", $p, GetMaxPortalVersion($pathtoroot.$mod_path."/admin/"));
save_values();
}
// compile stylesheets: begin
define('FULL_PATH', realpath(dirname(__FILE__).'/..'));
include_once(FULL_PATH.'/core/kernel/startup.php');
$application =& kApplication::Instance();
$application->Init();
// $objThemes->CreateMissingThemes(false);
$application->HandleEvent($theme_event, 'adm:OnRebuildThemes');
$css_hash = $application->Conn->GetCol('SELECT LOWER(Name) AS Name, StylesheetId FROM '.TABLE_PREFIX.'Stylesheets', 'StylesheetId');
$css_table = $application->getUnitOption('css','TableName');
$css_idfield = $application->getUnitOption('css','IDField');
$theme_table = $application->getUnitOption('theme', 'TableName');
$theme_idfield = $application->getUnitOption('theme', 'IDField');
$theme_update_sql = 'UPDATE '.$theme_table.' SET '.$css_idfield.' = %s WHERE LOWER(Name) = %s';
foreach($css_hash as $stylesheet_id => $theme_name)
{
$css_item =& $application->recallObject('css', null, Array('skip_autoload' => true));
$css_item->Load($stylesheet_id);
$css_item->Compile();
$application->Conn->Query( sprintf($theme_update_sql, $stylesheet_id, $application->Conn->qstr( getArrayValue($css_hash,$stylesheet_id) ) ) );
}
// do redirect, because upgrade scripts can eat a lot or memory used for language pack upgrade operation
$application->Redirect('install', Array('state' => 'languagepack_upgrade'), '', 'install.php');
// compile stylesheets: end
$state = 'languagepack_upgrade';
}
// upgrade language pack
if($state=='languagepack_upgrade')
{
$state = 'lang_install_init';
if( is_object($application) ) $application->SetVar('lang', Array('english.lang') );
$force_finish = true;
}
if ($state == 'fix_paths') {
$ado = inst_GetADODBConnection();
$sql = "SELECT * FROM ".$g_TablePrefix."ConfigurationValues WHERE VariableName = 'Site_Name' OR VariableName LIKE '%Path%'";
$path_rs = $ado->Execute($sql);
$include_file = $pathtoroot.$admin."/install/fix_paths.php";
}
if ($state == 'fix_paths_process') {
$ado = inst_GetADODBConnection();
//$state = 'fix_paths';
//$include_file = $pathtoroot.$admin."/install/fix_paths.php";
foreach($_POST["values"] as $key => $value) {
$sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '".$value."' WHERE VariableName = '".$key."'";
$ado->Execute($sql);
}
$state = "finish";
}
if($state=="db_reconfig_save")
{
$ini_vars = inst_parse_portal_ini($ini_file,TRUE);
foreach($ini_vars as $secname => $section)
{
foreach($section as $key => $value)
{
$key = "g_".str_replace("-", "", $key);
global $$key;
$$key = $value;
}
}
unset($ado);
$ado = VerifyDB('db_reconfig', 'finish', 'SaveDBConfig', true);
}
if($state=="db_reconfig")
{
$include_file = $pathtoroot.$admin."/install/db_reconfig.php";
}
if($state=="restore_file")
{
if($_POST["submit"]=="Update")
{
$filepath = $_POST["backupdir"];
$state="restore_select";
}
else
{
$filepath = stripslashes($_POST['backupdir']);
$backupfile = $filepath.'/'.str_replace('(.*)', $_POST['backupdate'], BACKUP_NAME);
if(file_exists($backupfile) && is_readable($backupfile))
{
$ado =& inst_GetADODBConnection();
$show_warning = false;
if (!$_POST['warning_ok']) {
// Here we comapre versions between backup and config
$file_contents = file_get_contents($backupfile);
$file_tmp_cont = explode("#------------------------------------------", $file_contents);
$tmp_vers = $file_tmp_cont[0];
$vers_arr = explode(";", $tmp_vers);
$ini_values = inst_parse_portal_ini($ini_file);
foreach ($ini_values as $key => $value) {
foreach ($vers_arr as $k) {
if (strstr($k, $key)) {
if (!strstr($k, $value)) {
$show_warning = true;
}
}
}
}
//$show_warning = true;
}
if (!$show_warning) {
$filename = $pathtoroot.$admin.'/install/inportal_remove.sql';
RunSchemaFile($ado,$filename);
$state="restore_run";
}
else {
$state = "warning";
$include_file = $pathtoroot.$admin."/install/warning.php";
}
}
else {
if ($_POST['backupdate'] != '') {
$include_file = $pathtoroot.$admin."/install/restore_select.php";
$restore_error = "$backupfile not found or could not be read";
}
else {
$include_file = $pathtoroot.$admin."/install/restore_select.php";
$restore_error = "No backup selected!!!";
}
}
}
//echo $restore_error;
}
if($state=="restore_select")
{
if( isset($_POST['backupdir']) ) $filepath = stripslashes($_POST['backupdir']);
$include_file = $pathtoroot.$admin."/install/restore_select.php";
}
if($state=="restore_run")
{
$ado =& inst_GetADODBConnection();
$FileOffset = (int)$_GET["Offset"];
if(!strlen($backupfile))
$backupfile = SuperStrip($_GET['File'], true);
$include_file = $pathtoroot.$admin."/install/restore_run.php";
}
if($state=="db_config_save")
{
set_ini_value("Database", "DBType",$_POST["ServerType"]);
set_ini_value("Database", "DBHost",$_POST["ServerHost"]);
set_ini_value("Database", "DBName",$_POST["ServerDB"]);
set_ini_value("Database", "DBUser",$_POST["ServerUser"]);
set_ini_value("Database", "DBUserPassword",$_POST["ServerPass"]);
set_ini_value("Database","TablePrefix",$_POST["TablePrefix"]);
save_values();
$ini_vars = inst_parse_portal_ini($ini_file,TRUE);
foreach($ini_vars as $secname => $section)
{
foreach($section as $key => $value)
{
$key = "g_".str_replace("-", "", $key);
global $$key;
$$key = $value;
}
}
unset($ado);
$ado = VerifyDB('dbinfo', 'license');
}
if($state=="dbinfo")
{
if ($install_type == '') {
$install_type = 1;
}
$include_file = $pathtoroot.$admin."/install/dbinfo.php";
}
if ($state == "download_license") {
$ValidLicense = FALSE;
$lic_login = isset($_POST['login']) ? $_POST['login'] : '';
$lic_password = isset($_POST['password']) ? $_POST['password'] : '';
if ($lic_login != '' && $lic_password != '') {
// Here we determine weather login is ok & check available licenses
$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['login'])."&password=".md5($_POST['password'])."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".base64_encode($_SERVER['HTTP_HOST']), "r");
if (!$rfile) {
$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
$state = "get_license";
$include_file = $pathtoroot.$admin."/install/get_license.php";
}
else {
$rcontents = '';
while (!feof($rfile)) {
$line = fgets($rfile, 10000);
$rcontents .= $line;
}
@fclose($rfile);
if (substr($rcontents, 0, 5) == 'Error') {
$get_license_error = substr($rcontents, 6);
$state = "get_license";
$include_file = $pathtoroot.$admin."/install/get_license.php";
}
else {
if (substr($rcontents, 0, 3) == "SEL") {
$state = "download_license";
$license_select = substr($rcontents, 4);
$include_file = $pathtoroot.$admin."/install/download_license.php";
}
else {
// Here we get one license
$tmp_data = explode('Code==:', $rcontents);
$data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $tmp_data[0]));
a83570933e44bc66b31dd7127cf3f23a($data);
$ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
if($ValidLicense)
{
set_ini_value("Intechnic","License",base64_encode($data));
set_ini_value("Intechnic","LicenseCode",$tmp_data[1]);
save_values();
$state="domain_select";
$got_license = 1;
}
else {
$license_error="Invalid License File";
}
if(!$ValidLicense)
{
$state="license";
}
}
}
}
}
else if ($_POST['licenses'] == '') {
$state = "get_license";
$get_license_error = "Username and / or password not specified!!!";
$include_file = $pathtoroot.$admin."/install/get_license.php";
}
else {
// Here we download license
$rfile = @fopen(GET_LICENSE_URL."?license_id=".md5($_POST['licenses'])."&dlog=".md5($_POST['dlog'])."&dpass=".md5($_POST['dpass'])."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".base64_encode($_POST['domain']), "r");
if (!$rfile) {
$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
$state = "get_license";
$include_file = $pathtoroot.$admin."/install/get_license.php";
}
else {
$rcontents = '';
while (!feof($rfile)) {
$line = fgets($rfile, 10000);
$rcontents .= $line;
}
@fclose($rfile);
if (substr($rcontents, 0, 5) == 'Error') {
$download_license_error = substr($rcontents, 6);
$state = "download_license";
$include_file = $pathtoroot.$admin."/install/download_license.php";
}
else {
$tmp_data = explode('Code==:', $rcontents);
$data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $tmp_data[0]));
a83570933e44bc66b31dd7127cf3f23a($data);
$ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
if($ValidLicense)
{
set_ini_value("Intechnic","License",base64_encode($data));
// old licensing script doen't return 2nd parameter (licanse code)
if( isset($tmp_data[1]) ) set_ini_value("Intechnic","LicenseCode",$tmp_data[1]);
save_values();
$state="domain_select";
}
else {
$license_error="Invalid License File";
}
if(!$ValidLicense)
{
$state="license";
}
}
}
}
}
if($state=="license_process")
{
$ValidLicense = FALSE;
$tmp_lic_opt = GetVar('lic_opt', true);
switch($tmp_lic_opt)
{
case 1: /* download from intechnic */
$include_file = $pathtoroot.$admin."/install/get_license.php";
$state = "get_license";
//if(!$ValidLicense)
//{
// $state="license";
//}
break;
case 2: /* upload file */
$file = $_FILES["licfile"];
if(is_array($file))
{
move_uploaded_file($file["tmp_name"],$pathtoroot."themes/tmp.lic");
@chmod($pathtoroot."themes/tmp.lic", 0666);
$fp = @fopen($pathtoroot."themes/tmp.lic","rb");
if($fp)
{
$lic = fread($fp,filesize($pathtoroot."themes/tmp.lic"));
fclose($fp);
}
$tmp_data = ae666b1b8279502f4c4b570f133d513e(FALSE,$pathtoroot."themes/tmp.lic");
$data = $tmp_data[0];
@unlink($pathtoroot."themes/tmp.lic");
a83570933e44bc66b31dd7127cf3f23a($data);
$ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
if($ValidLicense)
{
set_ini_value("Intechnic","License",base64_encode($data));
set_ini_value("Intechnic","LicenseCode",$tmp_data[1]);
save_values();
$state="domain_select";
}
else
$license_error="Invalid License File";
}
if(!$ValidLicense)
{
$state="license";
}
break;
case 3: /* existing */
if(strlen($g_License))
{
$lic = base64_decode($g_License);
a83570933e44bc66b31dd7127cf3f23a($lic);
$ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
if($ValidLicense)
{
$state="domain_select";
}
else
{
$state="license";
$license_error="Invalid or corrupt license detected";
}
}
else
{
$state="license";
$license_error="Missing License File";
}
if(!$ValidLicense)
{
$state="license";
}
break;
case 4:
//set_ini_value("Intechnic","License",base64_encode("local"));
//set_ini_value("Intechnic","LicenseCode",base64_encode("local"));
//save_values();
$state="domain_select";
break;
}
if($ValidLicense)
$state="domain_select";
}
if($state=="license")
{
$include_file = $pathtoroot.$admin."/install/sel_license.php";
}
if($state=="reinstall")
{
$ado =& inst_GetADODBConnection();
$show_upgrade = false;
$sql = "SELECT Name FROM ".$g_TablePrefix."Modules";
$rs = $ado->Execute($sql);
$modules = '';
while ($rs && !$rs->EOF) {
$modules .= strtolower($rs->fields['Name']).',';
$rs->MoveNext();
}
$mod_arr = explode(",", substr($modules, 0, strlen($modules) - 1));
foreach($mod_arr as $p)
{
if ($p == 'in-portal') {
$p = '';
}
$dir_name = $pathtoroot.$p."/admin/install/upgrades/";
$dir = @dir($dir_name);
//echo "<pre>"; print_r($dir); echo "</pre>";
if ($dir === false) continue;
while ($file = $dir->read()) {
if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
{
if( preg_match('/inportal_upgrade_v(.*).(php|sql)$/', $file, $rets) )
{
if($p == '') $p = 'in-portal';
$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = '".$p."'";
$rs = $ado->Execute($sql);
if( ConvertVersion($rs->fields['Version']) < ConvertVersion( $rets[1] ) )
{
$show_upgrade = true;
}
}
}
}
}
if ( !isset($install_type) || $install_type == '') {
$install_type = 2;
}
$include_file = $pathtoroot.$admin."/install/reinstall.php";
}
if($state=="login")
{
$lic = base64_decode($g_License);
if(strlen($lic))
{
a83570933e44bc66b31dd7127cf3f23a($lic);
$ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
}
if(!$ValidLicense)
{
$state="license";
}
else
if($i_User == $_POST["UserName"] || $i_Pswd == $_POST["UserPass"])
{
$state = "domain_select";
}
else
{
$state="getuser";
$login_error = "Invalid User Name or Password. If you don't know your username or password, contact Intechnic Support";
}
//die();
}
if($state=="getuser")
{
$include_file = $pathtoroot.$admin."/install/login.php";
}
if($state=="set_domain")
{
if( !is_array($i_Keys) || !count($i_Keys) )
{
$lic = base64_decode($g_License);
if(strlen($lic))
{
a83570933e44bc66b31dd7127cf3f23a($lic);
$ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
}
}
if($_POST["domain"]==1)
{
$domain = $_SERVER['HTTP_HOST'];
if (strstr($domain, $i_Keys[0]['domain']) || de3ec1b7a142cccd0d51f03d24280744($domain)) {
set_ini_value("Intechnic","Domain",$domain);
save_values();
$state="runsql";
}
else {
$DomainError = 'Domain name selected does not match domain name in the license!';
$state = "domain_select";
}
}
else
{
$domain = str_replace(" ", "", $_POST["other"]);
if ($domain != '') {
if (strstr($domain, $i_Keys[0]['domain']) || de3ec1b7a142cccd0d51f03d24280744($domain)) {
set_ini_value("Intechnic","Domain",$domain);
save_values();
$state="runsql";
}
else {
$DomainError = 'Domain name entered does not match domain name in the license!';
$state = "domain_select";
}
}
else {
$DomainError = 'Please enter valid domain!';
$state = "domain_select";
}
}
}
if($state=="domain_select")
{
if(!is_array($i_Keys))
{
$lic = base64_decode($g_License);
if(strlen($lic))
{
a83570933e44bc66b31dd7127cf3f23a($lic);
$ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
}
}
$include_file = $pathtoroot.$admin."/install/domain.php";
}
if($state=="runsql")
{
$ado =& inst_GetADODBConnection();
$installed = TableExists($ado,"ConfigurationAdmin,Category,Permissions");
if(!$installed)
{
// run core install script
K4_RunSQL('/core/install/install_schema.sql');
K4_RunSQL('/core/install/install_data.sql');
K4_SetModuleVersion('Core');
// run in-portal install script
$filename = $pathtoroot.$admin."/install/inportal_schema.sql";
RunSchemaFile($ado,$filename);
$filename = $pathtoroot.$admin."/install/inportal_data.sql";
RunSQLFile($ado,$filename);
$sql = 'UPDATE '.$g_TablePrefix.'ConfigurationValues SET VariableValue = %s WHERE VariableName = %s';
$ado->Execute( sprintf($sql, $ado->qstr('portal@'.$ini_vars['Intechnic']['Domain']), $ado->qstr('Smtp_AdminMailFrom') ) );
$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = 'In-Portal'";
$rs = $ado->Execute($sql);
set_ini_value("Module Versions", "In-Portal", $rs->fields['Version']);
save_values();
require_once $pathtoroot.'kernel/include/tag-class.php';
if( !is_object($objTagList) ) $objTagList = new clsTagList();
// install kernel specific tags
$objTagList->DeleteTags(); // delete all existing tags in db
// create 3 predifined tags (because there no functions with such names
$t = new clsTagFunction();
$t->Set("name","include");
$t->Set("description","insert template output into the current template");
$t->Create();
$t->AddAttribute("_template","tpl","Template to insert","",TRUE);
$t->AddAttribute("_supresserror","bool","Supress missing template errors","",FALSE);
$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);
$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);
unset($t);
$t = new clsTagFunction();
$t->Set("name","perm_include");
$t->Set("description","insert template output into the current template if permissions are set");
$t->Create();
$t->AddAttribute("_template","tpl","Template to insert","",TRUE);
$t->AddAttribute("_noaccess","tpl","Template to insert if access is denied","",FALSE);
$t->AddAttribute("_permission","","Comma-separated list of permissions, any of which will grant access","",FALSE);
$t->AddAttribute("_module","","Used in place of the _permission attribute, this attribute verifies the module listed is enabled","",FALSE);
$t->AddAttribute("_system","bool","Must be set to true if any permissions in _permission list is a system permission","",FALSE);
$t->AddAttribute("_supresserror","bool","Supress missing template errors","",FALSE);
$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);
$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);
unset($t);
$t = new clsTagFunction();
$t->Set("name","mod_include");
$t->Set("description","insert templates from all enabled modules. No error occurs if the template does not exist.");
$t->Create();
$t->AddAttribute("_template","tpl","Template to insert. This template path should be relative to the module template root directory","",TRUE);
$t->AddAttribute("_modules","","Comma-separated list of modules. Defaults to all enabled modules if not set","",FALSE);
$t->AddAttribute("_supresserror","bool","Supress missing template errors","",FALSE);
$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);
$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);
$objTagList->ParseFile($pathtoroot.'kernel/parser.php'); // insert module tags
if( is_array($ItemTagFiles) )
foreach($ItemTagFiles as $file)
$objTagList->ParseItemFile($pathtoroot.$file);
$state="RootPass";
}
else {
$include_file = $pathtoroot.$admin."/install/install_finish.php";
$state="finish";
}
}
if($state=="RootSetPass")
{
$pass = $_POST["RootPass"];
if(strlen($pass)<4)
{
$PassError = "Root Password must be at least 4 characters";
$state = "RootPass";
}
else if ($pass != $_POST["RootPassConfirm"]) {
$PassError = "Passwords does not match";
$state = "RootPass";
}
else
{
$pass = md5(md5($pass).'b38');
$sql = ' UPDATE '.$g_TablePrefix.'ConfigurationValues
SET VariableValue = '.$ado->qstr($pass).'
WHERE VariableName = "RootPass";';
$ado =& inst_GetADODBConnection();
$ado->Execute($sql);
$state="modselect";
}
}
if($state=="RootPass")
{
$include_file = $pathtoroot.$admin."/install/rootpass.php";
}
if($state=="lang_install_init")
{
$ado =& inst_GetADODBConnection();
if( TableExists($ado, 'Language,Phrase') )
{
// KERNEL 4 INIT: BEGIN
define('FULL_PATH', realpath(dirname(__FILE__).'/..'));
include_once(FULL_PATH.'/core/kernel/startup.php');
$application =& kApplication::Instance();
$application->Init();
// KERNEL 4 INIT: END
$lang_xml =& $application->recallObject('LangXML');
if (defined('DBG_FAST_INSTALL') && DBG_FAST_INSTALL) {
$lang_xml->tables['phrases'] = TABLE_PREFIX.'Phrase';
$lang_xml->tables['emailmessages'] = TABLE_PREFIX.'EmailMessage';
}
else {
$lang_xml->renameTable('phrases', TABLE_PREFIX.'ImportPhrases');
$lang_xml->renameTable('emailmessages', TABLE_PREFIX.'ImportEvents');
}
$lang_xml->lang_object->TableName = $application->getUnitOption('lang','TableName');
$languages = $application->GetVar('lang');
if($languages)
{
$kernel_db =& $application->GetADODBConnection();
$modules_table = $application->getUnitOption('mod','TableName');
$modules = $kernel_db->GetCol('SELECT Path, Name FROM '.$modules_table, 'Name');
$modules['In-Portal'] = '';
foreach($languages as $lang_file)
{
foreach($modules as $module_name => $module_folder)
{
$lang_path = MODULES_PATH.'/'.$module_folder.'admin/install/langpacks';
$lang_xml->Parse($lang_path.'/'.$lang_file, '|0|1|2|', '');
if($force_finish) $lang_xml->lang_object->Update();
}
}
if (defined('DBG_FAST_INSTALL') && DBG_FAST_INSTALL) {
$state = 'lang_default';
}
else {
$state = 'lang_install';
}
}
else
{
$state = 'lang_select';
}
$application->Done();
}
else
{
$general_error = 'Database error! No language tables found!';
}
}
if($state=="lang_install")
{
define('FORCE_CONFIG_CACHE', 1);
/* do pack install */
$Offset = (int)$_GET["Offset"];
$Status = (int)$_GET["Status"];
$PhraseTable = $g_TablePrefix."ImportPhrases";
$EventTable = $g_TablePrefix."ImportEvents";
$Total = TableCount($Status == 0 ? $PhraseTable : $EventTable, '', 0);
if($Status == 0)
{
$Offset = $objLanguages->ReadImportTable($PhraseTable, 1,"0,1,2", $force_finish ? false : true, 200,$Offset);
if($Offset >= $Total)
{
$Offset=0;
$Status=1;
}
$next_step = GetVar('next_step', true);
if($force_finish == true) $next_step = 3;
$NextUrl = $_SERVER['PHP_SELF']."?Offset=$Offset&Status=$Status&state=lang_install&next_step=$next_step&install_type=$install_type";
if($force_finish == true) $NextUrl .= '&ff=1';
$include_file = $pathtoroot.$admin."/install/lang_run.php";
}
else
{
if(!is_object($objMessageList))
$objMessageList = new clsEmailMessageList();
$Offset = $objMessageList->ReadImportTable($EventTable, $force_finish ? false : true,300,$Offset);
if($Offset > $Total)
{
$next_step = GetVar('next_step', true);
if($force_finish == true) $next_step = 3;
$NextUrl = $_SERVER['PHP_SELF']."?Offset=$Offset&Status=$Status&State=lang_install&next_step=$next_step&install_type=$install_type";
if($force_finish == true) $NextUrl .= '&ff=1';
$include_file = $pathtoroot.$admin."/install/lang_run.php";
}
else
{
$db =& GetADODBConnection();
$prefix = $g_TablePrefix;
$db->Execute('DROP TABLE IF EXISTS '.$PhraseTable);
$db->Execute('DROP TABLE IF EXISTS '.$EventTable);
if(!$force_finish)
{
$state = 'lang_default';
}
else
{
$_POST['next_step'] = 4;
$state = 'finish';
$include_file = $pathtoroot.$admin."/install/install_finish.php";
}
}
}
}
if($state=="lang_default_set")
{
// phpinfo(INFO_VARIABLES);
/*$ado =& inst_GetADODBConnection();
$PhraseTable = GetTablePrefix()."ImportPhrases";
$EventTable = GetTablePrefix()."ImportEvents";
$ado->Execute("DROP TABLE IF EXISTS $PhraseTable");
$ado->Execute("DROP TABLE IF EXISTS $EventTable");*/
$Id = $_POST["lang"];
$objLanguages->SetPrimary($Id);
if (defined('DBG_FAST_INSTALL')) {
$state = 'theme_sel';
}
else {
$state="postconfig_1";
}
}
if($state=="lang_default")
{
$Packs = Array();
$objLanguages->Clear();
$objLanguages->LoadAllLanguages();
foreach($objLanguages->Items as $l)
{
$Packs[$l->Get("LanguageId")] = $l->Get("PackName");
}
$include_file = $pathtoroot.$admin."/install/lang_default.php";
}
if($state=="modinstall")
{
$doms = $_POST["domain"];
if(is_array($doms))
{
$ado =& inst_GetADODBConnection();
require_once $pathtoroot.'kernel/include/tag-class.php';
if( !isset($objTagList) || !is_object($objTagList) ) $objTagList = new clsTagList();
// TODO: make possible to define module install order (e.g. via special order file in module directory, because db info is not available before module is installed)
$ebay_key = array_search('in-auction', $doms);
if ($ebay_key !== false) {
unset($doms[$ebay_key]);
$doms[] = 'in-auction';
}
foreach($doms as $p)
{
$filename = $pathtoroot.$p.'/admin/install.php';
if(file_exists($filename) )
{
include($filename);
}
}
}
/* $sql = "SELECT Name FROM ".GetTablePrefix()."Modules";
$rs = $ado->Execute($sql);
while($rs && !$rs->EOF)
{
$p = $rs->fields['Name'];
$mod_name = strtolower($p);
if ($mod_name == 'in-portal') {
$mod_name = '';
}
$dir_name = $pathtoroot.$mod_name."/admin/install/upgrades/";
$dir = @dir($dir_name);
$new_version = '';
$tmp1 = 0;
$tmp2 = 0;
while ($file = $dir->read()) {
if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
{
$file = str_replace("inportal_upgrade_v", "", $file);
$file = str_replace(".sql", "", $file);
if ($file != '' && !strstr($file, 'changelog') && !strstr($file, 'readme')) {
$tmp1 = str_replace(".", "", $file);
if ($tmp1 > $tmp2) {
$new_version = $file;
}
}
}
$tmp2 = $tmp1;
}
$version_nrs = explode(".", $new_version);
for ($i = 0; $i < $version_nrs[0] + 1; $i++) {
for ($j = 0; $j < $version_nrs[1] + 1; $j++) {
for ($k = 0; $k < $version_nrs[2] + 1; $k++) {
$try_version = "$i.$j.$k";
$filename = $pathtoroot.$mod_name."/admin/install/upgrades/inportal_upgrade_v$try_version.sql";
if(file_exists($filename))
{
RunSQLFile($ado, $filename);
set_ini_value("Module Versions", $p, $try_version);
save_values();
}
}
}
}
$rs->MoveNext();
}
*/
$state="lang_select";
}
if($state=="modselect")
{
/* /admin/install.php */
$UrlLen = (strlen($admin) + 12)*-1;
$pathguess =substr($_SERVER["SCRIPT_NAME"],0,$UrlLen);
$sitepath = $pathguess;
$esc_path = str_replace("\\","/",$pathtoroot);
$esc_path = str_replace("/","\\",$esc_path);
//set_ini_value("Site","DomainName",$_SERVER["HTTP_HOST"]);
//$g_DomainName= $_SERVER["HTTP_HOST"];
save_values();
$ado =& inst_GetADODBConnection();
if(substr($sitepath,0,1)!="/")
$sitepath="/".$sitepath;
if(substr($sitepath,-1)!="/")
$sitepath .= "/";
$sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$sitepath' WHERE VariableName='Site_Path'";
$ado->Execute($sql);
$sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$g_Domain' WHERE VariableName='Server_Name'";
$ado->Execute($sql);
$sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '".$_SERVER['DOCUMENT_ROOT'].$sitepath.$admin."/backupdata' WHERE VariableName='Backup_Path'";
$ado->Execute($sql);
$Modules = a48d819089308a9aeb447e7248b2587f();
if (count($Modules) > 0) {
$include_file = $pathtoroot.$admin."/install/modselect.php";
}
else {
$state = "lang_select";
$skip_step = true;
}
}
if($state=="lang_select")
{
$Packs = GetLanguageList();
$include_file = $pathtoroot.$admin."/install/lang_select.php";
}
if(substr($state,0,10)=="postconfig")
{
$p = explode("_",$state);
$step = $p[1];
if ($_POST['Site_Path'] != '') {
$sql = "SELECT Name, Version FROM ".$g_TablePrefix."Modules";
$rs = $ado->Execute($sql);
$modules_str = '';
while ($rs && !$rs->EOF) {
$modules_str .= $rs->fields['Name'].' ('.$rs->fields['Version'].'),';
$rs->MoveNext();
}
$modules_str = substr($modules_str, 0, strlen($modules_str) - 1);
$rfile = @fopen(GET_LICENSE_URL."?url=".base64_encode($_SERVER['HTTP_HOST'].$_POST['Site_Path'])."&modules=".base64_encode($modules_str)."&license_code=".base64_encode($g_LicenseCode)."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".md5($_SERVER['HTTP_HOST']), "r");
if (!$rfile) {
//$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
//$state = "postconfig_1";
//$include_file = $pathtoroot.$admin."/install/postconfig.php";
}
else {
$rcontents = '';
while (!feof($rfile)) {
$line = fgets($rfile, 10000);
$rcontents .= $line;
}
@fclose($rfile);
}
}
if(strlen($_POST["oldstate"])>0)
{
$s = explode("_",$_POST["oldstate"]);
$oldstep = $s[1];
if($oldstep<count($configs))
{
$section = $configs[$oldstep];
$module = $mods[$oldstep];
$title = $titles[$oldstep];
$objAdmin = new clsConfigAdmin($module,$section,TRUE);
$objAdmin->SaveItems($_POST,TRUE);
}
}
$section = $configs[$step];
$module = $mods[$step];
$title = $titles[$step];
$step++;
if($step <= count($configs)+1)
{
$include_file = $pathtoroot.$admin."/install/postconfig.php";
}
else
$state = "theme_sel";
}
if($state=="theme_sel")
{
$objThemes->CreateMissingThemes(true);
$include_file = $pathtoroot.$admin."/install/theme_select.php";
}
if($state=="theme_set")
{
## get & define Non-Blocking & Blocking versions ##
$blocking_sockets = minimum_php_version("4.3.0")? 0 : 1;
$ado =& inst_GetADODBConnection();
$sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$blocking_sockets' WHERE VariableName='SocketBlockingMode'";
$ado->Execute($sql);
## get & define Non-Blocking & Blocking versions ##
$theme_id = $_POST["theme"];
$pathchar="/";
//$objThemes->SetPrimaryTheme($theme_id);
$t = $objThemes->GetItem($theme_id);
$t->Set("Enabled",1);
$t->Set("PrimaryTheme",1);
$t->Update();
$t->VerifyTemplates();
$include_file = $pathtoroot.$admin."/install/install_finish.php";
$state="finish";
}
if ($state == "adm_login") {
$ado =& inst_GetADODBConnection();
$sql = 'UPDATE '.TABLE_PREFIX.'UserSession
SET LastAccessed = 0
WHERE PortalUserId IN (0,-2)';
$ado->Execute($sql);
echo "<script>window.location='index.php';</script>";
}
if ($state == "finish") {
$ado =& inst_GetADODBConnection();
$PhraseTable = $g_TablePrefix."ImportPhrases";
$EventTable = $g_TablePrefix."ImportEvents";
$ado->Execute("DROP TABLE IF EXISTS $PhraseTable");
$ado->Execute("DROP TABLE IF EXISTS $EventTable");
$ado->Execute('INSERT INTO '.$g_TablePrefix.'Cache (VarName, Data) VALUES (\'ForcePermCacheUpdate\', \'1\')');
- if ($application->ConfigValue('InstallFinished') === false) {
- $fields_hash = Array (
- 'VariableName' => 'InstallFinished',
- 'VariableValue' => 1,
- );
- $application->Conn->doInsert($fields_hash, TABLE_PREFIX.'ConfigurationValues');
+ $sql = 'SELECT VariableValue
+ FROM ' . $g_TablePrefix . 'ConfigurationValues
+ WHERE VariableName = "InstallFinished"';
+ if (!$ado->GetOne($sql)) {
+ // not installed -> set installation mark
+ $sql = 'INSERT INTO ' . $g_TablePrefix . 'ConfigurationValues (VariableName, VariableValue)
+ VALUES ("InstallFinished", 1)';
+ $ado->Execute($sql);
}
$include_file = $pathtoroot.$admin."/install/install_finish.php";
}
// init variables
$vars = Array('db_error','restore_error','PassError','DomainError','login_error','inst_error');
foreach($vars as $var_name) ReSetVar($var_name);
switch($state)
{
case "modselect":
$title = "Select Modules";
$help = "<p>Select the In-Portal modules you wish to install. The modules listed to the right ";
$help .="are all modules included in this installation that are licensed to run on this server. </p>";
break;
case "reinstall":
$title = "Installation Maintenance";
$help = "<p>A Configuration file has been detected on your system and it appears In-Portal is correctly installed. ";
$help .="In order to work with the maintenance functions provided to the left you must provide the Intechnic ";
$help .="Username and Password you used when obtaining the license file residing on the server, or your admin Root password. ";
$help .=" <i>(Use Username 'root' if using your root password)</i></p>";
$help .= "<p>To removing your existing database and start with a fresh installation, select the first option ";
$help .= "provided. Note that this operation cannot be undone and no backups are made! Use at your own risk.</p>";
$help .="<p>If you wish to scrap your current installation and install to a new location, choose the second option. ";
$help .="If this option is selected you will be prompted for new database configuration information.</p>";
$help .="<p>The <i>Update License Information</i> option is used to update your In-Portal license data. Select this option if you have ";
$help .="modified your licensing status with Intechnic, or you have received new license data via email</p>";
$help .="<p>The <i>Fix Paths</i> option should be used when the location of the In-portal files has changed. For example, if you moved them from one folder to another. It will update all settings and ensure the program is operational at the new location.</p>";
break;
case "fix_paths":
$title = "Fix Paths";
$help = "<p>The <i>Fix Paths</i> option should be used when the location of the In-portal files has changed. For example, if you moved them from one folder to another. It will update all settings and ensure the program is operational at the new location.<p>";
break;
case "RootPass":
$title = "Set Admin Root Password";
$help = "<p>The Root Password is initially required to access the admin sections of In-Portal. ";
$help .="The root user cannot be used to access the front-end of the system, so it is recommended that you ";
$help .="create additional users with admin privlidges.</p>";
break;
case "finish":
$title = "Thank You!";
$help ="<P>Thanks for using In-Portal! Be sure to visit <A TARGET=\"_new\" HREF=\"http://www.in-portal.net\">www.in-portal.net</A> ";
$help.=" for the latest news, module releases and support. </p>";
$help.="<p>*Make sure to clean your browser' cache after upgrading In-portal version</p>";
break;
case "license":
$title = "License Configuration";
$help ="<p>A License is required to run In-Portal on a server connected to the Internet. You ";
$help.="can run In-Portal on localhost, non-routable IP addresses, or other computers on your LAN. ";
$help.="If Intechnic has provided you with a license file, upload it here. Otherwise select the first ";
$help.="option to allow Install to download your license for you.</p>";
$help.="<p>If a valid license has been detected on your server, you can choose the <i>Use Existing License</i> ";
$help.="and continue the installation process</p>";
break;
case "domain_select":
$title="Select Licensed Domain";
$help ="<p>Select the domain you wish to configure In-Portal for. The <i>Other</i> option ";
$help.=" can be used to configure In-Portal for use on a local domain.</p>";
$help.="<p>For local domains, enter the hostname or LAN IP Address of the machine running In-Portal.</p>";
break;
case "db_reconfig":
case "dbinfo":
$title="Database Configuration";
$help = "<p>In-Portal needs to connect to your Database Server. Please provide the database server type*, ";
$help .="host name (<i>normally \"localhost\"</i>), Database user name, and database Password. ";
$help .="These fields are required to connect to the database.</p><p>If you would like In-Portal ";
$help .="to use a table prefix, enter it in the field provided. This prefix can be any ";
$help .=" text which can be used in the names of tables on your system. The characters entered in this field ";
$help .=" are placed <i>before</i> the names of the tables used by In-Portal. For example, if you enter \"inp_\"";
$help .=" into the prefix field, the table named Category will be named inp_Category.</p>";
break;
case "lang_select":
$title="Language Pack Installation";
$help = "<p>Select the language packs you wish to install. Each language pack contains all the phrases ";
$help .="used by the In-Portal administration and the default template set. Note that at least one ";
$help .="pack <b>must</b> be installed.</p>";
break;
case "lang_default":
$title="Select Default Language";
$help = "<p>Select which language should be considered the \"default\" language. This is the language ";
$help .="used by In-Portal when a language has not been selected by the user. This selection is applicable ";
$help .="to both the administration and front-end.</p>";
break;
case "lang_install":
$title="Installing Language Packs";
$help = "<p>The language packs you have selected are being installed. You may install more languages at a ";
$help.="later time from the Regional admin section.</p>";
break;
case "postconfig_1":
$help = "<P>These options define the general operation of In-Portal. Items listed here are ";
$help .="required for In-Portal's operation.</p><p>When you have finished, click <i>save</i> to continue.</p>";
break;
case "postconfig_2":
$help = "<P>User Management configuration options determine how In-Portal manages your user base.</p>";
$help .="<p>The groups listed to the right are pre-defined by the installation process and may be changed ";
$help .="through the Groups section of admin.</p>";
break;
case "postconfig_3":
$help = "<P>The options listed here are used to control the category list display functions of In-Portal. </p>";
break;
case "theme_sel":
$title="Select Default Theme";
$help = "<P>This theme will be used whenever a front-end session is started. ";
$help .="If you intend to upload a new theme and use that as default, you can do so through the ";
$help .="admin at a later date. A default theme is required for session management.</p>";
break;
case "get_license":
$title="Download License from Intechnic";
$help ="<p>A License is required to run In-Portal on a server connected to the Internet. You ";
$help.="can run In-Portal on localhost, non-routable IP addresses, or other computers on your LAN.</p>";
$help.="<p>Here as you have selected download license from Intechnic you have to input your username and ";
$help.="password of your In-Business account in order to download all your available licenses.</p>";
break;
case "download_license":
$title="Download License from Intechnic";
$help ="<p>A License is required to run In-Portal on a server connected to the Internet. You ";
$help.="can run In-Portal on localhost, non-routable IP addresses, or other computers on your LAN.</p>";
$help.="<p>Please choose the license from the drop down for this site! </p> ";
break;
case "restore_select":
$title="Select Restore File";
$help = "<P>Select the restore file to use to reinstall In-Portal. If your backups are not performed ";
$help .= "in the default location, you can enter the location of the backup directory and click the ";
$help .="<i>Update</i> button.</p>";
case "restore_run":
$title= "Restore in Progress";
$help = "<P>Restoration of your system is in progress. When the restore has completed, the installation ";
$help .="will continue as normal. Hitting the <i>Cancel</i> button will restart the entire installation process. ";
break;
case "warning":
$title = "Restore in Progress";
$help = "<p>Please approve that you understand that you are restoring your In-Portal data base from other version of In-Portal.</p>";
break;
case "update":
$title = "Update In-Portal";
$help = "<p>Select modules from the list, you need to update to the last downloaded version of In-Portal</p>";
break;
}
$tmp_step = GetVar('next_step', true);
if (!$tmp_step) {
$tmp_step = 1;
}
if ( isset($got_license) && $got_license == 1) {
$tmp_step++;
}
$next_step = $tmp_step + 1;
if ($general_error != '') {
$state = '';
$title = '';
$help = '';
$general_error = $general_error.'<br /><br />Installation cannot continue!';
}
if ($include_file == '' && $general_error == '' && $state == '') {
$state = '';
$title = '';
$help = '';
$filename = $pathtoroot.$admin."/install/inportal_remove.sql";
RunSQLFile($ado,$filename);
$general_error = 'Unexpected installation error! <br /><br />Installation has been stopped!';
}
if ($restore_error != '') {
$next_step = 3;
$tmp_step = 2;
}
if ($PassError != '') {
$tmp_step = 4;
$next_step = 5;
}
if ($DomainError != '') {
$tmp_step--;
$next_step = $tmp_step + 1;
}
if ($db_error != '') {
$tmp_step--;
$next_step = $tmp_step + 1;
}
if ($state == "warning") {
$tmp_step--;
$next_step = $tmp_step + 1;
}
if ($skip_step) {
$tmp_step++;
$next_step = $tmp_step + 1;
}
?>
<tr height="100%">
<td valign="top">
<table cellpadding=10 cellspacing=0 border=0 width="100%" height="100%">
<tr valign="top">
<td style="width: 200px; background: #009ff0 url(images/bg_install_menu.gif) no-repeat bottom right; border-right: 1px solid #000">
<img src="images/spacer.gif" width="180" height="1" border="0" title=""><br>
<span class="admintitle-white">Installation</span>
<!--<ol class="install">
<li class="current">Licence Verification
<li>Configuration
<li>File Permissions
<li>Security
<li>Integrity Check
</ol>
</td>-->
<?php
$lic_opt = isset($_POST['lic_opt']) ? $_POST['lic_opt'] : false;
if ($general_error == '') {
?>
<?php if ($install_type == 1) { ?>
<ol class="install">
<li <?php if ($tmp_step == 1) { ?>class="current"<?php } ?>>Database Configuration
<li <?php if ($tmp_step == 2 || $lic_opt == 1) { ?>class="current"<?php } ?>>Select License
<li <?php if ($tmp_step == 3 && $lic_opt != 1) { ?>class="current"<?php } ?>>Select Domain
<li <?php if ($tmp_step == 4 ) { ?>class="current"<?php } ?>>Set Root Password
<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Select Modules to Install
<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Install Language Packs
<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Post-Install Configuration
<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Finish
</ol>
<?php } else if ($install_type == 2) { ?>
<ol class="install">
<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
<!--<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $_POST['lic_opt'] == 1) { ?>class="current"<?php } ?>>Select License
<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1) { ?>class="current"<?php } ?>>Select Domain
<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Set Root Password
<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Select Modules to Install
<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Install Language Packs
<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Post-Install Configuration
<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Finish-->
</ol>
<?php } else if ($install_type == 3) { ?>
<ol class="install">
<li>License Verification
<li <?php if ($tmp_step == 2) { ?>class="current"<?php } ?>>Database Configuration
<li <?php if ($tmp_step == 3 || $_POST['lic_opt'] == 1) { ?>class="current"<?php } ?>>Select License
<li <?php if ($tmp_step == 4 && $_POST['lic_opt'] != 1) { ?>class="current"<?php } ?>>Select Domain
<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Set Root Password
<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Select Modules to Install
<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Install Language Packs
<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Post-Install Configuration
<li <?php if ($tmp_step == 9) { ?>class="current"<?php } ?>>Finish
</ol>
<?php } else if ($install_type == 4) { ?>
<ol class="install">
<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $lic_opt == 1) { ?>class="current"<?php } ?>>Select License
<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1) { ?>class="current"<?php } ?>>Select Domain
<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Set Root Password
<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Select Modules to Install
<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Install Language Packs
<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Post-Install Configuration
<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Finish
</ol>
<?php } else if ($install_type == 5) { ?>
<ol class="install">
<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $lic_opt == 1) { ?>class="current"<?php } ?>>Select License
<li <?php if ($tmp_step == 3 && $lic_opt != 1) { ?>class="current"<?php } ?>>Select Domain
<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Finish
</ol>
<?php } else if ($install_type == 6) { ?>
<ol class="install">
<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $_GET['show_prev'] == 1 || $_POST['backupdir']) { ?>class="current"<?php } ?>>Select Backup File
<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1 && $_GET['show_prev'] != 1 && !$_POST['backupdir']) { ?>class="current"<?php } ?>>Finish
</ol>
<?php } else if ($install_type == 7) { ?>
<ol class="install">
<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
<li <?php if ($tmp_step == 2 && $login_error == '' && $inst_error == '') { ?>class="current"<?php } ?>>Database Configuration
<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Finish
</ol>
<?php } else if ($install_type == 8) { ?>
<ol class="install">
<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
<li <?php if ($tmp_step == 2 && $login_error == '' && $inst_error == '') { ?>class="current"<?php } ?>>Select Modules to Upgrade
<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Language Pack Upgrade
<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Finish
</ol>
<?php } else if ($install_type == 9) { ?>
<ol class="install">
<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
<li <?php if ($tmp_step == 2 && $login_error == '' && $inst_error == '') { ?>class="current"<?php } ?>>Fix Paths
<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Finish
</ol>
<?php } ?>
<?php include($include_file); ?>
<?php } else { ?>
<?php include("install/general_error.php"); ?>
<?php } ?>
<td width="40%" style="border-left: 1px solid #000; background: #f0f0f0">
<table width="100%" border="0" cellspacing="0" cellpadding="4">
<tr>
<td class="subsectiontitle" style="border-bottom: 1px solid #000000; background-color:#999"><?php if( isset($title) ) echo $title;?></td>
</tr>
<tr>
<td class="text"><?php if( isset($help) ) echo $help;?></td>
</tr>
</table>
</td>
</tr>
</table>
<br>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td id="footer">
Powered by In-portal &copy; 1997-2008, Intechnic Corporation. All rights reserved.
<br><img src="images/spacer.gif" width="1" height="10" title="">
</td>
</tr>
</table>
</form>
</body>
</html>
\ No newline at end of file
Property changes on: branches/RC/admin/install.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.115.2.5
\ No newline at end of property
+1.115.2.6
\ No newline at end of property
Index: branches/RC/admin/install/install_lib.php
===================================================================
--- branches/RC/admin/install/install_lib.php (revision 10831)
+++ branches/RC/admin/install/install_lib.php (revision 10832)
@@ -1,1171 +1,1166 @@
<?php
function minimum_php_version( $vercheck )
{
$minver = explode(".", $vercheck);
$curver = explode(".", phpversion());
if (($curver[0] < $minver[0])
|| (($curver[0] == $minver[0])
&& ($curver[1] < $minver[1]))
|| (($curver[0] == $minver[0]) && ($curver[1] == $minver[1])
&& ($curver[2][0] < $minver[2][0])))
return false;
else
return true;
}
function VersionSort($a, $b)
{
if( preg_match('/inportal_upgrade_v(.*).(php|sql)$/', $a, $rets) )
{
$a_version = $rets[1];
$a_extension = $rets[2];
}
if( preg_match('/inportal_upgrade_v(.*).(php|sql)$/', $b, $rets) )
{
$b_version = $rets[1];
$b_extension = $rets[2];
}
if( !isset($a_version) || !isset($b_version) ) return 0; // not php or sql file
if($a_version == $b_version) // got PHP and SQL file for one version
{
if($a_extension == $b_extension)
{
return 0;
}
else
{
return ($a_extension == 'php') ? 1 : -1; // this makes .php extension go AFTER .sql in the sorting
}
}
else
{
return (ConvertVersion($a_version) < ConvertVersion($b_version)) ? -1 : 1;
}
}
function GetMaxPortalVersion($admindirname)
{
$dir = @dir($admindirname.'/install/upgrades');
if (!$dir) return '';
$upgrades_arr = Array();
$version = '';
while($file = $dir->read())
{
if ($file != "." && $file != ".." && !is_dir($admindirname.$file))
{
if (strstr($file, 'inportal_upgrade_v')) $upgrades_arr[] = $file;
}
}
usort($upgrades_arr, "VersionSort");
foreach($upgrades_arr as $file)
{
if( preg_match('/inportal_upgrade_v(.*).(php|sql)$/', $file, $rets) )
{
$a_version = $rets[1];
if (ConvertVersion($a_version) > ConvertVersion($version)) {
$version = $a_version;
}
}
}
return $version;
}
function ConvertVersion($version)
{
$parts = explode('.', $version);
$bin = '';
foreach ($parts as $part) {
$bin .= str_pad(decbin($part), 8, '0', STR_PAD_LEFT);
}
$dec = bindec($bin);
return $dec;
}
function TableExists(&$ado, $tables)
{
global $g_TablePrefix;
$t = explode(",",$tables);
$i = $ado->MetaTables();
for($x=0;$x<count($i);$x++)
$i[$x] = strtolower($i[$x]);
$AllFound = TRUE;
for($tIndex=0;$tIndex<count($t);$tIndex++)
{
$table = $g_TablePrefix.$t[$tIndex];
$table = strtolower($table);
if(!in_array($table,$i))
{
$AllFound = FALSE;
}
}
return $AllFound;
}
function set_ini_value($section, $key, $newvalue)
{
global $ini_vars;
$ini_vars[$section][$key] = $newvalue;
}
function save_values()
{
// Should write something to somwere, but it doesn't :(
global $ini_file,$ini_vars;
//if( file_exists($ini_file) )
//{
$fp = fopen($ini_file, "w");
fwrite($fp,'<'.'?'.'php die() ?'.">\n\n");
foreach($ini_vars as $secname => $section)
{
fwrite($fp,"[".$secname."]\n");
foreach($section as $key => $value) fwrite($fp,"$key = \"$value\"\n");
fwrite($fp,"\n");
}
fclose($fp);
//}
}
function getConnectionInterface($action, $dbo_type='adodb')
{
if($dbo_type == 'adodb')
{
switch($action)
{
case 'query': return 'Execute'; break;
case 'errorno': return 'ErrorNo'; break;
case 'errormsg': return 'ErrorMsg'; break;
}
}
if($dbo_type == 'dbconnection')
{
switch($action)
{
case 'query': return 'Query'; break;
case 'errorno': return 'getErrorCode'; break;
case 'errormsg': return 'getErrorMsg'; break;
}
}
}
function RunSchemaFile(&$ado, $filename, $dbo_type='adodb')
{
if( file_exists($filename) )
{
$sql = file_get_contents($filename);
if($sql) RunSchemaText($ado,$sql,$dbo_type);
}
}
function RunSchemaText(&$ado, $sql, $dbo_type='adodb')
{
global $g_TablePrefix;
if(strlen($g_TablePrefix))
{
$what = "CREATE TABLE ";
$replace = "CREATE TABLE ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "DROP TABLE ";
$replace = "DROP TABLE IF EXISTS ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "INSERT INTO ";
$replace = "INSERT INTO ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "UPDATE ";
$replace = "UPDATE ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "ALTER TABLE ";
$replace = "ALTER TABLE ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
}
$commands = explode("# --------------------------------------------------------",$sql);
if(count($commands)>0)
{
$query_func = getConnectionInterface('query',$dbo_type);
$errorno_func = getConnectionInterface('errorno',$dbo_type);
$errormsg_func = getConnectionInterface('errormsg',$dbo_type);
for($i = 0; $i < count($commands); $i++)
{
$cmd = $commands[$i];
$cmd = trim($cmd);
if(strlen($cmd)>0)
{
$ado->$query_func($cmd);
if($ado->$errorno_func() != 0)
{
$db_error = $ado->$errormsg_func()." COMMAND:<PRE>$cmd</PRE>";
}
}
}
}
}
function RunSQLText(&$ado, $allsql, $dbo_type='adodb')
{
global $g_TablePrefix;
$line = 0;
$query_func = getConnectionInterface('query',$dbo_type);
$errorno_func = getConnectionInterface('errorno',$dbo_type);
$errormsg_func = getConnectionInterface('errormsg',$dbo_type);
while($line<count($allsql))
{
$sql = $allsql[$line];
if(strlen(trim($sql))>0 && substr($sql,0,1)!="#")
{
if(strlen($g_TablePrefix))
{
$what = "CREATE TABLE ";
$replace = "CREATE TABLE ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "DELETE FROM ";
$replace = "DELETE FROM ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "DROP TABLE ";
$replace = "DROP TABLE IF EXISTS ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "INSERT INTO ";
$replace = "INSERT INTO ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "REPLACE INTO ";
$replace = "REPLACE INTO ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "UPDATE ";
$replace = "UPDATE ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
$what = "ALTER TABLE ";
$replace = "ALTER TABLE ".$g_TablePrefix;
$sql = ereg_replace($what, $replace, $sql);
}
$sql = trim($sql);
if(strlen($sql)>0)
{
$ado->$query_func($sql);
if($ado->$errorno_func()!=0)
{
$db_error = $ado->$errormsg_func()." COMMAND:<PRE>$sql</PRE>";
$error = TRUE;
}
}
}
$line++;
}
}
function RunSQLFile(&$ado, $filename, $dbo_type='adodb')
{
if(file_exists($filename))
{
$allsql = file($filename);
RunSQLText($ado,$allsql,$dbo_type);
}
}
/**
* Executes all sqls in selected file (in K4 style)
*
* @param string $filename
* @param kDBConnection $db
* @param mixed $replace_from
* @param mixed $replace_to
*/
function K4_RunSQL($filename, $replace_from = null, $replace_to = null)
{
if (!file_exists(FULL_PATH.$filename)) {
return ;
}
$db =& inst_GetADODBConnection(true);
$sqls = file_get_contents(FULL_PATH.$filename);
// add prefix to all tables
if (strlen(TABLE_PREFIX) > 0) {
$replacements = Array ('CREATE TABLE ', 'INSERT INTO ', 'UPDATE ', 'ALTER TABLE ');
foreach ($replacements as $replacement) {
$sqls = str_replace($replacement, $replacement.TABLE_PREFIX, $sqls);
}
$sqls = str_replace('DROP TABLE ', 'DROP TABLE IF EXISTS '.TABLE_PREFIX, $sqls);
}
if (isset($replace_from) && isset($replace_to)) {
// replace something additionally, e.g. module root category
$sqls = str_replace($replace_from, $replace_to, $sqls);
}
$sqls = str_replace("\r\n", "\n", $sqls); // convert to linux line endings
$sqls = preg_replace("/#([^;]*?)\n/", '', $sqls); // remove all comments
$sqls = explode(";\n", $sqls . "\n"); // ensures that last sql won't have ";" in it
foreach ($sqls as $sql) {
$sql = trim($sql);
if (!$sql) {
continue; // usually last line
}
$db->Query($sql);
if ($db->getErrorCode() != 0) {
$db_error = $db->getErrorMsg()." COMMAND:<PRE>$sql</PRE>";
$error = true;
// break;
}
}
}
/**
* Sets module version to passed
*
* @param string $module_name
* @param string $version
*/
function K4_SetModuleVersion($module_name, $version = false)
{
if ($version === false) {
$version = K4_GetMaxModuleVersion($module_name);
}
$sql = 'UPDATE '.TABLE_PREFIX.'Modules
SET Version = "'.$version.'"
WHERE Name = "'.$module_name.'"';
$db =& inst_GetADODBConnection(true);
$db->Query($sql);
}
function K4_GetMaxModuleVersion($module_name)
{
define('UPGRADES_FILE', FULL_PATH.'/%sinstall/upgrades.sql');
define('VERSION_MARK', '# ===== v ([\d]+\.[\d]+\.[\d]+) =====');
$upgrades_file = sprintf(UPGRADES_FILE, strtolower($module_name).'/');
if (!file_exists($upgrades_file)) {
// no upgrade file
return '4.0.1';
}
$sqls = file_get_contents($upgrades_file);
$versions_found = preg_match_all('/'.VERSION_MARK.'/s', $sqls, $regs);
if (!$versions_found) {
// upgrades file doesn't contain version definitions
return '4.0.1';
}
return end($regs[1]);
}
function RunRestoreFile($ado,$filename,$FileOffset,$MaxLines)
{
$size = filesize($filename);
if($FileOffset > $size)
return -2;
$fp = fopen($filename,"r");
if(!$fp)
return -1;
if($FileOffset>0)
{
fseek($fp,$FileOffset);
}
else
{
$EndOfSQL = FALSE;
$sql = "";
while(!feof($fp) && !$EndOfSQL)
{
$l = fgets($fp,16384);
if(substr($l,0,11)=="INSERT INTO")
{
$EndOfSQL = TRUE;
}
else
{
$sql .= $l;
$FileOffset = ftell($fp) - strlen($l);
}
}
if(strlen($sql))
{
RunSchemaText($ado,$sql);
}
fseek($fp,$FileOffset);
}
$LinesRead = 0;
$sql = "";
$AllSql = array();
while($LinesRead < $MaxLines && !feof($fp))
{
$sql = fgets($fp, 16384);
if(strlen($sql))
{
$AllSql[] = $sql;
$LinesRead++;
}
}
if(!feof($fp))
{
$FileOffset = ftell($fp);
}
else
{
$FileOffset = $TotalSize;
}
fclose($fp);
if(count($AllSql)>0)
RunSQLText($ado,$AllSql);
return (int)$FileOffset;
}
function _inst_keyED($txt,$encrypt_key)
{
$encrypt_key = md5($encrypt_key);
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++)
{
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
$ctr++;
}
return $tmp;
}
function _inst_decrypt($txt,$key)
{
$txt = _inst_keyED($txt,$key);
$tmp = "";
for ($i=0;$i<strlen($txt);$i++)
{
$md5 = substr($txt,$i,1);
$i++;
$tmp.= (substr($txt,$i,1) ^ $md5);
}
return $tmp;
}
function inst_LoadFromRemote()
{
return "";
}
function mod_DLid()
{
global $DownloadId;
echo $DownloadId."\n";
die();
}
function ae666b1b8279502f4c4b570f133d513e($LoadRemote=FALSE,$file="")
{
return _inst_LoadLicense($LoadRemote,$file);
}
function _inst_LoadLicense($LoadRemote=FALSE,$file="")
{
global $path,$admin;
$data = Array();
if(!strlen($file))
{
$f = $path.$admin."/include/inportal.dat";
}
else
$f = $file;
if(file_exists($f))
{
$contents = file($f);
$data[0] = base64_decode($contents[1]);
$data[1] = $contents[2];
}
else
if($LoadRemote)
return $LoadFromRemote;
return $data;
}
function inst_SaveLicense($data)
{
}
function _inst_VerifyKey($domain,$k)
{
$key = md5($domain);
$lkey = substr($key,0,strlen($key)/2);
$rkey = substr($key,strlen($key)/2);
$r = $rkey.$lkey;
if($k==$r)
return TRUE;
return FALSE;
}
function a83570933e44bc66b31dd7127cf3f23a($txt)
{
return _inst_ParseLicense($txt);
}
function _inst_ParseLicense($txt)
{
global $i_User, $i_Pswd, $i_Keys;
$data = _inst_decrypt($txt,"beagle");
$i_Keys = array();
$lines = explode("\n",$data);
for($x=0;$x<count($lines);$x++)
{
$l = $lines[$x];
$p = explode("=",$l,2);
switch($p[0])
{
case "Username":
$i_User = $p[1];
break;
case "UserPass":
$i_Pswd = $p[1];
break;
default:
if(substr($p[0],0,3)=="key")
{
$parts = explode("|",$p[1]);
if(_inst_VerifyKey($parts[0],$parts[1]))
{
unset($K);
$k["domain"]=$parts[0];
$k["key"]=$parts[1];
$k["desc"]=$parts[2];
$k["mod"]=$parts[3];
$i_Keys[] = $k;
}
}
break;
}
}
}
function de3ec1b7a142cccd0d51f03d24280744($domain)
{
_inst_falseIsLocalSite($domain);
return _inst_IsLocalSite($domain);
}
function _inst_GetObscureValue($i)
{
$z = null;
if ($i == 'x') return 0254;
if ($i == 'z') return 0x7F.'.';
if ($i >= 5 && $i < 7) return _inst_GetObscureValue($z)*_inst_GetObscureValue('e');
if ($i > 30) return Array(0x6c,0x6f,0x63,0x61,0x6c,0x68,0x6f,0x73,0x74);
if ($i > 20) return 99;
if ($i > 10) return '.'.(_inst_GetObscureValue(6.5)+1);
if ($i == 'a') return 0xa;
}
function _inst_Chr($val)
{
$x = _inst_GetObscureValue(25);
$f = chr($x).chr($x+5).chr($x+15);
return $f($val);
}
function _inst_IsLocalSite($domain)
{
$yy = '';
$ee = _inst_GetObscureValue(35);
foreach ($ee as $e) {
$yy .= _inst_Chr($e);
}
$localb = FALSE;
if(substr($domain,0,3)==_inst_GetObscureValue('x'))
{
$b = substr($domain,0,6);
$p = explode(".",$domain);
$subnet = $p[1];
if($p[1]>15 && $p[1]<32)
$localb=TRUE;
}
$zz = _inst_GetObscureValue('z')._inst_GetObscureValue(5).'.'.(int)_inst_GetObscureValue(7)._inst_GetObscureValue(12);
$ff = _inst_GetObscureValue('z')+65;
$hh = $ff-0x18;
if($domain==$yy || $domain==$zz || substr($domain,0,7)==$ff._inst_Chr(46).$hh ||
substr($domain,0,3)==_inst_GetObscureValue('a')._inst_Chr(46) || $localb || strpos($domain,".")==0)
{
return TRUE;
}
return FALSE;
}
function _inst_falseIsLocalSite($domain)
{
$localb = FALSE;
if(substr($domain,0,3)=="172" || $domain == '##code##')
{
$b = substr($domain,0,6);
$p = explode(".",$domain);
$subnet = $p[1];
if($p[1]>15 && $p[1]<32)
$localb=TRUE;
}
if($domain=="localhost" || $domain=="127.0.0.1" || substr($domain,0,7)=="192.168" ||
substr($domain,0,3)=="10." || $localb || strpos($domain,".")==0)
{
return TRUE;
}
return FALSE;
}
function ed592fe427e1ce60e32ffcb0c82d8557($name)
{
return _inst_ModuleLicensed($name);
}
function _inst_ModuleLicensed($name)
{
global $i_Keys, $objConfig, $g_License, $g_Domain;
$lic = base64_decode($g_License);
_inst_ParseLicense($lic);
- $modules = array();
- if(!_inst_IsLocalSite($g_Domain))
- {
- for($x=0;$x<count($i_Keys);$x++)
- {
+ $modules = Array();
+ if (!_inst_IsLocalSite($g_Domain)) {
+ for ($x = 0; $x < count($i_Keys); $x++) {
$key = $i_Keys[$x];
- if (strlen(stristr($g_Domain,$key["domain"])))
- {
- $modules = explode(",",strtolower($key["mod"]));
+ if (strlen(stristr($g_Domain, $key['domain']))) {
+ $modules = explode(',', $key['mod']);
}
}
- if(in_array(strtolower($name),$modules))
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- }
+
+ array_push($modules, 'Core', 'Proj-base', 'Proj-CMS', 'Custom');
+ $modules = array_map('strtolower', $modules);
+
+ return in_array(strtolower($name), $modules);
+ }
+ else {
+ return true;
}
- else
- return TRUE;
- return FALSE;
+ return false;
}
function inst_parse_portal_ini($file, $parse_section = false) {
if(!file_exists($file) && !is_readable($file))
die("Could Not Open Ini File $file");
$contents = file($file);
$retval = array();
$section = '';
$ln = 1;
$resave = false;
foreach($contents as $line) {
if ($ln == 1 && $line != '<'.'?'.'php die() ?'.">\n") {
$resave = true;
}
$ln++;
$line = trim($line);
$line = eregi_replace(';[.]*','',$line);
if(strlen($line) > 0) {
if(eregi('^[[a-z]+]$',str_replace(' ', '', $line))) {
$section = substr($line,1,(strlen($line)-2));
if ($parse_section) {
$retval[$section] = array();
}
continue;
} elseif(eregi('=',$line)) {
list($key,$val) = explode(' = ',$line);
if (!$parse_section) {
$retval[trim($key)] = str_replace('"', '', $val);
}
else {
$retval[$section][trim($key)] = str_replace('"', '', $val);
}
} //end if
} //end if
} //end foreach
if ($resave) {
$fp = fopen($file, "w");
reset($contents);
fwrite($fp,'<'.'?'.'php die() ?'.">\n\n");
foreach($contents as $line) fwrite($fp,"$line");
fclose($fp);
}
return $retval;
}
function a48d819089308a9aeb447e7248b2587f()
{
return _inst_GetModuleList();
}
function _inst_GetModuleList()
{
global $rootpath,$pathchar,$admin, $pathtoroot;
$path = $pathtoroot;
$new = array();
if ($dir = @opendir($path))
{
while (($file = readdir($dir)) !== false)
{
if($file !="." && $file !=".." && substr($file,0,1)!="_")
{
if(is_dir($path."/".$file))
{
$ModuleAdminDir = $path.$file.'/admin/';
$inst_file = $ModuleAdminDir.'install.php';
if( file_exists($inst_file) && file_exists($ModuleAdminDir.'install/inportal_schema.sql') )
{
if(_inst_ModuleLicensed($file)) {
$new[$file] = $inst_file;
}
}
}
}
}
closedir($dir);
}
return array_keys($new);
}
function GetDirList ($dirName)
{
$filedates = array();
$d = dir($dirName);
while($entry = $d->read())
{
if ($entry != "." && $entry != "..")
{
if (!is_dir($dirName."/".$entry))
{
$filedate[]=$entry;
}
}
}
$d->close();
return $filedate;
}
function GetLanguageList()
{
global $pathtoroot, $admin;
$packs = array();
$dir = $pathtoroot.$admin."/install/langpacks";
$files = GetDirList($dir);
if(is_array($files))
{
foreach($files as $f)
{
$p = pathinfo($f);
if($p["extension"]=="lang")
{
$packs[] = $f;
}
}
}
return $packs;
}
function section_header($title, $return_result = false)
{
$ret = '<table border="0" cellpadding="2" cellspacing="0" class="tableborder_full" width="100%" height="30">'.
'<tr><td class="tablenav" width="580" nowrap background="images/tabnav_left.jpg"><span class="tablenav_link">&nbsp;'.$title.'</span>'.
'</td><td align="right" class="tablenav" background="images/tabnav_back.jpg" width="100%">'.
"<a class=\"link\" onclick=\"ShowHelp('in-portal:install');\"><img src=\"images/blue_bar_help.gif\" border=\"0\"></A>".
'</td></tr></table>';
if( $return_result )
return $ret;
else
echo $ret;
}
function &VerifyDB($error_state, $next_state, $success_func = null, $db_must_exist = false)
{
// perform various check type to database specified
// 1. user is allowed to connect to database
// 2. user has all types of permissions in database
global $state, $db_error;
// enshure we use data from post & not from config
$GLOBALS['g_DBType'] = $_POST["ServerType"];
$GLOBALS['g_DBHost'] = $_POST["ServerHost"];
$GLOBALS['g_DBName'] = $_POST["ServerDB"];
$GLOBALS['g_DBUser'] = $_POST["ServerUser"];
$GLOBALS['g_DBUserPassword'] = $_POST["ServerPass"];
if (strlen($_POST['TablePrefix']) > 7) {
$db_error = 'Table prefix should not be longer than 7 characters';
$state = $error_state;
return false;
}
// connect to database
$ado =& inst_GetADODBConnection();
if($ado->ErrorNo() != 0)
{
// was error while connecting
$db_error = "Connection Error: (".$ado->ErrorNo().") ".$ado->ErrorMsg();
$state = $error_state;
}
elseif( $ado->ErrorNo() == 0 )
{
// if connected, then check if all sql statements work
$test_result = 1;
$sql_tests[] = 'DROP TABLE IF EXISTS test_table';
$sql_tests[] = 'CREATE TABLE test_table(test_col mediumint(6))';
$sql_tests[] = 'LOCK TABLES test_table WRITE';
$sql_tests[] = 'INSERT INTO test_table(test_col) VALUES (5)';
$sql_tests[] = 'UPDATE test_table SET test_col = 12';
$sql_tests[] = 'UNLOCK TABLES';
$sql_tests[] = 'ALTER TABLE test_table ADD COLUMN new_col varchar(10)';
$sql_tests[] = 'SELECT * FROM test_table';
$sql_tests[] = 'DELETE FROM test_table';
$sql_tests[] = 'DROP TABLE IF EXISTS test_table';
foreach($sql_tests as $sql_test)
{
$ado->Execute($sql_test);
if( $ado->ErrorNo()!=0 )
{
$test_result = 0;
break;
}
}
if($test_result == 1)
{
// if statements work & connection made, then check table existance
$db_exists = TableExists($ado,"ConfigurationAdmin,Category,Permissions");
if($db_exists != $db_must_exist)
{
$state = $error_state;
$db_error = $db_must_exist ? 'An In-Portal Database already exists at this location' : 'An In-Portal Database was not found at this location';
}
else
{
$state = $next_state;
if( isset($success_func) ) $success_func();
}
}
else
{
// user has insufficient permissions in database specified
$db_error = "Permission Error: (".$ado->ErrorNo().") ".$ado->ErrorMsg();
$state = $error_state;
}
}
return $ado;
}
function SaveDBConfig()
{
// save new database configuration
set_ini_value("Database", "DBType",$_POST["ServerType"]);
set_ini_value("Database", "DBHost",$_POST["ServerHost"]);
set_ini_value("Database", "DBName",$_POST["ServerDB"]);
set_ini_value("Database", "DBUser",$_POST["ServerUser"]);
set_ini_value("Database", "DBUserPassword",$_POST["ServerPass"]);
set_ini_value("Database","TablePrefix",$_POST["TablePrefix"]);
save_values();
$GLOBALS['include_file'] = 'install/install_finish.php';
}
function ReSetVar($var)
{
// define varible if not defined before
if( !isset($GLOBALS[$var]) ) $GLOBALS[$var] = '';
}
// if globals.php not yet included (1st steps of install),
// then define GetVar function
if( !function_exists('GetVar') )
{
function GetVar($name, $post_priority = false)
{
if(!$post_priority) // follow gpc_order in php.ini
return isset($_REQUEST[$name]) ? $_REQUEST[$name] : false;
else // get variable from post 1stly if not found then from get
return isset($_POST[$name]) && $_POST[$name] ? $_POST[$name] : ( isset($_GET[$name]) && $_GET[$name] ? $_GET[$name] : false );
}
}
function RadioChecked($name, $value)
{
// return " checked" word in case if radio is checked
$submit_value = GetVar($name);
return $submit_value == $value ? ' checked' : '';
}
function StripDisallowed($string, $item_info)
{
$not_allowed = Array( ' ', '\\', '/', ':', '*', '?', '"', '<', '>', '|',
'~', '!', '@', '#', '$', '%', '^', '&', '(', ')',
'+', '=', '-', '{', '}', ']', '[', "'", ';', '.', ',');
$string = str_replace($not_allowed, '_', $string);
$string = preg_replace('/(_+)/', '_', $string);
$string = checkAutoFilename($string, $item_info);
return $string;
}
function checkAutoFilename($filename, $item_info)
{
// 'table' => 'Category', 'id_field' => 'CategoryId', 'title_field' => 'Name'
$item_id = $item_info['item_id'];
$prefix = GetTablePrefix();
$db =& inst_GetADODBConnection();
$sql = 'SELECT '.$item_info['id_field'].' FROM '.$prefix.$item_info['table'].' WHERE Filename = '.$db->qstr($filename);
$found_item_id = $db->GetOne($sql);
$has_page = preg_match('/(.*)_([\d]+)([a-z]*)$/', $filename, $rets);
if( ($found_item_id != $item_id) || $has_page ) // other category has same filename as ours OR we have filename, that ends with _number
{
$append = $found_item_id ? 'a' : '';
if($has_page)
{
$filename = $rets[1].'_'.$rets[2];
$append = $rets[3] ? $rets[3] : 'a';
}
$sql = 'SELECT '.$item_info['id_field'].' FROM '.$prefix.$item_info['table'].' WHERE (Filename = %s) AND ('.$item_info['id_field'].' != '.$item_id.')';
while ( $db->GetOne( sprintf($sql, $db->qstr($filename.$append)) ) > 0 )
{
if (substr($append, -1) == 'z') $append .= 'a';
$append = substr($append, 0, strlen($append) - 1) . chr( ord( substr($append, -1) ) + 1 );
}
return $filename.$append;
}
return $filename;
}
/**
* [INSTALL] Perform operations required for each module separate install (from admin)
*
* @param string $module_name
* @param bool $has_theme
* @return bool
*/
function finalizeModuleInstall($module_name, $has_theme = true)
{
global $objThemes;
$app =& kApplication::Instance();
if (!$app->GetVar('redirect')) return false;
if ($has_theme)
{
$objThemes->CreateMissingThemes(true);
}
// 2. import languagepack in case of separate install
$lang_xml =& $app->recallObject('LangXML');
$lang_xml->tables['phrases'] = TABLE_PREFIX.'Phrase';
$lang_xml->tables['emailmessages'] = TABLE_PREFIX.'EmailMessage';
$lang_path = FULL_PATH.'/'.$module_name.'/admin/install/langpacks';
$lang_xml->Parse($lang_path.'/english.lang', '|0|1|2|', '');
$app->Redirect('in-portal/modules/modules_list', Array('pass' => 'all', 'admin' => 1, 'RefreshTree' => 1), '', 'index.php');
}
/**
* [UPGRADE] Initializes [cached] category/item templates with default values for each module
*
* @param string $module
* @param string $category_template
* @param string $item_template
*/
function updateItemCategoryTemplate($module, $category_template, $item_template)
{
$table_prefix = GetTablePrefix();
$inst_ado =& inst_GetADODBConnection();
// get module root category by module name
$sql = 'SELECT RootCat
FROM '.$table_prefix.'Modules
WHERE Name = '.$inst_ado->qstr($module);
$module_root = $inst_ado->GetOne($sql);
// set category & item template to module root category
$sql = 'UPDATE '.$table_prefix.'Category
SET CategoryTemplate = '.$inst_ado->qstr($category_template).'
WHERE CategoryId = '.$module_root;
$inst_ado->Execute($sql);
// set cached category & item templates to all sub-categories of module root category
$sql = 'UPDATE '.$table_prefix.'Category
SET CachedCategoryTemplate = '.$inst_ado->qstr($category_template).'
WHERE ParentPath LIKE "|'.$module_root.'|%';
$inst_ado->Execute($sql);
}
/**
* [UPGRADE] Moves custom field values for prefix specified from CustomMetaData table to prefix dependant separate table
*
* @param string $prefix
*/
function convertCustomFields($prefix)
{
$application =& kApplication::Instance();
$ml_helper =& $application->recallObject('kMultiLanguageHelper');
/* @var $ml_helper kMultiLanguageHelper */
$ml_helper->createFields($prefix.'-cdata', true);
$db =& $application->GetADODBConnection();
$custom_fields = $application->getUnitOption($prefix, 'CustomFields');
if (!$custom_fields) {
return true;
}
$custom_table = $application->getUnitOption($prefix.'-cdata', 'TableName');
// copy value from Value field to l<lang_id>_Value field, where destination field is empty
$m_lang = $application->GetVar('m_lang');
$sql = 'UPDATE '.TABLE_PREFIX.'CustomMetaData
SET l'.$m_lang.'_Value = Value
WHERE LENGTH(l'.$m_lang.'_Value) = 0';
$db->Query($sql);
$i = 1;
$field_mask = '';
$language_count = $ml_helper->getLanguageCount();
while ($i <= $language_count) {
if (!$ml_helper->LanguageFound($i)) {
continue;
}
$field_mask .= 'cdata%1$s.l'.$i.'_Value AS l'.$i.'_cust_%1$s, ';
$i++;
}
$field_mask = preg_replace('/(.*), $/', '\\1', $field_mask);
$join_mask = 'LEFT JOIN '.TABLE_PREFIX.'CustomMetaData cdata%1$s ON main_table.ResourceId = cdata%1$s.ResourceId AND cdata%1$s.CustomFieldId = %1$s';
$fields_sql = Array();
$joins_sql = Array();
foreach ($custom_fields as $custom_id => $custom_name) {
array_push($fields_sql, sprintf($field_mask, $custom_id) );
array_push($joins_sql, sprintf($join_mask, $custom_id));
}
$sql = 'INSERT INTO '.$custom_table.'
SELECT 0 AS CustomDataId, main_table.ResourceId, '.implode(', ', $fields_sql).'
FROM '.$application->getUnitOption($prefix, 'TableName').' main_table '.implode(' ', $joins_sql);
$db->Query($sql);
}
/**
* [INSTALL] Link custom field records with search config records + create custom field columns
*
* @param string $module_name
* @param int $item_type
*/
function linkCustomFields($module_name, $prefix, $item_type)
{
$application =& kApplication::Instance();
$db =& $application->GetADODBConnection();
$sql = 'SELECT FieldName, CustomFieldId
FROM '.TABLE_PREFIX.'CustomField
WHERE Type = '.$item_type.' AND IsSystem = 0'; // config is not read here yet :( $application->getUnitOption('p', 'ItemType');
$custom_fields = $db->GetCol($sql, 'CustomFieldId');
foreach ($custom_fields as $cf_id => $cf_name) {
$sql = 'UPDATE '.TABLE_PREFIX.'SearchConfig
SET CustomFieldId = '.$cf_id.'
WHERE (TableName = "CustomField") AND (LOWER(ModuleName) = "'.strtolower($module_name).'") AND (FieldName = '.$db->qstr($cf_name).')';
$db->Query($sql);
}
$application->refreshModuleInfo(); // this module configs are now processed
// because of configs was read only from installed before modules (in-portal), then reread configs
$unit_config_reader =& $application->recallObject('kUnitConfigReader');
$unit_config_reader->scanModules(MODULES_PATH.'/'.strtolower($module_name));
// create correct columns in ProductsCustomData table
$ml_helper =& $application->recallObject('kMultiLanguageHelper');
$ml_helper->createFields($prefix.'-cdata', true);
}
function moveItemTemplatesToCustom($module_name, $prefix)
{
$application =& kApplication::Instance();
$root_parent_path = $application->Conn->GetOne(
'SELECT ParentPath FROM '.TABLE_PREFIX.'Category
WHERE CategoryId = '.$application->ModuleInfo[$module_name]['RootCat']);
$item_t_customfield = $application->Conn->GetOne('SELECT CustomFieldId FROM '.TABLE_PREFIX.'CustomField WHERE FieldName = \''.$prefix.'_ItemTemplate\'');
$item_t_customfield = 'l1_cust_'.$item_t_customfield;
$current_item_tpls = $application->Conn->Query(
'SELECT ResourceId, ItemTemplate FROM '.TABLE_PREFIX.'Category
WHERE ParentPath LIKE "'.$root_parent_path.'%" AND ItemTemplate != "" AND ItemTemplate IS NOT NULL');
foreach ($current_item_tpls as $a_cat) {
$has_cdata = $application->Conn->GetOne(
'SELECT CustomDataId FROM '.TABLE_PREFIX.'CategoryCustomData
WHERE ResourceId = '.$a_cat['ResourceId']);
if (!$has_cdata) {
$query = 'INSERT INTO '.TABLE_PREFIX.'CategoryCustomData (ResourceId) VALUES ('.$a_cat['ResourceId'].')';
$application->Conn->Query($query);
}
$query = 'UPDATE '.TABLE_PREFIX.'CategoryCustomData
SET '.$item_t_customfield.' = '.$application->Conn->qstr($a_cat['ItemTemplate']).'
WHERE ResourceId = '.$a_cat['ResourceId'];
$application->Conn->Query($query);
}
}
?>
Property changes on: branches/RC/admin/install/install_lib.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.49.2.3
\ No newline at end of property
+1.49.2.4
\ No newline at end of property
Index: branches/RC/admin/install/prerequisit_errors.php
===================================================================
--- branches/RC/admin/install/prerequisit_errors.php (revision 10831)
+++ branches/RC/admin/install/prerequisit_errors.php (revision 10832)
@@ -1,81 +1,81 @@
<?php
// new path detection without K4 init: begin
define('FULL_PATH', realpath(dirname(__FILE__).'/../..') );
define('BASE_PATH', rtrim(preg_replace('#/admin/install$#', '', str_replace('\\', '/', dirname($_SERVER['PHP_SELF']))), '/'));
$rootURL = 'http://'.$_SERVER['HTTP_HOST'].rtrim(BASE_PATH, '/').'/admin/';
// new path detection without K4 init: end
$pathtoroot = FULL_PATH.'/';
$admin = 'admin';
define('IS_INSTALL',1);
error_reporting('E_ALL');
ini_set('display_errors', 1);
require_once($pathtoroot."/kernel/startup.php");
-$prerequisit_path = $pathtoroot.$_GET['module'].'/admin/install/prerequisit.php';
+$prerequisit_path = $pathtoroot.$_GET['module'] . ($_REQUEST['is_new'] ? '' : '/admin') . '/install/prerequisit.php';
if( function_exists('GetRegionalOption') )
{
$charset = GetRegionalOption('Charset');
}
else
{
$charset = 'iso-8859-1';
}
$rootURL .= 'admin/';
?>
<html>
<head>
<title>In-Portal - Module Errors</title>
<meta http-equiv="content-type" content="text/html;charset=<?php echo $charset; ?>">
<meta http-equiv="Pragma" content="no-cache">
<link rel="stylesheet" type="text/css" href="<?php echo $rootURL; ?>include/style.css">
</head>
<body topmargin="0" leftmargin="8" marginheight="8" marginwidth="8" bgcolor="#FFFFFF">
<DIV style='position:relative; z-Index: 1; background-color: #ffffff; padding-top:1px;'>
<div style='position:absolute; width:100%;top:0px;' align='right'>
<img src='<?php echo $rootURL; ?>images/logo_bg.gif'>
</div>
<img src="<?php echo $rootURL; ?>images/spacer.gif" width="1" height="7"><br>
<div style='z-Index:1; position:relative'>
<!-- ADMIN TITLE -->
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr><td valign="top" class="admintitle" align="left">
<img alt="" width="46" height="46" src="<?php echo $rootURL; ?>install/ic_install.gif" align="absmiddle">&nbsp;Module Errors<br>
<img src='<?php echo $rootURL; ?>images/spacer.gif' width=1 height=4><br>
</td></tr></table>
<!-- SECTION NAVIGATOR -->
<table border="0" cellpadding="2" cellspacing="0" class="tableborder_full" width="100%" height="30"><tr>
<TD class="header_left_bg" width="100%">
<span class="tablenav_link">Install</span>
</td>
<td align="right" class="tablenav" background="<?php echo $rootURL; ?>inst_bg.jpg" width="10">
</td>
</tr>
</table>
<!-- END SECTION NAVIGATOR -->
<table width="100%" border="0" cellspacing="0" cellpadding="4" class="tableborder">
<tr>
<td bgcolor="F6F6F6">
<div class="help_box">
<?php
if (file_exists($prerequisit_path)) {
$pathtoroot .= '/';
$show_errors = true;
include_once ($prerequisit_path);
}
?>
</h3> </div>
</td>
</tr>
</table>
</body>
</html>
\ No newline at end of file
Property changes on: branches/RC/admin/install/prerequisit_errors.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.7
\ No newline at end of property
+1.7.2.1
\ No newline at end of property
Index: branches/RC/core/kernel/utility/formatters/formatter.php
===================================================================
--- branches/RC/core/kernel/utility/formatters/formatter.php (revision 10831)
+++ branches/RC/core/kernel/utility/formatters/formatter.php (revision 10832)
@@ -1,188 +1,188 @@
<?php
class kFormatter extends kBase {
/**
* Convert's value to match type from config
*
* @param mixed $value
* @param Array $options
* @return mixed
* @access protected
*/
function TypeCast($value, $options)
{
$ret = true;
if( isset($options['type']) )
{
$field_type = $options['type'];
if ($field_type == 'numeric') {
trigger_error('Invalid field type <strong>'.$field_type.'</strong> (in TypeCast method), please use <strong>float</strong> instead', E_USER_NOTICE);
$field_type = 'float';
}
$type_ok = preg_match('#int|integer|double|float|real|numeric|string#', $field_type);
if ($field_type == 'string') {
if (!$this->Application->IsAdmin() && isset($options['allow_html']) && $options['allow_html']) {
// this allows to revert htmlspecialchars call for each field submitted on front-end
$value = unhtmlentities($value);
}
return $value;
}
static $comma = null;
static $thousands = null;
if (is_null($comma) || is_null($thousands)) {
$lang =& $this->Application->recallObject('lang.current');
$comma = $lang->GetDBField('DecimalPoint');
$thousands = $lang->GetDBField('ThousandSep');
}
$value = str_replace($thousands, '', $value);
$value = str_replace($comma, '.', $value);
if ($value != '' && $type_ok)
{
$ret = is_numeric($value);
if($ret)
{
$f = 'is_'.$field_type;
settype($value, $field_type);
$ret = $f($value);
}
}
}
return $ret ? $value : false;
}
function TypeCastArray($src, &$object)
{
$dst = array();
foreach ($src as $id => $row) {
$tmp_row = array();
foreach ($row as $fld => $value) {
$tmp_row[$fld] = $this->TypeCast($value, $object->Fields[$fld]);
}
$dst[$id] = $tmp_row;
}
return $dst;
}
//function Format($value, $options, &$errors)
function Format($value, $field_name, &$object, $format=null)
{
if ( is_null($value) ) return '';
$options = $object->GetFieldOptions($field_name);
if ( isset($format) ) $options['format'] = $format;
$tc_value = $value; // $this->TypeCast($value,$options);
if( ($tc_value === false) || ("$tc_value" != "$value") ) return $value; // for leaving badly formatted date on the form
if (isset($options['format'])) {
$tc_value = sprintf($options['format'], $tc_value);
}
if (preg_match('#int|integer|double|float|real|numeric#', $options['type'])) {
$lang =& $this->Application->recallObject('lang.current');
return $lang->formatNumber($tc_value);
}
return $tc_value;
}
/**
* Performs basic type validation on form field value
*
* @param mixed $value
* @param string $field_name
* @param kDBItem $object
* @return mixed
*/
function Parse($value, $field_name, &$object)
{
if ($value == '') return NULL;
$options = $object->GetFieldOptions($field_name);
$tc_value = $this->TypeCast($value,$options);
if($tc_value === false) return $value; // for leaving badly formatted date on the form
if(isset($options['type'])) {
if (preg_match('#double|float|real|numeric#', $options['type'])) {
$tc_value = str_replace(',', '.', $tc_value);
}
}
if (isset($options['regexp'])) {
if (!preg_match($options['regexp'], $value)) {
$object->SetError($field_name, 'invalid_format');
}
}
return $tc_value;
}
function HumanFormat($format)
{
return $format;
}
/**
* The method is supposed to alter config options or cofigure object in some way based on its usage of formatters
* The methods is called for every field with formatter defined when configuring item.
* Could be used for adding additional VirtualFields to an object required by some special Formatter
*
* @param string $field_name
* @param array $field_options
* @param kDBBase $object
*/
function PrepareOptions($field_name, &$field_options, &$object)
{
}
/**
* Used for split fields like timestamp -> date, time
* Called from DBItem to update sub fields values after loading item
*
* @param unknown_type $field
* @param unknown_type $value
* @param unknown_type $options
* @param unknown_type $object
*/
function UpdateSubFields($field, $value, &$options, &$object)
{
}
/**
* Used for split fields like timestamp -> date, time
* Called from DBItem Validate (before validation) to get back master field value from its sub_fields
*
- * @param unknown_type $field
- * @param unknown_type $value
- * @param unknown_type $options
- * @param unknown_type $object
+ * @param string $field
+ * @param mixed $value
+ * @param Array $options
+ * @param kDBItem $object
*/
function UpdateMasterFields($field, $value, &$options, &$object)
{
}
/* function GetErrorMsg($pseudo_error, $options)
{
if ( isset($options['error_msgs'][$pseudo_error]) ) {
return $options['error_msgs'][$pseudo_error];
}
else {
return $this->ErrorMsgs[$pseudo_error];
}
}*/
function GetSample($field, &$options, &$object)
{
if (isset($options['sample_value'])) return $options['sample_value'];
}
}
\ No newline at end of file
Property changes on: branches/RC/core/kernel/utility/formatters/formatter.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.5.2.1
\ No newline at end of property
+1.5.2.2
\ No newline at end of property
Index: branches/RC/core/kernel/db/db_tag_processor.php
===================================================================
--- branches/RC/core/kernel/db/db_tag_processor.php (revision 10831)
+++ branches/RC/core/kernel/db/db_tag_processor.php (revision 10832)
@@ -1,2207 +1,2223 @@
<?php
class kDBTagProcessor extends TagProcessor {
/**
* Description
*
* @var kDBConnection
* @access public
*/
var $Conn;
function kDBTagProcessor()
{
parent::kBase();
$this->Conn =& $this->Application->GetADODBConnection();
}
/**
* Returns true if "new" button was pressed in toolbar
*
* @param Array $params
* @return bool
*/
function IsNewMode($params)
{
$object =& $this->getObject($params);
return $object->GetID() <= 0;
}
/**
* Returns view menu name for current prefix
*
* @param Array $params
* @return string
*/
function GetItemName($params)
{
$item_name = $this->Application->getUnitOption($this->Prefix, 'ViewMenuPhrase');
return $this->Application->Phrase($item_name);
}
function ViewMenu($params)
{
$block_params = $params;
unset($block_params['block']);
$block_params['name'] = $params['block'];
$list =& $this->GetList($params);
$block_params['PrefixSpecial'] = $list->getPrefixSpecial();
return $this->Application->ParseBlock($block_params);
}
function SearchKeyword($params)
{
$list =& $this->GetList($params);
return $this->Application->RecallVar($list->getPrefixSpecial().'_search_keyword');
}
/**
* Draw filter menu content (for ViewMenu) based on filters defined in config
*
* @param Array $params
* @return string
*/
function DrawFilterMenu($params)
{
$block_params = $this->prepareTagParams($params);
$block_params['name'] = $params['spearator_block'];
$separator = $this->Application->ParseBlock($block_params);
$filter_menu = $this->Application->getUnitOption($this->Prefix,'FilterMenu');
if (!$filter_menu) {
trigger_error('<span class="debug_error">no filters defined</span> for prefix <b>'.$this->Prefix.'</b>, but <b>DrawFilterMenu</b> tag used', E_USER_WARNING);
return '';
}
// Params: label, filter_action, filter_status
$block_params['name'] = $params['item_block'];
$view_filter = $this->Application->RecallVar($this->getPrefixSpecial().'_view_filter');
if ($view_filter === false) {
$event_params = Array ('prefix' => $this->Prefix, 'special' => $this->Special, 'name' => 'OnRemoveFilters');
$this->Application->HandleEvent( new kEvent($event_params) );
$view_filter = $this->Application->RecallVar($this->getPrefixSpecial().'_view_filter');
}
$view_filter = unserialize($view_filter);
$filters = Array();
$prefix_special = $this->getPrefixSpecial();
foreach ($filter_menu['Filters'] as $filter_key => $filter_params) {
$group_params = isset($filter_params['group_id']) ? $filter_menu['Groups'][ $filter_params['group_id'] ] : Array();
if (!isset($group_params['element_type'])) {
$group_params['element_type'] = 'checkbox';
}
if (!$filter_params) {
$filters[] = $separator;
continue;
}
$block_params['label'] = addslashes( $this->Application->Phrase($filter_params['label']) );
if (getArrayValue($view_filter,$filter_key)) {
$submit = 0;
if (isset($params['old_style'])) {
$status = $group_params['element_type'] == 'checkbox' ? 1 : 2;
}
else {
$status = $group_params['element_type'] == 'checkbox' ? '[\'img/check_on.gif\']' : '[\'img/menu_dot.gif\']';
}
}
else {
$submit = 1;
$status = 'null';
}
$block_params['filter_action'] = 'set_filter("'.$prefix_special.'","'.$filter_key.'","'.$submit.'",'.$params['ajax'].');';
$block_params['filter_status'] = $status; // 1 - checkbox, 2 - radio, 0 - no image
$filters[] = $this->Application->ParseBlock($block_params);
}
return implode('', $filters);
}
/**
* Draws auto-refresh submenu in View Menu.
*
* @param Array $params
* @return string
*/
function DrawAutoRefreshMenu($params)
{
$refresh_intervals = $this->Application->ConfigValue('AutoRefreshIntervals');
if (!$refresh_intervals) {
trigger_error('<span class="debug_error">no filters defined</span> for prefix <strong>'.$this->Prefix.'</strong>, but <strong>DrawAutoRefreshMenu</strong> tag used', E_USER_WARNING);
return '';
}
$refresh_intervals = explode(',', $refresh_intervals);
$view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
$current_refresh_interval = $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_refresh_interval.'.$view_name);
if ($current_refresh_interval === false) {
// if no interval was selected before, then choose 1st interval
$current_refresh_interval = $refresh_intervals[0];
}
$ret = '';
$block_params = $this->prepareTagParams($params);
$block_params['name'] = $params['render_as'];
foreach ($refresh_intervals as $refresh_interval) {
$block_params['label'] = $this->_formatInterval($refresh_interval);
$block_params['refresh_interval'] = $refresh_interval;
$block_params['selected'] = $current_refresh_interval == $refresh_interval;
$ret .= $this->Application->ParseBlock($block_params);
}
return $ret;
}
/**
* Tells, that current grid is using auto refresh
*
* @param Array $params
* @return bool
*/
function UseAutoRefresh($params)
{
$view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
return $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_auto_refresh.'.$view_name);
}
/**
* Returns current grid refresh interval
*
* @param Array $params
* @return bool
*/
function AutoRefreshInterval($params)
{
$view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
return $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_refresh_interval.'.$view_name);
}
/**
* Formats time interval using given text for hours and minutes
*
* @param int $intervalmMinutes
* @param string $hour_text Text for hours
* @param string $min_text Text for minutes
* @return unknown
*/
function _formatInterval($interval, $hour_text = 'h', $min_text = 'min')
{
// 65
$minutes = $interval % 60;
$hours = ($interval - $minutes) / 60;
$ret = '';
if ($hours) {
$ret .= $hours.$hour_text.' ';
}
if ($minutes) {
$ret .= $minutes.$min_text;
}
return $ret;
}
function IterateGridFields($params)
{
$mode = $params['mode'];
$def_block = isset($params['block']) ? $params['block'] : '';
$force_block = isset($params['force_block']) ? $params['force_block'] : false;
$grids = $this->Application->getUnitOption($this->Prefix,'Grids');
$grid_config = $grids[$params['grid']]['Fields'];
$picker_helper =& $this->Application->RecallObject('ColumnPickerHelper');
/* @var $picker_helper kColumnPickerHelper */
$picker_helper->ApplyPicker($this->getPrefixSpecial(), $grid_config, $params['grid']);
if ($mode == 'fields') {
return "'".join("','", array_keys($grid_config))."'";
}
$std_params['pass_params'] = 'true';
$std_params['PrefixSpecial'] = $this->getPrefixSpecial();
$object =& $this->GetList($params);
$o = '';
$i = 0;
foreach ($grid_config as $field => $options) {
$i++;
$block_params = Array();
$block_params['name'] = $force_block ? $force_block : (isset($options[$mode.'_block']) ? $options[$mode.'_block'] : $def_block);
$block_params['field'] = $field;
$block_params['sort_field'] = isset($options['sort_field']) ? $options['sort_field'] : $field;
$block_params['filter_field'] = isset($options['filter_field']) ? $options['filter_field'] : $field;
$w = $picker_helper->GetWidth($field);
if ($w) $options['width'] = $w;
/*if (isset($options['filter_width'])) {
$block_params['filter_width'] = $options['filter_width'];
}
elseif (isset($options['width'])) {
if (isset($options['filter_block']) && preg_match('/range/', $options['filter_block'])) {
if ($options['width'] < 60) {
$options['width'] = 60;
$block_params['filter_width'] = 20;
}
else {
$block_params['filter_width'] = $options['width'] - 40;
}
}
else {
$block_params['filter_width'] = max($options['width']-10, 20);
}
}*/
/*if (isset($block_params['filter_width'])) $block_params['filter_width'] .= 'px';
if (isset($options['filter_block']) && preg_match('/range/', $options['filter_block'])) {
$block_params['filter_width'] = '20px';
}
else {
$block_params['filter_width'] = '97%';
// $block_params['filter_width'] = max($options['width']-10, 20);
}*/
$field_options = $object->GetFieldOptions($field);
if (array_key_exists('use_phrases', $field_options)) {
$block_params['use_phrases'] = $field_options['use_phrases'];
}
$block_params['is_last'] = ($i == count($grid_config));
$block_params = array_merge($std_params, $options, $block_params);
$o.= $this->Application->ParseBlock($block_params, 1);
}
return $o;
}
function PickerCRC($params)
{
/* @var $picker_helper kColumnPickerHelper */
$picker_helper =& $this->Application->RecallObject('ColumnPickerHelper');
$picker_helper->SetGridName($params['grid']);
$data = $picker_helper->LoadColumns($this->getPrefixSpecial());
return $data['crc'];
}
function FreezerPosition($params)
{
/* @var $picker_helper kColumnPickerHelper */
$picker_helper =& $this->Application->RecallObject('ColumnPickerHelper');
$picker_helper->SetGridName($params['grid']);
$data = $picker_helper->LoadColumns($this->getPrefixSpecial());
$freezer_pos = array_search('__FREEZER__', $data['order']);
return $freezer_pos === false || in_array('__FREEZER__', $data['hidden_fields']) ? 1 : ++$freezer_pos;
}
function GridFieldsCount($params)
{
$grids = $this->Application->getUnitOption($this->Prefix, 'Grids');
$grid_config = $grids[$params['grid']]['Fields'];
return count($grid_config);
}
/**
* Prints list content using block specified
*
* @param Array $params
* @return string
* @access public
*/
function PrintList($params)
{
$params['no_table'] = 1;
return $this->PrintList2($params);
}
function InitList($params)
{
$list_name = isset($params['list_name']) ? $params['list_name'] : '';
$names_mapping = $this->Application->GetVar('NamesToSpecialMapping');
if( !getArrayValue($names_mapping, $this->Prefix, $list_name) )
{
$list =& $this->GetList($params);
}
}
function BuildListSpecial($params)
{
return $this->Special;
}
/**
* Returns key, that identifies each list on template (used internally, not tag)
*
* @param Array $params
* @return string
*/
function getUniqueListKey($params)
{
$types = $this->SelectParam($params, 'types');
$except = $this->SelectParam($params, 'except');
$list_name = $this->SelectParam($params, 'list_name');
if (!$list_name) {
$list_name = $this->Application->Parser->GetParam('list_name');
}
return $types.$except.$list_name;
}
/**
* Enter description here...
*
* @param Array $params
* @return kDBList
*/
function &GetList($params)
{
$list_name = $this->SelectParam($params, 'list_name,name');
if (!$list_name) {
$list_name = $this->Application->Parser->GetParam('list_name');
}
$requery = isset($params['requery']) && $params['requery'];
if ($list_name && !$requery){
$names_mapping = $this->Application->GetVar('NamesToSpecialMapping');
$special = is_array($names_mapping) && isset($names_mapping[$this->Prefix]) && isset($names_mapping[$this->Prefix][$list_name]) ? $names_mapping[$this->Prefix][$list_name] : false;
// $special = getArrayValue($names_mapping, $this->Prefix, $list_name);
if(!$special)
{
$special = $this->BuildListSpecial($params);
}
}
else
{
$special = $this->BuildListSpecial($params);
}
$prefix_special = rtrim($this->Prefix.'.'.$special, '.');
$params['skip_counting'] = true;
$list =& $this->Application->recallObject( $prefix_special, $this->Prefix.'_List', $params);
/* @var $list kDBList */
if ($requery) {
$this->Application->HandleEvent($an_event, $prefix_special.':OnListBuild', $params);
}
if (array_key_exists('offset', $params)) {
$list->Offset += $params['offset']; // apply custom offset
}
$list->Query($requery);
if (array_key_exists('offset', $params)) {
$list->Offset -= $params['offset']; // remove custom offset
}
$this->Special = $special;
if ($list_name) {
$names_mapping[$this->Prefix][$list_name] = $special;
$this->Application->SetVar('NamesToSpecialMapping', $names_mapping);
}
return $list;
}
function ListMarker($params)
{
$list =& $this->GetList($params);
$ret = $list->getPrefixSpecial();
if( getArrayValue($params, 'as_preg') ) $ret = preg_quote($ret, '/');
return $ret;
}
/**
* Prepares name for field with event in it (used only on front-end)
*
* @param Array $params
* @return string
*/
function SubmitName($params)
{
$list =& $this->GetList($params);
$prefix_special = $list->getPrefixSpecial();
return 'events['.$prefix_special.']['.$params['event'].']';
}
/**
* Prints list content using block specified
*
* @param Array $params
* @return string
* @access public
*/
function PrintList2($params)
{
$per_page = $this->SelectParam($params, 'per_page,max_items');
if ($per_page !== false) $params['per_page'] = $per_page;
$list =& $this->GetList($params);
$o = '';
$direction = (isset($params['direction']) && $params['direction']=="H")?"H":"V";
$columns = (isset($params['columns'])) ? $params['columns'] : 1;
$id_field = (isset($params['id_field'])) ? $params['id_field'] : $this->Application->getUnitOption($this->Prefix, 'IDField');
if ($columns > 1 && $direction == 'V') {
$records_left = array_splice($list->Records, $list->SelectedCount); // because we have 1 more record for "More..." link detection (don't need to sort it)
$list->Records = $this->LinearToVertical($list->Records, $columns, $list->GetPerPage());
$list->Records = array_merge($list->Records, $records_left);
}
$list->GoFirst();
$block_params=$this->prepareTagParams($params);
$block_params['name'] = $this->SelectParam($params, 'render_as,block');
$block_params['pass_params'] = 'true';
$block_params['column_width'] = $params['column_width'] = 100 / $columns;
$block_start_row_params = $this->prepareTagParams($params);
$block_start_row_params['name'] = $this->SelectParam($params, 'row_start_render_as,block_row_start,row_start_block');
$block_end_row_params=$this->prepareTagParams($params);
$block_end_row_params['name'] = $this->SelectParam($params, 'row_end_render_as,block_row_end,row_end_block');
$block_empty_cell_params = $this->prepareTagParams($params);
$block_empty_cell_params['name'] = $this->SelectParam($params, 'empty_cell_render_as,block_empty_cell,empty_cell_block');
$i=0;
$backup_id=$this->Application->GetVar($this->Prefix."_id");
$displayed = array();
$column_number = 1;
$cache_mod_rw = $this->Application->getUnitOption($this->Prefix, 'CacheModRewrite') && $this->Application->RewriteURLs();
while (!$list->EOL())
{
$this->Application->SetVar( $this->getPrefixSpecial().'_id', $list->GetDBField($id_field) ); // for edit/delete links using GET
$this->Application->SetVar( $this->Prefix.'_id', $list->GetDBField($id_field) );
$block_params['is_last'] = ($i == $list->SelectedCount - 1);
$block_params['not_last'] = !$block_params['is_last']; // for front-end
if ($cache_mod_rw) {
if ($this->Prefix == 'c') {
// for listing subcategories in category
$this->Application->setCache('filenames', $this->Prefix.'_'.$list->GetDBField($id_field), $list->GetDBField('NamedParentPath'));
$this->Application->setCache('category_tree', $list->GetDBField($id_field), $list->GetDBField('TreeLeft') . ';' . $list->GetDBField('TreeRight'));
} else {
// for listing items in category
$this->Application->setCache('filenames', 'c_'.$list->GetDBField('CategoryId'), $list->GetDBField('CategoryFilename'));
$this->Application->setCache('filenames', $this->Prefix.'_'.$list->GetDBField($id_field), $list->GetDBField('Filename'));
}
}
if ($i % $columns == 0) {
// record in this iteration is first in row, then open row
$column_number = 1;
$o.= $block_start_row_params['name'] ?
$this->Application->ParseBlock($block_start_row_params, 1) :
(!isset($params['no_table']) ? '<tr>' : '');
}
else {
$column_number++;
}
$block_params['first_col'] = $column_number == 1 ? 1 : 0;
$block_params['last_col'] = $column_number == $columns ? 1 : 0;
$block_params['column_number'] = $column_number;
$this->PrepareListElementParams($list, $block_params); // new, no need to rewrite PrintList
$o.= $this->Application->ParseBlock($block_params, 1);
array_push($displayed, $list->GetDBField($id_field));
if($direction == 'V' && $list->SelectedCount % $columns > 0 && $column_number == ($columns - 1) && ceil(($i + 1) / $columns) > $list->SelectedCount % ceil($list->SelectedCount / $columns)) {
// if vertical output, then draw empty cells vertically, not horizontally
$o .= $block_empty_cell_params['name'] ? $this->Application->ParseBlock($block_empty_cell_params, 1) : '<td>&nbsp;</td>';
$i++;
}
if (($i + 1) % $columns == 0) {
// record in next iteration is first in row too, then close this row
$o.= $block_end_row_params['name'] ?
$this->Application->ParseBlock($block_end_row_params, 1) :
(!isset($params['no_table']) ? '</tr>' : '');
}
$list->GoNext();
$i++;
}
// append empty cells in place of missing cells in last row
while ($i % $columns != 0) {
// until next cell will be in new row append empty cells
$o .= $block_empty_cell_params['name'] ? $this->Application->ParseBlock($block_empty_cell_params, 1) : '<td>&nbsp;</td>';
if (($i+1) % $columns == 0) {
// record in next iteration is first in row too, then close this row
$o .= $block_end_row_params['name'] ? $this->Application->ParseBlock($block_end_row_params, 1) : '</tr>';
}
$i++;
}
$cur_displayed = $this->Application->GetVar($this->Prefix.'_displayed_ids');
if (!$cur_displayed) {
$cur_displayed = Array();
}
else {
$cur_displayed = explode(',', $cur_displayed);
}
$displayed = array_unique(array_merge($displayed, $cur_displayed));
$this->Application->SetVar($this->Prefix.'_displayed_ids', implode(',',$displayed));
$this->Application->SetVar( $this->Prefix.'_id', $backup_id);
$this->Application->SetVar( $this->getPrefixSpecial().'_id', '');
if (isset($params['more_link_render_as'])) {
$block_params = $params;
$params['render_as'] = $params['more_link_render_as'];
$o .= $this->MoreLink($params);
}
return $o;
}
/**
* Allows to modify block params & current list record before PrintList parses record
*
* @param kDBList $object
* @param Array $block_params
*/
function PrepareListElementParams(&$object, &$block_params)
{
// $fields_hash =& $object->getCurrentRecord();
}
function MoreLink($params)
{
$per_page = $this->SelectParam($params, 'per_page,max_items');
if ($per_page !== false) $params['per_page'] = $per_page;
$list =& $this->GetList($params);
if ($list->PerPage < $list->RecordsCount) {
$block_params = array();
$block_params['name'] = $this->SelectParam($params, 'render_as,block');
return $this->Application->ParseBlock($block_params, 1);
}
}
function NotLastItem($params)
{
$object =& $this->getList($params); // maybe we should use $this->GetList($params) instead
return ($object->CurrentIndex < min($object->PerPage == -1 ? $object->RecordsCount : $object->PerPage, $object->RecordsCount) - 1);
}
function PageLink($params)
{
$t = isset($params['template']) ? $params['template'] : '';
unset($params['template']);
if (!$t) $t = $this->Application->GetVar('t');
if (isset($params['page'])) {
$this->Application->SetVar($this->getPrefixSpecial().'_Page', $params['page']);
unset($params['page']);
}
if (!isset($params['pass'])) {
$params['pass'] = 'm,'.$this->getPrefixSpecial();
}
return $this->Application->HREF($t, '', $params);
}
function ColumnWidth($params)
{
$columns = $this->Application->Parser->GetParam('columns');
return round(100/$columns).'%';
}
/**
* Append prefix and special to tag
* params (get them from tagname) like
* they were really passed as params
*
* @param Array $tag_params
* @return Array
* @access protected
*/
function prepareTagParams($tag_params = Array())
{
/*if (isset($tag_params['list_name'])) {
$list =& $this->GetList($tag_params);
$this->Init($list->Prefix, $list->Special);
}*/
$ret = $tag_params;
$ret['Prefix'] = $this->Prefix;
$ret['Special'] = $this->Special;
$ret['PrefixSpecial'] = $this->getPrefixSpecial();
return $ret;
}
function GetISO($currency)
{
if ($currency == 'selected') {
$iso = $this->Application->RecallVar('curr_iso');
}
elseif ($currency == 'primary' || $currency == '') {
$iso = $this->Application->GetPrimaryCurrency();
}
else { //explicit currency
$iso = $currency;
}
return $iso;
}
function ConvertCurrency($value, $iso)
{
$converter =& $this->Application->recallObject('kCurrencyRates');
// convery primary currency to selected (if they are the same, converter will just return)
$value = $converter->Convert($value, 'PRIMARY', $iso);
return $value;
}
function AddCurrencySymbol($value, $iso)
{
$currency =& $this->Application->recallObject('curr.-'.$iso, null, Array('skip_autoload' => true));
if( !$currency->isLoaded() ) $currency->Load($iso, 'ISO');
$symbol = $currency->GetDBField('Symbol');
if (!$symbol) $symbol = $currency->GetDBField('ISO').'&nbsp;';
if ($currency->GetDBField('SymbolPosition') == 0) {
$value = $symbol.$value;
}
if ($currency->GetDBField('SymbolPosition') == 1) {
$value = $value.$symbol;
}
return $value;
}
/**
* Get's requested field value
*
* @param Array $params
* @return string
* @access public
*/
function Field($params)
{
$field = $this->SelectParam($params, 'name,field');
if( !$this->Application->IsAdmin() ) $params['no_special'] = 'no_special';
$object =& $this->getObject($params);
if ( $this->HasParam($params, 'db') )
{
$value = $object->GetDBField($field);
}
else
{
if( $this->HasParam($params, 'currency') )
{
$iso = $this->GetISO($params['currency']);
$original = $object->GetDBField($field);
$value = $this->ConvertCurrency($original, $iso);
$object->SetDBField($field, $value);
$object->Fields[$field]['converted'] = true;
}
$format = getArrayValue($params, 'format');
if (!$format || $format == '$format') {
$format = null;
}
$value = $object->GetField($field, $format);
if( $this->SelectParam($params, 'negative') )
{
if(strpos($value, '-') === 0)
{
$value = substr($value, 1);
}
else
{
$value = '-'.$value;
}
}
if( $this->HasParam($params, 'currency') )
{
$value = $this->AddCurrencySymbol($value, $iso);
$params['no_special'] = 1;
}
}
if( !$this->HasParam($params, 'no_special') ) $value = htmlspecialchars($value);
if( getArrayValue($params,'checked' ) ) $value = ($value == ( isset($params['value']) ? $params['value'] : 1)) ? 'checked' : '';
if( isset($params['plus_or_as_label']) ) {
$value = substr($value, 0,1) == '+' ? substr($value, 1) : $this->Application->Phrase($value);
}
elseif( isset($params['as_label']) && $params['as_label'] ) $value = $this->Application->Phrase($value);
$first_chars = $this->SelectParam($params,'first_chars,cut_first');
if($first_chars)
{
$needs_cut = mb_strlen($value) > $first_chars;
$value = mb_substr($value, 0, $first_chars);
if ($needs_cut) $value .= ' ...';
}
if( getArrayValue($params,'nl2br' ) ) $value = nl2br($value);
if ($value != '') $this->Application->Parser->DataExists = true;
if( $this->HasParam($params, 'currency') )
{
//restoring value in original currency, for other Field tags to work properly
$object->SetDBField($field, $original);
}
return $value;
}
function SetField($params)
{
// <inp2:SetField field="Value" src=p:cust_{$custom_name}"/>
$object =& $this->getObject($params);
$dst_field = $this->SelectParam($params, 'name,field');
list($prefix_special, $src_field) = explode(':', $params['src']);
$src_object =& $this->Application->recallObject($prefix_special);
$object->SetDBField($dst_field, $src_object->GetDBField($src_field));
}
/**
* Checks if parameter is passed
* Note: works like Tag and line simple method too
*
* @param Array $params
* @param string $param_name
* @return bool
*/
function HasParam($params, $param_name = null)
{
if( !isset($param_name) )
{
$param_name = $this->SelectParam($params, 'name');
$params = $this->Application->Parser->Params;
}
$value = isset($params[$param_name]) ? $params[$param_name] : false;
return $value && ($value != '$'.$param_name);
}
function PhraseField($params)
{
$field_label = $this->Field($params);
$translation = $this->Application->Phrase( $field_label );
return $translation;
}
function Error($params)
{
$field = $this->SelectParam($params, 'name,field');
$object =& $this->getObject($params);
$msg = $object->GetErrorMsg($field, false);
return $msg;
}
function HasError($params)
{
if ($params['field'] == 'any')
{
$object =& $this->getObject($params);
$skip_fields = getArrayValue($params, 'except');
$skip_fields = $skip_fields ? explode(',', $skip_fields) : Array();
return $object->HasErrors($skip_fields);
}
else
{
$fields = $this->SelectParam($params, 'field,fields');
$fields = explode(',', $fields);
$res = false;
foreach($fields as $field)
{
$params['field'] = $field;
$res = $res || ($this->Error($params) != '');
}
return $res;
}
}
function ErrorWarning($params)
{
if (!isset($params['field'])) {
$params['field'] = 'any';
}
if ($this->HasError($params)) {
$params['prefix'] = $this->getPrefixSpecial();
return $this->Application->ParseBlock($params);
}
}
function IsRequired($params)
{
$field = $params['field'];
$object =& $this->getObject($params);;
$formatter_class = getArrayValue($object->Fields, $field, 'formatter');
if ($formatter_class == 'kMultiLanguage')
{
$formatter =& $this->Application->recallObject($formatter_class);
$field = $formatter->LangFieldName($field);
}
$options = $object->GetFieldOptions($field);
return getArrayValue($options,'required');
}
function FieldOption($params)
{
$object =& $this->getObject($params);;
$options = $object->GetFieldOptions($params['field']);
$ret = isset($options[$params['option']]) ? $options[$params['option']] : '';
if (isset($params['as_label']) && $params['as_label']) $ret = $this->Application->ReplaceLanguageTags($ret);
return $ret;
}
function PredefinedOptions($params)
{
$object =& $this->getObject($params);
$field = $params['field'];
$value = array_key_exists('value', $params) ? $params['value'] : $object->GetDBField($field);
$field_options = $object->GetFieldOptions($field);
if (!array_key_exists('options', $field_options) || !is_array($field_options['options'])) {
trigger_error('Options not defined for <strong>'.$object->Prefix.'</strong> field <strong>'.$field.'</strong>', E_USER_WARNING);
return '';
}
$options = $field_options['options'];
if ($this->HasParam($params, 'has_empty')) {
$empty_value = array_key_exists('empty_value', $params) ? $params['empty_value'] : '';
$options = array_merge_recursive2(Array ($empty_value => ''), $options); // don't use other array merge function, because they will reset keys !!!
}
$block_params = $this->prepareTagParams($params);
$block_params['name'] = $this->SelectParam($params, 'render_as,block');
$block_params['pass_params'] = 'true';
if (method_exists($object, 'EOL') && count($object->Records) == 0) {
// for drawing grid column filter
$block_params['field_name'] = '';
}
else {
$block_params['field_name'] = $this->InputName($params); // depricated (produces warning when used as grid filter), but used in Front-End (submission create), admin (submission view)
}
$selected_param_name = getArrayValue($params, 'selected_param');
if (!$selected_param_name) {
$selected_param_name = $params['selected'];
}
$selected = $params['selected'];
$o = '';
if ($this->HasParam($params, 'no_empty') && !getArrayValue($options, '')) {
// removes empty option, when present (needed?)
array_shift($options);
}
if (strpos($value, '|') !== false) {
// multiple checkboxes OR multiselect
$value = explode('|', substr($value, 1, -1) );
foreach ($options as $key => $val) {
$block_params['key'] = $key;
$block_params['option'] = $val;
$block_params[$selected_param_name] = ( in_array($key, $value) ? ' '.$selected : '');
$o .= $this->Application->ParseBlock($block_params, 1);
}
}
else {
// single selection radio OR checkboxes OR dropdown
foreach ($options as $key => $val) {
$block_params['key'] = $key;
$block_params['option'] = $val;
$block_params[$selected_param_name] = (strlen($key) == strlen($value) && ($key == $value) ? ' '.$selected : '');
$o .= $this->Application->ParseBlock($block_params, 1);
}
}
return $o;
}
function PredefinedSearchOptions($params)
{
$object =& $this->getObject($params);
/* @var $object kDBList */
$params['value'] = $this->SearchField($params);
$view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
$custom_filter = $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_custom_filter.'.$view_name, ALLOW_DEFAULT_SETTINGS);
return $this->PredefinedOptions($params);
}
function Format($params)
{
$field = $this->SelectParam($params, 'name,field');
$object =& $this->getObject($params);
$options = $object->GetFieldOptions($field);
$format = $options[ $this->SelectParam($params, 'input_format') ? 'input_format' : 'format' ];
$formatter_class = getArrayValue($options,'formatter');
if ($formatter_class) {
$formatter =& $this->Application->recallObject($formatter_class);
$human_format = getArrayValue($params,'human');
$edit_size = getArrayValue($params,'edit_size');
$sample = getArrayValue($params,'sample');
if($sample)
{
return $formatter->GetSample($field, $options, $object);
}
elseif($human_format || $edit_size)
{
$format = $formatter->HumanFormat($format);
return $edit_size ? strlen($format) : $format;
}
}
return $format;
}
/**
* Returns grid padination information
* Can return links to pages
*
* @param Array $params
* @return mixed
*/
function PageInfo($params)
{
$object =& $this->GetList($params);
/* @var $object kDBList */
$type = $params['type'];
unset($params['type']); // remove parameters used only by current tag
$ret = '';
switch ($type) {
case 'current':
$ret = $object->Page;
break;
case 'total':
$ret = $object->GetTotalPages();
break;
case 'prev':
$ret = $object->Page > 1 ? $object->Page - 1 : false;
break;
case 'next':
$ret = $object->Page < $object->GetTotalPages() ? $object->Page + 1 : false;
break;
}
if ($ret && isset($params['as_link']) && $params['as_link']) {
unset($params['as_link']); // remove parameters used only by current tag
$params['page'] = $ret;
$current_page = $object->Page; // backup current page
$ret = $this->PageLink($params);
$this->Application->SetVar($object->getPrefixSpecial().'_Page', $current_page); // restore page
}
return $ret;
}
/**
* Print grid pagination using
* block names specified
*
* @param Array $params
* @return string
* @access public
*/
function PrintPages($params)
{
$list =& $this->GetList($params);
$prefix_special = $list->getPrefixSpecial();
$total_pages = $list->GetTotalPages();
if ($total_pages > 1) $this->Application->Parser->DataExists = true;
if($total_pages == 0) $total_pages = 1; // display 1st page as selected in case if we have no pages at all
$o = '';
// what are these 2 lines for?
$this->Application->SetVar($prefix_special.'_event','');
$this->Application->SetVar($prefix_special.'_id','');
$current_page = $list->Page; // $this->Application->RecallVar($prefix_special.'_Page');
$block_params = $this->prepareTagParams($params);
$split = ( isset($params['split'] ) ? $params['split'] : 10 );
$split_start = $current_page - ceil($split/2);
if ($split_start < 1){
$split_start = 1;
}
$split_end = $split_start + $split-1;
if ($split_end > $total_pages) {
$split_end = $total_pages;
$split_start = max($split_end - $split + 1, 1);
}
if ($current_page > 1){
$prev_block_params = $this->prepareTagParams();
if ($total_pages > $split){
$prev_block_params['page'] = max($current_page-$split, 1);
$prev_block_params['name'] = $this->SelectParam($params, 'prev_page_split_render_as,prev_page_split_block');
if ($prev_block_params['name']){
$o .= $this->Application->ParseBlock($prev_block_params, 1);
}
}
$prev_block_params['name'] = 'page';
$prev_block_params['page'] = $current_page-1;
$prev_block_params['name'] = $this->SelectParam($params, 'prev_page_render_as,block_prev_page,prev_page_block');
if ($prev_block_params['name']) {
$this->Application->SetVar($this->getPrefixSpecial().'_Page', $current_page-1);
$o .= $this->Application->ParseBlock($prev_block_params, 1);
}
}
else {
if ( $no_prev_page_block = $this->SelectParam($params, 'no_prev_page_render_as,block_no_prev_page') ) {
$block_params['name'] = $no_prev_page_block;
$o .= $this->Application->ParseBlock($block_params, 1);
}
}
$separator_params['name'] = $this->SelectParam($params, 'separator_render_as,block_separator');
for ($i = $split_start; $i <= $split_end; $i++)
{
if ($i == $current_page) {
$block = $this->SelectParam($params, 'current_render_as,active_render_as,block_current,active_block');
}
else {
$block = $this->SelectParam($params, 'link_render_as,inactive_render_as,block_link,inactive_block');
}
$block_params['name'] = $block;
$block_params['page'] = $i;
$this->Application->SetVar($this->getPrefixSpecial().'_Page', $i);
$o .= $this->Application->ParseBlock($block_params, 1);
if ($this->SelectParam($params, 'separator_render_as,block_separator')
&& $i < $split_end)
{
$o .= $this->Application->ParseBlock($separator_params, 1);
}
}
if ($current_page < $total_pages){
$next_block_params = $this->prepareTagParams();
$next_block_params['page']=$current_page+1;
$next_block_params['name'] = $this->SelectParam($params, 'next_page_render_as,block_next_page,next_page_block');
if ($next_block_params['name']){
$this->Application->SetVar($this->getPrefixSpecial().'_Page', $current_page+1);
$o .= $this->Application->ParseBlock($next_block_params, 1);
}
if ($total_pages > $split){
$next_block_params['page']=min($current_page+$split, $total_pages);
$next_block_params['name'] = $this->SelectParam($params, 'next_page_split_render_as,next_page_split_block');
if ($next_block_params['name']){
$o .= $this->Application->ParseBlock($next_block_params, 1);
}
}
}
$this->Application->SetVar($this->getPrefixSpecial().'_Page', $current_page);
return $o;
}
/**
* Print grid pagination using
* block names specified
*
* @param Array $params
* @return string
* @access public
*/
function PaginationBar($params)
{
return $this->PrintPages($params);
}
/**
* Returns field name (processed by kMultiLanguage formatter
* if required) and item's id from it's IDField or field required
*
* @param Array $params
* @return Array (id,field)
* @access private
*/
function prepareInputName($params)
{
$field = $this->SelectParam($params, 'name,field');
$object =& $this->getObject($params);
$formatter_class = getArrayValue($object->Fields, $field, 'formatter');
if ($formatter_class == 'kMultiLanguage') {
$formatter =& $this->Application->recallObject($formatter_class);
/* @var $formatter kMultiLanguage */
$force_primary = isset($object->Fields[$field]['force_primary']) && $object->Fields[$field]['force_primary'];
$field = $formatter->LangFieldName($field, $force_primary);
}
if (array_key_exists('force_id', $params)) {
$id = $params['force_id'];
}
else {
$id_field = getArrayValue($params, 'IdField');
$id = $id_field ? $object->GetDBField($id_field) : $object->GetID();
}
return Array($id, $field);
}
/**
* Returns input field name to
* be placed on form (for correct
* event processing)
*
* @param Array $params
* @return string
* @access public
*/
function InputName($params)
{
list($id, $field) = $this->prepareInputName($params);
$ret = $this->getPrefixSpecial().'['.$id.']['.$field.']';
if( getArrayValue($params, 'as_preg') ) $ret = preg_quote($ret, '/');
return $ret;
}
/**
* Allows to override various field options through hidden fields with specific names in submit.
* This tag generates this special names
*
* @param Array $params
* @return string
* @author Alex
*/
function FieldModifier($params)
{
list($id, $field) = $this->prepareInputName($params);
$ret = 'field_modifiers['.$this->getPrefixSpecial().']['.$field.']['.$params['type'].']';
if( getArrayValue($params, 'as_preg') ) $ret = preg_quote($ret, '/');
if (isset($params['value'])) {
$object =& $this->getObject($params);
$field_modifiers[$field][$params['type']] = $params['value'];
$object->ApplyFieldModifiers($field_modifiers);
}
return $ret;
}
/**
* Returns index where 1st changable sorting field begins
*
* @return int
* @access private
*/
function getUserSortIndex()
{
$list_sortings = $this->Application->getUnitOption($this->Prefix, 'ListSortings');
$sorting_prefix = getArrayValue($list_sortings, $this->Special) ? $this->Special : '';
$user_sorting_start = 0;
if ( $forced_sorting = getArrayValue($list_sortings, $sorting_prefix, 'ForcedSorting') ) {
$user_sorting_start = count($forced_sorting);
}
return $user_sorting_start;
}
/**
* Returns order direction for given field
*
*
*
* @param Array $params
* @return string
* @access public
*/
function Order($params)
{
$field = $params['field'];
$user_sorting_start = $this->getUserSortIndex();
$list =& $this->GetList($params);
if ($list->GetOrderField($user_sorting_start) == $field)
{
return strtolower($list->GetOrderDirection($user_sorting_start));
}
elseif($list->GetOrderField($user_sorting_start+1) == $field)
{
return '2_'.strtolower($list->GetOrderDirection($user_sorting_start+1));
}
else
{
return 'no';
}
}
/**
* Get's information of sorting field at "pos" position,
* like sorting field name (type="field") or sorting direction (type="direction")
*
* @param Array $params
* @return mixed
*/
function OrderInfo($params)
{
$user_sorting_start = $this->getUserSortIndex() + --$params['pos'];
$list =& $this->GetList($params);
// $object =& $this->Application->recallObject( $this->getPrefixSpecial() );
if($params['type'] == 'field') return $list->GetOrderField($user_sorting_start);
if($params['type'] == 'direction') return $list->GetOrderDirection($user_sorting_start);
}
/**
* Checks if sorting field/direction matches passed field/direction parameter
*
* @param Array $params
* @return bool
*/
function IsOrder($params)
{
$params['type'] = isset($params['field']) ? 'field' : 'direction';
$value = $this->OrderInfo($params);
if( isset($params['field']) ) return $params['field'] == $value;
if( isset($params['direction']) ) return $params['direction'] == $value;
}
/**
* Returns list perpage
*
* @param Array $params
* @return int
*/
function PerPage($params)
{
$object =& $this->getObject($params);
return $object->PerPage;
}
/**
* Checks if list perpage matches value specified
*
* @param Array $params
* @return bool
*/
function PerPageEquals($params)
{
$object =& $this->getObject($params);
return $object->PerPage == $params['value'];
}
function SaveEvent($params)
{
// SaveEvent is set during OnItemBuild, but we may need it before any other tag calls OnItemBuild
$object =& $this->getObject($params);
return $this->Application->GetVar($this->getPrefixSpecial().'_SaveEvent');
}
function NextId($params)
{
$object =& $this->getObject($params);
$wid = $this->Application->GetTopmostWid($this->Prefix);
$session_name = rtrim($this->getPrefixSpecial().'_selected_ids_'.$wid, '_');
$ids = explode(',', $this->Application->RecallVar($session_name));
$cur_id = $object->GetID();
$i = array_search($cur_id, $ids);
if ($i !== false) {
return $i < count($ids) - 1 ? $ids[$i + 1] : '';
}
return '';
}
function PrevId($params)
{
$object =& $this->getObject($params);
$wid = $this->Application->GetTopmostWid($this->Prefix);
$session_name = rtrim($this->getPrefixSpecial().'_selected_ids_'.$wid, '_');
$ids = explode(',', $this->Application->RecallVar($session_name));
$cur_id = $object->GetID();
$i = array_search($cur_id, $ids);
if ($i !== false) {
return $i > 0 ? $ids[$i - 1] : '';
}
return '';
}
function IsSingle($params)
{
return ($this->NextId($params) === '' && $this->PrevId($params) === '');
}
function IsLast($params)
{
return ($this->NextId($params) === '');
}
function IsFirst($params)
{
return ($this->PrevId($params) === '');
}
/**
* Checks if field value is equal to proposed one
*
* @param Array $params
* @return bool
*/
function FieldEquals($params)
{
$object =& $this->getObject($params);
$ret = $object->GetDBField($this->SelectParam($params, 'name,field')) == $params['value'];
// if( getArrayValue($params,'inverse') ) $ret = !$ret;
return $ret;
}
function ItemIcon($params)
{
$object =& $this->getObject($params);
$grids = $this->Application->getUnitOption($this->Prefix,'Grids');
$icons =& $grids[ $params['grid'] ]['Icons'];
$key = '';
$status_fields = $this->Application->getUnitOption($this->Prefix,'StatusField');
if(!$status_fields) return $icons['default'];
foreach($status_fields as $status_field)
{
$key .= $object->GetDBField($status_field).'_';
}
$key = rtrim($key,'_');
$value = ($key !== false) ? $key : 'default';
return isset($icons[$value]) ? $icons[$value] : $icons['default'];
}
/**
* Generates bluebar title + initializes prefixes used on page
*
* @param Array $params
* @return string
*/
function SectionTitle($params)
{
$preset_name = replaceModuleSection($params['title_preset']);
$title_presets = $this->Application->getUnitOption($this->Prefix,'TitlePresets');
$title_info = getArrayValue($title_presets, $preset_name);
if ($title_info === false) {
$title = str_replace('#preset_name#', $preset_name, $params['title']);
if ($this->Application->ConfigValue('UseSmallHeader') && isset($params['group_title']) && $params['group_title']) {
$title .= ' - '.$params['group_title'];
}
return $title;
}
if (getArrayValue($title_presets,'default')) {
// use default labels + custom labels specified in preset used
$title_info = array_merge_recursive2($title_presets['default'], $title_info);
}
$title = $title_info['format'];
// 1. get objects in use for title construction
$objects = Array();
$object_status = Array();
$status_labels = Array();
$prefixes = getArrayValue($title_info,'prefixes');
$all_tag_params = getArrayValue($title_info,'tag_params');
if ($prefixes) {
// extract tag_perams passed directly to SectionTitle tag for specific prefix
foreach ($params as $tp_name => $tp_value) {
if (preg_match('/(.*)\[(.*)\]/', $tp_name, $regs)) {
$all_tag_params[ $regs[1] ][ $regs[2] ] = $tp_value;
unset($params[$tp_name]);
}
}
$tag_params = Array();
foreach ($prefixes as $prefix_special) {
$prefix_data = $this->Application->processPrefix($prefix_special);
$prefix_data['prefix_special'] = rtrim($prefix_data['prefix_special'],'.');
if ($all_tag_params) {
$tag_params = getArrayValue($all_tag_params, $prefix_data['prefix_special']);
if (!$tag_params) $tag_params = Array();
}
$tag_params = array_merge_recursive2($params, $tag_params);
$objects[ $prefix_data['prefix_special'] ] =& $this->Application->recallObject($prefix_data['prefix_special'], $prefix_data['prefix'], $tag_params);
$object_status[ $prefix_data['prefix_special'] ] = $objects[ $prefix_data['prefix_special'] ]->IsNewItem() ? 'new' : 'edit';
// a. set object's status field (adding item/editing item) for each object in title
if (getArrayValue($title_info[ $object_status[ $prefix_data['prefix_special'] ].'_status_labels' ],$prefix_data['prefix_special'])) {
$status_labels[ $prefix_data['prefix_special'] ] = $title_info[ $object_status[ $prefix_data['prefix_special'] ].'_status_labels' ][ $prefix_data['prefix_special'] ];
$title = str_replace('#'.$prefix_data['prefix_special'].'_status#', $status_labels[ $prefix_data['prefix_special'] ], $title);
}
// b. setting object's titlefield value (in titlebar ONLY) to default in case if object beeing created with no titlefield filled in
if ($object_status[ $prefix_data['prefix_special'] ] == 'new') {
$new_value = $this->getInfo( $objects[ $prefix_data['prefix_special'] ], 'titlefield' );
if(!$new_value && getArrayValue($title_info['new_titlefield'],$prefix_data['prefix_special']) ) $new_value = $this->Application->Phrase($title_info['new_titlefield'][ $prefix_data['prefix_special'] ]);
$title = str_replace('#'.$prefix_data['prefix_special'].'_titlefield#', $new_value, $title);
}
}
}
// 2. replace phrases if any found in format string
$title = $this->Application->ReplaceLanguageTags($title,false);
// 3. find and replace any replacement vars
preg_match_all('/#(.*_.*)#/Uis',$title,$rets);
if ($rets[1]) {
$replacement_vars = array_keys( array_flip($rets[1]) );
foreach ($replacement_vars as $replacement_var) {
$var_info = explode('_',$replacement_var,2);
$object =& $objects[ $var_info[0] ];
$new_value = $this->getInfo($object,$var_info[1]);
$title = str_replace('#'.$replacement_var.'#', $new_value, $title);
}
}
// replace trailing spaces inside title preset + '' occurences into single space
$title = preg_replace('/[ ]*\'\'[ ]*/', ' ', $title);
if ($this->Application->ConfigValue('UseSmallHeader') && isset($params['group_title']) && $params['group_title']) {
$title .= ' - '.$params['group_title'];
}
$cut_first = getArrayValue($params, 'cut_first');
if ($cut_first && mb_strlen($title) > $cut_first) {
if (!preg_match('/<a href="(.*)">(.*)<\/a>/',$title)) {
$title = mb_substr($title, 0, $cut_first).' ...';
}
}
return $title;
}
function getInfo(&$object, $info_type)
{
switch ($info_type)
{
case 'titlefield':
$field = $this->Application->getUnitOption($object->Prefix,'TitleField');
return $field !== false ? $object->GetField($field) : 'TitleField Missing';
break;
case 'recordcount':
$of_phrase = $this->Application->Phrase('la_of');
return $object->NoFilterCount != $object->RecordsCount ? $object->RecordsCount.' '.$of_phrase.' '.$object->NoFilterCount : $object->RecordsCount;
break;
default:
return $object->GetField($info_type);
break;
}
}
function GridInfo($params)
{
$object =& $this->GetList($params);
/* @var $object kDBList */
switch ($params['type']) {
case 'filtered':
return $object->GetRecordsCount();
case 'total':
return $object->GetNoFilterCount();
case 'from':
return $object->RecordsCount ? $object->Offset+1 : 0; //0-based
case 'to':
return min($object->Offset + $object->PerPage, $object->RecordsCount);
case 'total_pages':
return $object->GetTotalPages();
case 'needs_pagination':
return ($object->RecordsCount > $object->PerPage) || ($object->Page > 1);
}
}
/**
* Parses block depending on its element type.
* For radio and select elements values are taken from 'value_list_field' in key1=value1,key2=value2
* format. key=value can be substituted by <SQL>SELECT f1 AS OptionName, f2 AS OptionValue... FROM <PREFIX>TableName </SQL>
* where prefix is TABLE_PREFIX
*
* @param Array $params
* @return string
*/
function ConfigFormElement($params)
{
$object =& $this->getObject($params);
$field = $params['field'];
$helper =& $this->Application->recallObject('InpCustomFieldsHelper');
$element_type = $object->GetDBField($params['element_type_field']);
if($element_type == 'label') $element_type = 'text';
$params['name'] = $params['blocks_prefix'].$element_type;
switch ($element_type) {
case 'select':
case 'multiselect':
case 'radio':
$field_options = $object->GetFieldOptions($field, 'options');
if ($object->GetDBField('DirectOptions')) {
// used for custom fields
$field_options['options'] = $object->GetDBField('DirectOptions');
}
else {
// used for configuration
$field_options['options'] = $helper->GetValuesHash( $object->GetDBField($params['value_list_field']) );
}
$object->SetFieldOptions($field, $field_options);
break;
case 'text':
case 'textarea':
$params['field_params'] = $helper->ParseConfigSQL($object->GetDBField($params['value_list_field']));
break;
case 'password':
case 'checkbox':
default:
break;
}
return $this->Application->ParseBlock($params, 1);
}
/**
* Get's requested custom field value
*
* @param Array $params
* @return string
* @access public
*/
function CustomField($params)
{
$params['name'] = 'cust_'.$this->SelectParam($params, 'name,field');
return $this->Field($params);
}
function CustomFieldLabel($params)
{
$object =& $this->getObject($params);
$field = $this->SelectParam($params, 'name,field');
$sql = 'SELECT FieldLabel
FROM '.$this->Application->getUnitOption('cf', 'TableName').'
WHERE FieldName = '.$this->Conn->qstr($field);
return $this->Application->Phrase($this->Conn->GetOne($sql));
}
/**
* transposes 1-dimensional array elements for vertical alignment according to given columns and per_page parameters
*
* @param array $arr
* @param int $columns
* @param int $per_page
* @return array
*/
function LinearToVertical(&$arr, $columns, $per_page)
{
$rows = $columns;
// in case if after applying per_page limit record count less then
// can fill requrested column count, then fill as much as we can
$cols = min(ceil($per_page / $columns), ceil(count($arr) / $columns));
$imatrix = array();
for ($row = 0; $row < $rows; $row++) {
for ($col = 0; $col < $cols; $col++) {
$source_index = $row * $cols + $col;
if (!isset($arr[$source_index])) {
// in case if source array element count is less then element count in one row
continue;
}
$imatrix[$col * $rows + $row] = $arr[$source_index];
}
}
ksort($imatrix);
return array_values($imatrix);
}
/**
* If data was modfied & is in TempTables mode, then parse block with name passed;
* remove modification mark if not in TempTables mode
*
* @param Array $params
* @return string
* @access public
* @author Alexey
*/
function SaveWarning($params)
{
$main_prefix = getArrayValue($params, 'main_prefix');
if ($main_prefix && $main_prefix != '$main_prefix') {
$top_prefix = $main_prefix;
}
else {
$top_prefix = $this->Application->GetTopmostPrefix($this->Prefix);
}
$temp_tables = substr($this->Application->GetVar($top_prefix.'_mode'), 0, 1) == 't';
$modified = $this->Application->RecallVar($top_prefix.'_modified');
if ($temp_tables && $modified) {
$block_params = $this->prepareTagParams($params);
$block_params['name'] = $this->SelectParam($params, 'render_as,name');
$block_params['edit_mode'] = $temp_tables ? 1 : 0;
return $this->Application->ParseBlock($block_params);
}
$this->Application->RemoveVar($top_prefix.'_modified');
return '';
}
/**
* Returns list record count queries (on all pages)
*
* @param Array $params
* @return int
*/
function TotalRecords($params)
{
$list =& $this->GetList($params);
if (!$list->Counted) $list->CountRecs();
return $list->RecordsCount;
}
/**
* Range filter field name
*
* @param Array $params
* @return string
*/
function SearchInputName($params)
{
$field = $this->SelectParam($params, 'field,name');
$ret = 'custom_filters['.$this->getPrefixSpecial().']['.$params['grid'].']['.$field.']['.$params['filter_type'].']';
if (isset($params['type'])) {
$ret .= '['.$params['type'].']';
}
return $ret;
}
/**
* Return range filter field value
*
* @param Array $params
* @return string
*/
function SearchField($params) // RangeValue
{
$field = $this->SelectParam($params, 'field,name');
$view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
$custom_filter = $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_custom_filter.'.$view_name, ALLOW_DEFAULT_SETTINGS);
$custom_filter = $custom_filter ? unserialize($custom_filter) : Array();
if (isset($custom_filter[ $params['grid'] ][$field])) {
$ret = $custom_filter[ $params['grid'] ][$field][ $params['filter_type'] ]['submit_value'];
if (isset($params['type'])) {
$ret = $ret[ $params['type'] ];
}
if( !$this->HasParam($params, 'no_special') ) $ret = htmlspecialchars($ret);
return $ret;
}
return '';
}
function SearchFormat($params)
{
$field = $params['field'];
$object =& $this->GetList($params);
$options = $object->GetFieldOptions($field);
$format = $options[ $this->SelectParam($params, 'input_format') ? 'input_format' : 'format' ];
$formatter_class = getArrayValue($options,'formatter');
if($formatter_class)
{
$formatter =& $this->Application->recallObject($formatter_class);
$human_format = getArrayValue($params,'human');
$edit_size = getArrayValue($params,'edit_size');
$sample = getArrayValue($params,'sample');
if($sample)
{
return $formatter->GetSample($field, $options, $object);
}
elseif($human_format || $edit_size)
{
$format = $formatter->HumanFormat($format);
return $edit_size ? strlen($format) : $format;
}
}
return $format;
}
/**
* Returns error of range field
*
* @param unknown_type $params
* @return unknown
*/
function SearchError($params)
{
$field = $this->SelectParam($params, 'field,name');
$error_var_name = $this->getPrefixSpecial().'_'.$field.'_error';
$pseudo = $this->Application->RecallVar($error_var_name);
if ($pseudo) {
$this->Application->RemoveVar($error_var_name);
}
$object =& $this->Application->recallObject($this->Prefix.'.'.$this->Special.'-item', null, Array('skip_autoload' => true));
/* @var $object kDBItem */
$object->SetError($field, $pseudo);
return $object->GetErrorMsg($field, false);
}
/**
* Returns templates path for module, which is gathered from prefix module
*
* @param Array $params
* @return string
* @author Alex
*/
function ModulePath($params)
{
$force_module = getArrayValue($params, 'module');
if ($force_module) {
if ($force_module == '#session#') {
$force_module = preg_replace('/([^:]*):.*/', '\1', $this->Application->RecallVar('module'));
if (!$force_module) $force_module = 'core';
}
else {
$force_module = mb_strtolower($force_module);
}
if ($force_module == 'core') {
$module_folder = 'core';
}
else {
$module_folder = trim( $this->Application->findModule('Name', $force_module, 'Path'), '/');
}
}
else {
$module_folder = $this->Application->getUnitOption($this->Prefix, 'ModuleFolder');
}
return '../../'.$module_folder.'/admin_templates/';
}
/**
* Returns object used in tag processor
*
* @access public
* @return kDBBase
*/
function &getObject($params = Array())
{
$object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params);
if (isset($params['requery']) && $params['requery']) {
$this->Application->HandleEvent($q_event, $this->getPrefixSpecial().':LoadItem');
}
return $object;
}
/**
* Checks if object propery value matches value passed
*
* @param Array $params
* @return bool
*/
function PropertyEquals($params)
{
$object =& $this->getObject($params);
$property_name = $this->SelectParam($params, 'name,var,property');
return $object->$property_name == $params['value'];
}
/**
* Group list records by header, saves internal order in group
*
* @param Array $records
* @param string $heading_field
*/
function groupRecords(&$records, $heading_field)
{
$sorted = Array();
$i = 0; $record_count = count($records);
while ($i < $record_count) {
$sorted[ $records[$i][$heading_field] ][] = $records[$i];
$i++;
}
$records = Array();
foreach ($sorted as $heading => $heading_records) {
$records = array_merge_recursive($records, $heading_records);
}
}
function DisplayOriginal($params)
{
return false;
}
function MultipleEditing($params)
{
$wid = $this->Application->GetTopmostWid($this->Prefix);
$session_name = rtrim($this->getPrefixSpecial().'_selected_ids_'.$wid, '_');
$selected_ids = explode(',', $this->Application->RecallVar($session_name));
$ret = '';
if ($selected_ids) {
$selected_ids = explode(',', $selected_ids);
$object =& $this->getObject( array_merge_recursive2($params, Array('skip_autoload' => true)) );
$params['name'] = $params['render_as'];
foreach ($selected_ids as $id) {
$object->Load($id);
$ret .= $this->Application->ParseBlock($params);
}
}
return $ret;
}
function ExportStatus($params)
{
$export_object =& $this->Application->recallObject('CatItemExportHelper');
$event = new kEvent($this->getPrefixSpecial().':OnDummy');
$action_method = 'perform'.ucfirst($this->Special);
$field_values = $export_object->$action_method($event);
// finish code is done from JS now
if ($field_values['start_from'] >= $field_values['total_records'])
{
if ($this->Special == 'import') {
$this->Application->StoreVar('PermCache_UpdateRequired', 1);
$this->Application->Redirect('in-portal/categories/cache_updater', Array('m_opener' => 'r', 'pass' => 'm', 'continue' => 1, 'no_amp' => 1));
}
elseif ($this->Special == 'export') {
$finish_t = $this->Application->RecallVar('export_finish_t');
$this->Application->Redirect($finish_t, Array('pass' => 'all'));
$this->Application->RemoveVar('export_finish_t');
}
}
$export_options = $export_object->loadOptions($event);
return $export_options['start_from'] * 100 / $export_options['total_records'];
}
/**
* Returns path where exported category items should be saved
*
* @param Array $params
*/
function ExportPath($params)
{
$ret = EXPORT_PATH.'/';
if( getArrayValue($params, 'as_url') )
{
$ret = str_replace( FULL_PATH.'/', $this->Application->BaseURL(), $ret);
}
$export_options = unserialize($this->Application->RecallVar($this->getPrefixSpecial().'_options'));
$ret .= $export_options['ExportFilename'].'.'.($export_options['ExportFormat'] == 1 ? 'csv' : 'xml');
return $ret;
}
function FieldTotal($params)
{
$list =& $this->GetList($params);
return $list->GetFormattedTotal($this->SelectParam($params, 'field,name'), $params['function']);
}
- function FCKEditor($params) {
+ function FCKEditor($params)
+ {
+ if (file_exists(FULL_PATH.'/core/cmseditor/fckeditor.php')) {
+ $editor_path = 'core/cmseditor/';
+ }
+ else {
+ $editor_path = 'admin/editor/cmseditor/';
+ }
+
$params['no_special'] = 1;
$value = $this->Field($params);
$name = $this->InputName($params);
$theme_path = $this->Application->BaseURL().mb_substr($this->Application->GetFrontThemePath(), 1);
$bgcolor = isset($params['bgcolor']) ? $params['bgcolor'] : $this->Application->GetVar('bgcolor');
if (!$bgcolor) $bgcolor = '#ffffff';
- include_once(FULL_PATH.'/core/cmseditor/fckeditor.php');
+ include_once(FULL_PATH.'/'.$editor_path.'/fckeditor.php');
$oFCKeditor = new FCKeditor($name);
- $oFCKeditor->BasePath = BASE_PATH.'/core/cmseditor/';
+ $oFCKeditor->BasePath = BASE_PATH.'/'.$editor_path;
$oFCKeditor->Width = $params['width'] ;
$oFCKeditor->Height = $params['height'] ;
$oFCKeditor->ToolbarSet = 'Advanced' ;
$oFCKeditor->Value = $value ;
+
+ if ($this->Application->isModuleEnabled('In-Portal')) {
+ $config_path = $this->Application->BaseURL().'kernel/admin_templates/incs/inp_fckconfig.js';
+ }
+ else {
+ $config_path = $this->Application->BaseURL().'core/admin_templates/js/inp_fckconfig.js';
+ }
+
$oFCKeditor->Config = Array(
- //'UserFilesPath' => $pathtoroot.'kernel/user_files',
+// 'UserFilesPath' => (defined('WRITEABLE') ? WRITEABLE : FULL_PATH.'/kernel') . '/user_files/',
'ProjectPath' => BASE_PATH.'/',
- 'CustomConfigurationsPath' => $this->Application->BaseURL().'core/admin_templates/js/inp_fckconfig.js',
+ 'CustomConfigurationsPath' => $config_path,
'StylesXmlPath' => $theme_path.'/inc/styles.xml',
'EditorAreaCSS' => $theme_path.'/inc/style.css',
'DefaultClass' => 'Default Text',
// 'Debug' => 1,
'Admin' => 1,
'K4' => 1,
'newBgColor' => $bgcolor,
);
return $oFCKeditor->CreateHtml();
}
function IsNewItem($params)
{
$object =& $this->getObject($params);
return $object->IsNewItem();
}
/**
* Creates link to an item including only it's id
*
* @param Array $params
* @return string
*/
function ItemLink($params)
{
$object =& $this->getObject($params);
if (!isset($params['pass'])) {
$params['pass'] = 'm';
}
$params[$object->getPrefixSpecial().'_id'] = $object->GetID();
$m =& $this->Application->recallObject('m_TagProcessor');
return $m->t($params);
}
/**
* Calls OnNew event from template, when no other event submitted
*
* @param Array $params
*/
function PresetFormFields($params)
{
$prefix = $this->getPrefixSpecial();
if (!$this->Application->GetVar($prefix.'_event')) {
$this->Application->HandleEvent(new kEvent($prefix.':OnNew'));
}
}
function PrintSerializedFields($params)
{
$object =& $this->getObject();
$field = $this->SelectParam($params, 'field');
$data = unserialize($object->GetDBField($field));
$o = '';
$std_params['name'] = $params['render_as'];
$std_params['field'] = $params['field'];
$std_params['pass_params'] = true;
foreach ($data as $key => $row) {
$block_params = array_merge($std_params, $row, array('key'=>$key));
$o .= $this->Application->ParseBlock($block_params);
}
return $o;
}
/**
* Checks if current prefix is main item
*
* @param Array $params
* @return bool
*/
function IsTopmostPrefix($params)
{
return $this->Prefix == $this->Application->GetTopmostPrefix($this->Prefix);
}
function PermSection($params)
{
$section = $this->SelectParam($params, 'section,name');
$perm_sections = $this->Application->getUnitOption($this->Prefix, 'PermSection');
return isset($perm_sections[$section]) ? $perm_sections[$section] : '';
}
function PerPageSelected($params)
{
$list =& $this->GetList($params);
return $list->PerPage == $params['per_page'] ? $params['selected'] : '';
}
/**
* Returns prefix + generated sepcial + any word
*
* @param Array $params
* @return string
*/
function VarName($params)
{
$list =& $this->GetList($params);
return $list->getPrefixSpecial().'_'.$params['type'];
}
/**
* Returns edit tabs by specified preset name or false in case of error
*
* @param string $preset_name
* @return mixed
*/
function getEditTabs($preset_name)
{
$presets = $this->Application->getUnitOption($this->Prefix, 'EditTabPresets');
if (!$presets || !isset($presets[$preset_name]) || count($presets[$preset_name]) == 0) {
return false;
}
return $presets[$preset_name];
}
/**
* Detects if specified preset has tabs in it
*
* @param Array $params
* @return bool
*/
function HasEditTabs($params)
{
return $this->getEditTabs($params['preset_name']) ? true : false;
}
/**
* Sorts edit tabs based on their priority
*
* @param Array $tab_a
* @param Array $tab_b
* @return int
*/
function sortEditTabs($tab_a, $tab_b)
{
if ($tab_a['priority'] == $tab_b['priority']) {
return 0;
}
return $tab_a['priority'] < $tab_b['priority'] ? -1 : 1;
}
/**
* Prints edit tabs based on preset name specified
*
* @param Array $params
* @return string
*/
function PrintEditTabs($params)
{
$edit_tabs = $this->getEditTabs($params['preset_name']);
if (!$edit_tabs) {
return ;
}
usort($edit_tabs, Array (&$this, 'sortEditTabs'));
$ret = '';
$block_params = $this->prepareTagParams($params);
$block_params['name'] = $params['render_as'];
foreach ($edit_tabs as $tab_info) {
$block_params['title'] = $tab_info['title'];
$block_params['template'] = $tab_info['t'];
$ret .= $this->Application->ParseBlock($block_params);
}
return $ret;
}
/**
* Performs image resize to required dimensions and returns resulting url (cached resized image)
*
* @param Array $params
* @return string
*/
function ImageSrc($params)
{
$max_width = isset($params['MaxWidth']) ? $params['MaxWidth'] : false;
$max_height = isset($params['MaxHeight']) ? $params['MaxHeight'] : false;
$logo_filename = isset($params['LogoFilename']) ? $params['LogoFilename'] : false;
$logo_h_margin = isset($params['LogoHMargin']) ? $params['LogoHMargin'] : false;
$logo_v_margin = isset($params['LogoVMargin']) ? $params['LogoVMargin'] : false;
$object =& $this->getObject($params);
$field = $this->SelectParam($params, 'name,field');
return $object->GetField($field, 'resize:'.$max_width.'x'.$max_height.';wm:'.$logo_filename.'|'.$logo_h_margin.'|'.$logo_v_margin);
}
function UnitOption($params)
{
return $this->Application->getUnitOption($this->Prefix, $params['name']);
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/kernel/db/db_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.97.2.27
\ No newline at end of property
+1.97.2.28
\ No newline at end of property
Index: branches/RC/core/kernel/startup.php
===================================================================
--- branches/RC/core/kernel/startup.php (revision 10831)
+++ branches/RC/core/kernel/startup.php (revision 10832)
@@ -1,149 +1,151 @@
<?php
- define('KERNEL_PATH', FULL_PATH.'/core/kernel');
- if (file_exists(FULL_PATH.'/kernel/kernel4/application.php')) {
- die('Please remove '.FULL_PATH.'/kernel/kernel4 directiry - it has been moved to '.KERNEL_PATH.'<br/>Don\'t forget to clean Cache table afterwards');
+ define('KERNEL_PATH', FULL_PATH . '/core/kernel');
+ if (file_exists(FULL_PATH . '/kernel/kernel4/application.php')) {
+ die('Please remove ' . FULL_PATH . '/kernel/kernel4 directiry - it has been moved to ' . KERNEL_PATH . '<br/>Don\'t forget to clean Cache table afterwards');
}
if (!function_exists('getmicrotime')) {
function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
}
$globals_start = getmicrotime();
- include_once(KERNEL_PATH.'/globals.php'); // non OOP functions used through kernel, e.g. print_pre
- include_once(KERNEL_PATH.'/utility/multibyte.php'); // emulating multi-byte php extension
+ include_once(KERNEL_PATH . '/globals.php'); // non OOP functions used through kernel, e.g. print_pre
+ include_once(KERNEL_PATH . '/utility/multibyte.php'); // emulating multi-byte php extension
$globals_end = getmicrotime();
define('INPORTAL_ENV', 1);
- $vars = parse_portal_ini(FULL_PATH.'/config.php');
+ $vars = parse_portal_ini(FULL_PATH . '/config.php');
$admin_directory = isset($vars['AdminDirectory']) ? $vars['AdminDirectory'] : '/admin';
safeDefine('ADMIN_DIRECTORY', $admin_directory);
# New path detection method: begin
if (defined('REL_PATH')) {
// location of index.php relatively to site base folder
- $relative_path = preg_replace('/^[\/]{0,1}admin(.*)/', $admin_directory.'\\1', REL_PATH);
+ $relative_path = preg_replace('/^[\/]{0,1}admin(.*)/', $admin_directory . '\\1', REL_PATH);
}
else {
// default index.php relative location is administrative console folder
define('REL_PATH', $admin_directory);
$relative_path = REL_PATH;
}
- $ps = rtrim(preg_replace('/'.preg_quote(rtrim($relative_path, '/'), '/').'$/', '', str_replace('\\', '/', dirname($_SERVER['PHP_SELF']))), '/');
+ $ps = rtrim(preg_replace('/' . preg_quote(rtrim($relative_path, '/'), '/') . '$/', '', str_replace('\\', '/', dirname($_SERVER['PHP_SELF']))), '/');
safeDefine('BASE_PATH', $ps); // in case in-portal has defined it before
# New path detection method: end
safeDefine('INPORTAL_TAGS', true);
safeDefine('SERVER_NAME', $_SERVER['HTTP_HOST']);
$https_mark = getArrayValue($_SERVER, 'HTTPS');
safeDefine('PROTOCOL', ($https_mark == 'on') || ($https_mark == '1') ? 'https://' : 'http://');
safeDefine('APPLICATION_CLASS', isset($vars['ApplicationClass']) ? $vars['ApplicationClass'] : 'kApplication');
safeDefine('APPLICATION_PATH', isset($vars['ApplicationPath']) ? $vars['ApplicationPath'] : '/core/kernel/application.php');
if (isset($vars['WriteablePath'])) {
- define('WRITEABLE', FULL_PATH.$vars['WriteablePath']);
+ define('WRITEABLE', FULL_PATH . $vars['WriteablePath']);
define('WRITEBALE_BASE', $vars['WriteablePath']);
}
if ($vars === false || count($vars) == 0) {
global $rootURL;
echo 'In-Portal is probably not installed, or configuration file is missing.<br>';
echo 'Please use the installation script to fix the problem.<br><br>';
- $install_script = file_exists(FULL_PATH.'/proj-base/install.php') ? 'core' : 'admin';
- echo '<a href="'.PROTOCOL.SERVER_NAME.rtrim(BASE_PATH, '/').'/'.$install_script.'/install.php">Go to installation script</a><br><br>';
+ $install_script = file_exists(FULL_PATH . '/proj-base/install.php') ? 'core' : 'admin';
+ echo '<a href="' . PROTOCOL . SERVER_NAME . rtrim(BASE_PATH, '/') . '/' . $install_script . '/install.php">Go to installation script</a><br><br>';
flush();
exit;
}
define('SQL_TYPE', $vars['DBType']);
define('SQL_SERVER', $vars['DBHost']);
define('SQL_USER', $vars['DBUser']);
define('SQL_PASS', $vars['DBUserPassword']);
define('SQL_DB', $vars['DBName']);
if (isset($vars['DBCollation']) && isset($vars['DBCharset'])) {
define('SQL_COLLATION', $vars['DBCollation']);
define('SQL_CHARSET', $vars['DBCharset']);
}
define('TABLE_PREFIX', $vars['TablePrefix']);
-
define('DOMAIN', getArrayValue($vars, 'Domain'));
ini_set('memory_limit', '50M');
define('MODULES_PATH', FULL_PATH);
- define('EXPORT_PATH', defined('WRITEABLE') ? WRITEABLE.'/export' : FULL_PATH.ADMIN_DIRECTORY.'/export');
- define('GW_CLASS_PATH', MODULES_PATH.'/in-commerce/units/gateways/gw_classes'); // Payment Gateway Classes Path
- define('SYNC_CLASS_PATH', FULL_PATH.'/sync'); // path for 3rd party user syncronization scripts
+
+ define('EXPORT_BASE_PATH', (defined('WRITEBALE_BASE') ? WRITEBALE_BASE : ADMIN_DIRECTORY) . '/export');
+ define('EXPORT_PATH', FULL_PATH . EXPORT_BASE_PATH);
+
+ define('GW_CLASS_PATH', MODULES_PATH . '/in-commerce/units/gateways/gw_classes'); // Payment Gateway Classes Path
+ define('SYNC_CLASS_PATH', FULL_PATH . '/sync'); // path for 3rd party user syncronization scripts
safeDefine('ENV_VAR_NAME','env');
- safeDefine('IMAGES_PATH', '/kernel/images/');
- safeDefine('IMAGES_PENDING_PATH', IMAGES_PATH.'pending/');
+ safeDefine('IMAGES_PATH', (defined('WRITEBALE_BASE') ? WRITEBALE_BASE : '/kernel') . '/images/');
+ safeDefine('IMAGES_PENDING_PATH', IMAGES_PATH . 'pending/');
safeDefine('CUSTOM_UPLOAD_PATH', '/templates/images/custom/');
safeDefine('MAX_UPLOAD_SIZE', min(ini_get('upload_max_filesize'), ini_get('post_max_size'))*1024*1024);
if( ini_get('safe_mode') ) define('SAFE_MODE', 1);
safeDefine('EXPERIMENTAL_PRE_PARSE', 1);
safeDefine('SILENT_LOG', 0);
- if( file_exists(FULL_PATH.'/debug.php') )
+ if( file_exists(FULL_PATH . '/debug.php') )
{
- include_once(FULL_PATH.'/debug.php');
+ include_once(FULL_PATH . '/debug.php');
if(isset($dbg_options['DEBUG_MODE']) && $dbg_options['DEBUG_MODE']) {
$debugger_start = getmicrotime();
- include_once(KERNEL_PATH.'/utility/debugger.php');
+ include_once(KERNEL_PATH . '/utility/debugger.php');
$debugger_end = getmicrotime();
if (isset($debugger) && constOn('DBG_PROFILE_INCLUDES')) {
- $debugger->profileStart('inc_globals', KERNEL_PATH.'/globals.php', $globals_start);
- $debugger->profileFinish('inc_globals', KERNEL_PATH.'/globals.php', $globals_end);
+ $debugger->profileStart('inc_globals', KERNEL_PATH . '/globals.php', $globals_start);
+ $debugger->profileFinish('inc_globals', KERNEL_PATH . '/globals.php', $globals_end);
$debugger->profilerAddTotal('includes', 'inc_globals');
- $debugger->profileStart('inc_debugger', KERNEL_PATH.'/utility/debugger.php', $debugger_start);
- $debugger->profileFinish('inc_debugger', KERNEL_PATH.'/utility/debugger.php', $debugger_end);
+ $debugger->profileStart('inc_debugger', KERNEL_PATH . '/utility/debugger.php', $debugger_start);
+ $debugger->profileFinish('inc_debugger', KERNEL_PATH . '/utility/debugger.php', $debugger_end);
$debugger->profilerAddTotal('includes', 'inc_debugger');
}
}
}
$includes = Array(
- KERNEL_PATH.'/application.php',
- FULL_PATH.APPLICATION_PATH,
- KERNEL_PATH.'/db/db_connection.php',
- KERNEL_PATH."/kbase.php",
- KERNEL_PATH.'/utility/event.php',
- KERNEL_PATH."/utility/factory.php",
- KERNEL_PATH."/languages/phrases_cache.php",
- KERNEL_PATH."/db/dblist.php",
- KERNEL_PATH."/db/dbitem.php",
- KERNEL_PATH."/event_handler.php",
- KERNEL_PATH.'/db/db_event_handler.php',
+ KERNEL_PATH . '/application.php',
+ FULL_PATH . APPLICATION_PATH,
+ KERNEL_PATH . '/db/db_connection.php',
+ KERNEL_PATH . "/kbase.php",
+ KERNEL_PATH . '/utility/event.php',
+ KERNEL_PATH . "/utility/factory.php",
+ KERNEL_PATH . "/languages/phrases_cache.php",
+ KERNEL_PATH . "/db/dblist.php",
+ KERNEL_PATH . "/db/dbitem.php",
+ KERNEL_PATH . "/event_handler.php",
+ KERNEL_PATH . '/db/db_event_handler.php',
);
foreach ($includes as $a_file) {
k4_include_once($a_file);
}
if (defined('DEBUG_MODE') && DEBUG_MODE && isset($debugger)) {
$debugger->AttachToApplication();
}
- if( !function_exists('adodb_mktime') ) include_once(KERNEL_PATH.'/utility/adodb-time.inc.php');
+ if( !function_exists('adodb_mktime') ) include_once(KERNEL_PATH . '/utility/adodb-time.inc.php');
-// include_once(KERNEL_PATH."/utility/temp_handler.php"); // needed because of static calls from kBase
+// include_once(KERNEL_PATH . '/utility/temp_handler.php'); // needed because of static calls from kBase
// up to here
// global constants
define ('KG_TO_POUND', 2.20462262);
define ('POUND_TO_KG', 0.45359237);
?>
\ No newline at end of file
Property changes on: branches/RC/core/kernel/startup.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.55.2.3
\ No newline at end of property
+1.55.2.4
\ No newline at end of property
Index: branches/RC/core/units/themes/themes_tag_processor.php
===================================================================
--- branches/RC/core/units/themes/themes_tag_processor.php (revision 10831)
+++ branches/RC/core/units/themes/themes_tag_processor.php (revision 10832)
@@ -1,61 +1,61 @@
<?php
class ThemesTagProcessor extends kDBTagProcessor
{
function StylesheetFile($params)
{
- $object =& $this->Application->recallObject( $this->getPrefixSpecial(), $this->Prefix, $params );
+ $object =& $this->getObject($params);
if (!$object->GetDBField('StyleName')) {
// no stylesheet is associated with current theme
return '';
}
- $css_url = $this->Application->BaseURL('/kernel/stylesheets');
+ $css_url = $this->Application->BaseURL((defined('WRITEBALE_BASE') ? WRITEBALE_BASE : '/kernel') . '/stylesheets');
$css_path = rtrim( str_replace( $this->Application->BaseURL(), FULL_PATH.'/', $css_url), '/' );
$last_compiled = $object->GetDBField('LastCompiled');
$style_name = mb_strtolower( $object->GetDBField('StyleName') );
if( file_exists($css_path.'/'.$style_name.'-'.$last_compiled.'.css') )
{
$ret = rtrim($css_url, '/').'/'.$style_name.'-'.$last_compiled.'.css';
}
else
{
// search for previously compiled stylesheet
$last_compiled = 0;
if( $dh = opendir($css_path) )
{
while( ($file = readdir($dh)) !== false )
{
if( preg_match('/(.*)-([\d]+).css/', $file, $rets) )
{
if( $rets[1] == $style_name && $rets[2] > $last_compiled ) $last_compiled = $rets[2];
}
}
closedir($dh);
}
if ($last_compiled) {
// found
$ret = $css_url.'/'.$style_name.'-'.$last_compiled.'.css';
}
else {
// not found
return '';
}
}
if (isset($params['file_only'])) return $ret;
return '<link rel="stylesheet" rev="stylesheet" href="'.$ret.'" type="text/css" media="screen" />';
}
function SelectedTheme($params)
{
$object =& $this->getObject($params);
return $object->GetDBField('ThemeId') == $this->Application->GetVar('m_theme');
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/themes/themes_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.7.2.2
\ No newline at end of property
+1.7.2.3
\ No newline at end of property
Index: branches/RC/core/units/skins/skins_config.php
===================================================================
--- branches/RC/core/units/skins/skins_config.php (revision 10831)
+++ branches/RC/core/units/skins/skins_config.php (revision 10832)
@@ -1,166 +1,166 @@
<?php
$config = Array(
'Prefix' => 'skin',
'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class'=>'SkinEventHandler','file'=>'skin_eh.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'kDBTagProcessor','file'=>'','build_event'=>'OnBuild'),
'AutoLoad' => true,
'Hooks' => Array(
Array(
'Mode' => hAFTER,
'Conditional' => false,
'HookToPrefix' => 'skin',
'HookToSpecial' => '',
'HookToEvent' => Array('OnSave'),
'DoPrefix' => '',
'DoSpecial' => '',
'DoEvent' => 'OnCompileStylesheet',
),
),
'QueryString' => Array(
1 => 'id',
2 => 'Page',
3 => 'event',
4 => 'mode',
),
'IDField' => 'SkinId',
'StatusField' => Array('IsPrimary'),
'TableName' => TABLE_PREFIX.'Skins',
/*
'ForeignKey' => 'ParentId', // field title in TableName, linking record to a parent
'ParentTableKey' => 'ParentId', // id (or other key) field title in parent's table
'ParentPrefix' => 'parent',
'AutoDelete' => true, // delete these items when parent is being deleted
'AutoClone' => true, // clone these items when parent is being cloned
*/
'TitlePresets' => Array(
'default' => Array(
'new_status_labels' => Array('skin'=>'!la_title_AddingSkin!'),
'edit_status_labels' => Array('skin'=>'!la_title_EditingSkin!'),
'new_titlefield' => Array('skin'=>''),
),
'skin_list'=>Array(
'prefixes' => Array('skin_List'),
'format' => '!la_title_Skins! (#skin_recordcount#)',
),
'skin_edit'=>Array(
'prefixes' => Array('skin'),
'format' => '#skin_status# #skin_titlefield#',
),
),
'PermSection' => Array('main' => 'in-portal:skins'),
// don't forget to add corresponding permissions to install script
// INSERT INTO Permissions VALUES (0, 'custom:custom.view', 11, 1, 1, 0);
// INSERT INTO Permissions VALUES (0, 'in-portal:skins.view', 11, 1, 1, 0), (0, 'in-portal:skins.add', 11, 1, 1, 0), (0, 'in-portal:skins.edit', 11, 1, 1, 0), (0, 'in-portal:skins.delete', 11, 1, 1, 0);
'Sections' => Array(
'in-portal:skins' => Array(
'parent' => 'in-portal:tools',
'icon' => 'conf_general',
'label' => 'la_tab_Skins',
'url' => Array('t' => 'skins/skin_list', 'pass' => 'm'),
'permissions' => Array('view', 'add', 'edit', 'delete'),
'priority' => 11,
'show_mode' => smSUPER_ADMIN,
'type' => stTREE,
),
),
'TitleField' => 'Name', // field, used in bluebar when editing existing item
// Use %1$s for local table name with prefix, %2$s for calculated fields
'ListSQLs' => Array( // key - special, value - list select sql
'' => 'SELECT %1$s.* %2$s
FROM %1$s',
),
'ItemSQLs' => Array(
'' => 'SELECT %1$s.* %2$s
FROM %1$s',
),
'ListSortings' => Array(
'' => Array(
// 'ForcedSorting' => Array('Priority' => 'desc'),
'Sorting' => Array('Name' => 'asc'),
)
),
'Fields' => Array (
'SkinId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'Name' => Array ('type' => 'string', 'max_len' => 255, 'default' => NULL),
'CSS' => Array ('type' => 'string', 'default' => NULL),
'Logo' => Array(
'type'=>'string', 'formatter'=>'kUploadFormatter',
'max_size'=>MAX_UPLOAD_SIZE, // in Bytes !
'file_types'=>'*.jpg;*.gif;*.png', 'files_description'=>'!la_ImageFiles!',
- 'upload_dir'=>'/system/user_files/', // relative to project's home
+ 'upload_dir' => WRITEBALE_BASE . '/user_files/', // relative to project's home
'as_image'=>true, 'thumb_width'=>100, 'thumb_height'=>100,
'multiple'=>false, // false or max number of files - will be stored as serialized array of paths
'direct_links'=>false, // use direct file urls or send files through wrapper (requires mod_mime_magic)
'default' => null,
),
'Options' => Array(
'type' => 'string', 'default' => NULL,
'formatter' => 'kSerializedFormatter',
'default'=>serialize(
array(
'HeadBgColor' => array('Description'=>'Head frame background color', 'Value'=>'#1961B8'),
'HeadColor' => array('Description'=>'Head frame text color', 'Value'=>'#000000'),
'SectionBgColor' => array('Description'=>'Section bar background color', 'Value'=>'#2D79D6'),
'SectionColor' => array('Description'=>'Section bar text color', 'Value'=>'#000000'),
)
),
),
'LastCompiled' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
'IsPrimary' => Array(
'type' => 'int', 'formatter' => 'kOptionsFormatter',
'options' => Array(1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
'not_null' => 1, 'default' => 0
),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array('default'=>'icon16_test.gif'),
'Fields' => Array(
'SkinId' => Array( 'title'=>'la_col_Id', 'data_block' => 'grid_checkbox_td', 'width'=>50, 'filter_block' => 'grid_range_filter' ),
'Name' => Array( 'title'=>'la_col_SkinName', 'width'=>200, 'filter_block' => 'grid_like_filter'),
'IsPrimary' => Array( 'title'=>'la_col_IsPrimary', 'width'=>150, 'filter_block' => 'grid_options_filter'),
),
),
),
/*'ConfigMapping' => Array(
'PerPage' => 'Comm_Perpage_Tests',
'ShortListPerPage' => 'Comm_Perpage_Tests_Short',
),*/
);
/*
Don't forget to:
- Add table create statement to install_schema.sql
CREATE TABLE Tests (
`TestId` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Title` VARCHAR( 255 ) NOT NULL ,
`Description` TEXT NULL ,
`Email` VARCHAR( 255 ) NOT NULL ,
`Type` TINYINT NOT NULL ,
`Phone` VARCHAR( 50 ) NOT NULL ,
`Qty` DOUBLE NOT NULL ,
`Status` TINYINT NOT NULL ,
`CreatedOn` INT NOT NULL ,
`Good` TINYINT NOT NULL
)
- Add permissions for admin gorup to install script (see 'Sections' key above)
*/
\ No newline at end of file
Property changes on: branches/RC/core/units/skins/skins_config.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.2.4.1
\ No newline at end of property
+1.2.4.2
\ No newline at end of property
Index: branches/RC/core/units/custom_data/custom_data_event_handler.php
===================================================================
--- branches/RC/core/units/custom_data/custom_data_event_handler.php (revision 10831)
+++ branches/RC/core/units/custom_data/custom_data_event_handler.php (revision 10832)
@@ -1,156 +1,159 @@
<?php
class CustomDataEventHandler extends kDBEventHandler {
/**
* [HOOK] Allows to apply custom fields functionality to specific config
* When main item is created, then cdata config is cloned
*
* @param kEvent $event
*/
function OnDefineCustomFields(&$event)
{
// 1. clone customdata table
$clones = $this->Application->getUnitOption('cdata', 'Clones');
$clones[$event->MasterEvent->Prefix.'-cdata'] = Array (
'ParentPrefix' => $event->MasterEvent->Prefix,
'TableName' => $this->Application->getUnitOption($event->MasterEvent->Prefix, 'TableName').'CustomData',
);
$this->Application->setUnitOption('cdata', 'Clones', $clones);
// 2. add custom field information to main item
$this->createCustomFields($event->MasterEvent->Prefix);
}
function scanCustomFields($prefix)
{
static $custom_fields = Array ();
if (defined('IS_INSTALL') && IS_INSTALL && !$this->Application->TableFound('CustomField')) {
return false;
}
if (!$prefix) {
// prefix not specified
return false;
}
$item_type = $this->Application->getUnitOption($prefix, 'ItemType');
if (!$item_type) {
// no main config of such type
return false;
}
if (!$custom_fields || (defined('IS_INSTALL') && IS_INSTALL)) {
// query all custom fields at once -> saves 4 sqls queries
$sql = 'SELECT *
FROM '.TABLE_PREFIX.'CustomField';
$all_custom_fields = $this->Conn->Query($sql, 'CustomFieldId');
ksort($all_custom_fields);
foreach ($all_custom_fields as $custom_field_id => $custom_field_data) {
$cf_type = $custom_field_data['Type'];
if (!array_key_exists($cf_type, $custom_fields)) {
$custom_fields[$cf_type] = Array ();
}
$custom_fields[$cf_type][$custom_field_id] = $custom_field_data;
}
}
return array_key_exists($item_type, $custom_fields) ? $custom_fields[$item_type] : false;
}
/**
* Fills cloned cdata config with data from it's parent
*
* @param kEvent $event
*/
function OnAfterConfigRead(&$event)
{
$main_prefix = $this->Application->getUnitOption($event->Prefix, 'ParentPrefix');
+ if (!$main_prefix) {
+ return false;
+ }
$custom_fields = $this->scanCustomFields($main_prefix);
if (!$custom_fields) {
return false;
}
// 2. create fields (for customdata item)
$fields = $this->Application->getUnitOption($event->Prefix, 'Fields', Array());
$field_options = Array('type' => 'string', 'formatter' => 'kMultiLanguage', 'db_type' => 'text', 'default' => '');
foreach ($custom_fields as $custom_id => $custom_params) {
if (isset($fields['cust_'.$custom_id])) continue;
$fields['cust_'.$custom_id] = $field_options;
$fields['cust_'.$custom_id]['force_primary'] = !$custom_params['MultiLingual'];
}
$this->Application->setUnitOption($event->Prefix, 'Fields', $fields);
}
/**
* Creates "cust_<custom_name>" virtual fields for main item
*
* @param string $prefix
*/
function createCustomFields($prefix)
{
$custom_fields = $this->scanCustomFields($prefix);
if (!$custom_fields) {
return false;
}
$calculated_fields = Array();
$virtual_fields = $this->Application->getUnitOption($prefix, 'VirtualFields', Array());
$cf_helper =& $this->Application->recallObject('InpCustomFieldsHelper');
$ml_formatter =& $this->Application->recallObject('kMultiLanguage');
/* @var $ml_formatter kMultiLanguage */
foreach ($custom_fields as $custom_id => $custom_params) {
$custom_name = $custom_params['FieldName'];
$field_options = Array('type' => 'string', 'not_null' => 1, 'default' => '');
switch ($custom_params['ElementType']) {
case 'date':
case 'datetime':
unset($field_options['options']);
$field_options['formatter'] = 'kDateFormatter';
break;
case 'select':
case 'multiselect':
case 'radio':
if ($custom_params['ValueList']) {
$field_options['options'] = $cf_helper->GetValuesHash($custom_params['ValueList']);
$field_options['formatter'] = 'kOptionsFormatter';
}
break;
default:
if ($custom_params['MultiLingual']) {
$calculated_fields['cust_'.$custom_name.'_Primary'] = 'cust.'.$ml_formatter->LangFieldName('cust_'.$custom_id, true);
$virtual_fields['cust_'.$custom_name.'_Primary'] = $field_options;
$field_options['master_field'] = 'cust_'.$custom_name.'_Primary';
$field_options['formatter'] = 'kCustomFieldFormatter';
}
break;
}
$calculated_fields['cust_'.$custom_name] = 'cust.'.$ml_formatter->LangFieldName('cust_'.$custom_id, !$custom_params['MultiLingual']);
if (!isset($virtual_fields['cust_'.$custom_name])) {
$virtual_fields['cust_'.$custom_name] = Array();
}
$virtual_fields['cust_'.$custom_name] = array_merge_recursive2($field_options, $virtual_fields['cust_'.$custom_name]);
$custom_fields[$custom_id] = $custom_name;
}
$config_calculated_fields = $this->Application->getUnitOption($prefix, 'CalculatedFields', Array());
foreach ($config_calculated_fields as $special => $special_fields) {
$config_calculated_fields[$special] = array_merge_recursive2($config_calculated_fields[$special], $calculated_fields);
}
$this->Application->setUnitOption($prefix, 'CalculatedFields', $config_calculated_fields);
$this->Application->setUnitOption($prefix, 'CustomFields', $custom_fields);
$this->Application->setUnitOption($prefix, 'VirtualFields', $virtual_fields);
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/custom_data/custom_data_event_handler.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4.2.3
\ No newline at end of property
+1.4.2.4
\ No newline at end of property
Index: branches/RC/core/units/images/image_tag_processor.php
===================================================================
--- branches/RC/core/units/images/image_tag_processor.php (revision 10831)
+++ branches/RC/core/units/images/image_tag_processor.php (revision 10832)
@@ -1,331 +1,341 @@
<?php
class ImageTagProcessor extends kDBTagProcessor {
/**
* Prepares all image parameters as list block parameters (for easy usage)
*
* @param kDBList $object
* @param Array $block_params
* @author Alex
*/
function PrepareListElementParams(&$object, &$block_params)
{
$image_url = $this->ImageSrc($block_params);
if (!$image_url) {
return ;
}
$parent_prefix = $this->Application->getUnitOption($object->Prefix, 'ParentPrefix');
$parent_item =& $this->Application->recallObject($parent_prefix);
$block_params['img_path'] = $image_url;
$image_dimensions = $this->ImageSize($block_params);
$block_params['img_size'] = $image_dimensions ? $image_dimensions : ' width="'.$block_params['DefaultWidth'].'"';
$block_params['alt'] = htmlspecialchars($this->getItemTitle($parent_item)); // $object->GetField('AltName') really used ?
$block_params['align'] = array_key_exists('align', $block_params) ? $block_params['align'] : 'left';
}
/**
* Returns value of object's title field
*
* @param kDBItem $object
* @return string
*/
function getItemTitle(&$object)
{
$title_field = $this->Application->getUnitOption($object->Prefix, 'TitleField');
return $object->GetField($title_field);
}
/**
* [AGGREGATED TAGS] works as <inp2:CatalogItemPrefix_Image, ImageSize, ImageSrc ..../>
*
* @param Array $params
* @return string
*/
function ItemImageTag($params)
{
$this->LoadItemImage($params);
return $this->$params['original_tag']($params);
}
function LargeImageExists($params)
{
$object =& $this->getObject($params);
if ($object->GetDBField('SameImages') == null || $object->GetDBField('SameImages') == 1) {
return false;
}
else {
return true;
}
}
function LoadItemImage($params)
{
$parent_item =& $this->Application->recallObject($params['PrefixSpecial']);
/* @var $parent_item kCatDBItem */
$object =& $this->Application->recallObject($this->getPrefixSpecial(), null, Array('skip_autoload' => true));
/* @var $object kDBItem */
$object->Clear();
// if we need primary thumbnail which is preloaded with category item's list
$is_primary = $this->SelectParam($params, 'primary,Primary');
$image_id = $this->Application->GetVar($this->Prefix.'_id');
if (
// is primary, when primary mark set OR name & field not given
($is_primary || !(isset($params['name']) || isset($params['field']))) &&
// primary image is preloaded AND direct id not given
isset($parent_item->Fields['ThumbPath']) && !$image_id
) {
$object->SetDefaultValues();
$object->SetDBField('Url', $parent_item->GetDBField('FullUrl'));
$object->SetDBField('AltName', $this->getItemTitle($parent_item));
$object->SetDBFieldsFromHash($parent_item->GetFieldValues(), Array('SameImages', 'LocalThumb', 'ThumbPath', 'ThumbUrl', 'LocalImage', 'LocalPath'));
$object->Loaded = true;
}
else { // if requested image is not primary thumbnail - load it directly
$id_field = $this->Application->getUnitOption($this->Prefix, 'ForeignKey');
$parent_table_key = $this->Application->getUnitOption($this->Prefix, 'ParentTableKey');
$keys[$id_field] = $parent_item->GetDBField($parent_table_key);
// which image to load?
if ($is_primary) {
// by PrimaryImage mark
$keys['DefaultImg'] = 1;
}
elseif (getArrayValue($params, 'name')) {
// by ImageName
$keys['Name'] = $params['name'];
}
elseif (getArrayValue($params, 'field')) {
// by virtual field name in main object
$field_options = $parent_item->GetFieldOptions($params['field']);
$keys['Name'] = isset($field_options['original_field']) ? $field_options['original_field'] : $params['field'];
}
elseif ($image_id) {
// by ID
$keys['ImageId'] = $image_id;
}
else {
// by PrimaryImage if no other criteria given
$keys['DefaultImg'] = 1;
}
$object->Load($keys);
if (isset($params['field'])) {
$image_src = $parent_item->GetDBField($params['field']);
// when image is uploaded to virtual field in main item, but not saved to db
$object->SetDBField('ThumbPath', $image_src);
if (!$object->isLoaded()) {
// set fields for displaing new image during main item suggestion with errors
$fields_hash = Array (
'Url' => '',
'ThumbUrl' => '',
'LocalPath' => '',
'SameImages' => 1,
'LocalThumb' => 1,
'LocalImage' => 1,
);
$object->SetDBFieldsFromHash($fields_hash);
$object->Loaded = true;
}
}
}
}
function getImageDimension($type, $params)
{
$ret = isset($params['Max'.$type]) ? $params['Max'.$type] : false;
if (!$ret) {
return $ret;
}
$parent_prefix = $this->Application->getUnitOption($this->Prefix, 'ParentPrefix');
if ($ret == 'thumbnail') {
$ret = $this->Application->ConfigValue($parent_prefix.'_ThumbnailImage'.$type);
}
if ($ret == 'fullsize') {
$ret = $this->Application->ConfigValue($parent_prefix.'_FullImage'.$type);
}
return $ret;
}
/**
* Appends "/" to beginning of image path (in case when missing)
*
* @param kDBItem $object
* @todo old in-portal doesn't append first slash, but we do => append first slash for him :)
*/
function makeRelativePaths(&$object)
{
$thumb_path = $object->GetDBField('ThumbPath');
if ($thumb_path && substr($thumb_path, 0, 1) != '/') {
$object->SetDBField('ThumbPath', '/'.$thumb_path);
}
$local_path = $object->GetDBField('LocalPath');
if ($local_path && substr($local_path, 0, 1) != '/') {
$object->SetDBField('LocalPath', '/'.$local_path);
}
}
function ImageSrc($params)
{
$object =& $this->getObject($params);
$this->makeRelativePaths($object);
$base_url = rtrim($this->Application->BaseURL(), '/');
if ($object->GetDBField('SameImages') && $object->GetDBField('ThumbPath')) {
// we can auto-resize image, when source image available & we use same image for thumbnail & full image in admin
$max_width = $this->getImageDimension('Width', $params);
$max_height = $this->getImageDimension('Height', $params);
+ $format = array_key_exists('format', $params) ? $params['format'] : false;
- // user watermarks from format param
- if (!$max_width) {
- $max_width = $params['format'];
- if ($max_width) {
- $max_height = null;
- }
+ if (!$max_width && $format) {
+ // user watermarks from format param
+ $max_width = $format;
}
- if ($max_width > 0 || $max_height > 0 || $params['format']) {
+ if ($max_width > 0 || $max_height > 0 || $format) {
$image_helper =& $this->Application->recallObject('ImageHelper');
/* @var $image_helper ImageHelper */
$src_image = FULL_PATH.$object->GetDBField('ThumbPath');
return $image_helper->ResizeImage($src_image, $max_width, $max_height);
}
}
$ret = '';
// if we need thumbnail, or full image is same as thumbnail
$show_thumbnail = $this->SelectParam($params, 'thumbnail,Thumbnail') || // old style
(isset($params['MaxWidth']) && $params['MaxWidth'] == 'thumbnail') || // new style
(isset($params['MaxHeight']) && $params['MaxHeight'] == 'thumbnail');
if ($show_thumbnail || $object->GetDBField('SameImages')) {
// return local image or url
$ret = $object->GetDBField('LocalThumb') ? $base_url.$object->GetDBField('ThumbPath') : $object->GetDBField('ThumbUrl');
if ($object->GetDBField('LocalThumb') && !file_exists(FULL_PATH.$object->GetDBField('ThumbPath')) && !constOn('DBG_IMAGE_RECOVERY')) {
// local thumbnail file is missing
$ret = '';
}
}
else { // if we need full which is not the same as thumb
$ret = $object->GetDBField('LocalImage') ? $base_url.$object->GetDBField('LocalPath') : $object->GetDBField('Url');
if ($object->GetDBField('LocalImage') && !file_exists(FULL_PATH.$object->GetDBField('LocalPath'))) {
// local full image file is missing
$ret = '';
}
}
$default_image = $this->SelectParam($params, 'default_image,DefaultImage');
- return ($ret && $ret != $base_url) ? $ret : ($default_image ? $base_url.THEMES_PATH.'/'.$default_image : false);
+
+ if ($ret && $ret != $base_url) {
+ // image name and it's not just folder name
+ return $ret;
+ }
+ elseif ($default_image) {
+ // show default image, use different base urls for admin and front-end
+ $sub_folder = $this->Application->IsAdmin() ? rtrim(IMAGES_PATH, '/') : THEMES_PATH;
+ return $base_url . $sub_folder . '/' . $default_image;
+ }
+
+ return false;
}
function getFullPath($path)
{
if (!$path) {
return $path;
}
// absolute url
if (preg_match('/^(.*):\/\/(.*)$/U', $path)) {
return preg_replace('/^'.preg_quote($this->Application->BaseURL(), '/').'(.*)/', FULL_PATH.'/\\1', $path);
}
// relative url
return FULL_PATH.'/'.mb_substr(THEMES_PATH, 1).'/'.$path;
}
/**
* Makes size clause for img tag, such as
* ' width="80" height="100"' according to max_width
* and max_heght limits.
*
* @param array $params
* @return string
*/
function ImageSize($params)
{
$img_path = $this->getFullPath($params['img_path']);
$image_helper =& $this->Application->recallObject('ImageHelper');
/* @var $image_helper ImageHelper */
$max_width = $this->getImageDimension('Width', $params);
$max_height = $this->getImageDimension('Height', $params);
$image_dimensions = $image_helper->GetImageDimensions($img_path, $max_width, $max_height);
if (!$image_dimensions) {
return false;
}
return ' width="'.$image_dimensions[0].'" height="'.$image_dimensions[1].'"';
}
/**
* Prepares image parameters & parses block with them (for admin)
*
* @param Array $params
* @return string
*/
function Image($params)
{
$image_url = $this->ImageSrc($params);
if (!$image_url) {
return ;
}
$object =& $this->getObject($params);
$params['img_path'] = $image_url;
$image_dimensions = $this->ImageSize($params);
$params['img_size'] = $image_dimensions ? $image_dimensions : ' width="'.$params['DefaultWidth'].'"';
$params['alt'] = htmlspecialchars($object->GetField('AltName')); // really used ?
$params['name'] = $this->SelectParam($params, 'block,render_as');
$params['align'] = array_key_exists('align', $params) ? $params['align'] : 'left';
+ $params['no_editing'] = 1;
if (!$object->isLoaded() && !$this->SelectParam($params, 'default_image,DefaultImage')) {
return false;
}
return $this->Application->ParseBlock($params);
}
/**
* Returns url for image in case when image source is url (for admin)
*
* @param Array $params
* @return string
*/
function ImageUrl($params)
{
$object =& $this->getObject($params);
if ($object->GetDBField('SameImages') ? $object->GetDBField('LocalThumb') : $object->GetDBField('LocalImage') ) {
$ret = $this->Application->Phrase(getArrayValue($params,'local_phrase'));
}
else {
$ret = $object->GetDBField('SameImages') ? $object->GetDBField('ThumbUrl') : $object->GetDBField('Url');
}
return $ret;
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/images/image_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.13.2.6
\ No newline at end of property
+1.13.2.7
\ No newline at end of property
Index: branches/RC/core/units/configuration/configuration_event_handler.php
===================================================================
--- branches/RC/core/units/configuration/configuration_event_handler.php (revision 10831)
+++ branches/RC/core/units/configuration/configuration_event_handler.php (revision 10832)
@@ -1,192 +1,197 @@
<?php
class ConfigurationEventHandler extends kDBEventHandler {
/**
* Changes permission section to one from REQUEST, not from config
*
* @param kEvent $event
*/
function CheckPermission(&$event)
{
$event->setEventParam('PermSection', $this->Application->GetVar('section'));
return parent::CheckPermission($event);
}
/**
* Apply any custom changes to list's sql query
*
* @param kEvent $event
* @access protected
* @see OnListBuild
*/
function SetCustomQuery(&$event)
{
$object =& $event->getObject();
+ /* @var $object kDBList */
$module = $this->Application->GetVar('module');
$section = $this->Application->GetVar('section');
$object->addFilter('module_filter', '%1$s.ModuleOwner = '.$this->Conn->qstr($module));
$object->addFilter('section_filter', '%1$s.Section = '.$this->Conn->qstr($section));
+
+ if (defined('IS_INSTALL') && IS_INSTALL) {
+ $object->addFilter('install_filter', 'ca.Install = 1');
+ }
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnBeforeItemUpdate(&$event)
{
$object =& $event->getObject();
// if password field is empty, then don't update
if ($object->GetDBField('element_type') == 'password') {
if (trim($object->GetDBField('VariableValue')) == '') {
$field_options = $object->GetFieldOptions('VariableValue');
$field_options['skip_empty'] = 1;
$object->SetFieldOptions('VariableValue', $field_options);
}else {
$password_formatter =& $this->Application->recallObject('kPasswordFormatter');
$object->SetDBField('VariableValue', $password_formatter->EncryptPassword($object->GetDBField('VariableValue'), 'b38'));
}
}
$field_values = $this->Application->GetVar($event->getPrefixSpecial(true));
$state_country_hash = Array(
'Comm_State' => 'Comm_Country',
'Comm_Shipping_State' => 'Comm_Shipping_Country'
);
$field_name = $object->GetDBField('VariableName');
if (isset($state_country_hash[$field_name])) {
// if this is state field
$check_state = $object->GetDBField('VariableValue');
$check_country = $field_values[ $state_country_hash[$field_name] ]['VariableValue'];
if (!($check_country && $check_state)) {
return true;
}
$cs_helper =& $this->Application->recallObject('CountryStatesHelper');
$state_iso = $cs_helper->CheckState($check_state, $check_country);
if ($state_iso !== false) {
$object->SetDBField('VariableValue', $state_iso);
}
else
{
$errormsgs = $this->Application->GetVar('errormsgs');
$errors = !$errormsgs || !isset($errormsgs[$event->Prefix_Special]) ? Array() : $errormsgs[$event->Prefix_Special];
$errors[$field_name] = 'la_InvalidState';
$errormsgs[$event->Prefix_Special] = $errors;
$this->Application->SetVar('errormsgs', $errormsgs);
$event->status = erFAIL;
}
}
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnAfterItemUpdate(&$event)
{
$object =& $event->getObject();
if ($object->GetDBField('element_type') == 'password') {
if (trim($object->GetDBField('VariableValue')) == '') {
$field_options = $object->GetFieldOptions('VariableValue');
unset($field_options['skip_empty']);
$object->SetFieldOptions('VariableValue', $field_options);
}
}
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function OnUpdate(&$event)
{
if (!$this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
// 1. save user selected module root category
$items_info = $this->Application->GetVar($event->getPrefixSpecial(true));
$new_category_id = getArrayValue($items_info, 'ModuleRootCategory', 'VariableValue');
if ($new_category_id !== false) {
unset($items_info['ModuleRootCategory']);
$this->Application->SetVar($event->getPrefixSpecial(true), $items_info);
}
parent::OnUpdate($event);
if ($event->status == erSUCCESS && $new_category_id !== false) {
// root category was submitted
$module = $this->Application->GetVar('module');
$root_category_id = $this->Application->findModule('Name', $module, 'RootCat');
if ($root_category_id != $new_category_id) {
// root category differs from one in db
$fields_hash = Array('RootCat' => $new_category_id);
$this->Conn->doUpdate($fields_hash, TABLE_PREFIX.'Modules', 'Name = '.$this->Conn->qstr($module));
}
}
if ($event->status == erSUCCESS) { // reset cache
$this->Application->UnitConfigReader->ResetParsedData();
}
}
if ($this->Application->GetVar('errormsgs')) {
// because we have list out there, and this is item
$this->Application->removeObject($event->getPrefixSpecial());
$event->redirect = false;
}
}
/**
* Enter description here...
*
* @param kEvent $event
*/
/*function OnChangeCountry(&$event)
{
$event->setPseudoClass('_List');
$object = &$event->getObject( Array('per_page'=>-1) );
$object->Query();
$array_records =& $object->Records;
foreach($array_records as $i=>$record){
if ($record['VariableName']=='Comm_Country'){
$values = $this->Application->GetVar('conf');
$array_records[$i]['VariableValue'] = $values['Comm_Country']['VariableValue'];
}
}
$event->redirect_params = Array('opener' => 's', 'pass'=>'all,conf'); //stay!
$event->redirect = false;
}*/
/**
* Process items from selector (selected_ids var, key - prefix, value - comma separated ids)
*
* @param kEvent $event
*/
function OnProcessSelected(&$event)
{
$selected_ids = $this->Application->GetVar('selected_ids');
$this->Application->StoreVar('ModuleRootCategory', $selected_ids['c']);
$this->finalizePopup($event);
}
-
+
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/configuration/configuration_event_handler.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.18.2.2
\ No newline at end of property
+1.18.2.3
\ No newline at end of property
Index: branches/RC/core/units/modules/modules_config.php
===================================================================
--- branches/RC/core/units/modules/modules_config.php (revision 10831)
+++ branches/RC/core/units/modules/modules_config.php (revision 10832)
@@ -1,122 +1,111 @@
<?php
$config = Array(
'Prefix' => 'mod',
'ItemClass' => Array('class'=>'kDBItem','file'=>'','build_event'=>'OnItemBuild'),
'ListClass' => Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
'EventHandlerClass' => Array('class'=>'ModulesEventHandler','file'=>'modules_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class'=>'ModulesTagProcessor','file'=>'modules_tag_processor.php','build_event'=>'OnBuild'),
'AutoLoad' => true,
'QueryString' => Array(
1 => 'id',
2 => 'page',
3 => 'event',
4 => 'mode',
),
'IDField' => 'Name',
'TitleField' => 'Name', // field, used in bluebar when editing existing item
'StatusField' => Array('Loaded'),
'TitlePresets' => Array(
'modules_list' => Array( 'prefixes' => Array('mod_List'), 'format' => "!la_title_Configuration! - !la_title_Module_Status! (#mod_recordcount#)"),
'tree_modules' => Array('format' => '!la_section_overview!'),
),
'PermSection' => Array('main' => 'in-portal:mod_status'),
'Sections' => Array(
- // "Configuration" -> "Modules and Settings"
- 'in-portal:modules' => Array(
- 'parent' => 'in-portal:system',
- 'icon' => 'modules',
- 'label' => 'la_tab_ModulesManagement',
- 'url' => Array('t' => 'sections_list', 'pass_section' => true, 'pass' => 'm'),
- 'permissions' => Array('view'),
- 'priority' => 5,
- 'type' => stTREE,
- 'icon_module' => 'in-portal',
- ),
-
- 'in-portal:mod_status' => Array(
- 'parent' => 'in-portal:modules',
- 'icon' => 'modules',
- 'label' => 'la_title_Module_Status',
- 'url' => Array('t' => 'modules/modules_list', 'pass' => 'm'),
- 'permissions' => Array('view', 'edit', 'advanced:approve', 'advanced:decline'),
- 'priority' => 1,
- 'type' => stTREE,
- ),
-
- 'in-portal:addmodule' => Array(
- 'parent' => 'in-portal:modules',
- 'icon' => 'modules',
- 'label' => 'la_title_Add_Module',
- 'url' => Array('index_file' => 'modules/addmodule.php', 'pass' => 'm'),
- 'permissions' => Array('view', 'add', 'edit'),
- 'priority' => 2,
- 'type' => stTREE,
- ),
-
- 'in-portal:tag_library' => Array(
- 'parent' => 'in-portal:modules',
- 'icon' => 'modules',
- 'label' => 'la_tab_TagLibrary',
- 'url' => Array('index_file' => 'tag_listing.php', 'pass' => 'm'),
- 'permissions' => Array('view'),
- 'priority' => 3,
- 'type' => stTREE,
- ),
- ),
+ 'in-portal:mod_status' => Array(
+ 'parent' => 'in-portal:system',
+ 'icon' => 'modules',
+ 'label' => 'la_title_Module_Status',
+ 'url' => Array('t' => 'modules/modules_list', 'pass' => 'm'),
+ 'permissions' => Array('view', 'edit', 'advanced:approve', 'advanced:decline'),
+ 'priority' => 5,
+ 'type' => stTREE,
+ ),
+
+ // "Configuration" -> "Modules and Settings"
+ /*'in-portal:modules' => Array(
+ 'parent' => 'in-portal:system',
+ 'icon' => 'modules',
+ 'label' => 'la_tab_ModulesManagement',
+ 'url' => Array('t' => 'sections_list', 'pass_section' => true, 'pass' => 'm'),
+ 'permissions' => Array('view'),
+ 'priority' => 5,
+ 'type' => stTREE,
+ 'icon_module' => 'in-portal',
+ ),
+
+ 'in-portal:tag_library' => Array(
+ 'parent' => 'in-portal:modules',
+ 'icon' => 'modules',
+ 'label' => 'la_tab_TagLibrary',
+ 'url' => Array('index_file' => 'tag_listing.php', 'pass' => 'm'),
+ 'permissions' => Array('view'),
+ 'priority' => 3,
+ 'type' => stTREE,
+ ),*/
+ ),
'TableName' => TABLE_PREFIX.'Modules',
'FilterMenu' => Array(
'Groups' => Array(
Array('mode' => 'AND', 'filters' => Array('enabled', 'disabled'), 'type' => WHERE_FILTER),
),
'Filters' => Array(
'enabled' => Array('label' =>'la_Enabled', 'on_sql' => '', 'off_sql' => '%1$s.Loaded != 1'),
'disabled' => Array('label' => 'la_Disabled', 'on_sql' => '', 'off_sql' => '%1$s.Loaded != 0'),
)
),
'ListSQLs' => Array( ''=>'SELECT * FROM %s',
), // key - special, value - list select sql
'ItemSQLs' => Array( ''=>'SELECT * FROM %s',
),
'ListSortings' => Array(
'' => Array(
'Sorting' => Array('LoadOrder' => 'asc'),
)
),
'Fields' => Array(
'Name' => Array('type' => 'string', 'not_null' => 1, 'default' => ''),
'Path' => Array('type' => 'string','not_null' => '1','default' => ''),
'Var' => Array('type' => 'string','not_null' => '1','default' => ''),
'Version' => Array('type' => 'string','not_null' => '1','default' => '0.0.0'),
'Loaded' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array(1 => 'la_Enabled', 0 => 'la_Disabled'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 1),
'LoadOrder' => Array('type' => 'int','not_null' => 1, 'default' => 0),
'TemplatePath' => Array('type' => 'string','not_null' => 1, 'default' => ''),
'RootCat' => Array('type' => 'int','not_null' => 1, 'default' => 0),
'BuildDate' => Array('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
),
'VirtualFields' => Array(),
- 'Grids' => Array(
- 'Default' => Array(
- 'Icons' => Array('default' => 'icon16_custom.gif'),
- 'Fields' => Array(
- 'Name' => Array('title' => 'la_col_Name', 'data_block' => 'grid_checkbox_td_no_icon'),
- 'Loaded' => Array('title' => 'la_col_Status'),
- 'Version' => Array('title' => 'la_col_Version'),
- ),
-
- ),
- ),
+ 'Grids' => Array (
+ 'Default' => Array (
+ 'Icons' => Array ('default' => 'icon16_custom.gif'),
+ 'Fields' => Array (
+ 'Name' => Array('title' => 'la_col_Name', 'data_block' => 'grid_checkbox_td_no_icon', 'header_block' => 'grid_column_title_no_sorting', 'filter_block' => 'grid_like_filter'),
+ 'Version' => Array('title' => 'la_col_Version', 'header_block' => 'grid_column_title_no_sorting', 'filter_block' => 'grid_like_filter'),
+ 'Loaded' => Array('title' => 'la_col_Status', 'header_block' => 'grid_column_title_no_sorting', 'data_block' => 'grid_module_td', 'filter_block' => 'grid_options_filter'),
+ ),
+ ),
+ ),
);
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/modules/modules_config.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.11
\ No newline at end of property
+1.11.2.1
\ No newline at end of property
Index: branches/RC/core/units/modules/modules_tag_processor.php
===================================================================
--- branches/RC/core/units/modules/modules_tag_processor.php (revision 10831)
+++ branches/RC/core/units/modules/modules_tag_processor.php (revision 10832)
@@ -1,12 +1,87 @@
<?php
-class ModulesTagProcessor extends kDBTagProcessor {
+ class ModulesTagProcessor extends kDBTagProcessor {
- function ModuleInstalled($params)
- {
- return $this->Application->isModuleEnabled($params['name']);
- }
-
-}
+ function ModuleInstalled($params)
+ {
+ return $this->Application->isModuleEnabled($params['name']);
+ }
+
+ function AlreadyInstalled($params)
+ {
+ $object =& $this->getObject($params);
+ /* @var $object kDBList */
+
+ $modules_helper =& $this->Application->recallObject('ModulesHelper');
+ /* @var $modules_helper kModulesHelper */
+
+ return $modules_helper->moduleInstalled( $object->GetDBField('Name') );
+ }
+
+ function ModuleLicensed($params)
+ {
+ $object =& $this->getObject($params);
+ /* @var $object kDBList */
+
+ $modules_helper =& $this->Application->recallObject('ModulesHelper');
+ /* @var $modules_helper kModulesHelper */
+
+ $licensed_modules = array_map('strtolower', $modules_helper->_GetModules());
+
+ return in_array(strtolower($object->GetDBField('Name')), $licensed_modules);
+ }
+
+ function PrerequisitesMet($params)
+ {
+ return !$this->_getPrerequisitesErrors($params);
+ }
+
+ function _getPrerequisitesErrors($params)
+ {
+ static $errors = Array ();
+
+ $object =& $this->getObject($params);
+ /* @var $object kDBList */
+
+ $module_path = strtolower( $object->GetDBField('Name') );
-?>
\ No newline at end of file
+ if (!array_key_exists($module_path, $errors)) {
+ require_once FULL_PATH . '/core/install/install_toolkit.php';
+
+ $toolkit = new kInstallToolkit();
+
+ $module_version = $toolkit->GetMaxModuleVersion($module_path);
+
+ $errors[$module_path] = $toolkit->CheckPrerequisites($module_path . '/', Array ($module_version), 'standalone');
+ }
+
+ return $errors[$module_path];
+ }
+
+ function ListPrerequisites($params)
+ {
+ $errors = $this->_getPrerequisitesErrors($params);
+
+ $ret = '';
+ $block_params = $this->prepareTagParams($params);
+ $block_params['name'] = $params['render_as'];
+
+ foreach ($errors as $error) {
+ $block_params['error'] = $error;
+ $ret .= $this->Application->ParseBlock($block_params);
+ }
+
+ return $ret;
+ }
+
+ function InstallLink($params)
+ {
+ $object =& $this->getObject($params);
+ /* @var $object kDBList */
+
+ $module_path = strtolower( $object->GetDBField('Name') );
+ $url_params = Array ('redirect' => 1, 'admin' => 1);
+
+ return $this->Application->HREF('dummy', '_FRONT_END_', $url_params, $module_path . '/install.php');
+ }
+ }
Property changes on: branches/RC/core/units/modules/modules_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.3.2.1
\ No newline at end of property
Index: branches/RC/core/units/modules/modules_event_handler.php
===================================================================
--- branches/RC/core/units/modules/modules_event_handler.php (revision 10831)
+++ branches/RC/core/units/modules/modules_event_handler.php (revision 10832)
@@ -1,82 +1,157 @@
<?php
class ModulesEventHandler extends kDBEventHandler {
/**
* Builds item
*
* @param kEvent $event
* @access protected
*/
function OnItemBuild(&$event)
{
$this->Application->SetVar($event->getPrefixSpecial(true).'_id', $event->Special);
parent::OnItemBuild($event);
}
/**
* List with one record if special passed
*
* @param kEvent $event
*/
function SetCustomQuery(&$event)
{
$object =& $event->getObject();
if ($event->Special) {
$object->addFilter('current_module', 'Name = '.$event->Special);
}
if (!$this->Application->isModuleEnabled('Proj-Base')) {
$object->addFilter('not_core', 'Name != '.$this->Conn->qstr('Core'));
}
}
function mapEvents()
{
parent::mapEvents();
$this->eventMethods['OnMassApprove'] = 'moduleAction';
$this->eventMethods['OnMassDecline'] = 'moduleAction';
}
/**
* Disabled modules, but not In-Portal
*
* @param kEvent $event
*/
function moduleAction(&$event)
{
if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
return;
}
$object =& $event->getObject( Array('skip_autoload' => true) );
$ids = $this->StoreSelectedIDs($event);
if (!$ids) return true;
$status_field = array_shift( $this->Application->getUnitOption($event->Prefix, 'StatusField') );
foreach($ids as $id)
{
$object->Load($id);
if ($object->GetID() == 'In-Portal') continue;
$object->SetDBField($status_field, $event->Name == 'OnMassApprove' ? 1 : 0);
if ($object->Update()) {
$event->status = erSUCCESS;
$event->redirect_params = Array('opener' => 's'); //stay!
}
else {
$event->status = erFAIL;
$event->redirect = false;
break;
}
}
$this->Application->UnitConfigReader->ResetParsedData(true); //true to reset sections cache also
$event->SetRedirectParam('RefreshTree', 1);
}
+ /**
+ * Occures after list is queried
+ *
+ * @param kEvent $event
+ */
+ function OnAfterListQuery(&$event)
+ {
+ parent::OnAfterListQuery($event);
+
+ $new_modules = $this->_getNewModules();
+ if (!$new_modules) {
+ return ;
+ }
+
+ require_once FULL_PATH . '/core/install/install_toolkit.php';
+
+ $toolkit = new kInstallToolkit();
+
+ $object =& $event->getObject();
+ /* @var $object kDBList */
+
+ foreach ($new_modules as $module) {
+ $module_record = Array (
+ 'Name' => $toolkit->getModuleName($module),
+ 'Loaded' => 0,
+ 'Version' => $toolkit->GetMaxModuleVersion($module),
+ );
+
+ $object->addRecord($module_record);
+ }
+ }
+
+ /**
+ * Returns list of modules, that are not installed, but available in file system
+ *
+ * @return Array
+ */
+ function _getNewModules()
+ {
+ $modules_helper =& $this->Application->recallObject('ModulesHelper');
+ /* @var $modules_helper kModulesHelper */
+
+ $modules = Array ();
+ if ($dir = @opendir(MODULES_PATH)) {
+ while (($file = readdir($dir)) !== false) {
+ if ($file != '.' && $file != '..') {
+ $module_folder = MODULES_PATH . '/' . $file;
+ if (is_dir($module_folder) && $this->_isModule($module_folder)) {
+ // this is module -> check if it's installed already
+ if (!$modules_helper->moduleInstalled($file)) {
+ $install_order = trim( file_get_contents($module_folder . '/install/install_order.txt') );
+ $modules[$install_order] = $file;
+ }
+ }
+ }
+ }
+
+ closedir($dir);
+ }
+
+ // allows to control module install order
+ ksort($modules, SORT_NUMERIC);
+ return $modules;
+ }
+
+ /**
+ * Checks, that given folder is module root folder
+ *
+ * @param string $folder
+ * @return bool
+ */
+ function _isModule($folder)
+ {
+ return file_exists($folder . '/install.php') && file_exists($folder . '/install/install_schema.sql');
+ }
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/modules/modules_event_handler.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.10
\ No newline at end of property
+1.10.2.1
\ No newline at end of property
Index: branches/RC/core/units/help/help_tag_processor.php
===================================================================
--- branches/RC/core/units/help/help_tag_processor.php (revision 10831)
+++ branches/RC/core/units/help/help_tag_processor.php (revision 10832)
@@ -1,107 +1,107 @@
<?php
- class HelpTagProcessor extends kDBTagProcessor
+ class HelpTagProcessor extends kDBTagProcessor
{
-
+
function SectionTitle($params)
{
$rets = explode('.', $this->Application->GetVar('h_prefix') );
$this->Prefix = $rets[0];
$this->Special = isset($rets[1]) ? $rets[1] : '';
//$this->Prefix = $this->Application->GetVar('h_prefix');
-
+
$title_preset_name = replaceModuleSection($this->Application->GetVar('h_title_preset'));
$this->Application->SetVar('h_title_preset', $title_preset_name);
$title_presets = $this->Application->getUnitOption($this->Prefix,'TitlePresets');
-
+
$format = $title_presets[$title_preset_name]['format'];
$format = preg_replace('/[ ]*( ([\'"]{1}) | ([\(]{1}) ) \#.*\# (?(2) \1 | \) )[ ]*/Ux', ' ', $format);
$title_presets[$title_preset_name]['format'] = $format;
$this->Application->setUnitOption($this->Prefix,'TitlePresets',$title_presets);
-
+
$params['title_preset'] = $title_preset_name;
return parent::SectionTitle($params);
}
-
+
function getModule()
{
$module = $this->Application->GetVar('h_module');
if (!$module) {
$module = $this->Application->RecallVar('module');
}
return $module;
}
-
+
function ShowHelp($params)
{
$module = $this->getModule();
-
+
$module = explode(':', $module);
$module = $module[0];
-
+
$title_preset = $this->Application->GetVar('h_title_preset');
-
+
$module_path = $this->Application->findModule('Name', $module, 'Path');
$help_file = FULL_PATH.'/'.$module_path.'module_help/'.$title_preset.'.txt';
-
+
if ($this->Application->isDebugMode() && constOn('DBG_EDIT_HELP')) {
global $debugger;
$ret = 'Help file: <b>'.$debugger->getLocalFile($help_file).'</b><hr>';
}
else {
$ret = '';
}
-
+
$help_data = file_exists($help_file) ? file_get_contents($help_file) : false;
-
+
if( $this->Application->isDebugMode() && constOn('DBG_HELP') )
{
$this->Application->Factory->includeClassFile('FCKeditor');
$oFCKeditor = new FCKeditor('HelpContent');
-
+
$oFCKeditor->BasePath = $this->Application->BaseURL('/admin/editor/cmseditor');
$oFCKeditor->Width = '100%';
$oFCKeditor->Height = '300';
$oFCKeditor->ToolbarSet = 'Advanced';
$oFCKeditor->Value = $help_data;
-
+
$oFCKeditor->Config = Array(
- 'UserFilesPath' => FULL_PATH.'kernel/user_files',
+ 'UserFilesPath' => (defined('WRITEABLE') ? WRITEABLE : FULL_PATH.'/kernel') . '/user_files',
'ProjectPath' => $this->Application->ConfigValue('Site_Path'),
'CustomConfigurationsPath' => rtrim( $this->Application->BaseURL('/admin/editor/inp_fckconfig.js'), '/'),
);
-
- $ret .= $oFCKeditor->CreateHtml();
+
+ $ret .= $oFCKeditor->CreateHtml();
}
else
{
$ret .= $help_data ? $help_data : $this->Application->Phrase('la_section_help_file_missing');
}
-
+
return $ret;
}
-
+
function GetIcon($params)
{
$icon_var = getArrayValue($params,'var_name');
$icon = replaceModuleSection($this->Application->GetVar($icon_var));
-
+
if(!$icon) $icon = getArrayValue($params,'default_icon');
return $icon;
}
-
+
/**
* Returns templates path for module, which is gathered from prefix module
*
* @param Array $params
* @return string
* @author Alex
*/
function ModulePath($params)
{
$module_folder = trim( $this->Application->findModule('Name', $this->getModule(), 'Path'), '/');
return '../../'.$module_folder.'/admin_templates/';
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/help/help_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.12
\ No newline at end of property
+1.12.2.1
\ No newline at end of property
Index: branches/RC/core/units/admin/admin_tag_processor.php
===================================================================
--- branches/RC/core/units/admin/admin_tag_processor.php (revision 10831)
+++ branches/RC/core/units/admin/admin_tag_processor.php (revision 10832)
@@ -1,1056 +1,1066 @@
<?php
class AdminTagProcessor extends kDBTagProcessor {
function SetConst($params)
{
$name = $this->SelectParam($params, 'name,const');
safeDefine($name, $params['value']);
}
/**
* Allows to execute js script after the page is fully loaded
*
* @param Array $params
* @return string
*/
function AfterScript($params)
{
$after_script = $this->Application->GetVar('after_script');
if ($after_script) {
return '<script type="text/javascript">'.$after_script.'</script>';
}
return '';
}
/**
* Returns section title with #section# keyword replaced with current section
*
* @param Array $params
* @return string
*/
function GetSectionTitle($params)
{
if (array_key_exists('default', $params)) {
return $params['default'];
}
return $this->Application->Phrase( replaceModuleSection($params['phrase']) );
}
/**
* Returns section icon with #section# keyword replaced with current section
*
* @param Array $params
* @return string
*/
function GetSectionIcon($params)
{
return replaceModuleSection($params['icon']);
}
/**
* Allows to detect if current template is one of listed ones
*
* @param Array $params
* @return int
*/
function TemplateMatches($params)
{
$templates = explode(',' ,$params['templates']);
$t = $this->Application->GetVar('t');
return in_array($t, $templates) ? 1 : 0;
}
/**
* Save return script in cases, when old sections are opened from new sections
*
* @param Array $params
*/
function SaveReturnScript($params)
{
// admin/save_redirect.php?do=
$m =& $this->Application->recallObject('m_TagProcessor');
$url = str_replace($this->Application->BaseURL(), '', $m->Link($params) );
$url = explode('?', $url, 2);
$url = 'save_redirect.php?'.$url[1].'&do='.$url[0];
$this->Application->StoreVar('ReturnScript', $url);
}
/**
* Redirects to correct next import step template based on import script data
*
* @param Array $params
*/
function ImportRedirect($params)
{
$import_id = $this->Application->GetVar('import_id');
if ($import_id) {
// redirect forward to step3 (import parameters coosing)
$this->Application->StoreVar('ImportScriptID', $import_id);
$sql = 'SELECT *
FROM '.TABLE_PREFIX.'ImportScripts
WHERE is_id = '.$import_id;
$db =& $this->Application->GetADODBConnection();
$is_params = $db->GetRow($sql);
if ($is_params['is_type'] == 'db') {
$this->Application->Redirect('', null, '', 'import/step3.php');
}
elseif ($is_params['is_type'] == 'csv') {
$module = mb_strtolower($is_params['is_Module']);
$template = $module.'/import';
$module_info = $this->Application->findModule('Name', $module);
$item_prefix = $module_info['Var'];
$pass_params = Array('m_opener' => 'd', $item_prefix.'.import_id' => 0, $item_prefix.'.import_event' => 'OnNew', 'pass' => 'm,'.$item_prefix.'.import', 'm_cat_id' => $module_info['RootCat']);
$this->Application->Redirect($template, $pass_params);
}
}
else {
// redirect back to step2 (import type choosing)
$this->Application->Redirect('', null, '', 'import/step2.php');
}
}
/**
* Returns version of module by name
*
* @param Array $params
* @return string
*/
function ModuleVersion($params)
{
return $this->Application->findModule('Name', $params['module'], 'Version');
}
/**
* Used in table form section drawing
*
* @param Array $params
* @return string
*/
function DrawTree($params)
{
static $deep_level = 0;
// when processings, then sort children by priority (key of children array)
$ret = '';
$section_name = $params['section_name'];
$params['name'] = $this->SelectParam($params, 'name,render_as,block');
$sections_helper =& $this->Application->recallObject('SectionsHelper');
$section_data =& $sections_helper->getSectionData($section_name);
$params['children_count'] = isset($section_data['children']) ? count($section_data['children']) : 0;
$params['deep_level'] = $deep_level++;
$template = $section_data['url']['t'];
unset($section_data['url']['t']);
$section_data['section_url'] = $this->Application->HREF($template, '', $section_data['url']);
$ret .= $this->Application->ParseBlock( array_merge_recursive2($params, $section_data) );
if (!isset($section_data['children'])) {
return $ret;
}
$debug_mode = $this->Application->isDebugMode();
$super_admin_mode = $this->Application->RecallVar('super_admin');
ksort($section_data['children'], SORT_NUMERIC);
foreach ($section_data['children'] as $section_name) {
$section_data =& $sections_helper->getSectionData($section_name);
if (isset($section_data['show_mode']) && is_numeric($section_data['show_mode'])) {
$show_mode = $section_data['show_mode'];
// if super admin section -> show in super admin mode & debug mode
$show_section = (($show_mode & smSUPER_ADMIN) == smSUPER_ADMIN) && ($super_admin_mode || $debug_mode);
if (!$show_section) {
// if section is in debug mode only && debug mode -> show
$show_section = (($show_mode & smDEBUG) == smDEBUG) && $debug_mode;
}
if (!$show_section) {
continue;
}
}
$params['section_name'] = $section_name;
$ret .= $this->DrawTree($params);
$deep_level--;
}
return $ret;
}
function SectionInfo($params)
{
$section = $params['section'];
if ($section == '#session#') {
$section = $this->Application->RecallVar('section');
}
$sections_helper =& $this->Application->recallObject('SectionsHelper');
/* @var $sections_helper kSectionsHelper */
$section_data =& $sections_helper->getSectionData($section);
if (isset($params['parent']) && $params['parent']) {
do {
$section_data =& $sections_helper->getSectionData($section_data['parent']);
} while (isset($section_data['use_parent_header']) && $section_data['use_parent_header']);
}
$info = $params['info'];
switch ($info) {
case 'module_path':
if (isset($params['module']) && $params['module']) {
$module = $params['module'];
}
elseif (isset($section_data['icon_module'])) {
$module = $section_data['icon_module'];
}
else {
$module = '#session#';
}
$res = $this->ModulePath(array('module' => $module));
break;
case 'perm_section':
$res = $sections_helper->getPermSection($section);
break;
default:
$res = $section_data[$info];
}
if ($info == 'label' || isset($params['as_label'])) {
$res = $this->Application->Phrase($res);
}
return $res;
}
function PrintSection($params)
{
$section_name = $params['section_name'];
if ($section_name == '#session#') {
$section_name = $this->Application->RecallVar('section');
}
$sections_helper =& $this->Application->recallObject('SectionsHelper');
/* @var $sections_helper kSectionsHelper */
if (isset($params['use_first_child']) && $params['use_first_child']) {
$section_name = $sections_helper->getFirstChild($section_name, true);
}
$section_data =& $sections_helper->getSectionData($section_name);
$params['name'] = $this->SelectParam($params, 'name,render_as,block');
$params['section_name'] = $section_name;
$template = $section_data['url']['t'];
unset($section_data['url']['t']);
$section_data['section_url'] = $this->Application->HREF($template, '', $section_data['url']);
$ret = $this->Application->ParseBlock( array_merge_recursive2($params, $section_data) );
return $ret;
}
/**
* Used in XML drawing for tree
*
* @param Array $params
* @return string
*/
function PrintSections($params)
{
// when processings, then sort children by priority (key of children array)
$ret = '';
$section_name = $params['section_name'];
if ($section_name == '#session#') {
$section_name = $this->Application->RecallVar('section');
}
$sections_helper =& $this->Application->recallObject('SectionsHelper');
/* @var $sections_helper kSectionsHelper */
$section_data =& $sections_helper->getSectionData($section_name);
$params['name'] = $this->SelectParam($params, 'name,render_as,block');
if (!isset($section_data['children'])) {
return '';
}
$debug_mode = $this->Application->isDebugMode();
$super_admin_mode = $this->Application->RecallVar('super_admin');
ksort($section_data['children'], SORT_NUMERIC);
foreach ($section_data['children'] as $section_name) {
$params['section_name'] = $section_name;
$section_data =& $sections_helper->getSectionData($section_name);
if (isset($section_data['show_mode']) && is_numeric($section_data['show_mode'])) {
$show_mode = $section_data['show_mode'];
// if super admin section -> show in super admin mode & debug mode
$show_section = (($show_mode & smSUPER_ADMIN) == smSUPER_ADMIN) && ($super_admin_mode || $debug_mode);
if (!$show_section) {
// if section is in debug mode only && debug mode -> show
$show_section = (($show_mode & smDEBUG) == smDEBUG) && $debug_mode;
}
if (!$show_section) {
continue;
}
}
if (isset($section_data['tabs_only']) && $section_data['tabs_only']) {
$perm_status = false;
$folder_label = $section_data['label'];
ksort($section_data['children'], SORT_NUMERIC);
foreach ($section_data['children'] as $priority => $section_name) {
// if only tabs in this section & none of them have permission, then skip section too
$section_name = $sections_helper->getPermSection($section_name);
$perm_status = $this->Application->CheckPermission($section_name.'.view', 1);
if ($perm_status) {
break;
}
}
if (!$perm_status) {
// no permission for all tabs -> don't display tree node either
continue;
}
$params['section_name'] = $section_name;
$section_data =& $sections_helper->getSectionData($section_name);
$section_data['label'] = $folder_label; // use folder label in tree
$section_data['is_tab'] = 1;
}
else {
$section_name = $sections_helper->getPermSection($section_name);
if (!$this->Application->CheckPermission($section_name.'.view', 1)) continue;
}
$params['children_count'] = isset($section_data['children']) ? count($section_data['children']) : 0;
$template = $section_data['url']['t'];
unset($section_data['url']['t']);
$section_data['section_url'] = $this->Application->HREF($template, '', $section_data['url']);
$late_load = getArrayValue($section_data, 'late_load');
if ($late_load) {
$t = $late_load['t'];
unset($late_load['t']);
$section_data['late_load'] = $this->Application->HREF($t, '', $late_load);
$params['children_count'] = 99;
}
else {
$section_data['late_load'] = '';
}
$ret .= $this->Application->ParseBlock( array_merge_recursive2($params, $section_data) );
$params['section_name'] = $section_name;
}
return preg_replace("/\r\n|\n/", '', $ret);
}
function ListSectionPermissions($params)
{
$section_name = isset($params['section_name']) ? $params['section_name'] : $this->Application->GetVar('section_name');
$sections_helper =& $this->Application->recallObject('SectionsHelper');
$section_data =& $sections_helper->getSectionData($section_name);
$block_params = array_merge_recursive2($section_data, Array('name' => $params['render_as'], 'section_name' => $section_name));
$ret = '';
foreach ($section_data['permissions'] as $perm_name) {
if (preg_match('/^advanced:(.*)/', $perm_name) != $params['type']) continue;
$block_params['perm_name'] = $perm_name;
$ret .= $this->Application->ParseBlock($block_params);
}
return $ret;
}
function ModuleInclude($params)
{
foreach ($params as $param_name => $param_value) {
$params[$param_name] = replaceModuleSection($param_value);
}
$m =& $this->Application->recallObject('m_TagProcessor');
return $m->ModuleInclude($params);
}
function TodayDate($params)
{
return date($params['format']);
}
function TreeEditWarrning($params)
{
$ret = $this->Application->Phrase($params['label']);
$ret = str_replace(Array('&lt;', '&gt;', 'br/', 'br /', "\n", "\r"), Array('<', '>', 'br', 'br', '', ''), $ret);
if (getArrayValue($params, 'escape')) {
$ret = addslashes($ret);
}
$ret = str_replace('<br>', '\n', $ret);
return $ret;
}
/**
* Draws section tabs using block name passed
*
* @param Array $params
*/
function ListTabs($params)
{
$sections_helper =& $this->Application->recallObject('SectionsHelper');
$section_data =& $sections_helper->getSectionData($params['section_name']);
$ret = '';
$block_params = Array('name' => $params['render_as']);
ksort($section_data['children'], SORT_NUMERIC);
foreach ($section_data['children'] as $priority => $section_name) {
if (!$this->Application->CheckPermission($section_name.'.view', 1)) continue;
$tab_data =& $sections_helper->getSectionData($section_name);
$block_params['t'] = $tab_data['url']['t'];
$block_params['title'] = $tab_data['label'];
$block_params['main_prefix'] = $section_data['SectionPrefix'];
$ret .= $this->Application->ParseBlock($block_params);
}
return $ret;
}
/**
* Returns list of module item tabs that have view permission in current category
*
* @param Array $params
*/
function ListCatalogTabs($params)
{
$ret = '';
$special = isset($params['special']) ? $params['special'] : '';
$replace_main = isset($params['replace_m']) && $params['replace_m'];
$skip_prefixes = isset($params['skip_prefixes']) ? explode(',', $params['skip_prefixes']) : Array();
$block_params = Array('name' => $params['render_as']);
foreach ($this->Application->ModuleInfo as $module_name => $module_info) {
$prefix = $module_info['Var'];
if (in_array($prefix, $skip_prefixes) || !$this->Application->prefixRegistred($prefix) || !$this->Application->getUnitOption($prefix, 'CatalogItem')) continue;
if ($prefix == 'm' && $replace_main) $prefix = 'c';
$label = $this->Application->getUnitOption($prefix, $params['title_property']);
$block_params['title'] = $label;
$block_params['prefix'] = $prefix;
$ret .= $this->Application->ParseBlock($block_params);
}
return $ret;
}
function FCKEditor($params)
{
if (file_exists(FULL_PATH.'/core/cmseditor/fckeditor.php')) {
$editor_path = 'core/cmseditor/';
}
else {
$editor_path = 'admin/editor/cmseditor/';
}
include_once(FULL_PATH.'/'.$editor_path.'/fckeditor.php');
$oFCKeditor = new FCKeditor($params['name']);
$oFCKeditor->BasePath = BASE_PATH.'/'.$editor_path;
$oFCKeditor->Width = $params['width'] ;
$oFCKeditor->Height = $params['height'] ;
$oFCKeditor->ToolbarSet = 'Advanced' ;
$oFCKeditor->Value = '' ;
if ($this->Application->isModuleEnabled('In-Portal')) {
$config_path = $this->Application->BaseURL().'kernel/admin_templates/incs/inp_fckconfig.js';
}
else {
$config_path = $this->Application->BaseURL().'core/admin_templates/js/inp_fckconfig.js';
}
$oFCKeditor->Config = Array(
-// 'UserFilesPath' => FULL_PATH.'/kernel/user_files',
+// 'UserFilesPath' => (defined('WRITEABLE') ? WRITEABLE : FULL_PATH.'/kernel') . '/user_files/',
'ProjectPath' => BASE_PATH.'/',
'CustomConfigurationsPath' => $config_path,
// 'EditorAreaCSS' => $this->Application->BaseURL().'/themes/inportal_site/inc/inportal.css', //GetThemeCSS(),
//'StylesXmlPath' => '../../inp_styles.xml',
// 'Debug' => 1,
'Admin' => 1,
'K4' => 1,
);
return $oFCKeditor->CreateHtml();
}
/**
* Allows to construct link for opening any type of catalog item selector
*
* @param Array $params
* @return string
*/
function SelectorLink($params)
{
$mode = 'catalog';
if (isset($params['mode'])) { // {catalog, advanced_view}
$mode = $params['mode'];
unset($params['mode']);
}
$params['t'] = 'in-portal/item_selector/item_selector_'.$mode;
$default_params = Array('no_amp' => 1, 'pass' => 'all,'.$params['prefix']);
unset($params['prefix']);
$pass_through = Array();
if (isset($params['tabs_dependant'])) { // {yes, no}
$pass_through['td'] = $params['tabs_dependant'];
unset($params['tabs_dependant']);
}
if (isset($params['selection_mode'])) { // {single, multi}
$pass_through['tm'] = $params['selection_mode'];
unset($params['selection_mode']);
}
if (isset($params['tab_prefixes'])) { // {all, none, <comma separated prefix list}
$pass_through['tp'] = $params['tab_prefixes'];
unset($params['tab_prefixes']);
}
if ($pass_through) {
// add pass_through to selector url if any
$params['pass_through'] = implode(',', array_keys($pass_through));
$params = array_merge_recursive2($params, $pass_through);
}
// user can override default parameters (except pass_through of course)
$params = array_merge_recursive2($default_params, $params);
$main_processor =& $this->Application->recallObject('m_TagProcessor');
return $main_processor->T($params);
}
function TimeFrame($params)
{
$w = adodb_date('w');
$m = adodb_date('m');
$y = adodb_date('Y');
//FirstDayOfWeek is 0 for Sunday and 1 for Monday
$fdow = $this->Application->ConfigValue('FirstDayOfWeek');
if ($fdow && $w == 0) $w = 7;
$today_start = adodb_mktime(0,0,0,adodb_date('m'),adodb_date('d'),$y);
$first_day_of_this_week = $today_start - ($w - $fdow)*86400;
$first_day_of_this_month = adodb_mktime(0,0,0,$m,1,$y);
$this_quater = ceil($m/3);
$this_quater_start = adodb_mktime(0,0,0,$this_quater*3-2,1,$y);
switch ($params['type']) {
case 'last_week_start':
$timestamp = $first_day_of_this_week - 86400*7;
break;
case 'last_week_end':
$timestamp = $first_day_of_this_week - 1;
break;
case 'last_month_start':
$timestamp = $m == 1 ? adodb_mktime(0,0,0,12,1,$y-1) : adodb_mktime(0,0,0,$m-1,1,$y);
break;
case 'last_month_end':
$timestamp = $first_day_of_this_month = adodb_mktime(0,0,0,$m,1,$y) - 1;
break;
case 'last_quater_start':
$timestamp = $this_quater == 1 ? adodb_mktime(0,0,0,10,1,$y-1) : adodb_mktime(0,0,0,($this_quater-1)*3-2,1,$y);
break;
case 'last_quater_end':
$timestamp = $this_quater_start - 1;
break;
case 'last_6_months_start':
$timestamp = $m <= 6 ? adodb_mktime(0,0,0,$m+6,1,$y-1) : adodb_mktime(0,0,0,$m-6,1,$y);
break;
case 'last_year_start':
$timestamp = adodb_mktime(0,0,0,1,1,$y-1);
break;
case 'last_year_end':
$timestamp = adodb_mktime(23,59,59,12,31,$y-1);
break;
}
if (isset($params['format'])) {
$format = $params['format'];
if(preg_match("/_regional_(.*)/", $format, $regs))
{
$lang =& $this->Application->recallObject('lang.current');
$format = $lang->GetDBField($regs[1]);
}
return adodb_date($format, $timestamp);
}
return $timestamp;
}
+
+ /**
+ * Redirect to cache rebuild template, when required by installator
+ *
+ * @param Array $params
+ */
function CheckPermCache($params)
{
- if ($this->Conn->GetOne('SELECT Data FROM '.TABLE_PREFIX.'Cache WHERE VarName = \'ForcePermCacheUpdate\'')) {
+ $sql = 'SELECT Data
+ FROM '.TABLE_PREFIX.'Cache
+ WHERE VarName = "ForcePermCacheUpdate"';
+ if ($this->Application->isModuleEnabled('In-Portal') && $this->Conn->GetOne($sql)) {
$this->Application->Redirect($params['cache_update_t'], array('continue' => 1));
}
}
+
/**
* Checks if current protocol is SSL
*
* @param Array $params
* @return int
*/
function IsSSL($params)
{
return (PROTOCOL == 'https://')? 1 : 0;
}
function PrintColumns($params)
{
$picker_helper =& $this->Application->RecallObject('ColumnPickerHelper');
$picker_helper->SetGridName($this->Application->GetLinkedVar('grid_name'));
/* @var $picker_helper kColumnPickerHelper */
$main_prefix = $this->Application->RecallVar('main_prefix');
$cols = $picker_helper->LoadColumns($main_prefix);
$this->Application->Phrases->AddCachedPhrase('__FREEZER__', '-------------');
$o = '';
if (isset($params['hidden']) && $params['hidden']) {
foreach ($cols['hidden_fields'] as $col) {
$title = $this->Application->Phrase($cols['titles'][$col]);
$o .= "<option value='$col'>".$title;
}
}
else {
foreach ($cols['order'] as $col) {
if (in_array($col, $cols['hidden_fields'])) continue;
$title = $this->Application->Phrase($cols['titles'][$col]);
$o .= "<option value='$col'>".$title;
}
}
return $o;
}
/**
* Allows to set popup size (key - current template name)
*
* @param Array $params
*/
function SetPopupSize($params)
{
$width = $params['width'];
$height = $params['height'];
if ($this->Application->GetVar('ajax') == 'yes') {
// during AJAX request just output size
die($width.'x'.$height);
}
if (!$this->UsePopups($params)) {
return ;
}
$t = $this->Application->GetVar('t');
$sql = 'SELECT *
FROM '.TABLE_PREFIX.'PopupSizes
WHERE TemplateName = '.$this->Conn->qstr($t);
$popup_info = $this->Conn->GetRow($sql);
if (!$popup_info) {
// create new popup size record
$fields_hash = Array (
'TemplateName' => $t,
'PopupWidth' => $width,
'PopupHeight' => $height,
);
$this->Conn->doInsert($fields_hash, TABLE_PREFIX.'PopupSizes');
}
elseif ($popup_info['PopupWidth'] != $width || $popup_info['PopupHeight'] != $height) {
// popup found and size in tag differs from one in db -> update in db
$fields_hash = Array (
'PopupWidth' => $width,
'PopupHeight' => $height,
);
$this->Conn->doUpdate($fields_hash, TABLE_PREFIX.'PopupSizes', 'PopupId = '.$popup_info['PopupId']);
}
}
/**
* Returns popup size (by template), if not cached, then parse template to get value
*
* @param Array $params
* @return string
*/
function GetPopupSize($params)
{
$t = $this->Application->GetVar('template_name');
$sql = 'SELECT *
FROM '.TABLE_PREFIX.'PopupSizes
WHERE TemplateName = '.$this->Conn->qstr($t);
$popup_info = $this->Conn->GetRow($sql);
if (!$popup_info) {
$this->Application->InitParser();
$this->Application->ParseBlock(array('name' => $t)); // dies when SetPopupSize tag found & in ajax requrest
return '750x400'; // tag SetPopupSize not found in template -> use default size
}
return $popup_info['PopupWidth'].'x'.$popup_info['PopupHeight'];
}
function UsePopups($params)
{
return (int)$this->Application->ConfigValue('UsePopups');
}
function UseToolbarLabels($params)
{
return (int)$this->Application->ConfigValue('UseToolbarLabels');
}
/**
* Checks if debug mode enabled (optionally) and specified constant is on
*
* @param Array $params
* @return bool
*/
function ConstOn($params)
{
$constant_name = $this->SelectParam($params, 'name,const');
$debug_mode = isset($params['debug_mode']) && $params['debug_mode'] ? $this->Application->isDebugMode() : true;
return $debug_mode && constOn($constant_name);
}
/**
* Builds link to last template in main frame of admin
*
* @param Array $params
* @return string
*/
function MainFrameLink($params)
{
$persistent = isset($params['persistent']) && $params['persistent'];
if ($persistent && $this->Application->ConfigValue('RememberLastAdminTemplate')) {
// check last_template in persistent session
$last_template = $this->Application->RecallPersistentVar('last_template_popup');
}
else {
// check last_template in session
$last_template = $this->Application->RecallVar('last_template_popup'); // because of m_opener=s there
}
if (!$last_template) {
$params['persistent'] = 1;
return $persistent ? false : $this->MainFrameLink($params);
}
list($index_file, $env) = explode('|', $last_template);
$vars = $this->Application->HttpQuery->processQueryString($env, 'pass');
$recursion_templates = Array ('login', 'index', 'no_permission');
if (isset($vars['admin']) && $vars['admin'] == 1) {
// index template doesn't begin recursion on front-end (in admin frame)
$vars['m_theme'] = '';
if (isset($params['m_opener']) && $params['m_opener'] == 'r') {
// front-end link for highlighting purposes
$vars['t'] = 'index';
$vars['m_cat_id'] = $this->Application->findModule('Name', 'Proj-CMS', 'RootCat');
}
unset($recursion_templates[ array_search('index', $recursion_templates)]);
}
if (in_array($vars['t'], $recursion_templates)) {
// prevents redirect recursion OR old in-portal pages
$params['persistent'] = 1;
return $persistent ? false : $this->MainFrameLink($params);
}
$vars = array_merge_recursive2($vars, $params);
$t = $vars['t'];
unset($vars['t'], $vars['persistent']);
return $this->Application->HREF($t, '', $vars, $index_file);
}
/**
* Returns menu frame width or 200 in case, when invalid width specified in config
*
* @param Array $params
* @return string
*/
function MenuFrameWidth($params)
{
$width = (int)$this->Application->ConfigValue('MenuFrameWidth');
return $width > 0 ? $width : 200;
}
function AdminSkin($params)
{
static $style;
if (!isset($style)) {
$style = $this->Conn->GetRow('SELECT * FROM '.TABLE_PREFIX.'Skins WHERE IsPrimary = 1');
}
- $css_path = (defined('WRITEABLE') ? WRITEABLE : FULL_PATH.'/kernel').'/user_files';
- $css_url = $this->Application->BaseURL(defined('WRITEBALE_BASE') ? WRITEBALE_BASE : '/kernel').'user_files/';
+ $css_path = (defined('WRITEABLE') ? WRITEABLE : FULL_PATH.'/kernel') . '/user_files';
+ $css_url = $this->Application->BaseURL(defined('WRITEBALE_BASE') ? WRITEBALE_BASE : '/kernel') . 'user_files/';
if (isset($params['type']) && $params['type'] == 'logo') {
return $style['Logo'] ? $css_url.$style['Logo'] : '';
}
$last_compiled = $style['LastCompiled'];
$style_name = mb_strtolower( $style['Name'] );
if( file_exists($css_path.'/'.'admin-'.$style_name.'-'.$last_compiled.'.css') )
{
$ret = $css_url.'admin-'.$style_name.'-'.$last_compiled.'.css';
}
else
{
// search for previously compiled stylesheet
$last_compiled = 0;
if( $dh = opendir($css_path) )
{
while( ($file = readdir($dh)) !== false )
{
if( preg_match('/admin-(.*)-([\d]+).css/', $file, $rets) )
{
if( $rets[1] == $style_name && $rets[2] > $last_compiled ) $last_compiled = $rets[2];
}
}
closedir($dh);
}
if ($last_compiled) {
// found
$ret = $css_url.'admin-'.$style_name.'-'.$last_compiled.'.css';
}
else {
// not found (try to compile on the fly)
$object =& $this->Application->recallObject('skin.-item', null, Array ('skip_autoload' => true));
/* @var $object kDBItem */
$skin_eh =& $this->Application->recallObject('skin_EventHandler');
/* @var $skin_eh SkinEventHandler */
$object->Load(1, 'IsPrimary');
$skin_eh->Compile($object);
$ret = $css_url.'admin-'.$style_name.'-'.adodb_mktime().'.css';
}
}
if (isset($params['file_only'])) return $ret;
return '<link rel="stylesheet" rev="stylesheet" href="'.$ret.'" type="text/css" media="screen" />';
}
function PrintCompileErrors($params)
{
$errors = unserialize($this->Application->RecallVar('compile_errors'));
$o = '<table class="edit-form" style="width: 100%;" border="1"><tr><td><b>File</b></td><td><b>Line</b></td><td><b>Message</b></td></tr>';
$class = 'table-color1';
foreach ($errors as $an_error) {
$f = str_replace(FULL_PATH, '', $an_error['file']);
$o .= "<tr class=\'$class\'><td>{$f}</td><td>{$an_error['line']}</td><td>{$an_error['msg']}</td></tr>";
$class = $class == 'table-color1' ? 'table-color2' : 'table-color1';
}
$o .= '</table>';
$this->Application->RemoveVar('compile_errors');
return $o;
}
function ExportData($params)
{
$export_helper =& $this->Application->recallObject('CSVHelper');
/* @var $export_helper kCSVHelper */
$result = $export_helper->ExportData( $this->SelectParam($params, 'var,name,field') );
return ($result === false) ? '' : $result;
}
function ImportData($params)
{
$import_helper =& $this->Application->recallObject('CSVHelper');
/* @var $import_helper kCSVHelper */
$result = $import_helper->ImportData( $this->SelectParam($params, 'var,name,field') );
return ($result === false) ? '' : $result;
}
function PrintCSVNotImportedLines($params)
{
$import_helper =& $this->Application->recallObject('CSVHelper');
/* @var $import_helper kCSVHelper */
return $import_helper->GetNotImportedLines();
}
/**
* Returns input field name to
* be placed on form (for correct
* event processing)
*
* @param Array $params
* @return string
* @access public
*/
function InputName($params)
{
list($id, $field) = $this->prepareInputName($params);
$ret = $this->getPrefixSpecial().'[0]['.$field.']'; // 0 always, as has no idfield
if( getArrayValue($params, 'as_preg') ) $ret = preg_quote($ret, '/');
return $ret;
}
/**
* Returns list of all backup file dates formatted
* in passed block
*
* @param Array $params
* @return string
* @access public
*/
function PrintBackupDates($params)
{
$datearray = $this->getDirList($this->Application->ConfigValue('Backup_Path'));
$ret = '';
foreach($datearray as $key => $value)
{
$params['backuptimestamp'] = $value['filedate'];
$params['backuptime'] = date('F j, Y, g:i a', $value['filedate']);
$params['backupsize'] = round($value['filesize']/1024/1024, 2); // MBytes
$ret .= $this->Application->ParseBlock($params);
}
return $ret;
}
function getDirList ($dirName)
{
$fileinfo = array();
$d = dir($dirName);
while($entry = $d->read())
{
if ($entry != "." && $entry != "..")
{
if (!is_dir($dirName."/".$entry) && eregi("dump",$entry))
{
$fileinfo[]= Array('filedate' => $this->chopchop($entry),
'filesize' => filesize($dirName. '/'. $entry)
);
}
}
}
$d->close();
rsort($fileinfo);
return $fileinfo;
}
function chopchop ($filename)
{
$p = pathinfo($filename);
$ext = '.'.$p["extension"];
$filename;
$filename= ereg_replace("dump","",$filename);
$filename= ereg_replace($ext,"",$filename);
return $filename;
}
function PrintPHPinfo($params)
{
ob_start();
phpinfo();
$php_info .= ob_get_contents();
ob_end_clean();
$php_info = str_replace(" width=\"600\"", " width=\"100%\" align=\"center\"", $php_info);
$php_info = str_replace("</body>", "", $php_info);
$php_info = str_replace("<body>", "", $php_info);
$php_info = str_replace("</html>", "", $php_info);
$php_info = str_replace("<html>", "", $php_info);
$php_info = str_replace("</head>", "", $php_info);
$php_info = str_replace("<head>", "", $php_info);
$offset = strpos($php_info, "<table");
$php_info = substr($php_info, $offset);
$php_info = '<style type="text/css">
body {background-color: #ffffff; color: #000000;}
body, td, th, h1, h2 {font-family: sans-serif;}
pre {margin: 0px; font-family: monospace;}
a:link {color: #000099; text-decoration: none; background-color: #ffffff;}
a:hover {text-decoration: underline;}
table {border-collapse: collapse;}
.center {text-align: center;}
.center table { margin-left: auto; margin-right: auto; text-align: left;}
.center th { text-align: center !important; }
td, th { border: 1px solid #000000; font-size: 75%; vertical-align: baseline;}
h1 {font-size: 150%;}
h2 {font-size: 125%;}
.p {text-align: left;}
.e {background-color: #ccccff; font-weight: bold; color: #000000;}
.h {background-color: #9999cc; font-weight: bold; color: #000000;}
.v {background-color: #cccccc; color: #000000;}
i {color: #666666; background-color: #cccccc;}
hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000000;}
</style>'.$php_info;
return $php_info;
}
function PrintSqlCols($params)
{
$a_data = unserialize($this->Application->GetVar('sql_rows'));
$ret = '';
$block = $params['render_as'];
foreach ($a_data AS $a_row)
{
foreach ($a_row AS $col => $value)
{
$ret .= $this->Application->ParseBlock(Array('name'=>$block, 'value'=>$col));
}
break;
}
return $ret;
}
function PrintSqlRows($params)
{
$a_data = unserialize($this->Application->GetVar('sql_rows'));
$ret = '';
$block = $params['render_as'];
foreach ($a_data AS $a_row)
{
$cells = '';
foreach ($a_row AS $col => $value)
{
$cells .= '<td>'.$value.'</td>';
}
$ret .= $this->Application->ParseBlock(Array('name'=>$block, 'cells'=>$cells));
}
return $ret;
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/admin/admin_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.43.2.14
\ No newline at end of property
+1.43.2.15
\ No newline at end of property
Index: branches/RC/core/units/languages/import_xml.php
===================================================================
--- branches/RC/core/units/languages/import_xml.php (revision 10831)
+++ branches/RC/core/units/languages/import_xml.php (revision 10832)
@@ -1,427 +1,496 @@
<?php
define('LANG_OVERWRITE_EXISTING', 1);
define('LANG_SKIP_EXISTING', 2);
class LangXML_Parser extends kBase {
/**
* Path to current node beeing processed
*
* @var Array
*/
var $path = Array();
/**
* Connection to database
*
* @var kDBConnection
*/
var $Conn = null;
/**
* Fields of language currently beeing processed
*
* @var Array
*/
var $current_language = Array();
/**
* Fields of phrase currently beeing processed
*
* @var Array
*/
var $current_phrase = Array();
/**
* Fields of event currently beeing processed
*
* @var Array
*/
var $current_event = Array();
/**
* Event type + name mapping to id (from system)
*
* @var Array
*/
var $events_hash = Array();
/**
* Phrase types allowed for import/export operations
*
* @var Array
*/
var $phrase_types_allowed = Array();
/**
* Modules allowed for export (import in development)
*
* @var Array
*/
var $modules_allowed = Array();
/**
* Current Language in import
*
* @var LanguagesItem
*/
var $lang_object = null;
var $tables = Array();
var $ip_address = '';
var $import_mode = LANG_SKIP_EXISTING;
var $Encoding = 'base64';
+ /**
+ * Language IDs, that were imported
+ *
+ * @var Array
+ */
+ var $_languages = Array ();
+
function LangXML_Parser($temp_mode = true)
{
parent::kBase();
$this->Conn =& $this->Application->GetADODBConnection();
- if ($temp_mode) {
- $this->Application->SetVar('lang_mode', 't');
- $this->tables['lang'] = $this->prepareTempTable('lang');
- $this->tables['phrases'] = $this->prepareTempTable('phrases');
- $this->tables['emailmessages'] = $this->prepareTempTable('emailmessages');
- }
- else {
- $this->tables['lang'] = $this->Application->getUnitOption('lang', 'TableName');
- $this->tables['phrases'] = $this->Application->getUnitOption('phrases', 'TableName');
- $this->tables['emailmessages'] = $this->Application->getUnitOption('emailmessages', 'TableName');
- }
-
- $this->lang_object =& $this->Application->recallObject('lang.imp', null, Array('skip_autoload' => true));
+ $this->lang_object =& $this->Application->recallObject('lang.import', null, Array ('skip_autoload' => true));
- $sql = 'SELECT EventId, CONCAT(Event,"_",Type) AS EventMix FROM '.TABLE_PREFIX.'Events';
+ $sql = 'SELECT EventId, CONCAT(Event,"_",Type) AS EventMix
+ FROM ' . TABLE_PREFIX . 'Events';
$this->events_hash = $this->Conn->GetCol($sql, 'EventMix');
$this->ip_address = getenv('HTTP_X_FORWARDED_FOR') ? getenv('HTTP_X_FORWARDED_FOR') : getenv('REMOTE_ADDR');
}
function SetEncoding($enc)
{
$this->Encoding = $enc;
}
- function renameTable($table_prefix, $new_name)
+ function _initImportTables($drop_only = false)
{
- $this->Conn->Query('ALTER TABLE '.$this->tables[$table_prefix].' RENAME '.$new_name);
- $this->tables[$table_prefix] = $new_name;
+ $this->tables['phrases'] = $this->prepareTempTable('phrases', $drop_only);
+ $this->tables['emailmessages'] = $this->prepareTempTable('emailmessages', $drop_only);
}
/**
* Create temp table for prefix, if table already exists, then delete it and create again
*
* @param string $prefix
*/
- function prepareTempTable($prefix)
+ function prepareTempTable($prefix, $drop_only = false)
{
$idfield = $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) );
- $sql = 'CREATE TABLE %s SELECT * FROM %s WHERE 0';
- $this->Conn->Query( sprintf($sql, $temp_table, $table) );
+ if (!$drop_only) {
+ $sql = 'CREATE TABLE %s SELECT * FROM %s WHERE 0';
+ $this->Conn->Query( sprintf($sql, $temp_table, $table) );
- $sql = 'ALTER TABLE %1$s CHANGE %2$s %2$s INT(11) NOT NULL';
- $this->Conn->Query( sprintf($sql, $temp_table, $idfield) );
+ $sql = 'ALTER TABLE %1$s CHANGE %2$s %2$s INT(11) NOT NULL';
+ $this->Conn->Query( sprintf($sql, $temp_table, $idfield) );
+ }
return $temp_table;
}
function Parse($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;
+ $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;
- //if (in_array('In-Portal',)
-
$xml_parser = xml_parser_create();
xml_set_element_handler( $xml_parser, Array(&$this, 'startElement'), Array(&$this, 'endElement') );
xml_set_character_data_handler( $xml_parser, Array(&$this, 'characterData') );
$fdata = file_get_contents($filename);
$ret = xml_parse($xml_parser, $fdata);
xml_parser_free($xml_parser); // clean up the parser object
- $this->Application->SetVar('lang_mode', '');
+ // copy data from temp tables to live
+ foreach ($this->_languages as $language_id) {
+ $this->_performUpgrade($language_id, 'phrases', 'Phrase');
+ $this->_performUpgrade($language_id, 'emailmessages', 'EventId');
+ }
+
+ $this->_initImportTables(true);
+
return $ret;
}
+ /**
+ * Performs upgrade of given language pack part
+ *
+ * @param int $language_id
+ * @param string $prefix
+ * @param string $unique_field
+ */
+ function _performUpgrade($language_id, $prefix, $unique_field)
+ {
+ $live_records = $this->_getTableData($language_id, $prefix, $unique_field, false);
+ $temp_records = $this->_getTableData($language_id, $prefix, $unique_field, true);
+
+ if ($this->import_mode == LANG_OVERWRITE_EXISTING) {
+ // remove existing records before copy
+ $common_records = array_intersect($temp_records, $live_records);
+ if ($common_records) {
+ $live_records = array_diff($live_records, $common_records); // remove overlaping records
+ $common_records = array_map(Array(&$this->Conn, 'qstr'), $common_records);
+
+ $sql = 'DELETE FROM ' . $this->Application->getUnitOption($prefix, 'TableName') . '
+ WHERE (LanguageId = ' . $language_id . ') AND (' . $unique_field . ' IN (' . implode(',', $common_records) . '))';
+ $this->Conn->Query($sql);
+ }
+ }
+
+ $temp_records = array_diff($temp_records, $live_records);
+
+ if (!$temp_records) {
+ // no new records found in temp table while comparing it to live table
+ return ;
+ }
+
+ $temp_records = array_map(Array(&$this->Conn, 'qstr'), $temp_records);
+
+ $sql = 'INSERT INTO ' . $this->Application->getUnitOption($prefix, 'TableName') . '
+ SELECT *
+ FROM ' . $this->tables[$prefix] . '
+ WHERE (LanguageId = ' . $language_id . ')';
+
+ if ($live_records) {
+ // subsctract live records from temp table during coping
+ $sql .= ' AND (' . $unique_field . ' IN (' . implode(',', $temp_records) . '))';
+ }
+
+ $this->Conn->Query($sql);
+ }
+
+ function _getTableData($language_id, $prefix, $unique_field, $temp_mode = false)
+ {
+ $table_name = $this->Application->getUnitOption($prefix, 'TableName');
+
+ if ($temp_mode) {
+ $table_name = $this->Application->GetTempName($table_name, 'prefix:' . $prefix);
+ }
+
+ $sql = 'SELECT ' . $unique_field . '
+ FROM ' . $table_name . '
+ WHERE LanguageId = ' . $language_id;
+ return $this->Conn->GetCol($sql);
+ }
+
function startElement(&$parser, $element, $attributes)
{
array_push($this->path, $element);
$path = implode(' ',$this->path);
//check what path we are in
$this->LastLine = xml_get_current_line_number($parser);
$this->SecondData = false;
- switch($path)
- {
+ switch ($path) {
case 'LANGUAGES LANGUAGE':
- $this->current_language = Array('PackName' => $attributes['PACKNAME'], 'LocalName' => $attributes['PACKNAME'], 'Encoding' => $attributes['ENCODING']);
-
- $sql = 'SELECT %s FROM %s WHERE PackName = %s';
- $sql = sprintf( $sql,
- $this->lang_object->IDField,
- $this->Application->GetLiveName($this->lang_object->TableName),
- $this->Conn->qstr($this->current_language['PackName']) );
+ $this->current_language = Array (
+ 'PackName' => $attributes['PACKNAME'],
+ 'LocalName' => $attributes['PACKNAME'],
+ 'Encoding' => $attributes['ENCODING'],
+ );
+
+ $sql = 'SELECT ' . $this->lang_object->IDField . '
+ FROM ' . $this->lang_object->TableName . '
+ WHERE PackName = ' . $this->Conn->qstr( $this->current_language['PackName'] );
$language_id = $this->Conn->GetOne($sql);
- if($language_id)
- {
+
+ if ($language_id) {
$this->current_language['LanguageId'] = $language_id;
- $this->lang_object->SwitchToLive();
$this->lang_object->Load($language_id);
}
break;
case 'LANGUAGES LANGUAGE PHRASES':
case 'LANGUAGES LANGUAGE EVENTS':
if( !getArrayValue($this->current_language,'Charset') ) $this->current_language['Charset'] = 'iso-8859-1';
$this->lang_object->SetFieldsFromHash($this->current_language);
- if( !getArrayValue($this->current_language,'LanguageId') )
- {
+ if ( !getArrayValue($this->current_language, 'LanguageId') ) {
$this->lang_object->SetDBField('Enabled', STATUS_ACTIVE);
if ($this->lang_object->Create()) {
$this->current_language['LanguageId'] = $this->lang_object->GetID();
if (defined('IS_INSTALL') && IS_INSTALL) {
// language created during install becomes admin interface language
$this->lang_object->setPrimary(true, true);
}
}
}
- elseif($this->import_mode == LANG_OVERWRITE_EXISTING)
- {
- $this->lang_object->TableName = $this->Application->getUnitOption($this->lang_object->Prefix, 'TableName');
+ elseif ($this->import_mode == LANG_OVERWRITE_EXISTING) {
+ // update live language record based on data from xml
$this->lang_object->Update();
}
+
+ $language_id = $this->lang_object->GetID();
+ if (!in_array($language_id, $this->_languages)) {
+ $this->_languages[] = $language_id;
+ }
break;
case 'LANGUAGES LANGUAGE PHRASES PHRASE':
$phrase_module = getArrayValue($attributes,'MODULE');
if(!$phrase_module) $phrase_module = 'In-Portal';
$this->current_phrase = Array( 'LanguageId' => $this->current_language['LanguageId'],
'Phrase' => $attributes['LABEL'],
'PhraseType' => $attributes['TYPE'],
'PhraseId' => 0,
'Module' => $phrase_module,
'LastChanged' => adodb_mktime(),
'LastChangeIP' => $this->ip_address,
'Translation' => '');
break;
case 'LANGUAGES LANGUAGE EVENTS EVENT':
$this->current_event = Array( 'EmailMessageId'=> 0,
'LanguageId' => $this->current_language['LanguageId'],
'EventId' => $this->events_hash[ $attributes['EVENT'].'_'.$attributes['TYPE'] ],
'MessageType' => $attributes['MESSAGETYPE'],
'Template' => '');
break;
}
// if($path == 'SHIPMENT PACKAGE')
}
function characterData(&$parser, $line)
{
$line = trim($line);
if(!$line) return ;
$path = join (' ',$this->path);
$language_nodes = Array('DATEFORMAT','TIMEFORMAT','INPUTDATEFORMAT','INPUTTIMEFORMAT','DECIMAL','THOUSANDS','CHARSET','UNITSYSTEM');
$node_field_map = Array('LANGUAGES LANGUAGE DATEFORMAT' => 'DateFormat',
'LANGUAGES LANGUAGE TIMEFORMAT' => 'TimeFormat',
'LANGUAGES LANGUAGE INPUTDATEFORMAT'=> 'InputDateFormat',
'LANGUAGES LANGUAGE INPUTTIMEFORMAT'=> 'InputTimeFormat',
'LANGUAGES LANGUAGE DECIMAL' => 'DecimalPoint',
'LANGUAGES LANGUAGE THOUSANDS' => 'ThousandSep',
'LANGUAGES LANGUAGE CHARSET' => 'Charset',
'LANGUAGES LANGUAGE UNITSYSTEM' => 'UnitSystem');
if( in_array( end($this->path), $language_nodes) )
{
$this->current_language[ $node_field_map[$path] ] = $line;
}
else
{
switch($path)
{
case 'LANGUAGES LANGUAGE PHRASES PHRASE':
if( isset($this->phrase_types_allowed[ $this->current_phrase['PhraseType'] ]) )
{
$this->current_phrase['Translation'] .= $line;
}
break;
case 'LANGUAGES LANGUAGE EVENTS EVENT':
$cur_line = xml_get_current_line_number($parser);
if ($cur_line != $this->LastLine) {
$this->current_event['Template'] .= str_repeat("\r\n", ($cur_line - $this->LastLine) );
$this->LastLine = $cur_line;
}
$this->current_event['Template'] .= $line;
$this->SecondData = true;
break;
}
}
}
function endElement(&$parser, $element)
{
$path = implode(' ',$this->path);
switch($path)
{
case 'LANGUAGES LANGUAGE PHRASES PHRASE':
if( isset($this->phrase_types_allowed[ $this->current_phrase['PhraseType'] ]) )
{
if ($this->current_language['Encoding'] == 'plain') {
// nothing to decode!
}
else {
$this->current_phrase['Translation'] = base64_decode($this->current_phrase['Translation']);
}
$this->Conn->doInsert($this->current_phrase, $this->tables['phrases']);
}
break;
case 'LANGUAGES LANGUAGE EVENTS EVENT':
if ($this->current_language['Encoding'] == 'plain') {
$this->current_event['Template'] = rtrim($this->current_event['Template']);
// nothing to decode!
}
else {
$this->current_event['Template'] = base64_decode($this->current_event['Template']);
}
$this->Conn->doInsert($this->current_event, $this->tables['emailmessages']);
break;
}
array_pop($this->path);
}
/**
* Creates XML file with exported language data
*
* @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 Create($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) );
$this->events_hash = array_flip($this->events_hash);
$lang_table = $this->Application->getUnitOption('lang','TableName');
$phrases_table = $this->Application->getUnitOption('phrases','TableName');
$emailevents_table = $this->Application->getUnitOption('emailmessages','TableName');
$mainevents_table = $this->Application->getUnitOption('emailevents','TableName');
$phrase_tpl = "\t\t\t".'<PHRASE Label="%s" Module="%s" Type="%s">%s</PHRASE>'."\n";
$event_tpl = "\t\t\t".'<EVENT MessageType="%s" Event="%s" Type="%s">%s</EVENT>'."\n";
$sql = 'SELECT * FROM %s WHERE LanguageId = %s';
$ret = '<LANGUAGES>'."\n";
foreach($language_ids as $language_id)
{
// languages
$row = $this->Conn->GetRow( sprintf($sql, $lang_table, $language_id) );
$ret .= "\t".'<LANGUAGE PackName="'.$row['PackName'].'" Encoding="'.$this->Encoding.'"><DATEFORMAT>'.$row['DateFormat'].'</DATEFORMAT>';
$ret .= '<TIMEFORMAT>'.$row['TimeFormat'].'</TIMEFORMAT><INPUTDATEFORMAT>'.$row['InputDateFormat'].'</INPUTDATEFORMAT>';
$ret .= '<INPUTTIMEFORMAT>'.$row['InputTimeFormat'].'</INPUTTIMEFORMAT><DECIMAL>'.$row['DecimalPoint'].'</DECIMAL>';
$ret .= '<THOUSANDS>'.$row['ThousandSep'].'</THOUSANDS><CHARSET>'.$row['Charset'].'</CHARSET>';
$ret .= '<UNITSYSTEM>'.$row['UnitSystem'].'</UNITSYSTEM>'."\n";
// phrases
$phrases_sql = 'SELECT * FROM '.$phrases_table.' WHERE LanguageId = %s AND PhraseType IN (%s) AND Module IN (%s) ORDER BY Phrase';
if( in_array('In-Portal',$module_ids) ) array_push($module_ids, ''); // for old language packs
$rows = $this->Conn->Query( sprintf($phrases_sql,$language_id, implode(',',$phrase_types), '\''.implode('\',\'',$module_ids).'\'' ) );
if($rows)
{
$ret .= "\t\t".'<PHRASES>'."\n";
foreach($rows as $row)
{
$data = $this->Encoding == 'base64' ? base64_encode($row['Translation']) : '<![CDATA['.$row['Translation'].']]>';
$ret .= sprintf($phrase_tpl, $row['Phrase'], $row['Module'], $row['PhraseType'], $data );
}
$ret .= "\t\t".'</PHRASES>'."\n";
}
// email events
if( in_array('In-Portal',$module_ids) ) unset( $module_ids[array_search('',$module_ids)] ); // for old language packs
$module_sql = preg_replace('/(.*) OR $/', '\\1', preg_replace('/(.*),/U', 'INSTR(Module,\'\\1\') OR ', implode(',', $module_ids).',' ) );
$sql = 'SELECT EventId FROM '.$mainevents_table.' WHERE '.$module_sql;
$event_ids = $this->Conn->GetCol($sql);
if($event_ids)
{
$ret .= "\t\t".'<EVENTS>'."\n";
$event_sql = ' SELECT em.*
FROM '.$emailevents_table.' em
LEFT JOIN '.$mainevents_table.' e ON e.EventId = em.EventId
WHERE em.LanguageId = %s AND em.EventId IN (%s)
ORDER BY e.Event, e.Type';
$rows = $this->Conn->Query( sprintf($event_sql,$language_id, $event_ids ? implode(',',$event_ids) : '' ) );
foreach($rows as $row)
{
list($event_name, $event_type) = explode('_', $this->events_hash[ $row['EventId'] ] );
$data = $this->Encoding == 'base64' ? base64_encode($row['Template']) : '<![CDATA['.$row['Template'].']]>';
$ret .= sprintf($event_tpl, $row['MessageType'], $event_name, $event_type, $data );
}
$ret .= "\t\t".'</EVENTS>'."\n";
}
$ret .= "\t".'</LANGUAGE>'."\n";
}
$ret .= '</LANGUAGES>';
fwrite($fp, $ret);
fclose($fp);
return true;
}
/**
* Creates new instance of LangXML_Parser class
*
* @param int $type
* @return LangXML_Parser
*/
function &makeClass($temp_mode = true)
{
$result = new LangXML_Parser($temp_mode);
return $result;
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/languages/import_xml.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.26.2.1
\ No newline at end of property
+1.26.2.2
\ No newline at end of property
Index: branches/RC/core/units/languages/languages_event_handler.php
===================================================================
--- branches/RC/core/units/languages/languages_event_handler.php (revision 10831)
+++ branches/RC/core/units/languages/languages_event_handler.php (revision 10832)
@@ -1,484 +1,481 @@
<?php
class LanguagesEventHandler extends kDBEventHandler
{
/**
* Allows to override standart permission mapping
*
*/
function mapPermissions()
{
parent::mapPermissions();
$permissions = Array(
'OnChangeLanguage' => Array('self' => true),
'OnSetPrimary' => Array('self' => 'advanced:set_primary|add|edit'),
'OnImportLanguage' => Array('self' => 'advanced:import'),
'OnImportProgress' => Array('self' => 'advanced:import'),
'OnExportLanguage' => Array('self' => 'advanced:export'),
'OnExportProgress' => Array('self' => 'advanced:export'),
'OnReflectMultiLingualFields' => Array ('self' => 'view'),
'OnItemBuild' => Array('self' => true),
);
$this->permMapping = array_merge($this->permMapping, $permissions);
}
/**
* [HOOK] Updates table structure on new language adding/removing language
*
* @param kEvent $event
*/
function OnReflectMultiLingualFields(&$event)
{
if ($this->Application->GetVar('ajax') == 'yes') {
$event->status = erSTOP;
}
$ml_helper =& $this->Application->recallObject('kMultiLanguageHelper');
/* @var $ml_helper kMultiLanguageHelper */
$this->Application->UnitConfigReader->ReReadConfigs();
foreach ($this->Application->UnitConfigReader->configData as $prefix => $config_data) {
$ml_helper->createFields($prefix);
}
}
/**
* Allows to set selected language as primary
*
* @param kEvent $event
*/
function OnSetPrimary(&$event)
{
if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
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->setPrimary();
}
}
/**
* [HOOK] Reset primary status of other languages if we are saving primary language
*
* @param kEvent $event
*/
function OnUpdatePrimary(&$event)
{
$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->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
}
}
/**
* Occurse before updating item
*
* @param kEvent $event
* @access public
*/
function OnBeforeItemUpdate(&$event)
{
$object =& $event->getObject();
$status_field = array_shift( $this->Application->getUnitOption($event->Prefix, 'StatusField') );
if ($object->GetDBField('PrimaryLang') == 1 && $object->GetDBField($status_field) == 0) {
$object->SetDBField($status_field, 1);
}
}
/**
* Shows only enabled languages on front
*
* @param kEvent $event
*/
function SetCustomQuery(&$event)
{
if($event->Special == 'enabled')
{
$object =& $event->getObject();
$object->addFilter('enabled_filter', '%1$s.Enabled = 1');
}
}
/**
* Copy labels from another language
*
* @param kEvent $event
*/
function OnCopyLabels(&$event)
{
$object =& $event->getObject();
$from_lang_id = $object->GetDBField('CopyFromLanguage');
if( ($event->MasterEvent->status == erSUCCESS) && $object->GetDBField('CopyLabels') == 1 && ($from_lang_id > 0) )
{
$lang_id = $object->GetID();
// 1. phrases import
$phrases_live = $this->Application->getUnitOption('phrases','TableName');
$phrases_temp = $this->Application->GetTempName($phrases_live, 'prefix:phrases');
$sql = 'INSERT INTO '.$phrases_temp.'
SELECT Phrase, Translation, PhraseType, 0-PhraseId, '.$lang_id.', '.adodb_mktime().', "", Module
FROM '.$phrases_live.'
WHERE LanguageId='.$from_lang_id;
$this->Conn->Query($sql);
// 2. events import
$em_table_live = $this->Application->getUnitOption('emailmessages','TableName');
$em_table_temp = $this->Application->GetTempName($em_table_live, 'prefix:emailmessages');
$sql = 'SELECT * FROM '.$em_table_live.' WHERE LanguageId = '.$from_lang_id;
$email_messages = $this->Conn->Query($sql);
if($email_messages)
{
$id = $this->Conn->GetOne('SELECT MIN(EmailMessageId) FROM '.$em_table_live);
if($id > 0) $id = 0;
$id--;
$sqls = Array();
foreach($email_messages as $email_message)
{
$sqls[] = $id.','.$this->Conn->qstr($email_message['Template']).','.$this->Conn->qstr($email_message['MessageType']).','.$lang_id.','.$email_message['EventId'];
$id--;
}
$sql = 'INSERT INTO '.$em_table_temp.'(EmailMessageId,Template,MessageType,LanguageId,EventId) VALUES ('.implode('),(',$sqls).')';
$this->Conn->Query($sql);
}
$object->SetDBField('CopyLabels', 0);
}
}
/**
* Prepare temp tables for creating new item
* but does not create it. Actual create is
* done in OnPreSaveCreated
*
* @param kEvent $event
*/
function OnPreCreate(&$event)
{
parent::OnPreCreate($event);
$object =& $event->getObject();
$object->SetDBField('CopyLabels', 1);
$live_table = $this->Application->getUnitOption($event->Prefix, 'TableName');
$primary_lang_id = $this->Conn->GetOne('SELECT '.$object->IDField.' FROM '.$live_table.' WHERE PrimaryLang = 1');
$object->SetDBField('CopyFromLanguage', $primary_lang_id);
}
function OnChangeLanguage(&$event)
{
$this->Application->SetVar('m_lang', $this->Application->GetVar('language'));
//$this->Application->LinkVar('language', 'm_lang');
}
/**
* 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)) {
return;
}
$items_info = $this->Application->GetVar('phrases_import');
- if($items_info)
- {
- list($id,$field_values) = each($items_info);
+ if ($items_info) {
+ list ($id, $field_values) = each($items_info);
$object =& $this->Application->recallObject('phrases.import', 'phrases', Array('skip_autoload' => true) );
$object->SetFieldsFromHash($field_values);
$filename = getArrayValue($field_values, 'LangFile', 'tmp_name');
- if( filesize($filename) )
- {
- $modules = getArrayValue($field_values,'Module');
+ if ( filesize($filename) ) {
$lang_xml =& $this->Application->recallObject('LangXML');
/* @var $lang_xml LangXML_Parser */
- $lang_xml->Parse($filename, $field_values['PhraseType'], $modules, $field_values['ImportOverwrite']);
- $event->redirect = true;
- $event->SetRedirectParams( Array('lang_event' => 'OnImportProgress', 'pass' => 'all,lang', 'mode'=>$field_values['ImportOverwrite']) );
+ $modules = getArrayValue($field_values, 'Module');
+ $lang_xml->Parse($filename, $field_values['PhraseType'], $modules, $field_values['ImportOverwrite'] ? LANG_OVERWRITE_EXISTING : LANG_SKIP_EXISTING);
+
+ $event->redirect = $this->Application->GetVar('next_template');
}
- else
- {
+ else {
$object =& $this->Application->recallObject('phrases.import');
$object->SetError('LangFile', 'la_empty_file', 'la_EmptyFile');
- $event->redirect = false;
+ $event->status = erFAIL;
}
}
}
/**
* Copies imported from xml file from temp table to live table
*
* @param kEvent $event
*/
function OnImportProgress(&$event)
{
define('IMPORT_BY', 300); // import this much records per step
$template_name = 'regional/languages_import_step2';
$import_mode = (int)$this->Application->GetVar('mode'); // 1 - overwrite existing phrases, 0 - don't overwrite existing phrases
$import_source = (int)$this->Application->GetVar('source');
$import_steps = Array(0 => 'lang', 1 => 'phrases', 2 => 'emailmessages', 3 => 'finish');
$key_fields = Array(0 => 'PackName', 1 => 'Phrase', 2 => 'EventId'); // by what field should we search record match
$import_titles = Array(0 => 'la_ImportingLanguages', 1 => 'la_ImportingPhrases', 2 => 'la_ImportingEmailEvents', 3 => 'la_Done');
// --- BEFORE ---
$import_prefix = $import_steps[$import_source];
$import_start = (int)$this->Application->GetVar('start');
$id_field = $this->Application->getUnitOption($import_prefix,'IDField');
$dst_table = $this->Application->getUnitOption($import_prefix,'TableName');
$src_table = $this->Application->GetTempName($dst_table);
$import_total = $this->Application->GetVar('total');
if(!$import_total) $import_total = $this->Conn->GetOne('SELECT COUNT(*) FROM '.$src_table);
// --- AFTER ---
if($import_start == $import_total)
{
$import_source++;
$import_prefix = $import_steps[$import_source];
if($import_prefix == 'finish')
{
$event->SetRedirectParam('opener','u');
return true;
}
$import_start = 0;
$id_field = $this->Application->getUnitOption($import_prefix,'IDField');
$dst_table = $this->Application->getUnitOption($import_prefix,'TableName');
$src_table = $this->Application->GetTempName($dst_table);
$import_total = $this->Conn->GetOne('SELECT COUNT(*) FROM '.$src_table);
}
if($import_total > 0)
{
$done_percent = ($import_start * 100) / $import_total;
}
else
{
$done_percent = 100;
}
$block_params = Array( 'name' => $template_name,
'title' => $import_titles[$import_source],
'percent_done' => $done_percent,
'percent_left' => 100 - $done_percent);
$this->Application->InitParser();
$this->Application->setUnitOption('phrases','AutoLoad',false);
echo $this->Application->ParseBlock($block_params);
//break out of buffering
$buffer_content = Array();
while (ob_get_level()) {
$buffer_content[] = ob_get_clean();
}
$ret = implode('', array_reverse($buffer_content));
echo $ret;
flush();
$sql = 'SELECT * FROM %s LIMIT %s,%s';
$rows = $this->Conn->Query( sprintf($sql,$src_table,$import_start,IMPORT_BY) );
$values_sql = '';
// if found and mode = 1 (overwrite)
$search_sql = 'SELECT '.$id_field.' FROM '.$dst_table.' WHERE '.$key_fields[$import_source].' = %s AND LanguageId = %s';
$update_sql = 'UPDATE '.$dst_table.' SET %s WHERE '.$id_field.' = %s';
foreach($rows as $row)
{
$tmp_sql = sprintf($search_sql, $this->Conn->qstr($row[ $key_fields[$import_source] ]), $row['LanguageId'] );
$tmp_id = $this->Conn->GetOne($tmp_sql);
if($tmp_id > 0 && $import_mode == 1)
{
// update
$update_fields = '';
foreach($row as $field_name => $field_value)
{
if($field_name == $id_field) continue;
$update_fields .= '`'.$field_name.'` = '.$this->Conn->qstr($field_value).',';
}
$update_fields = preg_replace('/(.*),$/', '\\1', $update_fields);
$this->Conn->Query( sprintf($update_sql, $update_fields, $tmp_id) );
}
elseif(!$tmp_id)
{
$values_sql .= '(';
foreach($row as $field_value)
{
$values_sql .= $this->Conn->qstr($field_value).',';
}
$values_sql = preg_replace('/(.*),$/', '\\1', $values_sql).'),';
}
}
if($values_sql)
{
$fields_sql = '';
$fields = array_keys( $this->Application->getUnitOption($import_prefix,'Fields') );
foreach($fields as $field_name)
{
$fields_sql .= '`'.$field_name.'`,';
}
$fields_sql = preg_replace('/(.*),$/', '\\1', $fields_sql);
$values_sql = preg_replace('/(.*),$/', '\\1', $values_sql);
$sql = sprintf('INSERT INTO %s (%s) VALUES %s', $dst_table, $fields_sql, $values_sql);
$this->Conn->Query($sql);
}
$event->setRedirectParams( Array('lang_event' => 'OnImportProgress', 'pass' => 'all,lang', 'start' => $import_start += count($rows), 'total' => $import_total, 'source' => $import_source, 'mode' => $import_mode) );
}
/**
* 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)) {
return;
}
$this->Application->setUnitOption('phrases','AutoLoad',false);
$this->StoreSelectedIDs($event);
$this->Application->StoreVar('export_language_ids', implode(',', $this->getSelectedIDs($event)) );
$event->setRedirectParams( Array('m_opener'=>'d','phrases.export_event'=>'OnNew','pass'=>'all,phrases.export') );
$event->redirect = 'regional/languages_export';
}
/**
* 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', 'phrases', Array('skip_autoload' => true) );
$object->SetFieldsFromHash($field_values);
$lang_ids = explode(',', $this->Application->RecallVar('export_language_ids') );
if( !getArrayValue($field_values,'LangFile') )
{
$object->SetError('LangFile', 'required');
$event->redirect = false;
return false;
}
if( !is_writable(EXPORT_PATH) )
{
$object->SetError('LangFile', 'write_error', 'la_ExportFolderNotWritable');
$event->redirect = false;
return false;
}
if( substr($field_values['LangFile'], -5) != '.lang' ) $field_values['LangFile'] .= '.lang';
$filename = EXPORT_PATH.'/'.$field_values['LangFile'];
$lang_xml =& $this->Application->recallObject('LangXML');
if ($object->GetDBField('DoNotEncode')) {
$lang_xml->SetEncoding('plain');
}
$lang_xml->Create($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
*/
function OnGoBack(&$event)
{
$event->redirect_params['opener'] = 'u';
}
function OnScheduleTopFrameReload(&$event)
{
$this->Application->StoreVar('RefreshTopFrame',1);
}
/**
* Do now allow deleting current language
*
* @param kEvent $event
*/
function OnBeforeItemDelete(&$event)
{
$del_id = $event->getEventParam('id');
$object =& $event->getObject(array('skip_autload' => true));
$object->Load($del_id);
if ($object->GetDBField('PrimaryLang') || $object->GetDBField('AdminInterfaceLang') || $del_id == $this->Application->GetVar('m_lang')) {
$event->status = erFAIL;
}
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/languages/languages_event_handler.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.33.2.3
\ No newline at end of property
+1.33.2.4
\ No newline at end of property
Index: branches/RC/core/units/stylesheets/stylesheets_item.php
===================================================================
--- branches/RC/core/units/stylesheets/stylesheets_item.php (revision 10831)
+++ branches/RC/core/units/stylesheets/stylesheets_item.php (revision 10832)
@@ -1,43 +1,43 @@
<?php
class StylesheetsItem extends kDBItem
{
function Compile()
{
$selector_item =& $this->Application->recallObject('selectors.item', 'selectors', Array('live_table'=>true, 'skip_autoload' => true) );
$parent_field = $this->Application->getUnitOption($selector_item->Prefix, 'ForeignKey');
$sql_template = 'SELECT '.$selector_item->IDField.' FROM '.$selector_item->TableName.' WHERE '.$parent_field.' = %s ORDER BY SelectorName ASC';
$selectors_ids = $this->Conn->GetCol( sprintf($sql_template, $this->GetID() ) );
$ret = '/* This file is generated automatically. Don\'t edit it manually ! */'."\n\n";
foreach($selectors_ids as $selector_id)
{
$selector_item->Load($selector_id);
$ret .= $selector_item->CompileStyle()."\n";
}
$ret .= $this->GetDBField('AdvancedCSS');
$compile_ts = adodb_mktime();
- $css_path = FULL_PATH.'/kernel/stylesheets/';
+ $css_path = (defined('WRITEABLE') ? WRITEABLE : FULL_PATH . '/kernel') . '/stylesheets/';
$css_file = $css_path.mb_strtolower($this->GetDBField('Name')).'-'.$compile_ts.'.css';
$fp = fopen($css_file,'w');
if($fp)
{
$prev_css = $css_path.mb_strtolower($this->GetDBField('Name')).'-'.$this->GetDBField('LastCompiled').'.css';
if( file_exists($prev_css) ) unlink($prev_css);
fwrite($fp, $ret);
fclose($fp);
$sql = 'UPDATE '.$this->TableName.' SET LastCompiled = '.$compile_ts.' WHERE '.$this->IDField.' = '.$this->GetID();
$this->Conn->Query($sql);
}
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/stylesheets/stylesheets_item.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.6.2.1
\ No newline at end of property
+1.6.2.2
\ No newline at end of property
Index: branches/RC/core/units/general/helpers/modules.php
===================================================================
--- branches/RC/core/units/general/helpers/modules.php (revision 10831)
+++ branches/RC/core/units/general/helpers/modules.php (revision 10832)
@@ -1,372 +1,392 @@
<?php
class kModulesHelper extends kHelper {
function checkLogin()
{
return $this->_GetModules();
}
function getWhereClause()
{
$where_clause = Array('Loaded = 1');
if (!$this->Application->IsAdmin()) return implode(' AND ', $where_clause);
$modules = $this->_GetModules();
if ($modules) {
foreach ($modules as $module_index => $module) {
$modules[$module_index] = $this->Conn->qstr($module);
}
$where_clause[] = 'Name IN ('.implode(',', $modules).')';
}
return implode(' AND ', $where_clause);
}
function _EnableCookieSID()
{
$session =& $this->Application->recallObject('Session');
return $session->CookiesEnabled;
}
function _IsSpider($UserAgent)
{
global $robots;
$lines = file(FULL_PATH.'/robots_list.txt');
if (!is_array($robots)) {
$robots = Array();
for($i = 0; $i < count($lines); $i++) {
$l = $lines[$i];
$p = explode("\t", $l, 3);
$robots[] = $p[2];
}
}
return in_array($UserAgent, $robots);
}
function _MatchIp($ip1, $ip2)
{
$matched = TRUE;
$ip = explode('.', $ip1);
$MatchIp = explode('.', $ip2);
for ($i = 0; $i < count($ip); $i++) {
if($i == count($MatchIp)) break;
if (trim($ip[$i]) != trim($MatchIp[$i]) || trim($ip[$i]) == '*') {
$matched = FALSE;
break;
}
}
return $matched;
}
function _IpAccess($IpAddress, $AllowList, $DenyList)
{
$allowed = explode(',', $AllowList);
$denied = explode(',', $DenyList);
$MatchAllowed = FALSE;
for ($x = 0; $x < count($allowed); $x++) {
$ip = explode('.', $allowed[$x]);
$MatchAllowed = $this->_MatchIp($IpAddress, $allowed[$x]);
if ($MatchAllowed)
break;
}
$MatchDenied = FALSE;
for ($x = 0; $x < count($denied); $x++) {
$ip = explode('.', $denied[$x]);
$MatchDenied = $this->_MatchIp($IpAddress, $denied[$x]);
if ($MatchDenied)
break;
}
$Result = (($MatchAllowed && !$MatchDenied) || (!$MatchAllowed && !$MatchDenied) ||
($MatchAllowed && $MatchDenied));
return $Result;
}
/**
- * Reads config.php file and parses it
- *
- */
- function _readConfig()
- {
- $vars = parse_portal_ini(FULL_PATH.'/config.php');
-
- foreach ($vars as $config_key => $config_value) {
- $GLOBALS['g_'.$config_key] = $config_value;
- }
- }
-
- /**
* Leaves only domain part from hostname (e.g. extract "intechnic.lv" from "test.intechnic.lv")
* Used for admin login license check
*
* @param string $d
* @return string
*/
function _StripDomainHost($d)
{
$IsIp = false;
$dotcount = substr_count($d, '.');
if ($dotcount == 3) {
$IsIp = true;
for ($x = 0; $x < strlen($d); $x++) {
if (!is_numeric(substr($d, $x, 1)) && substr($d, $x, 1) != '.')
{
$IsIp = false;
break;
}
}
}
if ($dotcount > 1 && !$IsIp) {
$p = explode('.', $d);
$ret = $p[count($p) - 2].'.'.$p[count($p) - 1];
}
else {
$ret = $d;
}
return $ret;
}
/**
* When logging into admin then check only last 2 parts of host name VS domain in license
*
* @param string $user_domain
* @param string $license_domain
* @return int
*/
function _CheckDomain($user_domain, $license_domain)
{
if ($this->Application->IsAdmin()) {
$user_domain = $this->_StripDomainHost($user_domain);
return preg_match('/(.*)'.preg_quote($user_domain, '/').'$/', $license_domain);
}
else {
return preg_match('/(.*)'.preg_quote($license_domain, '/').'$/', $user_domain);
}
}
/**
* Returns modules list, that are in license
*
* @return Array
*/
function _GetModules()
{
- global $i_Keys;
static $modules = null;
- if (isset($modules)) return $modules;
-
- $this->_readConfig();
- $license = isset($GLOBALS['g_License']) ? base64_decode($GLOBALS['g_License']) : '';
- $this->_ParseLicense($license);
+ if (isset($modules)) {
+ return $modules;
+ }
$modules = Array();
- $domain = $this->_GetDomain();
- if (!$this->_IsLocalSite($domain)) {
- for ($x = 0; $x < count($i_Keys); $x++) {
- $key = $i_Keys[$x];
- if ($this->_CheckDomain($domain, $key['domain'])) {
- // used hostname is subdomain or matches domain from license
- $modules = explode(',', $key['mod']);
- }
- }
- }
- else {
- $modules = array_keys($this->Application->ModuleInfo);
+ $vars = parse_portal_ini(FULL_PATH . '/config.php');
+ $license = array_key_exists('License', $vars) ? base64_decode($vars['License']) : false;
+ if ($license) {
+ list ( , , $i_Keys) = $this->_ParseLicense($license);
+ $domain = $this->_GetDomain($vars);
+ if (!$this->_IsLocalSite($domain)) {
+ for ($x = 0; $x < count($i_Keys); $x++) {
+ $key = $i_Keys[$x];
+ if ($this->_CheckDomain($domain, $key['domain'])) {
+ // used hostname is subdomain or matches domain from license
+ $modules = explode(',', $key['mod']);
+ }
+ }
+ }
+ else {
+ $modules = array_keys($this->Application->ModuleInfo);
+ }
}
array_push($modules, 'Core', 'Proj-base', 'Proj-CMS', 'Custom');
return $modules;
}
/**
* Allows to determine if module is licensed
*
* @param string $name
* @return bool
*/
function _ModuleLicensed($name)
{
$modules = $this->_GetModules();
return in_array($name, $modules);
}
/**
* Returns domain from licences (and direct in case of install script)
*
* @return string
*/
- function _GetDomain()
+ function _GetDomain($vars)
{
- $config_domain = isset($GLOBALS['g_Domain']) ? $GLOBALS['g_Domain'] : '';
+ $config_domain = array_key_exists('Domain', $vars) ? $vars['Domain'] : false;
return $this->Application->ConfigValue('DomainDetect') ? $_SERVER['HTTP_HOST'] : $config_domain;
}
function _keyED($txt, $encrypt_key)
{
$encrypt_key = md5($encrypt_key);
$ctr = 0;
$tmp = '';
for ($i = 0; $i < strlen($txt); $i++) {
if ($ctr == strlen($encrypt_key)) $ctr = 0;
$tmp .= substr($txt, $i, 1) ^ substr($encrypt_key, $ctr, 1);
$ctr++;
}
return $tmp;
}
function _decrypt($txt, $key)
{
$txt = $this->_keyED($txt,$key);
$tmp = '';
for ($i = 0; $i < strlen($txt); $i++) {
$md5 = substr($txt, $i, 1);
$i++;
$tmp .= (substr($txt, $i, 1) ^ $md5);
}
return $tmp;
}
function LoadFromRemote()
{
return '';
}
function DLid()
{
die($GLOBALS['lid']."\n");
}
function _LoadLicense($LoadRemote = false)
{
$f = FULL_PATH.'/intechnic.php';
if ($this->_falseIsLocalSite($f)) $ret = true;
if (file_exists($f)) {
$contents = file($f);
$data = base64_decode($contents[1]);
}
else {
if ($LoadRemote) return $LoadFromRemote;
}
return $data;
}
function _VerifyKey($domain, $k)
{
$key = md5($domain);
$lkey = substr($key, 0, strlen($key) / 2);
$rkey = substr($key, strlen($key) / 2);
$r = $rkey.$lkey;
if ($k == $r) return true;
return false;
}
function _ParseLicense($txt)
{
- global $i_User, $i_Pswd, $i_Keys;
- if (!$this->_falseIsLocalSite($txt)) $nah = false;
+// global $i_User, $i_Pswd, $i_Keys;
+
+ if (!$this->_falseIsLocalSite($txt)) {
+ $nah = false;
+ }
+
$data = $this->_decrypt($txt, 'beagle');
+ $i_User = $i_Pswd = '';
$i_Keys = Array();
$lines = explode("\n", $data);
for ($x = 0; $x < count($lines); $x++) {
$l = $lines[$x];
$p = explode('=', $l, 2);
switch($p[0]) {
case 'Username':
$i_User = $p[1];
break;
case 'UserPass':
$i_Pswd = $p[1];
break;
default:
if (substr($p[0], 0, 3) == 'key') {
$parts = explode('|', $p[1]);
if ($this->_VerifyKey($parts[0], $parts[1])) {
unset($K);
$k['domain'] = $parts[0];
$k['key'] = $parts[1];
$k['desc'] = $parts[2];
$k['mod'] = $parts[3];
$i_Keys[] = $k;
}
}
break;
}
}
+
+ return Array ($i_User, $i_Pswd, $i_Keys);
}
function _GetObscureValue($i)
{
if ($i == 'x') return 0254; $z = '';
if ($i == 'z') return 0x7F.'.';
if ($i == 'c') return '--code--';
if ($i >= 5 && $i < 7) return $this->_GetObscureValue($z)*$this->_GetObscureValue('e');
if ($i > 30) return Array(0x6c,0x6f,0x63,0x61,0x6c,0x68,0x6f,0x73,0x74);
if ($i > 20) return 99;
if ($i > 10) return '.'.($this->_GetObscureValue(6.5)+1);
if ($i == 'a') return 0xa;
}
function _Chr($val)
{
$x = $this->_GetObscureValue(25);
$f = chr($x).chr($x+5).chr($x+15);
return $f($val);
}
function _IsLocalSite($domain)
{
$ee = $this->_GetObscureValue(35); $yy = '';
foreach ($ee as $e) $yy .= $this->_Chr($e);
$localb = FALSE;
if(substr($domain,0,3)==$this->_GetObscureValue('x'))
{
$b = substr($domain,0,6);
$p = explode(".",$domain);
$subnet = $p[1];
if($p[1]>15 && $p[1]<32)
$localb=TRUE;
}
$zz = $this->_GetObscureValue('z').$this->_GetObscureValue(5).'.'.(int)$this->_GetObscureValue(7).$this->_GetObscureValue(12);
$ff = $this->_GetObscureValue('z')+65;
$hh = $ff-0x18;
if($domain==$yy || $domain==$zz || substr($domain,0,7)==$ff.$this->_Chr(46).$hh ||
substr($domain,0,3)==$this->_GetObscureValue('a').$this->_Chr(46) || $localb || strpos($domain,".")==0)
{
return TRUE;
}
return FALSE;
}
function _falseIsLocalSite($domain)
{
$localb = FALSE;
if(substr($domain,0,3)=="172")
{
$b = substr($domain,0,6);
$p = explode(".",$domain);
$subnet = $p[1];
if($p[1]>15 && $p[1]<32)
$localb=TRUE;
}
if($domain=="localhost" || $domain=="127.0.0.1" || substr($domain,0,7)=="192.168" ||
substr($domain,0,3)=="10." || $localb || strpos($domain,".")==0)
{
return TRUE;
}
return FALSE;
}
+
+ function verifyLicense($license_hash)
+ {
+ $license_hash = base64_decode($license_hash);
+ list ($license_user, $license_password, ) = $this->_ParseLicense($license_hash);
+ return strlen($license_user) && strlen($license_password);
+ }
+
+ function moduleInstalled($module_name)
+ {
+ static $modules = null;
+
+ if (is_null($modules)) {
+ $sql = 'SELECT LOWER(Name)
+ FROM ' . $this->Application->getUnitOption('mod', 'TableName');
+ $modules = $this->Conn->GetCol($sql);
+ }
+
+ if ($module_name == 'kernel') {
+ $module_name = 'in-portal';
+ }
+
+ return in_array(strtolower($module_name), $modules);
+ }
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/general/helpers/modules.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.10
\ No newline at end of property
+1.10.2.1
\ No newline at end of property
Index: branches/RC/core/admin_templates/modules/modules_list.tpl
===================================================================
--- branches/RC/core/admin_templates/modules/modules_list.tpl (revision 10831)
+++ branches/RC/core/admin_templates/modules/modules_list.tpl (revision 10832)
@@ -1,56 +1,84 @@
-<inp2:m_RequireLogin permissions="in-portal:mod_status.view" system="1"/>
-<inp2:m_include t="incs/header" />
-
-<inp2:m_RenderElement name="section_header" prefix="mod" module="in-portal" icon="icon46_modules" title="!la_title_Module_Status!"/>
+<inp2:adm_CheckPermCache cache_update_t="in-portal/categories/cache_updater"/>
-<inp2:m_RenderElement name="blue_bar" prefix="mod" title_preset="modules_list" module="in-portal" icon="icon46_modules"/>
+<inp2:m_include t="incs/header" />
+<inp2:m_RenderElement name="combined_header" section="in-portal:mod_status" prefix="mod" pagination="1"/>
<!-- ToolBar --->
<table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>
<script type="text/javascript">
//do not rename - this function is used in default grid for double click!
function edit()
{
}
var a_toolbar = new ToolBar();
a_toolbar.AddButton( new ToolBarButton('approve', '<inp2:m_phrase label="la_ToolTip_Enable" escape="1"/>', function() {
submit_event('mod','OnMassApprove');
}
) );
-
a_toolbar.AddButton( new ToolBarButton('deny', '<inp2:m_phrase label="la_ToolTip_Disable" escape="1"/>', function() {
submit_event('mod','OnMassDecline');
}
) );
a_toolbar.AddButton( new ToolBarSeparator('sep1') );
a_toolbar.AddButton( new ToolBarButton('view', '<inp2:m_phrase label="la_ToolTip_View" escape="1"/>', function() {
show_viewmenu(a_toolbar,'view');
}
) );
a_toolbar.Render();
</script>
</td>
+
+ <inp2:m_RenderElement name="search_main_toolbar" prefix="mod" grid="Default"/>
</tr>
</tbody>
</table>
-<inp2:m_RenderElement name="grid" PrefixSpecial="mod" IdField="Name" grid="Default" menu_filters="yes"/>
+<inp2:m_DefineElement name="error_element">
+ <inp2:m_Param name="error"/><br />
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="grid_module_td" format="" no_special="" nl2br="" first_chars="" td_style="" currency="">
+ <td valign="top" class="text" style="<inp2:m_param name="td_style"/>">
+ <inp2:m_RenderElement name="grid_module_platform_td" pass_params="1"/>
+ </td>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="grid_module_platform_td" format="" no_special="" nl2br="" first_chars="" td_style="" currency="">
+ <inp2:m_if check="ModuleLicensed">
+ <inp2:m_if check="PrerequisitesMet">
+ <inp2:m_if check="AlreadyInstalled">
+ <inp2:Field name="$field"/>
+ <inp2:m_else/>
+ <a href="<inp2:InstallLink/>"><inp2:m_Phrase name="la_text_ready_to_install"/></a>
+ </inp2:m_if>
+ <inp2:m_else/>
+ <div style="color: red;">
+ <inp2:ListPrerequisites render_as="error_element"/>
+ </div>
+ </inp2:m_if>
+ <inp2:m_else/>
+ <a href="<inp2:m_Link template='dummy' prefix='_FRONT_END_' index_file='core/install.php' preset='already_installed' next_preset='update_license'/>" style="color: red;" target="_blank"><inp2:m_Phrase name="la_module_not_licensed"/></a>
+ </inp2:m_if>
+</inp2:m_DefineElement>
+
+<inp2:m_RenderElement name="grid" PrefixSpecial="mod" IdField="Name" per_page="-1" grid="Default" menu_filters="yes"/>
<script type="text/javascript">
Grids['mod'].SetDependantToolbarButtons( new Array('approve','deny') );
<inp2:m_if check="m_GetEquals" name="RefreshTree" value="1">
var $tree_frame = getFrame('menu');
- $tree_frame.location = $tree_frame.location;
+ $tree_frame.location.href = $tree_frame.location.href;
+ window.location.href = '<inp2:m_Link/>';
</inp2:m_if>
</script>
<inp2:m_include t="incs/footer"/>
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/modules/modules_list.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4
\ No newline at end of property
+1.4.2.1
\ No newline at end of property
Index: branches/RC/core/admin_templates/js/forms.js
===================================================================
--- branches/RC/core/admin_templates/js/forms.js (revision 10831)
+++ branches/RC/core/admin_templates/js/forms.js (revision 10832)
@@ -1,315 +1,315 @@
var last_shown_error = false;
var errors = new Object();
var first_error = new Object();
var fields = new Object();
function show_form_error(prefix, field, sticky)
{
if (isset(errors[prefix]) && isset(errors[prefix][field])) {
span = document.getElementById('error_msg_'+prefix);
span.innerHTML = fields[prefix][field] + ' - ' + errors[prefix][field];
if (sticky) last_shown_error = field;
}
}
function hide_form_error(prefix)
{
span = document.getElementById('error_msg_'+prefix);
if (!span) return;
span.innerHTML = '<br/>';
if (typeof(last_shown_error) != 'undefined' && last_shown_error) {
show_form_error(prefix, last_shown_error);
}
}
function add_form_error(prefix, field, element, error_msg) {
if (error_msg != '') {
if (typeof(errors[prefix]) == 'undefined') {
errors[prefix] = new Object();
}
errors[prefix][field] = error_msg;
if (document.getElementById(element)) {
// some controls don't have element to focus on (e.g. swf uploader)
addEvent(
document.getElementById(element),
'focus',
function() {
show_form_error(prefix, field, true)
}
);
addEvent(
document.getElementById(element),
'blur',
function() {
last_shown_error = false
}
);
}
if (typeof(first_error[prefix]) == 'undefined' || first_error[prefix] == false) {
first_error[prefix] = [field, element];
}
}
}
function Form() {}
Form = new Form();
Form.Controls = new Array();
Form.Div = false;
Form.MinControlsHeight = 0;
Form.Options = new Object();
Form.FlexibleCount = 0;
Form.ScrollerW = 17;
Form.ScrollerH = 17;
Form.Wrap = true;
Form.HasChanged = false;
Form.Init = function(id)
{
this.Div = document.getElementById(id);
for (var i in this.Controls) {
dim = getDimensions(document.getElementById(this.Controls[i]));
options = this.Options[this.Controls[i]];
if (options.height) { // fixed height
options.min_height = options.height;
options.max_height = options.height;
}
if (!options.min_height) options.min_height = dim.innerHeight;
this.MinControlsHeight += options.min_height;
if (dim.innerHeight < options.min_height) {
document.getElementById(this.Controls[i]).style.height = options.min_height+'px';
}
// alert('adding element '+this.Controls[i]+' height: '+options.min_height+' total: '+this.MinControlsHeight)
}
/*alert('one more time');
document.body.style.height = '100%';
document.body.style.overflow = 'hidden';
document.body.scroll = 'no'
alert('done');*/
var a_div = document.createElement('DIV');
a_div.style.position = 'relative';
a_div.style.overflow = 'auto';
a_div.style.width = '100%';
// a_div.style.height = '100%';
// a_div.style.backgroundColor = 'yellow';
a_div.appendChild(this.Div.parentNode.replaceChild(a_div, this.Div));
this.Table = this.Div.getElementsByTagName('table')[0];
this.Table.style.height = 'auto';
// this.Table.style.width = 'auto';
this.MinHeight = this.Table.offsetHeight;
this.MinWidth = this.Table.offsetWidth;
// alert('Measuring min width now')
addEvent(window, 'resize', function() {Form.Resize()})
this.Resize()
if (isset(first_error)) {
for (var i in first_error) {
if (first_error[i] != false) {
if (document.getElementById(first_error[i][1])) {
// some controls don't have element to focus on (e.g. swf uploader)
document.getElementById(first_error[i][1]).focus();
}
show_form_error(i, first_error[i][0], true);
// alert('focused on '+first_error[i][1])
}
}
}
addEvent(window, 'unload', function() {
if (!unload_legal) { // it's set in submit_kernel_form - if we are submitting form, the unload is already handled
// if we got here, it means that we are closing window ilegally (through OS interace X button)
// alert('closing window');
// we need to clear temp tables then
-
- window.opener.WatchClosing(window, _DropTempUrl);
-
+ if (window.opener) {
+ window.opener.WatchClosing(window, _DropTempUrl);
+ }
}
});
// we need to set unload_legal to true if we are refreshing current window, because onunload will still fire
addEvent(document, 'keydown', function(e) {
var code;
if (!e) var e = window.event;
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
if (code == 116 || (e.ctrlKey && code == 82)) unload_legal = true; //F5 or Ctrl+R
});
if (_Simultanious_Edit_Message != '') {
alert(_Simultanious_Edit_Message);
}
this.InitOnChange();
}
Form.InitOnChange = function()
{
var inputs = window.document.getElementsByTagName('INPUT');
var selects = window.document.getElementsByTagName('SELECT');
var textareas = window.document.getElementsByTagName('TEXTAREA');
var groups = [inputs, selects, textareas];
for (var g=0; g<groups.length; g++) {
for (var i=0; i<groups[g].length; i++) {
var elem = groups[g][i];
if (elem.tagName == 'INPUT' && elem.type == 'hidden') continue;
addEvent(elem, elem.type=='button' ? 'click' : 'change', function() {Form.Changed()});
}
}
}
Form.Changed = function()
{
this.HasChanged = true;
}
Form.addControl = function(id, options) {
this.Controls.push(id);
if (!options) {
options = {coeff: 1, max_height: 0, min_height: 0};
}
else {
if (typeof(options['coeff']) == 'undefined') options['coeff'] = 1;
if (typeof(options['max_height']) == 'undefined') options['max_height'] = 0;
if (typeof(options['min_height']) == 'undefined') options['min_height'] = 0;
}
options['real_height'] = 0;
this.Options[id] = options; // for future use
// print_pre(this.Options[id]);
}
Form.Resize = function()
{
var h = (document.all ? window.document.body.offsetHeight : window.innerHeight);
var pos = findPos(this.Div);
var dim = getDimensions(this.Div);
h -= pos[1] + dim.padding[0] + dim.padding[2] + dim.borders[0] + dim.borders[2];
// alert('h after correction is '+h);
window.document.body.style.width = '100%';
var w = (document.all ? window.document.body.offsetWidth : window.innerWidth);
w -= pos[0] + dim.padding[1] + dim.padding[3] + dim.borders[1] + dim.borders[3];
scroller_height = this.MinWidth > w ? this.ScrollerH : 0;
scroller_width = this.MinHeight > h - scroller_height ? this.ScrollerW : 0;
scroller_height = this.MinWidth > w - scroller_width ? this.ScrollerH : 0;
var st = document.getElementById('width_status');
if (st) st.innerHTML = 'minWdith: '+this.MinWidth+' minHeight: '+this.MinHeight+' w: '+w+' h: '+h+' scroll_w: '+scroller_width+' scroll_h: '+scroller_height;
// alert('scroller W x H = '+scroller_width+' x '+scroller_height);
// alert('resize: '+w+'x'+h)
// h -= 100;
this.Table.style.width = (w-scroller_width) + 'px';
this.Div.parentNode.style.width = (w)+'px';
this.Div.style.width = (w-scroller_width)+'px';
this.Div.parentNode.style.height = (h)+'px';
var count = this.Controls.length;
// -count here is adjustment - 1px for each control
var split = h - count*2 - this.MinHeight + this.MinControlsHeight;
if (split < this.MinControlsHeight) split = this.MinControlsHeight;
this.ResetHeights();
var used = this.SetMinHeights();
split -= used;
var cur_diff = 0;
var iterations = 0;
do {
var prev_diff = cur_diff;
var cur_diff = this.SplitExtra(split);
split = cur_diff;
iterations++;
} while (cur_diff != 0 && cur_diff != prev_diff && iterations < 10);
for (var i in this.Controls) {
document.getElementById(this.Controls[i]).style.height = this.Options[this.Controls[i]]['real_height'] + 'px';
// document.getElementById(this.Controls[i]).value = this.Options[this.Controls[i]]['real_height'];
}
// alert('h is: '+h+' min height is '+this.MinHeight+' MinControlsHeight is '+this.MinControlsHeight+' -> '+split+' to split between '+count+' new height is '+new_height);
// print_pre(this.Controls)
}
Form.ResetHeights = function()
{
for (var i in this.Controls) {
var options = this.Options[this.Controls[i]]
options['real_height'] = 0;
options.fixed = false;
}
this.FlexibleCount = this.Controls.length;
}
// Enlarge heights when possible
// Return any not split pixels number
Form.SplitExtra = function(split)
{
var number = 0;
for (var i in this.Controls) {
var options = this.Options[this.Controls[i]]
if (options['max_height'] ==0 || options['real_height'] < options.max_height) {
number++;
}
}
if (number == 0) return 0;
var delta = Math.floor(split / number);
// alert('splitting '+split+' between '+number+' delta is '+delta)
var added = 0;
for (var i in this.Controls) {
var options = this.Options[this.Controls[i]];
var to_add;
if (options['max_height'] != 0 && options['real_height']+delta > options['max_height']) {
to_add = options['max_height']-options['real_height'];
}
else {
to_add = delta;
}
// alert('delta: '+delta+' current real: '+options['real_height']+' min: '+options['min_height']+' max:'+options['max_height']+' to_add: '+to_add)
options['real_height'] = options['real_height']+to_add;
added += to_add;
}
// alert('added total '+added)
// removing extra added from the last (any) control
if (added > split) {
extra = added-split;
options['real_height'] -= extra;
added -= extra;
}
return split - added;
}
Form.SetMinHeights = function()
{
var used = 0;
for (var i in this.Controls) {
var options = this.Options[this.Controls[i]]
if (options['real_height'] < options['min_height']) {
options['real_height'] = options.min_height;
used += options.min_height;
}
}
return used;
}
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/js/forms.js
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4.2.6
\ No newline at end of property
+1.4.2.7
\ No newline at end of property
Index: branches/RC/core/admin_templates/incs/grid_blocks.tpl
===================================================================
--- branches/RC/core/admin_templates/incs/grid_blocks.tpl (revision 10831)
+++ branches/RC/core/admin_templates/incs/grid_blocks.tpl (revision 10832)
@@ -1,542 +1,546 @@
<inp2:m_DefineElement name="current_page">
<span class="current_page"><inp2:m_param name="page"/></span>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="page">
<a href="javascript:go_to_page('<inp2:m_param name="PrefixSpecial"/>', <inp2:m_param name="page"/>, <inp2:m_param name="ajax"/>)" class="nav_url"><inp2:m_param name="page"/></a>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="next_page">
<a href="javascript:go_to_page('<inp2:m_param name="PrefixSpecial"/>', <inp2:m_param name="page"/>, <inp2:m_param name="ajax"/>)" class="nav_url">&gt;</a>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="prev_page">
<a href="javascript:go_to_page('<inp2:m_param name="PrefixSpecial"/>', <inp2:m_param name="page"/>, <inp2:m_param name="ajax"/>)" class="nav_url">&lt;</a>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="next_page_split">
<a href="javascript:go_to_page('<inp2:m_param name="PrefixSpecial"/>', <inp2:m_param name="page"/>, <inp2:m_param name="ajax"/>)" class="nav_url">&gt;&gt;</a>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="prev_page_split">
<a href="javascript:go_to_page('<inp2:m_param name="PrefixSpecial"/>', <inp2:m_param name="page"/>, <inp2:m_param name="ajax"/>)" class="nav_url">&lt;&lt;</a>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="search_main_toolbar">
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_pagination" SearchPrefixSpecial="" ajax="0">
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#E0E0DA" border="0" class="<inp2:m_if check="m_ParamEquals" name="no_toolbar" value="no_toolbar" >bordered<inp2:m_else/>pagination_bar</inp2:m_if>">
<tbody>
<tr id="MY_ID">
<td>
<img height="15" src="img/arrow.gif" width="15" align="absmiddle" border="0">
<b class=text><inp2:m_phrase name="la_Page"/></b>
<inp2:{$PrefixSpecial}_PrintPages active_block="current_page" split="10" inactive_block="page" prev_page_block="prev_page" next_page_block="next_page" prev_page_split_block="prev_page_split" next_page_split_block="next_page_split" main_special="$main_special" ajax="$ajax" grid="$grid"/>
</td>
<inp2:m_if check="m_ParamEquals" param="search" value="on">
<inp2:m_if check="m_ParamEquals" name="SearchPrefixSpecial" value="">
<inp2:m_RenderElement name="grid_search" grid="$grid" PrefixSpecial="$PrefixSpecial" ajax="$ajax"/>
<inp2:m_else />
<inp2:m_RenderElement name="grid_search" grid="$grid" PrefixSpecial="$SearchPrefixSpecial" ajax="$ajax"/>
</inp2:m_if>
</inp2:m_if>
<td>
</tr>
</tbody>
</table>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_pagination_elem" ajax="0">
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_search" ajax="0">
<td align="right" class="search-cell">
<table cellspacing="0" cellpadding="0">
<tr>
<td><inp2:m_phrase name="la_Search"/>:&nbsp;</td>
<td>
<input type="text" id="<inp2:m_param name="PrefixSpecial"/>_search_keyword" name="<inp2:m_param name="PrefixSpecial"/>_search_keyword" value="<inp2:m_recall var="{$PrefixSpecial}_search_keyword" no_null="no_null" special="1"/>" onkeydown="search_keydown(event, '<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>);" class="search-box"/>
<input type="text" style="display: none;"/>
</td>
<td style="white-space: nowrap;" id="search_buttons[<inp2:m_param name="PrefixSpecial"/>]">
<div style="white-space: nowrap;"></div>
<script type="text/javascript">
<inp2:m_RenderElement name="grid_search_buttons" pass_params="true"/>
</script>
</td>
</tr>
</table>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_search_buttons" PrefixSpecial="" grid="" ajax="1">
Toolbars['<inp2:m_param name="PrefixSpecial"/>_search'] = new ToolBar('icon16_');
Toolbars['<inp2:m_param name="PrefixSpecial"/>_search'].IconSize = {w:22,h:22};
Toolbars['<inp2:m_param name="PrefixSpecial"/>_search'].UseLabels = false;
Toolbars['<inp2:m_param name="PrefixSpecial"/>_search'].AddButton(
new ToolBarButton(
'search',
'<inp2:m_phrase name="la_ToolTip_Search" escape="1"/>',
function() { search('<inp2:m_param name="PrefixSpecial"/>','<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>) },
null,
'<inp2:m_param name="PrefixSpecial"/>') );
Toolbars['<inp2:m_param name="PrefixSpecial"/>_search'].AddButton(
new ToolBarButton(
'search_reset',
'<inp2:m_phrase name="la_ToolTip_SearchReset" escape="1"/>',
function() { search_reset('<inp2:m_param name="PrefixSpecial"/>','<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>) },
null,
'<inp2:m_param name="PrefixSpecial"/>') );
Toolbars['<inp2:m_param name="PrefixSpecial"/>_search'].Render(document.getElementById('search_buttons[<inp2:m_param name="PrefixSpecial"/>]'));
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_column_title" use_phrases="1" ajax="0">
<td nowrap="nowrap">
<a href="javascript:resort_grid('<inp2:m_param name="PrefixSpecial"/>','<inp2:m_param name="sort_field"/>', <inp2:m_param name="ajax"/>);"><IMG alt="" src="img/list_arrow_<inp2:{$PrefixSpecial}_order field="$sort_field"/>.gif" border="0" align="absmiddle"><inp2:m_if check="m_ParamEquals" name="use_phrases" value="1"><inp2:m_phrase name="$title"/><inp2:m_else/><inp2:m_param name="title"/></inp2:m_if></a>
</td>
</inp2:m_DefineElement>
-<inp2:m_DefineElement name="grid_column_title_no_sorting" use_phrases="1">
+<inp2:m_DefineElement name="grid_column_title_no_sorting" use_phrases="1" ajax="0">
<td nowrap="nowrap">
- <inp2:m_if check="m_ParamEquals" name="use_phrases" value="1"><inp2:m_phrase name="$title"/><inp2:m_else/><inp2:m_param name="title"/></inp2:m_if>
+ <inp2:m_if check="m_Param" name="use_phrases">
+ <inp2:m_phrase name="$title"/>
+ <inp2:m_else/>
+ <inp2:m_param name="title"/>
+ </inp2:m_if>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_checkbox_td" format="" module="" >
<td valign="top" class="text">
<table border="0" cellpadding="0" cellspacing="0" class="grid_id_cell">
<tr>
<td><input type="checkbox" name="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>" id="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>"></td>
<td><img src="<inp2:ModulePath module="$module"/>img/itemicons/<inp2:{$PrefixSpecial}_ItemIcon grid="$grid"/>"></td>
<td><inp2:Field field="$field" no_special="no_special" format="$format"/></td>
</tr>
</table>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_checkbox_td_no_icon" format="" >
<td valign="top" class="text">
<table border="0" cellpadding="0" cellspacing="0" class="grid_id_cell">
<tr>
<td><input type="checkbox" name="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>" id="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>"></td>
<td><inp2:{$PrefixSpecial}_field field="$field" no_special="no_special" format="$format"/></td>
</tr>
</table>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="label_grid_checkbox_td" format="" module="" >
<td valign="top" class="text">
<table border="0" cellpadding="0" cellspacing="0" class="grid_id_cell">
<tr>
<td><input type="checkbox" name="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>" id="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>"></td>
<td><img src="<inp2:ModulePath module="$module"/>img/itemicons/<inp2:{$PrefixSpecial}_ItemIcon grid="$grid"/>"></td>
<td><inp2:{$PrefixSpecial}_field field="$field" no_special="no_special" as_label="as_label" format="$format"/></td>
</tr>
</table>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_icon_td" format="" module="" >
<td valign="top" class="text">
<table border="0" cellpadding="0" cellspacing="0" class="grid_id_cell">
<tr>
<td><img src="<inp2:ModulePath module="$module"/>img/itemicons/<inp2:{$PrefixSpecial}_ItemIcon grid="$grid"/>"></td>
<td><inp2:{$PrefixSpecial}_field field="$field" no_special="no_special" format="$format"/></td>
</tr>
</table>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_radio_td" format="" module="">
<td valign="top" class="text">
<table border="0" cellpadding="0" cellspacing="0" class="grid_id_cell">
<tr>
<td><input type="radio" name="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>" id="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>"></td>
<td><img src="<inp2:ModulePath module="$module"/>img/itemicons/<inp2:{$PrefixSpecial}_ItemIcon grid="$grid"/>"></td>
<td><inp2:Field field="$field" no_special="no_special" format="$format"/></td>
</tr>
</table>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_data_td" format="" no_special="" nl2br="" first_chars="" td_style="" currency="">
<td valign="top" class="text" style="<inp2:m_param name="td_style"/>"><inp2:{$PrefixSpecial}_field field="$field" first_chars="$first_chars" currency="$currency" nl2br="$nl2br" grid="$grid" no_special="$no_special" format="$format"/></td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_edit_td" format="" >
<td valign="top" class="text"><input type="text" id="<inp2:{$PrefixSpecial}_InputName field="$field"/>" name="<inp2:{$PrefixSpecial}_InputName field="$field"/>" value="<inp2:{$PrefixSpecial}_field field="$field" grid="$grid" format="$format"/>"></td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_picker_td" nl2br="0" no_special="1" separator="&nbsp;">
<td valign="top" class="text">
<inp2:Field name="$field" format="$separator" nl2br="$nl2br" no_special="$no_special"/>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_options_td" format="">
<td valign="top" class="text">
<select name="<inp2:InputName field="$field"/>" id="<inp2:InputName field="$field"/>">
<inp2:m_if check="FieldOption" field="$field" option="use_phrases">
<inp2:PredefinedOptions field="$field" block="inp_option_phrase" selected="selected" has_empty="1" empty_value="0"/>
<inp2:m_else/>
<inp2:PredefinedOptions field="$field" block="inp_option_item" selected="selected" has_empty="1" empty_value="0"/>
</inp2:m_if>
</select>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_date_td" format="">
<td valign="top" class="text">
<input type="text" name="<inp2:InputName field="{$field}_date"/>" id="<inp2:InputName field="{$field}_date"/>" value="<inp2:Field field="{$field}_date" format="_regional_InputDateFormat"/>" size="<inp2:Format field="{$field}_date" input_format="1" edit_size="edit_size"/>" datepickerIcon="<inp2:m_ProjectBase/>core/admin_templates/img/calendar_icon.gif">&nbsp;<span class="small">(<inp2:Format field="{$field}_date" input_format="1" human="true"/>)</span>
<script type="text/javascript">
initCalendar("<inp2:InputName field="{$field}_date"/>", "<inp2:Format field="{$field}_date" input_format="1"/>");
</script>
<input type="hidden" name="<inp2:InputName field="{$field}_time"/>" id="<inp2:InputName field="{$field}_time" input_format="1"/>" value="">
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_data_label_td" >
<td valign="top" class="text"><inp2:{$PrefixSpecial}_field field="$field" grid="$grid" plus_or_as_label="1" no_special="no_special" format="$format"/></td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_data_label_ml_td" format="" >
<td valign="top" class="text">
<span class="<inp2:m_if check="{$SourcePrefix}_HasError" field="$virtual_field">error</inp2:m_if>">
<inp2:{$PrefixSpecial}_Field field="$field" grid="$grid" as_label="1" no_special="no_special" format="$format"/>
</span><inp2:m_if check="{$SourcePrefix}_IsRequired" field="$virtual_field"><span class="error"> *</span></inp2:m_if>:<br />
<inp2:m_if check="FieldEquals" field="$ElementTypeField" value="textarea">
<inp2:m_if check="Field" name="MultiLingual" equals_to="1" db="db">
<a href="javascript:PreSaveAndOpenTranslatorCV('<inp2:m_param name="SourcePrefix"/>,<inp2:m_param name="SourcePrefix"/>-cdata', '<inp2:m_param name="SourcePrefix"/>-cdata:cust_<inp2:Field name="CustomFieldId"/>', 'popups/translator', <inp2:$SourcePrefix_Field field="ResourceId"/>, 1);" title="<inp2:m_Phrase label="la_Translate" escape="1"/>"><img src="img/icons/icon24_translate.gif" style="cursor:hand;" border="0"></a>
<inp2:m_else/>
<inp2:Field name="FieldName" result_to_var="custom_field"/>
<a href="javascript:OpenEditor('&section=in-link:editlink_general', 'kernel_form', '<inp2:{$SourcePrefix}_InputName field="cust_{$custom_field}"/>');"><img src="img/icons/icon24_link_editor.gif" style="cursor: hand;" border="0"></a>
</inp2:m_if>
<inp2:m_else/>
<inp2:m_if check="Field" name="MultiLingual" equals_to="1" db="db">
<a href="javascript:PreSaveAndOpenTranslatorCV('<inp2:m_param name="SourcePrefix"/>,<inp2:m_param name="SourcePrefix"/>-cdata', '<inp2:m_param name="SourcePrefix"/>-cdata:cust_<inp2:Field name="CustomFieldId"/>', 'popups/translator', <inp2:$SourcePrefix_Field field="ResourceId"/>);" title="<inp2:m_Phrase label="la_Translate" escape="1"/>"><img src="img/icons/icon24_translate.gif" style="cursor:hand;" border="0"></a>
</inp2:m_if>
</inp2:m_if>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_column_filter">
<td>&nbsp;</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_options_filter" use_phrases="0">
<td>
<select <inp2:m_if check="SearchField" field="$filter_field" filter_type="options" grid="$grid">class="filter"</inp2:m_if> name="<inp2:SearchInputName field="$filter_field" filter_type="options" grid="$grid"/>">
<inp2:m_if check="m_ParamEquals" name="use_phrases" value="1" >
<inp2:PredefinedSearchOptions field="$filter_field" block="inp_option_phrase" selected="selected" has_empty="1" empty_value="" filter_type="options" grid="$grid"/>
<inp2:m_else/>
<inp2:PredefinedSearchOptions field="$filter_field" block="inp_option_item" selected="selected" has_empty="1" empty_value="" filter_type="options" grid="$grid"/>
</inp2:m_if>
</select>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_like_filter">
<td>
<input type="text" class="flat-input<inp2:m_if check="SearchField" field="$filter_field" filter_type="like" grid="$grid"> filter</inp2:m_if>" name="<inp2:SearchInputName field="$filter_field" filter_type="like" grid="$grid"/>" value="<inp2:SearchField field="$filter_field" filter_type="like" grid="$grid"/>" onkeydown="search_keydown(event, '<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>);"/>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_picker_filter" use_phrases="0" filter_width="90%">
<td>
<select
class="filter <inp2:m_if check="SearchField" field="$filter_field" filter_type="options" grid="$grid">filter-active</inp2:m_if>"
name="<inp2:SearchInputName field="$filter_field" filter_type="picker" grid="$grid"/>"
style="width: <inp2:m_Param name="filter_width"/>">
<inp2:m_if check="m_ParamEquals" name="use_phrases" value="1">
<inp2:PredefinedSearchOptions field="$filter_field" block="inp_option_phrase" selected="selected" has_empty="1" empty_value="" filter_type="picker" grid="$grid"/>
<inp2:m_else/>
<inp2:PredefinedSearchOptions field="$filter_field" block="inp_option_item" selected="selected" has_empty="1" empty_value="" filter_type="picker" grid="$grid"/>
</inp2:m_if>
</select>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_equals_filter">
<td>
<input type="text" class="flat-input<inp2:m_if check="SearchField" field="$filter_field" filter_type="equals" grid="$grid"> filter</inp2:m_if>" name="<inp2:SearchInputName field="$filter_field" filter_type="equals" grid="$grid"/>" value="<inp2:SearchField field="$filter_field" filter_type="equals" grid="$grid"/>" onkeydown="search_keydown(event, '<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>);"/>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_range_filter">
<td>
<input type="text" class="flat-input<inp2:m_if check="SearchField" field="$filter_field" filter_type="range" type="from" grid="$grid"> filter</inp2:m_if>" name="<inp2:SearchInputName field="$filter_field" filter_type="range" type="from" grid="$grid"/>" value="<inp2:SearchField field="$filter_field" filter_type="range" type="from" grid="$grid"/>" size="5" onkeydown="search_keydown(event, '<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>);"/><br />
<input type="text" class="flat-input<inp2:m_if check="SearchField" field="$filter_field" filter_type="range" type="to" grid="$grid"> filter</inp2:m_if>" name="<inp2:SearchInputName field="$filter_field" filter_type="range" type="to" grid="$grid"/>" value="<inp2:SearchField field="$filter_field" filter_type="range" type="to" grid="$grid"/>" size="5" onkeydown="search_keydown(event, '<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>);"/><br />
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_float_range_filter">
<td>
<input type="text" class="flat-input<inp2:m_if check="SearchField" field="$filter_field" filter_type="float_range" type="from" grid="$grid"> filter</inp2:m_if>" name="<inp2:SearchInputName field="$filter_field" filter_type="float_range" type="from" grid="$grid"/>" value="<inp2:SearchField field="$filter_field" filter_type="float_range" type="from" grid="$grid"/>" size="5" onkeydown="search_keydown(event, '<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>);"/><br />
<input type="text" class="flat-input<inp2:m_if check="SearchField" field="$filter_field" filter_type="float_range" type="to" grid="$grid"> filter</inp2:m_if>" name="<inp2:SearchInputName field="$filter_field" filter_type="float_range" type="to" grid="$grid"/>" value="<inp2:SearchField field="$filter_field" filter_type="float_range" type="to" grid="$grid"/>" size="5" onkeydown="search_keydown(event, '<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>);"/><br />
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_date_range_filter">
<td>
<input type="text" class="flat-input<inp2:m_if check="SearchField" field="$filter_field" filter_type="date_range" type="from" grid="$grid"> filter</inp2:m_if>" name="<inp2:SearchInputName field="$filter_field" filter_type="date_range" type="from" grid="$grid"/>" id="<inp2:SearchInputName field="$filter_field" filter_type="date_range" type="from" grid="$grid"/>" value="<inp2:SearchField field="$filter_field" filter_type="date_range" type="from" grid="$grid"/>" size="15" datepickerIcon="img/calendar_icon.gif" onkeydown="search_keydown(event, '<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>);"/><br />
<input type="text" class="flat-input<inp2:m_if check="SearchField" field="$filter_field" filter_type="date_range" type="to" grid="$grid"> filter</inp2:m_if>" name="<inp2:SearchInputName field="$filter_field" filter_type="date_range" type="to" grid="$grid"/>" id="<inp2:SearchInputName field="$filter_field" filter_type="date_range" type="to" grid="$grid"/>" value="<inp2:SearchField field="$filter_field" filter_type="date_range" type="to" grid="$grid"/>" size="15" datepickerIcon="img/calendar_icon.gif" onkeydown="search_keydown(event, '<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="grid"/>', <inp2:m_param name="ajax"/>);"/><br />
</td>
<script type="text/javascript">
initCalendar("<inp2:SearchInputName field="$filter_field" filter_type="date_range" type="from" grid="$grid"/>", "<inp2:Format field="{$sort_field}_date" input_format="1"/>");
initCalendar("<inp2:SearchInputName field="$filter_field" filter_type="date_range" type="to" grid="$grid"/>", "<inp2:Format field="{$sort_field}_date" input_format="1"/>");
</script>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="viewmenu_sort_block">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addMenuItem('<inp2:m_phrase name="$title" escape="1"/>','direct_sort_grid("<inp2:m_param name="PrefixSpecial"/>","<inp2:m_param name="sort_field"/>","<inp2:{$PrefixSpecial}_OrderInfo type="direction" pos="1"/>", null, <inp2:m_param name="ajax"/>);','<inp2:m_if check="{$PrefixSpecial}_IsOrder" field="$sort_field" pos="1" >2</inp2:m_if>');
</inp2:m_DefineElement>
<inp2:m_DefineElement name="viewmenu_filter_block">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].addMenuItem('<inp2:m_param name="label" js_escape="1"/>','<inp2:m_param name="filter_action"/>','<inp2:m_param name="filter_status"/>');
</inp2:m_DefineElement>
<inp2:m_DefineElement name="viewmenu_filter_separator">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].addMenuSeparator();
</inp2:m_DefineElement>
<inp2:m_DefineElement name="viewmenu_declaration" menu_filters="no" menu_sorting="yes" menu_perpage="yes" menu_select="yes" ajax="0">
// define ViewMenu
$fw_menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'] = function()
{
<inp2:m_if check="m_ParamEquals" name="menu_filters" value="yes">
// filtring menu
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'] = new Menu('<inp2:m_phrase name="la_Text_View" escape="1"/>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].addMenuItem('All','filters_remove_all("<inp2:m_param name="PrefixSpecial"/>", <inp2:m_param name="ajax"/>);');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].addMenuItem('None','filters_apply_all("<inp2:m_param name="PrefixSpecial"/>", <inp2:m_param name="ajax"/>);');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].addMenuSeparator();
<inp2:{$PrefixSpecial}_DrawFilterMenu old_style="1" item_block="viewmenu_filter_block" spearator_block="viewmenu_filter_separator" ajax="$ajax"/>
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_sorting" value="yes">
// sorting menu
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'] = new Menu('<inp2:m_phrase name="la_Text_Sort" escape="1"/>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addMenuItem('<inp2:m_phrase name="la_common_ascending" escape="1"/>','direct_sort_grid("<inp2:m_param name="PrefixSpecial"/>","<inp2:{$PrefixSpecial}_OrderInfo type="field" pos="1"/>","asc",null,<inp2:m_param name="ajax"/>);','<inp2:m_if check="{$PrefixSpecial}_IsOrder" direction="asc" pos="1" >2</inp2:m_if>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addMenuItem('<inp2:m_phrase name="la_common_descending" escape="1"/>','direct_sort_grid("<inp2:m_param name="PrefixSpecial"/>","<inp2:{$PrefixSpecial}_OrderInfo type="field" pos="1"/>","desc",null,<inp2:m_param name="ajax"/>);','<inp2:m_if check="{$PrefixSpecial}_IsOrder" direction="desc" pos="1" >2</inp2:m_if>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addMenuSeparator();
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addMenuItem('<inp2:m_phrase name="la_Text_Default" escape="1"/>','reset_sorting("<inp2:m_param name="PrefixSpecial"/>");');
<inp2:{$PrefixSpecial}_IterateGridFields grid="$grid" mode="header" block="viewmenu_sort_block" ajax="$ajax"/>
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_perpage" value="yes">
// per page menu
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'] = new Menu('<inp2:m_phrase name="la_prompt_PerPage" escape="1"/>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addMenuItem('10','set_per_page("<inp2:m_param name="PrefixSpecial"/>",10,<inp2:m_param name="ajax"/>);','<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="10" >2</inp2:m_if>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addMenuItem('20','set_per_page("<inp2:m_param name="PrefixSpecial"/>",20,<inp2:m_param name="ajax"/>);','<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="20" >2</inp2:m_if>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addMenuItem('50','set_per_page("<inp2:m_param name="PrefixSpecial"/>",50,<inp2:m_param name="ajax"/>);','<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="50" >2</inp2:m_if>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addMenuItem('100','set_per_page("<inp2:m_param name="PrefixSpecial"/>",100,<inp2:m_param name="ajax"/>);','<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="100" >2</inp2:m_if>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addMenuItem('500','set_per_page("<inp2:m_param name="PrefixSpecial"/>",500,<inp2:m_param name="ajax"/>);','<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="500" >2</inp2:m_if>');
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_select" value="yes">
// select menu
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'] = new Menu('<inp2:m_phrase name="la_Text_Select" escape="1"/>');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'].addMenuItem('<inp2:m_phrase name="la_Text_All" escape="1"/>','Grids["<inp2:m_param name="PrefixSpecial"/>"].SelectAll();');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'].addMenuItem('<inp2:m_phrase name="la_Text_Unselect" escape="1"/>','Grids["<inp2:m_param name="PrefixSpecial"/>"].ClearSelection();');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'].addMenuItem('<inp2:m_phrase name="la_Text_Invert" escape="1"/>','Grids["<inp2:m_param name="PrefixSpecial"/>"].InvertSelection();');
</inp2:m_if>
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'] = new Menu('<inp2:{$PrefixSpecial}_GetItemName/>');
<inp2:m_if check="m_ParamEquals" name="menu_filters" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addMenuItem( $Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'] );
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_sorting" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addMenuItem( $Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'] );
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_perpage" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addMenuItem( $Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'] );
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_select" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addMenuItem( $Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'] );
</inp2:m_if>
}
</inp2:m_DefineElement>
<inp2:m_include template="incs/menu_blocks"/>
<inp2:m_DefineElement name="grid_save_warning" >
<table width="100%" border="0" cellspacing="0" cellpadding="4" class="table_border_<inp2:m_if check="m_ParamEquals" name="no_toolbar" value="no_toolbar" >nobottom<inp2:m_else/>notop</inp2:m_if>">
<tr>
<td valign="top" class="hint_red">
<inp2:m_phrase name="la_Warning_Save_Item"/>
</td>
</tr>
</table>
<script type="text/javascript">
$edit_mode = <inp2:m_if check="m_ParamEquals" name="edit_mode" value="1">true<inp2:m_else />false</inp2:m_if>;
// window.parent.document.title += ' - MODE: ' + ($edit_mode ? 'EDIT' : 'LIVE');
</script>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid" main_prefix="" per_page="" main_special="" no_toolbar="" grid_filters="" search="on" header_block="grid_column_title" filter_block="grid_column_filter" data_block="grid_data_td" totals_block="grid_total_td" row_block="_row" ajax="0" totals="0">
<!--
grid_filters - show individual filters for each column
has_filters - draw filter section in "View" menu in toolbar
-->
<inp2:InitList pass_params="1"/> <!-- this is to avoid recalling prefix as an item in first iterate grid, by col-picker for instance -->
<inp2:{$PrefixSpecial}_SaveWarning name="grid_save_warning" main_prefix="$main_prefix" no_toolbar="$no_toolbar"/>
<inp2:m_if check="m_RecallEquals" var="{$PrefixSpecial}_search_keyword" value="" inverse="inverse">
<table width="100%" border="0" cellspacing="0" cellpadding="4" class="table_border_<inp2:m_if check="m_ParamEquals" name="no_toolbar" value="no_toolbar" >nobottom<inp2:m_else/>notop</inp2:m_if>">
<tr>
<td valign="top" class="hint_red">
<inp2:m_phrase name="la_Warning_Filter"/>
</td>
</tr>
</table>
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="per_page" value="-1" inverse="1">
<inp2:m_RenderElement name="grid_pagination" grid="$grid" PrefixSpecial="$PrefixSpecial" main_special="$main_special" search="$search" no_toolbar="$no_toolbar" ajax="$ajax"/>
</inp2:m_if>
<table width="100%" cellspacing="0" cellpadding="4" class="bordered">
<inp2:m_if check="m_ParamEquals" name="grid_filters" value="1">
<tr class="pagination_bar">
<inp2:{$PrefixSpecial}_IterateGridFields grid="$grid" mode="filter" block="$filter_block" ajax="$ajax"/>
</tr>
</inp2:m_if>
<tr class="subsectiontitle">
<inp2:{$PrefixSpecial}_IterateGridFields grid="$grid" mode="header" block="$header_block" ajax="$ajax"/>
</tr>
<inp2:m_DefineElement name="_row" td_style="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>" id="<inp2:m_param name="PrefixSpecial"/>_<inp2:Field field="$IdField"/>" sequence="<inp2:m_get param="{$PrefixSpecial}_sequence"/>"><inp2:m_inc param="{$PrefixSpecial}_sequence" by="1"/>
<inp2:IterateGridFields grid="$grid" mode="data" block="$data_block"/>
</tr>
</inp2:m_DefineElement>
<inp2:m_set {$PrefixSpecial}_sequence="1" odd_even="table-color1"/>
<inp2:{$PrefixSpecial}_PrintList block="$row_block" per_page="$per_page" main_special="$main_special" />
<inp2:m_DefineElement name="grid_total_td">
<inp2:m_if check="m_Param" name="total">
<td style="<inp2:m_param name="td_style"/>">
<inp2:FieldTotal name="$field" function="$total"/>
</td>
<inp2:m_else/>
<td style="<inp2:m_param name="td_style"/>">&nbsp;</td>
</inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_if check="m_ParamEquals" name="totals" value="1">
<tr class="totals-row"/>
<inp2:IterateGridFields grid="$grid" mode="data" block="$totals_block"/>
</tr>
</inp2:m_if>
</table>
<inp2:m_if check="m_ParamEquals" name="ajax" value="0">
<inp2:m_if check="m_GetEquals" name="fw_menu_included" value="">
<script type="text/javascript" src="incs/fw_menu.js"></script>
<link rel="stylesheet" rev="stylesheet" href="incs/nlsmenu.css" type="text/css" />
<script type="text/javascript" src="js/nlsmenu.js"></script>
<script type="text/javascript" src="js/nlsmenueffect_1_2_1.js"></script>
<script type="text/javascript">
var menuMgr = new NlsMenuManager("mgr");
menuMgr.timeout = 500;
menuMgr.flowOverFormElement = true;
</script>
<inp2:m_set fw_menu_included="1"/>
</inp2:m_if>
<script type="text/javascript">
<inp2:m_RenderElement name="grid_js" selected_class="selected_div" tag_name="tr" pass_params="true"/>
</script>
</inp2:m_if>
<input type="hidden" id="<inp2:m_param name="PrefixSpecial"/>_Sort1" name="<inp2:m_param name="PrefixSpecial"/>_Sort1" value="">
<input type="hidden" id="<inp2:m_param name="PrefixSpecial"/>_Sort1_Dir" name="<inp2:m_param name="PrefixSpecial"/>_Sort1_Dir" value="asc">
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_js" view_menu="1" ajax="1">
<inp2:m_if check="m_ParamEquals" name="no_init" value="no_init" inverse="inverse">
Grids['<inp2:m_param name="PrefixSpecial"/>'] = new Grid('<inp2:m_param name="PrefixSpecial"/>', '<inp2:m_param name="selected_class"/>', ':original', edit, a_toolbar);
Grids['<inp2:m_param name="PrefixSpecial"/>'].AddItemsByIdMask('<inp2:m_param name="tag_name"/>', /^<inp2:m_param name="PrefixSpecial"/>_([\d\w-]+)/, '<inp2:m_param name="PrefixSpecial"/>[$$ID$$][<inp2:m_param name="IdField"/>]');
Grids['<inp2:m_param name="PrefixSpecial"/>'].InitItems();
<inp2:m_if check="{$PrefixSpecial}_UseAutoRefresh">
function refresh_grid() {
// window.location.reload();
var $window_url = window.location.href;
if ($window_url.indexOf('skip_session_refresh=1') == -1) {
$window_url += '&skip_session_refresh=1';
}
window.location.href = $window_url;
}
setTimeout('refresh_grid()', <inp2:$PrefixSpecial_AutoRefreshInterval/> * 60000);
</inp2:m_if>
</inp2:m_if>
<inp2:m_if check="m_Param" name="view_menu">
<inp2:m_RenderElement name="nlsmenu_declaration" pass_params="true"/>
$ViewMenus = new Array('<inp2:m_param name="PrefixSpecial"/>');
</inp2:m_if>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="white_grid" main_prefix="" per_page="" main_special="" no_toolbar="" search="on" render_as="" columns="2" direction="V" empty_cell_render_as="wg_empty_cell" ajax="0">
<inp2:{$PrefixSpecial}_SaveWarning name="grid_save_warning" main_prefix="$main_prefix" no_toolbar="$no_toolbar"/>
<inp2:m_if check="m_RecallEquals" var="{$PrefixSpecial}_search_keyword" value="" inverse="inverse">
<table width="100%" border="0" cellspacing="0" cellpadding="4" class="table_border_<inp2:m_if check="m_ParamEquals" name="no_toolbar" value="no_toolbar" >nobottom<inp2:m_else/>notop</inp2:m_if>">
<tr>
<td valign="top" class="hint_red">
<inp2:m_phrase name="la_Warning_Filter"/>
</td>
</tr>
</table>
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="per_page" value="-1" inverse="1">
<inp2:m_RenderElement name="grid_pagination" grid="$grid" PrefixSpecial="$PrefixSpecial" main_special="$main_special" search="$search" no_toolbar="$no_toolbar" ajax="$ajax"/>
</inp2:m_if>
<br />
<inp2:m_DefineElement name="wg_empty_cell">
<td width="<inp2:m_param name="column_width"/>%">&nbsp;</td>
</inp2:m_DefineElement>
<table width="100%" border="0" cellspacing="2" cellpadding="4">
<inp2:m_set {$PrefixSpecial}_sequence="1" odd_even="table-color1"/>
<inp2:{$PrefixSpecial}_PrintList2 pass_params="true"/>
</table>
<inp2:m_if check="m_ParamEquals" name="ajax" value="0">
<inp2:m_if check="m_GetEquals" name="fw_menu_included" value="">
<script type="text/javascript" src="incs/fw_menu.js"></script>
<link rel="stylesheet" rev="stylesheet" href="incs/nlsmenu.css" type="text/css" />
<script type="text/javascript" src="js/nlsmenu.js"></script>
<script type="text/javascript" src="js/nlsmenueffect_1_2_1.js"></script>
<script type="text/javascript">
var menuMgr = new NlsMenuManager("mgr");
menuMgr.timeout = 500;
menuMgr.flowOverFormElement = true;
</script>
<inp2:m_set fw_menu_included="1"/>
</inp2:m_if>
<script type="text/javascript">
<inp2:m_RenderElement name="grid_js" selected_class="table_white_selected" tag_name="td" pass_params="true"/>
</script>
</inp2:m_if>
<input type="hidden" id="<inp2:m_param name="PrefixSpecial"/>_Sort1" name="<inp2:m_param name="PrefixSpecial"/>_Sort1" value="">
<input type="hidden" id="<inp2:m_param name="PrefixSpecial"/>_Sort1_Dir" name="<inp2:m_param name="PrefixSpecial"/>_Sort1_Dir" value="asc">
</inp2:m_DefineElement>
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/incs/grid_blocks.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.9.2.9
\ No newline at end of property
+1.9.2.10
\ No newline at end of property
Index: branches/RC/core/admin_templates/incs/menu_blocks.tpl
===================================================================
--- branches/RC/core/admin_templates/incs/menu_blocks.tpl (revision 10831)
+++ branches/RC/core/admin_templates/incs/menu_blocks.tpl (revision 10832)
@@ -1,111 +1,111 @@
<inp2:m_DefineElement name="nlsmenu_sort_block">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.sort.<inp2:m_param name="sort_field"/>'), '<inp2:m_phrase name="$title" html_escape="1" js_escape="1"/>','javascript:direct_sort_grid("<inp2:m_param name="PrefixSpecial"/>","<inp2:m_param name="sort_field"/>","<inp2:{$PrefixSpecial}_OrderInfo type="direction" pos="1"/>", null, <inp2:m_param name="ajax"/>);'<inp2:m_if check="{$PrefixSpecial}_IsOrder" field="$sort_field" pos="1" >,['img/menu_dot.gif']</inp2:m_if>);
</inp2:m_DefineElement>
<inp2:m_DefineElement name="nlsmenu_filter_block">
$Menus['<inp2:m_Param name="menu_name"/>'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.filter.<inp2:m_param name="label" escape="1"/>', true), '<inp2:m_param name="label" html_escape="1"/>', 'javascript:<inp2:m_param name="filter_action" js_escape="1"/>',<inp2:m_param name="filter_status"/>);
</inp2:m_DefineElement>
<inp2:m_DefineElement name="nlsmenu_auto_refresh_element">
$Menus['<inp2:m_Param name="menu_name"/>'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.refresh_interval.<inp2:m_Param name="refresh_interval"/>'), '<inp2:m_param name="label" js_escape="1" html_escape="1"/>', 'javascript:set_refresh_interval("<inp2:m_Param name="PrefixSpecial"/>", <inp2:m_Param name="refresh_interval"/>, <inp2:m_Param name="ajax"/>)'<inp2:m_if check="m_Param" name="selected">, ['img/menu_dot.gif']</inp2:m_if>);
</inp2:m_DefineElement>
<inp2:m_DefineElement name="nlsmenu_filter_separator">
$Menus['<inp2:m_Param name="menu_name"/>'].addSeparator();
</inp2:m_DefineElement>
<inp2:m_DefineElement name="nlsmenu_declaration" menu_columns="yes" menu_auto_refresh="yes" menu_filters="no" menu_sorting="yes" menu_perpage="yes" menu_select="yes" ajax="0">
// define ViewMenu
<inp2:m_if check="m_ParamEquals" name="menu_auto_refresh" value="yes">
// auto refresh menu
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_auto_refresh_menu'] = menuMgr.createMenu(rs('<inp2:m_param name="PrefixSpecial"/>.auto_refresh.menu'));
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_auto_refresh_menu'].applyBorder(false, false, false, false);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_auto_refresh_menu'].dropShadow("none");
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_auto_refresh_menu'].showIcon = true;
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_auto_refresh_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.auto_refresh.enabled'), '<inp2:m_Phrase name="la_Enabled" html_escape="1" js_escape="1"/>', 'javascript:submit_event("<inp2:m_param name="PrefixSpecial"/>", "OnAutoRefreshToggle");'<inp2:m_if check="{$PrefixSpecial}_UseAutoRefresh">, ['img/check_on.gif']</inp2:m_if>);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_auto_refresh_menu'].addSeparator();
<inp2:{$PrefixSpecial}_DrawAutoRefreshMenu render_as="nlsmenu_auto_refresh_element" menu_name="{$PrefixSpecial}_auto_refresh_menu" ajax="$ajax"/>
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_filters" value="yes">
// filtring menu
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'] = menuMgr.createMenu(rs('<inp2:m_param name="PrefixSpecial"/>.filter.menu'));
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].applyBorder(false, false, false, false);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].dropShadow("none");
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].showIcon = true;
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.filter.all'), '<inp2:m_Phrase name="la_Text_All" html_escape="1" js_escape="1"/>','javascript:filters_remove_all("<inp2:m_param name="PrefixSpecial"/>", <inp2:m_param name="ajax"/>);');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.filter.none'), '<inp2:m_Phrase name="la_Text_None" html_escape="1" js_escape="1"/>','javascript:filters_apply_all("<inp2:m_param name="PrefixSpecial"/>", <inp2:m_param name="ajax"/>);');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_filter_menu'].addSeparator();
<inp2:{$PrefixSpecial}_DrawFilterMenu item_block="nlsmenu_filter_block" spearator_block="nlsmenu_filter_separator" menu_name="{$PrefixSpecial}_filter_menu" ajax="$ajax"/>
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_sorting" value="yes">
// sorting menu
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'] = menuMgr.createMenu(rs('<inp2:m_param name="PrefixSpecial"/>.sorting.menu'));
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].applyBorder(false, false, false, false);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].dropShadow("none");
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].showIcon = true;
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.sort.asc'), '<inp2:m_phrase name="la_common_ascending" html_escape="1" js_escape="1"/>','javascript:direct_sort_grid("<inp2:m_param name="PrefixSpecial"/>","<inp2:{$PrefixSpecial}_OrderInfo type="field" pos="1"/>","asc",null,<inp2:m_param name="ajax"/>);'<inp2:m_if check="{$PrefixSpecial}_IsOrder" direction="asc" pos="1" >,['img/menu_dot.gif']</inp2:m_if>);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.sort.desc'), '<inp2:m_phrase name="la_common_descending" html_escape="1" js_escape="1"/>','javascript:direct_sort_grid("<inp2:m_param name="PrefixSpecial"/>","<inp2:{$PrefixSpecial}_OrderInfo type="field" pos="1"/>","desc",null,<inp2:m_param name="ajax"/>);'<inp2:m_if check="{$PrefixSpecial}_IsOrder" direction="desc" pos="1" >,['img/menu_dot.gif']</inp2:m_if>);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addSeparator();
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_sorting_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.sort.def'), '<inp2:m_phrase name="la_Text_Default" html_escape="1" js_escape="1"/>','javascript:reset_sorting("<inp2:m_param name="PrefixSpecial"/>");');
- <inp2:{$PrefixSpecial}_IterateGridFields grid="$grid" mode="header" block="nlsmenu_sort_block" ajax="$ajax"/>
+ <inp2:{$PrefixSpecial}_IterateGridFields grid="$grid" mode="header" force_block="nlsmenu_sort_block" ajax="$ajax"/>
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_perpage" value="yes">
// per page menu
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'] = menuMgr.createMenu(rs('<inp2:m_param name="PrefixSpecial"/>.perpage.menu'));
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].applyBorder(false, false, false, false);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].dropShadow("none");
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].showIcon = true;
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.perpage.10'), '10','javascript:set_per_page("<inp2:m_param name="PrefixSpecial"/>",10,<inp2:m_param name="ajax"/>);'<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="10" >,['img/check_on.gif']</inp2:m_if>);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.perpage.20'), '20','javascript:set_per_page("<inp2:m_param name="PrefixSpecial"/>",20,<inp2:m_param name="ajax"/>);'<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="20" >,['img/check_on.gif']</inp2:m_if>);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.perpage.50'), '50','javascript:set_per_page("<inp2:m_param name="PrefixSpecial"/>",50,<inp2:m_param name="ajax"/>);'<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="50" >,['img/check_on.gif']</inp2:m_if>);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.perpage.100'), '100','javascript:set_per_page("<inp2:m_param name="PrefixSpecial"/>",100,<inp2:m_param name="ajax"/>);'<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="100" >,['img/check_on.gif']</inp2:m_if>);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_perpage_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.perpage.500'), '500','javascript:set_per_page("<inp2:m_param name="PrefixSpecial"/>",500,<inp2:m_param name="ajax"/>);'<inp2:m_if check="{$PrefixSpecial}_PerPageEquals" value="500" >,['img/check_on.gif']</inp2:m_if>);
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_select" value="yes">
// select menu
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'] = menuMgr.createMenu(rs('<inp2:m_param name="PrefixSpecial"/>.select.menu'));
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'].applyBorder(false, false, false, false);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'].dropShadow("none");
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'].showIcon = true;
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.select.all'), '<inp2:m_phrase name="la_Text_All" html_escape="1" js_escape="1"/>','javascript:Grids["<inp2:m_param name="PrefixSpecial"/>"].SelectAll();');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.unselect'), '<inp2:m_phrase name="la_Text_Unselect" html_escape="1" js_escape="1"/>','javascript:Grids["<inp2:m_param name="PrefixSpecial"/>"].ClearSelection();');
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_select_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.invert'), '<inp2:m_phrase name="la_Text_Invert" html_escape="1" js_escape="1"/>','javascript:Grids["<inp2:m_param name="PrefixSpecial"/>"].InvertSelection();');
</inp2:m_if>
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'] = menuMgr.createMenu(rs('<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'));
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].applyBorder(false, false, false, false);
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].dropShadow("none");
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].showIcon = true;
<inp2:m_if check="m_ParamEquals" name="menu_columns" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.columns'),'<inp2:m_Phrase label="la_SelectColumns" html_escape="1" js_escape="1"/>','javascript:openSelector("<inp2:m_param name="PrefixSpecial"/>", "<inp2:m_t template="popups/column_picker" grid_name="$grid" no_amp="1"/>")');
// currently the widths are saved automatically shortly after it have been changed
// $Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.save_view'),'<inp2:m_Phrase label="la_SaveView" escape="1"/>','javascript:myGrid.SaveWidths()');
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_auto_refresh" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.auto_refresh'), '<inp2:m_phrase name="la_text_AutoRefresh" html_escape="1" js_escape="1"/>', 'javascript:void()', null, true, null, rs('<inp2:m_param name="PrefixSpecial"/>.auto_refresh.menu'), null);
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_filters" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.filters'), '<inp2:m_phrase name="la_Text_View" html_escape="1" js_escape="1"/>', 'javascript:void()', null, true, null, rs('<inp2:m_param name="PrefixSpecial"/>.filter.menu'), null);
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_sorting" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.sorting'), '<inp2:m_phrase name="la_Text_Sort" html_escape="1" js_escape="1"/>', 'javascript:void()', null, true, null, rs('<inp2:m_param name="PrefixSpecial"/>.sorting.menu'), null);
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_perpage" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.perpage'), '<inp2:m_phrase name="la_prompt_PerPage" html_escape="1" js_escape="1"/>', 'javascript:void()', null, true, null, rs('<inp2:m_param name="PrefixSpecial"/>.perpage.menu'), null);
</inp2:m_if>
<inp2:m_if check="m_ParamEquals" name="menu_select" value="yes">
$Menus['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'].addItem(rs('<inp2:m_param name="PrefixSpecial"/>.select'), '<inp2:m_phrase name="la_Text_Select" html_escape="1" js_escape="1"/>', 'javascript:void()', null, true, null, rs('<inp2:m_param name="PrefixSpecial"/>.select.menu'), null);
</inp2:m_if>
$MenuNames['<inp2:m_param name="PrefixSpecial"/>'+'_view_menu'] = '<inp2:{$PrefixSpecial}_GetItemName js_escape="1"/>';
Application.processHooks('<inp2:m_param name="PrefixSpecial"/>:OnCreateViewMenu');
</inp2:m_DefineElement>
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/incs/menu_blocks.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3.2.5
\ No newline at end of property
+1.3.2.6
\ No newline at end of property
Index: branches/RC/core/admin_templates/incs/image_blocks.tpl
===================================================================
--- branches/RC/core/admin_templates/incs/image_blocks.tpl (revision 10831)
+++ branches/RC/core/admin_templates/incs/image_blocks.tpl (revision 10832)
@@ -1,152 +1,152 @@
<inp2:m_DefineElement name="image_block">
<img src="<inp2:m_param name="img_path" />" <inp2:m_param name="img_size"/> border="0" /><br />
</inp2:m_DefineElement>
<inp2:m_DefineElement name="thumbnail_section" prefix="" size="" class="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text">
<inp2:m_phrase label="la_fld_Location"/><br>
<span class="error"><inp2:{$prefix}_Error field="ThumbPath"/><inp2:{$prefix}_Error field="ThumbUrl"/></span>&nbsp;
</td>
<td>
<table border="0">
<tr>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="radio" <inp2:m_if check="{$prefix}_FieldEquals" field="LocalThumb" value="1">checked</inp2:m_if> name="<inp2:{$prefix}_InputName field="LocalThumb"/>" id="<inp2:{$prefix}_InputName field="LocalThumb"/>_1" value="1">
</td>
<td>
<inp2:m_phrase label="la_fld_Upload"/>:
</td>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="file" name="<inp2:{$prefix}_InputName field="ThumbPath"/>" id="<inp2:{$prefix}_InputName field="ThumbPath"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" onclick="document.getElementById('<inp2:m_param name="prefix"/>[<inp2:{$prefix}_Field field="ImageId"/>][LocalThumb]_1').checked = true">
<input type="hidden" name="<inp2:{$prefix}_InputName field="ThumbPath"/>[upload]" id="<inp2:{$prefix}_InputName field="ThumbPath"/>[upload]" value="<inp2:{$prefix}_Field field="ThumbPath"/>">
</td>
</tr>
<tr>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="radio" <inp2:m_if check="{$prefix}_FieldEquals" field="LocalThumb" value="0">checked</inp2:m_if> name="<inp2:{$prefix}_InputName field="LocalThumb"/>" id="<inp2:{$prefix}_InputName field="LocalThumb"/>_0" value="0">
</td>
<td>
<inp2:m_phrase label="la_fld_RemoteUrl"/>:
</td>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="text" name="<inp2:{$prefix}_InputName field="ThumbUrl"/>" id="<inp2:{$prefix}_InputName field="ThumbUrl"/>" value="<inp2:{$prefix}_Field field="ThumbUrl"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" onclick="document.getElementById('<inp2:m_param name="prefix"/>[<inp2:{$prefix}_Field field="ImageId"/>][LocalThumb]_0').checked = true">
</td>
</tr>
</table>
</td>
<td>
- <inp2:{$prefix}_Image block="image_block" Thumbnail="1" DefaultImage="../../kernel/images/noimage.gif"/>
+ <inp2:{$prefix}_Image block="image_block" Thumbnail="1" DefaultImage="noimage.gif"/>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="fullsize_section" prefix="" size="" class="">
<tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>">
<td class="text">
<inp2:m_phrase label="la_fld_Location"/><br>
<span class="error"><inp2:{$prefix}_Error field="LocalPath"/><inp2:{$prefix}_Error field="Url"/></span>&nbsp;
</td>
<td>
<table border="0">
<tr>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="radio" <inp2:m_if check="{$prefix}_FieldEquals" field="LocalImage" value="1">checked</inp2:m_if> name="<inp2:{$prefix}_InputName field="LocalImage"/>" id="<inp2:{$prefix}_InputName field="LocalImage"/>_1" value="1">
</td>
<td>
<inp2:m_phrase label="la_fld_Upload"/>:
</td>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="file" name="<inp2:{$prefix}_InputName field="LocalPath"/>" id="<inp2:{$prefix}_InputName field="LocalPath"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" onclick="document.getElementById('<inp2:m_param name="prefix"/>[<inp2:{$prefix}_field field="ImageId"/>][LocalImage]_1').checked = true">
<input type="hidden" name="<inp2:{$prefix}_InputName field="LocalPath"/>[upload]" id="<inp2:{$prefix}_InputName field="LocalPath"/>[upload]" value="<inp2:{$prefix}_Field field="LocalPath"/>">
</td>
</tr>
<tr>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="radio" <inp2:m_if check="{$prefix}_FieldEquals" field="LocalImage" value="0">checked</inp2:m_if> name="<inp2:{$prefix}_InputName field="LocalImage"/>" id="<inp2:{$prefix}_InputName field="LocalImage"/>_0" value="0">
</td>
<td>
<inp2:m_phrase label="la_fld_RemoteUrl"/>:
</td>
<td>
<inp2:m_inc param="tab_index" by="1"/>
<input type="text" name="<inp2:{$prefix}_InputName field="Url"/>" id="<inp2:{$prefix}_InputName field="Url"/>" value="<inp2:{$prefix}_Field field="Url"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>" onclick="document.getElementById('<inp2:m_param name="prefix"/>[<inp2:{$prefix}_Field field="ImageId"/>][LocalImage]_0').checked = true">
</td>
</tr>
</table>
</td>
<td>
- <inp2:{$prefix}_Image block="image_block" DefaultImage="../../kernel/images/noimage.gif"/>
+ <inp2:{$prefix}_Image block="image_block" DefaultImage="noimage.gif"/>
</td>
</tr>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="images_edit_js">
function FieldID($field_name) {
var $field_mask = '<inp2:{$prefix}_InputName field="#FIELD#"/>';
return $field_mask.replace('#FIELD#', $field_name);
}
function toggle_fullsize() {
if (document.getElementById('_cb_' + FieldID('SameImages')).checked) {
document.getElementById(FieldID('LocalImage') + '_0').disabled = true;
document.getElementById(FieldID('LocalImage') + '_1').disabled = true;
document.getElementById(FieldID('LocalPath')).disabled = true;
document.getElementById(FieldID('Url')).disabled = true;
}
else {
document.getElementById(FieldID('LocalImage') + '_0').disabled = false;
document.getElementById(FieldID('LocalImage') + '_1').disabled = false;
document.getElementById(FieldID('LocalPath')).disabled = false;
document.getElementById(FieldID('Url')).disabled = false;
}
}
if (document.getElementById('_cb_' + FieldID('DefaultImg')).checked) {
document.getElementById('_cb_' + FieldID('DefaultImg')).disabled = true;
document.getElementById('_cb_' + FieldID('Enabled')).disabled = true;
}
function check_status() {
if (document.getElementById('_cb_' + FieldID('DefaultImg')).checked) {
document.getElementById('_cb_' + FieldID('Enabled')).checked = true;
document.getElementById(FieldID('Enabled')).value = 1;
}
}
function check_primary() {
if (!document.getElementById('_cb_' + FieldID('Enabled')).checked) {
document.getElementById('_cb_' + FieldID('DefaultImg')).checked = false;
document.getElementById(FieldID('DefaultImg')).value = 0;
}
}
</inp2:m_DefineElement>
<inp2:m_DefineElement name="image_caption_td" >
<td valign="top" class="text">
<input type="checkbox" name="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>" id="<inp2:{$PrefixSpecial}_InputName field="$IdField" IdField="$IdField"/>">
<img src="<inp2:ModulePath module="In-Portal"/>img/itemicons/<inp2:{$PrefixSpecial}_ItemIcon grid="$grid"/>">
<inp2:Field field="$field" grid="$grid"/><span class="priority"><inp2:m_if check="{$PrefixSpecial}_fieldequals" field="Priority" value="0"><inp2:m_else/><sup><inp2:{$PrefixSpecial}_field field="Priority" /></sup></inp2:m_if></span>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="image_preview_td">
<td>
- <inp2:Image block="image_block" Thumbnail="1" DefaultImage="../../kernel/images/noimage.gif" MaxWidth="120" MaxHeight="120"/>
+ <inp2:Image block="image_block" Thumbnail="1" DefaultImage="noimage.gif" MaxWidth="120" MaxHeight="120"/>
</td>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="image_url_td">
<td valign="top" class="text">
<inp2:ImageUrl local_phrase="!la_LocalImage!"/>
</td>
</inp2:m_DefineElement>
Property changes on: branches/RC/core/admin_templates/incs/image_blocks.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.7.2.1
\ No newline at end of property
+1.7.2.2
\ No newline at end of property
Index: branches/RC/core/admin_templates/regional/languages_import.tpl
===================================================================
--- branches/RC/core/admin_templates/regional/languages_import.tpl (revision 10831)
+++ branches/RC/core/admin_templates/regional/languages_import.tpl (revision 10832)
@@ -1,41 +1,46 @@
<inp2:m_RequireLogin permissions="in-portal:configure_lang.view" system="1"/>
<inp2:m_include t="incs/header"/>
<inp2:m_RenderElement name="section_header" icon="icon46_conf_regional" title="!la_title_ImportLanguagePack!"/>
<inp2:m_RenderElement name="blue_bar" prefix="lang" title_preset="import_language" module="in-portal" icon="icon46_conf_regional"/>
<!-- 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','OnImportLanguage');
+ Application.SetVar('next_template', 'regional/languages_list')
+ submit_event('lang','OnImportLanguage');
}
) );
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>
-<table width="100%" border="0" cellspacing="0" cellpadding="4" class="bordered">
- <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
-
- <inp2:m_RenderElement name="inp_edit_upload" prefix="phrases.import" field="LangFile" title="!la_fld_LanguageFile!"/>
-
- <inp2:m_RenderElement name="inp_edit_checkboxes" prefix="phrases.import" field="PhraseType" title="!la_fld_InstallPhraseTypes!"/>
- <inp2:m_RenderElement name="inp_edit_checkbox" prefix="phrases.import" field="ImportOverwrite" hint_label="la_importlang_phrasewarning" title="la_prompt_overwritephrases"/>
-
- <!-- <inp2:m_RenderElement name="inp_edit_checkboxes" no_empty="no_empty" prefix="phrases.export" field="Module" title="!la_fld_InstallModules!" /> -->
-</table>
+<inp2:phrases.import_SaveWarning name="grid_save_warning"/>
+<inp2:phrases.import_ErrorWarning name="form_error_warning"/>
+<div id="scroll_container">
+ <table class="edit-form">
+ <inp2:m_RenderElement name="subsection" title="!la_section_General!"/>
+
+ <inp2:m_RenderElement name="inp_edit_upload" prefix="phrases.import" field="LangFile" title="!la_fld_LanguageFile!"/>
+
+ <inp2:m_RenderElement name="inp_edit_checkboxes" prefix="phrases.import" field="PhraseType" title="!la_fld_InstallPhraseTypes!"/>
+ <inp2:m_RenderElement name="inp_edit_checkbox" prefix="phrases.import" field="ImportOverwrite" hint_label="la_importlang_phrasewarning" title="la_prompt_overwritephrases"/>
+
+ <!-- <inp2:m_RenderElement name="inp_edit_checkboxes" no_empty="no_empty" prefix="phrases.export" field="Module" title="!la_fld_InstallModules!" /> -->
+ </table>
+</div>
<inp2:m_include t="incs/footer"/>
Property changes on: branches/RC/core/admin_templates/regional/languages_import.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4.2.1
\ No newline at end of property
+1.4.2.2
\ No newline at end of property
Index: branches/RC/core/install/install_order.txt
===================================================================
--- branches/RC/core/install/install_order.txt (nonexistent)
+++ branches/RC/core/install/install_order.txt (revision 10832)
@@ -0,0 +1 @@
+0
\ No newline at end of file
Property changes on: branches/RC/core/install/install_order.txt
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/install/upgrades.php
===================================================================
--- branches/RC/core/install/upgrades.php (revision 10831)
+++ branches/RC/core/install/upgrades.php (revision 10832)
@@ -1,204 +1,209 @@
<?php
$upgrade_class = 'CoreUpgrades';
/**
* Class, that holds all upgrade scripts for "Core" module
*
*/
class CoreUpgrades extends kHelper {
/**
- * Installator instance
+ * Install toolkit instance
*
- * @var kInstallator
+ * @var kInstallToolkit
*/
- var $Installator = null;
+ var $_toolkit = null;
- function setInstallator(&$instance)
+ /**
+ * Sets common instance of installator toolkit
+ *
+ * @param kInstallToolkit $instance
+ */
+ function setToolkit(&$instance)
{
- $this->Installator =& $instance;
+ $this->_toolkit =& $instance;
}
/**
* 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->Installator->SaveConfig();
+ $this->_toolkit->SaveConfig();
}
if ($mode == 'after') {
$ml_helper =& $this->Application->recallObject('kMultiLanguageHelper');
/* @var $ml_helper kMultiLanguageHelper */
$lang_count = $ml_helper->getLanguageCount();
$this->Application->UnitConfigReader->iterateConfigs(Array (&$this, 'updateTextFields'), $lang_count);
}
}
/**
* 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 int $language_count
* @return bool
*/
function updateTextFields($prefix, &$config_data, $language_count)
{
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)
for ($i = 1; $i <= $language_count; $i++) {
$ml_field = 'l'.$i.'_'.$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_'.EVENT_TYPE_ADMIN,
'USER.PSWD_'.EVENT_TYPE_FRONTEND,
'USER.PSWDC_'.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;
}
}
}
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/install/upgrades.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.7.2.6
\ No newline at end of property
+1.7.2.7
\ No newline at end of property
Index: branches/RC/core/install/install_toolkit.php
===================================================================
--- branches/RC/core/install/install_toolkit.php (nonexistent)
+++ branches/RC/core/install/install_toolkit.php (revision 10832)
@@ -0,0 +1,681 @@
+<?php
+
+ /**
+ * Upgrade sqls are located using this mask
+ *
+ */
+ define('UPGRADES_FILE', FULL_PATH.'/%sinstall/upgrades.%s');
+
+ /**
+ * Prerequisit check classes are located using this mask
+ *
+ */
+ define('PREREQUISITE_FILE', FULL_PATH.'/%sinstall/prerequisites.php');
+
+ /**
+ * Format of version identificator in upgrade files
+ *
+ */
+ define('VERSION_MARK', '# ===== v ([\d]+\.[\d]+\.[\d]+) =====');
+
+ if (!defined('GET_LICENSE_URL')) {
+ /**
+ * Url used for retrieving user licenses from Intechnic licensing server
+ *
+ */
+ define('GET_LICENSE_URL', 'http://www.intechnic.com/myaccount/license.php');
+ }
+
+ /**
+ * Misc functions, that are required during installation, when
+ *
+ */
+ class kInstallToolkit {
+
+ /**
+ * Reference to kApplication class object
+ *
+ * @var kApplication
+ */
+ var $Application = null;
+
+ /**
+ * Connection to database
+ *
+ * @var kDBConnection
+ */
+ var $Conn = null;
+
+ /**
+ * Path to config.php
+ *
+ * @var string
+ */
+ var $INIFile = '';
+
+ /**
+ * Parsed data from config.php
+ *
+ * @var Array
+ */
+ var $systemConfig = Array ();
+
+ /**
+ * Installator instance
+ *
+ * @var kInstallator
+ */
+ var $_installator = null;
+
+ function kInstallToolkit()
+ {
+ if (class_exists('kApplication')) {
+ // auto-setup in case of separate module install
+ $this->Application =& kApplication::Instance();
+ $this->Conn =& $this->Application->GetADODBConnection();
+ }
+
+ $this->INIFile = FULL_PATH . '/config.php';
+
+ $this->systemConfig = $this->ParseConfig(true);
+ }
+
+ /**
+ * Sets installator
+ *
+ * @param kInstallator $instance
+ */
+ function setInstallator(&$instance)
+ {
+ $this->_installator =& $instance;
+ }
+
+ /**
+ * Checks prerequisities before module install or upgrade
+ *
+ * @param string $module_path
+ * @param string $versions
+ * @param string $mode upgrade mode = {install, standalone, upgrade}
+ */
+ function CheckPrerequisites($module_path, $versions, $mode)
+ {
+ $prerequisites_file = sprintf(PREREQUISITE_FILE, $module_path);
+ if (!file_exists($prerequisites_file) || !$versions) {
+ return Array ();
+ }
+
+ include_once $prerequisites_file;
+
+ $prerequisite_object = new $prerequisite_class();
+ if (method_exists($prerequisite_object, 'setToolkit')) {
+ $prerequisite_object->setToolkit(&$this);
+ }
+
+ // some errors possible
+ return $prerequisite_object->CheckPrerequisites($versions, $mode);
+ }
+
+ /**
+ * Processes one license, received from server
+ *
+ * @param string $file_data
+ */
+ function processLicense($file_data)
+ {
+ $modules_helper =& $this->Application->recallObject('ModulesHelper');
+ /* @var $modules_helper kModulesHelper */
+
+ $file_data = explode('Code==:', $file_data);
+ $file_data[0] = str_replace('In-Portal License File - do not edit!' . "\n", '', $file_data[0]);
+ $file_data = array_map('trim', $file_data);
+
+ if ($modules_helper->verifyLicense($file_data[0])) {
+ $this->setSystemConfig('Intechnic', 'License', $file_data[0]);
+ if (array_key_exists(1, $file_data)) {
+ $this->setSystemConfig('Intechnic', 'LicenseCode', $file_data[1]);
+ }
+ else {
+ $this->setSystemConfig('Intechnic', 'LicenseCode');
+ }
+ $this->SaveConfig();
+ }
+ else {
+ // invalid license received from licensing server
+ $this->_installator->errorMessage = 'Invalid License File';
+ }
+ }
+
+ /**
+ * Saves given configuration values to database
+ *
+ * @param Array $config
+ */
+ function saveConfigValues($config)
+ {
+ foreach ($config as $config_var => $value) {
+ $sql = 'UPDATE ' . TABLE_PREFIX . 'ConfigurationValues
+ SET VariableValue = ' . $this->Conn->qstr($value) . '
+ WHERE VariableName = ' . $this->Conn->qstr($config_var);
+ $this->Conn->Query($sql);
+ }
+ }
+
+ /**
+ * Sets module version to passed
+ *
+ * @param string $module_name
+ * @param string $version
+ */
+ function SetModuleVersion($module_name, $version = false)
+ {
+ if ($version === false) {
+ $version = $this->GetMaxModuleVersion($module_name);
+ }
+
+ // get table prefix from config, because application may not be available here
+ $table_prefix = $this->getSystemConfig('Database', 'TablePrefix');
+
+ if ($module_name == 'kernel') {
+ $module_name = 'in-portal';
+ }
+
+ $sql = 'UPDATE ' . $table_prefix . 'Modules
+ SET Version = "' . $version . '"
+ WHERE LOWER(Name) = "' . strtolower($module_name) . '"';
+ $this->Conn->Query($sql);
+ }
+
+ /**
+ * Sets module root category to passed
+ *
+ * @param string $module_name
+ * @param string $category_id
+ */
+ function SetModuleRootCategory($module_name, $category_id = 0)
+ {
+ // get table prefix from config, because application may not be available here
+ $table_prefix = $this->getSystemConfig('Database', 'TablePrefix');
+
+ if ($module_name == 'kernel') {
+ $module_name = 'in-portal';
+ }
+
+ $sql = 'UPDATE ' . $table_prefix . 'Modules
+ SET RootCat = ' . $category_id . '
+ WHERE LOWER(Name) = "' . strtolower($module_name) . '"';
+ $this->Conn->Query($sql);
+ }
+
+ /**
+ * Returns maximal version of given module by scanning it's upgrade scripts
+ *
+ * @param string $module_name
+ * @return string
+ */
+ function GetMaxModuleVersion($module_name)
+ {
+ $upgrades_file = sprintf(UPGRADES_FILE, mb_strtolower($module_name).'/', 'sql');
+ if (!file_exists($upgrades_file)) {
+ // no upgrade file
+ return '4.0.1';
+ }
+
+ $sqls = file_get_contents($upgrades_file);
+ $versions_found = preg_match_all('/'.VERSION_MARK.'/s', $sqls, $regs);
+ if (!$versions_found) {
+ // upgrades file doesn't contain version definitions
+ return '4.0.1';
+ }
+
+ return end($regs[1]);
+ }
+
+ /**
+ * Runs SQLs from file
+ *
+ * @param string $filename
+ * @param mixed $replace_from
+ * @param mixed $replace_to
+ */
+ function RunSQL($filename, $replace_from = null, $replace_to = null)
+ {
+ if (!file_exists(FULL_PATH.$filename)) {
+ return ;
+ }
+
+ $sqls = file_get_contents(FULL_PATH.$filename);
+ if (!$this->RunSQLText($sqls, $replace_from, $replace_to)) {
+ if (is_object($this->_installator)) {
+ $this->_installator->Done();
+ }
+ else {
+ if (isset($this->Application)) {
+ $this->Application->Done();
+ }
+
+ exit;
+ }
+ }
+ }
+
+ /**
+ * Runs SQLs from string
+ *
+ * @param string $sqls
+ * @param mixed $replace_from
+ * @param mixed $replace_to
+ */
+ function RunSQLText(&$sqls, $replace_from = null, $replace_to = null, $start_from=0)
+ {
+ $table_prefix = $this->getSystemConfig('Database', 'TablePrefix');
+
+ // add prefix to all tables
+ if (strlen($table_prefix) > 0) {
+ $replacements = Array ('CREATE TABLE ', 'INSERT INTO ', 'UPDATE ', 'ALTER TABLE ', 'DELETE FROM ', 'REPLACE INTO ');
+ foreach ($replacements as $replacement) {
+ $sqls = str_replace($replacement, $replacement.$table_prefix, $sqls);
+ }
+ $sqls = str_replace('DROP TABLE ', 'DROP TABLE IF EXISTS '.$table_prefix, $sqls);
+ }
+
+ if (isset($replace_from) && isset($replace_to)) {
+ // replace something additionally, e.g. module root category
+ $sqls = str_replace($replace_from, $replace_to, $sqls);
+ }
+
+ $sqls = str_replace("\r\n", "\n", $sqls); // convert to linux line endings
+ $sqls = preg_replace("/#([^;]*?)\n/", '', $sqls); // remove all comments
+ $sqls = explode(";\n", $sqls . "\n"); // ensures that last sql won't have ";" in it
+
+ $db_collation = $this->getSystemConfig('Database', 'DBCollation');
+ for ($i=$start_from; $i<count($sqls); $i++) {
+ $sql = trim($sqls[$i]);
+ if (!$sql) {
+ continue; // usually last line
+ }
+
+ if (substr($sql, 0, 13) == 'CREATE TABLE ' && $db_collation) {
+ // it is CREATE TABLE statement -> add collation
+ $sql .= ' COLLATE \'' . $db_collation . '\'';
+ }
+
+ $this->Conn->Query($sql);
+ if ($this->Conn->getErrorCode() != 0) {
+ if (is_object($this->_installator)) {
+ $this->_installator->errorMessage = 'Error: ('.$this->Conn->getErrorCode().') '.$this->Conn->getErrorMsg().'<br /><br />Last Database Query:<br /><textarea cols="70" rows="10" readonly>'.htmlspecialchars($sql).'</textarea>';
+ $this->_installator->LastQueryNum = $i + 1;
+ }
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Performs clean language import from given xml file
+ *
+ * @param string $lang_file
+ * @param bool $upgrade
+ */
+ function ImportLanguage($lang_file, $upgrade = false)
+ {
+ $lang_file = FULL_PATH.$lang_file.'.lang';
+ if (!file_exists($lang_file)) {
+ return ;
+ }
+
+ $lang_xml =& $this->Application->recallObject('LangXML');
+ /* @var $lang_xml LangXML_Parser */
+
+ $lang_xml->Parse($lang_file, '|0|1|2|', '', $upgrade ? LANG_SKIP_EXISTING : LANG_OVERWRITE_EXISTING);
+ }
+
+ /**
+ * Converts module version in format X.Y.Z to signle integer
+ *
+ * @param string $version
+ * @return int
+ */
+ function ConvertModuleVersion($version)
+ {
+ $parts = explode('.', $version);
+
+ $bin = '';
+ foreach ($parts as $part) {
+ $bin .= str_pad(decbin($part), 8, '0', STR_PAD_LEFT);
+ }
+
+ return bindec($bin);
+ }
+
+ /**
+ * Returns themes, found in system
+ *
+ * @param bool $rebuild
+ * @return int
+ */
+ function getThemes($rebuild = false)
+ {
+ if ($rebuild) {
+ $this->rebuildThemes();
+ }
+
+ $id_field = $this->Application->getUnitOption('theme', 'IDField');
+ $table_name = $this->Application->getUnitOption('theme', 'TableName');
+
+ $sql = 'SELECT Name, ' . $id_field . '
+ FROM ' . $table_name;
+ return $this->Conn->GetCol($sql, $id_field);
+ }
+
+ function ParseConfig($parse_section = false)
+ {
+ if (!file_exists($this->INIFile)) {
+ return Array();
+ }
+
+ if( file_exists($this->INIFile) && !is_readable($this->INIFile) ) {
+ die('Could Not Open Ini File');
+ }
+
+ $contents = file($this->INIFile);
+
+ $retval = Array();
+ $section = '';
+ $ln = 1;
+ $resave = false;
+ foreach ($contents as $line) {
+ if ($ln == 1 && $line != '<'.'?'.'php die() ?'.">\n") {
+ $resave = true;
+ }
+
+ $ln++;
+ $line = trim($line);
+ $line = eregi_replace(';[.]*','',$line);
+ if (strlen($line) > 0) {
+ //echo $line . " - ";
+ if(eregi('^[[a-z]+]$',str_replace(' ', '', $line))) {
+ //echo 'section';
+ $section = mb_substr($line, 1, (mb_strlen($line) - 2));
+ if ($parse_section) {
+ $retval[$section] = array();
+ }
+ continue;
+ } elseif (eregi('=',$line)) {
+ //echo 'main element';
+ list ($key, $val) = explode(' = ', $line);
+ if (!$parse_section) {
+ $retval[trim($key)] = str_replace('"', '', $val);
+ }
+ else {
+ $retval[$section][trim($key)] = str_replace('"', '', $val);
+ }
+ }
+ }
+ }
+
+ if ($resave) {
+ $fp = fopen($this->INIFile, 'w');
+ reset($contents);
+ fwrite($fp,'<'.'?'.'php die() ?'.">\n\n");
+ foreach ($contents as $line) {
+ fwrite($fp,"$line");
+ }
+ fclose($fp);
+ }
+
+ return $retval;
+ }
+
+ function SaveConfig()
+ {
+ if (!is_writeable($this->INIFile)) {
+ trigger_error('Cannot write to "' . $this->INIFile . '" file.', E_USER_ERROR);
+ return ;
+ }
+
+ $fp = fopen($this->INIFile, 'w');
+ fwrite($fp,'<'.'?'.'php die() ?'.">\n\n");
+
+ foreach ($this->systemConfig as $section_name => $section_data) {
+ fwrite($fp, '['.$section_name."]\n");
+ foreach ($section_data as $key => $value) {
+ fwrite($fp, $key.' = "'.$value.'"'."\n");
+ }
+ fwrite($fp, "\n");
+ }
+ fclose($fp);
+ }
+
+ /**
+ * Sets value to system config (yet SaveConfig must be called to write it to file)
+ *
+ * @param string $section
+ * @param string $key
+ * @param string $value
+ */
+ function setSystemConfig($section, $key, $value = null)
+ {
+ if (isset($value)) {
+ if (!array_key_exists($section, $this->systemConfig)) {
+ // create section, when missing
+ $this->systemConfig[$section] = Array ();
+ }
+
+ // create key in section
+ $this->systemConfig[$section][$key] = $value;
+ return ;
+ }
+
+ unset($this->systemConfig[$section][$key]);
+ }
+
+ /**
+ * Returns information from system config
+ *
+ * @return string
+ */
+ function getSystemConfig($section, $key)
+ {
+ if (!array_key_exists($section, $this->systemConfig)) {
+ return false;
+ }
+
+ if (!array_key_exists($key, $this->systemConfig[$section])) {
+ return false;
+ }
+
+ return $this->systemConfig[$section][$key] ? $this->systemConfig[$section][$key] : false;
+ }
+
+ /**
+ * Checks if system config is present and is not empty
+ *
+ * @return bool
+ */
+ function systemConfigFound()
+ {
+ return file_exists($this->INIFile) && $this->systemConfig;
+ }
+
+ /**
+ * Checks if given section is present in config
+ *
+ * @param string $section
+ * @return bool
+ */
+ function sectionFound($section)
+ {
+ return array_key_exists($section, $this->systemConfig);
+ }
+
+ /**
+ * Returns formatted module name based on it's root folder
+ *
+ * @param string $module_folder
+ * @return string
+ */
+ function getModuleName($module_folder)
+ {
+ if ($module_folder == 'kernel') {
+ $module_folder = 'in-portal';
+ }
+
+ return implode('-', array_map('ucfirst', explode('-', $module_folder)));
+ }
+
+ /**
+ * Creates module root category in "Home" category using given data and returns it
+ *
+ * @param string $name
+ * @param string $description
+ * @param string $category_template
+ * @param string $status
+ * @return kDBItem
+ */
+ function &createModuleCategory($name, $description, $category_template = null, $status = 1)
+ {
+ static $fields = null;
+
+ if (!isset($fields)) {
+ $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
+
+ $fields['name'] = $ml_formatter->LangFieldName('Name');
+ $fields['description'] = $ml_formatter->LangFieldName('Description');
+ }
+
+ $category =& $this->Application->recallObject('c', null, Array ('skip_autoload' => true));
+ /* @var $category kDBItem */
+
+ $category_fields = Array (
+ $fields['name'] => $name, 'Filename' => $name, 'AutomaticFilename' => 1,
+ $fields['description'] => $description, 'Status' => $status, 'ParentId' => 0,
+ );
+
+ if (isset($category_template)) {
+ $category_fields['CategoryTemplate'] = $category_template;
+ $category_fields['CachedCategoryTemplate'] = $category_template;
+ }
+
+ $category->Clear();
+ $category->SetDBFieldsFromHash($category_fields);
+
+ $category->Create();
+
+ return $category;
+ }
+
+ /**
+ * Sets category item template into custom field for given prefix
+ *
+ * @param kDBItem $category
+ * @param string $prefix
+ * @param string $item_template
+ */
+ function setModuleItemTemplate(&$category, $prefix, $item_template)
+ {
+ $this->Application->removeObject('c-cdata');
+
+ $category->defineFields();
+ $category->SetDBField('cust_' . $prefix .'_ItemTemplate', $item_template);
+ $category->Update();
+ }
+
+ /**
+ * Link custom field records with search config records + create custom field columns
+ *
+ * @param string $module_folder
+ * @param int $item_type
+ */
+ function linkCustomFields($module_folder, $prefix, $item_type)
+ {
+ $module_folder = strtolower($module_folder);
+ $module_name = ($module_folder == 'kernel') ? 'in-portal' : $module_folder;
+
+ $db =& $this->Application->GetADODBConnection();
+
+ $sql = 'SELECT FieldName, CustomFieldId
+ FROM ' . TABLE_PREFIX . 'CustomField
+ WHERE Type = ' . $item_type . ' AND IsSystem = 0'; // config is not read here yet :( $this->Application->getUnitOption('p', 'ItemType');
+ $custom_fields = $db->GetCol($sql, 'CustomFieldId');
+
+ foreach ($custom_fields as $cf_id => $cf_name) {
+ $sql = 'UPDATE ' . TABLE_PREFIX . 'SearchConfig
+ SET CustomFieldId = ' . $cf_id . '
+ WHERE (TableName = "CustomField") AND (LOWER(ModuleName) = "' . $module_name . '") AND (FieldName = ' . $db->qstr($cf_name) . ')';
+ $db->Query($sql);
+ }
+
+ $this->Application->refreshModuleInfo(); // this module configs are now processed
+
+ // because of configs was read only from installed before modules (in-portal), then reread configs
+ $unit_config_reader =& $this->Application->recallObject('kUnitConfigReader');
+ $unit_config_reader->scanModules(MODULES_PATH . '/' . $module_folder);
+
+ // create correct columns in CustomData table
+ $ml_helper =& $this->Application->recallObject('kMultiLanguageHelper');
+ $ml_helper->createFields($prefix . '-cdata', true);
+ }
+
+ /**
+ * Deletes cache, useful after separate module install and installator last step
+ *
+ */
+ function deleteCache($refresh_permissions = false)
+ {
+ $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Cache
+ WHERE VarName IN ("config_files", "configs_parsed", "sections_parsed")';
+ $this->Conn->Query($sql);
+
+ if ($refresh_permissions) {
+ if ($this->Application->isModuleEnabled('In-Portal')) {
+ // refresh permissions with ajax progress bar (when available)
+ $fields_hash = Array (
+ 'VarName' => 'ForcePermCacheUpdate',
+ 'Data' => 1,
+ );
+
+ $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'Cache');
+ }
+ else {
+ // refresh permission without progress bar
+ $updater =& $this->Application->recallObject('kPermCacheUpdater');
+ /* @var $updater kPermCacheUpdater */
+
+ $updater->OneStepRun();
+ }
+ }
+ }
+
+ /**
+ * Perform redirect after separate module install
+ *
+ * @param string $module_folder
+ * @param bool $refresh_permissions
+ */
+ function finalizeModuleInstall($module_folder, $refresh_permissions = false)
+ {
+ if (!$this->Application->GetVar('redirect')) {
+ return ;
+ }
+
+ $this->SetModuleVersion($module_folder);
+
+ $this->deleteCache($refresh_permissions);
+
+ $url_params = Array (
+ 'pass' => 'm', 'admin' => 1,
+ 'RefreshTree' => 1, 'index_file' => 'index.php',
+ );
+ $this->Application->Redirect('modules/modules_list', $url_params);
+ }
+
+ /**
+ * Performs rebuild of themes
+ *
+ */
+ function rebuildThemes()
+ {
+ $this->Application->HandleEvent($themes_event, 'adm:OnRebuildThemes');
+ }
+ }
\ No newline at end of file
Property changes on: branches/RC/core/install/install_toolkit.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/install/steps_db.xml
===================================================================
--- branches/RC/core/install/steps_db.xml (revision 10831)
+++ branches/RC/core/install/steps_db.xml (revision 10832)
@@ -1,46 +1,88 @@
<steps>
<step name="db_config" title="Database Configuration">
- <![CDATA[Host name (<i>normally "localhost"</i>), Database user name, and database Password.
- These fields are required to connect to the database.</p><p>If you would like In-Portal
- to use a table prefix, enter it in the field provided. This prefix can be any
- text which can be used in the names of tables on your system. The characters entered in this field
- are placed <i>before</i> the names of the tables used by In-Portal. For example, if you enter "inp_"
+ <![CDATA[Host name (<i>normally "localhost"</i>), Database user name, and database Password.
+ These fields are required to connect to the database.</p><p>If you would like In-Portal
+ to use a table prefix, enter it in the field provided. This prefix can be any
+ text which can be used in the names of tables on your system. The characters entered in this field
+ are placed <i>before</i> the names of the tables used by In-Portal. For example, if you enter "inp_"
into the prefix field, the table named Category will be named inp_Category.</p>]]>
</step>
+ <step name="select_license" title="Select License" help_title="License Configuration">
+ <![CDATA[<p>A License is required to run In-Portal on a server connected to the Internet.
+ You can run In-Portal on localhost, non-routable IP addresses, or other computers on your LAN.
+ If Intechnic has provided you with a license file, upload it here. Otherwise select the first
+ option to allow Install to download your license for you.</p><p>If a valid license has been
+ detected on your server, you can choose the <i>Use Existing License</i> and continue
+ the installation process</p>]]>
+ </step>
+ <step name="download_license" title="Download License" help_title="Download License from Intechnic">
+ <![CDATA[<p>A License is required to run In-Portal on a server connected to the Internet. You
+ can run In-Portal on localhost, non-routable IP addresses, or other computers on your LAN.</p>
+ <p>Here as you have selected download license from Intechnic you have to input your username
+ and password of your In-Business account in order to download all your available licenses.</p>]]>
+ </step>
+ <step name="select_domain" title="Select Domain" help_title="Select Licensed Domain">
+ <![CDATA[<p>Select the domain you wish to configure In-Portal for. The <i>Other</i> option can be
+ used to configure In-Portal for use on a local domain.</p> For local domains, enter the hostname or
+ LAN IP Address of the machine running In-Portal.</p>]]>
+ </step>
<step name="root_password" title="Set Root Password" help_title="Set Admin Root Password">
- <![CDATA[<p>The Root Password is initially required to access the admin sections of In-Portal.
- The root user cannot be used to access the front-end of the system, so it is recommended that you
+ <![CDATA[<p>The Root Password is initially required to access the admin sections of In-Portal.
+ The root user cannot be used to access the front-end of the system, so it is recommended that you
create additional users with admin privlidges.</p>]]>
</step>
<step name="choose_modules" title="Select Modules to Install">
- <![CDATA[<p>Select the In-Portal modules you wish to install. The modules listed to the right
+ <![CDATA[<p>Select the In-Portal modules you wish to install. The modules listed to the right
are all modules included in this installation that are licensed to run on this server. </p>]]>
</step>
<step name="check_paths" title="Filesystem Check">
<![CDATA[<b>Write</b><br />Shows folder and files, that write permissions should be adjusted
to allow web server to write data into them.]]>
</step>
+ <step name="post_config" title="General Site Setup">
+ <![CDATA[<p>These options define the general operation of In-Portal. Items listed here are
+ required for In-Portal's operation.</p><p>When you have finished, click <i>save</i> to
+ continue.</p>]]>
+ </step>
+ <step name="select_theme" title="Select Default Theme">
+ <![CDATA[<p>This theme will be used whenever a front-end session is started. if you intend to
+ upload a new theme and use that as default, you can do so through the admin at a later date.
+ A default theme is required for session management.</p>]]>
+ </step>
<step name="finish" title="Installation Complete" help_title="Thank You!">
- <![CDATA[<p>Thanks for using In-Portal! Be sure to visit <a target="_new" href="http://www.in-portal.net">www.in-portal.net</a>
+ <![CDATA[<p>Thanks for using In-Portal! Be sure to visit <a target="_new" href="http://www.in-portal.net">www.in-portal.net</a>
for the latest news, module releases and support. </p>
<p>*Make sure to clean your browser' cache after upgrading In-portal version</p>]]>
</step>
<step name="install_setup" title="Installation Maintenance">
- <![CDATA[<p>A Configuration file has been detected on your system and it appears In-Portal is correctly installed.
- In order to work with the maintenance functions provided to the left you must provide the Intechnic
- Username and Password you used when obtaining the license file residing on the server, or your admin Root password.
- <i>(Use Username 'root' if using your root password)</i></p>
- <p>To removing your existing database and start with a fresh installation, select the first option
- provided. Note that this operation cannot be undone and no backups are made! Use at your own risk.</p>
- <p>If you wish to scrap your current installation and install to a new location, choose the second option.
- If this option is selected you will be prompted for new database configuration information.</p>
- <p>The <i>Update License Information</i> option is used to update your In-Portal license data. Select this option if you have
- modified your licensing status with Intechnic, or you have received new license data via email</p>
- <p>The <i>Fix Paths</i> option should be used when the location of the In-portal files has changed.
- For example, if you moved them from one folder to another. It will update all settings and ensure the
+ <![CDATA[<p>A Configuration file has been detected on your system and it appears In-Portal is correctly installed.
+ In order to work with the maintenance functions provided to the left you must provide the Intechnic
+ Username and Password you used when obtaining the license file residing on the server, or your admin Root password.
+ <i>(Use Username 'root' if using your root password)</i></p>
+ <p>To removing your existing database and start with a fresh installation, select the first option
+ provided. Note that this operation cannot be undone and no backups are made! Use at your own risk.</p>
+ <p>If you wish to scrap your current installation and install to a new location, choose the second option.
+ If this option is selected you will be prompted for new database configuration information.</p>
+ <p>The <i>Update License Information</i> option is used to update your In-Portal license data. Select this option if you have
+ modified your licensing status with Intechnic, or you have received new license data via email</p>
+ <p>The <i>Fix Paths</i> option should be used when the location of the In-portal files has changed.
+ For example, if you moved them from one folder to another. It will update all settings and ensure the
program is operational at the new location.</p>]]>
</step>
<step name="upgrade_modules" title="Select Modules to Upgrade">
- <![CDATA[help missing]]>
+ <![CDATA[<p>Select modules from the list, you need to update to the last downloaded version of In-Portal</p>]]>
+ </step>
+ <step name="db_reconfig" title="Change Database Configuration">
+ <![CDATA[<p>In-Portal needs to connect to your Database Server. Please provide the database server type*,
+ host name (<i>normally "localhost"</i>), Database user name, and database Password. These fields are required
+ to connect to the database.</p><p>If you would like In-Portal to use a table prefix, enter it in the field
+ provided. This prefix can be any text which can be used in the names of tables on your system.
+ The characters entered in this field are placed <i>before</i> the names of the tables used by In-Portal.
+ For example, if you enter "inp_" into the prefix field, the table named Category will be named inp_Category.</p>]]>
+ </step>
+ <step name="fix_paths" title="Fix Paths">
+ <![CDATA[The <i>Fix Paths</i> option should be used when the location of the In-portal files has changed.
+ For example, if you moved them from one folder to another. It will update all settings and ensure the program
+ is operational at the new location.]]>
</step>
</steps>
\ No newline at end of file
Property changes on: branches/RC/core/install/steps_db.xml
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.3.2.1
\ No newline at end of property
Index: branches/RC/core/install/english.lang
===================================================================
--- branches/RC/core/install/english.lang (revision 10831)
+++ branches/RC/core/install/english.lang (revision 10832)
@@ -1,4 +1,6 @@
<LANGUAGES>
<LANGUAGE PackName="English" Encoding="base64"><DATEFORMAT>m/d/Y</DATEFORMAT><TIMEFORMAT>g:i:s A</TIMEFORMAT><INPUTDATEFORMAT>m/d/Y</INPUTDATEFORMAT><INPUTTIMEFORMAT>g:i:s A</INPUTTIMEFORMAT><DECIMAL>.</DECIMAL><THOUSANDS>,</THOUSANDS><CHARSET>iso-8859-1</CHARSET><UNITSYSTEM>2</UNITSYSTEM>
+ <PHRASES>
+ </PHRASES>
</LANGUAGE>
</LANGUAGES>
\ No newline at end of file
Property changes on: branches/RC/core/install/english.lang
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4
\ No newline at end of property
+1.4.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/db_reconfig.tpl
===================================================================
--- branches/RC/core/install/step_templates/db_reconfig.tpl (nonexistent)
+++ branches/RC/core/install/step_templates/db_reconfig.tpl (revision 10832)
@@ -0,0 +1,67 @@
+<tr class="table-color2">
+ <td class="text"><b>Server Type<span class="error">*</span>:</b></td>
+ <td align="left">
+ <select name="DBType">
+ <?php
+ $options = Array ('mysql' => 'MySQL', /*'mssql' => 'MS-SQL Server', 'pgsql' => 'pgSQL'*/);
+ $option_tpl = '<option value="%1$s"%2$s>%3$s</option>'."\n";
+
+ foreach ($options as $option_key => $option_title) {
+ $selected = $option_key == $this->toolkit->getSystemConfig('Database', 'DBType') ? ' selected' : '';
+ echo sprintf($option_tpl, $option_key, $selected, $option_title);
+ }
+ ?>
+ </select>
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text"><b>Hostname<span class="error">*</span>:</b></td>
+ <td align="left">
+ <input type="text" name="DBHost" class="text" value="<?php echo $this->toolkit->getSystemConfig('Database', 'DBHost'); ?>" />
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text"><b>Database Name<span class="error">*</span>:</b></td>
+ <td align="left">
+ <input type="text" name="DBName" class="text" value="<?php echo $this->toolkit->getSystemConfig('Database', 'DBName'); ?>" />
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text"><b>Database Collation<span class="error">*</span>:</b></td>
+ <td align="left">
+ <select name="DBCollation" class="text">
+ <?php
+ $option_tpl = '<option value="%1$s"%2$s>%1$s</option>'."\n";
+ $collations = Array ('utf8_general_ci', 'latin1_swedish_ci');
+ foreach ($collations as $collation) {
+ $selected = ($collation == $this->toolkit->getSystemConfig('Database', 'DBCollation')) ? ' selected="selected"' : '';
+ echo sprintf($option_tpl, $collation, $selected);
+ }
+ ?>
+ </select>
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text"><b>Database User Name<span class="error">*</span>:</b></td>
+ <td align="left">
+ <input type="text" name="DBUser" class="text" value="<?php echo $this->toolkit->getSystemConfig('Database', 'DBUser'); ?>" />
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text"><b>Database User Password:</b></td>
+ <td align="left">
+ <input type="password" name="DBUserPassword" class="text" value="<?php echo $this->toolkit->getSystemConfig('Database', 'DBUserPassword'); ?>" />
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text"><b>Table Name Prefix:</b></td>
+ <td align="left">
+ <input type="text" name="TablePrefix" class="text" maxlength="7" value="<?php echo $this->toolkit->getSystemConfig('Database', 'TablePrefix'); ?>" />
+ </td>
+</tr>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/db_reconfig.tpl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/select_license.tpl
===================================================================
--- branches/RC/core/install/step_templates/select_license.tpl (nonexistent)
+++ branches/RC/core/install/step_templates/select_license.tpl (revision 10832)
@@ -0,0 +1,41 @@
+<?php
+ $license_found = $this->toolkit->getSystemConfig('Intechnic', 'License');
+
+ $license_source = $this->GetVar('license_source');
+ if (($license_source === false) && $license_found) {
+ $license_source = 3;
+ }
+
+ if (!$license_found && $license_source == 3) {
+ // when disabled option is selected -> select 1st available
+ $license_source = 1;
+ }
+?>
+
+<tr class="table-color2">
+ <td class="text">
+ <input type="radio" name="license_source" id="license_source_1" value="1"<?php if ($license_source == 1) echo ' checked'; ?>><label for="license_source_1">Download from Intechnic</label>
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text">
+ <input type="radio" name="license_source" id="license_source_2" value="2"<?php if ($license_source == 2) echo ' checked'; ?>><label for="license_source_2">Upload License File:</label>
+ <input type="file" class="button" name="license_file" onclick="document.getElementById('license_source_2').checked = true;">
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <?php
+
+ ?>
+ <td class="text">
+ <input <?php if (!$license_found) echo 'disabled="disabled"'; ?> type="radio" name="license_source" id="license_source_3" value="3"<?php if ($license_source == 3) echo ' checked'; ?>><label for="license_source_3">Use Existing License</label>
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text">
+ <input type="radio" name="license_source" id="license_source_4" value="4"<?php if ($license_source == 4) echo ' checked'; ?>><label for="license_source_4">Skip License (Local Domain Installation)</label>
+ </td>
+</tr>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/select_license.tpl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/select_theme.tpl
===================================================================
--- branches/RC/core/install/step_templates/select_theme.tpl (nonexistent)
+++ branches/RC/core/install/step_templates/select_theme.tpl (revision 10832)
@@ -0,0 +1,35 @@
+<tr class="table-color2">
+ <td class="text"><strong>Default Theme:</strong></td>
+ <td>
+ <select name="theme">
+ <?php
+ $sql = 'SELECT Name
+ FROM ' . TABLE_PREFIX . 'Modules';
+ $modules = $this->Conn->GetCol($sql);
+
+ $incommerce_only = count($modules) == 2 && in_array('In-Commerce', $modules);
+ $default_theme = $incommerce_only ? 'onlinestore' : 'default';
+
+ if ($default_theme == 'default') {
+ if (file_exists(FULL_PATH . '/themes/portal_2007')) {
+ $default_theme = 'portal_2007';
+ }
+
+ if (file_exists(FULL_PATH . '/themes/default2007')) {
+ $default_theme = 'default2007';
+ }
+ }
+
+ $themes = $this->toolkit->getThemes();
+ $default_theme = array_search($default_theme, $themes); // convert theme name to id
+
+ $option_tpl = '<option value="%s"%s>%s</option>';
+
+ foreach ($themes as $theme_id => $theme_name) {
+ $selected = $theme_id == $default_theme ? ' selected' : '';
+ echo sprintf($option_tpl, $theme_id, $selected, $theme_name);
+ }
+ ?>
+ </select>
+ </td>
+</tr>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/select_theme.tpl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/fix_paths.tpl
===================================================================
--- branches/RC/core/install/step_templates/fix_paths.tpl (nonexistent)
+++ branches/RC/core/install/step_templates/fix_paths.tpl (revision 10832)
@@ -0,0 +1,21 @@
+<?php
+ $config_vars = Array ('Site_Path', 'Site_Name', 'Backup_Path');
+
+ $sql = 'SELECT Prompt, VariableName
+ FROM ' . TABLE_PREFIX . 'ConfigurationAdmin
+ WHERE VariableName IN ("' . implode('","', $config_vars) . '")';
+ $config_labels = $this->Conn->GetCol($sql, 'VariableName');
+
+ $odd_even = true;
+ foreach ($config_vars as $config_var) {
+ ?>
+ <tr class="<?php echo $odd_even ? 'table-color1' : 'table-color2'; ?>">
+ <td class="text"><b><?php echo $this->Application->Phrase( $config_labels[$config_var] ); ?>:</b></td>
+ <td align="left">
+ <input type="text" name="config[<?php echo $config_var; ?>]" class="text" size="50" value="<?php echo $this->Application->ConfigValue($config_var); ?>" />
+ </td>
+ </tr>
+ <?php
+ $odd_even = $odd_even ? false : true;
+ }
+?>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/fix_paths.tpl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/install_setup.tpl
===================================================================
--- branches/RC/core/install/step_templates/install_setup.tpl (revision 10831)
+++ branches/RC/core/install/step_templates/install_setup.tpl (revision 10832)
@@ -1,56 +1,55 @@
<tr class="table-color2">
<td colspan="2">
In order to use the installation tool, please provide your Intechnic account information:
</td>
</tr>
-<tr class="table-color2">
+<tr class="table-color2">
<td class="text">
<b>Username<span class="error">*</span>:</b>
</td>
<td width="80%">
- <input type="text" name="login" value="" class="text" />
+ <input type="text" name="login" value="<?php echo $this->GetVar('login'); ?>" class="text" />
</td>
</tr>
-<tr class="table-color2">
+<tr class="table-color2">
<td class="text">
<b>Password<span class="error">*</span>:</b>
</td>
<td>
<input type="password" name="password" class="text" />
</td>
</tr>
<?php
ob_start();
?>
-<tr class="%4$s">
+<tr class="%4$s">
<td colspan="2">
<input type="radio" value="%1$s" name="next_preset" id="next_preset_%1$s"%2$s><label for="next_preset_%1$s">%3$s</label></span>
</td>
-</tr>
-<?php
+</tr>
+<?php
$option_tpl = ob_get_clean();
$options = Array (
'upgrade' => 'Upgrade In-Portal',
1 => 'Clean out the In-Portal database and reinstall',
- 4 => 'Clean out the In-Portal database and reinstall from backup',
2 => 'Install to a new database',
- 3 => 'Update License Information',
+ 'update_license'=> 'Update License Information',
'db_reconfig' => 'Change Database Configuration',
'fix_paths' => 'Fix Paths',
);
-
+
$upgradable_modules = $this->GetUpgradableModules();
if (!$upgradable_modules) {
unset($options['upgrade']);
}
-
- $td_class = 'table-color1';
+
+ $td_class = 'table-color1';
foreach ($options as $option_key => $option_title) {
$checked = $this->GetVar('next_preset') == $option_key ? ' checked' : '';
echo sprintf($option_tpl, $option_key, $checked, $option_title, $td_class);
$td_class = ($td_class == 'table-color1') ? 'table-color2' : 'table-color1';
}
-
+
?>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/install_setup.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.3.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/select_domain.tpl
===================================================================
--- branches/RC/core/install/step_templates/select_domain.tpl (nonexistent)
+++ branches/RC/core/install/step_templates/select_domain.tpl (revision 10832)
@@ -0,0 +1,18 @@
+<?php
+ $domain = $this->GetVar('domain');
+ if ($domain === false) {
+ $domain = 1;
+ }
+?>
+<tr class="table-color2">
+ <td colspan="2" class="text">
+ <input type="radio" name="domain" id="domain_1" value="1"<?php if ($domain == 1) echo ' checked';?>> <label for="domain_1"><?php echo $_SERVER['HTTP_HOST']; ?></label>
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td colspan="2" class="text">
+ <input type="radio" name="domain" value="2" id="domain_2"<?php if ($domain == 2) echo ' checked';?>> <label for="domain_2">Other:</label>
+ <input type="text" name="other" onclick="document.getElementById('domain_2').checked = true;" value="<?php echo $this->GetVar('other'); ?>">
+ </td>
+</tr>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/select_domain.tpl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/choose_modules.tpl
===================================================================
--- branches/RC/core/install/step_templates/choose_modules.tpl (revision 10831)
+++ branches/RC/core/install/step_templates/choose_modules.tpl (revision 10832)
@@ -1,21 +1,46 @@
<?php
ob_start();
?>
-<tr class="table-color2">
+<tr class="table-color2">
<td class="text" colspan="2" valign="middle">
<table cellpadding="0" cellspacing="0">
<tr>
- <td><input type="checkbox" name="modules[]" id="module_%1$s" value="%1$s"/></td>
- <td><label for="module_%1$s">%1$s</label></td>
+ <td valign="top">
+ <input type="checkbox" %3$s name="modules[]" id="module_%1$s" value="%1$s"/>
+ </td>
+ <td valign="top">
+ <label for="module_%1$s">%2$s</label>
+ <div style="font-weight: bold; color: red;">%4$s</div>
+ </td>
</tr>
</table>
</td>
</tr>
<?php
$module_tpl = ob_get_clean();
+ $selected = $this->GetVar('modules');
+ if (!$selected) {
+ // preselect interface modules
+ $selected = Array ('kernel', 'proj-base');
+ }
+
$modules = $this->ScanModules();
foreach ($modules as $module) {
- echo sprintf($module_tpl, $module);
+ $module_version = $this->toolkit->GetMaxModuleVersion($module);
+ $prerequisites_errors = $this->toolkit->CheckPrerequisites($module . '/', Array ($module_version), 'install');
+
+ if ($prerequisites_errors) {
+ // disable checkbox, when some of prerequisites not passed
+ $checked = 'disabled';
+ }
+ else {
+ // preserve user selected checked status
+ $checked = in_array($module, $selected) ? 'checked="checked"' : '';
+ }
+
+ $error_msg = $prerequisites_errors ? implode('<br />', $prerequisites_errors) : '';
+
+ echo sprintf($module_tpl, $module, $this->toolkit->getModuleName($module), $checked, $error_msg);
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/choose_modules.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.3.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/download_license.tpl
===================================================================
--- branches/RC/core/install/step_templates/download_license.tpl (nonexistent)
+++ branches/RC/core/install/step_templates/download_license.tpl (revision 10832)
@@ -0,0 +1,46 @@
+<tr class="table-color2">
+ <td class="text"><strong>Login / E-mail:</strong></td>
+ <td class="txt">
+ <input type="text" class="text" name="login" value="<?php echo $this->GetVar('login'); ?>">
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text"><strong>Password:</strong></td>
+ <td class="text">
+ <input type="password" class="text" name="password" value="">
+ <a href="http://www.intechnic.com/myaccount/index.php?t=users/reveal_password&">Forgot password</a>
+ </td>
+</tr>
+
+
+<?php
+ $license_selection = $this->GetVar('license_selection');
+ if ($license_selection) {
+ $license_id = $this->GetVar('licenses');
+ $license_selection = $license_selection_patched = base64_decode($license_selection);
+
+ if ($license_id) {
+ // keep previosly selected license
+ $license_selection_patched = str_replace('<option value="' . $license_id . '">', '<option value="' . $license_id . '" selected>', $license_selection);
+ }
+?>
+ <tr class="table-color2">
+ <td colspan="2">&nbsp;</td>
+ </tr>
+
+ <tr class="table-color2">
+ <td class="text"><strong>Domain:</strong></td>
+ <td class="text">
+ <?php echo $_SERVER['HTTP_HOST']; ?>
+ </td>
+ </tr>
+
+ <tr class="table-color2">
+ <td class="text"><strong>Available licenses:</strong></td>
+ <td class="text"><?php echo $license_selection_patched;?></td>
+ </tr>
+ <input type="hidden" name="license_selection" value="<?php echo base64_encode($license_selection); ?>"/>
+<?php
+ }
+?>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/download_license.tpl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/db_config.tpl
===================================================================
--- branches/RC/core/install/step_templates/db_config.tpl (revision 10831)
+++ branches/RC/core/install/step_templates/db_config.tpl (revision 10832)
@@ -1,67 +1,74 @@
<tr class="table-color2">
<td class="text"><b>Server Type<span class="error">*</span>:</b></td>
<td align="left">
<select name="DBType">
<?php
$options = Array ('mysql' => 'MySQL', /*'mssql' => 'MS-SQL Server', 'pgsql' => 'pgSQL'*/);
$option_tpl = '<option value="%1$s"%2$s>%3$s</option>'."\n";
foreach ($options as $option_key => $option_title) {
- $selected = $option_key == $this->systemConfig['Database']['DBType'] ? ' selected' : '';
+ $selected = $option_key == $this->toolkit->getSystemConfig('Database', 'DBType') ? ' selected' : '';
echo sprintf($option_tpl, $option_key, $selected, $option_title);
}
?>
</select>
</td>
</tr>
<tr class="table-color2">
<td class="text"><b>Hostname<span class="error">*</span>:</b></td>
<td align="left">
- <input type="text" name="DBHost" class="text" value="<?php echo $this->systemConfig['Database']['DBHost']; ?>" />
+ <input type="text" name="DBHost" class="text" value="<?php echo $this->toolkit->getSystemConfig('Database', 'DBHost'); ?>" />
</td>
</tr>
<tr class="table-color2">
<td class="text"><b>Database Name<span class="error">*</span>:</b></td>
<td align="left">
- <input type="text" name="DBName" class="text" value="<?php echo $this->systemConfig['Database']['DBName']; ?>" />
+ <input type="text" name="DBName" class="text" value="<?php echo $this->toolkit->getSystemConfig('Database', 'DBName'); ?>" />
</td>
</tr>
<tr class="table-color2">
<td class="text"><b>Database Collation<span class="error">*</span>:</b></td>
<td align="left">
<select name="DBCollation" class="text">
<?php
$option_tpl = '<option value="%1$s"%2$s>%1$s</option>'."\n";
$collations = Array ('utf8_general_ci', 'latin1_swedish_ci');
foreach ($collations as $collation) {
- $selected = ($collation == $this->systemConfig['Database']['DBCollation']) ? ' selected="selected"' : '';
+ $selected = ($collation == $this->toolkit->getSystemConfig('Database', 'DBCollation')) ? ' selected="selected"' : '';
echo sprintf($option_tpl, $collation, $selected);
}
?>
</select>
</td>
</tr>
<tr class="table-color2">
<td class="text"><b>Database User Name<span class="error">*</span>:</b></td>
<td align="left">
- <input type="text" name="DBUser" class="text" value="<?php echo $this->systemConfig['Database']['DBUser']; ?>" />
+ <input type="text" name="DBUser" class="text" value="<?php echo $this->toolkit->getSystemConfig('Database', 'DBUser'); ?>" />
</td>
</tr>
<tr class="table-color2">
<td class="text"><b>Database User Password:</b></td>
<td align="left">
- <input type="password" name="DBUserPassword" class="text" value="<?php echo $this->systemConfig['Database']['DBUserPassword']; ?>" />
+ <input type="password" name="DBUserPassword" class="text" value="<?php echo $this->toolkit->getSystemConfig('Database', 'DBUserPassword'); ?>" />
</td>
</tr>
<tr class="table-color2">
<td class="text"><b>Table Name Prefix:</b></td>
<td align="left">
- <input type="text" name="TablePrefix" class="text" maxlength="7" value="<?php echo $this->systemConfig['Database']['TablePrefix']; ?>" />
+ <input type="text" name="TablePrefix" class="text" maxlength="7" value="<?php echo $this->toolkit->getSystemConfig('Database', 'TablePrefix'); ?>" />
+ </td>
+</tr>
+
+<tr class="table-color2">
+ <td class="text"><b>Use existing installation:</b></td>
+ <td align="left">
+ <input type="radio" name="UseExistingSetup" id="UseExistingSetup_1" value="1"/> <label for="UseExistingSetup_1">Yes</label> <input type="radio" name="UseExistingSetup" id="UseExistingSetup_0" value="0" checked/> <label for="UseExistingSetup_0">No</label>
</td>
</tr>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/db_config.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.3.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/post_config.tpl
===================================================================
--- branches/RC/core/install/step_templates/post_config.tpl (nonexistent)
+++ branches/RC/core/install/step_templates/post_config.tpl (revision 10832)
@@ -0,0 +1,86 @@
+<?php
+ ob_start();
+?>
+ <inp2:m_Set module="In-Portal" section="in-portal:configure_general"/>
+
+ <inp2:m_include t="incs/config_blocks"/>
+
+ <inp2:m_DefineElement name="config_edit_text">
+ <input type="text" tabindex="<inp2:m_get param='tab_index'/>" name="config[<inp2:Field name='VariableName'/>]" value="<inp2:Field field='$field'/>" <inp2:m_param name='field_params' />/>
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="config_edit_select">
+ <select name="config[<inp2:Field name='VariableName'/>]" tabindex="<inp2:m_get param="tab_index"/>">
+ <inp2:PredefinedOptions field="$field" block="config_edit_option" selected="selected"/>
+ </select>
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="config_edit_checkbox" field_class="">
+ <input type="hidden" id="<inp2:InputName field="$field"/>" name="config[<inp2:Field name='VariableName'/>]" value="<inp2:Field field="$field" db="db"/>">
+ <input tabindex="<inp2:m_get param="tab_index"/>" type="checkbox" id="_cb_<inp2:m_param name="field"/>" name="_cb_<inp2:InputName field="$field"/>" <inp2:Field field="$field" checked="checked" db="db"/> class="<inp2:m_param name="field_class"/>" onclick="update_checkbox(this, document.getElementById('<inp2:InputName field="$field"/>'))">
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="config_edit_textarea">
+ <textarea tabindex="<inp2:m_get param='tab_index'/>" name="config[<inp2:Field name='VariableName'/>]" <inp2:m_param name="field_params" />><inp2:Field field="$field" /></textarea>
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="config_radio_item">
+ <input type="radio" <inp2:m_param name='checked'/> name="config[<inp2:Field name='VariableName'/>]" id="<inp2:InputName field="$field"/>_<inp2:m_param name="key"/>" value="<inp2:m_param name="key"/>"><label for="<inp2:InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_param name="option"/></label>&nbsp;
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="config_block">
+ <inp2:m_inc param="tab_index" by="1"/>
+ <inp2:m_if check="m_ParamEquals" name="show_heading" value="1">
+ <tr class="subsectiontitle">
+ <td colspan="3" style="<inp2:m_if check='m_Get' name='first_row' inverse='inverse'>border-top: 1px solid #000000; </inp2:m_if>border-bottom: 1px solid #000000;">
+ <inp2:Field name="heading" as_label="1"/>
+ </td>
+ </tr>
+ <inp2:m_Set first_row="0"/>
+ </inp2:m_if>
+ <tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>" id="<inp2:m_param name="PrefixSpecial"/>_<inp2:field field="$IdField"/>" header_label="<inp2:Field name="heading"/>">
+ <td>
+ <inp2:Field field="prompt" as_label="1" />
+ <inp2:m_if check="m_IsDebugMode">
+ <br><small>[<inp2:Field field="DisplayOrder"/>] <inp2:Field field="VariableName"/></small>
+ </inp2:m_if>
+ </td>
+
+ <td>
+ <inp2:ConfigFormElement PrefixSpecial="$PrefixSpecial" field="VariableValue" blocks_prefix="config_edit_" element_type_field="element_type" value_list_field="ValueList"/>
+ </td>
+
+ <td class="error"><inp2:Error id_field="VariableName"/>&nbsp;</td>
+ </tr>
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="config_block1">
+ <inp2:m_inc param="tab_index" by="1"/>
+ <inp2:m_if check="m_ParamEquals" name="show_heading" value="1">
+ <tr class="subsectiontitle">
+ <td colspan="3" style="<inp2:m_if check='m_Get' name='first_row' inverse='inverse'>border-top: 1px solid #000000; </inp2:m_if>border-bottom: 1px solid #000000;">
+ <inp2:Field name="heading" as_label="1"/>
+ </td>
+ </tr>
+ <inp2:m_Set first_row="0"/>
+ </inp2:m_if>
+ <tr class="<inp2:m_odd_even odd="table-color1" even="table-color2"/>" id="<inp2:m_param name="PrefixSpecial"/>_<inp2:Field field="$IdField"/>" header_label="<inp2:Field name="heading"/>">
+ <td>
+ <inp2:Field field="prompt" as_label="1" />
+ <inp2:m_if check="m_IsDebugMode">
+ <br><small>[<inp2:Field field="DisplayOrder"/>] <inp2:Field field="VariableName"/></small>
+ </inp2:m_if>
+ </td>
+
+ <td>
+ <nobr><inp2:ConfigFormElement PrefixSpecial="$PrefixSpecial" field="VariableValue" blocks_prefix="config_edit_" element_type_field="element_type" value_list_field="ValueList"/>&nbsp;&nbsp;
+ </inp2:m_DefineElement>
+
+ <inp2:m_Set first_row="1"/>
+ <table width="100%" border="0" cellspacing="0" cellpadding="4" class="bordered" id="config_table">
+ <inp2:conf_PrintList list_name="default" block="config_block" full_block="config_block" half_block1="config_block1" half_block2="config_block2" per_page="-1"/>
+ </table>
+<?php
+ $this->Application->InitParser();
+ echo '<tr><td colspan="2" style="padding: 0px;">' . $this->Application->Parser->Parse(ob_get_clean(), 'post_config') . '</td></tr>';
+?>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/post_config.tpl
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/check_paths.tpl
===================================================================
--- branches/RC/core/install/step_templates/check_paths.tpl (revision 10831)
+++ branches/RC/core/install/step_templates/check_paths.tpl (revision 10832)
@@ -1,16 +1,19 @@
<?php
ob_start();
?>
<tr class="table-color2">
<td class="text"><b>%s</b></td>
<td align="left">%s</td>
</tr>
<?php
$folder_tpl = ob_get_clean();
-
+
+ $writeable_base = $this->toolkit->getSystemConfig('Misc', 'WriteablePath');
foreach ($this->writeableFolders as $folder_path) {
- $file_path = FULL_PATH.$folder_path;
- $folder_status = is_writable($file_path) ? 'OK' : '<span class="error">FAILED</span>';
- echo sprintf($folder_tpl, $file_path, $folder_status);
+ $file_path = FULL_PATH . str_replace('$1', $writeable_base, $folder_path);
+ if (file_exists($file_path)) {
+ $folder_status = !is_writable($file_path) ? '<span class="error">FAILED</span>' : 'OK';
+ echo sprintf($folder_tpl, $file_path, $folder_status);
+ }
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/check_paths.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.2
\ No newline at end of property
+1.2.2.1
\ No newline at end of property
Index: branches/RC/core/install/step_templates/upgrade_modules.tpl
===================================================================
--- branches/RC/core/install/step_templates/upgrade_modules.tpl (revision 10831)
+++ branches/RC/core/install/step_templates/upgrade_modules.tpl (revision 10832)
@@ -1,33 +1,56 @@
<?php
ob_start();
?>
-<tr class="table-color2">
+<tr class="table-color2">
<td class="text" colspan="2" valign="middle">
<table cellpadding="0" cellspacing="0">
<tr>
- <td><input type="checkbox" %3$s name="modules[]" id="module_%1$s" value="%1$s"/></td>
- <td><label for="module_%1$s">%2$s</label></td>
+ <td valign="top">
+ <input type="checkbox" %3$s name="modules[]" id="module_%1$s" value="%1$s"/>
+ </td>
+ <td valign="top">
+ <label for="module_%1$s">%2$s</label>
+ <div style="font-weight: bold; color: red;">%4$s</div>
+ </td>
</tr>
</table>
</td>
</tr>
<?php
$module_tpl = ob_get_clean();
+ $selected = $this->GetVar('modules');
$modules = $this->GetUpgradableModules();
foreach ($modules as $module_name => $module_params) {
- $module_title = $module_name.' ('.$module_params['Version'].' to '.$module_params['ToVersion'].')';
+ $module_name = strtolower($module_name);
+ $upgrade_versions = Array (
+ $module_params['Version'],
+ $module_params['ToVersion'],
+ );
+ $prerequisites_errors = $this->toolkit->CheckPrerequisites($module_params['Path'], $upgrade_versions, 'upgrade');
+
+ $module_title = $this->toolkit->getModuleName($module_name).' ('.$module_params['Version'].' to '.$module_params['ToVersion'].')';
if ($this->Application->isDebugMode()) {
$module_title .= ' [from: '.$module_params['FromVersion'].']';
}
- $selected = $this->GetVar('modules');
- $checked = in_array($module_name, $selected) ? 'checked="checked"' : '';
- echo sprintf($module_tpl, $module_name, $module_title, $checked);
+
+ if ($prerequisites_errors) {
+ // disable checkbox, when some of prerequisites not passed
+ $checked = 'disabled';
+ }
+ else {
+ // preserve user selected checked status
+ $checked = in_array($module_name, $selected) ? 'checked="checked"' : '';
+ }
+
+ $error_msg = $prerequisites_errors ? implode('<br />', $prerequisites_errors) : '';
+
+ echo sprintf($module_tpl, $module_name, $module_title, $checked, $error_msg);
}
?>
<tr class="table-color1">
<td class="hint" colspan="2" valign="middle">
<img src="incs/img/icon_warning.gif" width="14" height="14" align="absmiddle" />
Your data will be modified during the upgrade. We strongly recommend that you make a backup of your database. Proceed with the upgrade ?
</td>
</tr>
\ No newline at end of file
Property changes on: branches/RC/core/install/step_templates/upgrade_modules.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3.2.1
\ No newline at end of property
+1.3.2.2
\ No newline at end of property
Index: branches/RC/core/install/incs/install.tpl
===================================================================
--- branches/RC/core/install/incs/install.tpl (revision 10831)
+++ branches/RC/core/install/incs/install.tpl (revision 10832)
@@ -1,153 +1,153 @@
<html>
<head>
<title>In-Portal Installation</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
-
+
<base href="<?php echo $this->baseURL; ?>"/>
-
+
<link rel="stylesheet" type="text/css" href="incs/style.css" />
<script type="text/javascript" src="incs/script.js"></script>
</head>
<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" style="height: 100%">
<form enctype="multipart/form-data" id="install_form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
-
+
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
<!-- header: begin -->
<tr>
<td height="90">
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="90">
<tr>
<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img title="In-portal" src="incs/img/globe.gif" width="84" height="91" border="0" alt="In-Portal"/></a></td>
<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img title="In-portal" src="incs/img/logo.gif" width="150" height="91" border="0" alt="In-Portal"/></a></td>
<td rowspan="3" width="100%" align="right">&nbsp;</td>
<td width="400"><img title="" src="incs/img/blocks.gif" width="400" height="73" alt="blocks" /></td>
</tr>
- <tr><td align="right" background="incs/img/version_bg.gif" class="head_version" valign="top"><img title="" src="incs/img/spacer.gif" width="1" height="14" alt=""/>In-Portal Version <?php echo $this->GetMaxModuleVersion('Core'); ?>: English US</td></tr>
+ <tr><td align="right" background="incs/img/version_bg.gif" class="head_version" valign="top"><img title="" src="incs/img/spacer.gif" width="1" height="14" alt=""/>In-Portal Version <?php echo $this->toolkit->GetMaxModuleVersion('Core'); ?>: English US</td></tr>
<tr><td><img title="" src="incs/img/blocks2.gif" width="400" height="2" alt="blocks2"/><br /></td></tr>
<tr><td bgcolor="black" colspan="4"><img title="" src="incs/img/spacer.gif" width="1" height="1" alt=""/><br /></td></tr>
</table>
</td>
</tr>
<!-- header: end -->
-
-
+
+
<tr height="100%">
<td valign="top">
<table cellpadding=10 cellspacing=0 border=0 width="100%" height="100%">
<tr valign="top">
<td style="width: 200px; background: #009ff0 url(incs/img/bg_install_menu.gif) no-repeat bottom right; border-right: 1px solid #000">
<img src="incs/img/spacer.gif" width="180" height="1" border="0" alt="" /><br />
<span class="admintitle-white">Installation</span>
-
+
<ol class="install-steps">
<?php
echo $this->PrintSteps('<li class="current-step">%s</li>', '<li>%s</li>');
?>
</ol>
- </td>
-
-
+ </td>
+
+
<td>
<img src="incs/img/icon_install.gif" width="46" height="46" alt="" align="absmiddle" />&nbsp;<span class="admintitle"><?php echo $this->GetStepInfo('step_title'); ?></span><br /><br />
-
+
<!-- section header: begin -->
<table border="0" cellpadding="2" cellspacing="0" class="tableborder_full" width="100%" height="30">
<tr>
<td class="tablenav" width="580" nowrap background="incs/img/tabnav_left.jpg">
<span class="tablenav_link"><?php echo 'Step '.$this->GetStepNumber().' - '.$this->GetStepInfo('step_title'); ?></span>
</td>
<td align="right" class="tablenav" background="incs/img/tabnav_back.jpg" width="100%">
<a class="link" onclick="ShowHelp('in-portal:install');">
<img src="incs/img/blue_bar_help.gif" border="0">
</a>
</td>
</tr>
</table>
<!-- section header: end -->
-
+
<!-- toolbar: begin -->
<table border=0 cellpadding=0 cellspacing=0 width="100%" class="toolbar">
<tr>
<td>
<a href="javascript:continue_install();">
<img border="0" src="incs/img/toolbar/tool_select.gif" id="img_Save" width="32" height="32" border="0" alt="Save" onmouseout="swap_image('img_Save', 'toolbar/tool_select.gif');" onmouseover="swap_image('img_Save','toolbar/tool_select_f2.gif');" /><br />
</a>
</td>
<td>
<img src="incs/img/toolbar/tool_cancel.gif" id="img_Cancel" width="32" height="32" border="0" alt="Cancel" onmouseout="swap_image('img_Cancel', 'toolbar/tool_cancel.gif');" onmouseover="swap_image('img_Cancel','toolbar/tool_cancel_f2.gif');" onclick="history.go(-1);" /><br />
</td>
<td width="100%">&nbsp;</td>
</tr>
</table>
<!-- toolbar: end -->
-
+
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="tableborder">
<tr valign="top">
<td width="60%" bgcolor="#F0F0F0">
<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="4">
-
+
<!-- step body: begin -->
<?php echo $this->GetStepBody(); ?>
<!-- step body: end -->
-
+
<!-- step error message: begin -->
<tr class="table-color2">
<td colspan="2">
<p class="error">
<?php echo $this->errorMessage; ?>
</p>
<br/>
</td>
</tr>
<!-- step error message: end -->
-
- <!-- next, prev buttons: begin -->
+
+ <!-- next, prev buttons: begin -->
<tr>
<td colspan="2">
<br />
<input type="submit" name="submit_form" value="Continue" class="button" />
-
+
<?php
if ($this->GetStepNumber() > 1 && $this->GetNextStep() != -1) {
echo '<input type="reset" name="cancel" value="Cancel" class="button" onclick="history.go(-1);" />';
}
?>
-
+
<input type="hidden" name="step" value="<?php echo $this->currentStep; ?>"/>
<input type="hidden" name="preset" value="<?php echo $this->stepsPreset; ?>"/>
</td>
</tr>
<!-- next, prev buttons: end -->
</table>
</td>
-
+
<td width="40%" style="border-left: 1px solid #000; background: #f0f0f0">
<table width="100%" border="0" cellspacing="0" cellpadding="4">
- <tr>
- <td class="subsectiontitle" style="border-bottom: 1px solid #000000; background-color: #999"><?php echo $this->GetStepInfo('help_title'); ?></td>
+ <tr class="subsectiontitle">
+ <td style="border-bottom: 1px solid #000000;"><?php echo $this->GetStepInfo('help_title'); ?></td>
</tr>
<tr>
<td class="text"><?php echo $this->GetStepInfo('help_body'); ?></td>
</tr>
</table>
</td>
</tr>
</table>
- </td>
+ </td>
</tr>
</table>
<br />
</td>
</tr>
-
+
<tr>
<td class="footer">
Powered by In-portal &copy; 1997-<?php echo date('Y'); ?>, Intechnic Corporation. All rights reserved.
<br /><img src="incs/img/spacer.gif" width="1" height="10" alt="" />
</td>
</tr>
</table>
</form>
</body>
</html>
\ No newline at end of file
Property changes on: branches/RC/core/install/incs/install.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4
\ No newline at end of property
+1.4.2.1
\ No newline at end of property
Index: branches/RC/core/install.php
===================================================================
--- branches/RC/core/install.php (revision 10831)
+++ branches/RC/core/install.php (revision 10832)
@@ -1,1207 +1,1282 @@
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
define('IS_INSTALL', 1);
define('ADMIN', 1);
define('FULL_PATH', realpath(dirname(__FILE__).'/..') );
define('REL_PATH', '/core');
- /**
- * Upgrade sqls are located using this mask
- *
- */
- define('UPGRADES_FILE', FULL_PATH.'/%sinstall/upgrades.%s');
-
- /**
- * Format of version identificator in upgrade files
- *
- */
- define('VERSION_MARK', '# ===== v ([\d]+\.[\d]+\.[\d]+) =====');
-
-// print_pre($_POST);
-
+ // run installator
$install_engine = new kInstallator();
$install_engine->Init();
$install_engine->Run();
$install_engine->Done();
class kInstallator {
/**
* Reference to kApplication class object
*
* @var kApplication
*/
var $Application = null;
/**
* Connection to database
*
* @var kDBConnection
*/
var $Conn = null;
/**
- * Path to config.php
- *
- * @var string
- */
- var $INIFile = '';
-
- /**
* XML file containing steps information
*
* @var string
*/
var $StepDBFile = '';
/**
- * Parsed data from config.php
- *
- * @var Array
- */
- var $systemConfig = Array ();
- /**
* Step name, that currently being processed
*
* @var string
*/
var $currentStep = '';
/**
* Steps list (preset) to use for current installation
*
* @var string
*/
var $stepsPreset = '';
/**
* Installtion steps to be done
*
* @var Array
*/
- var $steps = Array(
- 'fresh_install' => Array ('check_paths', 'db_config', 'root_password', 'choose_modules', 'finish'),
- 'already_installed' => Array ('install_setup'),
-
- 'upgrade' => Array ('install_setup', 'upgrade_modules', /* ..., */ 'finish'),
- 'db_reconfig' => Array ('install_setup',/* ..., */ 'finish'),
- 'fix_paths' => Array ('install_setup',/* ..., */ 'finish'),
- );
-
+ var $steps = Array (
+ 'fresh_install' => Array ('check_paths', 'db_config', 'select_license', 'download_license', 'select_domain', 'root_password', 'choose_modules', 'post_config', 'select_theme', 'finish'),
+ 'already_installed' => Array ('check_paths', 'install_setup'),
+
+ 'upgrade' => Array ('check_paths', 'install_setup', 'upgrade_modules', 'finish'),
+ 'update_license' => Array ('check_paths', 'install_setup', 'select_license', 'download_license', 'select_domain', 'finish'),
+ 'db_reconfig' => Array ('check_paths', 'install_setup', 'db_reconfig', 'finish'),
+ 'fix_paths' => Array ('check_paths', 'install_setup', 'fix_paths', 'finish'),
+ );
/**
* Steps, that doesn't required admin to be logged-in to proceed
*
* @var Array
*/
- var $skipLoginSteps = Array ('root_password', 'choose_modules', 'finish', -1);
+ var $skipLoginSteps = Array ('check_paths', 'select_license', 'download_license', 'select_domain', 'root_password', 'choose_modules', 'post_config', 'select_theme', 'finish', -1);
/**
* Steps, on which kApplication should not be initialized, because of missing correct db table structure
*
* @var Array
*/
- var $skipApplicationSteps = Array ('check_paths', 'db_config'/*, 'install_setup'*/); // remove install_setup when application will work separately from install
+ var $skipApplicationSteps = Array ('check_paths', 'db_config', 'db_reconfig' /*, 'install_setup'*/); // remove install_setup when application will work separately from install
/**
- * Folders that should be writeable to continue installation
+ * Folders that should be writeable to continue installation. $1 - main writeable folder from config.php ("/system" by default)
*
* @var Array
*/
- var $writeableFolders = Array ('/system');
+ var $writeableFolders = Array (
+ '$1',
+ '$1/images',
+ '$1/images/resized',
+ '$1/images/pending',
+ '$1/images/pending/resized',
+ '$1/images/emoticons', // for "In-Bulletin"
+ '$1/images/manufacturers', // for "In-Commerce"
+ '$1/images/manufacturers/resized', // for "In-Commerce"
+ '$1/backupdata',
+ '$1/export',
+ '$1/stylesheets',
+ '$1/user_files',
+ '$1/cache',
+ '/themes',
+ );
/**
* Contains last error message text
*
* @var string
*/
var $errorMessage = '';
/**
* Base path for includes in templates
*
* @var string
*/
var $baseURL = '';
/**
* Holds number of last executed query in the SQL
*
- * @var unknown_type
+ * @var int
*/
var $LastQueryNum = 0;
+ /**
+ * Common tools required for installation process
+ *
+ * @var kInstallToolkit
+ */
+ var $toolkit = null;
+
function Init()
{
- $this->INIFile = FULL_PATH.'/config.php';
+ // connect toolkit required for module installations to installator and via versa
+ require_once FULL_PATH . REL_PATH . '/install/install_toolkit.php';
+ $this->toolkit = new kInstallToolkit();
+ $this->toolkit->setInstallator(&$this);
+
$this->StepDBFile = FULL_PATH.'/'.REL_PATH.'/install/steps_db.xml';
$base_path = rtrim(preg_replace('/'.preg_quote(rtrim(REL_PATH, '/'), '/').'$/', '', str_replace('\\', '/', dirname($_SERVER['PHP_SELF']))), '/');
$this->baseURL = 'http://'.$_SERVER['HTTP_HOST'].$base_path.'/core/install/';
set_error_handler( Array(&$this, 'ErrorHandler') );
- if (file_exists($this->INIFile)) {
+ if (file_exists($this->toolkit->INIFile)) {
// if config.php found, then check his write permission too
$this->writeableFolders[] = '/config.php';
}
else {
$this->writeableFolders[] = '/';
}
- $this->systemConfig = $this->ParseConfig(true);
- $this->systemConfig['Misc']['WriteablePath'] = '/system'; // for development purposes
- $this->systemConfig['Misc']['Domain'] = $_SERVER['HTTP_HOST']; // for redirects from SSL mode
+ if (!$this->toolkit->getSystemConfig('Misc', 'WriteablePath')) {
+ // set global writable folder when such setting is missing
+ $this->toolkit->setSystemConfig('Misc', 'WriteablePath', '/system');
+ }
+
$this->currentStep = $this->GetVar('step');
// can't check login on steps where no application present anyways :)
$this->skipLoginSteps = array_unique(array_merge($this->skipLoginSteps, $this->skipApplicationSteps));
$this->SelectPreset();
if (!$this->currentStep) {
$this->SetFirstStep(); // sets first step of current preset
}
$this->InitStep();
}
function SetFirstStep()
{
reset($this->steps[$this->stepsPreset]);
$this->currentStep = current($this->steps[$this->stepsPreset]);
}
/**
* Selects preset to proceed based on various criteria
*
*/
function SelectPreset()
{
$preset = $this->GetVar('preset');
- if (file_exists($this->INIFile) && $this->systemConfig) {
+ if ($this->toolkit->systemConfigFound()) {
// only at installation first step
$status = $this->CheckDatabase(false);
if ($status && $this->AlreadyInstalled()) {
// if already installed, then all future actions need login to work
- $this->skipLoginSteps = Array (-1);
+ $this->skipLoginSteps = Array ('check_paths', -1);
if (!$preset) {
$preset = 'already_installed';
$this->currentStep = '';
}
}
}
if ($preset === false) {
$preset = 'fresh_install'; // default preset
}
$this->stepsPreset = $preset;
}
function GetVar($name)
{
- return isset($_REQUEST[$name]) ? $_REQUEST[$name] : false;
+ return array_key_exists($name, $_REQUEST) ? $_REQUEST[$name] : false;
+ }
+
+ function SetVar($name, $value)
+ {
+ $_REQUEST[$name] = $value;
}
/**
* Performs needed intialization of data, that step requires
*
*/
function InitStep()
{
$require_login = !in_array($this->currentStep, $this->skipLoginSteps);
$this->InitApplication($require_login);
if ($require_login) {
// step require login to proceed
if (!$this->Application->LoggedIn()) {
$this->stepsPreset = 'already_installed';
- $this->SetFirstStep();
+ $this->currentStep = 'install_setup'; // manually set 2nd step, because 'check_paths' step doesn't contain login form
+// $this->SetFirstStep();
}
}
switch ($this->currentStep) {
case 'check_paths':
+ $writeable_base = $this->toolkit->getSystemConfig('Misc', 'WriteablePath');
foreach ($this->writeableFolders as $folder_path) {
- $file_path = FULL_PATH.$folder_path;
- if (!is_writable($file_path)) {
+ $file_path = FULL_PATH . str_replace('$1', $writeable_base, $folder_path);
+ if (file_exists($file_path) && !is_writable($file_path)) {
$this->errorMessage = 'Install cannot write to specified folder in the root directory of your installation';
break;
}
}
break;
case 'db_config':
- $section_name = 'Database';
- $fields = Array ('DBType', 'DBHost', 'DBName', 'DBUser', 'DBUserPassword', 'DBCollation', 'TablePrefix');
-
- if (!isset($this->systemConfig[$section_name])) {
- $this->systemConfig[$section_name] = Array ();
- }
+ case 'db_reconfig':
+ $fields = Array (
+ 'DBType', 'DBHost', 'DBName', 'DBUser',
+ 'DBUserPassword', 'DBCollation', 'TablePrefix'
+ );
// set fields
foreach ($fields as $field_name) {
$submit_value = $this->GetVar($field_name);
if ($submit_value !== false) {
- $this->systemConfig[$section_name][$field_name] = $submit_value;
- }
- elseif (!isset($this->systemConfig[$section_name][$field_name])) {
- $this->systemConfig[$section_name][$field_name] = '';
+ $this->toolkit->setSystemConfig('Database', $field_name, $submit_value);
}
+ /*else {
+ $this->toolkit->setSystemConfig('Database', $field_name, '');
+ }*/
}
break;
+ case 'download_license':
+ $license_source = $this->GetVar('license_source');
+ if ($license_source !== false && $license_source != 1) {
+ // previous step was "Select License" and not "Download from Intechnic" option was selected
+ $this->currentStep = $this->GetNextStep();
+ }
+ break;
+
case 'choose_modules':
// if no modules found, then proceed to next step
$modules = $this->ScanModules();
if (!$modules) {
$this->currentStep = $this->GetNextStep();
}
break;
+ case 'select_theme':
+ if (count($this->toolkit->getThemes(true)) == 1) {
+ // only one theme -> set it as primary
+ $sql = 'UPDATE ' . $this->Application->getUnitOption('theme', 'TableName') . 'Theme
+ SET Enabled = 1, PrimaryTheme = 1
+ LIMIT 1';
+ $this->Conn->Query($sql);
+
+ $this->currentStep = $this->GetNextStep();
+ }
+ break;
+
case 'upgrade_modules':
// get installed modules from db and compare their versions to upgrade script
$modules = $this->GetUpgradableModules();
if (!$modules) {
$this->currentStep = $this->GetNextStep();
}
break;
case 'install_setup':
$next_preset = $this->Application->GetVar('next_preset');
- if ($next_preset !== false && $this->Application->GetVar('login') == 'root') {
- // option was choosen, then verify password & login user
- $login_event = new kEvent('u.current:OnLogin');
- $this->Application->HandleEvent($login_event);
+ if ($next_preset !== false) {
+ if ($this->Application->GetVar('login') == 'root') {
+ // verify "root" user using configuration settings
+ $login_event = new kEvent('u.current:OnLogin');
+ $this->Application->HandleEvent($login_event);
+
+ if ($login_event->status != erSUCCESS) {
+ $user =& $this->Application->recallObject('u.current');
+ /* @var $user UsersItem */
- if ($login_event->status == erSUCCESS) {
- // login succeeded
+ $this->errorMessage = $user->GetErrorMsg('ValidateLogin') . '. If you don\'t know your username or password, contact Intechnic Support';
+ }
+ }
+ else {
+ // non "root" user -> verify using licensing server
+ $url_params = Array (
+ 'login=' . md5( $this->GetVar('login') ),
+ 'password=' . md5( $this->GetVar('password') ),
+ 'action=check',
+ 'license_code=' . base64_encode( $this->toolkit->getSystemConfig('Intechnic', 'LicenseCode') ),
+ 'version=' . '4.3.0',//$this->toolkit->GetMaxModuleVersion('In-Portal'),
+ 'domain=' . base64_encode($_SERVER['HTTP_HOST']),
+ );
+
+ $license_url = GET_LICENSE_URL . '?' . implode('&', $url_params);
+ $file_data = curl_post($license_url, '', null, 'GET');
+
+ if (substr($file_data, 0, 5) == 'Error') {
+ $this->errorMessage = substr($file_data, 6) . ' If you don\'t know your username or password, contact Intechnic Support';
+ }
+
+ if ($this->errorMessage == '') {
+ $user_id = -1;
+ $session =& $this->Application->recallObject('Session');
+ $session->SetField('PortalUserId', $user_id);
+ $this->Application->SetVar('u.current_id', $user_id);
+ $this->Application->StoreVar('user_id', $user_id);
+ }
+ }
+ if ($this->errorMessage == '') {
+ // processed with redirect to selected step preset
if (!isset($this->steps[$next_preset])) {
$this->errorMessage = 'Preset "'.$next_preset.'" not yet implemented';
}
else {
$this->stepsPreset = $next_preset;
}
}
- else {
- // login failed
- $user =& $this->Application->recallObject('u.current');
- /* @var $user UsersItem */
-
- $this->errorMessage = $user->GetErrorMsg('ValidateLogin').'. If you don\'t know your username or password, contact Intechnic Support';
- }
}
else {
// if preset was not choosen, then raise error
$this->errorMessage = 'Please select action to perform';
}
break;
}
$this->PerformValidation(); // returns validation status (just in case)
}
/**
* Validates data entered by user
*
* @return bool
*/
function PerformValidation()
{
if ($this->GetVar('step') != $this->currentStep) {
// just redirect from previous step, don't validate
return true;
}
$status = true;
switch ($this->currentStep) {
case 'db_config':
+ case 'db_reconfig':
// 1. check if required fields are filled
$section_name = 'Database';
$required_fields = Array ('DBType', 'DBHost', 'DBName', 'DBUser', 'DBCollation');
foreach ($required_fields as $required_field) {
- if (!$this->systemConfig[$section_name][$required_field]) {
+ if (!$this->toolkit->getSystemConfig($section_name, $required_field)) {
$status = false;
$this->errorMessage = 'Please fill all required fields';
break;
}
}
if (!$status) break;
// 2. check permissions, that use have in this database
- $status = $this->CheckDatabase();
+ $status = $this->CheckDatabase(($this->currentStep == 'db_config') && !$this->GetVar('UseExistingSetup'));
+ break;
+
+ case 'select_license':
+ if ($this->GetVar('license_source') == 2) {
+ // license from file -> file must be uploaded
+ $upload_error = $_FILES['license_file']['error'];
+ if ($upload_error != UPLOAD_ERR_OK) {
+ $this->errorMessage = 'Missing License File';
+ }
+
+ $status = $this->errorMessage == '';
+ }
break;
case 'root_password':
// check, that password & verify password match
$password = $this->Application->GetVar('root_password');
$password_verify = $this->Application->GetVar('root_password_verify');
if ($password != $password_verify) {
$this->errorMessage = 'Passwords does not match';
}
elseif (mb_strlen($password) < 4) {
$this->errorMessage = 'Root Password must be at least 4 characters';
}
$status = $this->errorMessage == '';
break;
+
+ case 'choose_modules':
+ case 'upgrade_modules':
+ $modules = $this->Application->GetVar('modules');
+ if (!$modules) {
+ $this->errorMessage = 'Please select module(-s) to ' . ($this->currentStep == 'choose_modules' ? 'install' : 'upgrade');
+ }
+
+ $found['In-Portal'] = in_array('kernel', $modules);
+ $found['Proj-Base'] = in_array('proj-base', $modules);
+
+ if (!$found['In-Portal'] && !$found['Proj-Base']) {
+ $this->errorMessage = 'Please ' . ($modules ? 'also ' : '') . 'select "' . implode('" or "', array_keys($found)) . '" as interface module';
+ }
+
+ $status = $this->errorMessage == '';
+ break;
}
return $status;
}
/**
* Perform installation step actions
*
*/
function Run()
{
if ($this->errorMessage) {
// was error during data validation stage
return ;
}
switch ($this->currentStep) {
case 'db_config':
+ case 'db_reconfig':
// store db configuration
$sql = 'SHOW COLLATION
- LIKE \''.$this->systemConfig['Database']['DBCollation'].'\'';
+ LIKE \''.$this->toolkit->getSystemConfig('Database', 'DBCollation').'\'';
$collation_info = $this->Conn->Query($sql);
if ($collation_info) {
- $this->systemConfig['Database']['DBCharset'] = $collation_info[0]['Charset'];
+ $this->toolkit->setSystemConfig('Database', 'DBCharset', $collation_info[0]['Charset']);
// database is already connected, that's why set collation on the fly
- $this->Conn->Query('SET NAMES \''.$this->systemConfig['Database']['DBCharset'].'\' COLLATE \''.$this->systemConfig['Database']['DBCollation'].'\'');
+ $this->Conn->Query('SET NAMES \''.$this->toolkit->getSystemConfig('Database', 'DBCharset').'\' COLLATE \''.$this->toolkit->getSystemConfig('Database', 'DBCollation').'\'');
}
- $this->SaveConfig();
+ $this->toolkit->SaveConfig();
+
+ if ($this->currentStep == 'db_config') {
+ if ($this->GetVar('UseExistingSetup')) {
+ // abort clean install and redirect to already_installed
+ $this->stepsPreset = 'already_installed';
+ break;
+ }
- // import base data into database
- $this->RunSQL('/core/install/install_schema.sql');
- $this->RunSQL('/core/install/install_data.sql');
+ // import base data into new database, not for db_reconfig
+ $this->toolkit->RunSQL('/core/install/install_schema.sql');
+ $this->toolkit->RunSQL('/core/install/install_data.sql');
- // set module "Core" version after install (based on upgrade scripts)
- $this->SetModuleVersion('Core');
+ // set module "Core" version after install (based on upgrade scripts)
+ $this->toolkit->SetModuleVersion('Core');
+ }
+ break;
+
+ case 'select_license':
+ $license_source = $this->GetVar('license_source');
+ switch ($license_source) {
+ case 1: // Download from Intechnic
+
+ break;
+
+ case 2: // Upload License File
+ $file_data = array_map('trim', file($_FILES['license_file']['tmp_name']));
+ if ((count($file_data) == 3) && $file_data[1]) {
+ $modules_helper =& $this->Application->recallObject('ModulesHelper');
+ /* @var $modules_helper kModulesHelper */
+
+ if ($modules_helper->verifyLicense($file_data[1])) {
+ $this->toolkit->setSystemConfig('Intechnic', 'License', $file_data[1]);
+ $this->toolkit->setSystemConfig('Intechnic', 'LicenseCode', $file_data[2]);
+ $this->toolkit->SaveConfig();
+ }
+ else {
+ $this->errorMessage = 'Invalid License File';
+ }
+ }
+ else {
+ $this->errorMessage = 'Invalid License File';
+ }
+ break;
+
+ case 3: // Use Existing License
+ $license_hash = $this->toolkit->getSystemConfig('Intechnic', 'License');
+ if ($license_hash) {
+ $modules_helper =& $this->Application->recallObject('ModulesHelper');
+ /* @var $modules_helper kModulesHelper */
+
+ if (!$modules_helper->verifyLicense($license_hash)) {
+ $this->errorMessage = 'Invalid or corrupt license detected';
+ }
+ }
+ else {
+ // happens, when browser's "Back" button is used
+ $this->errorMessage = 'Missing License File';
+ }
+ break;
+
+ case 4: // Skip License (Local Domain Installation)
+ if ($this->toolkit->sectionFound('Intechnic')) {
+ // remove any previous license information
+ $this->toolkit->setSystemConfig('Intechnic', 'License');
+ $this->toolkit->setSystemConfig('Intechnic', 'LicenseCode');
+ $this->toolkit->SaveConfig();
+ }
+ break;
+ }
+ break;
+
+ case 'download_license':
+ $license_login = $this->GetVar('login');
+ $license_password = $this->GetVar('password');
+ $license_id = $this->GetVar('licenses');
+
+ if (strlen($license_login) && strlen($license_password) && !$license_id) {
+ // Here we determine weather login is ok & check available licenses
+ $url_params = Array (
+ 'login=' . md5($license_login),
+ 'password=' . md5($license_password),
+ 'version=' . $this->toolkit->GetMaxModuleVersion('In-Portal'),
+ 'domain=' . base64_encode($_SERVER['HTTP_HOST']),
+ );
+
+ $license_url = GET_LICENSE_URL . '?' . implode('&', $url_params);
+ $file_data = curl_post($license_url, '', null, 'GET');
+ if (!$file_data) {
+ // error connecting to licensing server
+ $this->errorMessage = 'Unable to connect to the Intechnic server! Please try again later!';
+ }
+ else {
+ if (substr($file_data, 0, 5) == 'Error') {
+ // after processing data server returned error
+ $this->errorMessage = substr($file_data, 6);
+ }
+ else {
+ // license received
+ if (substr($file_data, 0, 3) == 'SEL') {
+ // we have more, then one license -> let user choose
+ $this->SetVar('license_selection', base64_encode( substr($file_data, 4) )); // we received html with radio buttons with names "licenses"
+ $this->errorMessage = 'Please select which license to use';
+ }
+ else {
+ // we have one license
+ $this->toolkit->processLicense($file_data);
+ }
+ }
+ }
+ }
+ else if (!$license_id) {
+ // licenses were not queried AND user/password missing
+ $this->errorMessage = 'Incorrect Username or Password. If you don\'t know your username or password, contact Intechnic Support';
+ }
+ else {
+ // Here we download license
+ $url_params = Array (
+ 'license_id=' . md5($license_id),
+ 'dlog=' . md5($license_login),
+ 'dpass=' . md5($license_password),
+ 'version=' . $this->toolkit->GetMaxModuleVersion('In-Portal'),
+ 'domain=' . base64_encode($_SERVER['HTTP_HOST']),
+ );
+
+ $license_url = GET_LICENSE_URL . '?' . implode('&', $url_params);
+ $file_data = curl_post($license_url, '', null, 'GET');
+
+ if (!$file_data) {
+ // error connecting to licensing server
+ $this->errorMessage = 'Unable to connect to the Intechnic server! Please try again later!';
+ }
+ else {
+ if (substr($file_data, 0, 5) == 'Error') {
+ // after processing data server returned error
+ $this->errorMessage = substr($file_data, 6);
+ }
+ else {
+ $this->toolkit->processLicense($file_data);
+ }
+ }
+ }
+ break;
+
+ case 'select_domain':
+ $modules_helper =& $this->Application->recallObject('ModulesHelper');
+ /* @var $modules_helper kModulesHelper */
+
+ $license_hash = $this->toolkit->getSystemConfig('Intechnic', 'License');
+ if ($license_hash) {
+ // when license present, then extract domain from it
+ $license_hash = base64_decode($license_hash);
+ list ( , , $license_keys) = $modules_helper->_ParseLicense($license_hash);
+ $license_domain = $license_keys[0]['domain'];
+ }
+ else {
+ // when license missing, then use current domain
+ $license_domain = $_SERVER['HTTP_HOST'];
+ }
+
+ $domain = $this->GetVar('domain') == 1 ? $_SERVER['HTTP_HOST'] : str_replace(' ', '', $this->GetVar('other'));
+
+ if ($domain != '') {
+ if (strstr($domain, $license_domain) || $modules_helper->_IsLocalSite($domain)) {
+ $this->toolkit->setSystemConfig('Intechnic', 'Domain', $domain);
+ $this->toolkit->SaveConfig();
+ }
+ else {
+ $this->errorMessage = 'Domain name entered does not match domain name in the license!';
+ }
+ }
+ else {
+ $this->errorMessage = 'Please enter valid domain!';
+ }
break;
case 'root_password':
// update root password in database
$password = md5( md5($this->Application->GetVar('root_password')) . 'b38');
- $this->SetConfigValue('RootPass', $password);
- // set Site_Path (for SSL & old in-portal code)
- $this->SetConfigValue('Site_Path', BASE_PATH.'/');
+ $config_values = Array (
+ 'RootPass' => $password,
+ 'Site_Path' => BASE_PATH.'/', // set Site_Path (for SSL & old in-portal code)
+ 'Backup_Path' => FULL_PATH . $this->toolkit->getSystemConfig('Misc', 'WriteablePath') . '/backupdata',
+ 'Smtp_AdminMailFrom' => 'portal@' . $this->toolkit->getSystemConfig('Intechnic', 'Domain')
+ );
+
+ $this->toolkit->saveConfigValues($config_values);
// import base language for core (english)
- $this->ImportLanguage('/core/install/english');
+ $this->toolkit->ImportLanguage('/core/install/english');
// set imported language as primary
$lang =& $this->Application->recallObject('lang.-item', null, Array('skip_autoload' => true));
/* @var $lang LanguagesItem */
$lang->Load(1); // fresh install => ID=1
- $lang->setPrimary();
+ $lang->setPrimary(true); // for Front-End
break;
case 'choose_modules':
// run module install scripts
$modules = $this->Application->GetVar('modules');
if ($modules) {
foreach ($modules as $module) {
$install_file = MODULES_PATH.'/'.$module.'/install.php';
if (file_exists($install_file)) {
include_once($install_file);
// set module version after install (based on upgrade scripts)
- $this->SetModuleVersion($module);
+ $this->toolkit->SetModuleVersion($module);
}
}
}
- // scan themes
- $this->Application->HandleEvent($themes_event, 'adm:OnRebuildThemes');
- $this->Conn->Query('UPDATE '.TABLE_PREFIX.'Theme SET Enabled=1, PrimaryTheme =1 LIMIT 1');
-
- // update categories cache
+ // update category cache
$updater =& $this->Application->recallObject('kPermCacheUpdater');
/* @var $updater kPermCacheUpdater */
$updater->OneStepRun();
break;
+ case 'post_config':
+ $this->toolkit->saveConfigValues( $this->GetVar('config') );
+ break;
+
+ case 'select_theme':
+ // 1. mark theme, that user is selected
+ $theme_id = $this->GetVar('theme');
+ $theme_table = $this->Application->getUnitOption('theme', 'TableName');
+ $theme_idfield = $this->Application->getUnitOption('theme', 'IDField');
+
+ $sql = 'UPDATE ' . $theme_table . '
+ SET Enabled = 1, PrimaryTheme = 1
+ WHERE ' . $theme_idfield . ' = ' . $theme_id;
+ $this->Conn->Query($sql);
+
+ if ($this->Application->isModuleEnabled('In-Portal')) {
+ // 2. compile theme stylesheets (only In-Portal uses them)
+ $css_table = $this->Application->getUnitOption('css', 'TableName');
+ $css_idfield = $this->Application->getUnitOption('css', 'IDField');
+
+ $sql = 'SELECT LOWER(Name) AS Name, ' . $css_idfield . '
+ FROM ' . $css_table;
+ $css_hash = $this->Conn->GetCol($sql, $css_idfield);
+
+ $css_item =& $this->Application->recallObject('css', null, Array('skip_autoload' => true));
+ /* @var $css_item StyleshetsItem */
+
+ foreach ($css_hash as $stylesheet_id => $theme_name) {
+ $css_item->Load($stylesheet_id);
+ $css_item->Compile();
+
+ $sql = 'UPDATE ' . $theme_table . '
+ SET StylesheetId = ' . $stylesheet_id . '
+ WHERE LOWER(Name) = ' . $this->Conn->qstr($theme_name);
+ $this->Conn->Query($sql);
+ }
+ }
+ break;
+
case 'upgrade_modules':
// get installed modules from db and compare their versions to upgrade script
$modules = $this->Application->GetVar('modules');
if ($modules) {
$upgrade_data = $this->GetUpgradableModules();
$start_from_module = $this->GetVar('continue_from_module');
$start_from_query = $this->GetVar('continue_from_query');
if (!$start_from_query) $start_from_query = 0;
foreach ($modules as $module_name) {
if ($start_from_module && $module_name != $start_from_module) {
continue;
}
else {
$start_from_module = false; //otherwise it will skip all modules after the one we start with!
}
$module_info = $upgrade_data[$module_name];
$upgrades_file = sprintf(UPGRADES_FILE, $module_info['Path'], 'sql');
$sqls = file_get_contents($upgrades_file);
$version_mark = preg_replace('/(\(.*?\))/', $module_info['FromVersion'], VERSION_MARK);
// get only sqls from next (relative to current) version to end of file
$start_pos = strpos($sqls, $version_mark);
$sqls = substr($sqls, $start_pos);
preg_match_all('/'.VERSION_MARK.'/s', $sqls, $regs);
if (!$start_from_module) {
$this->RunUpgrades($module_info['Path'], $regs[1], 'before');
}
- if (!$this->RunSQLText($sqls, null, null, $start_from_query)) {
+ if (!$this->toolkit->RunSQLText($sqls, null, null, $start_from_query)) {
$this->errorMessage .= '<input type="hidden" name="continue_from_module" value="'.$module_name.'">';
$this->errorMessage .= '<input type="hidden" name="continue_from_query" value="'.$this->LastQueryNum.'">';
$this->errorMessage .= '<br/>Click Continue button below to skip this query and go further<br/>';
$this->Done();
}
$start_from_query = 0; // so that next module start from the beggining
$this->RunUpgrades($module_info['Path'], $regs[1], 'after');
- // after upgrade sqls are executed update version
- $this->SetModuleVersion($module_name, $module_info['ToVersion']);
+ // after upgrade sqls are executed update version and upgrade language pack
+ $this->toolkit->SetModuleVersion($module_name, $module_info['ToVersion']);
+ $this->toolkit->ImportLanguage('/' . $module_info['Path'] . 'install/english', true);
}
}
- else {
- $this->errorMessage = 'Please select module(-s) to upgrade';
- }
+ break;
+
+ case 'fix_paths':
+ $this->toolkit->saveConfigValues( $this->Application->GetVar('config') );
break;
case 'finish':
// delete cache
- $sql = 'DELETE FROM '.TABLE_PREFIX.'Cache
- WHERE VarName IN ("config_files","configs_parsed","sections_parsed")';
- $this->Conn->Query($sql);
+ $this->toolkit->deleteCache();
// set installation finished mark
if ($this->Application->ConfigValue('InstallFinished') === false) {
$fields_hash = Array (
'VariableName' => 'InstallFinished',
'VariableValue' => 1,
);
$this->Conn->doInsert($fields_hash, TABLE_PREFIX.'ConfigurationValues');
}
break;
}
if ($this->errorMessage) {
// was error during run stage
return ;
}
$this->currentStep = $this->GetNextStep();
$this->InitStep(); // init next step (that will be shown now)
$this->InitApplication();
if ($this->currentStep == -1) {
// step after last step -> redirect to admin
$this->Application->Redirect('index', null, '', 'index.php');
}
}
/**
* Run upgrade PHP scripts for module with specified path
*
* @param string $module_path
* @param Array $versions
* @param string $mode upgrade mode = {before,after}
*/
function RunUpgrades($module_path, $versions, $mode)
{
static $upgrade_classes = Array ();
$upgrades_file = sprintf(UPGRADES_FILE, $module_path, 'php');
if (!file_exists($upgrades_file) || !$versions) {
return ;
}
if (!isset($upgrade_classes[$module_path])) {
// save class name, because 2nd time
// (in after call $upgrade_class variable will not be present)
include_once $upgrades_file;
$upgrade_classes[$module_path] = $upgrade_class;
}
$upgrade_object = new $upgrade_classes[$module_path]();
- if (method_exists($upgrade_object, 'setInstallator')) {
- $upgrade_object->setInstallator($this);
+ if (method_exists($upgrade_object, 'setToolkit')) {
+ $upgrade_object->setToolkit(&$this->toolkit);
}
foreach ($versions as $version) {
$upgrade_method = 'Upgrade_'.str_replace('.', '_', $version);
if (method_exists($upgrade_object, $upgrade_method)) {
$upgrade_object->$upgrade_method($mode);
}
}
}
/**
- * Sets module version to passed
- *
- * @param string $module_name
- * @param string $version
- */
- function SetModuleVersion($module_name, $version = false)
- {
- if ($version === false) {
- $version = $this->GetMaxModuleVersion($module_name);
- }
-
- $table_prefix = $this->systemConfig['Database']['TablePrefix'];
-
- $sql = 'UPDATE '.$table_prefix.'Modules
- SET Version = "'.$version.'"
- WHERE Name = "'.$module_name.'"';
- $this->Conn->Query($sql);
- }
-
-
- /**
- * Sets new configuration variable value
- *
- * @param string $name
- * @param mixed $value
- */
- function SetConfigValue($name, $value)
- {
- $sql = 'UPDATE '.TABLE_PREFIX.'ConfigurationValues
- SET VariableValue = '.$this->Conn->qstr($value).'
- WHERE VariableName = '.$this->Conn->qstr($name);
- $this->Conn->Query($sql);
- }
-
- /**
* Initialize kApplication
*
* @param bool $force initialize in any case
*/
function InitApplication($force = false)
{
if (($force || !in_array($this->currentStep, $this->skipApplicationSteps)) && !isset($this->Application)) {
// step is allowed for application usage & it was not initialized in previous step
global $start, $debugger, $dbg_options;
include_once(FULL_PATH.'/core/kernel/startup.php');
$this->Application =& kApplication::Instance();
+ $this->toolkit->Application =& kApplication::Instance();
+
$this->Application->Init();
+
$this->Conn =& $this->Application->GetADODBConnection();
+ $this->toolkit->Conn =& $this->Application->GetADODBConnection();
}
}
/**
* Show next step screen
*
*/
function Done($error_message = null)
{
if (isset($error_message)) {
$this->errorMessage = $error_message;
}
include_once (FULL_PATH.'/'.REL_PATH.'/install/incs/install.tpl');
if (isset($this->Application)) {
$this->Application->Done();
-
-// echo 'SID: ['.$this->Application->GetSID().']<br />';
}
exit;
}
- function GetMaxModuleVersion($module_name)
+ function ConnectToDatabase()
{
- $upgrades_file = sprintf(UPGRADES_FILE, mb_strtolower($module_name).'/', 'sql');
- if (!file_exists($upgrades_file)) {
- // no upgrade file
- return '4.0.1';
- }
+ include_once FULL_PATH . '/core/kernel/db/db_connection.php';
- $sqls = file_get_contents($upgrades_file);
- $versions_found = preg_match_all('/'.VERSION_MARK.'/s', $sqls, $regs);
- if (!$versions_found) {
- // upgrades file doesn't contain version definitions
- return '4.0.1';
+ $required_keys = Array ('DBType', 'DBUser', 'DBName');
+ foreach ($required_keys as $required_key) {
+ if (!$this->toolkit->getSystemConfig('Database', $required_key)) {
+ // one of required db connection settings missing -> abort connection
+ return false;
+ }
}
- return end($regs[1]);
- }
+ $this->Conn = new kDBConnection($this->toolkit->getSystemConfig('Database', 'DBType'), Array(&$this, 'DBErrorHandler'));
+ $this->Conn->Connect(
+ $this->toolkit->getSystemConfig('Database', 'DBHost'),
+ $this->toolkit->getSystemConfig('Database', 'DBUser'),
+ $this->toolkit->getSystemConfig('Database', 'DBUserPassword'),
+ $this->toolkit->getSystemConfig('Database', 'DBName')
+ );
- function ConnectToDatabase()
- {
- include_once FULL_PATH.'/core/kernel/db/db_connection.php';
-
- if (!isset($this->systemConfig['Database']['DBType']) ||
- !isset($this->systemConfig['Database']['DBUser']) ||
- !isset($this->systemConfig['Database']['DBName'])
- ) {
- return false;
- }
+ // setup toolkit too
+ $this->toolkit->Conn =& $this->Conn;
- $this->Conn = new kDBConnection($this->systemConfig['Database']['DBType'], Array(&$this, 'DBErrorHandler'));
- $this->Conn->Connect($this->systemConfig['Database']['DBHost'], $this->systemConfig['Database']['DBUser'], $this->systemConfig['Database']['DBUserPassword'], $this->systemConfig['Database']['DBName']);
return $this->Conn->errorCode == 0;
}
/**
* Checks if core is already installed
*
* @return bool
*/
function AlreadyInstalled()
{
- $table_prefix = $this->systemConfig['Database']['TablePrefix'];
+ $table_prefix = $this->toolkit->getSystemConfig('Database', 'TablePrefix');
$sql = 'SELECT VariableValue
- FROM '.$table_prefix.'ConfigurationValues
+ FROM ' . $table_prefix . 'ConfigurationValues
WHERE VariableName = "InstallFinished"';
return $this->TableExists('ConfigurationValues') && $this->Conn->GetOne($sql);
}
function CheckDatabase($check_installed = true)
{
// perform various check type to database specified
// 1. user is allowed to connect to database
// 2. user has all types of permissions in database
- if (mb_strlen($this->systemConfig['Database']['TablePrefix']) > 7) {
+ if (mb_strlen($this->toolkit->getSystemConfig('Database', 'TablePrefix')) > 7) {
$this->errorMessage = 'Table prefix should not be longer than 7 characters';
return false;
}
// connect to database
$status = $this->ConnectToDatabase();
if ($status) {
// if connected, then check if all sql statements work
$sql_tests[] = 'DROP TABLE IF EXISTS test_table';
$sql_tests[] = 'CREATE TABLE test_table(test_col mediumint(6))';
$sql_tests[] = 'LOCK TABLES test_table WRITE';
$sql_tests[] = 'INSERT INTO test_table(test_col) VALUES (5)';
$sql_tests[] = 'UPDATE test_table SET test_col = 12';
$sql_tests[] = 'UNLOCK TABLES';
$sql_tests[] = 'ALTER TABLE test_table ADD COLUMN new_col varchar(10)';
$sql_tests[] = 'SELECT * FROM test_table';
$sql_tests[] = 'DELETE FROM test_table';
$sql_tests[] = 'DROP TABLE IF EXISTS test_table';
foreach ($sql_tests as $sql_test) {
$this->Conn->Query($sql_test);
if ($this->Conn->getErrorCode() != 0) {
$status = false;
break;
}
}
if ($status) {
// if statements work & connection made, then check table existance
if ($check_installed && $this->AlreadyInstalled()) {
$this->errorMessage = 'An In-Portal Database already exists at this location';
return false;
}
}
else {
// user has insufficient permissions in database specified
- $db_error = 'Permission Error: ('.$this->Conn->getErrorCode().') '.$this->Conn->getErrorMsg();
+ $this->errorMessage = 'Permission Error: ('.$this->Conn->getErrorCode().') '.$this->Conn->getErrorMsg();
return false;
}
}
else {
// was error while connecting
if (!$this->Conn) return false;
$this->errorMessage = 'Connection Error: ('.$this->Conn->getErrorCode().') '.$this->Conn->getErrorMsg();
return false;
}
return true;
}
/**
* Checks if all passed tables exists
*
* @param string $tables comma separated tables list
* @return bool
*/
function TableExists($tables)
{
- $prefix = $this->systemConfig['Database']['TablePrefix'];
+ $prefix = $this->toolkit->getSystemConfig('Database', 'TablePrefix');
$all_found = true;
$tables = explode(',', $tables);
foreach ($tables as $table_name) {
$sql = 'SHOW TABLES LIKE "'.$prefix.$table_name.'"';
if (count($this->Conn->Query($sql)) == 0) {
$all_found = false;
break;
}
}
return $all_found;
}
/**
- * Runs SQLs from file
- *
- * @param string $filename
- * @param mixed $replace_from
- * @param mixed $replace_to
- */
- function RunSQL($filename, $replace_from = null, $replace_to = null)
- {
- if (!file_exists(FULL_PATH.$filename)) {
- return ;
- }
-
- $sqls = file_get_contents(FULL_PATH.$filename);
- if (!$this->RunSQLText($sqls, $replace_from, $replace_to)) {
- $this->Done();
- }
- }
-
- /**
- * Runs SQLs from string
- *
- * @param string $sqls
- * @param mixed $replace_from
- * @param mixed $replace_to
- */
- function RunSQLText(&$sqls, $replace_from = null, $replace_to = null, $start_from=0)
- {
- $table_prefix = $this->systemConfig['Database']['TablePrefix'];
-
- // add prefix to all tables
- if (strlen($table_prefix) > 0) {
- $replacements = Array ('CREATE TABLE ', 'INSERT INTO ', 'UPDATE ', 'ALTER TABLE ', 'DELETE FROM ', 'REPLACE INTO ');
- foreach ($replacements as $replacement) {
- $sqls = str_replace($replacement, $replacement.$table_prefix, $sqls);
- }
- $sqls = str_replace('DROP TABLE ', 'DROP TABLE IF EXISTS '.$table_prefix, $sqls);
- }
-
- if (isset($replace_from) && isset($replace_to)) {
- // replace something additionally, e.g. module root category
- $sqls = str_replace($replace_from, $replace_to, $sqls);
- }
-
- $sqls = str_replace("\r\n", "\n", $sqls); // convert to linux line endings
- $sqls = preg_replace("/#([^;]*?)\n/", '', $sqls); // remove all comments
- $sqls = explode(";\n", $sqls . "\n"); // ensures that last sql won't have ";" in it
-
- for ($i=$start_from; $i<count($sqls); $i++) {
- $sql = trim($sqls[$i]);
- if (!$sql) {
- continue; // usually last line
- }
-
- if (substr($sql, 0, 13) == 'CREATE TABLE ' && $this->systemConfig['Database']['DBCollation']) {
- // it is CREATE TABLE statement -> add collation
- $sql .= ' COLLATE \''.$this->systemConfig['Database']['DBCollation'].'\'';
- }
-
- $this->Conn->Query($sql);
- if ($this->Conn->getErrorCode() != 0) {
- $this->errorMessage = 'Error: ('.$this->Conn->getErrorCode().') '.$this->Conn->getErrorMsg().'<br /><br />Database Query:<pre>'.htmlspecialchars($sql).'</pre>';
- $this->LastQueryNum = $i+1;
- return false;
- }
- }
- return true;
- }
-
- function ImportLanguage($lang_file)
- {
- $lang_file = FULL_PATH.$lang_file.'.lang';
- if (!file_exists($lang_file)) {
- return ;
- }
-
- $lang_xml =& $this->Application->recallObjectP('LangXML', null, Array(), false); // false - don't use temp tables
- $lang_xml->Parse($lang_file, '|0|1|2|', '');
- }
-
- /**
* Returns modules list found in modules folder
*
* @return Array
*/
function ScanModules()
{
static $modules = null;
if (!isset($modules)) {
$modules = Array();
$fh = opendir(MODULES_PATH);
while (($sub_folder = readdir($fh))) {
$folder_path = MODULES_PATH.'/'.$sub_folder;
if ($sub_folder != '.' && $sub_folder != '..' && is_dir($folder_path)) {
if ($sub_folder == 'core') {
// skip modules here
continue;
}
// this is folder in MODULES_PATH directory
if (file_exists($folder_path.'/install.php') && file_exists($folder_path.'/install/install_schema.sql')) {
- $modules[] = $sub_folder;
+ $install_order = trim( file_get_contents($folder_path . '/install/install_order.txt') );
+ $modules[$install_order] = $sub_folder;
}
}
}
}
+ // allows to control module install order
+ ksort($modules, SORT_NUMERIC);
return $modules;
}
/**
- * Converts module version in format X.Y.Z to signle integer
- *
- * @param string $version
- * @return int
- */
- function ConvertModuleVersion($version)
- {
- $parts = explode('.', $version);
-
- $bin = '';
- foreach ($parts as $part) {
- $bin .= str_pad(decbin($part), 8, '0', STR_PAD_LEFT);
- }
-
- return bindec($bin);
- }
-
- /**
* Returns list of modules, that can be upgraded
*
*/
function GetUpgradableModules()
{
$ret = Array ();
foreach ($this->Application->ModuleInfo as $module_name => $module_info) {
$upgrades_file = sprintf(UPGRADES_FILE, $module_info['Path'], 'sql');
if (!file_exists($upgrades_file)) {
// no upgrade file
continue;
}
$sqls = file_get_contents($upgrades_file);
$versions_found = preg_match_all('/'.VERSION_MARK.'/s', $sqls, $regs);
if (!$versions_found) {
// upgrades file doesn't contain version definitions
continue;
}
$to_version = end($regs[1]);
- $this_version = $this->ConvertModuleVersion($module_info['Version']);
- if ($this->ConvertModuleVersion($to_version) > $this_version) {
+ $this_version = $this->toolkit->ConvertModuleVersion($module_info['Version']);
+ if ($this->toolkit->ConvertModuleVersion($to_version) > $this_version) {
// destination version is greather then current
foreach ($regs[1] as $version) {
- if ($this->ConvertModuleVersion($version) > $this_version) {
+ if ($this->toolkit->ConvertModuleVersion($version) > $this_version) {
$from_version = $version;
break;
}
}
$version_info = Array (
'FromVersion' => $from_version,
'ToVersion' => $to_version,
);
- $ret[$module_name] = array_merge_recursive2($module_info, $version_info);
+ $ret[ strtolower($module_name) ] = array_merge_recursive2($module_info, $version_info);
}
}
return $ret;
}
/**
* Returns content to show for current step
*
* @return string
*/
function GetStepBody()
{
$step_template = FULL_PATH.'/core/install/step_templates/'.$this->currentStep.'.tpl';
if (file_exists($step_template)) {
ob_start();
include_once ($step_template);
return ob_get_clean();
}
return '{step template "'.$this->currentStep.'" missing}';
}
/**
* Parses step information file, cache result for current step ONLY & return it
*
* @return Array
*/
function &_getStepInfo()
{
static $info = Array('help_title' => null, 'step_title' => null, 'help_body' => null, 'queried' => false);
if (!$info['queried']) {
$fdata = file_get_contents($this->StepDBFile);
$parser = xml_parser_create();
xml_parse_into_struct($parser, $fdata, $values, $index);
xml_parser_free($parser);
foreach ($index['STEP'] as $section_index) {
$step_data =& $values[$section_index];
if ($step_data['attributes']['NAME'] == $this->currentStep) {
$info['step_title'] = $step_data['attributes']['TITLE'];
if (isset($step_data['attributes']['HELP_TITLE'])) {
$info['help_title'] = $step_data['attributes']['HELP_TITLE'];
}
else {
// if help title not set, then use step title
$info['help_title'] = $step_data['attributes']['TITLE'];
}
$info['help_body'] = trim($step_data['value']);
break;
}
}
$info['queried'] = true;
}
return $info;
}
/**
* Returns particular information abou current step
*
* @param string $info_type
* @return string
*/
function GetStepInfo($info_type)
{
$step_info =& $this->_getStepInfo();
if (isset($step_info[$info_type])) {
return $step_info[$info_type];
}
return '{step "'.$this->currentStep.'"; param "'.$info_type.'" missing}';
}
/**
* Returns passed steps titles
*
* @param Array $steps
* @return Array
* @see kInstaller:PrintSteps
*/
function _getStepTitles($steps)
{
$fdata = file_get_contents($this->StepDBFile);
$parser = xml_parser_create();
xml_parse_into_struct($parser, $fdata, $values, $index);
xml_parser_free($parser);
$ret = Array ();
foreach ($index['STEP'] as $section_index) {
$step_data =& $values[$section_index];
if (in_array($step_data['attributes']['NAME'], $steps)) {
$ret[ $step_data['attributes']['NAME'] ] = $step_data['attributes']['TITLE'];
}
}
return $ret;
}
/**
* Returns current step number in active steps_preset.
* Value can't be cached, because same step can have different number in different presets
*
* @return int
*/
function GetStepNumber()
{
return array_search($this->currentStep, $this->steps[$this->stepsPreset]) + 1;
}
/**
* Returns step name to process next
*
* @return string
*/
function GetNextStep()
{
$next_index = $this->GetStepNumber();
if ($next_index > count($this->steps[$this->stepsPreset]) - 1) {
return -1;
}
return $this->steps[$this->stepsPreset][$next_index];
}
/**
* Returns step name, that was processed before this step
*
* @return string
*/
function GetPreviousStep()
{
$next_index = $this->GetStepNumber() - 1;
if ($next_index < 0) {
$next_index = 0;
}
return $this->steps[$this->stepsPreset][$next_index];
}
/**
* Prints all steps from active steps preset and highlights current step
*
* @param string $active_tpl
* @param string $passive_tpl
* @return string
*/
function PrintSteps($active_tpl, $passive_tpl)
{
$ret = '';
$step_titles = $this->_getStepTitles($this->steps[$this->stepsPreset]);
foreach ($this->steps[$this->stepsPreset] as $step_name) {
$template = $step_name == $this->currentStep ? $active_tpl : $passive_tpl;
$ret .= sprintf($template, $step_titles[$step_name]);
}
return $ret;
}
- function ParseConfig($parse_section = false)
- {
- if (!file_exists($this->INIFile)) {
- return Array();
- }
-
- if( file_exists($this->INIFile) && !is_readable($this->INIFile) ) {
- die('Could Not Open Ini File');
- }
-
- $contents = file($this->INIFile);
-
- $retval = Array();
- $section = '';
- $ln = 1;
- $resave = false;
- foreach ($contents as $line) {
- if ($ln == 1 && $line != '<'.'?'.'php die() ?'.">\n") {
- $resave = true;
- }
-
- $ln++;
- $line = trim($line);
- $line = eregi_replace(';[.]*','',$line);
- if (strlen($line) > 0) {
- //echo $line . " - ";
- if(eregi('^[[a-z]+]$',str_replace(' ', '', $line))) {
- //echo 'section';
- $section = mb_substr($line, 1, (mb_strlen($line) - 2));
- if ($parse_section) {
- $retval[$section] = array();
- }
- continue;
- } elseif (eregi('=',$line)) {
- //echo 'main element';
- list ($key, $val) = explode(' = ', $line);
- if (!$parse_section) {
- $retval[trim($key)] = str_replace('"', '', $val);
- }
- else {
- $retval[$section][trim($key)] = str_replace('"', '', $val);
- }
- }
- }
- }
-
- if ($resave) {
- $fp = fopen($this->INIFile, 'w');
- reset($contents);
- fwrite($fp,'<'.'?'.'php die() ?'.">\n\n");
- foreach ($contents as $line) {
- fwrite($fp,"$line");
- }
- fclose($fp);
- }
-
- return $retval;
- }
-
- function SaveConfig()
- {
- $fp = fopen($this->INIFile, 'w');
- fwrite($fp,'<'.'?'.'php die() ?'.">\n\n");
-
- foreach ($this->systemConfig as $section_name => $section_data) {
- fwrite($fp, '['.$section_name."]\n");
- foreach ($section_data as $key => $value) {
- fwrite($fp, $key.' = "'.$value.'"'."\n");
- }
- fwrite($fp, "\n");
- }
- fclose($fp);
- }
-
/**
* Installation error handler for sql errors
*
* @param int $code
* @param string $msg
* @param string $sql
* @return bool
* @access private
*/
function DBErrorHandler($code, $msg, $sql)
{
$this->errorMessage = 'Query: <br />'.htmlspecialchars($sql).'<br />execution result is error:<br />['.$code.'] '.$msg;
return true;
}
/**
* Installation error handler
*
* @param int $errno
* @param string $errstr
* @param string $errfile
* @param int $errline
* @param Array $errcontext
*/
function ErrorHandler($errno, $errstr, $errfile = '', $errline = '', $errcontext = '')
{
if ($errno == E_USER_ERROR) {
// only react on user fatal errors
$this->Done($errstr);
}
}
}
-
- /*function print_pre($s)
- {
- echo '<pre>', print_r($s, true). '</pre>';
- }*/
-
-
?>
\ No newline at end of file
Property changes on: branches/RC/core/install.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.12.2.6
\ No newline at end of property
+1.12.2.7
\ No newline at end of property

Event Timeline