diff options
Diffstat (limited to 'feed.php')
-rw-r--r-- | feed.php | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/feed.php b/feed.php new file mode 100644 index 000000000..66d694f53 --- /dev/null +++ b/feed.php @@ -0,0 +1,121 @@ +<?php + ini_set('short_open_tag',"1"); + require_once("inc/common.php"); + require_once("inc/parser.php"); + require_once("inc/feedcreator.class.php"); + require_once("inc/auth.php"); + + //set auth header for login + if($_REQUEST['login'] && !isset($_SERVER['PHP_AUTH_USER'])){ + header('WWW-Authenticate: Basic realm="'.$conf['title'].'"'); + header('HTTP/1.0 401 Unauthorized'); + auth_logoff(); + } + + + $num = $_REQUEST['num']; + $type = $_REQUEST['type']; + $mode = $_REQUEST['mode']; + $ns = $_REQUEST['ns']; + + switch ($type){ + case 'rss': + $type = 'RSS0.9'; + break; + case 'rss2': + $type = 'RSS2.0'; + break; + case 'atom': + $type = 'ATOM0.3'; + break; + default: + $type = 'RSS1.0'; + } + + //some defaults for the feed + $CACHEGROUP = 'feed'; + $conf['typography'] = false; + $conf['canonical'] = true; + $parser['toc'] = false; + + $rss = new UniversalFeedCreator(); + $rss = new DokuWikiFeedCreator(); + $rss->title = $conf['title']; + $rss->link = wl(); + $rss->syndicationURL = getBaseURL().'/feed.php'; + $rss->cssStyleSheet = getBaseURL().'/feed.css'; + + if($mode == 'list'){ + rssListNamespace($rss,$ns); + }else{ + rssRecentChanges($rss,$num); + } + + header('Content-Type: application/xml; charset='.$lang['encoding']); + print $rss->createFeed($type,$lang['encoding']); + + + +/* some functions */ + +function rssRecentChanges(&$rss,$num){ + + $recents = getRecents($num); + foreach(array_keys($recents) as $id){ + $desc = cleanDesc(parsedWiki($id)); + if(!empty($recents[$id]['sum'])){ + $desc = '['.strip_tags($recents[$id]['sum']).'] '.$desc; + } + $item = new FeedItem(); + $item->title = $id; + $item->link = wl($id,'rev='.$recents[$id]['date']); + $item->description = $desc; + $item->date = date('r',$recents[$id]['date']); + if(strpos($id,':')!==false){ + $item->category = substr($id,0,strrpos($id,':')); + } + if($recents[$id]['user']){ + $item->author = $recents[$id]['user'].'@'; + }else{ + $item->author = 'anonymous@'; + } + $item->author .= $recents[$id]['ip']; + + $rss->addItem($item); + } +} + +function rssListNamespace(&$rss,$ns){ + require_once("inc/search.php"); + global $conf; + + $ns=':'.cleanID($ns); + $ns=str_replace(':','/',$ns); + + $data = array(); + sort($data); + search($data,$conf['datadir'],'search_list','',$ns); + foreach($data as $row){ + $id = $row['id']; + $date = filemtime(wikiFN($id)); + $desc = cleanDesc(parsedWiki($id)); + $item = new FeedItem(); + $item->title = $id; + $item->link = wl($id,'rev='.$date); + $item->description = $desc; + $item->date = date('r',$date); + $rss->addItem($item); + } +} + +function cleanDesc($desc){ + //remove TOC + $desc = strip_tags($desc); + $desc = preg_replace('/[\n\r\t]/',' ',$desc); + $desc = preg_replace('/ /',' ',$desc); + $desc = substr($desc,0,250); + $desc = $desc.'...'; + return $desc; +} + +?> |