<?PHP

/* ====================
Seditio – Website engine
Copyright Neocrome & Seditio Team
https://seditio.org
[BEGIN_SED]
File=rss.inc.php
Version=179
Updated=2022-jul-15
Type=Core
Author=Seditio Team
Description=Rss Creator
[END_SED]
==================== */

/*
Example of feeds:
rss/pages?c=XX (XX – category code)
rss/comments?id=XX (XX – page ID)
rss/forums (latest posts from all sections)
rss/forums?s=XX (XX – section ID, latest posts from section)
rss/forums?q=XX (XX – topic ID, latest posts from topic)
rss/forums?s=XX&q=YY(XX – section ID, YY – topic ID)
*/

if (!defined('SED_CODE')) { die('Wrong URL.'); }

/* ===============*/

$c = sed_import('c', 'G', 'TXT');
$m = sed_import('m', 'G', 'ALP');
$id = sed_import('id', 'G', 'INT');
$q = sed_import('q', 'G', 'INT');
$s = sed_import('s', 'G', 'INT');

$c = empty($c) ? $cfg['rss_defaultcode'] : $c;

if ($cfg['disable_rss']) { exit(); }

$items = array();

// RSS output
header("Content-type: text/xml; charset=".$cfg['charset']);

if ($usr['id'] == 0)
	{
	$name = mb_substr(md5($m.$c.$id.$q.$s), 0, 10);
	$cache = sed_cache_get("rss_".$name);
	if ($cache)
		{
		echo $cache; // output cache if avaiable
		exit();
		}
	}

$rss_title = $cfg['maintitle'];
$rss_link = $cfg['mainurl'];
$rss_description = $cfg['subtitle'];

/* === Hook === */
$extp = sed_getextplugins('rss.create');
if (is_array($extp))
	{ foreach($extp as $k => $pl) { include(SED_ROOT . '/plugins/'.$pl['pl_code'].'/'.$pl['pl_file'].'.php'); } }
/* ===== */

switch ($m)
	{
	case "comments" :

	if ($cfg['disable_comments'] || $cfg['disable_rsscomments']) { $i=0; break; }
	
	$sql = sed_sql_query("SELECT * FROM $db_pages WHERE page_id='$id' LIMIT 1");
	if (sed_sql_numrows($sql) > 0) 
		{
		$row = sed_sql_fetchassoc($sql);

		if (sed_auth('page', $row['page_cat'], 'R'))
			{
			$rss_title = $L['rss_lastcomments']." – ".$row['page_title']." – ".$cfg['maintitle'];
			$rss_description = $row['page_desc'];
			
			$sql1 = sed_sql_query("SELECT c.*, u.user_avatar FROM $db_com AS c
				LEFT JOIN $db_users AS u ON u.user_id=c.com_authorid
				WHERE com_code='p$id' ORDER BY com_date DESC LIMIT ".$cfg['rss_maxitems']);  

			$i = 0;

			while ($row1 = sed_sql_fetchassoc($sql1))
				{
				$items[$i]['title'] = $L['rss_commentauthor']." – ".sed_cc($row1['com_author']);

				$row1['com_text'] = sed_parse($row1['com_text']);

				$items[$i]['description'] = $row1['com_text'];

				$page_url = empty($row['page_alias']) ? sed_url("page", "id=".$id."&comments=1&b=".$row1['com_id'], "#c".$row1['com_id'], false, false) : sed_url("page", "al=".$row['page_alias']."&comments=1&b=".$row1['com_id'], "#c".$row1['com_id'], false, false);

				$items[$i]['link'] = $cfg['mainurl']."/".$page_url;
				$items[$i]['pubDate'] = date('r', $row1['com_date']);
				$i++;
				}
			}
		}

	break;

	case "forums" :

	if ($cfg['disable_forums'] || $cfg['disable_rssforums']) { $i=0; break; }

	$where = (!empty($s)) ? " AND p.fp_sectionid ='$s'" : "";
	$where .= (!empty($q)) ? " AND fp_topicid='$q'" : "";

	$rss_title = $L['rss_lastforums']." – ".$cfg['maintitle'];

	$sql = sed_sql_query("SELECT p.fp_id, p.fp_text, p.fp_postername, p.fp_sectionid, p.fp_creation, t.ft_title, t.ft_desc, s.fs_title, s.fs_desc, s.fs_allowbbcodes, s.fs_allowsmilies   
		FROM $db_forum_posts AS p JOIN $db_forum_topics AS t ON p.fp_topicid = t.ft_id JOIN $db_forum_sections AS s ON t.ft_sectionid=s.fs_id
		WHERE t.ft_movedto=0 AND t.ft_mode=0 ".$where." ORDER BY p.fp_creation DESC LIMIT ".$cfg['rss_maxitems']);

	$i = 0;

	while($row = sed_sql_fetchassoc($sql))
		{
		if (sed_auth('forums', $row['fp_sectionid'], 'R'))
			{
			$fs_allowbbcodes = $row['fs_allowbbcodes'];
			$fs_allowsmilies = $row['fs_allowsmilies'];

			$items[$i]['title'] = $row['fp_postername']." – ".$row['ft_title'];

			$row['fp_text'] = sed_parse($row['fp_text'], ($cfg['parsebbcodeforums'] && $fs_allowbbcodes), ($cfg['parsesmiliesforums'] && $fs_allowsmilies), 1, $row['fp_text_ishtml']);

			if (!$row['fp_text_ishtml'] && $cfg['textmode']=='html')
				{
				$sql3 = sed_sql_query("UPDATE $db_forum_posts SET fp_text_ishtml=1, fp_text='".sed_sql_prep($row['fp_text'])."' WHERE fp_id=".$row['fp_id']); 
				}

			$items[$i]['description'] = $row['fp_text'];

			$items[$i]['link'] = $cfg['mainurl']."/".sed_url("forums", "m=posts&p=".$row['fp_id'], "#".$row['fp_id'], false, false);
			$items[$i]['pubDate'] = date('r', $row['fp_creation']);
			
			if (!empty($s)) 
				{ 
				$rss_title = $L['rss_lastsections'].$row['fs_title']." – ".$cfg['maintitle']; 
				$rss_description = (!empty($row['fs_desc'])) ? $row['fs_desc'] : $rss_description;
				}
			if (!empty($q)) 
				{ 
				$rss_title = $L['rss_lasttopics'].$row['ft_title']." – ".$cfg['maintitle'];
				$rss_description = (!empty($row['ft_desc']))? $row['ft_desc'] : $rss_description;
				}
			}
		$i++;
		}

	break;

	//pages

	default : 

	if ($cfg['disable_page'] || $cfg['disable_rsspages']) { $i=0; break; }

	$mtch = $sed_cat[$c]['path'].".";
	$mtchlen = mb_strlen($mtch);
	$catsub = array();
	$catsub[] = $c;

	foreach($sed_cat as $k => $x)
		{
		if (mb_substr($x['path'], 0, $mtchlen)==$mtch && sed_auth('page', $k, 'R'))
			{ $catsub[] = $k; }
		}

	$sql = sed_sql_query("SELECT page_id, page_alias, page_title, page_text, page_text2, page_cat, page_date FROM $db_pages 
	WHERE page_state=0 AND page_cat NOT LIKE 'system' AND page_cat IN ('".implode("','", $catsub)."') 
	ORDER by page_date DESC LIMIT ".$cfg['rss_maxitems']);

	$rss_title = $sed_cat[$c]['title']." – ".$cfg['maintitle'];
	$rss_description = (!empty($sed_cat[$c]['desc'])) ? $sed_cat[$c]['desc'] : $rss_description; 
	$i = 0;

	while ($row = sed_sql_fetchassoc($sql))
		{

		$sys['catcode'] = $row['page_cat']; //new in v175

		$row['page_pageurl'] = (empty($row['page_alias'])) ? sed_url("page", "id=".$row['page_id'], "", false, false) : sed_url("page", "al=".$row['page_alias'], "", false, false);

		$row['page_text'] = sed_parse($row['page_text']);

		$row['page_text'] = sed_cutreadmore($row['page_text'], $row['page_pageurl']);

		$items[$i]['title'] = $row['page_title'];
		$items[$i]['link'] = $cfg['mainurl']."/".$row['page_pageurl'];
		$items[$i]['pubDate'] = date('r', $row['page_date']);
		$items[$i]['description'] = $row['page_text'];

		$i++;
		}

	break;

	}

/* output */

$out = "<?xml version='1.0' encoding='".$cfg['charset']."'?>\n";
$out .= "<rss version='2.0'>\n";
$out .= "<channel>\n";
$out .= "<title>".htmlspecialchars($rss_title)."</title>\n";
$out .= "<link>".$rss_link."</link>\n";
$out .= "<description>".htmlspecialchars($rss_description)."</description>\n";
$out .= "<generator>Seditio</generator>\n";
$out .= "<pubDate>".date("r", time())."</pubDate>\n";

if (count($items)>0)
	{
	foreach($items as $item)
		{
		$out .= "<item>\n";
		$out .= "<title>".htmlspecialchars($item['title'])."</title>\n";
		$out .= "<description><![CDATA[".sed_rel2abs($item['description'])."]]></description>\n";
		$out .= "<pubDate>".$item['pubDate']."</pubDate>\n";
		$out .= "<link><![CDATA[".sed_rel2abs(str_replace('&amp;', '&', $item['link']))."]]></link>\n";
		$out .= "</item>\n";
		}
	}

$out .= "</channel>\n";
$out .= "</rss>";

/* === Hook === */
$extp = sed_getextplugins('rss.output');
if (is_array($extp))
	{ foreach($extp as $k => $pl) { include(SED_ROOT . '/plugins/'.$pl['pl_code'].'/'.$pl['pl_file'].'.php'); } }
/* ===== */

if ($usr['id'] == 0 && $i > 0)
	{
	$name = mb_substr(md5($m.$c.$id.$q.$s), 0, 10);	
	sed_cache_store("rss_".$name, $out, $cfg['rss_timetolive']);
	}

echo $out;

?>
