Просмотр файла weblog_rss.php

Размер файла: 12.04Kb
<?php
/***************************************************************************
 *                              weblog_rss.php
 *                           --------------------
 *   begin                : Monday, September 5, 2004
 *   copyright            : (C) 2005 Hyperion
 *   
 *   $Id: weblog_rss.php,v 1.0.0 2004/09/05, 13:17:43 Hyperion Exp $
 *
 ***************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);
include($phpbb_root_path . 'includes/weblogs_common.'.$phpEx);
include($phpbb_root_path . 'includes/functions_weblog.'.$phpEx);

if( isset($HTTP_GET_VARS[POST_WEBLOG_URL]) || isset($HTTP_POST_VARS[POST_WEBLOG_URL]) )
{
	$weblog_id = ( isset($HTTP_GET_VARS[POST_WEBLOG_URL]) ) ? intval($HTTP_GET_VARS[POST_WEBLOG_URL]) : intval($HTTP_POST_VARS[POST_WEBLOG_URL]);
	$weblog_id = intval($weblog_id);
}

$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

if( !empty($weblog_id) )
{
	$sql = "SELECT w.*, u.user_id
		FROM " . WEBLOGS_TABLE . " w, " . USERS_TABLE . " u
		WHERE w.weblog_id = $weblog_id
			AND u.user_weblog = w.weblog_id";
	if( !$result = $db->sql_query($sql) )
	{
		message_die(GENERAL_ERROR, "Couldn't obtain weblogs information.", "", __LINE__, __FILE__, $sql);
	}

	if( !($weblog_data = $db->sql_fetchrow($result)) )
	{
		message_die(GENERAL_MESSAGE, $lang['Weblog_not_exist']);
	}

	if ( $weblog_data['deleted'] )
	{
		message_die(GENERAL_ERROR, sprintf($lang['Weblog_deactivated'], $weblog_data['weblog_name']));
	}

	$sql = "SELECT * FROM " . WEBLOG_CONTRIBUTORS_TABLE . " WHERE weblog_id = $weblog_id AND user_id = " . $userdata['user_id'];
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Error querying to find user weblog information', '', __LINE__, __FILE__, $sql);
	}
	
	$contributor = FALSE;
	if ( $row = $db->sql_fetchrow($result) || $userdata['user_level'] == ADMIN )
	{
		$contributor = TRUE;
	}

	$auth_level = get_auth_level ( $weblog_data, $contributor );

	if ( $weblog_data['weblog_auth'] > $auth_level )
	{
		message_die(GENERAL_ERROR, $lang['Weblog_noaccess']);
	}

	$sql = "SELECT * FROM " . USERS_TABLE . "
			WHERE user_weblog = " . $weblog_data['weblog_id'];
	if( !$result = $db->sql_query($sql) )
	{
		message_die(GENERAL_ERROR, "Couldn't get weblog owner information.", "", __LINE__, __FILE__, $sql);
	}

	$owner_data = array();
	if ( $row = $db->sql_fetchrow($result) )
	{
		$owner_data = $row;
	}

	$sql = "SELECT * FROM " . WEBLOG_ENTRIES_TABLE . "
		WHERE weblog_id = " . $weblog_data['weblog_id'] . "
			AND entry_access <= $auth_level
			AND entry_time <= " . time() . "
		ORDER BY entry_time DESC
		LIMIT " . $weblog_data['entries_perpage'];
	if(!($result = $db->sql_query($sql)))
	{
		message_die(GENERAL_ERROR, 'Could not query weblog entry information', '', __LINE__, __FILE__, $sql);
	}

	$entry_data = array();
	while ( $row = $db->sql_fetchrow($result) )
	{
		$entry_data[] = $row;
	}
}

$server_name = trim($board_config['server_name']);
$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';
$server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '';
$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path']));

$basedir = $server_protocol . $server_name .  $server_port . '/' .  $script_name . '/';

$smilies_path = $board_config['smilies_path'];
$smilies_url = $basedir . $smilies_path;
$smilies_path = preg_replace("/\//", "\/", $smilies_path);


header ('Expires: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
header ('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header ('Content-Type: text/xml');

echo ("<?xml version=\"1.0\" encoding=\"utf8\" ?>\n");
echo ("  <rss version=\"2.0\">\n");
echo ("	<channel>\n");
if ( $weblog_id )
{
	echo ("	  <title>" . $weblog_data['weblog_name'] . "</title>\n");
	echo ("	  <link>" . $basedir . "weblog.$phpEx?" . POST_WEBLOG_URL . "=$weblog_id" . "</link>\n");
}
else
{
	echo ("	  <title>" . $lang['Latest_weblogs_feed'] . "</title>\n");
	echo ("	  <link>" . $basedir . "weblogs.$phpEx</link>\n");
}
echo ("	  <webMaster>" . $board_config['board_email'] . "</webMaster>\n");
echo ("	  <lastBuildDate>" . gmdate('D, d M Y H:i:s', time()) . " GMT</lastBuildDate>\n");
echo ("	  <generator>The Blog Mod " . WEBLOGS_MOD_VERSION . " by Hyperion</generator>\n");

if ( $weblog_id )
{

$sql = "SELECT *
	FROM " . WEBLOG_MOODS_TABLE . "
	ORDER BY mood_text";
if( !$result = $db->sql_query($sql) )
{
	message_die(GENERAL_ERROR, "Couldn't obtain mood data from database", "", __LINE__, __FILE__, $sql);
}
$mood_data = $db->sql_fetchrowset($result);

$sql = "SELECT *
	FROM " . WEBLOG_ACTIONS_TABLE . "
	ORDER BY action_text";
if( !$result = $db->sql_query($sql) )
{
	message_die(GENERAL_ERROR, "Couldn't obtain action data from database", "", __LINE__, __FILE__, $sql);
}
$action_data = $db->sql_fetchrowset($result);


for ($i = 0; $i < count($entry_data); $i++)
{
	$entry_data[$i]['entry_text'] = htmlspecialchars($entry_data[$i]['entry_text']);
	if ( $entry_data[$i]['enable_bbcode'] )
	{
		$entry_data[$i]['entry_text'] = bbencode_second_pass($entry_data[$i]['entry_text'], $entry_data[$i]['bbcode_uid']);
	}

	if ( $entry_data[$i]['enable_smilies'] )
	{
		$entry_data[$i]['entry_text'] = smilies_pass($entry_data[$i]['entry_text']);
	}

	$entry_data[$i]['entry_text'] = make_clickable($entry_data[$i]['entry_text']);

	if ( !$weblog_config['censor_weblog'] )
	{
		$orig_word = array();
		$replacement_word = array();
		obtain_word_list($orig_word, $replacement_word);

		/*if (count($orig_word))
		{
			$entry_data[$i]['entry_subject'] = preg_replace($orig_word, $replacement_word, $entry_data[$i]['entry_subject']);
			$entry_data[$i]['entry_text'] = preg_replace($orig_word, $replacement_word, $entry_data[$i]['entry_text']);
		}*/
	}

	$entry_data[$i]['entry_text'] = nl2br($entry_data[$i]['entry_text']);

	$mood = array();
	$mood = find_mood($entry_data[$i]['entry_mood']);

	if ( $mood >= 0 )
	{ 
		$mood = '<strong>[</strong>&nbsp;' . sprintf($lang['Mood:'], '<img src="' . $basedir . 'images/weblog/' . $mood['mood_url'] . '" alt="' . $mood['mood_text'] . '" style="vertical-align: middle" border="0" />', $mood['mood_text']) . '&nbsp;<strong>]</strong><br />';
	}
	else
	{
		$mood = '';
	}

	$currently = array();
	$currently = find_action($entry_data[$i]['entry_currently']);

	if ( $currently > 0 )
	{
		$action = '<strong>[</strong>&nbsp;' . sprintf($lang['Currently:'], '<img src="' . $basedir . 'images/weblog/' . $currently['action_url'] . '" alt="' . $currently['action_text'] . ' ' . $entry_data[$i]['currently_text'] . '" style="vertical-align: middle" border="0" />',  $currently['action_text'] . ' ' . $entry_data[$i]['currently_text']) . '&nbsp;<strong>]</strong><br />'; 
	}
	else if ( $entry_data[$i]['currently_text'] && $currently == -2 )
	{
		$action = '<strong>[</strong>' . sprintf($lang['Currently:'], '', $entry_data[$i]['currently_text']) . '&nbsp;<strong>]</strong><br />';
	}
	else
	{
		$action = '';
	}
        $entry_data[$i]['entry_text'] = preg_replace('/img src ?= ?"images/', 'img src="' . $basedir . 'images', $entry_data[$i]['entry_text']);

	$entry_data[$i]['entry_text'] = $mood . $action . $entry_data[$i]['entry_text'];

	$entry_data[$i]['entry_text'] = trim ($entry_data[$i]['entry_text']);

	$entry_data[$i]['entry_text'] = cut_message ( $entry_data[$i]['entry_text'], $entry_data[$i]['entry_id'] );

	$entry_author = $owner_data['username'] . ' ';
	if ( ($owner_data['user_viewemail']) || $userdata['user_level'] == ADMIN )
	{
		$entry_author .= $owner_data['user_email'];
	}

	$entry_link = $basedir . "weblog_entry.$phpEx?" . POST_ENTRY_URL . "=" . $entry_data[$i]['entry_id'];

	$entry_time = $entry_data[$i]['entry_time'];
	echo ("	  <item>\n");
	echo ("	    <title>" . $entry_data[$i]['entry_subject'] . "</title>\n");
	echo ("	    <link>" . $entry_link . "</link>\n");
	echo ("	    <description>" . htmlspecialchars($entry_data[$i]['entry_text']) . "</description>\n");
	echo ("	    <author>" . $entry_author . "</author>\n");
	echo ("	    <pubDate>" . gmdate('D, d M Y H:i:s', $entry_data[$i]['entry_time']) . " GMT</pubDate>\n");
	echo ("	  </item>\n");
}

}
else
{
		//
	// Friends
	//
	$sql = "SELECT * FROM " . WEBLOG_FRIENDS_TABLE . " WHERE friend_id = " . $userdata['user_id'];
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Error querying to find user weblog friends information', '', __LINE__, __FILE__, $sql);
	}

	$friends_data = array();
	while ( $row = $db->sql_fetchrow($result) )
	{
		$friends_data[] = $row;
	}

	//
	// Blocked Users
	//
	$sql = "SELECT * FROM " . WEBLOG_BLOCKED_TABLE . " WHERE blocked_id = " . $userdata['user_id'];
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Error querying to find user weblog blocked information', '', __LINE__, __FILE__, $sql);
	}

	$blocked_data = array();
	while ( $row = $db->sql_fetchrow($result) )
	{
		$blocked_data[] = $row;
	}

	//
	// Fetch Contributor data
	//
	$sql = "SELECT * FROM " . WEBLOG_CONTRIBUTORS_TABLE . " WHERE user_id = " . $userdata['user_id'];
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Error querying to find user weblog information', '', __LINE__, __FILE__, $sql);
	}

	$contributor_data = array();
	while ( $row = $db->sql_fetchrow($result) )
	{
		$contributor_data[] = $row;
	}

	//
	// Get Weblog Data from Weblogs with at least one valid entry
	//
	$sql = "SELECT w.*, u.*, e.entry_id, e.entry_subject, e.entry_access, e.entry_mood, e.entry_currently, e.entry_time, e.bbcode_uid, e.entry_text
		FROM " . USERS_TABLE . " u, " . WEBLOGS_TABLE . " w
			LEFT JOIN " . WEBLOG_ENTRIES_TABLE . " e
				ON e.weblog_id = w.weblog_id
				AND e.entry_time <= " . time() . "
			WHERE w.weblog_id = u.user_weblog			
			ORDER BY e.entry_time DESC LIMIT 0,10";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not query weblogs information', '', __LINE__, __FILE__, $sql);
	}

	//
	// Build a new array, discarding weblogs with outdated entries or entries that cannot be viewed.
	//
	$weblog_data = array();
	while( $row = $db->sql_fetchrow($result) )
	{
		if ( !search_array( $row['weblog_id'], $weblog_data ) )
		{
			$contributor = FALSE;
			for ( $i = 0; $i < count($contributor_data); $i++)
			{
				if ( $contributor_data[$i]['weblog_id'] == $row['weblog_id'] )
				{
					$contributor = TRUE;
					break;
				}
			}
			$auth_level = get_auth_level( $row, $contributor, $friends_data, $blocked_data );

			if ( $auth_level >= $row['weblog_auth'] && $auth_level >= $row['entry_access'] )
			{
				$weblog_data[] = $row;
			}
		}
	}

	for ($i = 0; $i < count($weblog_data); $i++)
	{
		$weblog_link = $basedir . "weblog.$phpEx?" . POST_WEBLOG_URL . "=" . $weblog_data[$i]['weblog_id'];

		echo ("	  <item>\n");
		echo ("	    <title>" . $weblog_data[$i]['weblog_name'] . "</title>\n");
		echo ("	    <link>" . $weblog_link . "</link>\n");
		echo ("	    <description>" . htmlspecialchars($weblog_data[$i]['weblog_desc']) . "</description>\n");
		echo ("	    <author>" . $weblog_data[$i]['username'] . "</author>\n");
		echo ("	    <pubDate>" . gmdate('D, d M Y H:i:s', $weblog_data[$i]['entry_time']) . " GMT</pubDate>\n");
		echo ("	  </item>\n");
	}
}

echo ("	</channel>\n");
echo ("  </rss>\n");
?>