Index: core/admin_templates/categories/categories_edit.tpl =================================================================== --- core/admin_templates/categories/categories_edit.tpl +++ core/admin_templates/categories/categories_edit.tpl @@ -78,7 +78,7 @@ - + @@ -147,6 +147,8 @@ + + @@ -315,4 +317,4 @@ disable_categories('', ); - \ No newline at end of file + Index: core/install/cache/class_structure.php =================================================================== --- core/install/cache/class_structure.php +++ core/install/cache/class_structure.php @@ -127,6 +127,7 @@ 'ModulesTagProcessor' => '/core/units/modules/modules_tag_processor.php', 'NParser' => '/core/kernel/nparser/nparser.php', 'NParserCompiler' => '/core/kernel/nparser/compiler.php', + 'NonSitemapSectionVisibility' => '/core/kernel/constants.php', 'POP3Helper' => '/core/units/helpers/pop3_helper.php', 'PageHelper' => '/core/units/helpers/page_helper.php', 'PageRevisionEventHandler' => '/core/units/page_revisions/page_revision_eh.php', @@ -167,6 +168,7 @@ 'SiteConfigTagProcessor' => '/core/units/sections/site_config_tp.php', 'SiteDomainEventHandler' => '/core/units/site_domains/site_domain_eh.php', 'SiteHelper' => '/core/units/helpers/site_helper.php', + 'SitemapHelper' => '/core/units/helpers/sitemap_helper.php', 'SkinEventHandler' => '/core/units/skins/skin_eh.php', 'SkinHelper' => '/core/units/helpers/skin_helper.php', 'SpamHelper' => '/core/units/helpers/spam_helper.php', @@ -1135,6 +1137,10 @@ 0 => 'kHelper', ), ), + 'NonSitemapSectionVisibility' => array( + 'type' => 1, + 'modifiers' => 0, + ), 'POP3Helper' => array( 'type' => 1, 'modifiers' => 0, @@ -1403,6 +1409,13 @@ 0 => 'kHelper', ), ), + 'SitemapHelper' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'kHelper', + ), + ), 'SkinEventHandler' => array( 'type' => 1, 'modifiers' => 0, Index: core/install/english.lang =================================================================== --- core/install/english.lang +++ core/install/english.lang @@ -209,6 +209,7 @@ U2Vzc2lvbiBDb29raWUgRG9tYWlucyAoc2luZ2xlIGRvbWFpbiBwZXIgbGluZSk= U2Vzc2lvbiBTZWN1cml0eSBDaGVjayBiYXNlZCBvbiBJUA== S2VlcCAiU2Vzc2lvbiBMb2ciIGZvcg== + U2VjdGlvbnMgaGlkZGVuIGZyb20gU2l0ZW1hcA== V2Vic2l0ZSBTdWJ0aXRsZQ== VGltZSB6b25lIG9mIHRoZSBzaXRl VGVtcGxhdGUgZm9yIFNvZnQgTWFpbnRlbmFuY2U= @@ -491,6 +492,7 @@ T3ZlcndyaXRlIEV4aXN0aW5nIFBocmFzZXM= SW1wb3J0IE5ldyBQaHJhc2VzIGFzIFN5bmNlZA== SW5jbHVkZSBmaWVsZCB0aXRsZXM= + SW5jbHVkZSBpbiBTaXRlbWFw SW5jbHVkZSBTdWJsZXZlbHM= SW5wdXQgRGF0ZSBGb3JtYXQ= SW5wdXQgVGltZSBGb3JtYXQ= @@ -843,6 +845,7 @@ QWRkcmVzcw== QWZ0ZXI= QWxsb3c= + QWx3YXlzIFNob3duIGluIENhdGFsb2c= Q3VzdG9t RmFkZQ== U2xpZGU= @@ -984,6 +987,7 @@ U2VtaS1jb2xvbg== U2VudA== U2VwdGVtYmVy + U2hvd24gaW4gQ2F0YWxvZyBPbmx5IGluIERlYnVnIE1vZGU= U2lsZW50 U2tpcHBlZA== U3BhY2U= Index: core/install/install_data.sql =================================================================== --- core/install/install_data.sql +++ core/install/install_data.sql @@ -13,10 +13,11 @@ INSERT INTO SystemSettings VALUES(DEFAULT, 'RecycleBinFolder', '', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_RecycleBinFolder', 'text', NULL, NULL, 10.10, 0, 0, NULL); INSERT INTO SystemSettings VALUES(DEFAULT, 'CheckViewPermissionsInCatalog', '0', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_CheckViewPermissionsInCatalog', 'radio', NULL, '1=la_Yes||0=la_No', 10.11, 0, 1, 'hint:la_config_CheckViewPermissionsInCatalog'); INSERT INTO SystemSettings VALUES(DEFAULT, 'CategoryPermissionRebuildMode', '3', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_CategoryPermissionRebuildMode', 'select', NULL, '1=la_opt_Manual||2=la_opt_Silent||3=la_opt_Automatic', 10.12, 0, 0, 'hint:la_config_CategoryPermissionRebuildMode'); -INSERT INTO SystemSettings VALUES(DEFAULT, 'FilenameSpecialCharReplacement', '-', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_FilenameSpecialCharReplacement', 'select', NULL, '_=+_||-=+-', 10.13, 0, 0, NULL); -INSERT INTO SystemSettings VALUES(DEFAULT, 'Search_MinKeyword_Length', '3', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_Search_MinKeyword_Length', 'text', NULL, NULL, 10.14, 0, 0, NULL); -INSERT INTO SystemSettings VALUES(DEFAULT, 'ExcludeTemplateSectionsFromSearch', '0', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_ExcludeTemplateSectionsFromSearch', 'checkbox', '', '', 10.15, 0, 0, NULL); -INSERT INTO SystemSettings VALUES(DEFAULT, 'UpdateCountersOnFilterChange', '1', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_UpdateCountersOnFilterChange', 'checkbox', '', '', 10.16, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'SitemapInvisibleCategoriesCatalogVisibility', '1', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_SitemapInvisibleCategoriesCatalogVisibility', 'radio', NULL, '1=la_opt_AlwaysShownInCatalog||2=la_opt_ShownInCatalogOnlyInDebugMode', 10.13, 0, 0, ''); +INSERT INTO SystemSettings VALUES(DEFAULT, 'FilenameSpecialCharReplacement', '-', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_FilenameSpecialCharReplacement', 'select', NULL, '_=+_||-=+-', 10.14, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'Search_MinKeyword_Length', '3', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_Search_MinKeyword_Length', 'text', NULL, NULL, 10.15, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'ExcludeTemplateSectionsFromSearch', '0', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_ExcludeTemplateSectionsFromSearch', 'checkbox', '', '', 10.16, 0, 0, NULL); +INSERT INTO SystemSettings VALUES(DEFAULT, 'UpdateCountersOnFilterChange', '1', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_UpdateCountersOnFilterChange', 'checkbox', '', '', 10.17, 0, 0, NULL); INSERT INTO SystemSettings VALUES(DEFAULT, 'Category_MetaKey', '', 'In-Portal', 'in-portal:configure_categories', 'la_Text_MetaInfo', 'la_category_metakey', 'textarea', '', '', 20.01, 0, 1, NULL); INSERT INTO SystemSettings VALUES(DEFAULT, 'Category_MetaDesc', '', 'In-Portal', 'in-portal:configure_categories', 'la_Text_MetaInfo', 'la_category_metadesc', 'textarea', '', '', 20.02, 0, 1, NULL); Index: core/install/install_schema.sql =================================================================== --- core/install/install_schema.sql +++ core/install/install_schema.sql @@ -597,6 +597,7 @@ PromoBlockGroupId int(10) unsigned NOT NULL DEFAULT '0', RequireSSL tinyint(4) NOT NULL DEFAULT '0', RequireLogin tinyint(4) NOT NULL DEFAULT '0', + IncludeInSitemap tinyint(4) NOT NULL DEFAULT '1', PRIMARY KEY (CategoryId), UNIQUE KEY ResourceId (ResourceId), KEY ParentId (ParentId), Index: core/install/upgrades.sql =================================================================== --- core/install/upgrades.sql +++ core/install/upgrades.sql @@ -3058,3 +3058,10 @@ UPDATE PromoBlocks SET ScheduleToDate = ScheduleToDate + 86399 WHERE DATE_FORMAT(FROM_UNIXTIME(ScheduleTodate), "%H%i") = "0000"; DELETE FROM LanguageLabels WHERE PhraseKey = "LA_FLD_SCHEDULEDATE"; + +ALTER TABLE Categories ADD IncludeInSitemap TINYINT(4) NOT NULL DEFAULT 1; +UPDATE Categories SET IncludeInSitemap = 0 WHERE ThemeId <> 0 AND Type = 1; +UPDATE SystemSettings +SET DisplayOrder = ROUND(DisplayOrder + 0.01, 2) +WHERE (DisplayOrder BETWEEN 10.13 AND 10.18) AND (ModuleOwner = 'In-Portal') AND (Section = 'in-portal:configure_categories');' +INSERT INTO SystemSettings VALUES(DEFAULT, 'SitemapInvisibleCategoriesCatalogVisibility', '1', 'In-Portal', 'in-portal:configure_categories', 'la_title_General', 'la_config_SitemapInvisibleCategoriesCatalogVisibility', 'radio', NULL, '1=la_opt_AlwaysShownInCatalog||2=la_opt_ShownInCatalogOnlyInDebugMode', 10.13, 0, 0, ''); Index: core/kernel/constants.php =================================================================== --- core/kernel/constants.php +++ core/kernel/constants.php @@ -235,3 +235,9 @@ const STATUS_SKIPPED = 3; } + + class NonSitemapSectionVisibility + { + const ALWAYS_SHOWN = 1; + const SHOWN_ONLY_IN_DEBUG_MODE = 2; + } Index: core/units/admin/admin_config.php =================================================================== --- core/units/admin/admin_config.php +++ core/units/admin/admin_config.php @@ -30,9 +30,10 @@ 1 => 'event', ), - 'ScheduledTasks' => Array ( - 'optimize_performance' => Array ('EventName' => 'OnOptimizePerformance', 'RunSchedule' => '0 0 * * *'), - 'pre_resize_images' => Array ('EventName' => 'OnPreResizeImages', 'RunSchedule' => '0 * * * *'), + 'ScheduledTasks' => array( + 'optimize_performance' => array('EventName' => 'OnOptimizePerformance', 'RunSchedule' => '0 0 * * *'), + 'pre_resize_images' => array('EventName' => 'OnPreResizeImages', 'RunSchedule' => '0 * * * *'), + 'generate_sitemap' => array('EventName' => 'OnGenerateSitemap', 'RunSchedule' => '0 0 * * *'), ), 'TitlePresets' => Array ( Index: core/units/admin/admin_events_handler.php =================================================================== --- core/units/admin/admin_events_handler.php +++ core/units/admin/admin_events_handler.php @@ -1220,6 +1220,21 @@ } } } + + /** + * [SCHEDULED TASK] Generate sitemaps. + * + * @param kEvent $event Event object. + * + * @return void + */ + protected function OnGenerateSitemap(kEvent $event) + { + /** @var $sitemap_helper SitemapHelper */ + $sitemap_helper = $this->Application->recallObject('SitemapHelper'); + $sitemap_helper->build(); + } + } /** Index: core/units/categories/categories_config.php =================================================================== --- core/units/categories/categories_config.php +++ core/units/categories/categories_config.php @@ -428,6 +428,11 @@ 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0 ), + 'IncludeInSitemap' => array( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', 'options' => array(1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, + 'not_null' => 1, 'default' => 1, + ), ), 'VirtualFields' => Array ( Index: core/units/categories/categories_event_handler.php =================================================================== --- core/units/categories/categories_event_handler.php +++ core/units/categories/categories_event_handler.php @@ -549,6 +549,28 @@ } $search_helper->SetComplexFilter($event, $type_clauses, implode(',', $types), implode(',', $except_types)); + $this->setSitemapFilter($object); + } + + /** + * Sets sitemap filter + * + * @param kDBList $object Object. + * + * @return void + */ + protected function setSitemapFilter(kDBList $object) + { + if ( !$this->Application->isAdmin ) { + return; + } + + /** @var CategoryHelper $category_helper */ + $category_helper = $this->Application->recallObject('CategoryHelper'); + + if ( $category_helper->showSitemapOnlyCategories() ) { + $object->addFilter('sitemap_filter', '%1$s.IncludeInSitemap = 1'); + } } /** @@ -2009,6 +2031,10 @@ // this will override any global "m_cat_id" $page_category = $this->_getParentCategoryFromPath(explode('||', $template_info['section']), $root_category, $theme_id); } + + if ( array_key_exists('in_sitemap', $template_info) ) { + $in_sitemap = $template_info['in_sitemap'] ? 1 : 0; + } } } else { @@ -2037,6 +2063,10 @@ $object->SetDBField('l' . $primary_language . '_Description', $page_description); $object->SetDBField('l' . $current_language . '_Description', $page_description); + if ( isset($in_sitemap) ) { + $object->SetDBField('IncludeInSitemap', $in_sitemap); + } + return $object->Create(); } Index: core/units/helpers/category_helper.php =================================================================== --- core/units/helpers/category_helper.php +++ core/units/helpers/category_helper.php @@ -16,6 +16,8 @@ class CategoryHelper extends kHelper { + const CACHE_FORMAT = 2; + /** * Structure tree for ParentId field in category or category items * @@ -31,6 +33,22 @@ var $_primaryLanguageId = false; /** + * Show sitemap only categories. + * + * @var boolean + */ + protected $showSitemapOnlyCategories = false; + + /** + * Set showSitemapOnlyCategories property + */ + public function __construct() + { + parent::__construct(); + $this->showSitemapOnlyCategories = $this->showSitemapOnlyCategories(); + } + + /** * Returns module information based on given module name or current category * (relative to module root categories). * @@ -78,6 +96,10 @@ return Array (); } + if ( !$data['IncludeInSitemap'] && $this->showSitemapOnlyCategories ) { + return array(); + } + $category_language = $data['l' . $language_id . '_Name'] ? $language_id : $this->_primaryLanguageId; $ret = Array ($parent_category_id => str_repeat('—', $level) . ' ' . $data['l' . $category_language . '_Name']); @@ -93,6 +115,22 @@ } /** + * Checks if need show sitemap only categories + * + * @return boolean + */ + public function showSitemapOnlyCategories() + { + if ( $this->Application->isDebugMode() ) { + return false; + } + + $visibility = $this->Application->ConfigValue('SitemapInvisibleCategoriesCatalogVisibility'); + + return $visibility == NonSitemapSectionVisibility::SHOWN_ONLY_IN_DEBUG_MODE; + } + + /** * Returns information about children under parent path (recursive) * * @param int $parent_category_id @@ -111,7 +149,8 @@ $fields[] = 'l' . $language_id . '_Name'; } - $sql = 'SELECT CategoryId AS id, ' . implode(', ', $fields) . ', ParentId, Template, ThemeId + $sql = 'SELECT CategoryId AS id, ' . implode(', ', $fields) . ', + ParentId, Template, ThemeId, IncludeInSitemap FROM ' . TABLE_PREFIX . 'Categories ORDER BY Priority DESC'; $items = $this->Conn->Query($sql, 'id'); @@ -194,10 +233,12 @@ $data = $this->Application->getDBCache('StructureTree', CacheSettings::$structureTreeRebuildTime); } - if ( $data ) { + if ( $data ) { $data = unserialize($data); - return $data; + if ( isset($data['cache_format']) && $data['cache_format'] >= self::CACHE_FORMAT ) { + return $data; + } } // generate structure tree from scratch @@ -207,6 +248,7 @@ $languages = $ml_helper->getLanguages(); $root_category = $this->Application->getBaseCategory(); $data = $this->_getChildren($root_category, $languages); + $data['cache_format'] = self::CACHE_FORMAT; if ( $this->Application->isCachingType(CACHING_TYPE_MEMORY) ) { $this->Application->setCache('master:StructureTree', serialize($data)); Index: core/units/helpers/sitemap_helper.php =================================================================== --- /dev/null +++ core/units/helpers/sitemap_helper.php @@ -0,0 +1,528 @@ +defaultUrlParams = $this->getDefaultUrlParams(); + $this->sitemapPrefix = $this->prepareSitemapPrefix($sitemap_prefix); + + // Link from Admin to Front-end. + $this->linkPrefix = $this->Application->isAdmin ? '_FRONT_END_' : ''; + + // XML documents are usually long. + set_time_limit(0); + ini_set('memory_limit', -1); + + $this->lastmod = date('Y-m-d\TH:i:s') . preg_replace('/([0-9]{2})$/', ':$1', date('O')); // W3C date format. + + $this->baseFolder = WRITEABLE . '/sitemaps'; + + /** @var $file_helper FileHelper */ + $file_helper = $this->Application->recallObject('FileHelper'); + + $file_helper->CheckFolder($this->baseFolder); + } + + /** + * Write sitemap header. + * + * @return void + */ + protected function startFile() + { + $this->curFileSize = 0; + $this->curFileURLs = 0; + $this->curFile = fopen( + $this->baseFolder . '/' . $this->sitemapPrefix . ++$this->curFileNumber . '.xml.tmp', + 'w' + ); + + $this->write("\n", false); + } + + /** + * Write sitemap footer. + * + * @return void + */ + protected function endFile() + { + fwrite($this->curFile, "\n"); + fclose($this->curFile); + } + + /** + * Write sitemap item. + * + * @param string $data Item data. + * @param boolean $increase_urls If yes, increase urls of file. + * + * @return void + */ + protected function write($data, $increase_urls = true) + { + $len = strlen($data); + + if ( $this->curFileSize + $len + $this->gap > $this->maxFileSize || $this->curFileURLs > $this->maxURLs ) { + $this->endFile(); + $this->startFile(); + } + + fwrite($this->curFile, $data); + $this->curFileSize += $len; + + if ( $increase_urls ) { + $this->curFileURLs++; + } + } + + /** + * Build sitemap file. + * + * @return void + */ + public function build() + { + $this->startFile(); + $this->doBuild(); + $this->finalize(); + } + + /** + * Build main sitemap content + * + * @return void + */ + protected function doBuild() + { + $this->addCategories(); + + foreach ( $this->Application->ModuleInfo as $module_name => $module_info ) { + if ( $module_name != 'Core' && $module_name != 'In-Portal' ) { + $this->addCategoryItems($module_info['Var']); + } + } + } + + /** + * Write URL to sitemap. + * + * @param string $url URL. + * @param integer $modified_on Modified timestamp. + * @param integer $priority Priority. + * + * @return void + */ + protected function writeURL($url, $modified_on = null, $priority = null) + { + $lastmod = $this->lastmod; + + if ( isset($modified_on) ) { + $lastmod = date('Y-m-d\TH:i:s', $modified_on) . + preg_replace('/([0-9]{2})$/', ':$1', date('O', $modified_on)); // W3C date format. + } + + if ( isset($priority) ) { + $priority_row = <<{$priority} +PRIORITY_XML; + } + else { + $priority_row = ''; + } + + $block = << +{$url} +{$lastmod}{$priority_row} + + +END_XML; + $this->write($block); + } + + /** + * Add all categories to sitemap + * + * @return void + */ + protected function addCategories() + { + $tag_params = array('per_page' => -1, 'parent_cat_id' => 'any', 'skip_counting' => 1); + + /** @var kDBList $category_list */ + $category_list = $this->Application->recallObject('c.sitemap', 'c_List', $tag_params); + $category_list->addFilter('status_filter', '%1$s.Status = ' . STATUS_ACTIVE); + $category_list->addFilter('sitemap_filter', '%1$s.IncludeInSitemap = 1'); + $category_list->ClearOrderFields(); + $category_list->AddOrderField('ParentPath', 'asc'); + + $sql = $category_list->getCountSQL($category_list->GetSelectSQL(true)); + $sql = str_replace( + 'COUNT(*) AS count', + $category_list->TableName . '.' . $category_list->IDField, + $sql + ); + $categories = $this->Conn->GetCol($sql); + + foreach ( $categories as $category_id ) { + $this->addCategory($category_id); + } + } + + /** + * Add category to sitemap + * + * @param integer $category_id Category Id. + * + * @return void + */ + protected function addCategory($category_id) + { + $template = $this->Application->getVirtualPageTemplate($category_id); + + if ( !$template ) { + $template = '__default__'; + } + + $url_params = $this->getUrlParams(array( + 'm_cat_id' => $category_id, + 'pass_category' => 1, + )); + + $this->writeURL($this->Application->HREF($template, $this->linkPrefix, $url_params)); + } + + /** + * Add all items from allowed categories. + * + * @param string $prefix Item prefix. + * @param integer $top_category Top category id. + * @param string $where_clause Additional filter. + * + * @return void + */ + protected function addCategoryItems($prefix, $top_category = null, $where_clause = null) + { + $config = $this->Application->getUnitConfig($prefix); + $id_field = $config->getIDField(); + $table_name = $config->getTableName(); + + if ( !$id_field || !$table_name ) { + return; + } + + $sql = 'SELECT item.' . $id_field . ', ci.CategoryId + FROM ' . $table_name . ' item + JOIN ' . TABLE_PREFIX . 'CategoryItems ci ON ci.ItemResourceId = item.ResourceId AND ci.PrimaryCat = 1 + JOIN ' . TABLE_PREFIX . 'Categories c ON c.CategoryId = ci.CategoryId + WHERE item.Status = ' . STATUS_ACTIVE . ' AND c.Status = ' . STATUS_ACTIVE; + + if ( isset($top_category) ) { + list ($tree_left, $tree_right) = $this->Application->getTreeIndex($top_category); + $sql .= ' AND c.TreeLeft BETWEEN ' . $tree_left . ' AND ' . $tree_right; + } + + if ( isset($where_clause) ) { + $sql .= ' AND ' . $where_clause; + } + + $items = $this->Conn->Query($sql); + + foreach ( $items as $item_data ) { + $url_params = $this->getUrlParams(array( + 'm_cat_id' => $item_data['CategoryId'], + 'pass_category' => 1, + $prefix . '_id' => $item_data[$id_field], + 'pass' => 'm,' . $prefix, + )); + + $this->writeURL($this->Application->HREF('__default__', $this->linkPrefix, $url_params)); + } + } + + /** + * Finalize sitemap file. + * + * @return void + */ + protected function finalize() + { + $this->endFile(); + + $files = glob($this->baseFolder . '/' . $this->sitemapPrefix . '*.xml.gz'); + + if ( file_exists($this->baseFolder . '/' . $this->sitemapPrefix . '.xml.gz') ) { + unlink($this->baseFolder . '/' . $this->sitemapPrefix . '.xml.gz'); + } + + if ( $this->curFileNumber > 1 ) { + $master = fopen($this->baseFolder . '/' . $this->sitemapPrefix . '.xml', 'w'); + fwrite($master, "\n"); + + $site = preg_replace( + '/^' . preg_quote(FULL_PATH, '/') . '/', + rtrim($this->Application->BaseURL('', 0), '/'), + $this->baseFolder, + 1 + ); + + for ( $i = 1; $i <= $this->curFileNumber; $i++ ) { + $block = << +{$site}/{$this->sitemapPrefix}{$i}.xml.gz + + +END_XML; + fwrite($master, $block); + + if ( file_exists($this->baseFolder . '/' . $this->sitemapPrefix . $i . '.xml.gz') ) { + unlink($this->baseFolder . '/' . $this->sitemapPrefix . $i . '.xml.gz'); + } + + rename( + $this->baseFolder . '/' . $this->sitemapPrefix . $i . '.xml.tmp', + $this->baseFolder . '/' . $this->sitemapPrefix . $i . '.xml' + ); + shell_exec('gzip ' . $this->baseFolder . '/' . $this->sitemapPrefix . $i . '.xml'); + + if ( $files ) { + $key = array_search($this->baseFolder . '/' . $this->sitemapPrefix . $i . '.xml.gz', $files); + + if ( $key !== false ) { + unset($files[$key]); + } + } + } + + fwrite($master, "\n"); + fclose($master); + } + else { + // Single sitemap file. + rename( + $this->baseFolder . '/' . $this->sitemapPrefix . '1.xml.tmp', + $this->baseFolder . '/' . $this->sitemapPrefix . '.xml' + ); + } + + shell_exec('gzip ' . $this->baseFolder . '/' . $this->sitemapPrefix . '.xml'); + + if ( $files ) { + $key = array_search($this->baseFolder . '/' . $this->sitemapPrefix . '.xml.gz', $files); + + if ( $key !== false ) { + unset($files[$key]); + } + + // Removing files left. + foreach ( $files as $a_file ) { + unlink($a_file); + } + } + } + + /** + * Generate index of sitemap files. + * + * @param array $sitemap_prefixes List of sitemap prefixes. + * + * @return void + */ + public function generateSitemapIndex(array $sitemap_prefixes) + { + $sitemap_prefixes[] = 'static'; + + $file = new SplFileObject($this->baseFolder . '/' . $this->sitemapPrefix . '.xml.tmp', 'w'); + $file->fwrite('' . PHP_EOL); + + $site = preg_replace( + '/^' . preg_quote(FULL_PATH, '/') . '/', + rtrim($this->Application->BaseURL('', 0), '/'), + $this->baseFolder, + 1 + ); + + foreach ( $sitemap_prefixes as $sitemap_prefix ) { + $sitemap_file = ''; + $sitemap_prefix = $this->prepareSitemapPrefix($sitemap_prefix); + + if ( file_exists($this->baseFolder . '/' . $sitemap_prefix . '.xml.gz') ) { + $sitemap_file = $sitemap_prefix . '.xml.gz'; + } + elseif ( file_exists($this->baseFolder . '/' . $sitemap_prefix . '.xml') ) { + $sitemap_file = $sitemap_prefix . '.xml'; + } + + if ( $sitemap_file ) { + $block = << +{$site}/{$sitemap_file} + + +END_XML; + $file->fwrite($block); + } + } + + $file->fwrite(''); + + if ( file_exists($this->baseFolder . '/sitemap.xml') ) { + unlink($this->baseFolder . '/sitemap.xml'); + } + + rename($file->getPathname(), $this->baseFolder . '/sitemap.xml'); + } + + /** + * Prepare sitemap prefix. + * + * @param string $sitemap_prefix Prefix. + * + * @return string + */ + protected function prepareSitemapPrefix($sitemap_prefix) + { + return $sitemap_prefix ? 'sitemap.' . trim($sitemap_prefix, '.') : 'sitemap'; + } + + /** + * Returns base url params. + * + * @param array $custom_params Params. + * + * @return array + */ + protected function getUrlParams(array $custom_params = array()) + { + return array_merge($this->defaultUrlParams, $custom_params); + } + + /** + * Returns default url params + * + * @return array + */ + protected function getDefaultUrlParams() + { + $url_params = array( + 'pass' => 'm', + '__SSL__' => 0, // To change BaseURL too. + '__NO_SID__' => 1, // Don't add sid on domain change. + ); + + if ( $this->Application->isAdmin ) { + // Link from Admin to Front-end. + if ( $this->Application->ConfigValue('UseModRewrite') ) { + $url_params['__MOD_REWRITE__'] = 1; + } + else { + $url_params['index_file'] = 'index.php'; + } + } + + return $url_params; + } + +} Index: core/units/helpers/themes_helper.php =================================================================== --- core/units/helpers/themes_helper.php +++ core/units/helpers/themes_helper.php @@ -475,47 +475,90 @@ return $this->parseTemplateMetaInfo($template_file); } - function parseTemplateMetaInfo($template_file) + /** + * Parses template meta info + * + * @param string $template_file Template file. + * + * @return array + * @throws Exception When invalid template meta tag is found. + */ + public function parseTemplateMetaInfo($template_file) { - if (!file_exists($template_file)) { - // when template without info it's placed in top category - return Array (); + if ( !file_exists($template_file) ) { + // When template without info it's placed in top category. + return array(); } $template_data = file_get_contents($template_file); - if (substr($template_data, 0, 6) == '*/ - - $comment_end = strpos($template_data, '##-->'); - if ($comment_end === false) { - // badly formatted comment - return Array (); - } - - $comment = trim( substr($template_data, 6, $comment_end - 6) ); - if (preg_match_all('/<(NAME|DESC|SECTION)>(.*?)<\/(NAME|DESC|SECTION)>/is', $comment, $regs)) { - $ret = Array (); - foreach ($regs[1] as $param_order => $param_name) { - $ret[ strtolower($param_name) ] = trim($regs[2][$param_order]); - } + // template starts with comment in such format + /**/ - if (array_key_exists('section', $ret) && $ret['section']) { - $category_path = explode('||', $ret['section']); - $category_path = array_map('trim', $category_path); - $ret['section'] = implode('||', $category_path); - } + if ( substr($template_data, 0, 6) != ''); + + if ( $comment_end === false ) { + // Badly formatted comment. + return array(); + } + + $ret = array(); + $comment = trim(substr($template_data, 6, $comment_end - 6)); + $allowed_settings = array('name', 'desc', 'section', 'in_sitemap'); - return $ret; + /** @var SimpleXMLElement[] $meta_info */ + $meta_info = simplexml_load_string('' . $comment . ''); + + if ( $meta_info === false ) { + // Malformed XML. SimpleXML will print an error itself. + return array(); + } + + foreach ( $meta_info as $setting ) { + $setting_name = strtolower($setting->getName()); + + if ( !in_array($setting_name, $allowed_settings) ) { + trigger_error( + 'Setting "' . $setting_name . '" not supported in "' . $template_file . '" template', + E_USER_WARNING + ); + continue; + } + + $ret[$setting_name] = trim($setting); + } + + if ( array_key_exists('section', $ret) && $ret['section'] ) { + $category_path = explode('||', $ret['section']); + $category_path = array_map('trim', $category_path); + $ret['section'] = implode('||', $category_path); + } + + if ( array_key_exists('in_sitemap', $ret) ) { + $value = strtolower($ret['in_sitemap']); + + if ( strlen($value) == 0 || in_array($value, array('yes', 'true', '1')) ) { + $ret['in_sitemap'] = true; + } + elseif ( in_array($value, array('no', 'false', '0')) ) { + $ret['in_sitemap'] = false; + } + else { + $error_msg = 'The "IN_SITEMAP" setting in "' . $template_file . '" template '; + $error_msg .= 'has unsupported value. Please use "yes" or "no".'; + throw new Exception($error_msg); } } - return Array (); + return $ret; } /** Index: core/units/structure/structure_config.php =================================================================== --- core/units/structure/structure_config.php +++ core/units/structure/structure_config.php @@ -215,7 +215,12 @@ 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 1 ), - 'DirectLinkAuthKey' => Array ('type' => 'string', 'max_len' => 20, 'not_null' => 1, 'default' => '') + 'DirectLinkAuthKey' => array('type' => 'string', 'max_len' => 20, 'not_null' => 1, 'default' => ''), + 'IncludeInSitemap' => array( + 'type' => 'int', + 'formatter' => 'kOptionsFormatter', 'options' => array(1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, + 'not_null' => 1, 'default' => 1, + ), ), 'VirtualFields' => Array ( Index: themes/advanced/in-bulletin/designs/section.tpl =================================================================== --- themes/advanced/in-bulletin/designs/section.tpl +++ themes/advanced/in-bulletin/designs/section.tpl @@ -3,6 +3,7 @@ Topics - Section Template Topics
Platform||Topics
+false ##--> @@ -108,4 +109,4 @@ - \ No newline at end of file + Index: themes/advanced/in-bulletin/my_account/my_preferences.tpl =================================================================== --- themes/advanced/in-bulletin/my_account/my_preferences.tpl +++ themes/advanced/in-bulletin/my_account/my_preferences.tpl @@ -2,6 +2,7 @@ User's Preferences User's Preferences
My Account
+false ##--> @@ -77,4 +78,4 @@
- \ No newline at end of file + Index: themes/advanced/in-bulletin/my_account/my_topics.tpl =================================================================== --- themes/advanced/in-bulletin/my_account/my_topics.tpl +++ themes/advanced/in-bulletin/my_account/my_topics.tpl @@ -2,6 +2,7 @@ User's Topics List of User's Topics
My Account
+false ##--> @@ -70,4 +71,4 @@ - \ No newline at end of file + Index: themes/advanced/in-bulletin/my_account/private_messages/new_message.tpl =================================================================== --- themes/advanced/in-bulletin/my_account/private_messages/new_message.tpl +++ themes/advanced/in-bulletin/my_account/private_messages/new_message.tpl @@ -2,6 +2,7 @@ Write Private Message Write Private Message Form
My Account||Private Messages
+false ##--> @@ -73,4 +74,4 @@ - \ No newline at end of file + Index: themes/advanced/in-bulletin/my_account/private_messages/private_messages.tpl =================================================================== --- themes/advanced/in-bulletin/my_account/private_messages/private_messages.tpl +++ themes/advanced/in-bulletin/my_account/private_messages/private_messages.tpl @@ -2,6 +2,7 @@ List Private Messages List Private Messages
My Account||Private Messages
+false ##--> @@ -72,4 +73,4 @@ - \ No newline at end of file + Index: themes/advanced/in-bulletin/my_account/private_messages/view_message.tpl =================================================================== --- themes/advanced/in-bulletin/my_account/private_messages/view_message.tpl +++ themes/advanced/in-bulletin/my_account/private_messages/view_message.tpl @@ -2,6 +2,7 @@ View Private Message View Private Message page
My Account||Private Messages
+false ##--> @@ -82,4 +83,4 @@ - \ No newline at end of file + Index: themes/advanced/in-bulletin/topics/topic_detail.tpl =================================================================== --- themes/advanced/in-bulletin/topics/topic_detail.tpl +++ themes/advanced/in-bulletin/topics/topic_detail.tpl @@ -3,6 +3,7 @@ Topics - Details Design General design template for Topic Details
Platform||Topics
+false ##--> @@ -146,4 +147,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/checkout/billing.tpl =================================================================== --- themes/advanced/in-commerce/checkout/billing.tpl +++ themes/advanced/in-commerce/checkout/billing.tpl @@ -2,6 +2,7 @@ Billing step Billing step where user enters the payment inforamtion
Platform||Checkout
+false ##--> @@ -74,4 +75,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/checkout/preview.tpl =================================================================== --- themes/advanced/in-commerce/checkout/preview.tpl +++ themes/advanced/in-commerce/checkout/preview.tpl @@ -2,6 +2,7 @@ Order Preview Order Preview oage
Platform||Checkout
+false ##--> Index: themes/advanced/in-commerce/checkout/shipping.tpl =================================================================== --- themes/advanced/in-commerce/checkout/shipping.tpl +++ themes/advanced/in-commerce/checkout/shipping.tpl @@ -2,6 +2,7 @@ Shipping step Shipping step where user enters his shipping inforamtion
Platform||Checkout
+false ##--> @@ -69,4 +70,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/designs/section.tpl =================================================================== --- themes/advanced/in-commerce/designs/section.tpl +++ themes/advanced/in-commerce/designs/section.tpl @@ -3,6 +3,7 @@ Products - Section Template Products
Platform||Products
+false ##--> @@ -114,4 +115,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/elements/html_head.elm.tpl =================================================================== --- themes/advanced/in-commerce/elements/html_head.elm.tpl +++ themes/advanced/in-commerce/elements/html_head.elm.tpl @@ -1,6 +1,6 @@ - + - + Index: themes/advanced/in-commerce/my_account/affiliate/affiliate.tpl =================================================================== --- themes/advanced/in-commerce/my_account/affiliate/affiliate.tpl +++ themes/advanced/in-commerce/my_account/affiliate/affiliate.tpl @@ -2,6 +2,7 @@ Affiliate Affiliate page
My Account||Store||Affiliates
+false ##--> Index: themes/advanced/in-commerce/my_account/affiliate/affiliate_materials.tpl =================================================================== --- themes/advanced/in-commerce/my_account/affiliate/affiliate_materials.tpl +++ themes/advanced/in-commerce/my_account/affiliate/affiliate_materials.tpl @@ -2,6 +2,7 @@ Affiliate - Materials Affiliate Materials page
My Account||Store||Affiliates
+false ##--> @@ -83,4 +84,4 @@
- \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/affiliate/affiliate_payment_type.tpl =================================================================== --- themes/advanced/in-commerce/my_account/affiliate/affiliate_payment_type.tpl +++ themes/advanced/in-commerce/my_account/affiliate/affiliate_payment_type.tpl @@ -2,6 +2,7 @@ Affiliate - Payment Type Affiliate Payment Type page
My Account||Store||Affiliates
+false ##--> @@ -82,4 +83,4 @@
- \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/affiliate/affiliate_payments.tpl =================================================================== --- themes/advanced/in-commerce/my_account/affiliate/affiliate_payments.tpl +++ themes/advanced/in-commerce/my_account/affiliate/affiliate_payments.tpl @@ -2,6 +2,7 @@ Affiliate - Payments Affiliate Payments List page
My Account||Store||Affiliates
+false ##--> Index: themes/advanced/in-commerce/my_account/affiliate/affiliate_statistics.tpl =================================================================== --- themes/advanced/in-commerce/my_account/affiliate/affiliate_statistics.tpl +++ themes/advanced/in-commerce/my_account/affiliate/affiliate_statistics.tpl @@ -2,6 +2,7 @@ Affiliate - Statistics Affiliate Statistics page
My Account||Store||Affiliates
+false ##--> @@ -62,4 +63,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/affiliate/affiliate_statistics_orders_list.tpl =================================================================== --- themes/advanced/in-commerce/my_account/affiliate/affiliate_statistics_orders_list.tpl +++ themes/advanced/in-commerce/my_account/affiliate/affiliate_statistics_orders_list.tpl @@ -2,6 +2,7 @@ Affiliate - Orders List Affiliate Orders List page
My Account||Store||Affiliates
+false ##--> @@ -76,4 +77,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/affiliate/affiliate_statistics_visits_list.tpl =================================================================== --- themes/advanced/in-commerce/my_account/affiliate/affiliate_statistics_visits_list.tpl +++ themes/advanced/in-commerce/my_account/affiliate/affiliate_statistics_visits_list.tpl @@ -2,6 +2,7 @@ Affiliate - Visits List Affiliate Visits List page
My Account||Store||Affiliates
+false ##--> Index: themes/advanced/in-commerce/my_account/cancel_recurring.tpl =================================================================== --- themes/advanced/in-commerce/my_account/cancel_recurring.tpl +++ themes/advanced/in-commerce/my_account/cancel_recurring.tpl @@ -2,6 +2,7 @@ Cancel Reoccurring Order Cancel Reoccurring Order page
My Account||Store
+false ##--> @@ -75,4 +76,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/cancel_recurring_ok.tpl =================================================================== --- themes/advanced/in-commerce/my_account/cancel_recurring_ok.tpl +++ themes/advanced/in-commerce/my_account/cancel_recurring_ok.tpl @@ -2,6 +2,7 @@ Cancel Reoccurring Order - Confirmation Cancel Reoccurring Order Confirmation page
My Account||Store
+false ##--> @@ -69,4 +70,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/edit_address.tpl =================================================================== --- themes/advanced/in-commerce/my_account/edit_address.tpl +++ themes/advanced/in-commerce/my_account/edit_address.tpl @@ -2,6 +2,7 @@ Edit Address Edit Address page
My Account||Store
+false ##--> @@ -91,4 +92,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/my_addresses.tpl =================================================================== --- themes/advanced/in-commerce/my_account/my_addresses.tpl +++ themes/advanced/in-commerce/my_account/my_addresses.tpl @@ -2,6 +2,7 @@ User Addresses List of User Addresses
My Account||Store
+false ##--> @@ -85,4 +86,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/my_downloads.tpl =================================================================== --- themes/advanced/in-commerce/my_account/my_downloads.tpl +++ themes/advanced/in-commerce/my_account/my_downloads.tpl @@ -2,6 +2,7 @@ User Downloads List of User Downloads
My Account||Store
+false ##--> @@ -70,4 +71,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/my_downloads_more.tpl =================================================================== --- themes/advanced/in-commerce/my_account/my_downloads_more.tpl +++ themes/advanced/in-commerce/my_account/my_downloads_more.tpl @@ -2,6 +2,7 @@ User Downloads - Complete List Complete List of User Downloads
My Account||Store
+false ##--> @@ -94,4 +95,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/my_order_details.tpl =================================================================== --- themes/advanced/in-commerce/my_account/my_order_details.tpl +++ themes/advanced/in-commerce/my_account/my_order_details.tpl @@ -2,6 +2,7 @@ User Orders - Details User Order Details
My Account||Store
+false ##--> Index: themes/advanced/in-commerce/my_account/my_orders.tpl =================================================================== --- themes/advanced/in-commerce/my_account/my_orders.tpl +++ themes/advanced/in-commerce/my_account/my_orders.tpl @@ -2,6 +2,7 @@ User Orders List of User Orders
My Account||Store
+false ##--> @@ -77,4 +78,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/my_account/new_address.tpl =================================================================== --- themes/advanced/in-commerce/my_account/new_address.tpl +++ themes/advanced/in-commerce/my_account/new_address.tpl @@ -2,6 +2,7 @@ Add New Address Add New Address Form
My Account||Store
+false ##--> @@ -90,4 +91,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/products/add_review.tpl =================================================================== --- themes/advanced/in-commerce/products/add_review.tpl +++ themes/advanced/in-commerce/products/add_review.tpl @@ -2,6 +2,7 @@ Product - Add Review Add Product Review Form
Platform||Products
+false ##--> @@ -152,4 +153,4 @@ - \ No newline at end of file + Index: themes/advanced/in-commerce/products/product_detail.tpl =================================================================== --- themes/advanced/in-commerce/products/product_detail.tpl +++ themes/advanced/in-commerce/products/product_detail.tpl @@ -3,6 +3,7 @@ Products - Details Design General design template for Product Details section
Platform||Products
+false ##--> @@ -305,4 +306,4 @@ - \ No newline at end of file + Index: themes/advanced/in-link/designs/section.tpl =================================================================== --- themes/advanced/in-link/designs/section.tpl +++ themes/advanced/in-link/designs/section.tpl @@ -3,6 +3,7 @@ Links - Section Template Links
Platform||Links
+false ##--> @@ -101,4 +102,4 @@ - \ No newline at end of file + Index: themes/advanced/in-link/links/add_review.tpl =================================================================== --- themes/advanced/in-link/links/add_review.tpl +++ themes/advanced/in-link/links/add_review.tpl @@ -2,6 +2,7 @@ Link - Add Review Add Link Review Form
Platform||Links
+false ##--> @@ -149,4 +150,4 @@
- \ No newline at end of file + Index: themes/advanced/in-link/links/enhancements/cancel_enhancement_confirm.tpl =================================================================== --- themes/advanced/in-link/links/enhancements/cancel_enhancement_confirm.tpl +++ themes/advanced/in-link/links/enhancements/cancel_enhancement_confirm.tpl @@ -2,6 +2,7 @@ Cancel Link Enhancement - Confirmation Cancel Link Enhancement Confirmation page
Platform||Links||Enhancements
+false ##--> @@ -84,4 +85,4 @@ - \ No newline at end of file + Index: themes/advanced/in-link/links/enhancements/enhance_link.tpl =================================================================== --- themes/advanced/in-link/links/enhancements/enhance_link.tpl +++ themes/advanced/in-link/links/enhancements/enhance_link.tpl @@ -2,6 +2,7 @@ Link Enhancement Link Enhancement Form
Platform||Links||Enhancements
+false ##--> @@ -99,4 +100,4 @@ - \ No newline at end of file + Index: themes/advanced/in-link/links/enhancements/extend_enhancement.tpl =================================================================== --- themes/advanced/in-link/links/enhancements/extend_enhancement.tpl +++ themes/advanced/in-link/links/enhancements/extend_enhancement.tpl @@ -2,6 +2,7 @@ Link Enhancement Extension Link Enhancement Extension page
Platform||Links||Enhancements
+false ##--> @@ -91,4 +92,4 @@ - \ No newline at end of file + Index: themes/advanced/in-link/links/enhancements/extend_enhancement_confirm.tpl =================================================================== --- themes/advanced/in-link/links/enhancements/extend_enhancement_confirm.tpl +++ themes/advanced/in-link/links/enhancements/extend_enhancement_confirm.tpl @@ -2,6 +2,7 @@ Link Enhancement Extension - Confirmation Link Enhancement Extension Confirmation page
Platform||Links||Enhancements
+false ##--> @@ -89,4 +90,4 @@ - \ No newline at end of file + Index: themes/advanced/in-link/links/link_paid.tpl =================================================================== --- themes/advanced/in-link/links/link_paid.tpl +++ themes/advanced/in-link/links/link_paid.tpl @@ -3,6 +3,7 @@ Links - Details Design (paid) General design template for Paid Link Details section
Platform||Links
+false ##--> @@ -488,4 +489,4 @@ - \ No newline at end of file + Index: themes/advanced/in-link/links/link_standard.tpl =================================================================== --- themes/advanced/in-link/links/link_standard.tpl +++ themes/advanced/in-link/links/link_standard.tpl @@ -3,6 +3,7 @@ Links - Detail Design (standard) General design template for Standard Link Details section
Platform||Links
+false ##--> @@ -488,4 +489,4 @@ - \ No newline at end of file + Index: themes/advanced/in-link/my_account/my_links.tpl =================================================================== --- themes/advanced/in-link/my_account/my_links.tpl +++ themes/advanced/in-link/my_account/my_links.tpl @@ -2,6 +2,7 @@ User's Links List of User's Articles
My Account
+false ##--> @@ -59,4 +60,4 @@
- \ No newline at end of file + Index: themes/advanced/in-news/articles/add_review.tpl =================================================================== --- themes/advanced/in-news/articles/add_review.tpl +++ themes/advanced/in-news/articles/add_review.tpl @@ -2,6 +2,7 @@ Add Article Review Form for submitting Article Review
Platform||Articles
+false ##--> @@ -137,4 +138,4 @@
- \ No newline at end of file + Index: themes/advanced/in-news/articles/article_detail.tpl =================================================================== --- themes/advanced/in-news/articles/article_detail.tpl +++ themes/advanced/in-news/articles/article_detail.tpl @@ -3,6 +3,7 @@ Articles - Details Design General design template for Article Details section
Platform||Articles
+false ##--> @@ -189,4 +190,4 @@ - \ No newline at end of file + Index: themes/advanced/in-news/designs/section.tpl =================================================================== --- themes/advanced/in-news/designs/section.tpl +++ themes/advanced/in-news/designs/section.tpl @@ -3,6 +3,7 @@ Articles - Section Template Articles
Platform||Articles
+false ##--> @@ -122,4 +123,4 @@ - \ No newline at end of file + Index: themes/advanced/in-news/my_account/my_articles.tpl =================================================================== --- themes/advanced/in-news/my_account/my_articles.tpl +++ themes/advanced/in-news/my_account/my_articles.tpl @@ -2,6 +2,7 @@ User's Articles List of User's Articles
My Account
+false ##--> @@ -55,4 +56,4 @@
- \ No newline at end of file + Index: themes/advanced/platform/members_list.tpl =================================================================== --- themes/advanced/platform/members_list.tpl +++ themes/advanced/platform/members_list.tpl @@ -2,6 +2,7 @@ Members List
Platform
+false ##--> @@ -71,4 +72,4 @@
- \ No newline at end of file + Index: themes/advanced/platform/my_account/my_account.tpl =================================================================== --- themes/advanced/platform/my_account/my_account.tpl +++ themes/advanced/platform/my_account/my_account.tpl @@ -2,6 +2,7 @@ My Account User account page
My Account
+false ##--> @@ -76,4 +77,4 @@ - \ No newline at end of file + Index: themes/advanced/platform/my_account/my_favorites.tpl =================================================================== --- themes/advanced/platform/my_account/my_favorites.tpl +++ themes/advanced/platform/my_account/my_favorites.tpl @@ -2,6 +2,7 @@ My Favorites
My Account
+false ##--> @@ -44,4 +45,4 @@ - \ No newline at end of file + Index: themes/advanced/platform/my_account/my_preferences.tpl =================================================================== --- themes/advanced/platform/my_account/my_preferences.tpl +++ themes/advanced/platform/my_account/my_preferences.tpl @@ -2,6 +2,7 @@ My Preferences
My Account
+false ##--> @@ -120,4 +121,4 @@ - \ No newline at end of file + Index: themes/advanced/platform/my_account/my_profile.tpl =================================================================== --- themes/advanced/platform/my_account/my_profile.tpl +++ themes/advanced/platform/my_account/my_profile.tpl @@ -2,6 +2,7 @@ My Profile
My Account
+false ##--> @@ -104,4 +105,4 @@ - \ No newline at end of file + Index: themes/advanced/platform/my_account/public_profile.tpl =================================================================== --- themes/advanced/platform/my_account/public_profile.tpl +++ themes/advanced/platform/my_account/public_profile.tpl @@ -2,6 +2,7 @@ Profile
My Account
+false ##--> @@ -87,4 +88,4 @@ - \ No newline at end of file +