<?php
/**
* Extension to do qualified access to external services
*/
function efRunQualifiedAccess( $par ) {
QualifiedAccess::run( $par );
}
class QualifiedAccess extends SpecialPage {
function QualifiedAccess() {
SpecialPage::SpecialPage("QualifiedAccess", '', true, 'efRunQualifiedAccess');
wfLoadExtensionMessages('QualifiedAccess');
}
function run( $par ) {
global $wgOut;
global $wgRawHtml;
global $wgRequest;
$oldRawHtml = $wgRawHtml;
$wgRawHtml = false; // disable raw html if it's enabled as this could be XSS security risk
//$this->setHeaders();
global $efQualifiedAccessArgs;
$efQualifiedAccessArgs = array();
global $_REQUEST;
$argkeys = array_keys($_REQUEST);
// find the position of "title" and count succeeding arguments until we find one that matches
// one of the patterns which belong to typical session cookie variables
$argTitle=-1; $argCount=0; $n=0;
foreach ($argkeys as $argKey) {
if ($argKey=='title') $argTitle = $n;
else if ($argTitle>=0) {
if (preg_match('/(UserName|UserID|_session|Token)$/',$argKey)) break;
++$argCount;
}
$n++;
}
$wikitext=''; $n=0; $i=-1;
foreach ($argkeys as $argKeyNr => $argKey) {
$i++;
if ($i<$argTitle) continue;
if ($i==$argTitle) {
$wikitext .= preg_replace(',^[^/]+/,','',$wgRequest->getText($argKey),1);
//$wikitext = str_replace( ",", "|", $wikitext );
$wikitext = str_replace( "_", " ", $wikitext );
foreach (split(',', $wikitext) as $item) {
$a = split('=', $item, 2);
if (count($a)==1) $efQualifiedAccessArgs[] = $item;
else $efQualifiedAccessArgs[$a[0]] = $a[1];
}
continue;
}
if (++$n > $argCount) break;
$arg = $wgRequest->getText($argKey);
if ($arg=='') {
$arg = str_replace( "_", " ", $argKey );
$efQualifiedAccessArgs[] = $arg;
}
else {
$arg = str_replace( "_", " ", $arg );
$efQualifiedAccessArgs[$argKey] = $arg;
}
}
if ($wikitext=='' && $par!='') {
// the first argument may contain parameters which are separated by comma
// this is the case if [[Call,a=b]] syntax is used
$wikitext = str_replace( "_", " ", $par );
foreach (split(',', $wikitext) as $item) $efQualifiedAccessArgs[] = $item;
}
foreach ($efQualifiedAccessArgs as $key => $value) {
if (!preg_match('/^\d+$/',$key)) continue;
if (preg_match('/^(doi|issn)\s*(\d.*)$/i',$value,$matches)) {
$efQualifiedAccessArgs[$matches[1]] = $matches[2];
$efQualifiedAccessArgs[$key] = '';
}
}
if ($efQualifiedAccessArgs[0] == 'Spesial:QualifiedAccess') $efQualifiedAccessArgs[0] = '';
$wgOut->addWikiText( wfMsg( 'qaccess-description' ) . wfMsg( 'qualifiedaccesspage' ) );
$wgRawHtml = $oldRawHtml;
$efQualifiedAccessArgs = null;
}
}