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
index fd68905d4..997fb1c42 100644
--- a/readme.txt
+++ b/readme.txt
@@ -6,7 +6,8 @@
Заходим в phpmyadmin, открываем или создаем новую базу, потом импортируем дамп (install/sql/mysql.sql)
Правим файл конфигурации config.php (изменяем данные входа в БД, остальное по усмотрению)
-* Файлы favicon.ico (меняем на свою иконку, если есть), robots.txt(допуск или запрет ботам поисковиков к серверу, блокирует не все, меняем адреса в строках Host: и Sitemap: на свои адреса)
+* favicon.ico (меняем на свою иконку, если есть)
+* robots.txt (меняем адреса в строках Host: и Sitemap: на свои)
************************************
** Права доступа на папки и файлы **
@@ -24,6 +25,7 @@
- images/ranks
- images/smiles
- log
+- sitemap
- triggers
************************************
diff --git a/upload/admin/admin_sitemap.php b/upload/admin/admin_sitemap.php
new file mode 100644
index 000000000..61cb44790
--- /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 = 'Файл индекса создан '.bb_date($new['sitemap_time'], $bb_cfg['post_date_format']).' доступен по адресу: '.make_url('/sitemap/sitemap.xml').'';
+$message = (@file_exists(BB_ROOT. "/sitemap/sitemap.xml")) ? $s_mess : 'Файл индекса не создан';
+
+$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 58539d0c8..2979402fa 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..1a6c3a0d6
--- /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 .= 'Файл индекса создан '.bb_date(TIMENOW, $bb_cfg['post_date_format']).' доступен по адресу: '.make_url('/sitemap/sitemap.xml').'';
+ } else {
+ $html .= 'Файл индекса не создан';
+ }
+ 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 .= '
Уведомление поисковой системы Google: отправка завершена';
+ } else {
+ $html .= '
Уведомление поисковой системы Google: ошибка отправки 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 .= '
Уведомление поисковой системы Yandex: отправка завершена';
+ } else {
+ $html .= '
Уведомление поисковой системы Yandex: ошибка отправки 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 .= '
Уведомление поисковой системы Bing: отправка завершена';
+ } else {
+ $html .= '
Уведомление поисковой системы Bing: ошибка отправки';
+ }
+
+ if (strpos ($map->send_url("http://rpc.weblogs.com/pingSiteForm?name=InfraBlog&url=", $map_link), "Thanks for the ping") !== false) {
+ $html .= '
Уведомление поисковой системы Weblogs: отправка завершена';
+ } else {
+ $html .= '
Уведомление поисковой системы Weblogs: ошибка отправки 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 .= '
Уведомление поисковой системы Yahoo: отправка завершена';
+ } else {
+ $html .= '
Уведомление поисковой системы Yahoo: ошибка отправки URL: http://rpc.weblogs.com/pingSiteForm?name=InfraBlog&url='.$map_link.'';
+ }
+ break;
+}
+
+$this->response['html'] = $html;
+$this->response['mode'] = $mode;
\ No newline at end of file
diff --git a/upload/includes/class.sitemap.php b/upload/includes/class.sitemap.php
new file mode 100644
index 000000000..94616872d
--- /dev/null
+++ b/upload/includes/class.sitemap.php
@@ -0,0 +1,229 @@
+home = 'http://'.$bb_cfg['server_name'].'/';
+ }
+
+ function build_map () {
+ $map = "\n