# * iconv , see also # # Installation: # * put this file (rss.php) into the extension directory of your mediawiki installation # * add the following to the end of LocalSettings.php: include("extensions/rss.php"); # * make sure magpie can be found by PHP. # # Usage: # Use one section between -tags for each feed. The rss section may contain parameters # separated by a pipe ("|"), just like links and templates. These parameters are supported: # # * charset=... The charset used by the feed. iconv is used to convert this. # * short Do not show the description text for each news item. # * max=x Shows x most recent headlines. # * highlight= term1 term2 The terms separated by a space are highlighted. # * filter= term1 term2 Show only rss items containing at least one of the terms. # * reverse display the rss items in reverse order. # * title=x display an alternative title instead of chanel name. # * title = none dont display any title. # # Example: # http://slashdot.org/slashdot.rss|charset=UTF-8|short|max=5 # # location of magpie directory- edit for your install # Some windows servers do not like the $_SERVER command to get the file # path to the web directory. define('MAGPIE_DIR', $_SERVER['DOCUMENT_ROOT'] . '/inc/magpie/'); # link to magpie require_once(MAGPIE_DIR . 'rss_fetch.inc'); #install extension hook $wgExtensionFunctions[] = "wfRssExtension"; #extension hook callback function function wfRssExtension() { global $wgParser; #install parser hook for tags $wgParser->setHook( "rss", "renderRss" ); } #parser hook callback function function renderRss($input, $argv, $parser = null) { if (!$parser) $parser =& $GLOBALS['wgParser']; global $wgOutputEncoding; $DefaultEncoding = "ISO-8859-1"; $DisableCache = true; # $input = mysql_escape_string($input); if (!$input) return ""; #if -section is empty, return nothing #parse fields in rss-section $fields= explode("|",$input); $url= @$fields[0]; $args= array(); for ($i=1; $iERROR) { # return "Feed error"; #localize... #return "
Failed to load RSS feed from $url: ".$rss->ERROR."
"; #localize... } if (!is_array($rss->items)) { # return "Feed error"; #localize... #return "
Failed to load RSS feed from $url!
"; #localize... } #Bild title line #get title from argument-array $rssTitle= @$args["title"]; $rssTitle= trim($rssTitle); if ($rssTitle !=='none') { if ($rssTitle=='') { $title= iconv($charset,$wgOutputEncoding,$rss->channel['title']); if ($rss->channel['link']) $title= "[".$rss->channel['link']." $title]"; $output = "=== $title ===\n"; } else { $title= "[".$rss->channel['link']." $rssTitle]"; $output="=== $title ===\n"; } } else { $output="\n\n\n"; } if ($reverse) $rss->items = array_reverse($rss->items); $description = False; foreach ($rss->items as $item) { if ($item['description']) {$description = True; break;} } #Bild items if (!$short and $description) { #full item list $output.=""; foreach ($rss->items as $item) { $d_text = true; $d_title = true; $href = trim(iconv($charset,$wgOutputEncoding,$item['link'])); $title = trim(iconv($charset,$wgOutputEncoding,$item['title'])); $d_title = wfRssFilter ($title, $rssFilter); $title= wfRssHighlight($title, $rssHighlight); #bild description text if desired if ($item["description"]) { $text= trim(iconv($charset,$wgOutputEncoding,$item['description'])); #avoid pre-tags $text= str_replace("\r"," ",$text); $text= str_replace("\n"," ",$text); $text= str_replace("\t"," ",$text); $d_text = wfRssFilter ($text, $rssFilter); $text= wfRssHighlight($text, $rssHighlight); $display = $d_text or $d_title; } else { $text = ""; $display = $d_title; } if ($display) { $output.="* [$href $title]"; if ($text) $output.="
$text"; $output .= "\n"; } #Cut off output when maxheads is reached: if (++$headcnt == $maxheads) break; } # $output.=""; } else { #short item list # $output.="
    "; foreach ($rss->items as $item) { $href = trim(iconv($charset,$wgOutputEncoding,$item['link'])); $title = trim(iconv($charset,$wgOutputEncoding,$item['title'])); $d_title = wfRssFilter ($title, $rssFilter); $title= wfRssHighlight($title, $rssHighlight); if ($d_title ) $output.="* [$href $title]\n"; #Cut off output when maxheads is reached: if (++$headcnt == $maxheads) break; } # $output.="
"; } if ($DisableCache) { global $wgVersion; # Do not cache this wiki page. # for details see http://public.kitware.com/Wiki/User:Barre/MediaWiki/Extensions global $wgTitle, $wgDBprefix; $ts = mktime(); $now = gmdate("YmdHis", $ts + 120); $ns = $wgTitle->getNamespace(); $ti = wfStrencode($wgTitle->getDBkey()); $version = preg_replace("/^([1-9]).([1-9]).*/", "\\1\\2", $wgVersion); if ($version>14) $sql = "UPDATE $wgDBprefix"."page SET page_touched='$now' WHERE page_namespace=$ns AND page_title='$ti'"; else $sql = "UPDATE $wgDBprefix"."cur SET cur_touched='$now' WHERE cur_namespace=$ns AND cur_title='$ti'"; wfQuery($sql, DB_WRITE, ""); } $out = $parser->parse ($output, $parser->mTitle,$parser->mOptions, true, false); return $out->getText(); } function wfRssFilter ($text, $rssFilter) { $display = true; if (is_array($rssFilter)) { foreach($rssFilter as $term) { if ($term) { $display = false; if (preg_match("|$term|i", $text, $a)) { $display = true; return $display; } } if ($display) break; } } return $display; } function wfRssHighlight($text, $rssHighlight) { $i=0; $starttag = "v8x5u3t3u8h"; $endtag = "q8n4f6n4n4x"; $color[]="coral"; $color[]="greenyellow"; $color[]="lightskyblue"; $color[]="gold"; $color[]="violet"; $count_color = count($color); if (is_array($rssHighlight)) { foreach($rssHighlight as $term) { if ($term) { $text = preg_replace("|\b(\w*?".$term."\w*?)\b|i", "$starttag"."_".$i."\\1$endtag", $text); $i++; if ($i == $count_color) $i=0; } } } # to avoid trouble should someone wants to highlight the terms "span", "style", ... for ($i=0; $i<5; $i++) { $text = preg_replace("|$starttag"."_".$i."|", "", $text); $text = preg_replace("|$endtag|", "", $text); } return $text; } ?>