From f9aa73bff850a3d60a1f3df02e5e97741051bc60 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 24 Jun 2012 14:59:43 +0200 Subject: code cleanup --- feed.php | 340 ++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 183 insertions(+), 157 deletions(-) (limited to 'feed.php') diff --git a/feed.php b/feed.php index 98d5ef2e8..a54c30978 100644 --- a/feed.php +++ b/feed.php @@ -4,9 +4,11 @@ * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Andreas Gohr + * + * @global array $conf */ -if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/'); +if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/'); require_once(DOKU_INC.'inc/init.php'); //close session @@ -17,8 +19,8 @@ $opt = rss_parseOptions(); // the feed is dynamic - we need a cache for each combo // (but most people just use the default feed so it's still effective) -$cache = getCacheName(join('',array_values($opt)).$_SERVER['REMOTE_USER'],'.feed'); -$key = join('', array_values($opt)) . $_SERVER['REMOTE_USER']; +$cache = getCacheName(join('', array_values($opt)).$_SERVER['REMOTE_USER'], '.feed'); +$key = join('', array_values($opt)).$_SERVER['REMOTE_USER']; $cache = new cache($key, '.feed'); // prepare cache depends @@ -39,34 +41,36 @@ if($cache->useCache($depends)) { exit; } else { http_conditionalRequest(time()); - } +} // create new feed -$rss = new DokuWikiFeedCreator(); -$rss->title = $conf['title'].(($opt['namespace']) ? ' '.$opt['namespace'] : ''); -$rss->link = DOKU_URL; +$rss = new DokuWikiFeedCreator(); +$rss->title = $conf['title'].(($opt['namespace']) ? ' '.$opt['namespace'] : ''); +$rss->link = DOKU_URL; $rss->syndicationURL = DOKU_URL.'feed.php'; $rss->cssStyleSheet = DOKU_URL.'lib/exe/css.php?s=feed'; -$image = new FeedImage(); +$image = new FeedImage(); $image->title = $conf['title']; -$image->url = tpl_getMediaFile('favicon.ico', true); -$image->link = DOKU_URL; -$rss->image = $image; - -$data = null; -$modes = array('list' => 'rssListNamespace', - 'search' => 'rssSearch', - 'recent' => 'rssRecentChanges'); -if (isset($modes[$opt['feed_mode']])) { +$image->url = tpl_getMediaFile('favicon.ico', true); +$image->link = DOKU_URL; +$rss->image = $image; + +$data = null; +$modes = array( + 'list' => 'rssListNamespace', + 'search' => 'rssSearch', + 'recent' => 'rssRecentChanges' +); +if(isset($modes[$opt['feed_mode']])) { $data = $modes[$opt['feed_mode']]($opt); } else { $eventData = array( 'opt' => &$opt, 'data' => &$data, ); - $event = new Doku_Event('FEED_MODE_UNKNOWN', $eventData); - if ($event->advise_before(true)) { + $event = new Doku_Event('FEED_MODE_UNKNOWN', $eventData); + if($event->advise_before(true)) { echo sprintf('Unknown feed mode %s', hsc($opt['feed_mode'])); exit; } @@ -74,7 +78,7 @@ if (isset($modes[$opt['feed_mode']])) { } rss_buildItems($rss, $data, $opt); -$feed = $rss->createFeed($opt['feed_type'],'utf-8'); +$feed = $rss->createFeed($opt['feed_type'], 'utf-8'); // save cachefile $cache->storeCache($feed); @@ -89,51 +93,55 @@ print $feed; * * @author Andreas Gohr */ -function rss_parseOptions(){ +function rss_parseOptions() { global $conf; $opt = array(); foreach(array( - // Basic feed properties - // Plugins may probably want to add new values to these - // properties for implementing own feeds - - // One of: list, search, recent - 'feed_mode' => array('mode', 'recent'), - // One of: diff, page, rev, current - 'link_to' => array('linkto', $conf['rss_linkto']), - // One of: abstract, diff, htmldiff, html - 'item_content' => array('content', $conf['rss_content']), - - // Special feed properties - // These are only used by certain feed_modes - - // String, used for feed title, in list and rc mode - 'namespace' => array('ns', null), - // Positive integer, only used in rc mode - 'items' => array('num', $conf['recent']), - // Boolean, only used in rc mode - 'show_minor' => array('minor', false), - // String, only used in search mode - 'search_query' => array('q', null), - // One of: pages, media, both - 'content_type' => array('view', $conf['rss_media']) - - ) as $name => $val) { + // Basic feed properties + // Plugins may probably want to add new values to these + // properties for implementing own feeds + + // One of: list, search, recent + 'feed_mode' => array('mode', 'recent'), + // One of: diff, page, rev, current + 'link_to' => array('linkto', $conf['rss_linkto']), + // One of: abstract, diff, htmldiff, html + 'item_content' => array('content', $conf['rss_content']), + + // Special feed properties + // These are only used by certain feed_modes + + // String, used for feed title, in list and rc mode + 'namespace' => array('ns', null), + // Positive integer, only used in rc mode + 'items' => array('num', $conf['recent']), + // Boolean, only used in rc mode + 'show_minor' => array('minor', false), + // String, only used in search mode + 'search_query' => array('q', null), + // One of: pages, media, both + 'content_type' => array('view', $conf['rss_media']) + + ) as $name => $val) { $opt[$name] = (isset($_REQUEST[$val[0]]) && !empty($_REQUEST[$val[0]])) - ? $_REQUEST[$val[0]] : $val[1]; + ? $_REQUEST[$val[0]] : $val[1]; } - $opt['items'] = max(0, (int) $opt['items']); - $opt['show_minor'] = (bool) $opt['show_minor']; + $opt['items'] = max(0, (int) $opt['items']); + $opt['show_minor'] = (bool) $opt['show_minor']; - $opt['guardmail'] = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none'); + $opt['guardmail'] = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none'); - $type = valid_input_set('type', array('rss','rss2','atom','atom1','rss1', - 'default' => $conf['rss_type']), - $_REQUEST); - switch ($type){ + $type = valid_input_set( + 'type', array( + 'rss', 'rss2', 'atom', 'atom1', 'rss1', + 'default' => $conf['rss_type'] + ), + $_REQUEST + ); + switch($type) { case 'rss': $opt['feed_type'] = 'RSS0.91'; $opt['mime_type'] = 'text/xml'; @@ -166,26 +174,27 @@ function rss_parseOptions(){ * Add recent changed pages to a feed object * * @author Andreas Gohr - * @param object $rss - the FeedCreator Object - * @param array $data - the items to add - * @param array $opt - the feed options + * @param FeedCreator $rss the FeedCreator Object + * @param array $data the items to add + * @param array $opt the feed options */ -function rss_buildItems(&$rss,&$data,$opt){ +function rss_buildItems(&$rss, &$data, $opt) { global $conf; global $lang; + /* @var auth_basic $auth */ global $auth; $eventData = array( - 'rss' => &$rss, + 'rss' => &$rss, 'data' => &$data, - 'opt' => &$opt, + 'opt' => &$opt, ); - $event = new Doku_Event('FEED_DATA_PROCESS', $eventData); - if ($event->advise_before(false)){ - foreach($data as $ditem){ - if(!is_array($ditem)){ + $event = new Doku_Event('FEED_DATA_PROCESS', $eventData); + if($event->advise_before(false)) { + foreach($data as $ditem) { + if(!is_array($ditem)) { // not an array? then only a list of IDs was given - $ditem = array( 'id' => $ditem ); + $ditem = array('id' => $ditem); } $item = new FeedItem(); @@ -195,88 +204,104 @@ function rss_buildItems(&$rss,&$data,$opt){ } // add date - if($ditem['date']){ + if($ditem['date']) { $date = $ditem['date']; - }elseif($meta['date']['modified']){ + } elseif($meta['date']['modified']) { $date = $meta['date']['modified']; - }else{ + } else { $date = @filemtime(wikiFN($id)); } - if($date) $item->date = date('r',$date); + if($date) $item->date = date('r', $date); // add title - if($conf['useheading'] && $meta['title']){ + if($conf['useheading'] && $meta['title']) { $item->title = $meta['title']; - }else{ + } else { $item->title = $ditem['id']; } - if($conf['rss_show_summary'] && !empty($ditem['sum'])){ + if($conf['rss_show_summary'] && !empty($ditem['sum'])) { $item->title .= ' - '.strip_tags($ditem['sum']); } // add item link - switch ($opt['link_to']){ + switch($opt['link_to']) { case 'page': - if ($ditem['media']) { - $item->link = media_managerURL(array('image' => $id, - 'ns' => getNS($id), - 'rev' => $date), '&', true); + if($ditem['media']) { + $item->link = media_managerURL( + array( + 'image' => $id, + 'ns' => getNS($id), + 'rev' => $date + ), '&', true + ); } else { - $item->link = wl($id,'rev='.$date,true,'&', true); + $item->link = wl($id, 'rev='.$date, true, '&', true); } break; case 'rev': - if ($ditem['media']) { - $item->link = media_managerURL(array('image' => $id, - 'ns' => getNS($id), - 'rev' => $date, - 'tab_details' => 'history'), '&', true); + if($ditem['media']) { + $item->link = media_managerURL( + array( + 'image' => $id, + 'ns' => getNS($id), + 'rev' => $date, + 'tab_details' => 'history' + ), '&', true + ); } else { - $item->link = wl($id,'do=revisions&rev='.$date,true,'&'); + $item->link = wl($id, 'do=revisions&rev='.$date, true, '&'); } break; case 'current': - if ($ditem['media']) { - $item->link = media_managerURL(array('image' => $id, - 'ns' => getNS($id)), '&', true); + if($ditem['media']) { + $item->link = media_managerURL( + array( + 'image' => $id, + 'ns' => getNS($id) + ), '&', true + ); } else { - $item->link = wl($id, '', true,'&'); + $item->link = wl($id, '', true, '&'); } break; case 'diff': default: - if ($ditem['media']) { - $item->link = media_managerURL(array('image' => $id, - 'ns' => getNS($id), - 'rev' => $date, - 'tab_details' => 'history', - 'mediado' => 'diff'), '&', true); + if($ditem['media']) { + $item->link = media_managerURL( + array( + 'image' => $id, + 'ns' => getNS($id), + 'rev' => $date, + 'tab_details' => 'history', + 'mediado' => 'diff' + ), '&', true + ); } else { - $item->link = wl($id,'rev='.$date.'&do=diff',true,'&'); + $item->link = wl($id, 'rev='.$date.'&do=diff', true, '&'); } } // add item content - switch ($opt['item_content']){ + switch($opt['item_content']) { case 'diff': case 'htmldiff': - if ($ditem['media']) { - $revs = getRevisions($id, 0, 1, 8192, true); - $rev = $revs[0]; + if($ditem['media']) { + $revs = getRevisions($id, 0, 1, 8192, true); + $rev = $revs[0]; $src_r = ''; $src_l = ''; - if ($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)), 300)) { - $more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id)); + if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)), 300)) { + $more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id)); $src_r = ml($id, $more); } - if ($rev && $size = media_image_preview_size($id, $rev, new JpegMeta(mediaFN($id, $rev)), 300)){ - $more = 'rev='.$rev.'&w='.$size[0].'&h='.$size[1]; + if($rev && $size = media_image_preview_size($id, $rev, new JpegMeta(mediaFN($id, $rev)), 300)) { + $more = 'rev='.$rev.'&w='.$size[0].'&h='.$size[1]; $src_l = ml($id, $more); } $content = ''; - if ($src_r) { - $content = ''; + if($src_r) { + $content = '
'; $content .= ''; $content .= ''; $content .= '
'.$rev.''.$lang['current'].'
'; @@ -287,57 +312,57 @@ function rss_buildItems(&$rss,&$data,$opt){ } else { require_once(DOKU_INC.'inc/DifferenceEngine.php'); $revs = getRevisions($id, 0, 1); - $rev = $revs[0]; - - if($rev){ - $df = new Diff(explode("\n",htmlspecialchars(rawWiki($id,$rev))), - explode("\n",htmlspecialchars(rawWiki($id,'')))); - }else{ - $df = new Diff(array(''), - explode("\n",htmlspecialchars(rawWiki($id,'')))); + $rev = $revs[0]; + + if($rev) { + $df = new Diff(explode("\n", htmlspecialchars(rawWiki($id, $rev))), + explode("\n", htmlspecialchars(rawWiki($id, '')))); + } else { + $df = new Diff(array(''), + explode("\n", htmlspecialchars(rawWiki($id, '')))); } - if($opt['item_content'] == 'htmldiff'){ - $tdf = new TableDiffFormatter(); - $content = ''; + if($opt['item_content'] == 'htmldiff') { + $tdf = new TableDiffFormatter(); + $content = '
'; $content .= ''; $content .= ''; $content .= $tdf->format($df); $content .= '
'.$rev.''.$lang['current'].'
'; - }else{ - $udf = new UnifiedDiffFormatter(); + } else { + $udf = new UnifiedDiffFormatter(); $content = "
\n".$udf->format($df)."\n
"; } } break; case 'html': - if ($ditem['media']) { - if ($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)))) { - $more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id)); - $src = ml($id, $more); + if($ditem['media']) { + if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)))) { + $more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id)); + $src = ml($id, $more); $content = ''.$id.''; } else { $content = ''; } } else { - $content = p_wiki_xhtml($id,$date,false); + $content = p_wiki_xhtml($id, $date, false); // no TOC in feeds - $content = preg_replace('/().*()/s','',$content); + $content = preg_replace('/().*()/s', '', $content); // make URLs work when canonical is not set, regexp instead of rerendering! - if(!$conf['canonical']){ - $base = preg_quote(DOKU_REL,'/'); - $content = preg_replace('/('; } else { $content = ''; @@ -350,12 +375,12 @@ function rss_buildItems(&$rss,&$data,$opt){ // add user # FIXME should the user be pulled from metadata as well? - $user = @$ditem['user']; // the @ spares time repeating lookup + $user = @$ditem['user']; // the @ spares time repeating lookup $item->author = ''; - if($user && $conf['useacl'] && $auth){ + if($user && $conf['useacl'] && $auth) { $userInfo = $auth->getUserData($user); - if ($userInfo){ - switch ($conf['showuseras']){ + if($userInfo) { + switch($conf['showuseras']) { case 'username': $item->author = $userInfo['name']; break; @@ -366,35 +391,37 @@ function rss_buildItems(&$rss,&$data,$opt){ } else { $item->author = $user; } - if($userInfo && !$opt['guardmail']){ + if($userInfo && !$opt['guardmail']) { $item->authorEmail = $userInfo['mail']; - }else{ + } else { //cannot obfuscate because some RSS readers may check validity $item->authorEmail = $user.'@'.$ditem['ip']; } - }elseif($user){ + } elseif($user) { // this happens when no ACL but some Apache auth is used $item->author = $user; $item->authorEmail = $user.'@'.$ditem['ip']; - }else{ + } else { $item->authorEmail = 'anonymous@'.$ditem['ip']; } // add category if(isset($meta['subject'])) { $item->category = $meta['subject']; - }else{ + } else { $cat = getNS($id); if($cat) $item->category = $cat; } // finally add the item to the feed object, after handing it to registered plugins - $evdata = array('item' => &$item, - 'opt' => &$opt, - 'ditem' => &$ditem, - 'rss' => &$rss); - $evt = new Doku_Event('FEED_ITEM_ADD', $evdata); - if ($evt->advise_before()){ + $evdata = array( + 'item' => &$item, + 'opt' => &$opt, + 'ditem' => &$ditem, + 'rss' => &$rss + ); + $evt = new Doku_Event('FEED_ITEM_ADD', $evdata); + if($evt->advise_before()) { $rss->addItem($item); } $evt->advise_after(); // for completeness @@ -403,20 +430,19 @@ function rss_buildItems(&$rss,&$data,$opt){ $event->advise_after(); } - /** * Add recent changed pages to the feed object * * @author Andreas Gohr */ -function rssRecentChanges($opt){ +function rssRecentChanges($opt) { global $conf; $flags = RECENTS_SKIP_DELETED; if(!$opt['show_minor']) $flags += RECENTS_SKIP_MINORS; if($opt['content_type'] == 'media' && $conf['mediarevisions']) $flags += RECENTS_MEDIA_CHANGES; if($opt['content_type'] == 'both' && $conf['mediarevisions']) $flags += RECENTS_MEDIA_PAGES_MIXED; - $recents = getRecents(0,$opt['items'],$opt['namespace'],$flags); + $recents = getRecents(0, $opt['items'], $opt['namespace'], $flags); return $recents; } @@ -425,16 +451,16 @@ function rssRecentChanges($opt){ * * @author Andreas Gohr */ -function rssListNamespace($opt){ +function rssListNamespace($opt) { require_once(DOKU_INC.'inc/search.php'); global $conf; - $ns=':'.cleanID($opt['namespace']); - $ns=str_replace(':','/',$ns); + $ns = ':'.cleanID($opt['namespace']); + $ns = str_replace(':', '/', $ns); $data = array(); sort($data); - search($data,$conf['datadir'],'search_list','',$ns); + search($data, $conf['datadir'], 'search_list', '', $ns); return $data; } @@ -444,11 +470,11 @@ function rssListNamespace($opt){ * * @author Andreas Gohr */ -function rssSearch($opt){ - if(!$opt['search_query']) return; +function rssSearch($opt) { + if(!$opt['search_query']) return array(); require_once(DOKU_INC.'inc/fulltext.php'); - $data = ft_pageSearch($opt['search_query'],$poswords); + $data = ft_pageSearch($opt['search_query'], $poswords); $data = array_keys($data); return $data; -- cgit v1.2.3 From 8fbb9b1406a6a8bb097209155e1b1142fa556260 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 24 Jun 2012 15:17:38 +0200 Subject: added Input wrapper to feed.php --- feed.php | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'feed.php') diff --git a/feed.php b/feed.php index a54c30978..09a204fe2 100644 --- a/feed.php +++ b/feed.php @@ -6,6 +6,7 @@ * @author Andreas Gohr * * @global array $conf + * @global Input $INPUT */ if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/'); @@ -26,7 +27,7 @@ $cache = new cache($key, '.feed'); // prepare cache depends $depends['files'] = getConfigFiles('main'); $depends['age'] = $conf['rss_update']; -$depends['purge'] = isset($_REQUEST['purge']); +$depends['purge'] = $INPUT->bool('purge'); // check cacheage and deliver if nothing has changed since last // time or the update interval has not passed, also handles conditional requests @@ -95,6 +96,7 @@ print $feed; */ function rss_parseOptions() { global $conf; + global $INPUT; $opt = array(); @@ -104,29 +106,28 @@ function rss_parseOptions() { // properties for implementing own feeds // One of: list, search, recent - 'feed_mode' => array('mode', 'recent'), + 'feed_mode' => array('str', 'mode', 'recent'), // One of: diff, page, rev, current - 'link_to' => array('linkto', $conf['rss_linkto']), + 'link_to' => array('str', 'linkto', $conf['rss_linkto']), // One of: abstract, diff, htmldiff, html - 'item_content' => array('content', $conf['rss_content']), + 'item_content' => array('str', 'content', $conf['rss_content']), // Special feed properties // These are only used by certain feed_modes // String, used for feed title, in list and rc mode - 'namespace' => array('ns', null), + 'namespace' => array('str', 'ns', null), // Positive integer, only used in rc mode - 'items' => array('num', $conf['recent']), + 'items' => array('int', 'num', $conf['recent']), // Boolean, only used in rc mode - 'show_minor' => array('minor', false), + 'show_minor' => array('bool', 'minor', false), // String, only used in search mode - 'search_query' => array('q', null), + 'search_query' => array('str', 'q', null), // One of: pages, media, both - 'content_type' => array('view', $conf['rss_media']) + 'content_type' => array('str', 'view', $conf['rss_media']) ) as $name => $val) { - $opt[$name] = (isset($_REQUEST[$val[0]]) && !empty($_REQUEST[$val[0]])) - ? $_REQUEST[$val[0]] : $val[1]; + $opt[$name] = $INPUT->$val[0]($val[1], $val[2], true); } $opt['items'] = max(0, (int) $opt['items']); -- cgit v1.2.3