diff options
author | VirtualTam <tamisier.aurelien@gmail.com> | 2015-07-11 19:09:52 +0200 |
---|---|---|
committer | VirtualTam <tamisier.aurelien@gmail.com> | 2015-07-11 19:09:52 +0200 |
commit | bba021defce15184c986d5e3db138bdbdd4df5d5 (patch) | |
tree | b494366fee211dcb492ce8cb9b96ec6383c2f7c1 /index.php | |
parent | 1b73f35ebf690cdbc60e6e3423d9347634a841bd (diff) | |
parent | f3b8f9f0f80a05739756fb05cbec403011c46607 (diff) | |
download | Shaarli-bba021defce15184c986d5e3db138bdbdd4df5d5.tar.gz Shaarli-bba021defce15184c986d5e3db138bdbdd4df5d5.tar.zst Shaarli-bba021defce15184c986d5e3db138bdbdd4df5d5.zip |
Merge pull request #268 from ArthurHoaro/dailrss-template
Include the whole <item> in Daily RSS template
Diffstat (limited to 'index.php')
-rw-r--r-- | index.php | 100 |
1 files changed, 59 insertions, 41 deletions
@@ -859,15 +859,18 @@ function showATOM() | |||
859 | // Daily RSS feed: 1 RSS entry per day giving all the links on that day. | 859 | // Daily RSS feed: 1 RSS entry per day giving all the links on that day. |
860 | // Gives the last 7 days (which have links). | 860 | // Gives the last 7 days (which have links). |
861 | // This RSS feed cannot be filtered. | 861 | // This RSS feed cannot be filtered. |
862 | function showDailyRSS() | 862 | function showDailyRSS() { |
863 | { | ||
864 | // Cache system | 863 | // Cache system |
865 | $query = $_SERVER["QUERY_STRING"]; | 864 | $query = $_SERVER["QUERY_STRING"]; |
866 | $cache = new pageCache(pageUrl(),startsWith($query,'do=dailyrss') && !isLoggedIn()); | 865 | $cache = new pageCache(pageUrl(), startsWith($query, 'do=dailyrss') && !isLoggedIn()); |
867 | $cached = $cache->cachedVersion(); if (!empty($cached)) { echo $cached; exit; } | 866 | $cached = $cache->cachedVersion(); |
868 | // If cached was not found (or not usable), then read the database and build the response: | 867 | if (!empty($cached)) { |
868 | echo $cached; | ||
869 | exit; | ||
870 | } | ||
869 | 871 | ||
870 | // Read links from database (and filter private links if used it not logged in). | 872 | // If cached was not found (or not usable), then read the database and build the response: |
873 | // Read links from database (and filter private links if used it not logged in). | ||
871 | $LINKSDB = new LinkDB( | 874 | $LINKSDB = new LinkDB( |
872 | $GLOBALS['config']['DATASTORE'], | 875 | $GLOBALS['config']['DATASTORE'], |
873 | isLoggedIn() || $GLOBALS['config']['OPEN_SHAARLI'], | 876 | isLoggedIn() || $GLOBALS['config']['OPEN_SHAARLI'], |
@@ -877,60 +880,75 @@ function showDailyRSS() | |||
877 | /* Some Shaarlies may have very few links, so we need to look | 880 | /* Some Shaarlies may have very few links, so we need to look |
878 | back in time (rsort()) until we have enough days ($nb_of_days). | 881 | back in time (rsort()) until we have enough days ($nb_of_days). |
879 | */ | 882 | */ |
880 | $linkdates=array(); foreach($LINKSDB as $linkdate=>$value) { $linkdates[]=$linkdate; } | 883 | $linkdates = array(); |
884 | foreach ($LINKSDB as $linkdate => $value) { | ||
885 | $linkdates[] = $linkdate; | ||
886 | } | ||
881 | rsort($linkdates); | 887 | rsort($linkdates); |
882 | $nb_of_days=7; // We take 7 days. | 888 | $nb_of_days = 7; // We take 7 days. |
883 | $today=Date('Ymd'); | 889 | $today = Date('Ymd'); |
884 | $days=array(); | 890 | $days = array(); |
885 | foreach($linkdates as $linkdate) | 891 | |
886 | { | 892 | foreach ($linkdates as $linkdate) { |
887 | $day=substr($linkdate,0,8); // Extract day (without time) | 893 | $day = substr($linkdate, 0, 8); // Extract day (without time) |
888 | if (strcmp($day,$today)<0) | 894 | if (strcmp($day,$today) < 0) { |
889 | { | 895 | if (empty($days[$day])) { |
890 | if (empty($days[$day])) $days[$day]=array(); | 896 | $days[$day] = array(); |
891 | $days[$day][]=$linkdate; | 897 | } |
898 | $days[$day][] = $linkdate; | ||
899 | } | ||
900 | |||
901 | if (count($days) > $nb_of_days) { | ||
902 | break; // Have we collected enough days? | ||
892 | } | 903 | } |
893 | if (count($days)>$nb_of_days) break; // Have we collected enough days? | ||
894 | } | 904 | } |
895 | 905 | ||
896 | // Build the RSS feed. | 906 | // Build the RSS feed. |
897 | header('Content-Type: application/rss+xml; charset=utf-8'); | 907 | header('Content-Type: application/rss+xml; charset=utf-8'); |
898 | $pageaddr=escape(indexUrl()); | 908 | $pageaddr = escape(indexUrl()); |
899 | echo '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">'; | 909 | echo '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">'; |
900 | echo '<channel><title>Daily - '.$GLOBALS['title'].'</title><link>'.$pageaddr.'</link>'; | 910 | echo '<channel>'; |
901 | echo '<description>Daily shared links</description><language>en-en</language><copyright>'.$pageaddr.'</copyright>'."\n"; | 911 | echo '<title>Daily - '. $GLOBALS['title'] . '</title>'; |
902 | 912 | echo '<link>'. $pageaddr .'</link>'; | |
903 | foreach($days as $day=>$linkdates) // For each day. | 913 | echo '<description>Daily shared links</description>'; |
904 | { | 914 | echo '<language>en-en</language>'; |
905 | $daydate = utf8_encode(strftime('%A %d, %B %Y',linkdate2timestamp($day.'_000000'))); // Full text date | 915 | echo '<copyright>'. $pageaddr .'</copyright>'. PHP_EOL; |
916 | |||
917 | // For each day. | ||
918 | foreach ($days as $day => $linkdates) { | ||
919 | $daydate = linkdate2timestamp($day.'_000000'); // Full text date | ||
906 | $rfc822date = linkdate2rfc822($day.'_000000'); | 920 | $rfc822date = linkdate2rfc822($day.'_000000'); |
907 | $absurl=escape(indexUrl().'?do=daily&day='.$day); // Absolute URL of the corresponding "Daily" page. | 921 | $absurl = escape(indexUrl().'?do=daily&day='.$day); // Absolute URL of the corresponding "Daily" page. |
908 | echo '<item><title>'.$GLOBALS['title'].' - '.$daydate.'</title><guid>'.$absurl.'</guid><link>'.$absurl.'</link>'; | ||
909 | echo '<pubDate>'.escape($rfc822date)."</pubDate>"; | ||
910 | 922 | ||
911 | // Build the HTML body of this RSS entry. | 923 | // Build the HTML body of this RSS entry. |
912 | $html=''; | 924 | $html = ''; |
913 | $href=''; | 925 | $href = ''; |
914 | $links=array(); | 926 | $links = array(); |
927 | |||
915 | // We pre-format some fields for proper output. | 928 | // We pre-format some fields for proper output. |
916 | foreach($linkdates as $linkdate) | 929 | foreach ($linkdates as $linkdate) { |
917 | { | ||
918 | $l = $LINKSDB[$linkdate]; | 930 | $l = $LINKSDB[$linkdate]; |
919 | $l['formatedDescription']=nl2br(keepMultipleSpaces(text2clickable($l['description']))); | 931 | $l['formatedDescription'] = nl2br(keepMultipleSpaces(text2clickable($l['description']))); |
920 | $l['thumbnail'] = thumbnail($l['url']); | 932 | $l['thumbnail'] = thumbnail($l['url']); |
921 | $l['timestamp'] = linkdate2timestamp($l['linkdate']); | 933 | $l['timestamp'] = linkdate2timestamp($l['linkdate']); |
922 | if (startsWith($l['url'],'?')) $l['url']=indexUrl().$l['url']; // make permalink URL absolute | 934 | if (startsWith($l['url'], '?')) { |
923 | $links[$linkdate]=$l; | 935 | $l['url'] = indexUrl() . $l['url']; // make permalink URL absolute |
936 | } | ||
937 | $links[$linkdate] = $l; | ||
924 | } | 938 | } |
939 | |||
925 | // Then build the HTML for this day: | 940 | // Then build the HTML for this day: |
926 | $tpl = new RainTPL; | 941 | $tpl = new RainTPL; |
927 | $tpl->assign('links',$links); | 942 | $tpl->assign('title', $GLOBALS['title']); |
928 | $html = $tpl->draw('dailyrss',$return_string=true); | 943 | $tpl->assign('daydate', $daydate); |
929 | echo "\n"; | 944 | $tpl->assign('absurl', $absurl); |
930 | echo '<description><![CDATA['.$html.']]></description>'."\n</item>\n\n"; | 945 | $tpl->assign('links', $links); |
946 | $tpl->assign('rfc822date', escape($rfc822date)); | ||
947 | $html = $tpl->draw('dailyrss', $return_string=true); | ||
931 | 948 | ||
949 | echo $html . PHP_EOL; | ||
932 | } | 950 | } |
933 | echo '</channel></rss><!-- Cached version of '.escape(pageUrl()).' -->'; | 951 | echo '</channel></rss><!-- Cached version of '. escape(pageUrl()) .' -->'; |
934 | 952 | ||
935 | $cache->cache(ob_get_contents()); | 953 | $cache->cache(ob_get_contents()); |
936 | ob_end_flush(); | 954 | ob_end_flush(); |