// Я.RSS
/***************************************************************************
* Author Konstantin Likhachev
* All rights reserved.
*
****************************************************************************/
// Настройки
// Проверять доступ для пауков
// Группа для пауков задается в настройках
$botAccess = true; // Если true - пауки = гости
// Версия
$version = ' revision 29.09.2008 (SMF 1.1.x)';
// Количество записей на 1-ой странице в RSS
$limit = 40;
/**
* Подгружаемые данные используются в parseBbc()
*
* Вообще то, вся это бодяга грузиться с помощью loadTheme, но т.к. нам тема
* сама по себе не нужна, я выдернул нужный код и вставил его сюда... :)
*/
function loadServerAndBrowser() {
global $context;
// This determines the server... not used in many places, except for login fixing.
$context['server'] = array(
'is_iis' => isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false,
'is_apache' => isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false,
'is_cgi' => isset($_SERVER['SERVER_SOFTWARE']) && strpos(php_sapi_name(), 'cgi') !== false,
'is_windows' => stristr(PHP_OS, 'WIN') !== false,
'iso_case_folding' => ord(strtolower(chr(138))) === 154,
'complex_preg_chars' => @version_compare(PHP_VERSION, '4.3.3') != -1,
);
// A bug in some versions of IIS under CGI (older ones) makes cookie setting not work with Location: headers.
$context['server']['needs_login_fix'] = $context['server']['is_cgi'];
// The following determines the user agent (browser) as best it can.
$context['browser'] = array(
'is_opera' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false,
'is_opera6' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 6') !== false,
'is_opera7' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 7') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera/7') !== false,
'is_opera8' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 8') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera/8') !== false,
'is_opera9' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 9') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera/9') !== false,
'is_ie4' => strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 4') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'WebTV') === false,
'is_safari' => strpos($_SERVER['HTTP_USER_AGENT'], 'Safari') !== false,
'is_mac_ie' => strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false,
'is_web_tv' => strpos($_SERVER['HTTP_USER_AGENT'], 'WebTV') !== false,
'is_konqueror' => strpos($_SERVER['HTTP_USER_AGENT'], 'Konqueror') !== false,
'is_firefox' => strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false,
'is_firefox1' => strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox/1.') !== false,
'is_firefox2' => strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox/2.') !== false,
'is_iphone' => strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') !== false,
);
$context['browser']['is_gecko'] = strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') !== false && !$context['browser']['is_safari'] && !$context['browser']['is_konqueror'];
// Internet Explorer 5 and 6 are often "emulated".
$context['browser']['is_ie7'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv'];
$context['browser']['is_ie6'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv'];
$context['browser']['is_ie5.5'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.5') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv'];
$context['browser']['is_ie5'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.0') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv'];
$context['browser']['is_ie'] = $context['browser']['is_ie4'] || $context['browser']['is_ie5'] || $context['browser']['is_ie5.5'] || $context['browser']['is_ie6'] || $context['browser']['is_ie7'];
$context['browser']['needs_size_fix'] = ($context['browser']['is_ie5'] || $context['browser']['is_ie5.5'] || $context['browser']['is_ie4'] || $context['browser']['is_opera6']) && strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') === false;
// This isn't meant to be reliable, it's just meant to catch most bots to prevent PHPSESSID from showing up.
$context['browser']['possibly_robot'] = !empty($user_info['possibly_robot']);
}
define('SMF', 'YARSS');
// We're going to want a few globals... these are all set later.
global $context, $modSettings;
// Get the forum's settings for database and file paths.
require_once(dirname(__FILE__) . '/Settings.php');
$ssi_error_reporting = error_reporting(E_ALL);
// Don't do john didley if the forum's been shut down competely.
if ($maintenance == 2 && (!isset($ssi_maintenance_off) || $ssi_maintenance_off !== true))
die($mmessage);
// Fix for using the current directory as a path.
if (substr($sourcedir, 0, 1) == '.' && substr($sourcedir, 1, 1) != '.')
$sourcedir = dirname(__FILE__) . substr($sourcedir, 1);
// Load the important includes.
require_once($sourcedir . '/QueryString.php');
require_once($sourcedir . '/Subs.php');
require_once($sourcedir . '/Errors.php');
require_once($sourcedir . '/Load.php');
require_once($sourcedir . '/Security.php');
if (@version_compare(PHP_VERSION, '4.2.3') != 1)
require_once($sourcedir . '/Subs-Compat.php');
// Connect to the MySQL database.
if (empty($db_persist))
$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
else
$db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd);
if ($db_connection === false)
return false;
// Add the database onto the prefix to avoid conflicts with other scripts.
/*if (strpos($db_prefix, '.') === false)
$db_prefix = is_numeric(substr($db_prefix, 0, 1)) ? $db_name . '.' . $db_prefix : '`' . $db_name . '`.' . $db_prefix;
else*/
@mysql_select_db($db_name, $db_connection);
// Load installed 'Mods' settings.
reloadSettings();
// Clean the request variables.
cleanRequest();
// Seed the random generator?
#if (empty($modSettings['rand_seed']) || mt_rand(1, 250) == 69)
# smf_seed_generator();
// Check on any hacking attempts.
if (isset($_REQUEST['GLOBALS']) || isset($_COOKIE['GLOBALS']))
die('Hacking attempt...');
elseif (isset($_REQUEST['ssi_theme']) && (int) $_REQUEST['ssi_theme'] == (int) $ssi_theme)
die('Hacking attempt...');
elseif (isset($_COOKIE['ssi_theme']) && (int) $_COOKIE['ssi_theme'] == (int) $ssi_theme)
die('Hacking attempt...');
elseif (isset($_REQUEST['ssi_layers']))
{
if ((@get_magic_quotes_gpc() ? addslashes($_REQUEST['ssi_layers']) : $_REQUEST['ssi_layers']) == htmlspecialchars($ssi_layers))
die('Hacking attempt...');
}
if (isset($_REQUEST['context']))
die('Hacking attempt...');
// Make sure wireless is always off.
define('WIRELESS', false);
// Primarily, this is to fix the URLs...
ob_start('ob_sessrewrite');
$mode = @$_GET['mode'];
if ($mode == 'comments') {
header ("Status: 404 Not Found");
die;
}
$forum = (int)@$_GET['forum'];
$topic = (int)@$_GET['topic'];
$post = (int)@$_GET['post'];
$characterSet = 'UTF-8';
// список всех RSS в opml (yarss.php?mode=opml)
if ($mode == 'opml') {
header('Content-Type: text/xml; charset=' . $characterSet);
$request = db_query('
SELECT ID_BOARD, name
FROM ' . $db_prefix . 'boards
' . ($botAccess ? 'WHERE (FIND_IN_SET(-1, memberGroups))' : '') . '
ORDER BY boardOrder',
__FILE__, __LINE__
);
echo '
' . $row['name'] . ' ' . $row['numTopics'] . '/' . $row['numPosts']; echo '
'; } if ($botAccess) { echo 'Внимание: В RSS выдаются только те форумы, в которых разрешено индексирование ("Характеристики и настройки" -> "Поисковые системы" -> "Настройки", "Назначить группу для пауков").
'; } echo 'Теперь вы можете добавить желаемые потоки в Яндекс.Поиск по блогам.
'; echo ''; } else { // Проверяем, можно ли выдавать RSS из этого форума $request = db_query(' SELECT name, memberGroups FROM ' . $db_prefix . 'boards WHERE ID_BOARD = ' . $forum . ' ORDER BY boardOrder', __FILE__, __LINE__ ); $row = mysql_fetch_assoc($request); if (empty($row['name'])) { header('HTTP/1.0 404 Not Found'); echo 'Этот форум не существует.'; } else { if ($botAccess) { $arMemberGroups = explode(',', $row['memberGroups']); if (!in_array('-1', $arMemberGroups)) { header('HTTP/1.0 404 Not Found'); echo 'Этот форум не выдается в виде RSS.'; exit; } unset($arMemberGroups); } // шапка RSS $xml = '' . "\n" . '