From 6dd095f599ed20044f98d324cda37bedd57b3d3e Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Tue, 2 Aug 2011 19:15:11 +0300 Subject: issue #10 media revisions/changes in RSS feed --- feed.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 114 insertions(+), 36 deletions(-) (limited to 'feed.php') diff --git a/feed.php b/feed.php index cca8661f4..1b3641cff 100644 --- a/feed.php +++ b/feed.php @@ -117,6 +117,8 @@ function rss_parseOptions(){ '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', 'both') ) as $name => $val) { $opt[$name] = (isset($_REQUEST[$val[0]]) && !empty($_REQUEST[$val[0]])) @@ -188,7 +190,9 @@ function rss_buildItems(&$rss,&$data,$opt){ $item = new FeedItem(); $id = $ditem['id']; - $meta = p_get_metadata($id); + if(!$ditem['media']) { + $meta = p_get_metadata($id); + } // add date if($ditem['date']){ @@ -213,62 +217,134 @@ function rss_buildItems(&$rss,&$data,$opt){ // add item link switch ($opt['link_to']){ case 'page': - $item->link = wl($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); + } break; case 'rev': - $item->link = wl($id,'do=revisions&rev='.$date,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,'&'); + } break; case 'current': - $item->link = wl($id, '', true,'&'); + if ($ditem['media']) { + $item->link = media_managerURL(array('image' => $id, + 'ns' => getNS($id)), '&', true); + } else { + $item->link = wl($id, '', true,'&'); + } break; case 'diff': default: - $item->link = wl($id,'rev='.$date.'&do=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,'&'); + } } // add item content switch ($opt['item_content']){ case 'diff': case 'htmldiff': - 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,'')))); - } - - if($opt['item_content'] == 'htmldiff'){ - $tdf = new TableDiffFormatter(); - $content = ''; - $content .= ''; - $content .= ''; - $content .= $tdf->format($df); - $content .= '
'.$rev.''.$lang['current'].'
'; - }else{ - $udf = new UnifiedDiffFormatter(); - $content = "
\n".$udf->format($df)."\n
"; + 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)); + $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]; + $src_l = ml($id, $more); + } + $content = ''; + if ($src_r) { + $content = ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= '
'.$rev.''.$lang['current'].'
'; + $content .= ''.$id.'
'; + } + + } 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,'')))); + } + + if($opt['item_content'] == 'htmldiff'){ + $tdf = new TableDiffFormatter(); + $content = ''; + $content .= ''; + $content .= ''; + $content .= $tdf->format($df); + $content .= '
'.$rev.''.$lang['current'].'
'; + }else{ + $udf = new UnifiedDiffFormatter(); + $content = "
\n".$udf->format($df)."\n
"; + } } break; case 'html': - $content = p_wiki_xhtml($id,$date,false); - // no TOC in feeds - $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 = ''; + } + } else { + $content = p_wiki_xhtml($id,$date,false); + // no TOC in feeds + $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 = ''; + } + } else { + $content = $meta['description']['abstract']; + } } $item->description = $content; //FIXME a plugin hook here could be senseful @@ -336,6 +412,8 @@ function rss_buildItems(&$rss,&$data,$opt){ function rssRecentChanges($opt){ $flags = RECENTS_SKIP_DELETED; if(!$opt['show_minor']) $flags += RECENTS_SKIP_MINORS; + if($opt['content_type'] == 'media') $flags += RECENTS_MEDIA_CHANGES; + if($opt['content_type'] == 'both') $flags += RECENTS_MEDIA_PAGES_MIXED; $recents = getRecents(0,$opt['items'],$opt['namespace'],$flags); return $recents; -- cgit v1.2.3