- $query = $_SERVER["QUERY_STRING"];
- $cache = new pageCache(pageUrl(),startsWith($query,'do=rss') && !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(
- $GLOBALS['config']['DATASTORE'],
- isLoggedIn() || $GLOBALS['config']['OPEN_SHAARLI'],
- $GLOBALS['config']['HIDE_PUBLIC_LINKS']
- );
- // Read links from database (and filter private links if user it not logged in).
-
- // Optionally filter the results:
- $linksToDisplay=array();
- if (!empty($_GET['searchterm'])) $linksToDisplay = $LINKSDB->filterFulltext($_GET['searchterm']);
- else if (!empty($_GET['searchtags'])) $linksToDisplay = $LINKSDB->filterTags(trim($_GET['searchtags']));
- else $linksToDisplay = $LINKSDB;
-
- $nblinksToDisplay = 50; // Number of links to display.
- if (!empty($_GET['nb'])) // In URL, you can specificy the number of links. Example: nb=200 or nb=all for all links.
- {
- $nblinksToDisplay = $_GET['nb']=='all' ? count($linksToDisplay) : max($_GET['nb']+0,1) ;
- }
-
- $pageaddr=escape(indexUrl());
- echo '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">';
- echo '<channel><title>'.$GLOBALS['title'].'</title><link>'.$pageaddr.'</link>';
- echo '<description>Shared links</description><language>en-en</language><copyright>'.$pageaddr.'</copyright>'."\n\n";
- if (!empty($GLOBALS['config']['PUBSUBHUB_URL']))
- {
- echo '<!-- PubSubHubbub Discovery -->';
- echo '<link rel="hub" href="'.escape($GLOBALS['config']['PUBSUBHUB_URL']).'" xmlns="http://www.w3.org/2005/Atom" />';
- echo '<link rel="self" href="'.$pageaddr.'?do=rss" xmlns="http://www.w3.org/2005/Atom" />';
- echo '<!-- End Of PubSubHubbub Discovery -->';
- }
- $i=0;
- $keys=array(); foreach($linksToDisplay as $key=>$value) { $keys[]=$key; } // No, I can't use array_keys().
- while ($i<$nblinksToDisplay && $i<count($keys))
- {
- $link = $linksToDisplay[$keys[$i]];
- $guid = $pageaddr.'?'.smallHash($link['linkdate']);
- $rfc822date = linkdate2rfc822($link['linkdate']);
- $absurl = $link['url'];
- if (startsWith($absurl,'?')) $absurl=$pageaddr.$absurl; // make permalink URL absolute
- if ($usepermalinks===true)
- echo '<item><title>'.$link['title'].'</title><guid isPermaLink="true">'.$guid.'</guid><link>'.$guid.'</link>';
- else
- echo '<item><title>'.$link['title'].'</title><guid isPermaLink="false">'.$guid.'</guid><link>'.$absurl.'</link>';
- if (!$GLOBALS['config']['HIDE_TIMESTAMPS'] || isLoggedIn()) echo '<pubDate>'.escape($rfc822date)."</pubDate>\n";
- if ($link['tags']!='') // Adding tags to each RSS entry (as mentioned in RSS specification)
- {
- foreach(explode(' ',$link['tags']) as $tag) { echo '<category domain="'.$pageaddr.'">'.$tag.'</category>'."\n"; }
- }
-
- // Add permalink in description
- $descriptionlink = '(<a href="'.$guid.'">Permalink</a>)';
- // If user wants permalinks first, put the final link in description
- if ($usepermalinks===true) $descriptionlink = '(<a href="'.$absurl.'">Link</a>)';
- if (strlen($link['description'])>0) $descriptionlink = '<br>'.$descriptionlink;
- echo '<description><![CDATA['.nl2br(keepMultipleSpaces(text2clickable($link['description']))).$descriptionlink.']]></description>'."\n</item>\n";
- $i++;
- }
- echo '</channel></rss><!-- Cached version of '.escape(pageUrl()).' -->';
-
- $cache->cache(ob_get_contents());
- ob_end_flush();
- exit;
-}
-
-// ------------------------------------------------------------------------------------------
-// Output the last N links in ATOM format.
-function showATOM()
-{
- header('Content-Type: application/atom+xml; charset=utf-8');
-
- // $usepermalink : If true, use permalink instead of final link.
- // User just has to add 'permalink' in URL parameters. e.g. http://mysite.com/shaarli/?do=atom&permalinks
- $usepermalinks = isset($_GET['permalinks']) || !$GLOBALS['config']['ENABLE_RSS_PERMALINKS'];
-
- // Cache system
- $query = $_SERVER["QUERY_STRING"];
- $cache = new pageCache(pageUrl(),startsWith($query,'do=atom') && !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']['OPEN_SHAARLI'],
- $GLOBALS['config']['HIDE_PUBLIC_LINKS']