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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+false
##-->
@@ -87,4 +88,4 @@
-
\ No newline at end of file
+