Просмотр файла includes/rss_functions.php

Размер файла: 7.75Kb
<?php
// rss_funtions.php
// Part of RSS Feed MOD
// Edit: 2005-11-23
// Copyright (c) 2004-2005, Egor Naklonyaeff

function FormatLanguage($lng)
{
// You can add you ISO 639 coutry code here or remove unused codes
	$iso639=array("albanian"=>"sq","arabic"=>"ar","azerbaijani"=>"az",
		"bulgarian"=>"bg","chinese"=>"zh","chinese_simplified"=>"zh",
		"chinese_traditional"=>"zh","croatian"=>"hr","czech"=>"cs",
		"danish"=>"da","dutch"=>"nl","english"=>"en",
		"esperanto"=>"eo","estonian"=>"et","finnish"=>"fi",
		"french"=>"fr","japanese"=>"ja","galego"=>"gl",
		"german"=>"de","greek"=>"el","hungarian"=>"hu",
		"hebrew"=>"he","icelandic"=>"is","indonesian"=>"id",
		"italian"=>"it","korean"=>"ko","kurdish"=>"ku",
		"macedonian"=>"mk","moldavian"=>"mo","mongolian"=>"mn",
		"norwegian"=>"no","polish"=>"pl","portuguese"=>"pt",
		"romanian"=>"ro","russian"=>"ru","russian_tu"=>"ru",
		"serbian"=>"sr","slovak"=>"sk","slovenian"=>"sl",
		"spanish"=>"es","swedish"=>"sv","thai"=>"th",
		"turkish"=>"tr","uigur"=>"ug","ukrainian"=>"uk",
		"vietnamese"=>"vi","welsh"=>"cy");
	$user_lang=(isset($iso639[$lng]))? $iso639[$lng]:'';
	return(($user_lang!='')?"\n<language>$user_lang</language>":'');
}
function RSSTimeFormat($utime,$uoffset=0)
{
	global $HTTP_GET_VARS,$user_id,$useragent;
	if(CACHE_TO_FILE && ($user_id==ANONYMOUS) && empty($HTTP_GET_VARS))$uoffset=0;
	if((isset($HTTP_GET_VARS['time']) && $HTTP_GET_VARS['time']=='local')|| (strpos($useragent,'Abilon')!==false)|| (strpos($useragent,'ActiveRefresh')!==false))
	{
		$uoffset=intval($uoffset);
	}
	else $uoffset=0;
	$result=gmdate("D, d M Y H:i:s", $utime + (3600 * $uoffset));
	$uoffset=intval($uoffset*100);
	$result.=' '.(($uoffset>0)?'+':'').(($uoffset==0)? 'GMT': sprintf((($uoffset<0)?"%05d":"%04d"),$uoffset));
	return $result;
}
function GetHTTPPasswd()
{
	header('WWW-Authenticate: Basic realm="For registred users only"');
	ExitWithHeader('401 Unauthorized','For registred users only');
}
function ExitWithHeader($output,$message='')
{
	global $db, $HTTP_SERVER_VARS;
	$db->sql_close();
	if(function_exists("getallheaders")) header("HTTP/1.1 $output");
	else header('Status: '.$output);
	$code=intval(substr($output,0,3));
	if(($code==200)||($code==304))
	{
	if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'])) header("Last-Modified: ".$HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']);
	if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])) header("Etag: ".$HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']);
	}
	if(!empty($message)) {
		header ('Content-Type: text/plain');
		echo $message;
	}
	exit;
}
function rss_session_begin($user_id, $user_ip, $page_id)
{
	global $db, $board_config,$HTTP_SERVER_VARS;
	$page_id = (int) $page_id;
	$user_id= (int) $user_id;
	$password=md5($HTTP_SERVER_VARS['PHP_AUTH_PW']);
	$last_visit = 0;
	$current_time = time();
	$expiry_time = $current_time - $board_config['session_length'];
	$sql = "SELECT *
		FROM " . USERS_TABLE . "
		WHERE user_id = $user_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		ExitWithHeader('500 Internal Server Error','Could not obtain lastvisit data from user table');
	}
	$userdata = $db->sql_fetchrow($result);
	if(($user_id!=ANONYMOUS) && (!$userdata || ($password != $userdata['user_password'])))
	{
		ExitWithHeader('500 Internal Server Error','Error while create session');
	}
	$login=( $user_id != ANONYMOUS )?1:0;

	//
	// Initial ban check against user id, IP and email address
	//
	preg_match('/(..)(..)(..)(..)/', $user_ip, $user_ip_parts);

	$sql = "SELECT ban_ip, ban_userid, ban_email
		FROM " . BANLIST_TABLE . "
		WHERE ban_ip IN ('" . $user_ip_parts[1] . $user_ip_parts[2] . $user_ip_parts[3] . $user_ip_parts[4] . "', '" . $user_ip_parts[1] . $user_ip_parts[2] . $user_ip_parts[3] . "ff', '" . $user_ip_parts[1] . $user_ip_parts[2] . "ffff', '" . $user_ip_parts[1] . "ffffff')
			OR ban_userid = $user_id";
	if ( $user_id != ANONYMOUS )
	{
		$sql .= " OR ban_email LIKE '" . str_replace("\'", "''", $userdata['user_email']) . "'
			OR ban_email LIKE '" . substr(str_replace("\'", "''", $userdata['user_email']), strpos(str_replace("\'", "''", $userdata['user_email']), "@")) . "'";
	}
	if ( !($result = $db->sql_query($sql)) )
	{
		ExitWithHeader("500 Internal Server Error","Could not obtain ban information");
	}

	if ( $ban_info = $db->sql_fetchrow($result) )
	{
		if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] )
		{
			ExitWithHeader("403 Forbidden","You been banned");
		}
	}

	list($sec, $usec) = explode(' ', microtime());
	mt_srand((float) $sec + ((float) $usec * 100000));
	$session_id = md5(uniqid(mt_rand(), true));
	$sql = "INSERT INTO " . SESSIONS_TABLE . "
		(session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in, session_admin)
		VALUES ('$session_id', $user_id, $current_time, $current_time, '$user_ip', $page_id, $login, 0)";
		if ( !$db->sql_query($sql) )
		{
			ExitWithHeader("500 Internal Server Error","Error creating new session");
		}
		$last_visit = ( $userdata['user_session_time'] > 0 ) ? $userdata['user_session_time'] : $current_time;
		$sql = "UPDATE " . USERS_TABLE . " SET user_session_time = $current_time, user_session_page = $page_id, user_lastvisit = $last_visit ";
		if(LV_MOD_INSTALLED) $sql.= ",user_lastlogon=$current_time, user_totallogon=user_totallogon+1";
		$sql .=" WHERE user_id = $user_id";
		if ( !$db->sql_query($sql) )
		{
			 ExitWithHeader("500 Internal Server Error",'Error updating last visit time');
		}

	$userdata['user_lastvisit'] = $last_visit;
	$userdata['session_id'] = $session_id;
	$userdata['session_ip'] = $user_ip;
	$userdata['session_user_id'] = $user_id;
	$userdata['session_logged_in'] = $login;
	$userdata['session_page'] = $page_id;
	$userdata['session_start'] = $current_time;
	$userdata['session_time'] = $current_time;
	$userdata['session_admin'] = 0;
	$userdata['session_key']='';
	$SID = 'sid=' . $session_id;
	define('TEMP_SESSION',true);
	return $userdata;
}
function rss_session_end()
{
	global $db, $userdata;
	$session_id=$userdata['session_id'];
	$user_id=$userdata['user_id'];
    $sql = 'DELETE FROM ' . SESSIONS_TABLE . "
		WHERE session_id = '$session_id'
		AND session_user_id = $user_id";
	if ( !$db->sql_query($sql) )
	{
		ExitWithHeader("500 Internal Server Error","Error delete session");
	}
}
function rss_get_user()
{
	global $db, $HTTP_SERVER_VARS, $HTTP_GET_VARS;
	if((!isset($HTTP_SERVER_VARS['PHP_AUTH_USER']) || !isset($HTTP_SERVER_VARS['PHP_AUTH_PW']))
		&& isset($HTTP_SERVER_VARS['REMOTE_USER']) && preg_match('/Basic\s+(.*)$/i', $HTTP_SERVER_VARS['REMOTE_USER'], $matches)) {
		list($name, $password) = explode(':', base64_decode($matches[1]), 2);
		$HTTP_SERVER_VARS['PHP_AUTH_USER'] = strip_tags($name);
		$HTTP_SERVER_VARS['PHP_AUTH_PW']	= strip_tags($password);
	}
	if (isset($HTTP_SERVER_VARS['PHP_AUTH_USER']) && isset($HTTP_SERVER_VARS['PHP_AUTH_PW'])) {
		$username=phpbb_clean_username($HTTP_SERVER_VARS['PHP_AUTH_USER']);
		$password=md5($HTTP_SERVER_VARS['PHP_AUTH_PW']);
		if(isset($HTTP_GET_VARS['uid'])){
			$uid=intval($HTTP_GET_VARS['uid']);
			$sql = "SELECT * FROM " . USERS_TABLE . " WHERE user_id = $uid";
		}
		else
			$sql = "SELECT user_id, username, user_password, user_active, user_level
			FROM " . USERS_TABLE . "
			WHERE username = '" . str_replace("\\'", "''", $username) . "'";

		if ( !($result = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Error in obtaining userdata', '', __LINE__, __FILE__, $sql);
		}
		if( $row = $db->sql_fetchrow($result) )
		{
		 if( $password == $row['user_password'] && $row['user_active'] )
		 {
		  // Yes!!!  It's good user
			return $row['user_id'];
		 }
		 else GetHTTPPasswd();
	}
	}
	else GetHTTPPasswd();
	return ANONYMOUS;
}
?>