<?php

require_once('../LocalSettings.php');

/* Get the database working */
$link = mysqli_connect(DB_SERVER, DB_READ_USER, DB_READ_PASS, DB_NAME) or trigger_error('Problem connecting to the SQL database server: '.mysqli_error($link), E_USER_ERROR);

function numeric_entities($string){
    $mapping = array();
    foreach (get_html_translation_table(HTML_ENTITIES, ENT_QUOTES) as $char => $entity){
        $mapping[$entity] = '&#' . ord($char) . ';';
    }
    return str_replace(array_keys($mapping), $mapping, $string);
}

function Excerpt( $excerpt ) {
	$excerpt = strip_tags( $excerpt );
	if (strlen($excerpt) > 455) {
		$excerpt = substr($excerpt,0,452) . '...';
	}
	return $excerpt;
}

function datesort( $a , $b ) {
	if( $a->udate == $b->udate ) return 0;
	return( $a->udate > $b->udate ) ? -1 : 1;
}

function utfentities($string)
{
	return htmlentities($string, ENT_COMPAT, 'UTF-8');
}

function _query( $s, $byid = false ) {
	global $link;
	$r = mysqli_query($link, $s ) or die( mysqli_error($link) );
	$ret=array();
	$i=0;

	if( $byid ) {
		while ($row = mysqli_fetch_object($r) )
			$ret[$row->id] = $row;
	} else {
		while ($row = mysqli_fetch_object($r) )
			$ret[$i++] = $row;
	}
	return $ret;
}

@$f_title = $type = $_GET['type'];

$f_items = array();
$f_desc = 'News and Comics from Megatokyo.';

/*if( $type == 'status' or $type == '') {
	// Status Box Updates
	$f_title = 'Megatokyo Status Updates';
	$s = _query( "SELECT MAX(id)+1 as m FROM strip" ); // Permalinks to strips?

	$s = _query( "SELECT DISTINCT SUBTIME( published, eta ) as dd, UNIX_TIMESTAMP(published) as udate, text, UNIX_TIMESTAMP(eta) as eta, percentage
			FROM status s
			ORDER BY udate DESC
			LIMIT 5");
	foreach( $s as $k=>$v ) {
		$s[$k]->link = 'http://www.megatokyo.com/';
		$s[$k]->title = "Update: $v->percentage%: " . htmlentities($v->text, ENT_COMPAT, ini_get('default_charset'));

		$d = date( 'l F jS, H:i', $v->eta );
		$dd = (int)  (( $v->eta - $v->udate )/3600);

		$s[$k]->desc = "<![CDATA[Status Update.
					<br/>$v->percentage% complete.
					<br/>Next comic should be posted at: $d. ($dd hours)]]>";
		$s[$k]->date = date( DATE_RFC822, $v->udate );
		$s[$k]->guid = $s[$k]->link;
	}
	$f_items = array_merge( $f_items, $s );
}*/

if( $type == 'strips' or $type == '') {
	$f_title = 'Megatokyo Comics';
	$s = _query("SELECT DISTINCT s.id, UNIX_TIMESTAMP(s.published) as udate, t.description as chapdesc, t.name as chapname, s.title
			FROM media_t media, strip s, strip_t t
			WHERE s.media = media.id AND s.published < NOW()
			  AND s.type = t.id
			ORDER BY s.id DESC LIMIT 5") or die(mysqli_error($link));
	foreach($s as $k=>$v) {
		$s[$k]->link = SITE_HOST . SITE_PATH . "/strip/$v->id";
		#$s[$k]->title = "Comic [$v->id] \"" . utfentities($v->title, ENT_COMPAT, ini_get('default_charset')) . '"';
		$s[$k]->title = "Comic [$v->id] \"" . numeric_entities(utfentities($v->title)) . '"';
		$s[$k]->desc = "<![CDATA[$v->chapdesc comic $v->id
					<br/>[<a href=\"http://www.megatokyo.com/\">read...</a>]
					<br/>[<a href=\"" . $s[$k]->link . "\">permalink</a>]
					]]>";
		$s[$k]->date = date( DATE_RFC822, $v->udate );
		$s[$k]->guid = $s[$k]->link;
	}
	$f_items = array_merge( $f_items, $s );
}

if( $type == 'rants' or $type == '' ) {
	$f_title = 'Megatokyo Rants';
	$contributers = _query("SELECT * FROM contributor", true);
	$s = _query("SELECT r.id, r.body as body, UNIX_TIMESTAMP(r.published) as udate, r.author as authorno, r.title
			FROM rant r
			WHERE r.published < NOW()
			AND r.status = 'published'
			ORDER BY udate DESC LIMIT 5");
	foreach($s as $k=>$v) {
		$s[$k]->link = SITE_HOST . SITE_PATH . "/rant/$v->id";
		$s[$k]->author = utfentities( $contributers[$v->authorno]->name, ENT_COMPAT, ini_get('default_charset') );
		$s[$k]->title = "Rant [$v->id] \"" . utfentities($v->title, ENT_COMPAT, ini_get('default_charset')) . '"';
		$s[$k]->desc = "<![CDATA[" . Excerpt($v->body) . "<p>[<a href=\"" . $s[$k]->link . "\">permalink</a>]</p>]]>";
		$s[$k]->date = date( DATE_RFC822, $v->udate );
		$s[$k]->guid = $s[$k]->link;
	}
	$f_items = array_merge( $f_items, $s );
}

if( $type == '' )
{
	$f_title = 'Megatokyo Comics and News';
	$s = _query("SELECT UNIX_TIMESTAMP(published) as udate, body, url FROM rss_comment ORDER BY published DESC LIMIT 5");

	foreach($s as $k=>$v)
	{
		$s[$k]->link = $v->url;
		$s[$k]->title = $v->body;
		$s[$k]->date = date( DATE_RFC822, $v->udate );
		$s[$k]->guid = $s[$k]->date;
		$s[$k]->desc = '';
	}
	$f_items = array_merge( $f_items, $s );
}

usort( $f_items, 'datesort' );

$f_date = $f_items[0]->date;

$rfc1123_date = gmdate( 'D, d M Y H:i:s ', $f_items[0]->udate ) . 'GMT';
$etag = md5( $rfc1123_date );

/* Conditional Get */
header( "Last-Modified: $rfc1123_date" );
header( "ETag: \"$etag\"");

if( isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $rfc1123_date ) {
	header('HTTP/1.0 304 Not Modified');
	exit;
}
if( isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag ) {
	header('HTTP/1.0 304 Not Modified');
	exit;
}

header("XX-Powered-By: Nikuman");
header("Content-Type: application/rss+xml;charset=utf-8");

echo '<?xml version="1.0" encoding="utf-8"?>', "\n";
?>
<rss version="2.0">
	<channel>
		<title><?php echo $f_title; ?></title>
		<link>http://www.megatokyo.com</link>
		<description><?php echo $f_desc; ?></description>
		<language>en-us</language>
		<copyright>Fred Gallagher</copyright>
		<managingEditor>piro@megatokyo.com</managingEditor>
		<pubDate><?php echo $f_date; ?></pubDate>
		<lastBuildDate><?php echo $f_date; ?></lastBuildDate>
		<ttl>15</ttl>

<?php if( count( $f_items )) foreach( $f_items as $v ): ?>
		<item>
			<title><?php echo $v->title; ?></title>
			<link><?php echo $v->link; ?></link>
			<description><?php echo $v->desc; ?></description>
			<guid><?php echo $v->guid; ?></guid>
			<pubDate><?php echo $v->date; ?></pubDate>
		</item>
<?php endforeach; ?>
	</channel>
</rss>
