xref: /dokuwiki/feed.php (revision f3f0262c480d7e509b008d37c90aed884532bba8)
1<?php
2  ini_set('short_open_tag',"1");
3  require_once("inc/common.php");
4  require_once("inc/parser.php");
5  require_once("inc/feedcreator.class.php");
6  require_once("inc/auth.php");
7
8  //set auth header for login
9  if($_REQUEST['login'] && !isset($_SERVER['PHP_AUTH_USER'])){
10    header('WWW-Authenticate: Basic realm="'.$conf['title'].'"');
11    header('HTTP/1.0 401 Unauthorized');
12    auth_logoff();
13  }
14
15
16  $num  = $_REQUEST['num'];
17  $type = $_REQUEST['type'];
18  $mode = $_REQUEST['mode'];
19  $ns   = $_REQUEST['ns'];
20
21  switch ($type){
22    case 'rss':
23       $type = 'RSS0.9';
24       break;
25    case 'rss2':
26       $type = 'RSS2.0';
27       break;
28    case 'atom':
29       $type = 'ATOM0.3';
30       break;
31    default:
32       $type = 'RSS1.0';
33  }
34
35  //some defaults for the feed
36  $CACHEGROUP = 'feed';
37  $conf['typography'] = false;
38  $conf['canonical']  = true;
39  $parser['toc']      = false;
40
41  $rss = new UniversalFeedCreator();
42  $rss = new DokuWikiFeedCreator();
43  $rss->title = $conf['title'];
44  $rss->link  = wl();
45  $rss->syndicationURL = getBaseURL().'/feed.php';
46  $rss->cssStyleSheet = getBaseURL().'/feed.css';
47
48  if($mode == 'list'){
49    rssListNamespace($rss,$ns);
50  }else{
51    rssRecentChanges($rss,$num);
52  }
53
54  header('Content-Type: application/xml; charset='.$lang['encoding']);
55  print $rss->createFeed($type,$lang['encoding']);
56
57
58
59/* some functions */
60
61function rssRecentChanges(&$rss,$num){
62
63  $recents = getRecents($num);
64  foreach(array_keys($recents) as $id){
65    $desc = cleanDesc(parsedWiki($id));
66    if(!empty($recents[$id]['sum'])){
67      $desc = '['.strip_tags($recents[$id]['sum']).'] '.$desc;
68    }
69    $item = new FeedItem();
70    $item->title       = $id;
71    $item->link        = wl($id,'rev='.$recents[$id]['date']);
72    $item->description = $desc;
73    $item->date        = date('r',$recents[$id]['date']);
74    if(strpos($id,':')!==false){
75      $item->category    = substr($id,0,strrpos($id,':'));
76    }
77    if($recents[$id]['user']){
78      $item->author = $recents[$id]['user'].'@';
79    }else{
80      $item->author = 'anonymous@';
81    }
82    $item->author  .= $recents[$id]['ip'];
83
84    $rss->addItem($item);
85  }
86}
87
88function rssListNamespace(&$rss,$ns){
89  require_once("inc/search.php");
90  global $conf;
91
92  $ns=':'.cleanID($ns);
93  $ns=str_replace(':','/',$ns);
94
95  $data = array();
96  sort($data);
97  search($data,$conf['datadir'],'search_list','',$ns);
98  foreach($data as $row){
99    $id = $row['id'];
100    $date = filemtime(wikiFN($id));
101    $desc = cleanDesc(parsedWiki($id));
102    $item = new FeedItem();
103    $item->title       = $id;
104    $item->link        = wl($id,'rev='.$date);
105    $item->description = $desc;
106    $item->date        = date('r',$date);
107    $rss->addItem($item);
108  }
109}
110
111function cleanDesc($desc){
112  //remove TOC
113  $desc = strip_tags($desc);
114  $desc = preg_replace('/[\n\r\t]/',' ',$desc);
115  $desc = preg_replace('/  /',' ',$desc);
116  $desc = substr($desc,0,250);
117  $desc = $desc.'...';
118  return $desc;
119}
120
121?>
122