# MediaWiki/ Vertiefung

Dieser Teil gehört zum Buch „MediaWiki“.
Kurzinhalt: In den folgenden Bereichen wird die MediaWiki-Software noch besser genutzt.

# Benutzerrechte

Standardmäßig gibt es in der MediaWiki-Software mehrere Benutzertypen, die abgestufte Rechte und Möglichkeiten haben – allerdings nur in Bezug auf die Organisationsstruktur, inhaltlich haben alle Benutzer dieselben Rechte. Alle Benutzergruppen und Rechte können mithilfe der LocalSettings.php angepasst werden.

## Vorgegebene Gruppen

Dies sind die wichtigsten Benutzergruppen mit den standardmäßig vorgegebenen Rechten.

### Alle Benutzer (*)

Jeder Benutzer – sowohl ein angemeldeter als auch ein „anonymer“ – darf Seiten anlegen und bearbeiten.
Wenn ein Benutzer nicht angemeldet ist, erscheinen seine Beiträge in der Versionsgeschichte unter der IP-Adresse, die bei der Einwahl ins Internet zugewiesen wird. Eine eindeutige Zuordnung ist nicht möglich und bleibt stets Mutmaßung. Somit könnte es sich hinter 200 verschiedenen Edits mit derselben IP-Adresse um 200 verschiedene Personen handeln, hinter verschiedenen IP-Adressen wiederum kann sich derselbe Benutzer verbergen.

### Angemeldeter Benutzer (user)

Angemeldete Benutzer können zusätzlich Seiten verschieben und Dateien (z. B. Bilder) hochladen. In der Versionsgeschichte erscheint ihr Benutzername. Außerdem erhält jeder angemeldete Benutzer eine eigene persönliche Seite im Benutzer-Namensraum und kann Seiten auf seine Beobachtungsliste setzen. Eine Liste aller Benutzer ist durch Spezial:Listusers zu erhalten.

### Administrator (sysop)

Admins können Seiten schützen und geschützte Seiten bearbeiten, Seiten löschen und gelöschte Seiten wiederherstellen. Außerdem haben sie die Möglichkeit, andere Benutzer bzw. IPs zu sperren und solche Sperren wieder aufzuheben. Ein gesperrter Benutzer kann alle Beiträge lesen, aber keinen Artikel ändern.

### Bürokrat (bureaucrat)

Ein Bürokrat kann über die Spezialseite Spezial:Benutzerrechte (engl. Special:Userrights) anderen Benutzern Bot-, Administrator- und Bürokratenrechte erteilen und entziehen. Das entsprechende Recht heißt userrights.

### Bot (bot)

Ein Benutzer mit dem Status „Bot“ darf mit Hilfe eines Programms oder eines Skripts stupide, langweilige und häufig auftretende Aufgaben erledigen. Die Änderungen eines solchen Benutzers können in den Letzten Änderungen über die URL-Option hidebots=0 ausgeblendet werden.
Wer ein Skript laufen lassen will, sollte dafür einen eigenen Benutzer-Account anlegen, auf dessen Seite das Vorhaben beschreiben und die Zustimmung der Gemeinschaft einholen. Ein Bürokrat kann diesem Account dann den Status Bot zuweisen – siehe Bots (Wikipedia).

## Einzelheiten

Die genannten Standardrechte stehen in der DefaultSettings.php (bitte dort niemals ändern, diese Datei wird bei jeder Installation überschrieben). Änderungen erfolgen (wie immer) in LocalSettings.php mit folgender Syntax:
    $wgGroupPermissions['Gruppe']['Recht'] = boolescher Wert; also beispielsweise: $wgGroupPermissions['*']['edit'] = false; kein Benutzer darf Seiten bearbeiten, aber: $wgGroupPermissions['user']['edit'] = true; angemeldete Benutzer dürfen Seiten bearbeiten
Unter permissions versteht man das Recht, bestimmte Aufgaben zu erledigen wie das Erstellen und Bearbeiten von Seiten, das Löschen von Seiten, das Sperren von Benutzern und so weiter und so fort. Wenn ein Recht für irgendeine Gruppe, zu der ein Benutzer gehört, auf 'true' (= wahr) gesetzt ist, kann er diese Sache auch machen. Wenn zum Beispiel Administratoren keine Seiten bearbeiten können, aber normale Benutzer, dann können Admins trotzdem bearbeiten, weil alle Admins gleichzeitig auch Benutzer sind.
Standardgruppen :
| Bezeichnung | Beschreibung |
| * | alle, auch IPs |
| user | registrierte, eingeloggte Benutzer |
| autoconfirmed | Benutzer mit dem Recht autoconfirm – ihre Bearbeitungen gelten automatisch als bestätigt; dieses Recht wird registrierten Benutzern unter bestimmten Bedingungen gegeben (z. B. automatisch nach der in $wgAutoConfirmAge definierten Zeit) |
| emailconfirmed | ein Benutzer, der sich mit Email-Adresse registriert hat und dessen die Email-Adresse bestätigt wurde |
| bot | Benutzer mit dem Recht für automatisierte Skripte |
| sysop | Administratoren |
| bureaucrat | Benutzer, die die Rechte anderer Benutzer ändern können |
| developer | (standardmäßig nicht aktiviert) Seitenadministration |
Die wichtigsten Standardrechte :
| Bezeichnung | Beschreibung |
| read | Lesen von Seiten, die nicht auf der Whitelist stehen (bei false (= falsch) können nur die Seiten auf der Whitelist gelesen werden) |
| edit | Nichtgeschützte Seiten bearbeiten |
| createaccount | Neuen Account anlegen (Special:Userlogin) |
| createpage | Seite anlegen |
| createtalk | Diskussionsseite anlegen |
| move | Seiten verschieben (umbenennen) |
| upload | Dateien hochladen (wenn erlaubt) |
| upload_by_url | Dateien von einer URL hochladen (wenn erlaubt) |
| delete | Seiten löschen und wiederherstellen |
| bot | Eigene Bearbeitungen standardmäßig aus Überblickslisten (z. B. Special:Recentchanges) ausblenden |
| block | Benutzer und IPs sperren (am Bearbeiten hindern) und die Sperre aufheben |
| editinterface | Den MediaWiki-Namensraum bearbeiten |
| import | Seiten aus anderen Wikis mit Special:Import importieren |
| patrol | Bearbeitungen als kontrolliert markieren (wenn vorgesehen) |
| protect | Seiten und Dateien vor Bearbeitungen schützen |
| rollback | Änderungen schnell rückgängig machen |
| userrights | Die Zugehörigkeit von Benutzern zu einer Gruppe ändern mit Special:Userrights |
| siteadmin | Sperren und Entsperren der Datenbank mit Special:Lockdb und Special:Unlockdb |

### Alle möglichen Rechte

    List of permissions enthält eine vollständige Liste.

### Standardeinstellungen

    Die Datei DefaultSettings.php enthält die Liste der Rechte, die durch die Installation vorgegeben werden. Diese können hier nachgelesen werden: Default rights (nicht unbedingt auf dem neuesten Stand) aktuelle Entwicklung (für die aktuelle oder nächste MW-Version gültig)

## Erweiterungen

Extensions wie RenameUser, GlobalBlocking usw. fügen neue Rechte hinzu, die wie eingebaute gehandhabt werden.
* Benutzer mit dem CheckUser-Status können zu einem Benutzer nichtsichtbare Daten abfragen vor allem die IP-Adresse. Damit kann man z.B. Sockenpuppen-Prüfungen durchführen; das heißt abfragen, ob ein Benutzer unter verschiedenen Account-Namen aktiv war.
* Benutzer mit Oversight-Status können Versionen eines Artikels permanent in der Versionsgeschichte verbergen. Diese Versionen können auch nicht mehr von Administratoren gesehen und zurückgeholt werden.

## Links

* User Rights mit weiteren Links
* Group Permissions
* Extension-Kategorie – Liste aller Extensions, die Benutzerrechte ergänzen
* User groups in Wikimedia-Projekten

# Upgrade

Das Kapitel Upgrade ist noch nicht vorhanden.

# Parser-Funktionen

Mit Hilfe der Erweiterung ParserFunctions verfügt MediaWiki über verschiedene Konstrukte einer Programmiersprache für die Verwendung in Vorlagen.

## Beschreibung der ParserFunctions
### Funktion if

Die if-Funktion ist ein Wenn-Dann-Sonst-Konstrukt. Die Syntax:
Enthält die <bedingung> Text, gilt sie als erfüllt und es wird <dann-text> zurückgegeben. Ist <bedingung> hingegen leer oder besteht ausschließlich aus Leerzeichen (whitespace), gilt sie als nicht erfüllt und es wird <sonst-text> zurückgegeben. <sonst-text> kann auch weggelassen werden, dann wird in diesem Fall nichts zurückgegeben.
Achtung: if unterstützt keine Gleichungen oder Ähnliches. Siehe dafür ifeq und ifexpr.

### Funktion ifeq

ifeq vergleicht zwei Zeichenketten und gibt je nach Ergebnis verschiedene Texte zurück.

### Funktion ifexist

ifexist prüft, ob ein angegebenes Lemma existiert, und gibt je nachdem verschiedene Texte zurück.
Interwiki-Links werden nicht geprüft. Es wird immer angenommen, dass Lemmata in anderen Wikis nicht existieren.

### Funktion expr

expr berechnet mathematische Ausdrücke.
Die booleschen Operatoren behandeln 0 (Null) als falsch und 1 als wahr. Zahlen werden mit dem Punkt als Dezimaltrenner angegeben.
Beispiel:
ergibt:
Damit werden 100 Fahrenheit auf die Celsius-Skala umgerechnet (auf die nächste Ganze Zahl gerundet).
Da diese Berechnungen aus Kompatibilitätsgründen mit dem englischen Zahlenformat durchgeführt werden (Beispiel: {{ #expr: 13000 / 3.1 round 2 }} ergibt 4193.55) müssen solche Zahlen zusätzlich in das im deutschen Sprachraum übliche Format umgewandelt werden (Beispiel: {{ formatnum: {{ #expr: 13000 / 3.1 round 2 }} }} ergibt 4.193,55).

### Funktion ifexpr

ifexpr Wertet einen mathematischen Ausdruck aus.
Ist das Ergebnis von <ausdruck> 0 (Null), wird <sonst-text> zurückgegeben. Sonst wird <dann-text> zurückgegeben. <sonst-text> kann auch weggelassen werden, dann wird in diesem Fall nichts zurückgegeben.
Die Syntax für Ausdrücke wird in der Beschreibung von expr erklärt.

### Funktion switch

switch vergleicht einen Wert mit mehreren anderen. Die Grundsyntax ist:
switch geht alle Werte durch, bis der Vergleichswert gefunden wird. Dann wird das entsprechende Ergebnis (hinter dem Gleichheitszeichen) zurückgegeben. Wenn kein Wert übereinstimmt, wird der Eintrag unter #default verwendet, sofern es diesen gibt. (Falls das Standardergebnis kein Gleichheitszeichen enthält, kann #default auch weggelassen werden.)
„Durchfall“-Werte sind ebenfalls möglich:
Hier wird für <wert$_1$>, <wert$_2$> und <wert$_3$> derselbe Wert <ergebnis$_{1,2,3}$> zurückgegeben.

### Funktion time

#time ist eine Zeit- und Datums-Formatierungs-Funktion. Die Syntax ist
    {{ #time: format }}
oder
    {{ #time: format | time }}
Wenn „time“ nicht angegeben wird, wird die Zeit zum Zeitpunkt der Umwandlung in HTML benutzt. Durch das Servercaching kann es dabei zu Abweichungen bei der Artikelanzeige bis zu einer Woche kommen. Eine manuelle Aktualisierung kann durch einen „null edit“ (Seite bearbeiten und Speichern ohne Änderung) erfolgen.
Der „format“-Parameter ist ähnlich den der PHP-Datumsparameter.
Die folgenden Codes haben dieselbe Bedeutung wie in PHP. Bedeutende Differenzen vom PHP-Verhalten (abgesehen von sprachlichen und lokalen Unterschieden) sollten als Fehler der Parserfunktionen gesehen und als Bug gemeldet werden. Alle numerischen Codes geben Zahlen entsprechend der lokalen Spracheinstellung zurück, durch die Nutzung des xn-Codes kann dieses Verhalten überschrieben werden.
Die folgenden Codes sind Erweiterungen zu PHP:
Jedes unbekannte Zeichen wird unbearbeitet zur Ausgabe durchgereicht. Dazu gibt es zwei Konventionen:
* Zeichen in doppelten Anführungszeichen werden als solche ausgegeben (ohne Anführungszeichen). Anführungszeichen alleine werden als solche ausgegeben. Beispiele:
** {{ #time: "Der Monat ist" F}} → Der Monat ist Oktober
** {{ #time:i's"}} → 23'06"
* Backslash-escaping wird unterstützt: \H ergibt das Zeichen H, \" ergibt das Zeichen ".
Das Format des „time“-Parameters ist identisch mit der PHP-Funktion strtotime. Relative Angaben, wie zum Beispiel „+10 hours“, werden unterstützt, welche für eine Zeitzonen-Berechnung genutzt werden können.
Siehe das „GNU tar manual“ 7. Date input formats für weitere Informationen.

### Funktion titleparts

{{#titleparts:}} gibt die angegebene Anzahl an Teilen (ab einer angegebenen Stelle) eines Seitentitels zurück, die durch einen Schrägstrich („/“) getrennt sind. Beispiele:
* {{#titleparts:Hilfe:Verweis/a/b|0}} ergibt Hilfe:Verweis/a/b (Der ganze Name)
* {{#titleparts:Hilfe:Verweis/a/b|1}} ergibt Hilfe:Verweis
* {{#titleparts:Hilfe:Verweis/a/b|2}} ergibt Hilfe:Verweis/a
* {{#titleparts:Hilfe:Verweis/a/b|1|2}} ergibt a
* {{#titleparts:Hilfe:Verweis/a/b|2|2}} ergibt a/b

#### Details zu titleparts

* Die Parameter kann man am sinnvollsten mit Titel,Anzahl,Start beschreiben.
** Wenn Start fehlt oder 0 oder 1 ist, wird Titel durch Start nicht verändert.
** Wenn Start positiv ist, werden aus Titel am Anfang Start-1 Parts entfernt.
** Wenn Start negativ ist, wird alles vor dem Start-Part entfernt, wobei Start vom Ende des Titel gezählt wird.
* Was von Titel übrig ist, nenne ich mal TitelNeu.
** Wenn Anzahl 0 ist, wird TitleNeu durch Anzahl nicht verändert.
** Wenn Anzahl positiv ist, werden so viele Parts aus dem Anfang von TitelNeu zurück gegeben, wie in Anzahl angegeben ist.
** Wenn Anzahl negativ ist, werden am Ende von TitelNeu so viele Teile entfernt, wie in Anzahl angegeben ist.
Dadurch lassen sich beliebige Teile von Titel zurück geben. Weitere Beispiele:
* {{#titleparts:Hilfe:a/b/c/d/e/f/g|0|4}} ergibt d/e/f/g (der Teil von Titel, der mit dem 4.Part beginnt)
* {{#titleparts:Hilfe:a/b/c/d/e/f/g|-3}} ergibt Hilfe:A/b/c/d (die letzten 3 Parts wurden entfernt)
* {{#titleparts:Hilfe:a/b/c/d/e/f/g|2|-5}} ergibt c/d (die ersten 2 von den letzten 5 Parts)
* {{#titleparts:Hilfe:a/b/c/d/e/f/g|-1|-4}} ergibt d/e/f (von den letzten 4 wurde der letzte entfernt)
Wenn Start 0 oder 1 ist, wird im ersten Part das erste Zeichen nach einem Doppelpunkt zu einem Großbuchstaben geändert. (Bug?) Beispiel:
* {{#titleparts:hilfe:a/b/c|0|1}} ergibt Hilfe:A/b/c
Siehe dazu r22711 und bug 6067.

### Verwendung mit subst

Die ParserFunctions können auch mit subst verwendet werden, solange kein Leerzeichen zwischen subst: und # steht.

## Überprüfung von Zeichenketten

Mit #expr: können zwar numerische Werte, jedoch keine Zeichenketten verwendet werden. Dies lässt sich aber über die folgenden Vorlagen bewerkstelligen. Sie sind nicht Teil der ParserFunctions, werden allerdings der Vollständigkeit halber hier mit aufgelistet, um einen umfassenden Überblick über die zur Vorlagen-Programmierung einsetzbaren Mittel zu geben.
Nachfolgend bedeutet wahr, dass der jeweilige Parameter eine nicht-leere Zeichenkette enthält sowie nicht nur aus Whitespaces besteht.

## Besonderheiten
### Tabellen

Die Wikisyntax für Tabellen kann derzeit nicht innerhalb von Bedingungen verwendet werden, daher existieren zwei Workarounds:

#### Methode A

Man versteckt das Pipe-Zeichen („|“) vor den Parserfunktionen indem man die Vorlage ! verwendet.

##### Weitere Vorlagen

Zusaätzlich zu diesen Vorlagen gibt es das Magische Wort „!“. {{!}} erzeugt |.

#### Methode B

Man verwende HTML-Tabellensyntax.

## Programmierhilfen

Um den Quelltext nicht zu sehr aufzublähen, gibt es auf Wikipedia Vorlagen, mit denen Berechnungen eingebunden werden können:
* Vorlage:Ziffer extrahiert eine Ziffer aus einer Ganzzahl.
* Vorlage:Quersumme berechnet eine Quersumme.
* Vorlage:Min und Vorlage:Max bestimmen das Minimum bzw. Maximum von zwei bis drei Zahlen.
Bei Bedarf können diese Vorlagen importiert werden.

## Testen

Vorlagen mit Parserfunktionen können auf der Spezialseite „Vorlagen expandieren“ getestet werden.

## Siehe auch

* Wikipedia:WikiProjekt Vorlagen

## Weblinks

* Erweiterung:ParserFunctions – Zentrale Beschreibungsseite im MediaWiki
* Hilfe:Erweiterung:ParserFunctions – Zentrale Hilfeseite im MediaWiki
* Hilfe:ParserFunctions in Vorlagen – Zentrale Hilfeseite im MediaWiki
* The discussion about the ParserFunctions in the Wikitech-l list archive
* Expr.php
* ParserFunctions.php
* ParserFunctions in MediaWiki SVN
* Druckversion des Buches MediaWiki/ Vertiefung
* Dieses Buch umfasst derzeit etwa DIN-A4-Seiten einschließlich Bilder.
* Wenn Sie dieses Buch drucken oder die Druckvorschau Ihres Browsers verwenden, ist diese Notiz nicht sichtbar.
* Zum Drucken klicken Sie in der linken Menüleiste im Abschnitt „Drucken/exportieren“ auf Als PDF herunterladen.
* Mehr Informationen über Druckversionen siehe Hilfe:Fertigstellen/ PDF-Versionen.
* Hinweise:
* Für einen reinen Text-Ausdruck kann man die Bilder-Darstellung im Browser deaktivieren:
* Internet-Explorer: Extras > Internetoptionen > Erweitert > Bilder anzeigen (Häkchen entfernen und mit OK bestätigen)
* Mozilla Firefox: Extras > Einstellungen > Inhalt > Grafiken laden (Häkchen entfernen und mit OK bestätigen)
* Opera: Ansicht > Bilder > Keine Bilder
* Texte, die in Klappboxen stehen, werden nicht immer ausgedruckt (abhängig von der Definition). Auf jeden Fall müssen sie ausgeklappt sein, wenn sie gedruckt werden sollen.
* Die Funktion „Als PDF herunterladen“ kann zu Darstellungsfehlern führen.
* Autorenliste, sofern möglich
Dieser Text ist sowohl unter der „Creative Commons Attribution/Share-Alike“-Lizenz 3.0 als auch GFDL lizenziert.
Eine deutschsprachige Beschreibung für Autoren und Weiternutzer findet man in den Nutzungsbedingungen der Wikimedia Foundation.