Difference between revisions of "Extension:SimpleRSS.php"
m (update) |
m (cat) |
||
Line 1: | Line 1: | ||
<?php | <?php | ||
− | # Extension:SimpleRSS{{Category:Extensions|SimpleRSS}}{{php}} | + | # Extension:SimpleRSS{{Category:Extensions|SimpleRSS}}{{php}}{{Category:Extensions in progress|SimpleRSS}} |
# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html) | # - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html) | ||
# - Author: [http://www.organicdesign.co.nz/nad User:Rob]{{Category:Extensions created with Template:Extension}} | # - Author: [http://www.organicdesign.co.nz/nad User:Rob]{{Category:Extensions created with Template:Extension}} |
Revision as of 10:28, 17 December 2007
<?php
- Extension:SimpleRSS
Template:PhpCategory:Extensions in progress
- - 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
# reserved param keys - other keys are interpreted as feed = url pairs $reserved = array('headtemplate', 'itemtemplate', 'foottemplate', 'itemslimit', 'useajax', 'useagregation', 'url');
# default values if not passed as params: maybe get from globals if(!isset($argv[headtemplate])) $argv[headtemplate] = 'RSSHead'; if(!isset($argv[itemtemplate])) $argv[itemtemplate] = 'RSSItem'; if(!isset($argv[foottemplate])) $argv[foottemplate] = 'RSSFoot'; if(!isset($argv[itemslimit])) $argv[itemslimit] = 10;
# if no agregation, you must supply a url
if(!isset($argv[useagregation]) && !isset($argv[url]))
$text = "SimpleRSS: fatal error: explicit url parameter is required or implicit feed=http://url.com\n";
# if no url specified, ignore any reserved words and take the rest # as implicit url parameters foreach($argv as $key => $value) { if(!in_array($key, $reserved)) $url[$key] = $value; }
if(!isset($argv[url])) $data = wfReadRSS($url); else { # url param is present $data = wfReadRSS($argv[url]); }
$text .= print_r($argv, true); $text .= print_r($url, true);
# dump data foreach ($data as $v) { # create head template wfListArrayKeys($v->channel, "", $channel); $text .= wfMakeTemplate($argv[headtemplate], $channel);
# loop creating item templates for($i=0; $i<$argv[itemslimit]; $i++) { if(!isset($v->items[$i])) break; wfListArrayKeys($v->items[$i], "", $itemResult); $text .= wfMakeTemplate($argv[itemtemplate], $itemResult); }
# create foot template (same as head) wfListArrayKeys($v->channel, "", $channel); $text .= wfMakeTemplate($argv[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) { if(is_array($urls)) { $data = array(); foreach ($urls as $key => $value) { $data[$key] = fetch_rss($value); } } else $data[] = fetch_rss($urls); 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(); }
?>