MediaWiki:SpecialEmpfehlungen.php
<source lang="php"> <?php require_once('Empfehlungen.class.php');
class SpecialEmpfehlungen extends SpecialPage { function __construct() { parent::__construct( 'Empfehlungen' ); }
function execute() { global $wgOut, $wgScript, $wgRequest;
$limits = array(20, 50, 100, 250, 500);
$empfClass = new Empfehlungen(); $empfehlungen = $empfClass->getEmpfArray(); $namespaces = $empfClass->getEmpfNs(); $users = $empfClass->getEmpfUsers();
$requestNs = (isset($namespaces[$wgRequest->getText('namespace')])) ? $wgRequest->getText('namespace') : ; $requestSort = $wgRequest->getText('sort'); $requestLimit = (in_array($wgRequest->getText('limit'), $limits)) ? strval($wgRequest->getText('limit')) : 50; $requestOffset = ($wgRequest->getText('offset') > 0) ? strval($wgRequest->getText('offset')) : 0;
// Seitentitel $wgOut->setPageTitle( wfMsg( 'empfehlungen-title' ) );
// Zelle "empfohlen" $row = (wfEmptyMsg('empfehlungen-row')) ? '$1' : wfMsg( 'empfehlungen-row' );
// Keine Ahnung, wie DIE das machen, ICH mach das so (quick&dirty) $desc = str_replace('$1', count($users), wfMsg( 'empfehlungen-desc' )); $desc = str_replace('$2', count($empfehlungen), $desc);
// Ausgabe des Formulars (leider ist FormOptions() nirgends dokumentiert, drum so ...) $wgOut->addHTML("<form method=\"get\" action=\"$wgScript\"> <fieldset> <input type=\"hidden\" name=\"title\" value=\"".$this->getTitle()->getPrefixedDBkey()."\" /> <input type=\"hidden\" name=\"offset\" value=\"$requestOffset\" /> <input type=\"hidden\" name=\"limit\" value=\"$requestLimit\" /> <legend>Empfehlungen</legend>
");
$wgOut->addWikiText($desc); $wgOut->addHTML(" |
");
} else {
$wgOut->addHTML("");}
$wgOut->addHTML("| Empfohlene | <select name=\"namespace\" size=\"1\">
<option value=>Seiten (alle)</option>"); foreach($namespaces as $ns => $text) { if($requestNs == strval($ns)) { $wgOut->addHTML("<option value=\"$ns\" selected=\"selected\">$text</option>"); } else { $wgOut->addHTML("<option value=\"$ns\">$text</option>"); } } $wgOut->addHTML("</select> |
sortiert nach | ");
if($requestSort != 'page' ) { $wgOut->addHTML(" | <input type=\"radio\" name=\"sort\" value=\"value\" checked=\"checked\" /> | Empfehlungen | <input type=\"radio\" name=\"sort\" value=\"page\" /> | Alphabet | <input type=\"radio\" name=\"sort\" value=\"value\" /> | Empfehlungen | <input type=\"radio\" name=\"sort\" value=\"page\" checked=\"checked\" /> | Alphabet | <input type=\"submit\" value=\"Anzeigen\" \> |
</fieldset> </form>");
// Empfehlungen nach Namensräumen filtern if($requestNs != ) { foreach($empfehlungen as $key => $value) { if($requestNs != $value['ns']) unset($empfehlungen[$key]); } } // Empfehlungen sortieren if($requestSort != 'page' ) { $array = array(); foreach($empfehlungen as $key => $value) { $array[count( $value['users'] ).'x'.$key] = $value; } krsort($array, SORT_NUMERIC); $empfehlungen = array_values($array); } else { ksort ($empfehlungen, SORT_STRING); $empfehlungen = array_values($empfehlungen); }
// Maximum und Offset ermitteln (irgendwie funktioniert das - aber ich weiß nicht, wie *knotenimkof*) $max = min($requestOffset + $requestLimit, count($empfehlungen)); if($requestOffset > $max) $requestOffset = (count($empfehlungen) - $requestLimit > 0) ? count($empfehlungen) - $requestLimit : 0;
// Anzahl der Suchergebnisse
if($requestNs != ) {
$wgOut->addHTML("Es wurden bislang ".count($empfehlungen)." ".$namespaces[$requestNs]." empfohlen:
");
}
// Navigation $wgOut->addHTML(" "); $limitlinks = array(); foreach($limits as $limit) { $limitlinks[] = Linker::linkKnown( $this->getTitle(), $limit, array('class' => 'limit'), array('offset' => $requestOffset, 'limit' => $limit, 'namespace' => $requestNs, 'sort' => $wgRequest->getText('sort')) ); } $wgOut->addHTML("(".join(' | ', $limitlinks).")");
// Ausgabe der Empfehlungsliste
$wgOut->addHTML("
<thead> </thead>"); for($i = $requestOffset; $i < $max; $i++) { $wgOut->addHTML(""); } $wgOut->addHTML("| ");
if(isset($namespaces[$requestNs])) { $wgOut->addHTML($namespaces[$requestNs]); } else { $wgOut->addHTML('Seiten'); } $wgOut->addHTML(" |
empfohlen | von |
|---|---|---|
| ".$empfehlungen[$i]['link']." | ");
$wgOut->addWikiText(str_replace('$1', count( $empfehlungen[$i]['users']), $row )); $wgOut->addHTML(" | ".join( ', ', $empfehlungen[$i]['users'] )." |
");
} }
</source>