mirror of
https://github.com/e107inc/e107.git
synced 2025-01-16 20:28:28 +01:00
840 lines
23 KiB
PHP
840 lines
23 KiB
PHP
<?php
|
|
/*
|
|
* e107 website system
|
|
*
|
|
* Copyright (C) 2008-2016 e107 Inc (e107.org)
|
|
* Released under the terms and conditions of the
|
|
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
|
|
*
|
|
* RSS Feed management
|
|
*
|
|
*/
|
|
|
|
/*
|
|
Query string: content_type.rss_type.[topic id]
|
|
1: news
|
|
5: comments
|
|
12: downloads (option: specify category)
|
|
|
|
Plugins should use an e_rss.php file in their plugin folder
|
|
----------------------------------------------------------------
|
|
*/
|
|
if (!defined('e107_INIT'))
|
|
{
|
|
if(!empty($_GET) || !empty($argv))
|
|
{
|
|
$_E107['no_online'] = true;
|
|
$_E107['no_forceuserupdate'] = true;
|
|
$_E107['no_menus'] = true;
|
|
$_E107['allow_guest'] = true; // run while in members-only mode.
|
|
$_E107['no_maintenance'] = true;
|
|
}
|
|
|
|
require_once(__DIR__.'/../../class2.php');
|
|
}
|
|
|
|
$e107 = e107::getInstance();
|
|
|
|
if (!e107::isInstalled('rss_menu'))
|
|
{
|
|
e107::redirect();
|
|
exit;
|
|
}
|
|
|
|
$tp = e107::getParser();
|
|
|
|
//require_once(e_PLUGIN.'rss_menu/rss_shortcodes.php');
|
|
require_once(e_HANDLER.'userclass_class.php');
|
|
|
|
// Get language file
|
|
e107::includeLan(e_PLUGIN.'rss_menu/languages/'.e_LANGUAGE.'_admin_rss_menu.php');
|
|
|
|
|
|
// Query handler
|
|
if(!empty($_GET['type']))
|
|
{
|
|
$content_type = $tp->toDB($_GET['cat']);
|
|
$rss_type = intval(varset($_GET['type'],0));
|
|
$topic_id = $tp->toDB($_GET['topic'],'');
|
|
}
|
|
elseif(e_QUERY)
|
|
{
|
|
$tmp = explode('.', e_QUERY);
|
|
|
|
$content_type = $tp->toDB($tmp[0]);
|
|
$rss_type = intval(varset($tmp[1],0));
|
|
$topic_id = $tp->toDB($tmp[2],'');
|
|
}
|
|
else
|
|
{
|
|
$content_type = false;
|
|
$topic_id = false;
|
|
}
|
|
|
|
// List available rss feeds
|
|
if (empty($rss_type))
|
|
{
|
|
// Display list of all feeds
|
|
require_once(HEADERF);
|
|
|
|
require_once(e_PLUGIN.'rss_menu/rss_shortcodes.php');
|
|
$sc = e107::getScBatch('rss_menu', true);
|
|
$sc->wrapper('rss/page');
|
|
|
|
if(!$sql->select('rss', '*', "`rss_class` = 0 AND `rss_limit` > 0 AND `rss_topicid` NOT REGEXP ('\\\*') ORDER BY `rss_name`"))
|
|
{
|
|
$ns->tablerender(LAN_ERROR, RSS_LAN_ERROR_4);
|
|
}
|
|
else
|
|
{
|
|
if($template = e107::getTemplate('rss_menu', 'rss', 'page'))
|
|
{
|
|
$RSS_LIST_HEADER = $template['start'];
|
|
$RSS_LIST_TABLE = $template['item'];
|
|
$RSS_LIST_FOOTER = $template['end'];
|
|
}
|
|
else
|
|
{
|
|
// Get Legacy template
|
|
if (is_readable(THEME.'rss_template.php'))
|
|
{
|
|
require_once(THEME.'rss_template.php');
|
|
}
|
|
else
|
|
{
|
|
require_once(e_PLUGIN.'rss_menu/rss_template.php');
|
|
}
|
|
}
|
|
|
|
$text = $tp->parseTemplate($RSS_LIST_HEADER);
|
|
|
|
while($row = $sql->fetch())
|
|
{
|
|
$sc->setVars($row);
|
|
$text .= $tp->parseTemplate($RSS_LIST_TABLE, false, $sc);
|
|
}
|
|
|
|
$text .= $tp->parseTemplate($RSS_LIST_FOOTER);
|
|
|
|
$ns->tablerender(RSS_MENU_L2, $text);
|
|
}
|
|
|
|
require_once(FOOTERF);
|
|
exit;
|
|
}
|
|
|
|
|
|
while (ob_get_length() !== false) // destroy all ouput buffering
|
|
{
|
|
ob_end_clean();
|
|
}
|
|
|
|
// Returning feeds here
|
|
// Conversion table for old urls -------
|
|
$conversion[1] = 'news';
|
|
$conversion[5] = 'comments';
|
|
$conversion[10] = 'bugtracker';
|
|
$conversion[12] = 'download';
|
|
//-------------------------------------
|
|
|
|
// Convert certain old urls so we can check the db entries
|
|
// Rss.php?1.2 (news, rss-2) --> check = news (check conversion table)
|
|
|
|
if(is_numeric($content_type) && isset($conversion[$content_type]) )
|
|
{
|
|
$content_type = $conversion[$content_type];
|
|
}
|
|
|
|
|
|
$check_topic = ($topic_id ? " AND rss_topicid = '".$topic_id."' " : "");
|
|
|
|
if(!$sql->select('rss', '*', "rss_class != 2 AND rss_url='".$content_type."' ".$check_topic." AND rss_limit > 0 "))
|
|
{ // Check if wildcard present for topic_id
|
|
$check_topic = ($topic_id ? " AND rss_topicid = '".str_replace($topic_id, "*", $topic_id)."' " : "");
|
|
if(!$sql->select('rss', '*', "rss_class != 2 AND rss_url='".$content_type."' ".$check_topic." AND rss_limit > 0 "))
|
|
{
|
|
require_once(HEADERF);
|
|
|
|
$repl = array("<br /><br /><a href='".e_REQUEST_SELF."'>", "</a>");
|
|
$message = str_replace(array("[","]"), $repl, RSS_LAN_ERROR_1);
|
|
e107::getRender()->tablerender('', $message);
|
|
|
|
require_once(FOOTERF);
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
$row = $sql->fetch();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$row = $sql->fetch();
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
if($rss = new rssCreate($content_type, $rss_type, $topic_id, $row))
|
|
{
|
|
$rss_title = ($rss->contentType ? $rss->contentType : ucfirst($content_type));
|
|
|
|
if(defset('E107_DEBUG_LEVEL') > 0)
|
|
{
|
|
define('e_IFRAME',true);
|
|
require_once(HEADERF);
|
|
$rss->debug();
|
|
require_once(FOOTERF);
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
$rss->buildRss($rss_title);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
require_once(HEADERF);
|
|
$ns->tablerender(LAN_ERROR, RSS_LAN_ERROR_1);
|
|
require_once(FOOTERF);
|
|
|
|
}
|
|
|
|
class rssCreate
|
|
{
|
|
protected $e107;
|
|
|
|
var $contentType;
|
|
var $rssType;
|
|
var $path;
|
|
var $parm;
|
|
var $rssItems;
|
|
var $rssQuery;
|
|
var $topicid;
|
|
var $offset;
|
|
var $rssNamespace;
|
|
var $rssCustomChannel;
|
|
|
|
private $limit;
|
|
|
|
public function __construct($content_type, $rss_type, $topic_id, $row)
|
|
{ // Constructor
|
|
$sql_rs = new db;
|
|
global $rssgen;
|
|
$sql = e107::getDb();
|
|
$tp = e107::getParser();
|
|
|
|
$this->e107 = e107::getInstance();
|
|
|
|
$this -> path = e_PLUGIN."rss_menu/";
|
|
$this -> rssType = $rss_type;
|
|
$this -> topicid = $topic_id;
|
|
$this -> limit = $row['rss_limit'];
|
|
$this -> contentType = $row['rss_name'];
|
|
|
|
if(!is_numeric($content_type))
|
|
{
|
|
$path = e_PLUGIN.$row['rss_path'].'/e_rss.php';
|
|
}
|
|
if(strpos($row['rss_path'],'|')!==FALSE) //FIXME remove this check completely.
|
|
{
|
|
$tmp = explode("|", $row['rss_path']);
|
|
$path = e_PLUGIN.$tmp[0]."/e_rss.php";
|
|
$this->parm = $tmp[1]; // FIXME @Deprecated - use $parm['url'] instead in data() method within e_rss.php. Parm is used in e_rss.php to define which feed you need to prepare
|
|
}
|
|
|
|
switch ($content_type)
|
|
{
|
|
case 'news' :
|
|
case 1:
|
|
$path = e_PLUGIN."news/e_rss.php";
|
|
$this->contentType = "news";
|
|
break;
|
|
case 2:
|
|
$path='';
|
|
$this -> contentType = "articles";
|
|
break;
|
|
case 3:
|
|
$path='';
|
|
$this -> contentType = "reviews";
|
|
break;
|
|
case 4:
|
|
$path='';
|
|
$this -> contentType = "content";
|
|
break;
|
|
case 'comments' : //TODO Eventually move to e107_plugins/comments
|
|
case 5:
|
|
$path='';
|
|
$this -> rssQuery = "SELECT * FROM `#comments` WHERE `comment_blocked` = 0 ORDER BY `comment_datestamp` DESC LIMIT 0,".$this -> limit;
|
|
$sql->gen($this -> rssQuery);
|
|
$tmp = $sql->db_getList();
|
|
$this -> rssItems = array();
|
|
$loop=0;
|
|
|
|
$HTTP = !empty($_SERVER['HTTPS']) ? 'https://' : 'http://';
|
|
|
|
foreach($tmp as $value)
|
|
{
|
|
$this -> rssItems[$loop]['title'] = $value['comment_subject'];
|
|
$this -> rssItems[$loop]['pubdate'] = $value['comment_datestamp'];
|
|
|
|
switch ($value['comment_type'])
|
|
{
|
|
case 0 :
|
|
case 'news' :
|
|
$this -> rssItems[$loop]['link'] = $HTTP.$_SERVER['HTTP_HOST'].e_HTTP."comment.php?comment.news.".$value['comment_item_id'];
|
|
break;
|
|
case 2 :
|
|
case 'download' :
|
|
$this -> rssItems[$loop]['link'] = $HTTP.$_SERVER['HTTP_HOST'].e_HTTP."comment.php?comment.download.".$value['comment_item_id'];
|
|
break;
|
|
case 4:
|
|
case 'poll' :
|
|
$this -> rssItems[$loop]['link'] = $HTTP.$_SERVER['HTTP_HOST'].e_HTTP."comment.php?comment.poll.".$value['comment_item_id'];
|
|
break;
|
|
}
|
|
|
|
$this -> rssItems[$loop]['description'] = $value['comment_comment'];
|
|
$this -> rssItems[$loop]['author'] = substr($value['comment_author'], (strpos($value['comment_author'], ".")+1));
|
|
$loop++;
|
|
}
|
|
break;
|
|
|
|
case 6:
|
|
case 7:
|
|
$path = e_PLUGIN."forum/e_rss.php";
|
|
break;
|
|
|
|
|
|
case 8:
|
|
case 11:
|
|
if(!$this -> topicid)
|
|
{
|
|
return FALSE;
|
|
}
|
|
$path = e_PLUGIN."forum/e_rss.php";
|
|
break;
|
|
|
|
// case 10 was bugtracker
|
|
|
|
case 'download':
|
|
case 12:
|
|
$path = e_PLUGIN."download/e_rss.php";
|
|
break;
|
|
}
|
|
|
|
if(isset($path) && $path!='')
|
|
{ // New rss reader from e_rss.php in plugin folder
|
|
if (is_readable($path))
|
|
{
|
|
require_once($path);
|
|
|
|
$className = basename(dirname($path)).'_rss';
|
|
|
|
// v2.x standard
|
|
if($data = e107::callMethod($className,'data', array('url' => $content_type, 'id' => $this->topicid, 'limit' => $this->limit)))
|
|
{
|
|
$eplug_rss_data = array(0 => $data);
|
|
unset($data);
|
|
}
|
|
|
|
foreach($eplug_rss_data as $key=>$rs)
|
|
{
|
|
foreach($rs as $k=>$row)
|
|
{
|
|
$this -> rssItems[$k]['author'] = $row['author'];
|
|
$this -> rssItems[$k]['author_email'] = $row['author_email'];
|
|
$this -> rssItems[$k]['title'] = $row['title'];
|
|
|
|
if($row['link'])
|
|
{
|
|
if(stripos($row['link'], 'http') !== FALSE)
|
|
{
|
|
$this -> rssItems[$k]['link'] = $row['link'];
|
|
}
|
|
else
|
|
{
|
|
$this -> rssItems[$k]['link'] = SITEURLBASE.e_PLUGIN_ABS.$row['link'];
|
|
}
|
|
}
|
|
|
|
$this -> rssItems[$k]['description'] = $row['description'];
|
|
|
|
if($row['enc_url'])
|
|
{
|
|
$this -> rssItems[$k]['enc_url'] = SITEURLBASE.e_PLUGIN_ABS.$row['enc_url'].$row['item_id'];
|
|
}
|
|
|
|
if($row['enc_leng'])
|
|
{
|
|
$this -> rssItems[$k]['enc_leng'] = $row['enc_leng'];
|
|
}
|
|
|
|
if(!empty($eplug_rss['enc_type']))
|
|
{
|
|
$this -> rssItems[$k]['enc_type'] = $this->getmime($eplug_rss['enc_type']);
|
|
}
|
|
elseif($row['enc_type'])
|
|
{
|
|
$this -> rssItems[$k]['enc_type'] = $row['enc_type'];
|
|
}
|
|
|
|
$this -> rssItems[$k]['category_name'] = $row['category_name'];
|
|
|
|
if($row['category_link'])
|
|
{
|
|
if(stripos($row['category_link'], 'http') !== FALSE)
|
|
{
|
|
$this -> rssItems[$k]['category_link'] = $row['category_link'];
|
|
}
|
|
else
|
|
{
|
|
$this -> rssItems[$k]['category_link'] = SITEURLBASE.e_PLUGIN_ABS.$row['category_link'];
|
|
}
|
|
}
|
|
|
|
if(!empty($row['datestamp']))
|
|
{
|
|
$this -> rssItems[$k]['pubdate'] = $row['datestamp'];
|
|
}
|
|
else
|
|
{
|
|
$this -> rssItems[$k]['pubdate'] = time();
|
|
}
|
|
|
|
if($row['custom'])
|
|
{
|
|
$this -> rssItems[$k]['custom'] = $row['custom'];
|
|
}
|
|
|
|
if($row['media'])
|
|
{
|
|
$this -> rssItems[$k]['media'] = $row['media'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function debug()
|
|
{
|
|
unset($this->e107);
|
|
print_a($this);
|
|
// print_a($this -> rssItems);
|
|
}
|
|
|
|
function buildRss($rss_title)
|
|
{
|
|
global $pref;
|
|
|
|
$tp = e107::getParser();
|
|
|
|
header('Content-type: application/xml');
|
|
|
|
$rss_title = $tp->toRss($tp->toHTML($pref['sitename'],'','defs')." : ".$tp->toHTML($rss_title,'','defs'));
|
|
$rss_namespace = ($this->rssNamespace) ? "xmlns:".$this->rssNamespace : '';
|
|
$rss_custom_channel = ($this->rssCustomChannel) ? $this->rssCustomChannel : '';
|
|
$time = time();
|
|
switch ($this -> rssType)
|
|
{
|
|
case 1: // RSS 1.0
|
|
echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?".">
|
|
<!-- generator=\"e107\" -->
|
|
<!-- content type=\"".$this -> contentType."\" -->
|
|
<rss version=\"0.92\">
|
|
<channel>
|
|
<title>".$tp->toRss($rss_title)."</title>
|
|
<link>".$pref['siteurl']."</link>
|
|
<description>".$tp->toRss($pref['sitedescription'])."</description>
|
|
<lastBuildDate>".$itemdate = date("r", ($time))."</lastBuildDate>
|
|
<docs>http://backend.userland.com/rss092</docs>\n";
|
|
|
|
foreach($this -> rssItems as $value)
|
|
{ // Multi-language rss links.
|
|
$link = deftrue('e_LANQRY') ? str_replace("?","?".e_LANQRY,$value['link']) : $value['link'];
|
|
|
|
echo "
|
|
<item>
|
|
<title>".$tp->toRss($value['title'])."</title>
|
|
<description>".substr($tp->toRss($value['description']),0,150);
|
|
if($pref['rss_shownewsimage'] == 1 && strlen(trim($value['news_thumbnail'])) > 0)
|
|
{
|
|
$news_thumbnail = SITEURLBASE.e_IMAGE_ABS."newspost_images/".$tp->toRss($value['news_thumbnail']);
|
|
echo "<a href="".$link.""><img src="".$news_thumbnail."" height="50" border="0" hspace="10" vspace="10" align="right"></a>";
|
|
unset($news_thumbail);
|
|
}
|
|
echo "</description>
|
|
<author>".$value['author']."<".$this->nospam($value['author_email'])."></author>
|
|
<link>".$link."</link>
|
|
</item>";
|
|
}
|
|
echo "
|
|
</channel>
|
|
</rss>";
|
|
break;
|
|
|
|
case 2: // RSS 2.0
|
|
$sitebutton = (strpos(SITEBUTTON, "http:") !== false ? SITEBUTTON : SITEURL.str_replace("../", "", SITEBUTTON));
|
|
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?".">
|
|
<!-- generator=\"e107\" -->
|
|
<!-- content type=\"".$this->contentType."\" -->
|
|
<rss $rss_namespace version=\"2.0\"
|
|
xmlns:content=\"http://purl.org/rss/1.0/modules/content/\"
|
|
xmlns:atom=\"http://www.w3.org/2005/Atom\"
|
|
xmlns:dc=\"http://purl.org/dc/elements/1.1/\"
|
|
xmlns:sy=\"http://purl.org/rss/1.0/modules/syndication/\"
|
|
xmlns:media=\"http://search.yahoo.com/mrss/\"
|
|
>
|
|
<channel>
|
|
<title>".$tp->toRss($rss_title)."</title>
|
|
<link>".$pref['siteurl']."</link>
|
|
<description>".$tp->toRss($pref['sitedescription'])."</description>\n";
|
|
|
|
echo $tp->toHTML($rss_custom_channel)."\n"; // must not convert to CDATA.
|
|
|
|
echo "
|
|
<language>".defset('CORE_LC').(defined("CORE_LC2") ? "-".CORE_LC2 : "")."</language>
|
|
<copyright>".$tp->toRss(SITEDISCLAIMER)."</copyright>
|
|
<managingEditor>".$this->nospam($pref['siteadminemail'])." (".$pref['siteadmin'].")</managingEditor>
|
|
<webMaster>".$this->nospam($pref['siteadminemail'])." (".$pref['siteadmin'].")</webMaster>
|
|
<pubDate>".date("r",($time))."</pubDate>
|
|
<lastBuildDate>".date("r",($time))."</lastBuildDate>
|
|
<docs>http://backend.userland.com/rss</docs>
|
|
<generator>e107 (https://e107.org)</generator>
|
|
<sy:updatePeriod>hourly</sy:updatePeriod>
|
|
<sy:updateFrequency>1</sy:updateFrequency>
|
|
<ttl>60</ttl>";
|
|
|
|
echo "
|
|
<atom:link href=\"".$tp->toRss(e107::url('rss_menu','atom', array('rss_url'=>$this->contentType, 'rss_topicid'=>$this->topicid),'full'))."\" rel=\"self\" type=\"application/rss+xml\" />\n";
|
|
|
|
if (trim(SITEBUTTON))
|
|
{
|
|
$path = e107::getConfig()->get('sitebutton');
|
|
$imgPath = e107::getParser()->thumbUrl($path, array(), false, true);
|
|
echo "
|
|
<image>
|
|
<title>".$tp->toRss($rss_title)."</title>
|
|
<url>" . $imgPath . "</url>
|
|
<link>".$pref['siteurl']."</link>
|
|
<width>88</width>
|
|
<height>31</height>
|
|
<description>".$tp->toRss($pref['sitedescription'])."</description>
|
|
</image>\n";
|
|
}
|
|
|
|
// Generally Ignored by 99% of readers.
|
|
/*
|
|
echo "
|
|
<textInput>
|
|
<title>Search</title>
|
|
<description>Search ".$tp->toRss($pref['sitename'])."</description>
|
|
<name>query</name>
|
|
<link>".SITEURL.(substr(SITEURL, -1) == "/" ? "" : "/")."search.php</link>
|
|
</textInput>";
|
|
*/
|
|
|
|
foreach($this -> rssItems as $value)
|
|
{ // Multi-language rss links.
|
|
$link = deftrue('e_LANQRY') ? str_replace("?","?".e_LANQRY,$value['link']) : $value['link'];
|
|
$catlink = deftrue('e_LANQRY') ? str_replace("?","?".e_LANQRY,$value['category_link']) : $value['category_link'];
|
|
|
|
echo "<item>\n";
|
|
echo "<title>".$tp->toRss($value['title'])."</title>\n";
|
|
|
|
if($link)
|
|
{
|
|
echo "<link>".$link."</link>\n";
|
|
}
|
|
|
|
echo "<description>".$tp->toRss($value['description'],true). "</description>\n";
|
|
|
|
if($value['content_encoded'])
|
|
{
|
|
echo "<content:encoded>".$tp->toRss($value['content_encoded'],true)."</content:encoded>\n";
|
|
}
|
|
|
|
if($value['category_name'] && $catlink)
|
|
{
|
|
echo "<category domain='".$catlink."'>".$tp->toRss($value['category_name'])."</category>\n";
|
|
}
|
|
|
|
if($value['comment'])
|
|
{
|
|
echo "<comments>".$value['comment']."</comments>\n";
|
|
}
|
|
|
|
if($value['author'])
|
|
{
|
|
echo "<dc:creator>".$value['author']."</dc:creator>\n"; // correct tag for author without email.
|
|
}
|
|
|
|
// Enclosure support for podcasting etc.
|
|
if($value['enc_url'] && $value['enc_leng'] && $value['enc_type'])
|
|
{
|
|
echo "<enclosure url=\"".$value['enc_url']."\" length=\"".$value['enc_leng']."\" type=\"".$value['enc_type']."\" />\n";
|
|
}
|
|
|
|
echo "<pubDate>".date("r", ($value['pubdate']))."</pubDate>\n";
|
|
|
|
if($link)
|
|
{
|
|
echo "<guid isPermaLink=\"true\">".$link."</guid>\n";
|
|
}
|
|
|
|
if(isset($value['custom'])) // custom tags. (podcasts etc)
|
|
{
|
|
foreach($value['custom'] as $cKey => $cVal)
|
|
{
|
|
echo "<".$cKey.">".$tp->toRss($cVal)."</".$cKey.">\n";
|
|
}
|
|
}
|
|
|
|
if(!empty($value['media']))
|
|
{
|
|
|
|
foreach($value['media'] as $cVal)
|
|
{
|
|
foreach($cVal as $k=>$v)
|
|
{
|
|
echo $this->buildTag($k,$v);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
echo "</item>\n\n";
|
|
}
|
|
// echo "<atom:link href=\"".e_SELF."?".($this -> contentType).".4.".$this -> topicId ."\" rel=\"self\" type=\"application/rss+xml\" />";
|
|
echo "
|
|
</channel>
|
|
</rss>";
|
|
break;
|
|
|
|
case 3: // RDF
|
|
echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?".">
|
|
<!-- generator=\"e107\" -->
|
|
<!-- content type=\"".$this -> contentType."\" -->
|
|
<rdf:RDF xmlns=\"http://purl.org/rss/1.0/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:sy=\"http://purl.org/rss/1.0/modules/syndication/\" xmlns:admin=\"http://webns.net/mvcb/\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\">
|
|
<channel rdf:about=\"".$pref['siteurl']."\">
|
|
<title>".$tp->toRss($rss_title)."</title>
|
|
<link>".$pref['siteurl']."</link>
|
|
<description>".$tp->toRss($pref['sitedescription'])."</description>
|
|
<dc:language>".defset('CORE_LC').(defined("CORE_LC2") ? "-".CORE_LC2 : "")."</dc:language>
|
|
<dc:date>".$this->get_iso_8601_date($time). "</dc:date>
|
|
<dc:creator>".$this->nospam($pref['siteadminemail'])."</dc:creator>
|
|
<admin:generatorAgent rdf:resource=\"https://e107.org\" />
|
|
<admin:errorReportsTo rdf:resource=\"mailto:".$this->nospam($pref['siteadminemail'])."\" />
|
|
<sy:updatePeriod>hourly</sy:updatePeriod>
|
|
<sy:updateFrequency>1</sy:updateFrequency>
|
|
<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
|
|
<items>
|
|
<rdf:Seq>";
|
|
|
|
foreach($this -> rssItems as $value)
|
|
{ // Multi-language rss links.
|
|
$link = deftrue('e_LANQRY') ? str_replace("?","?".e_LANQRY,$value['link']) : $value['link'];
|
|
|
|
echo "
|
|
<rdf:li rdf:resource=\"".$link."\" />";
|
|
}
|
|
|
|
echo "
|
|
</rdf:Seq>
|
|
</items>
|
|
</channel>";
|
|
|
|
reset($this -> rssItems);
|
|
unset($link);
|
|
foreach($this -> rssItems as $value)
|
|
{
|
|
$link = deftrue('e_LANQRY') ? str_replace("?","?".e_LANQRY,$value['link']) : $value['link']; // Multi-language rss links.
|
|
|
|
echo "
|
|
<item rdf:about=\"".$link."\">
|
|
<title>".$tp->toRss($value['title'])."</title>
|
|
<link>".$link."</link>
|
|
<dc:date>".$this->get_iso_8601_date($time)."</dc:date>
|
|
<dc:creator>".$value['author']."</dc:creator>
|
|
<dc:subject>".$tp->toRss($value['category_name'])."</dc:subject>
|
|
<description>".$tp->toRss($value['description']). "</description>
|
|
</item>";
|
|
}
|
|
echo "
|
|
</rdf:RDF>";
|
|
break;
|
|
|
|
// Atom
|
|
case 4:
|
|
echo "<?xml version='1.0' encoding='utf-8'?".">\n
|
|
<feed xmlns='https://www.w3.org/2005/Atom'>\n";
|
|
/*
|
|
<feed version='0.3'
|
|
xmlns='http://purl.org/atom/ns#'
|
|
xmlns:dc='http://purl.org/dc/elements/1.1/'
|
|
xml:lang='".CORE_LC.(defined("CORE_LC2") ? "-".CORE_LC2 : "")."'>\n";
|
|
*/
|
|
// Required
|
|
echo "
|
|
<id>".$pref['siteurl']."</id>\n
|
|
<title type='text'>".$tp->toRss($rss_title)."</title>\n
|
|
<updated>".$this->get_iso_8601_date($time)."</updated>\n";
|
|
|
|
// Recommended
|
|
echo "
|
|
<author>\n
|
|
<name>e107</name>\n";
|
|
//<email></email>\n
|
|
echo "
|
|
<uri>https://e107.org/</uri>\n
|
|
</author>\n
|
|
<link rel='self' href='".$tp->toRss(e107::url('rss_menu','atom', array('rss_url'=>$this->contentType, 'rss_topicid'=>$this->topicid),'full'))."' />\n";
|
|
|
|
// Optional
|
|
// include(e_ADMIN."ver.php");
|
|
echo "
|
|
<category term='e107'/>\n
|
|
<contributor>\n
|
|
<name>e107</name>\n
|
|
</contributor>\n
|
|
<generator uri='https://e107.org/' version='".defset('e_VERSION')."'>e107</generator>\n";
|
|
//<icon>/icon.jpg</icon>\n
|
|
echo "
|
|
<logo>".(strpos(SITEBUTTON, "http:") !== false ? SITEBUTTON : SITEURL.str_replace("../", "", SITEBUTTON))."</logo>\n
|
|
<rights type='html'>".$pref['siteadmin']." - ".$this->nospam($pref['siteadminemail'])."</rights>\n";
|
|
if($pref['sitedescription']){
|
|
echo "
|
|
<subtitle type='text'>".$pref['sitedescription']."</subtitle>\n";
|
|
}
|
|
foreach($this -> rssItems as $value) {
|
|
echo "
|
|
<entry>\n";
|
|
|
|
// Required
|
|
echo "
|
|
<id>".$value['link']."</id>\n
|
|
<title type='text'>".$tp->toRss($value['title'])."</title>\n
|
|
<updated>".$this->get_iso_8601_date($value['pubdate'])."</updated>\n";
|
|
|
|
// Recommended
|
|
$author = ($value['author']) ? $value['author'] : "unknown";
|
|
|
|
echo "
|
|
<author>\n";
|
|
echo "
|
|
<name>".$author."</name>\n";
|
|
echo ($value['author_email']) ? "\t\t\t\t\t\t<email>".$this->nospam($value['author_email'])."</email>\n" : "";
|
|
echo "</author>\n";
|
|
//<content>complete story here</content>\n
|
|
echo "
|
|
<link rel='alternate' type='text/html' href='".$value['link']."' />\n
|
|
<summary type='text'>".$tp->toRss($tp->toText($value['description'])). "</summary>\n";
|
|
|
|
// Optional
|
|
if(!empty($value['category_name']))
|
|
{
|
|
echo "<category term='".$tp->toRss($value['category_name'])."'/>\n";
|
|
}
|
|
//<contributor>
|
|
// <name>Jane Doe</name>
|
|
//</contributor>
|
|
echo "<published>".$this->get_iso_8601_date($value['pubdate'])."</published>\n";
|
|
//<source>
|
|
// <id>http://example.org/</id>
|
|
// <title>Fourty-Two</title>
|
|
// <updated>2003-12-13T18:30:02Z</updated>
|
|
// <rights>© 2005 Example, Inc.</rights>
|
|
//</source>
|
|
//<rights type='html'>&copy; 2005 John Doe</rights>
|
|
echo "
|
|
</entry>\n";
|
|
}
|
|
echo "
|
|
</feed>\n";
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Build an XML Tag
|
|
* @param string $name
|
|
* @param array $attributes
|
|
* @param bool $closing
|
|
* @return string
|
|
*/
|
|
function buildTag($name='', $attributes=array())
|
|
{
|
|
$tp = e107::getParser();
|
|
|
|
if(empty($name))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
if(isset($attributes['value']))
|
|
{
|
|
$value = $attributes['value'];
|
|
unset($attributes['value']);
|
|
}
|
|
|
|
$text = "\n<".$name;
|
|
|
|
foreach($attributes as $att=>$attVal)
|
|
{
|
|
|
|
$text .= " ".$att."=\"".$tp->toRss($attVal)."\"";
|
|
}
|
|
|
|
$text .= ">";
|
|
|
|
if(!empty($value))
|
|
{
|
|
if(is_array($value))
|
|
{
|
|
foreach($value as $t=>$r)
|
|
{
|
|
$text .= $this->buildTag($t,$r);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
$text .= $tp->toRss($value);
|
|
}
|
|
|
|
}
|
|
|
|
$text .= "</".$name.">\n";
|
|
|
|
return $text;
|
|
}
|
|
|
|
|
|
|
|
|
|
function getmime($file)
|
|
{
|
|
$ext = strtolower(str_replace(".","",strrchr(basename($file), ".")));
|
|
$mime["mp3"] = "audio/mpeg";
|
|
return $mime[$ext];
|
|
}
|
|
|
|
function get_iso_8601_date($int_date)
|
|
{ //$int_date: current date in UNIX timestamp
|
|
$date_mod = date('Y-m-d\TH:i:s', $int_date);
|
|
$pre_timezone = date('O', $int_date);
|
|
$time_zone = substr($pre_timezone, 0, 3).":".substr($pre_timezone, 3, 2);
|
|
$date_mod .= $time_zone;
|
|
return $date_mod;
|
|
}
|
|
|
|
function nospam($text)
|
|
{
|
|
$tmp = explode("@",$text);
|
|
return ($tmp[0] != "") ? $tmp[0].RSS_LAN_2 : RSS_LAN_3;
|
|
}
|
|
} // End class rssCreate
|