Merge pull request #268 from ArthurHoaro/dailrss-template

Include the whole <item> in Daily RSS template
This commit is contained in:
VirtualTam 2015-07-11 19:09:52 +02:00
commit bba021defc
2 changed files with 74 additions and 48 deletions

View file

@ -859,14 +859,17 @@ function showATOM()
// Daily RSS feed: 1 RSS entry per day giving all the links on that day. // Daily RSS feed: 1 RSS entry per day giving all the links on that day.
// Gives the last 7 days (which have links). // Gives the last 7 days (which have links).
// This RSS feed cannot be filtered. // This RSS feed cannot be filtered.
function showDailyRSS() function showDailyRSS() {
{
// Cache system // Cache system
$query = $_SERVER["QUERY_STRING"]; $query = $_SERVER["QUERY_STRING"];
$cache = new pageCache(pageUrl(), startsWith($query, 'do=dailyrss') && !isLoggedIn()); $cache = new pageCache(pageUrl(), startsWith($query, 'do=dailyrss') && !isLoggedIn());
$cached = $cache->cachedVersion(); if (!empty($cached)) { echo $cached; exit; } $cached = $cache->cachedVersion();
// If cached was not found (or not usable), then read the database and build the response: if (!empty($cached)) {
echo $cached;
exit;
}
// If cached was not found (or not usable), then read the database and build the response:
// Read links from database (and filter private links if used it not logged in). // Read links from database (and filter private links if used it not logged in).
$LINKSDB = new LinkDB( $LINKSDB = new LinkDB(
$GLOBALS['config']['DATASTORE'], $GLOBALS['config']['DATASTORE'],
@ -877,58 +880,73 @@ function showDailyRSS()
/* Some Shaarlies may have very few links, so we need to look /* Some Shaarlies may have very few links, so we need to look
back in time (rsort()) until we have enough days ($nb_of_days). back in time (rsort()) until we have enough days ($nb_of_days).
*/ */
$linkdates=array(); foreach($LINKSDB as $linkdate=>$value) { $linkdates[]=$linkdate; } $linkdates = array();
foreach ($LINKSDB as $linkdate => $value) {
$linkdates[] = $linkdate;
}
rsort($linkdates); rsort($linkdates);
$nb_of_days = 7; // We take 7 days. $nb_of_days = 7; // We take 7 days.
$today = Date('Ymd'); $today = Date('Ymd');
$days = array(); $days = array();
foreach($linkdates as $linkdate)
{ foreach ($linkdates as $linkdate) {
$day = substr($linkdate, 0, 8); // Extract day (without time) $day = substr($linkdate, 0, 8); // Extract day (without time)
if (strcmp($day,$today)<0) if (strcmp($day,$today) < 0) {
{ if (empty($days[$day])) {
if (empty($days[$day])) $days[$day]=array(); $days[$day] = array();
}
$days[$day][] = $linkdate; $days[$day][] = $linkdate;
} }
if (count($days)>$nb_of_days) break; // Have we collected enough days?
if (count($days) > $nb_of_days) {
break; // Have we collected enough days?
}
} }
// Build the RSS feed. // Build the RSS feed.
header('Content-Type: application/rss+xml; charset=utf-8'); header('Content-Type: application/rss+xml; charset=utf-8');
$pageaddr = escape(indexUrl()); $pageaddr = escape(indexUrl());
echo '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">'; echo '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">';
echo '<channel><title>Daily - '.$GLOBALS['title'].'</title><link>'.$pageaddr.'</link>'; echo '<channel>';
echo '<description>Daily shared links</description><language>en-en</language><copyright>'.$pageaddr.'</copyright>'."\n"; echo '<title>Daily - '. $GLOBALS['title'] . '</title>';
echo '<link>'. $pageaddr .'</link>';
echo '<description>Daily shared links</description>';
echo '<language>en-en</language>';
echo '<copyright>'. $pageaddr .'</copyright>'. PHP_EOL;
foreach($days as $day=>$linkdates) // For each day. // For each day.
{ foreach ($days as $day => $linkdates) {
$daydate = utf8_encode(strftime('%A %d, %B %Y',linkdate2timestamp($day.'_000000'))); // Full text date $daydate = linkdate2timestamp($day.'_000000'); // Full text date
$rfc822date = linkdate2rfc822($day.'_000000'); $rfc822date = linkdate2rfc822($day.'_000000');
$absurl = escape(indexUrl().'?do=daily&day='.$day); // Absolute URL of the corresponding "Daily" page. $absurl = escape(indexUrl().'?do=daily&day='.$day); // Absolute URL of the corresponding "Daily" page.
echo '<item><title>'.$GLOBALS['title'].' - '.$daydate.'</title><guid>'.$absurl.'</guid><link>'.$absurl.'</link>';
echo '<pubDate>'.escape($rfc822date)."</pubDate>";
// Build the HTML body of this RSS entry. // Build the HTML body of this RSS entry.
$html = ''; $html = '';
$href = ''; $href = '';
$links = array(); $links = array();
// We pre-format some fields for proper output. // We pre-format some fields for proper output.
foreach($linkdates as $linkdate) foreach ($linkdates as $linkdate) {
{
$l = $LINKSDB[$linkdate]; $l = $LINKSDB[$linkdate];
$l['formatedDescription'] = nl2br(keepMultipleSpaces(text2clickable($l['description']))); $l['formatedDescription'] = nl2br(keepMultipleSpaces(text2clickable($l['description'])));
$l['thumbnail'] = thumbnail($l['url']); $l['thumbnail'] = thumbnail($l['url']);
$l['timestamp'] = linkdate2timestamp($l['linkdate']); $l['timestamp'] = linkdate2timestamp($l['linkdate']);
if (startsWith($l['url'],'?')) $l['url']=indexUrl().$l['url']; // make permalink URL absolute if (startsWith($l['url'], '?')) {
$l['url'] = indexUrl() . $l['url']; // make permalink URL absolute
}
$links[$linkdate] = $l; $links[$linkdate] = $l;
} }
// Then build the HTML for this day: // Then build the HTML for this day:
$tpl = new RainTPL; $tpl = new RainTPL;
$tpl->assign('title', $GLOBALS['title']);
$tpl->assign('daydate', $daydate);
$tpl->assign('absurl', $absurl);
$tpl->assign('links', $links); $tpl->assign('links', $links);
$tpl->assign('rfc822date', escape($rfc822date));
$html = $tpl->draw('dailyrss', $return_string=true); $html = $tpl->draw('dailyrss', $return_string=true);
echo "\n";
echo '<description><![CDATA['.$html.']]></description>'."\n</item>\n\n";
echo $html . PHP_EOL;
} }
echo '</channel></rss><!-- Cached version of '. escape(pageUrl()) .' -->'; echo '</channel></rss><!-- Cached version of '. escape(pageUrl()) .' -->';

View file

@ -1,3 +1,9 @@
<item>
<title>{$title} - {function="strftime('%A %e %B %Y', $daydate)"}</title>
<guid>{$absurl}</guid>
<link>{$absurl}</link>
<pubDate>{$rfc822date}</pubDate>
<description><![CDATA[
{loop="links"} {loop="links"}
<h3><a href="{$value.url}">{$value.title}</a></h3> <h3><a href="{$value.url}">{$value.title}</a></h3>
<small>{if="!$GLOBALS['config']['HIDE_TIMESTAMPS']"}{function="strftime('%c', $value.timestamp)"} - {/if}{if="$value.tags"}{$value.tags}{/if}<br> <small>{if="!$GLOBALS['config']['HIDE_TIMESTAMPS']"}{function="strftime('%c', $value.timestamp)"} - {/if}{if="$value.tags"}{$value.tags}{/if}<br>
@ -6,3 +12,5 @@ <h3><a href="{$value.url}">{$value.title}</a></h3>
{if="$value.description"}{$value.formatedDescription}{/if} {if="$value.description"}{$value.formatedDescription}{/if}
<br><br><hr> <br><br><hr>
{/loop} {/loop}
]]></description>
</item>