MediaWiki:SpecialEmpfehlungen.php

aus Kamelopedia, der wüsten Enzyklopädie
Version vom 22. September 2011, 22:40 Uhr von WiMu (Diskussion | Beiträge) (AZ: Die Seite wurde neu angelegt.)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

<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("Zeige ("); if($requestOffset > 0) { $prev = ($requestOffset - $requestLimit > 0) ? $requestOffset - $requestLimit : 0; $wgOut->addHTML(Linker::linkKnown( $this->getTitle(), "vorherige ".$requestLimit, array('class' => 'prev'), array('offset' => $prev, 'limit' => $requestLimit, 'namespace' => $requestNs, 'sort' => $wgRequest->getText('sort')) ) ); } else { $wgOut->addHTML("vorherige $requestLimit"); } $wgOut->addHTML(" | "); if($max < count($empfehlungen)) { $next = $requestOffset + $requestLimit; $wgOut->addHTML(Linker::linkKnown( $this->getTitle(), "nächste ".$requestLimit, array('class' => 'next'), array('offset' => $next, 'limit' => $requestLimit, 'namespace' => $requestNs, 'sort' => $wgRequest->getText('sort')) ) ); } else { $wgOut->addHTML("nächste $requestLimit"); } $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>