Extension:SimpleRSS.php
<?php
- Extension:SimpleRSS
- - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
- - Author: User:RobCategory:Extensions created with Template:Extension
if (!defined('MEDIAWIKI')) die('Not an entry point.');
define('SIMPLERSS_VERSION','1.0.0, 2007-05-05');
$wgSimpleRSSMagic = "rss"; $wgSimpleRSSTag = "rss"; $wgExtensionFunctions[] = 'wfSetupSimpleRSS'; $wgHooks['LanguageGetMagic'][] = 'wfSimpleRSSLanguageGetMagic';
$wgExtensionCredits['parserhook'][] = array( 'name' => 'SimpleRSS', 'author' => 'User:Rob', 'description' => 'Integration of RSS with MediaWiki', 'url' => 'http://www.organicdesign.co.nz/Extension:SimpleRSS', 'version' => SIMPLERSS_VERSION );
require_once('extensions/SimpleRSS/magpierss-0.72/rss_fetch.inc');
class SimpleRSS {
# Properties var $prop1 = 'default value'; var $prop2 = 'default value';
# Constructor function SimpleRSS() { global $wgHooks,$wgParser,$wgSimpleRSSMagic,$wgSimpleRSSTag;
# Add the parser-function $wgParser->setFunctionHook($wgSimpleRSSMagic,array($this,'magicRss'));
# Add the tagHook $wgParser->setHook($wgSimpleRSSTag,array($this,'tagRss'));
}
# Convert the <rss> tags to HTML function tagRss($text,$argv,&$parser) { $args = ;
foreach ($argv as $k => $v) $args .= "
\n"; return "
tagRss():
\n
- $args
- Content: $text
\n";
}
# Needed in some versions to prevent Special:Version from breaking function __toString() { return 'SimpleRSS'; }
# Expand the rss-magic function magicRss(&$parser) {
# Populate $argv with both named and numeric parameters $argv = array(); foreach (func_get_args() as $arg) if (!is_object($arg)) { if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $argv[] = $arg; }
global $wgRSSUseAjax;
if ($wgRSSUseAjax) { # Render a container which does ajax requests for content
$text = "
";
} else { # Not using ajax, render the output now
# TODO enforce required params: url template $error = "fatal error: no template provided"; $error = "fatal error: no url provided";
# template params $headTemplate = "RSSHead"; $itemTemplate = "RSSItem"; $footTemplate = "RSSFoot";
# grab each url and process $data = wfReadRSS(preg_split("/[\n\r]/", $argv[url], -1, PREG_SPLIT_NO_EMPTY));
# dump data foreach ($data as $v) { # create head template wfListArrayKeys($v->channel, "", $channel); $text .= wfMakeTemplate($headTemplate, $channel);
# loop creating item templates foreach($v->items as $item) { wfListArrayKeys($item, "", $itemResult); $text .= wfMakeTemplate($itemTemplate, $itemResult); }
# create foot template (same as head) wfListArrayKeys($v->channel, "", $channel); $text .= wfMakeTemplate($footTemplate, $channel);
}
}
# Return result with available parser flags return array( $text, found => true, nowiki => false, noparse => false, noargs => false, isHTML => false );
}
} # object end
- build array of key-value pairs into template syntax
- Template:TemplateName
function wfMakeTemplate($template, $array) { foreach($array as $key => $value) $params .= "\n|".$key."=".$value; return "Template:".$template.$params."\n"; }
- build array of keys to publish (it's recursive!)
- WARNING because this function uses a hash to eliminate duplicate keys
- it no good for lists of items, only one at a time.
function wfListArrayKeys($array, $parent="", &$result) { foreach($array as $key => $value) { if(is_array($value)) wfListArrayKeys($value, "$parent$key", $result); else $result[$parent.$key] = $value; } }
function wfReadRSS($urls) { $data = array(); foreach ($urls as $url) { $data[] = fetch_rss($url); } return $data; }
- Needed in MediaWiki >1.8.0 for magic word hooks to work properly
function wfSimpleRSSLanguageGetMagic(&$magicWords,$langCode = 0) { global $wgSimpleRSSMagic; $magicWords[$wgSimpleRSSMagic] = array(0,$wgSimpleRSSMagic); return true; }
- Called from $wgExtensionFunctions array when initialising extensions
function wfSetupSimpleRSS() { global $wgSimpleRSS; $wgSimpleRSS = new SimpleRSS(); }