diff --git a/install/sql/mysql.sql b/install/sql/mysql.sql
index fe0a74fb6..66c0e5ab7 100644
--- a/install/sql/mysql.sql
+++ b/install/sql/mysql.sql
@@ -557,8 +557,10 @@ INSERT INTO `bb_config` VALUES ('seed_bonus_points', '');
INSERT INTO `bb_config` VALUES ('seed_bonus_tor_size', '0');
INSERT INTO `bb_config` VALUES ('seed_bonus_user_regdate', '0');
INSERT INTO `bb_config` VALUES ('site_desc', 'A little text to describe your forum');
+INSERT INTO `bb_config` VALUES ('sitemap_time', '');
INSERT INTO `bb_config` VALUES ('sitename', 'TorrentPier II - Torrent Tracker');
INSERT INTO `bb_config` VALUES ('smilies_path', 'images/smiles');
+INSERT INTO `bb_config` VALUES ('static_sitemap', '');
INSERT INTO `bb_config` VALUES ('topics_per_page', '50');
INSERT INTO `bb_config` VALUES ('xs_use_cache', '1');
INSERT INTO `bb_config` VALUES ('active_ads', '');
@@ -642,6 +644,7 @@ INSERT INTO `bb_cron` VALUES (18, 1, 'Seeder last seen', 'tr_update_seeder_last_
INSERT INTO `bb_cron` VALUES (19, 1, 'Captcha', 'captcha_gen_gc.php', 'daily', NULL, '05:00:00', 120, '', '', NULL, 0, '', 0, 0, 0);
INSERT INTO `bb_cron` VALUES (20, 1, 'Tracker dl-complete count', 'tr_complete_count.php', 'interval', NULL, NULL, 255, '', '', '06:00:00', 0, '', 0, 0, 0);
INSERT INTO `bb_cron` VALUES (21, 1, 'Cache garbage collector', 'cache_gc.php', 'interval', NULL, NULL, 255, '', '', '00:05:00', 0, '', 0, 0, 0);
+INSERT INTO `bb_cron` VALUES (22, 1, 'Sitemap update', 'sitemap.php', 'daily', NULL, '06:00:00', 30, '', '', NULL, 0, '', 0, 0, 0);
-- --------------------------------------------------------
diff --git a/readme.txt b/readme.txt
new file mode 100644
index 000000000..568d8cf97
--- /dev/null
+++ b/readme.txt
@@ -0,0 +1,3 @@
+Для получения информации об установке движка, откройте в своем браузере указаную ссылку:
+
+https://github.com/torrentpier/tracker/tree/master#torrentpier-ii
\ No newline at end of file
diff --git a/upload/admin/admin_sitemap.php b/upload/admin/admin_sitemap.php
new file mode 100644
index 000000000..122178815
--- /dev/null
+++ b/upload/admin/admin_sitemap.php
@@ -0,0 +1,52 @@
+sql_query($sql))
+{
+ bb_die('Could not query config information in admin_sitemap');
+}
+else
+{
+ $new_params = array();
+
+ while ($row = DB()->sql_fetchrow($result))
+ {
+ $config_name = $row['config_name'];
+ $config_value = $row['config_value'];
+ $default_config[$config_name] = $config_value;
+ $new[$config_name] = isset($_POST[$config_name]) ? $_POST[$config_name] : $default_config[$config_name];
+
+ if (isset($_POST['submit']) && $row['config_value'] != $new[$config_name])
+ {
+ $new_params[$config_name] = $new[$config_name];
+ }
+ }
+
+ if (isset($_POST['submit']))
+ {
+ if (!empty($new_params))
+ {
+ bb_update_config($new_params);
+ }
+ }
+}
+
+$s_mess = $lang['SITEMAP_CREATED'].': '.bb_date($new['sitemap_time'], $bb_cfg['post_date_format']).' '.$lang['SITEMAP_AVAILABLE'].': '.make_url('/sitemap/sitemap.xml').'';
+$message = (@file_exists(BB_ROOT. "/sitemap/sitemap.xml")) ? $s_mess : $lang['SITEMAP_NOT_CREATED'];
+
+$template->assign_vars(array(
+ 'STATIC_SITEMAP' => $new['static_sitemap'],
+ 'MESSAGE' => $message,
+));
+
+print_page('admin_sitemap.tpl', 'admin');
\ No newline at end of file
diff --git a/upload/ajax.php b/upload/ajax.php
index f6838fbe2..62c742b9f 100644
--- a/upload/ajax.php
+++ b/upload/ajax.php
@@ -55,6 +55,10 @@ switch ($ajax->action)
case 'group_membership':
require(INC_DIR . 'functions_group.php');
break;
+
+ case 'sitemap';
+ require(INC_DIR .'class.sitemap.php');
+ break;
}
// position in $ajax->valid_actions['xxx']
@@ -78,6 +82,7 @@ class ajax_common
'change_user_opt' => array('admin'),
'manage_user' => array('admin'),
'manage_admin' => array('admin'),
+ 'sitemap' => array('admin'),
'mod_action' => array('mod'),
'topic_tpl' => array('mod'),
@@ -406,4 +411,9 @@ class ajax_common
{
require(AJAX_DIR . 'chat.php');
}
+
+ function sitemap()
+ {
+ require(AJAX_DIR .'sitemap.php');
+ }
}
\ No newline at end of file
diff --git a/upload/ajax/sitemap.php b/upload/ajax/sitemap.php
new file mode 100644
index 000000000..b5aa40e2a
--- /dev/null
+++ b/upload/ajax/sitemap.php
@@ -0,0 +1,64 @@
+request['mode'];
+$map = new sitemap();
+$html = '';
+
+switch ($mode)
+{
+ case 'create':
+ $map->create();
+ if (@file_exists(BB_ROOT. "/sitemap/sitemap.xml"))
+ {
+ $html .= $lang['SITEMAP_CREATED'].': '.bb_date(TIMENOW, $bb_cfg['post_date_format']).' '.$lang['SITEMAP_AVAILABLE'].': '.make_url('/sitemap/sitemap.xml').'';
+ } else {
+ $html .= $lang['SITEMAP_NOT_CREATED'];
+ }
+ break;
+
+ case 'search_update':
+ if (!@file_exists(BB_ROOT. "/sitemap/sitemap.xml"))
+ {
+ $map->create();
+ }
+
+ $map_link = make_url('/sitemap/sitemap.xml');
+
+ if (strpos($map->send_url("http://google.com/webmasters/sitemaps/ping?sitemap=", $map_link), "successfully added") !== false) {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Google: '.$lang['SITEMAP_SENT'].'';
+ } else {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Google: '.$lang['SITEMAP_ERROR'].' URL: http://google.com/webmasters/sitemaps/ping?sitemap='.$map_link.'';
+ }
+
+ if (strpos($map->send_url("http://ping.blogs.yandex.ru/ping?sitemap=", $map_link), "OK") !== false) {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Yandex: '.$lang['SITEMAP_SENT'].'';
+ } else {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Yandex: '.$lang['SITEMAP_ERROR'].' URL: http://ping.blogs.yandex.ru/ping?sitemap='.$map_link.'';
+ }
+
+ if ($map->send_url("http://www.bing.com/webmaster/ping.aspx?siteMap=", $map_link)) {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Bing: '.$lang['SITEMAP_SENT'].'';
+ } else {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Bing: '.$lang['SITEMAP_ERROR'].' URL: http://www.bing.com/webmaster/ping.aspx?siteMap='.$map_link.'';
+ }
+
+ if (strpos($map->send_url("http://rpc.weblogs.com/pingSiteForm?name=InfraBlog&url=", $map_link), "Thanks for the ping") !== false) {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Weblogs: '.$lang['SITEMAP_SENT'].'';
+ } else {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Weblogs: '.$lang['SITEMAP_ERROR'].' URL: http://rpc.weblogs.com/pingSiteForm?name=InfraBlog&url='.$map_link.'';
+ }
+
+ if ($map->send_url("http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap=", $map_link)) {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Yahoo: '.$lang['SITEMAP_SENT'].'';
+ } else {
+ $html .= '
'.$lang['SITEMAP_NOTIFY_SEARCH'].' Yahoo: '.$lang['SITEMAP_ERROR'].' URL: http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap='.$map_link.'';
+ }
+ break;
+}
+
+$this->response['html'] = $html;
+$this->response['mode'] = $mode;
\ No newline at end of file
diff --git a/upload/config.php b/upload/config.php
index bcde5c7a4..f5de8f9bf 100644
--- a/upload/config.php
+++ b/upload/config.php
@@ -68,7 +68,7 @@ $domain_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $do
// Version info
$bb_cfg['tp_version'] = '2.0.9 (RC)';
-$bb_cfg['tp_release_date'] = '07-08-2014';
+$bb_cfg['tp_release_date'] = '04-08-2014';
$bb_cfg['tp_release_state'] = 'R593';
// Database
diff --git a/upload/includes/class.sitemap.php b/upload/includes/class.sitemap.php
new file mode 100644
index 000000000..75fd7a0e0
--- /dev/null
+++ b/upload/includes/class.sitemap.php
@@ -0,0 +1,229 @@
+home = 'http://'.$bb_cfg['server_name'].'/';
+ }
+
+ function build_map () {
+ $map = "\n\n";
+
+ $map .= $this->get_static();
+ $map .= $this->get_forum();
+ $map .= $this->get_topic();
+ $map .= "";
+
+ return $map;
+ }
+
+ function build_index ($count) {
+ $map = "\n\n";
+
+ $lastmod = date("Y-m-d");
+ $map .= "\n{$this->home}sitemap/sitemap1.xml\n{$lastmod}\n\n";
+
+ for ($i = 0; $i < $count; $i++) {
+ $t = $i + 2;
+ $map .= "\n{$this->home}sitemap/sitemap{$t}.xml\n{$lastmod}\n\n";
+ }
+
+ $map .= "";
+
+ return $map;
+ }
+
+ function build_stat () {
+ $map = "\n\n";
+
+ $map .= $this->get_static();
+ $map .= $this->get_forum();
+ $map .= "";
+
+ return $map;
+ }
+
+ function build_map_topic ($n) {
+ $map = "\n\n";
+
+ $map .= $this->get_topic($n);
+ $map .= "";
+
+ return $map;
+ }
+
+ function get_forum () {
+ global $datastore;
+
+ $this->priority = $this->cat_priority;
+ $xml = "";
+ $lastmod = date( "Y-m-d" );
+
+ if (!$forums = $datastore->get('cat_forums'))
+ {
+ $datastore->update('cat_forums');
+ $forums = $datastore->get('cat_forums');
+ }
+ $not_forums_id = $forums['not_auth_forums']['guest_view'];
+
+ $ignore_forum_sql = ($not_forums_id) ? "WHERE forum_id NOT IN($not_forums_id)" : '';
+
+ $sql = DB()->sql_query("SELECT forum_id, forum_topics, forum_parent, forum_name FROM ".BB_FORUMS." ".$ignore_forum_sql." ORDER BY forum_id ASC");
+
+ while ($row = DB()->sql_fetchrow($sql)) {
+ if (function_exists('seo_url')) $loc = $this->home . seo_url(FORUM_URL . $row['forum_id'], $row['forum_name']);
+ else $loc = $this->home . FORUM_URL. $row['forum_id'];
+ $xml .= $this->get_xml( $loc, $lastmod );
+ }
+
+ return $xml;
+ }
+
+ function get_topic ($page = false) {
+ global $datastore;
+
+ $xml = "";
+ $this->priority = $this->topic_priority;
+
+ if ($page) {
+ $page = $page - 1;
+ $page = $page * 40000;
+ $this->limit = " LIMIT {$page},40000";
+ } else {
+ if ($this->limit < 1) $this->limit = false;
+ if( $this->limit ) {
+ $this->limit = " LIMIT 0," . $this->limit;
+ } else {
+ $this->limit = "";
+ }
+ }
+
+ if (!$forums = $datastore->get('cat_forums')) {
+ $datastore->update('cat_forums');
+ $forums = $datastore->get('cat_forums');
+ }
+
+ $not_forums_id = $forums['not_auth_forums']['guest_view'];
+ $ignore_forum_sql = ($not_forums_id) ? "WHERE forum_id NOT IN($not_forums_id)" : '';
+
+ $sql = DB()->sql_query("SELECT topic_id, topic_title, topic_time FROM " . BB_TOPICS . " ".$ignore_forum_sql." ORDER BY topic_time DESC" . $this->limit);
+
+ while ($row = DB()->sql_fetchrow($sql)) {
+ if (function_exists('seo_url')) $loc = $this->home . seo_url(TOPIC_URL . $row['topic_id'], $row['topic_title']);
+ else $loc = $this->home . TOPIC_URL. $row['topic_id'];
+ $xml .= $this->get_xml($loc, date("Y-m-d", $row['topic_time']));
+ }
+
+ return $xml;
+ }
+
+ function get_static () {
+ global $bb_cfg;
+
+ $xml = "";
+ $lastmod = date("Y-m-d");
+ $this->priority = $this->stat_priority;
+
+ if (isset($bb_cfg['static_sitemap'])) {
+ $static_url = preg_replace("/\s/", '', $bb_cfg['static_sitemap']); //вырезаем переносы строк
+ preg_match_all ('#(https?://[\w-]+[\.\w-]+/((?!https?://)[\w- ./?%&=])+)#', $static_url, $out);
+
+ $static_url = count($out['0']);
+ if ($static_url > 0)
+ {
+ foreach($out['0'] as $url)
+ {
+ $loc = $url;
+ $xml .= $this->get_xml($loc, $lastmod);
+ }
+ }
+ }
+
+ return $xml;
+ }
+
+ function get_xml ($loc, $lastmod) {
+ $xml = "\t\n";
+
+ $xml .= "\t\t$loc\n";
+ $xml .= "\t\t$lastmod\n";
+ $xml .= "\t\t" . $this->priority . "\n";
+ $xml .= "\t\n";
+
+ return $xml;
+ }
+
+ function send_url ($url, $map) {
+ $data = false;
+ $file = $url.urlencode($map);
+
+ if (function_exists('curl_init')) {
+ $ch = curl_init();
+
+ curl_setopt($ch, CURLOPT_URL, $file);
+ curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 6);
+
+ $data = curl_exec($ch);
+ curl_close($ch);
+
+ return $data;
+ } else {
+ return @file_get_contents($file);
+ }
+ }
+
+ function create () {
+ $row = DB()->fetch_row("SELECT COUNT(*) AS count FROM ". BB_TOPICS);
+
+ if (!$this->limit) $this->limit = $row['count'];
+ if ($this->limit > 40000) {
+ $pages_count = @ceil($row['count'] / 40000);
+
+ $sitemap = $this->build_index($pages_count);
+
+ $handler = fopen(BB_ROOT. "/sitemap/sitemap.xml", "wb+");
+ fwrite($handler, $sitemap);
+ fclose($handler);
+ @chmod(BB_ROOT. "/sitemap/sitemap.xml", 0666);
+
+ $sitemap = $this->build_stat();
+
+ $handler = fopen(BB_ROOT. "/sitemap/sitemap1.xml", "wb+");
+ fwrite($handler, $sitemap);
+ fclose($handler);
+ @chmod(BB_ROOT. "/sitemap/sitemap.xml", 0666);
+
+ for ($i = 0; $i < $pages_count; $i++) {
+ $t = $i + 2;
+ $n = $i + 1;
+
+ $sitemap = $this->build_map_topic($n);
+ $handler = fopen(BB_ROOT. "/sitemap/sitemap{$t}.xml", "wb+");
+ fwrite($handler, $sitemap);
+ fclose($handler);
+ @chmod(BB_ROOT. "/sitemap/sitemap{$t}.xml", 0666);
+ }
+ } else {
+ $sitemap = $this->build_map();
+
+ $handler = fopen(BB_ROOT. "/sitemap/sitemap.xml", "wb+");
+ fwrite($handler, $sitemap);
+ fclose($handler);
+ @chmod(BB_ROOT. "/sitemap/sitemap.xml", 0666);
+ }
+
+ $params['sitemap_time'] = TIMENOW;
+ bb_update_config($params);
+ }
+}
\ No newline at end of file
diff --git a/upload/includes/cron/jobs/sitemap.php b/upload/includes/cron/jobs/sitemap.php
new file mode 100644
index 000000000..5d9e55ae3
--- /dev/null
+++ b/upload/includes/cron/jobs/sitemap.php
@@ -0,0 +1,19 @@
+create();
+
+if (@file_exists(BB_ROOT. "/sitemap/sitemap.xml"))
+{
+ $map_link = make_url('/sitemap/sitemap.xml');
+
+ $map->send_url("http://google.com/webmasters/sitemaps/ping?sitemap=", $map_link);
+ $map->send_url("http://ping.blogs.yandex.ru/ping?sitemap=", $map_link);
+ $map->send_url("http://www.bing.com/webmaster/ping.aspx?siteMap=", $map_link);
+ $map->send_url("http://rpc.weblogs.com/pingSiteForm?name=InfraBlog&url=", $map_link);
+ $map->send_url("http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap=", $map_link);
+}
\ No newline at end of file
diff --git a/upload/language/en/main.php b/upload/language/en/main.php
index 65aff8699..d8d78449a 100644
--- a/upload/language/en/main.php
+++ b/upload/language/en/main.php
@@ -2972,4 +2972,25 @@ $lang['MC_COMMENT'] = array(
'title' => 'Violation from %s',
'type' => 'Violation',
),
-);
\ No newline at end of file
+);
+
+$lang['SITEMAP'] = 'Sitemap';
+$lang['SITEMAP_ADMIN'] = 'Manage sitemap';
+$lang['SITEMAP_CREATED'] = 'Sitemap created';
+$lang['SITEMAP_AVAILABLE'] = 'and is available at';
+$lang['SITEMAP_NOT_CREATED'] = 'Sitemap is not yet created';
+$lang['SITEMAP_NOTIFY_SEARCH'] = 'Notification of the search engine';
+$lang['SITEMAP_SENT'] = 'send completed';
+$lang['SITEMAP_ERROR'] = 'sending error';
+$lang['SITEMAP_OPTIONS'] = 'Options';
+$lang['SITEMAP_CREATE'] = 'Create / update the sitemap';
+$lang['SITEMAP_NOTIFY'] = 'Notify search engines about new version of sitemap';
+$lang['SITEMAP_WHAT_NEXT'] = 'What to do next?';
+$lang['SITEMAP_GOOGLE_1'] = 'Register your site at Google Webmaster using your Google account.';
+$lang['SITEMAP_GOOGLE_2'] = 'Add sitemap of site you registered.';
+$lang['SITEMAP_YANDEX_1'] = 'Register your site at Yandex Webmaster using your Yandex account.';
+$lang['SITEMAP_YANDEX_2'] = 'Add sitemap of site you registered.';
+$lang['SITEMAP_ADD_TITLE'] = 'Additional pages for sitemap';
+$lang['SITEMAP_ADD_PAGE'] = 'Additional pages';
+$lang['SITEMAP_ADD_EXP_1'] = 'You can specify additional pages on your site (for example, http://torrentpier.me/memberlist.php) which should be included in your sitemap file that you creating.';
+$lang['SITEMAP_ADD_EXP_2'] = 'Each reference must begin with http(s):// and a new line!';
diff --git a/upload/language/ru/main.php b/upload/language/ru/main.php
index 544f96749..cc533a26a 100644
--- a/upload/language/ru/main.php
+++ b/upload/language/ru/main.php
@@ -2972,4 +2972,25 @@ $lang['MC_COMMENT'] = array(
'title' => 'Нарушение от %s',
'type' => 'Нарушение',
),
-);
\ No newline at end of file
+);
+
+$lang['SITEMAP'] = 'Карта сайта (sitemap)';
+$lang['SITEMAP_ADMIN'] = 'Управление картой сайта (sitemap)';
+$lang['SITEMAP_CREATED'] = 'Файл sitemap создан';
+$lang['SITEMAP_AVAILABLE'] = 'и доступен по адресу';
+$lang['SITEMAP_NOT_CREATED'] = 'Файл sitemap еще не создан';
+$lang['SITEMAP_NOTIFY_SEARCH'] = 'Уведомление поисковой системы';
+$lang['SITEMAP_SENT'] = 'отправка завершена';
+$lang['SITEMAP_ERROR'] = 'ошибка отправки';
+$lang['SITEMAP_OPTIONS'] = 'Опции';
+$lang['SITEMAP_CREATE'] = 'Создать / обновить файл sitemap';
+$lang['SITEMAP_NOTIFY'] = 'Уведомить поисковые системы о наличии новой версии файла sitemap';
+$lang['SITEMAP_WHAT_NEXT'] = 'Что сделать дальше?';
+$lang['SITEMAP_GOOGLE_1'] = 'Зарегистрируйте ваш сайт в Google Webmaster с использованием вашей учетной записи Google.';
+$lang['SITEMAP_GOOGLE_2'] = 'Добавьте файл sitemap зарегистрированного вами сайта.';
+$lang['SITEMAP_YANDEX_1'] = 'Зарегистрируйте ваш сайт в Yandex Webmaster с использованием вашей учетной записи Yandex.';
+$lang['SITEMAP_YANDEX_2'] = 'Добавьте файл sitemap зарегистрированного вами сайта.';
+$lang['SITEMAP_ADD_TITLE'] = 'Дополнительные страницы для sitemap';
+$lang['SITEMAP_ADD_PAGE'] = 'Дополнительные страницы';
+$lang['SITEMAP_ADD_EXP_1'] = 'Здесь вы можете указать дополнительные страницы сайта (например http://torrentpier.me/memberlist.php), которые должны быть включены в создаваемый файл вами файл sitemap.';
+$lang['SITEMAP_ADD_EXP_2'] = 'Каждая ссылка должна начинаться с http(s):// и новой строки!';
diff --git a/upload/language/ua/main.php b/upload/language/ua/main.php
index 98635f753..2ca50eaef 100644
--- a/upload/language/ua/main.php
+++ b/upload/language/ua/main.php
@@ -2972,4 +2972,25 @@ $lang['MC_COMMENT'] = array(
'title' => 'Порушення від %s',
'type' => 'Порушення',
),
-);
\ No newline at end of file
+);
+
+$lang['SITEMAP'] = 'Карта сайту (sitemap)';
+$lang['SITEMAP_ADMIN'] = 'Управління картою сайту (sitemap)';
+$lang['SITEMAP_CREATED'] = 'Файл sitemap створений';
+$lang['SITEMAP_AVAILABLE'] = 'і доступний за адресою';
+$lang['SITEMAP_NOT_CREATED'] = 'Файл sitemap ще не створено';
+$lang['SITEMAP_NOTIFY_SEARCH'] = 'Повідомлення пошукової системи';
+$lang['SITEMAP_SENT'] = 'відправка завершена';
+$lang['SITEMAP_ERROR'] = 'помилка відсилання';
+$lang['SITEMAP_OPTIONS'] = 'Опції';
+$lang['SITEMAP_CREATE'] = 'Створити / оновити файл sitemap';
+$lang['SITEMAP_NOTIFY'] = 'Повідомити пошукові системи про наявність нової версії файлу sitemap';
+$lang['SITEMAP_WHAT_NEXT'] = 'Що зробити далі?';
+$lang['SITEMAP_GOOGLE_1'] = 'Зареєструйте ваш сайт в Google Webmaster з використанням вашого облікового запису Google.';
+$lang['SITEMAP_GOOGLE_2'] = 'Додайте файл sitemap зареєстрованого вами сайту.';
+$lang['SITEMAP_YANDEX_1'] = 'Зареєструйте ваш сайт в Yandex Webmaster з використанням вашого облікового запису Yandex.';
+$lang['SITEMAP_YANDEX_2'] = 'Додайте файл sitemap зареєстрованого вами сайту.';
+$lang['SITEMAP_ADD_TITLE'] = 'Додаткові сторінки для sitemap';
+$lang['SITEMAP_ADD_PAGE'] = 'Додаткові сторінки';
+$lang['SITEMAP_ADD_EXP_1'] = 'Тут ви можете вказати додаткові сторінки сайту (наприклад http://torrentpier.me/memberlist.php), які повинні бути включені в створюваний файл вами файл sitemap.';
+$lang['SITEMAP_ADD_EXP_2'] = 'Кожне посилання має починатись з http(s):// і нової рядки!';
diff --git a/upload/sitemap/.keep b/upload/sitemap/.keep
new file mode 100644
index 000000000..e69de29bb
diff --git a/upload/templates/admin/admin_sitemap.tpl b/upload/templates/admin/admin_sitemap.tpl
new file mode 100644
index 000000000..675f64548
--- /dev/null
+++ b/upload/templates/admin/admin_sitemap.tpl
@@ -0,0 +1,122 @@
+
+
+
+
+
{L_SITEMAP_ADMIN}
+
+
\ No newline at end of file