141 lines
4.4 KiB
PHP
141 lines
4.4 KiB
PHP
<?php
|
|
/*
|
|
* Sakura News Page
|
|
*/
|
|
|
|
// Declare Namespace
|
|
namespace Sakura;
|
|
|
|
// Use DOMDocument
|
|
use DOMDocument;
|
|
|
|
// Include components
|
|
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) .'_sakura/sakura.php';
|
|
|
|
// Add page specific things
|
|
$renderData['newsPosts'] = Main::getNewsPosts((isset($_GET['id']) && !isset($_GET['xml']) && is_numeric($_GET['id'])) ? $_GET['id'] : null, (isset($_GET['id']) && !isset($_GET['xml']) && is_numeric($_GET['id'])));
|
|
|
|
$renderData['page'] = [
|
|
|
|
'view_post' => isset($_GET['id']) && count($renderData['newsPosts']),
|
|
'currentPage' => 0
|
|
|
|
];
|
|
|
|
// News XML feed
|
|
if(isset($_GET['xml'])) {
|
|
|
|
// Meta data attributes
|
|
$metaData = [
|
|
|
|
'title' => ($_FEED_TITLE = Configuration::getConfig('sitename')) .' News',
|
|
'link' => ($_FEED_URL = 'http://'. Configuration::getConfig('url_main')),
|
|
'description' => 'News about '. $_FEED_TITLE,
|
|
'language' => 'en-gb',
|
|
'webMaster' => (new User(1))->data['email'] .' ('. $_FEED_TITLE .' Webmaster)',
|
|
'pubDate' => ($_FEED_DATE = date('r', $renderData['newsPosts'][0]['date'])),
|
|
'lastBuildDate' => $_FEED_DATE
|
|
|
|
];
|
|
|
|
// Item attributes
|
|
$itemData = [
|
|
|
|
'title' => ['text' => '{EVAL}', 'eval' => '$newsPost["title"]'],
|
|
'link' => ['text' => $_FEED_URL .'/news/{EVAL}', 'eval' => '$newsPost["id"]'],
|
|
'guid' => ['text' => $_FEED_URL .'/news/{EVAL}', 'eval' => '$newsPost["id"]'],
|
|
'pubDate' => ['text' => '{EVAL}', 'eval' => 'date("D, d M Y G:i:s O", $newsPost["date"])'],
|
|
'dc:publisher' => ['text' => '{EVAL}', 'eval' => '$newsPost["udata"]["username"]'],
|
|
'description' => ['cdata' => '{EVAL}', 'eval' => '$newsPost["parsed"]']
|
|
|
|
];
|
|
|
|
// Create a new DOM document
|
|
$feed = new DOMDocument('1.0', 'utf-8');
|
|
|
|
// Create the RSS element
|
|
$fRss = $feed->createElement('rss');
|
|
|
|
// Set attributes
|
|
$fRss->setAttribute('version', '2.0');
|
|
$fRss->setAttribute('xmlns:atom', 'http://www.w3.org/2005/Atom');
|
|
$fRss->setAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1');
|
|
|
|
// Create the channel element
|
|
$fChannel = $feed->createElement('channel');
|
|
|
|
// Build meta elements
|
|
foreach($metaData as $name => $value) {
|
|
|
|
// Create the elements
|
|
$mElem = $feed->createElement($name);
|
|
$mElemText = $feed->createTextNode($value);
|
|
|
|
// Append them
|
|
$mElem ->appendChild($mElemText);
|
|
$fChannel ->appendChild($mElem);
|
|
|
|
// Unset the working vars
|
|
unset($mElem);
|
|
unset($mElemText);
|
|
|
|
}
|
|
|
|
// Add all the posts
|
|
foreach($renderData['newsPosts'] as $newsPost) {
|
|
|
|
// Create item element
|
|
$fPost = $feed->createElement('item');
|
|
|
|
// Create post attributes
|
|
foreach($itemData as $tag => $valueData) {
|
|
|
|
// Create the element
|
|
$pElem = $feed->createElement($tag);
|
|
|
|
// Create value
|
|
eval('$value = '. $valueData['eval'] .';');
|
|
$value = str_replace('{EVAL}', $value, $valueData[(array_key_exists('cdata', $valueData) ? 'cdata' : 'text')]);
|
|
|
|
// Create text node or cdata container
|
|
$pElemText = (array_key_exists('cdata', $valueData)) ? $feed->createCDATASection($value) : $feed->createTextNode($value);
|
|
|
|
// Append them
|
|
$pElem ->appendChild($pElemText);
|
|
$fPost ->appendChild($pElem);
|
|
|
|
// Unset the working vars
|
|
unset($pElem);
|
|
unset($pElemText);
|
|
unset($value);
|
|
|
|
}
|
|
|
|
// Append the item to the channel
|
|
$fChannel->appendChild($fPost);
|
|
|
|
}
|
|
|
|
// Append the channel element to RSS
|
|
$fRss->appendChild($fChannel);
|
|
|
|
// Append the RSS element to the DOM
|
|
$feed->appendChild($fRss);
|
|
|
|
// Return the feed
|
|
print $feed->saveXML();
|
|
exit;
|
|
|
|
}
|
|
|
|
// If we're not using the XML feed and we're not viewing a single post create pages
|
|
if(!isset($_GET['id'])) {
|
|
|
|
// Create the current page
|
|
$renderData['newsPosts'] = array_chunk($renderData['newsPosts'], Configuration::getConfig('news_posts_per_page'), true);
|
|
$renderData['page']['currentPage'] = isset($_GET['page']) && ($_GET['page'] - 1) >= 0 ? $_GET['page'] - 1 : 0;
|
|
|
|
}
|
|
|
|
// Print page contents
|
|
print Templates::render('main/news.tpl', $renderData);
|