function showDailyRSS() { // Cache system $query = $_SERVER["QUERY_STRING"]; $cache = new CachedPage($GLOBALS['config']['PAGECACHE'], page_url($_SERVER), startsWith($query, 'do=dailyrss') && !isLoggedIn()); $cached = $cache->cachedVersion(); 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). $LINKSDB = new LinkDB($GLOBALS['config']['DATASTORE'], isLoggedIn(), $GLOBALS['config']['HIDE_PUBLIC_LINKS'], $GLOBALS['redirector']); /* Some Shaarlies may have very few links, so we need to look back in time (rsort()) until we have enough days ($nb_of_days). */ $linkdates = array(); foreach ($LINKSDB as $linkdate => $value) { $linkdates[] = $linkdate; } rsort($linkdates); $nb_of_days = 7; // We take 7 days. $today = Date('Ymd'); $days = array(); foreach ($linkdates as $linkdate) { $day = substr($linkdate, 0, 8); // Extract day (without time) if (strcmp($day, $today) < 0) { if (empty($days[$day])) { $days[$day] = array(); } $days[$day][] = $linkdate; } if (count($days) > $nb_of_days) { break; // Have we collected enough days? } } // Build the RSS feed. header('Content-Type: application/rss+xml; charset=utf-8'); $pageaddr = escape(index_url($_SERVER)); echo '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">'; echo '<channel>'; 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; // For each day. foreach ($days as $day => $linkdates) { $daydate = linkdate2timestamp($day . '_000000'); // Full text date $rfc822date = linkdate2rfc822($day . '_000000'); $absurl = escape(index_url($_SERVER) . '?do=daily&day=' . $day); // Absolute URL of the corresponding "Daily" page. // Build the HTML body of this RSS entry. $html = ''; $href = ''; $links = array(); // We pre-format some fields for proper output. foreach ($linkdates as $linkdate) { $l = $LINKSDB[$linkdate]; $l['formatedDescription'] = format_description($l['description'], $GLOBALS['redirector']); $l['thumbnail'] = thumbnail($l['url']); $l['timestamp'] = linkdate2timestamp($l['linkdate']); if (startsWith($l['url'], '?')) { $l['url'] = index_url($_SERVER) . $l['url']; // make permalink URL absolute } $links[$linkdate] = $l; } // Then build the HTML for this day: $tpl = new RainTPL(); $tpl->assign('title', $GLOBALS['title']); $tpl->assign('daydate', $daydate); $tpl->assign('absurl', $absurl); $tpl->assign('links', $links); $tpl->assign('rfc822date', escape($rfc822date)); $html = $tpl->draw('dailyrss', $return_string = true); echo $html . PHP_EOL; } echo '</channel></rss><!-- Cached version of ' . escape(page_url($_SERVER)) . ' -->'; $cache->cache(ob_get_contents()); ob_end_flush(); exit; }
function showMonthlyRSS() { // Cache system $query = $_SERVER["QUERY_STRING"]; $cache = new pageCache(pageUrl(), startsWith($query, 'do=weeklyrss') && !isLoggedIn()); $cached = $cache->cachedVersion(); if (!empty($cached)) { echo $cached; exit; } // If cached was not found (or not usable), then read the database and build the response: $LINKSDB = new linkdb(isLoggedIn() || $GLOBALS['config']['OPEN_SHAARLI']); // Read links from database (and filter private links if used it not logged in). /* Some Shaarlies may have very few links, so we need to look back in time (rsort()) until we have enough weeks ($nb_of_weeks). */ $linkdates = array(); foreach ($LINKSDB as $linkdate => $value) { $linkdates[] = $linkdate; } rsort($linkdates); $nb_of_days = 7; // We take 7 days. $today = Date('Ym'); $months = array(); foreach ($linkdates as $linkdate) { $day = substr($linkdate, 0, 6); // Extract day (without time) if (strcmp($day, $today) < 0) { if (empty($months[$day])) { $months[$day] = array(); } $months[$day][] = $linkdate; } if (count($months) > $nb_of_days) { break; } // Have we collected enough months ? } // Build the RSS feed. header('Content-Type: application/rss+xml; charset=utf-8'); $pageaddr = htmlspecialchars(indexUrl()); echo '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">'; echo '<channel><title>Monthly - ' . htmlspecialchars($GLOBALS['title']) . '</title><link>' . $pageaddr . '</link>'; echo '<description>Monthly shared links</description><language>en-en</language><copyright>' . $pageaddr . '</copyright>' . "\n"; foreach ($months as $month => $linkdates) { $monthdate = utf8_encode(strftime('%B %Y', linkdate2timestamp($month . '01_000000'))); // Full text date $rfc822date = linkdate2rfc822($month . '01_000000'); $absurl = htmlspecialchars(indexUrl() . '?do=monthly&month=' . $month); // Absolute URL of the corresponding "Daily" page. echo '<item><title>' . htmlspecialchars($GLOBALS['title'] . ' - ' . $monthdate) . '</title><guid>' . $absurl . '</guid><link>' . $absurl . '</link>'; echo '<pubDate>' . htmlspecialchars($rfc822date) . "</pubDate>\n"; // Build the HTML body of this RSS entry. $html = ''; $href = ''; $links = array(); $tags = array(); // We pre-format some fields for proper output. foreach ($linkdates as $linkdate) { $l = $LINKSDB[$linkdate]; $l['formatedDescription'] = nl2br(keepMultipleSpaces(text2clickable(htmlspecialchars($l['description'])))); $l['thumbnail'] = thumbnail($l['url']); $l['localdate'] = linkdate2locale($l['linkdate']); if (startsWith($l['url'], '?')) { $l['url'] = indexUrl() . $l['url']; } // make permalink URL absolute $links[$linkdate] = $l; $links[$linkdate]['taglist'] = explode(' ', $l['tags']); $tags = $l['tags']; } foreach ($tags as $itemtags) { $itemtags = explode(" ", $itemtags); foreach ($itemtags as $tag) { echo "<category>" . $tag . "</category>\n"; } } // Then build the HTML for this week: $tpl = new RainTPL(); $tpl->assign('links', $links); $html = $tpl->draw('weeklyrss', $return_string = true); echo "\n"; echo '<description><![CDATA[' . $html . ']]></description>' . "\n</item>\n\n"; } echo '</channel></rss>'; exit; }