Adm:Einrichtung Wikis MW1.31: Unterschied zwischen den Versionen

Aus Salzwiki
Zur Navigation springen Zur Suche springen
 
(283 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 27: Zeile 27:
# Webserver Apache 2.4.34 64-Bit VC15 mit OpenSSL 1.1.0i und anderen Zusatzmodulen
# Webserver Apache 2.4.34 64-Bit VC15 mit OpenSSL 1.1.0i und anderen Zusatzmodulen
# Scriptsprache PHP 7.2.9 ThreadSafe 64-Bit (für Apache unter Windows) mit Zusatzmodulen
# Scriptsprache PHP 7.2.9 ThreadSafe 64-Bit (für Apache unter Windows) mit Zusatzmodulen
# Datenbank-Server (MySQL/)MariaDB 10.1.30 64-Bit
# Datenbank-Server (MySQL/)MariaDB 10.2.17 64-Bit
# Datenbank-Management-Anwendung phpMyAdmin 4.8.3
# Datenbank-Management-Anwendung phpMyAdmin 4.8.3
# Statistik-Anwendung Webalizer 32-Bit
# Statistik-Anwendung Webalizer 2.23-08 32-Bit
# Wikisystem MediaWiki 1.31.0 LTS mit Erweiterungen und Zusatz-Software
# Wikisystem MediaWiki 1.31.1 LTS mit Erweiterungen und Zusatz-Software
# GhostScript AGPL 9.23 (für MediaWiki) neue 64-Bit-Version von 2018 statt GPL-Variante gs_910w32.exe von 2013
# GhostScript AGPL 9.23 (für MediaWiki) neue 64-Bit-Version von 2018 statt GPL-Variante gs_910w32.exe von 2013
# ImageMagick (für MediaWiki) Version 7.0.8-11-Q16-HDRI-x64-dll.exe
# ImageMagick (für MediaWiki) Version 7.0.8-11-Q16-HDRI-x64-dll.exe
# php-imagick (für MediaWiki mit ImageMagick) neue 64-Bit-Version für PHP7.2-TS-VC15, sobald erhältlich
# php-imagick (für MediaWiki mit ImageMagick) neue 64-Bit-Version für PHP7.2-TS-VC15
# MiKTeX 2.9.6637 NetInstaller-Version mit Complete-Installation (für MediaWiki mit Formeln) 64-Bit-Version
# MiKTeX 2.9.6637 NetInstaller-Version mit Complete-Installation (für MediaWiki mit Formeln) 64-Bit-Version
# Statistik-Anwendung Matomo, vormals Piwik
# Statistik-Anwendung Matomo, vormals Piwik
Zeile 884: Zeile 884:
VC15 (2017) x64 TS: php-7.2.2-Win32-VC15-x64.zip (2018-02-01)
VC15 (2017) x64 TS: php-7.2.2-Win32-VC15-x64.zip (2018-02-01)


* Core-Erweiterung "Cite" erzeugt Fehler "Umcommitted DB writes"
* Core-Erweiterung "Cite" erzeugt Fehler "Uncommitted DB writes" und ist zu ersetzen durch die Erweiterung "CiteThisPage"
* Core-Erweiterung "ImageMap" erzeugt Fehler "Fatal exception of type MWException"
* Core-Erweiterung "ImageMap" erzeugt Fehler "Fatal exception of type MWException"


Zeile 916: Zeile 916:
* <del>xmlrpc</del>
* <del>xmlrpc</del>
* <del>xsl</del>
* <del>xsl</del>
Damit "cURL" von PHP verwendet wird, ist die Windows-Systemvariable "PATH" für PHP zu ergänzen. Hierzu "Systemsteuerung => System und Sicherheit => System => Erweiterte Systemeinstellungen" auswählen, im Fenster "Systemeigenschaften" beim Karteikartenreiter "Erweitert" die Schaltfläche "Umgebungsvariablen..." auswählen und bei "Systemvariablen" die Variable "PATH" markieren. Anschließend über die Schaltfläche "Bearbeiten..." folgenden Eintrag am Ende hinzufügen:
<pre>
...;D:\noxampp\php\
</pre>


===== zusätzliche Module =====
===== zusätzliche Module =====


====== php-imagick ======
* imagick
 
Das Modul "php-imagick" für Windows kann auf folgenden Seiten heruntergeladen werden:
* http://windows.php.net/downloads/pecl/releases/imagick/
* http://www.peewit.fr/imagick/
 
Erforderlich ist für die Wikis mit dem Webserver "Apache" die TS-Variante.
 
Bei php.net=>pecl gibt es folgende Versionen (Stand 2018-10-26 und 2018-03-06):
* 3.4.3 und 3.4.3rc4 für
** PHP7.1 VC14 jeweils x86 und x64 sowie TS und NTS
** PHP7.0 VC14 jeweils x86 und x64 sowie TS und NTS
** PHP5.6 VC11 jeweils x86 und x64 sowie TS und NTS
** PHP5.5 VC11 jeweils x86 und x64 sowie TS und NTS


Bei www.peewit.fr gibt es folgende Versionen (Stand 2018-08-31 und 2018-03-06):
Die dll-Datei "php_imagick.dll" für das Modul "imagick" kann bei "PECL" heruntergeladen werden: https://windows.php.net/downloads/pecl/releases/imagick/.
* 3.4.3 stable für
** PHP7.2 VC15 x64 NTS (nur IIS, nicht Apache)
* 3.3.0RC2 beta für
** PHP7.0 VC14 x64 NTS (nur IIS, nicht Apache)
* 3.2.0RC1 beta für
** PHP5.6 VC11 x86 jeweils NTS und TS
** PHP5.5 VC11 x86 jeweils NTS und TS
** PHP5.4 VC9 x86 jeweils NTS und TS


==== php-Konfiguration ====
==== php-Konfiguration ====
Zeile 1.016: Zeile 1.000:
Die PHP-Erweiterung für ImageMagick kann unter folgenden Adressen heruntergeladen werden:
Die PHP-Erweiterung für ImageMagick kann unter folgenden Adressen heruntergeladen werden:
* http://windows.php.net/downloads/pecl/releases/imagick/
* http://windows.php.net/downloads/pecl/releases/imagick/
** 3.4.3 und 3.4.3RC4 für
** 3.4.4 (Stand 2019-08-13) für
*** PHP 7.2 VC15 x86 und x64 NTS und TS
*** PHP 7.1 VC15 x86 und x64 NTS und TS
*** PHP 7.0 VC15 x86 und x64 NTS und TS
** 3.4.3 (Stand 2019-01-22) für
*** PHP 7.1 VC14 x86 und x64 NTS und TS
*** PHP 7.1 VC14 x86 und x64 NTS und TS
*** PHP 7.0 VC14 x86 und x64 NTS und TS
*** PHP 7.0 VC14 x86 und x64 NTS und TS
*** PHP 5.6 VC11 x86 und x64 NTS und TS
*** PHP 5.6 VC11 x86 und x64 NTS und TS
*** PHP 5.5 VC11 x86 und x64 NTS und TS
*** PHP 5.5 VC11 x86 und x64 NTS und TS
* http://www.peewit.fr/imagick/
 
* https://windows.php.net/downloads/pecl/snaps/imagick/3.4.3/
** 3.4.3 (Stand 2019-01-22) für
*** PHP 7.3 VC15 x86 und x64 NTS und TS
*** PHP 7.2 VC15 x86 und x64 NTS und TS
*** PHP 7.1 VC14 x86 und x64 NTS und TS
 
* http://www.peewit.fr/imagick/ (Stand 2019-08-13)
** Imagick 3.4.3 stable für PHP 7.2 VC15 x64 NTS (IIS)
** Imagick 3.4.3 stable für PHP 7.2 VC15 x64 NTS (IIS)
** Imagick 3.3.0RC2 beta für PHP 7.0 VC14 x64 NTS (IIS)
** Imagick 3.3.0RC2 beta für PHP 7.0 VC14 x64 NTS (IIS)
Zeile 1.028: Zeile 1.023:
*** PHP 5.5 VC11 x86 NTS (IIS) und TS (Apache)
*** PHP 5.5 VC11 x86 NTS (IIS) und TS (Apache)
*** PHP 5.4 VC9 x86 NTS (IIS) und TS (Apache)
*** PHP 5.4 VC9 x86 NTS (IIS) und TS (Apache)
* https://windows.php.net/downloads/pecl/deps/
** ImageMagick-7.0.7-11-vc15-x64.zip


Zur Nutzung von php-imagick folgende Schritte ausführen:
Zur Nutzung von php-imagick für PHP 7.2 mit VC15 folgende Schritte ausführen:
* Für PHP 7.2.???
 
*# "php_imagick-3.4.???-7.2 ts-vc15-x64.zip" (PECL) oder alternativ die Datei "php_imagick-3.???-7.2-ts-vc15-x64.zip" (peewit) herunterladen und die VC15-kompilierte ThreadSafe-Datei Datei "php_imagick.dll" in das PHP-Unterverzeichnis "ext/" kopieren
# "php_imagick-3.4.4-7.2 ts-vc15-x64.zip" (PECL) herunterladen
*# Für PHP 5.7.2 in der Datei "php.ini" im Bereich Windows Extensions die Datei "php_imagick.dll" einbinden:<br/>extension=php_imagick.dll
# die VC15-kompilierte 64-Bit-ThreadSafe-Datei "php_imagick.dll" in das PHP-Unterverzeichnis "ext/" kopieren
# Für PHP 5.7.2 in der Datei "php.ini" im Bereich Windows Extensions die Datei "php_imagick.dll" einbinden<pre>extension=imagick</pre>
# Den Apache-Webserver-Dienst neu starten


== GhostScript ==
== GhostScript ==
Zeile 1.049: Zeile 1.048:
== ImageMagick ==
== ImageMagick ==


# ImageMagick Version 7.0.8-11 Q16 HDRI dll (dynamic) herunterladen von https://www.imagemagick.org/script/download.php
# ImageMagick 64-Bit herunterladen von
#* 64-Bit: 7.0.8-11-Q16-HDRI-x64-dll.exe
#* https://www.imagemagick.org/script/download.php => 7.0.8-11-Q16-HDRI-x64-dll.exe (Version 7.0.8-11 Q16 HDRI dll, dynamic)
#* (https://windows.php.net/downloads/pecl/deps/ => ImageMagick-7.0.7-11-vc15-x64.zip, ohne Installationsdatei und mit anderen Verzeichnisinhalten)
# ImageMagick als Administrator im Unterverzeichnis "D:\texmf\imagick\" installieren  
# ImageMagick als Administrator im Unterverzeichnis "D:\texmf\imagick\" installieren  
## ImageMagick dll-Datei (bei vorhandener Windows-Server-Konfigurationsberechtigung), sonst static-Datei (nur XAMPP-Zugriffsberechtigungen), inkl.
## ImageMagick dll-Datei (bei vorhandener Windows-Server-Konfigurationsberechtigung), sonst static-Datei (nur XAMPP-Zugriffsberechtigungen), inkl.
Zeile 1.684: Zeile 1.684:
==== MW Version 1.25 ====
==== MW Version 1.25 ====


* implementierte Erweiterungen
** "CiteThisPage" (="Zitierhilfe") ersetzt "SpecialCite"
* Skins
* Skins
** "Autodiscovery mechanism" entfällt
** "Autodiscovery mechanism" entfällt
Zeile 1.717: Zeile 1.719:
</pre>
</pre>
* Nicht mehr unterstützt wird "register_globals => Bei PHP vor Version 5.4 in der Datei "php.ini" angeben "register_globals=Off"
* Nicht mehr unterstützt wird "register_globals => Bei PHP vor Version 5.4 in der Datei "php.ini" angeben "register_globals=Off"
* Nicht mehr unterstützt werden Sprachdateien im "php"-Dateiformat, sondern nur noch Dateien im "json"-Dateiformat
* Erweiterung "OggHandler" wird nicht mehr unterstützt
* Erweiterung "OggHandler" wird nicht mehr unterstützt


Zeile 1.731: Zeile 1.734:
** Simple.php, simple
** Simple.php, simple
** Standard.php, standard
** Standard.php, standard
* "The info page action, which provides useful statistics for any given page, has been improved and turned on by default."
* Sprachdateien sind separate "json"-Dateien für jede Sprache statt einer gemeinsamen "php"-Datei für alle Sprachen; letztere gelten als "deprecated"
* $wgLocalInterwiki gilt als "deprecated" und kann ersetzt werden mit "$wgLocalInterwikis"
* $wgImageMagickIdentifyCommand für XCF-Dateien gilt als "deprecated", weil MediaWiki inzwischen das in "ImageMagick" enthaltene Kommando von sich aus nutzen kann
* "The info page action, which provides useful statistics for any given page, has been improved and turned on by default."
* Bei "Spezialseiten" wird die "ISBN-Suche" unter "Daten und Werkzeuge" statt unter "Andere Spezialseiten" angezeigt.
* Bei "Spezialseiten" wird die "ISBN-Suche" unter "Daten und Werkzeuge" statt unter "Andere Spezialseiten" angezeigt.
* $wgPasswordSenderName wurde abgeschafft; der Name für die E-Mail-Adresse von $wgPasswordSender kann nur noch in der Seite "MediaWiki:Emailsender" angepasst werden
* $wgPasswordSenderName wurde abgeschafft; der Name für die E-Mail-Adresse von $wgPasswordSender kann nur noch in der Seite "MediaWiki:Emailsender" angepasst werden
Zeile 1.756: Zeile 1.762:


* $wgEnableCreativeCommonsRdf für "LocalSettings.php" wird nicht mehr unterstützt; stattdessen gibt es eine Erweiterung [http://www.mediawiki.org/wiki/Extension:CreativeCommonsRdf|"CreativeCommonsRdf"], die Beta-Status hat (2015-09-21).
* $wgEnableCreativeCommonsRdf für "LocalSettings.php" wird nicht mehr unterstützt; stattdessen gibt es eine Erweiterung [http://www.mediawiki.org/wiki/Extension:CreativeCommonsRdf|"CreativeCommonsRdf"], die Beta-Status hat (2015-09-21).
* $wgImageMagickIdentifyCommand für XCF-Dateien


* In der revision-Tabelle ist eine neue Spalte "rev_sha1" hinzugekommen, die in der alten Version vor einem Update hinzugefügt werden muss; siehe [http://www.mediawiki.org/wiki/Manual:FAQ|Mediawiki FAQ] Punkt 3.2, [http://www.mediawiki.org/wiki/Manual:Revision_table|Mediawiki Manual Revision_table] und http://www.mediawiki.org/wiki/Thread:Project:Support_desk/upgrade_problems:_1.11_--_1.21:<pre>ALTER TABLE /*$wgDBprefix*/revision ADD rev_sha1 varbinary(32) NOT NULL default '';</pre>
* In der revision-Tabelle ist eine neue Spalte "rev_sha1" hinzugekommen, die in der alten Version vor einem Update hinzugefügt werden muss; siehe [http://www.mediawiki.org/wiki/Manual:FAQ|Mediawiki FAQ] Punkt 3.2, [http://www.mediawiki.org/wiki/Manual:Revision_table|Mediawiki Manual Revision_table] und http://www.mediawiki.org/wiki/Thread:Project:Support_desk/upgrade_problems:_1.11_--_1.21:<pre>ALTER TABLE /*$wgDBprefix*/revision ADD rev_sha1 varbinary(32) NOT NULL default '';</pre>
Zeile 1.763: Zeile 1.770:
* MySQL 5.0.2 oder neuer ist erforderlich
* MySQL 5.0.2 oder neuer ist erforderlich
* mehr Genderneutralität bei Sprachdateien
* mehr Genderneutralität bei Sprachdateien
* Neue "Hooks"
** BaseTemplateToolbox
* implementierte Erweiterungen:
* implementierte Erweiterungen:
** ConfirmEdit
** ConfirmEdit
Zeile 1.784: Zeile 1.793:
* neue Variable $wgPasswordSenderName (existiert nur bis Version 1.22)
* neue Variable $wgPasswordSenderName (existiert nur bis Version 1.22)


= SalzWiki =
= SalzWiki SaltWiki Repository =


== Anpassungen an Systemdateien ==
== Anpassungen an Systemdateien ==


Verzeichnisse und Dateien im jeweiligen Wiki:
Nach der Installation sowie der Sicherung der Datenbanken sind Anpassungen für folgende Verzeichnisse und Dateien im jeweiligen Wiki vorzunehmen:
* includes
* includes
** skins\
** skins\
*** Skin.php für 2 Varianten des linken Menüs
*** <del>Skin.php</del> für 2 Varianten des linken Menüs
*** SkinTemplate.php für Spezialseiten-Zugriffsbeschränkung
*** <del>SkinTemplate.php</del> für Spezialseiten-Zugriffsbeschränkung
** <del>specialpages\SpecialPageFactory.php</del>
** <del>specialpages\SpecialPageFactory.php</del>
* languages
* languages
** i18n\de-formal.json für Text bei Kontaktformular
** i18n\de-formal.json für Text bei Kontaktformular
* skins
* skins
** MonoBook\includes\MonoBookTemplate.php für Footer-Elemente
** <del>MonoBook\includes\MonoBookTemplate.php</del> für Footer-Elemente und eingeschränkte Sichtbarkeit von Werkzeugen
** MonoBook\resources\ (früher Datei "main.css")
** MonoBook\resources\ (enthielt in älteren Versionen die Datei "main.css")
*** screen-common.less
*** screen-common.less
*** screen-desktop.less
*** screen-desktop.less
*** variables.less für allgemeine Farben
*** variables.less für allgemeine Farben
*** skinStyles\mediawiki.special.preferences.styles.less für Farben in bestimmten Seitenbereichen
*** skinStyles\mediawiki.special.preferences.styles.less für Farben in bestimmten Seitenbereichen
== "Hooks" ==
Um Anpassungen im Wiki-Code zu vermeiden, die bei MW1.16 vorgenommen wurden, werden folgende sogenannte MW-"Hooks" in der Datei "LocalSettings.php" verwendet:
* "BaseTemplateToolbox", seit MW 1.18 verfügbar, für Werkzeuge-Berechtigungen in der Menüleiste links
* "SkinBuildSidebar", seit MW1.14 verfügbar, für Menüleisten-Berechtigungen links
* "SkinTemplateOutputPageBeforeExec", seit MW 1.10 verfügbar, für Fußzeile mittig
* "SpecialPage_initList", seit MW.1.7.0 verfügbar, für Spezialseiten-Berechtigungen


== Upgrade vorhandener Wikis ==
== Upgrade vorhandener Wikis ==
Zeile 1.879: Zeile 1.896:
*Die Dateien und Verzeichnisse aus der tar.gz-Datei in das jeweilige Wiki-Verzeichnis entpacken:
*Die Dateien und Verzeichnisse aus der tar.gz-Datei in das jeweilige Wiki-Verzeichnis entpacken:
<pre>"D:\noxampp\htdocs\[wikiverzeichnisname]\"</pre>
<pre>"D:\noxampp\htdocs\[wikiverzeichnisname]\"</pre>
*Nach Installationsanweisung das jeweilige Wiki installieren; hierzu im Browser die Adresse "D:\noxampp\htdocs\[wikiverzeichnisname]\mw-config\index.php" aufrufen.
*Nach Installationsanweisung das jeweilige Wiki installieren; hierzu im Browser die Adresse "D:\noxampp\htdocs\[wikiverzeichnisname]\mw-config\index.php" oder "localhost/[wikiverzeichnisname]" aufrufen.
**Contact e-mail: service@salzwiki.hawk-hhg.de
* Warnungen ignorieren
**Language: Je nach Wiki Deutsch oder English
** GNU diff3 wurde nicht gefunden
**Copyright/license: Creative Commons BY-NC-SA (Namensnennung, nicht kommerziell, Weitergabe unter gleichen Bedingungen)
** Die Versionsverwaltungssoftware "git" wurde nicht gefunden
**Admin username: Hornemann
** Die PECL-Erweiterung intl ist für die Unicode-Normalisierung nicht verfügbar
**Object caching: No
* Angaben eintragen
**E-Mail
** Contact e-mail: service@salzwiki.hawk-hhg.de
***E-mail features: enabled
** Language: Je nach Wiki Deutsch oder English
***User-to-user e-mail: enabled
** Copyright/license: Creative Commons BY-NC-SA (Namensnennung, nicht kommerziell, Weitergabe unter gleichen Bedingungen)
***E-mail notification: enabled for discussion pages and watchlists
** Admin username: Hornemann
***E-mail address authentication: enabled
** Object caching: No
**Datenbank
** E-Mail
***Database type: MySQL
*** E-mail features: enabled
***Database host: localhost
*** User-to-user e-mail: enabled
***Database name: [wikiname]
*** E-mail notification: enabled for discussion pages and watchlists
***DB username: SW_sawi (SalzWiki, SaltWiki) bzw. SW_repo (Repositorium) <del>hi_wiki_1</del>
*** E-mail address authentication: enabled
***Superuser account: yes
** Datenbank
***Superuser name: root
*** Database type: MySQL
***Database table prefix: sw_ (SalzWiki, Saltwiki) bzw. sr_ (Repositorium)
*** Database host: localhost
***Storage Engine: InnoDB
*** Database name: [wikiname]
***Database character set: MySQL 4.1/5.0 binary
*** DB username: SW_sawi (SalzWiki, SaltWiki) bzw. SW_repo (Repositorium) <del>hi_wiki_1</del>
**Wiki
*** Superuser account: yes
***SalzWiki bzw. SaltWiki bzw. Repository
*** Superuser name: root
***Projektraum entspricht Namen des Wikis
*** Database table prefix: sw_ (SalzWiki, Saltwiki) bzw. sr_ (Repositorium)
***Benutzername: Hornemann
*** Storage Engine: InnoDB
***E-Mail-Adresse: salzwiki@hornemann-institut.de
*** Database character set: MySQL 4.1/5.0 binary
**Optionen
** Wiki
***ausschließlich berechtigte Bearbeiter (SalzWiki, SaltWiki) bzw. geschlossenes Wiki (Repository)
*** SalzWiki bzw. SaltWiki bzw. Repository
**Benutzeroberflächen
*** Projektraum entspricht Namen des Wikis
***MonoBook = Standard aktivieren
*** Benutzername: Hornemann
***Timeless (responsive)
*** E-Mail-Adresse: salzwiki@hornemann-institut.de
***Vector
** Optionen
**Erweiterungen
*** ausschließlich berechtigte Bearbeiter (SalzWiki, SaltWiki) bzw. geschlossenes Wiki (Repository)
***CiteThisPage
** Benutzeroberflächen
***Interwiki
*** MonoBook = Standard aktivieren
***Renameuser
*** Timeless (responsive)
***WikiEditor
*** Vector
***CategoryTree
** Erweiterungen
***Cite
*** CiteThisPage
***ImageMap
*** Interwiki
***ParserFunctions
*** Renameuser
***ConfirmEdit
*** WikiEditor
***SpamBlacklist
*** CategoryTree
***MultimediaViewer
*** Cite
**Hochladen/Uploads
*** ImageMap
***ermöglichen
*** ParserFunctions
***Verzeichnis: D:\noxampp\htdocs\[wikiname]\images\deleted
*** ConfirmEdit
***Logo-URL: $wgResourceBasePath/resources/assets/wiki.png bzw. $wgScriptPath/images/common/Logo.png
*** SpamBlacklist
*** MultimediaViewer
** Hochladen/Uploads
*** ermöglichen
*** Verzeichnis: D:\noxampp\htdocs\[wikiname]\images\deleted
*** Logo-URL: $wgResourceBasePath/resources/assets/wiki.png bzw. $wgScriptPath/images/common/Logo.png


=== Lizenz für das jeweilige Wiki  ===
=== Lizenz für das jeweilige Wiki  ===
Zeile 2.116: Zeile 2.138:
=== Fußzeile "Footer" anpassen ===
=== Fußzeile "Footer" anpassen ===


==== Logos mit Verlinkung und Footerlinks anpassen MW 1.23 ====
Um "Footer"-Verweise auszublenden und anzupassen sowie eigene Logos mit Verlinkung einzufügen, sind folgende Schritte notwendig:


* Grafiken wie die Logos "HI.png", "HAWK.png" und <del>"DFG.jpg"</del> "SIK.png" im Verzeichnis "[wikiverzeichnisname]/images/common/" speichern.
* Grafiken wie die Logos "HI.png", "HAWK.png" und <del>"DFG.jpg"</del> "SIK.png" im Verzeichnis "[wikiverzeichnisname]/images/common/" speichern.
* Seite "MediaWiki:Disclaimers" anpassen
* [[#LocalSettings.php anpassen|LocalSettings.php anpassen]]
* [[#LocalSettings.php anpassen|LocalSettings.php anpassen]]
* [[#MonoBookTemplate.php anpassen (Wiki-Code)|MonoBookTemplate.php anpassen (Wiki-Code)]]
* [[#MonoBookTemplate.php nicht mehr anpassen (Wiki-Code)|MonoBookTemplate.php nicht mehr anpassen (Wiki-Code)]]


===== LocalSettings.php anpassen =====
==== LocalSettings.php anpassen ====


Änderungen in der Datei "LocalSettings.php" <del>"MonoBookSW.php": Zeile 141ff</del>:
Änderungen in der Datei "LocalSettings.php" <del>"MonoBookSW.php": Zeile 141ff</del>:


Die Anzeige der Texte von "lastmodified", "Anzahl der Seitenabrufe" und "CC-Lizenz" kann wie folgt unterbunden werden. Hierbei wird "Anzahl der Seitenabrufe" in der Datei "LocalSettings.php" festgelegt:
===== Ausblendung des Besuche-Zählers entfällt =====
 
Seit MW1.25 ist die Variable $wgDisableCounters nicht mehr verfügbar, weil die Zählfunktion nicht mehr unterstützt wird. Als Ersatz soll die Erweiterung [https://www.mediawiki.org/wiki/Extension:HitCounters|"HitCounters"] verwendet werden können.
 
Die Anzeige der Texte von "Anzahl der Seitenabrufe" wurde bei MW1.23 wie folgt unterbunden:
<pre>
<pre>
$wgDisableCounters = true;
$wgDisableCounters = true;
</pre>
</pre>


===== Anpassung für Logos links und rechts =====
Die Logos und Verweise links für "Hornemann Institut", "HAWK" und "SIK" sowie rechts für "CC-Lizenz" und "Powered by MediaWiki" werden wie folgt festgelegt:
<pre>
<pre>
#### Beginn FOOTER ab Version MW1.23
#### Beginn FOOTER ab Version MW1.23
Zeile 2.173: Zeile 2.203:
</pre>
</pre>


===== MonoBookTemplate.php anpassen (Wiki-Code) =====
===== Anpassung mittlerer Fußzeilen-Elemente =====
 
Die Änderung von "Über [Wiki-Name]" zu "Forschungsverbund"/"Projektverbund" findet nicht mehr statt, weshalb "about" weggelassen wird. Zusätzlich muss "Disclaimer" durch "Impressum" ersetzt werden.
 
Der verwendete "Hook", um Fußzeilen-Elemente auszublenden, heißt "SkinTemplateOutputPageBeforeExec" und steht seit MW1.10 zur Verfügung.
 
Die Anzeige der Texte von "lastmodified", "about" und "CC-Lizenz" im mittleren Bereich kann mit einem "Hook" wie folgt unterbunden werden:
<pre>
#### Beginn mittlerer FOOTER ab Version MW1.31
// Elemente verbergen
$wgHooks['SkinTemplateOutputPageBeforeExec'] = 'lfHide';
function lfHide( $skin, &$template ) {
  $template->set( "lastmod", "");
  $template->set( "copyright", "");
  $template->set( "about", "");
  return true;
};
// "Haftungsausschluss" wird auf der Seite "MediaWiki:Disclaimers" durch "Impressum" ersetzt
// Datenschutz ist bei MW1.31 mit "privacy" standardmäßig enthalten
// Projektverbund soll nicht mehr im Fußbereich erscheinen
#### Ende mittlerer FOOTER ab Version MW1.31
</pre>
 
Für neue, geänderte und ausgeblendete Footer-Verweise, siehe auch https://www.mediawiki.org/wiki/Manual:Footer. Nicht mehr erforderliche Festlegungen:
<pre>
// "Haftungsausschluss" wird auf der Seite "MediaWiki:Disclaimers" durch "Impressum" ersetzt
#$wgHooks['SkinTemplateOutputPageBeforeExec'][] = function ($sk, &$tpl){
#  $tpl->set('impressum', $sk->footerLink('impressum', 'Impressum'));
#  $tpl->data['footerlinks']['places'][] = 'impressum';
#  return true;
#}
// Datenschutz ist bei MW1.31 standardmäßig enthalten
#$wgHooks['SkinTemplateOutputPageBeforeExec'][] = function ($sk, &$tpl){
#  $tpl->set('datenschutz', $sk->footerLink('datenschutz', 'Datenschutz'));
#  $tpl->data['footerlinks']['places'][] = 'datenschutz';
#  return true;
#}
// Projektverbund soll nicht mehr im Fußbereich erscheinen
#$wgHooks['SkinTemplateOutputPageBeforeExec'][] = function ($sk, &$tpl){
#  $tpl->set('projektverbund', $sk->footerLink('projektverbund', 'Projektverbund'));
#  $tpl->data['footerlinks']['places'][] = 'projektverbund';
#  return true;
#}
</pre>
 
Angeblich können auch nicht erwünschte "Footer"-Seiten ausgeblendet werden, indem im Namensraum "MediaWiki:..." der enthaltene Text durch einen Bindestrich ersetzt wird, siehe https://www.mediawiki.org/wiki/Manual:Footer#Customizing_the_Built-in_items letzte Zeile. Dann müsste aber bei der entsprechenden Seite für jede Sprache die Änderung erfolgen.
 
Ursprüngliche Texte für "de-formal":
* "MediaWiki:About": Über
* "MediaWiki:Copyright": Der Inhalt ist verfügbar unter der Lizenz $1, sofern nicht anders angegeben.
* "MediaWiki:Lastmodifiedat": Diese Seite wurde zuletzt am $1 um $2 Uhr bearbeitet.
 
==== MonoBookTemplate.php nicht mehr anpassen (Wiki-Code) ====


Bei MW1.31 ist die Datei "MonoBookTemplate.php" im neuen Unterverzeichnis "[wikiname]\skins\MonoBook\includes\" anzupassen.
Bei MW1.31 ist die Datei "MonoBookTemplate.php" im neuen Unterverzeichnis "[wikiname]\skins\MonoBook\includes\" enthalten.


Bei MW1.27.4 befand sich die Datei noch im Verzeichnis "[wikiname]\skins\MonoBook\".
Bei MW1.27.4 befand sich die Datei noch im Verzeichnis "[wikiname]\skins\MonoBook\".
Bei MW1.23.11 wurde stattdessen die Datei "[wikiname]\skins\MonoBook.php" angepasst.  
Bei MW1.23.11 wurde stattdessen die Datei "[wikiname]\skins\MonoBook.php" angepasst.  


Da die Datei "MonoBookTemplate.php" bearbeitet werden muss, wird im Verzeichnis "[wikiname]\skins\MonoBook\includes\" eine Kopie der Datei als "MonoBookTemplate_original.php" gespeichert und von der geänderten Datei als Backup für Wiki-Updates ebenfalls im Verzeichnis "\MonoBook" eine Kopie als "MonoBookTemplate_SW.php" gespeichert.
Bei MW1.31 finden keine Änderungen in der Datei "MonoBookTemplate.php" für die Texte von "lastmodified" und "CC-Lizenz" sowie der Verweis zu "Über" bzw. "About" durch eigenen Code unter Zeile 529 statt, weil die Anpassung in der Datei "LocalSettings.php" mit einem "Hook" erzeugt werden kann. Bei MW1.31 nicht erforderliche Änderung:
 
Bei MW1.31 werden in der Datei "MonoBookTemplate.php" die Texte von "lastmodified" und "CC-Lizenz" sowie der Verweis zu "Über" bzw. "About" durch eigenen Code unter Zeile 529 herausgefiltert:
<pre>
<pre>
   foreach ( $validFooterLinks as $aLink ) {
   foreach ( $validFooterLinks as $aLink ) {
     if($aLink!=="lastmod" && $aLink!=="copyright" && $aLink!=="about"){ /*eingefügt für HAWK HHG 2018-10-15,2016-03-29,2015-12-07*/
     #if($aLink!=="lastmod" && $aLink!=="copyright" && $aLink!=="about"){ /*eingefügt für HAWK HHG 2018-10-15,2016-03-29,2015-12-07*/
       $html .= Html::rawElement(
       $html .= Html::rawElement(
         'li',
         'li',
Zeile 2.191: Zeile 2.271:
         $this->get( $aLink )
         $this->get( $aLink )
       );
       );
     } /*eingefügt für HAWK HHG 2018-10-15,2016-03-29,2015-12-07*/
     #} /*eingefügt für HAWK HHG 2018-10-15,2016-03-29,2015-12-07*/
   }
   }
   ?>
   ?>
Zeile 2.206: Zeile 2.286:
   ?>
   ?>
</pre>
</pre>
Original:
Original-Code bei MW1.27:
<pre>
<pre>
   <?php
   <?php
Zeile 2.217: Zeile 2.297:
</pre>
</pre>


===== Footer-Elemente rechts =====
==== HTML-Footer-Elemente ====
 
Bei MW1.23 bis 1.31 kann die Variable $wgFooterIcons für Icons links und rechts unten im Footer erweitert werden.
Bei MW1.16 bis 1.26 gab es die Variable $wgCopyrightIcon, mit der nur der Bereich rechts unten im Footer angepasst werden konnte.
 
Bei MW1.31 besteht der Footer-Container aus folgenden Bereichen:
* div id="footer"
** div id="f-copyrightico" (unterer Footer-Bereich links)
** div id="f-poweredbyico" (unterer Footer-Bereich rechts)
** ul id="f-list" (oberer=mittlerer Footer-Bereich)
*** li id="privacy"
*** li id="about"
*** li id="disclaimer"
 
Bei MW1.27 bestand der Footer-Container aus folgenden Bereichen:
* div id="footer"
** div id="f-copyrightico" (unterer Footer-Bereich links)
** div id="f-poweredbyico" (unterer Footer-Bereich rechts)
** ul id="f-list" (oberer=mittlerer Footer-Bereich)
*** li id="lastmod"
*** li id="copyright"
*** li id="privacy"
*** li id="about"
*** li id="disclaimer"


Die Variable $wgFooterIcons kann nur für Icons rechts unten im Footer erweitert werden. Der Footer-Container besteht aus folgenden Bereichen:
Bei MW1.23 bestand der Footer-Container aus folgenden Bereichen:
* div id="footer"
** div id="f-copyrightico" (unterer Footer-Bereich links)
** div id="f-poweredbyico" (unterer Footer-Bereich rechts)
** ul id="f-list" (oberer=mittlerer Footer-Bereich)
*** li id="lastmod"
*** li id="viewcount"
*** li id="copyright"
*** li id="privacy"
*** li id="about"
*** li id="disclaimer"
 
Bei MW1.16 bestand der Footer-Container aus folgenden Bereichen:
* ul id="footer-info" (oberer Footer-Bereich)
* ul id="footer-info" (oberer Footer-Bereich)
  * li id="footer-info-lastmod"
** li id="footer-info-lastmod"
  * li id="footer-info-copyright"
** li id="footer-info-copyright"
* ul id="footer-places" (unterer Footer-Bereich links)
* ul id="footer-places" (unterer Footer-Bereich links)
  * ul id="footer-places-privacy"
** ul id="footer-places-privacy"
  * ul id="footer-places-about"
** ul id="footer-places-about"
  * ul id="footer-places-disclaimer"
** ul id="footer-places-disclaimer"
* ul id="footer-icons" (unterer Footer-Bereich rechts)
* ul id="footer-icons" (unterer Footer-Bereich rechts)
  * ul id="footer-copyrightico"
** ul id="footer-copyrightico"
  * ul id="footer-poweredbyico"
** ul id="footer-poweredbyico"


===== $wgHooks entfällt =====
=== Favicon ===


Nicht mehr erforderlich seit MW1.23: Anpassungen mit $wgHooks in der Datei "LocalSettings.php" für neue Footer-Verweise, siehe auch https://www.mediawiki.org/wiki/Manual:Footer:
Damit in der Browser-Adresszeile ein Favicon dargestellt wird, ist eine Datei "salzwiki.ico" in das jeweilige Wiki-Verzeichnis hochzuladen und folgender Eintrag in der jeweiligen Datei "LocalSettings.php" vorzunehmen:
<pre>
<pre>
$wgHooks['SkinTemplateOutputPageBeforeExec'][] = 'lfDatenschutz';
#$wgFavicon = "/[wikiverzeichnisname]/salzwiki.ico";
function lfDatenschutz($sk, &$tpl){
$wgFavicon = $wgResourceBsePath."/salzwiki.ico";
  $tpl->set('Datenschutz', $sk->footerLink('Datenschutz', 'Salzwiki:Datenschutz'));
</pre>
  $tpl->data['footerlinks']['places'][] = 'Datenschutz';
 
  return true;
=== Bug-Beseitigung bei SHA1-Spalten ===
}
$wgHooks['SkinTemplateOutputPageBeforeExec'][] = 'lfProjektverbund';
function lfProjektverbund($sk, &$tpl){
  $tpl->set('Projektverbund', $sk->footerLink('Projektverbund', 'Projektverbund'));
  $tpl->data['footerlinks']['places'][] = 'Projektverbund';
  return true;
}
$wgHooks['SkinTemplateOutputPageBeforeExec'][] = 'lfImpressum';
function lfImpressum($sk, &$tpl){
  $tpl->set('Impressum', $sk->footerLink('Impressum', 'Salzwiki:Impressum'));
  $tpl->data['footerlinks']['places'][] = 'Impressum';
  return true;
}</pre>


==== "Forschungsverbund"/"Projektverbund" statt "Über [Wiki-Name]" ====
Nach dem Upgrade auf MW1.31 erscheint beim Versuch Seiten zu verschieben eine Fehlermeldung "MediaWiki\Storage\IncompleteRevisionException". Sie wird verursacht durch leere Spaltenwerte in den Tabellen-Spalten "rev_sha1" der Tabelle "[Präfix]revision" und "ar_sha1" der Tabelle "[Präfix]archive", siehe
* https://www.mediawiki.org/wiki/Topic:Uhu2g8owqqp56alm
* https://www.mediawiki.org/wiki/Topic:Utoozxajegykbfl2


Damit im "Footer" statt auf die Seite "Über SalzWiki" auf die Seite <del>"Forschungsverbund"</del> "Projektverbund" bzw. "Research Network" verlinkt wird, sind Änderungen an "Aboutsite" und "Aboutpage" vorzunehmen. Hierzu entweder über "Spezialseiten->Systemdaten und Werkzeuge->MediaWiki-Systemtexte" gehen oder folgende Adressen eingeben:
Abhilfe schafft die Datei "populateRevisionSha1.php --force" im Verzeichnis "maintenance" des jeweiligen Wikis:
<pre>
<pre>
"[Wiki-Verzeichnis]/index.php?title=MediaWiki:Aboutsite/de[-formal|-at|-ch]&action=edit"
cd D:
bzw.
cd noxampp\php
"[Wiki-Verzeichnis]/index.php?title=MediaWiki:Aboutpage/de&action=edit"
php.exe D:\noxampp\apache\htdocs\wikiname\maintenance\populateRevisionSha1.php --force
</pre>
*Link-Text in "aboutsite" bearbeiten:
<pre>Projektverbund
<!--Über {{SITENAME}}-->
</pre>
*Seitenname, zu dem verlinkt wird, in "aboutpage" bearbeiten:
<pre>Project:Über
</pre>
ersetzen durch
<pre>Forschungsverbund
</pre>
</pre>


Diese Änderungen müssen auf allen Sprach-Subpages für Aboutsite und Aboutpage - nämlich für "de", "de-formal", "de-at" und "de-ch" - durchgeführt werden, da die Änderungen an den Seiten "Aboutpage" und "Aboutsite" sich nur bei den Standard-Sprachversion wie "de" auswirken, jedoch nicht z. B. bei "de-formal". Deshalb wurden als auszuwählende Sprachen "de-formal", "de-at" und "de-ch" vorerst deaktiviert in der Datei [wikiverzeichnisname]\languages\Names.php
Sofern beim Versuche eine Seite zu verschieben dann noch eine Fehlermeldung erscheint, ist in der Tabelle "content" die Spalte "content_sha1" zu prüfen und gegebenenfalls mit "populateContentTables.php" anzupassen, bevor das zuvor genannte Script ausgeführt wird, siehe https://phabricator.wikimedia.org/T200653:
Wenn ein User in den Profileinstellungen die Sprache abweichend von der Festlegung "de-formal" in der Datei "LocalSettings.php" auf "de" einstellt, funktioniert eventuell "Forschungsverbund" erst, nachdem "English" oder eine andere nicht-deutsche Sprache eingestellt wurde.
 
<pre>
<pre>
'de' => 'Deutsch', # German ("Du")
php.exe D:\noxampp\apache\htdocs\wikiname\maintenance\populateContentTables.php --force
##'de-at' => 'Österreichisches Deutsch', # Austrian German
php.exe D:\noxampp\apache\htdocs\wikiname\maintenance\populateRevisionSha1.php --force
##'de-ch' => 'Schweizer Hochdeutsch', # Swiss Standard German
##'de-formal' => 'Deutsch (Sie-Form)', # German - formal address ("Sie")
</pre>
</pre>
Um im "Footer" den Hyperlink "Forschungsverbund" statt "Projektverbund" angezeigt zu  bekommmen, wird in der Skin-Datei der Code angepasst.
* MW 1.23 Datei "monobook.php"
MW 1.23
<pre>
???
</pre>
=== Favicon ===
Damit in der Browser-Adresszeile ein Favicon dargestellt wird, ist eine Datei "salzwiki.ico" in das jeweilige Wiki-Verzeichnis hochzuladen und folgender Eintrag in der jeweiligen Datei "LocalSettings.php" vorzunehmen:
<pre>$wgFavicon = "/[wikiverzeichnisname]/salzwiki.ico";</pre>


=== Darstellung in einem Frame ===
=== Darstellung in einem Frame ===
Zeile 2.424: Zeile 2.501:
* Redakteur (salzwiki) = siehe Editor
* Redakteur (salzwiki) = siehe Editor
* Sicherheit = Seitensperre für Spezialseiten und gesperrte Seiten bei deaktiviertem JavaScript
* Sicherheit = Seitensperre für Spezialseiten und gesperrte Seiten bei deaktiviertem JavaScript
* Salzwiki, HAWK etc. = Gruppen im Repository
* Salzwiki, HAWK, SIP etc. = Gruppen im Repository
* sysop = Hauptadministrator
* sysop = Hauptadministrator


==== Vergabe von Nutzerrechten durch den Hauptadministrator (sysop) ====
==== Berechtigungen für Seiten ====
 
Eine Übersicht mit Erweiterungen für Seitenberechtigungen gibt es bei https://www.mediawiki.org/wiki/Category:Page_specific_user_rights_extensions, wovon die meisten jedoch nicht mehr eingesetzt werden können.
 
Es gibt für MW1.31 möglicherweise folgende Erweiterungen zur Beschränkung von Berechtigungen einzelner Seiten:
* AuthorProtect: verhindert die Bearbeitung außer für das Konto, mit dem die Seite erstellt wurde
* Lockdown: verhindert den Zugang zu bestimmten Namensräumen und Spezialseiten
* NSFileRepo: verhindert lesen und hochladen von Dateien und Bildern für bestimmte Gruppen bezogen auf Namensräume
 
==== Vergabe von Nutzungsrechten durch das Hauptadmin-Konto ====
 
Damit die unten beschriebenen Rechtevergaben umgesetzt werden können, erhält das Hauptadmin-Konto "sysop" <del>zunächst</del> den Zugang zu den Spezialseiten<del>, um auch nach Änderung der Datei "SpecialPage.php" Zugriff auf die Spezialseiten zu haben</del>.


Damit die unten beschriebenen Rechtevergaben umgesetzt werden können, erhält "sysop" zunächst den Zugang zu den SpecialPages, um auch nach Änderung der Datei "SpecialPage.php" Zugriff auf die Spezialseiten zu haben. Folgende Zeile ist in "LocalSettings.php" einzufügen:
<del>HJschwarz 22.02.2011, Ersteinstellung für "restrictusers" zum Einstellen der Rechte</del><br/>
##HJschwarz 22.02.2011, Ersteinstellung für "restrictusers" zum Einstellen der Rechte
Folgende Zeile ist in der Datei "LocalSettings.php" einzufügen:
<pre>$wgGroupPermissions['sysop']['restrictusers'] = true;
<pre>
## Freischalten der Spezialseiten
$wgGroupPermissions['sysop']['restrictusers'] = true;
</pre>
</pre>


Anschließend über SpecialPages->UserRightsManagement->[Username] die Rechte erweitern und alle Gruppen aktivieren.
Anschließend werden über "SpecialPages->UserRightsManagement->[Username]" die Rechte erweitert und alle Gruppen aktiviert.
 
==== Nutzungsrechte im Repositorium einschränken ====


==== Nutzerrechte bis zum Freischalten von Saltwiki ====
Als Gast, ohne Anmeldung, kann keine Seite im Repositorium gelesen werden, die in der Datei "LocalSettings.php" nicht im Array von "$wgWhitelistRead" oder "$wgWhitelistReadRegexp" aufgeführt wird, siehe auch
* https://www.mediawiki.org/wiki/Manual:Preventing_access#Restrict_viewing_of_all_pages
* https://www.mediawiki.org/wiki/Manual:$wgWhitelistReadRegexp/de


Kein "normaler" Nutzer kann Seiten in SaltWiki lesen:
<pre>
<pre>
$wgGroupPermissions['*']['read'] = false;
$wgGroupPermissions['*']['read'] = false;
</pre>
</pre>


Als Ausnahme werden mit $wgWhitelistRead alle im Array genannten Seiten dennoch für alle zum Lesen freigegegben, beispielsweise die Startseite und die Anmeldeseite.
Zum Lesen freigegebene Seiten:
* Startseite
* Anmeldeseite
* Seiten von Bildern und Dateien für Ansicht in "SalzWiki" und "SaltWiki"
 
Definition der freigegebenen Seiten:
<pre>
$wgWhitelistRead = array(":Repository", ":home", "Spezial:Userlogin");
$wgWhitelistReadRegexp = array("/Datei:/", "/File:/");
</pre>


==== Benutzer-Rechte in allen 3 Wikis  ====
==== Benutzer-Rechte in allen 3 Wikis  ====
Zeile 2.451: Zeile 2.553:
<pre>
<pre>
// Salzwiki (auskommentiert)
// Salzwiki (auskommentiert)
#$wgWhitelistRead = arry(":Hauptseite", "Spezial:Userlogin", "Salzwiki:Impressum", "General_disclaimer");
#$wgWhitelistRead = array(":Hauptseite", "Spezial:Userlogin", "Salzwiki:Impressum", "General_disclaimer");
// Saltwiki
// Saltwiki
#$wgWhitelistRead = arry("Welcome_to_SaltWiki", "Saltwiki:About", "Saltwiki:General disclaimer", "Saltwiki:Privacy policy");
#$wgWhitelistRead = array("Welcome_to_SaltWiki", "Saltwiki:About", "Saltwiki:General disclaimer", "Saltwiki:Privacy policy");
// Repository
// Repository
#$wgWhitelistRead = arry(":home", "Spezial:Userlogin");
#$wgWhitelistRead = array(":Repository", ":home", "Spezial:Userlogin");
#$wgWhitelistReadRegexp = array("/Datei:/", "/File:/");
// Salzwiki/Saltwiki
// Salzwiki/Saltwiki
$wgWhitelistedit = "talk";
#$wgWhitelistEdit = "talk"; // veraltet seit MW1.5.0 und "...Edit" statt "...edit"
// Salzwiki/Saltwiki
// Salzwiki/Saltwiki
$wgGroupPermissions['Sysadmin']['editadmin'] = true;
$wgGroupPermissions['Sysadmin']['editadmin'] = true;
Zeile 2.475: Zeile 2.578:
$wgGroupPermissions['user']['move-rootuserpages'] = false;
$wgGroupPermissions['user']['move-rootuserpages'] = false;
$wgGroupPermissions['user']['move-subpages']  = false;
$wgGroupPermissions['user']['move-subpages']  = false;
$wgGroupPermissions['user']['edit']            = true;
$wgGroupPermissions['user']['edit']            = false; // true; // angepasst wg. Spameintrag 2019-03-29
$wgGroupPermissions['user']['createpage']      = false;
$wgGroupPermissions['user']['createpage']      = false;
$wgGroupPermissions['user']['upload']          = false;
$wgGroupPermissions['user']['upload']          = false;
Zeile 2.532: Zeile 2.635:
## Freischalten der Spezialseiten
## Freischalten der Spezialseiten
$wgGroupPermissions['sysop']['restrictusers'] = true;
$wgGroupPermissions['sysop']['restrictusers'] = true;
## Special Pages nur für Autoren lesbar
 
#$wgGroupPermissions['emailconfirmed']['emailconfirmed'] = true;
 
## to allow editing Special:Interwiki
$wgGroupPermissions['*']['interwiki'] = false;
$wgGroupPermissions['sysop']['interwiki'] = true;
</pre>
 
Folgende Festlegungen wurden wegen Unwirksamkeit herausgenommen:
<pre>
## Special Pages nur für Autoren lesbar; ohne Wirkung, da NS-Protection nur für edit und wegen falscher Bezeichnungen
##$wgNamespaceProtection[NS_spezial] = array( 'spezial-read');
##$wgNamespaceProtection[NS_spezial] = array( 'spezial-read');
##$wgGroupPermissions['autor']['spezial-read'] = true;
##$wgGroupPermissions['autor']['spezial-read'] = true;
 
## Special Pages nur für bestimmte Gruppen lesbar; wirkt nicht, weil nur edit-Schutz möglich
#$wgGroupPermissions['emailconfirmed']['emailconfirmed'] = true;
#$wgNamespaceProtection[NS_SPECIAL] = array( 'sp_read'); // edit-protection: array( 'edit')
#$wgRestrictionLevels[] = "sp_read";
#$wgGroupPermissions['*']['sp_read'] = true;
#$wgGroupPermissions['user']['sp_read'] = true;
#$wgGroupPermissions['Redakteur']['sp_read'] = true;
#$wgGroupPermissions['Administratoren']['sp_read'] = true;
#$wgGroupPermissions['autor']['sp_read'] = true;
#$wgGroupPermissions['Sicherheit']['sp_read'] = true;
#$wgGroupPermissions['sysop']['sp_read'] = true;
</pre>
</pre>


Zeile 2.601: Zeile 2.722:
$wgGroupPermissions['sysop']['skipcaptcha'] = true;
$wgGroupPermissions['sysop']['skipcaptcha'] = true;
*/
*/
## to allow interwiki-linking
</pre>
$wgGroupPermissions['*']['interwiki'] = false;
 
$wgGroupPermissions['sysop']['interwiki'] = true;
==== Namensraum "Adm" ====
 
Damit im deutschen SalzWiki der Namensraum "Adm" mit den Anleitungen für die Administration der Wikis nur für Mitglieder der Gruppen "Administratoren" und "sysop" verfügbar ist, wird in der Konfigurationsdatei "LocalSettings.php" ein "Hook" namens "userCan" eingefügt. Für weitere Informationen zu "userCan" siehe https://www.mediawiki.org/wiki/Manual:Hooks/userCan.
 
Da der Namensraum "Adm" in allen Wikis definiert ist, wird der "Hook" für den Namensraum in allen Wikis zwischen dem "Hook" für die Spezialseiten und dem Abschnitt "Extensions" eingefügt.
 
<pre>
$wgHooks['SpecialPage_initList'][] = 'groupspecificSpecialpages';
...
// Schutz des Namensraums "Adm:"
$wgHooks['userCan'][] = 'protectNamespaceAdm';
function protectNamespaceAdm(&$title, &$user, $action, &$result){
  $groups = $user->getEffectiveGroups();
  if( ($user->isAnon() || (!in_array("sysop", $groups) && !in_array("Administratoren", $groups)) )
  && substr($title,0,4)==="Adm:" ){
    $result = false;
    return false;
  }
}
 
##
## EXTENSIONS
...
</pre>
</pre>


==== Spezial-Seiten ====
==== Spezial-Seiten ====


===== Spezial-Seiten verbergen bzw. verstecken (Wiki-Code) =====
Für die Spezialseiten gibt es die Berechtigungsgruppe "Sicherheit" mit entsprechender Konfiguration in der Datei "LocalSettings.php".
 
===== Spezial-Seiten mit Sonderrechten =====


Spezialseiten, die nur mit besonderen Berechtigungen verfügbar sind, werden nach Anmeldung bei einem Konto mit besonderen Berechtigungen auf der Seite "Spezialseiten" per CSS fett-formatiert dargestellt:
Spezialseiten, die nur mit besonderen Berechtigungen verfügbar sind, werden nach Anmeldung bei einem Konto mit besonderen Berechtigungen auf der Seite "Spezialseiten" per CSS fett-formatiert dargestellt:
Zeile 2.615: Zeile 2.760:
</pre>
</pre>


Für Berechtigungen von Spezialseiten siehe auch https://www.mediawiki.org/wiki/Manual:Special_pages/de#Seitenzugriff_beschr.C3.A4nken
===== Spezial-Seiten verbergen =====
<del>http://phlow.net/magazin/netzkultur/technik/445-mediawiki-spezialseiten-vor-unerlaubtem-zugriff-sperren</del> (2015-12-04 nicht mehr vorhanden)


Für die Spezialseiten gibt es die Berechtigungsgruppe "Sicherheit" mit entsprechender Konfiguration in der Datei "LocalSettings.php".
Werden die Spezial-Seiten in der linken Menüleiste verborgen - siehe [[#Sidebar-Einschr.C3.A4nkung|Sidebar-Einschränkung]] - sind sie dennoch über die Adresszeile des Browsers erreichbar, beispielsweise die Spezialseiten-Übersicht mit "https://wikiname.tld/index.php/Spezial:Spezialseiten".
 
Um derartige Seitenaufrufe zu unterbinden, werden in der Datei "LocalSettings.php" Berechtigungen festgelegt bzw. wird die Liste der Seiten auf das Notwendigste reduziert.


===== Spezialseiten dürfen nur AutorInnen lesen (Wiki-Code) =====
===== Spezialseiten mit Gruppenberechtigung =====


Diese Änderungen dienen dazu, dass nur Autoren die "SpecialPages" lesen dürfen, aber keine normalen oder angemeldeten Nutzer/innen.
Es sollen nur Mitglieder bestimmter Gruppen die Spezialseiten im Namensraum "NS_SPECIAL" lesen dürfen, aber nicht unangemeldete Gäste oder Mitglieder anderer Gruppen. Gruppen mit Leserecht:
* Administratoren
* autor
* Redakteur
* Sicherheit
* sysop


Hierfür waren bei MW1.16 Anpassungen im Wiki-Code den Dateien "SpecialPage.php" und "SkinTemplate.php" sowie in der Konfigurationsdatei erforderlich.
Spezialseiten, die auch ohne Anmeldung zur Verfügung zu stellen sind:
Bei MW1.31/1.27/1.23 heißt die Datei "SpecialPageFactory.php" statt "SpecialPage.php". Die gleichnamige Klasse mit der Funktion "getRestrictedPages(...)" gilt bei MW1.31 als veraltet und wird im Wiki-Code nicht mehr angepasst. Es werden nur noch in der Datei "LocalSettings.php" und eventuell in der Datei "SkinTemplate.php" Anpassungen vorgenommen.
* Übersichtsseite mit reduzierter Auswahl: SpecialSpecialpages
** Anmeldung: SpecialUserLogin
** Abmeldung: SpecialUserLogout
** Registrierung: SpecialCreateAccount
** Kontakt: SpecialContact
** Letzte Änderungen: SpecialRecentChanges
** Bibliographie: SpecialBibManagerList


In der Datei "LocalSettings.php" einfügen:
Für Berechtigungen von Spezialseiten siehe auch
* https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgNamespaceProtection
* <del> https://www.mediawiki.org/wiki/Manual:Special_pages/de#Seitenzugriff_beschr.C3.A4nken</del> (2018-11-06) nicht mehr vorhanden
 
In der Datei "LocalSettings.php" wird am Ende des Blocks "Namensräume" ein "Hook" namens "SpecialPage_initList" eingefügt. Der "Hook" wird in der Datei "SpecialPagesFactory.php" in der Funktion "getPageList()" ausgeführt. Verarbeitet werden die Angaben aus der Variablen $coreList.
 
Damit alle, die nicht Mitglied der berechtigten Gruppen sind, bestimmte Spezialseiten dennoch aufrufen können, wird Folgendes in der Datei "LocalSettings.php" eingegeben:
<pre>
$wgHooks['SpecialPage_initList'][] = 'groupspecificSpecialpages';
function groupspecificSpecialpages(&$aSpecialPages){
  global $wgUser;
  $groups = $wgUser->getEffectiveGroups();
  if($wgUser->isAnon() || ( !in_array("sysop", $groups)
    && !in_array("autor", $groups) && !in_array("Administratoren", $groups)
    && !in_array("Redakteur", $groups) && !in_array("Editor", $groups)
    && !in_array("forschung", $groups)
  ) ){
    $aSpecialPages = array(
      "Specialpages" => "SpecialSpecialpages", // Übersicht mit reduzierter Auswahl
      "UserLogin" => "SpecialUserLogin", // für Anmeldung
      "UserLogout" => "SpecialUserLogout", // Seite nach der Abmeldung
      "CreateAccount" => "SpecialCreateAccount", // für Registrierung
      "Contact" => "SpecialContact", // Kontaktseite im Menü links
      "Recentchanges" => "SpecialRecentChanges", // Letzte Änderung im Menü links
      "BibManagerList" => "SpecialBibManagerList", // Bibliographie im Menü links
      #"BibManagerListAuthors" => "SpecialBibManagerListAuthors",
      "BibManagerCreate" => "SpecialBibManagerCreate", // notwendig für "SpecialBibManagerList.php"
      "BibManagerImport" => "SpecialBibManagerImport", // notwendig für "SpecialBibManagerList.php"
      "BibManagerExport" => "SpecialBibManagerExport", // notwendig für Export-Funktion auf Seite "Bibliographie"
      "CiteThisPage" => "SpecialCiteThisPage",
    );
  }
  return true;
};
</pre>
 
Die Spezialseiten "BibManagerCreate" und "BibManagerImport" müssen in $aSpecialPages mit aufgenommen werden, damit keine Fehlermeldung ausgegeben wird. Der Fehler wird verursacht in den Zeilen 24 und 28 durch den Wert "NULL" bei der Methode "getDescription()", wenn die beiden Spezialseiten nicht berücksichtigt werden.
 
===== Anpassungen in vorigen MW-Versionen (Wiki-Code) =====
 
Die nachfolgend beschriebenen Änderungen dienten in älteren MW-Versionen dazu, dass die "SpecialPages" nicht ohne Anmeldung sichtbar sind.
 
'''Achtung: Bei MW1.31 sind keine Anpassungen in der Datei "[wikiname]\includes\skins\SkinTemplate.php" vorzunehmen!'''. Erfolgen dennoch Änderungen siehe auch http://nullraffer.de/wiki/index.php?title=Mediawiki_absichern.
 
Bei MW1.16 waren die Anpassungen im Wiki-Code der Datei "SpecialPage.php" sowie in der Konfigurationsdatei erforderlich.
Bei MW1.31/1.27/1.23 heißt die Datei "SpecialPageFactory.php" statt "SpecialPage.php". Die gleichnamige Klasse mit der Funktion "getRestrictedPages(...)" gilt ab MW1.32 als veraltet.
 
Es gibt in der MW-Klasse "User" eine Funktion "isAllowed()", mit der Berechtigungen für bestimmte Aktionen abgefragt werden können.
 
'''Der bei MW1.31 nicht mehr anzupassende Wiki-Code in der Datei "\includes\skins\SkinTemplate.php"''' bei der Funktion "buildNavUrls()" in der Zeile 1288ff wäre:
<pre>
...
  $nav_urls['upload'] = false;
}
// für HAWK HHG Bedingung Spezialseiten nach Anmeldung sichtbar, eingefügt 2018-10-29
$sw_user = $this->getUser();
if(!$sw_user->isAnon()){
$nav_urls['specialpages'] = [ 'href' => self::makeSpecialUrl( 'Specialpages') ];
}
$nav_urls['print'] = false;
...
</pre>
 
MW1.23 zum Vergleich:
<pre>
global $wgUploadNavigationUrl;
global $wgUser; // eingefügt 2015-12-04 für HAWK HHG
...
// Bedingung eingefügt 2015-12-04 für HAWK HHG
if(!$wgUser->isAnon()){
  $nav_urls['specialpages'] = array( 'href' => self::makeSpecialUrl( 'Specialpages' ) );
}
...
</pre>
 
'''Folgende Anpassung in der Datei "LocalSettings.php" entfällt bei MW1.31:'''
Zeile einfügen:
<pre>
<pre>
$wgGroupPermissions['autor']['restrictusers'] = true;
$wgGroupPermissions['autor']['restrictusers'] = true;
</pre>
</pre>
und folgende Zeile wieder auskommentieren:
und folgende Zeile wieder auskommentieren:
<pre>$wgGroupPermissions['sysop']['restrictusers'] = true;
<pre>
$wgGroupPermissions['sysop']['restrictusers'] = true;
</pre>
</pre>


'''Achtung: Der Wiki-Code in der Datei "SpecialPageFactory.php" muss nach jedem MW-Update überprüft werden!'''
'''Die Anpassung von Wiki-Code in der Datei "SpecialPageFactory.php" entfällt''' bei MW1.31.
* Bei MW 1.23/1.27/1.31 in "includes\specialpage\SpecialPageFactory.php"
* Bei MW 1.16 in "includes/SpecialPage.php"
Siehe auch [[#Spezial-Seiten verbergen bzw. verstecken (Wiki-Code)|Spezial-Seiten verbergen bzw. verstecken (Wiki-Code)]].


Bei MW 1.31 geänderter Wiki-Code im Vergleich zu MW 1.23:
Wiki-Code bei MW 1.31 im Vergleich zu MW 1.23:


*Assoziative Array-Elemente haben geänderte Werte, die nicht mehr als Text-Strings, sondern als Klassenmethoden angegeben sind
*Assoziative Array-Elemente haben geänderte Werte, die nicht mehr als Text-Strings, sondern als Klassenmethoden angegeben sind
Zeile 2.657: Zeile 2.888:
</pre>
</pre>


Bei MW 1.23 geänderter Wiki-Code im Vergleich zu MW 1.16:
Wiki-Code bei MW 1.23 im Vergleich zu MW 1.16:


*Variable "private static $list" statt "static public $mList"
*Variable "private static $list" statt "static public $mList"
Zeile 2.674: Zeile 2.905:
</pre>
</pre>


'''Achtung: Eventuell  muss Wiki-Code in der Datei "\includes\skins\SkinTemplate.php"''' bei der Funktion "buildNavUrls()" in den Zeilen 1277 und 1291 '''angepasst werden''' - siehe http://nullraffer.de/wiki/index.php?title=Mediawiki_absichern.
=== Weiterleitungen ===


MW1.31:
Für einige Seiten werden Weiterleitungen eingerichtet. Für eine Übersicht der bestehenden Weiterleitungen siehe bei den Spezialseiten http://193.175.110.91/[wikiverzeichnis]/index.php/Spezial:Weiterleitungen bzw. http://193.175.110.91/[wikiverzeichnis]/index.php/Special:ListRedirects:
<pre>
global $wgUploadNavigationUrl;
global $sw_user; // eingefügt 2018-10-29 für HAWK HHG
...
// Bedingung eingefügt 2018-10-29 für HAWK HHG
if(!$sw_user->isAnon()){
  $nav_urls['specialpages'] = array( 'href' => self::makeSpecialUrl( 'Specialpages' ) );
}
...
</pre>


MW1.23 zum Vergleich:
Für die Navigation links (Sidebar), den Footer-Bereich und dergleichen gibt es folgende Weiterleitungen:
<pre>
global $wgUploadNavigationUrl;
global $wgUser; // eingefügt 2015-12-04 für HAWK HHG
...
// Bedingung eingefügt 2015-12-04 für HAWK HHG
if(!$wgUser->isAnon()){
  $nav_urls['specialpages'] = array( 'href' => self::makeSpecialUrl( 'Specialpages' ) );
}
...
</pre>
 
=== Weiterleitungen ===
 
Für einige Seiten werden Weiterleitungen eingerichtet. Für eine Übersicht der bestehenden Weiterleitungen siehe bei den Spezialseiten http://193.175.110.91/[wikiverzeichnis]/index.php/Spezial:Weiterleitungen bzw. http://193.175.110.91/[wikiverzeichnis]/index.php/Special:ListRedirects:
 
Für die Navigation links (Sidebar), den Footer-Bereich und dergleichen gibt es folgende Weiterleitungen:
*SalzWiki
*SalzWiki
**Aktuelles => Startseite#Aktuelles
**Aktuelles => Startseite#Aktuelles
Zeile 2.740: Zeile 2.945:
**Repository:About => VRE/Repository
**Repository:About => VRE/Repository


=== Sidebar anpassen (Wiki-Code, JS) ===
=== Sidebar anpassen ===


==== Logo-Hyperlink ====
==== Logo-Hyperlink ====
Zeile 2.746: Zeile 2.951:
Die Seite, die beim Klick auf das Logo aufgerufen werden soll, wird in der Seite "MediaWiki:Mainpage" angegeben.
Die Seite, die beim Klick auf das Logo aufgerufen werden soll, wird in der Seite "MediaWiki:Mainpage" angegeben.


==== Navigation links mit 2 Varianten ====
==== Navigation links mit 3 Varianten ====
 
Es gibt drei Varianten:
* die Standard-Variante für
** nicht-angemeldete Gäste, welche Wiki-Seiten nur ansehen können
** angemeldete Standard-User
* die Autor-Variante für
** Autor/inn/en
** Administrator/inn/en
** Forscher/innen
* die Editor-Variante auf Basis der Standard-Variante mit Werkzeugen der Autor/inn/en für
** Editor/inn/en bzw. Redakteur/inn/e/n
 
Ein Vergleich der Varianten ist dokumentiert in der Datei [[File:Adm-SalzSaltRepoWikis_MenueLinks_Screenshots_20190226.pdf]]


Es gibt zwei Varianten; die Standardvariante für angemeldete Standard-User und die Autor-Variante für AutorInnen, AdministratorInnen und ForscherInnen. Nicht-angemeldete User können Wiki-Seiten nur ansehen.
===== Navigation links Standard-Variante =====


====Navigation links Standard-Variante====
Sichtbare Menüpunkte ohne JavaScript:
 
{| class="prettytable"
|-
|class="hi_2" style="width:33%"|'''SalzWiki'''
|class="hi_2" style="width:33%"|'''SaltWiki'''
|class="hi_2" style="width:33%"|'''Repository'''
|-
|'''Navigation'''
|'''navigation'''
|'''Navigation'''
|-
|Startseite
|Home
|Home
|-
|Bibliographie
|Bibliography
|
|-
|Glossar
|Glossary
|
|-
|Redaktion
|Editorial Board
|
|-
|Autor/inn/en
|Authors
|
|-
|Letzte Änderungen
|
|
|-
|Kontakt
|Contact
|
|-
|Hilfe
|Help
|
|-
|
|
|'''other wikis'''
|-
|
|
|SalzWiki
|-
|
|
|SaltWiki
|-
|'''Suche'''
|'''search'''
|'''search'''
|-
|'''Werkzeuge'''
|'''tools'''
|'''tools'''
|-
|Druckversion
|Printable version
|Printable version
|-
|'''Andere Sprachen'''
|'''languages'''
|
|-
|English
|German
|
|}


Die '''Standardvariante''' ist zu erreichen über:<br/><del>http://193.175.110.91/[wikiverzeichnis]/index.php/MediaWiki:Sidebar</del> <br/>https://[wiki-domain]/index.php/MediaWiki:Sidebar
Die '''Standard-Variante''' ist zu erreichen über:<br/>https://[wiki-domain]/index.php/MediaWiki:Sidebar


<pre>&lt;!-- Salzwiki --&gt;
<pre>&lt;!-- Salzwiki --&gt;
Zeile 2.809: Zeile 3.102:
</pre>
</pre>


====Navigation links Autor-Variante====
===== Navigation links Autor-Variante =====


Die '''Autor-Variante''' muss durch Erstellung einer neuen Seite (Adminrechte erforderlich) erfolgen:
Sichtbare Menüpunkte ohne JavaScript:
*Erst folgende Adresse im Browser eingeben:<br/><del>http://193.175.110.91/[wikiverzeichnis]/index.php/MediaWiki:Autor_sidebar</del><br/>https://[wiki-domain]/index.php/MediaWiki:Autor_sidebar
*Danach mit Karteikarte "Erstellen" folgenden Quelltext eingeben:


<pre>&lt;!-- Salzwiki --&gt;
{| class="prettytable"
*Navigation
|-
**Mainpage|Startseite
|class="hi_2" style="width:33%"|'''SalzWiki'''
|class="hi_2" style="width:33%"|'''SaltWiki'''
|class="hi_2" style="width:33%"|'''Repository'''
|-
|'''Navigation'''
|'''Navigation'''
|'''Navigation'''
|-
|Startseite
|Home
|Home
|-
|
|
|News
|-
|Repositorium
|Repository
|Projects
|-
|
|
|Communication
|-
|
|
|Publication
|-
|Bibliographie
|Bibliography
|Bibliography
|-
|Glossar
|Glossary
|Glossary
|-
|Redaktion
|Editorial Board
|
|-
|Autor/inn/en
|Authors
|Authors' Contents
|-
|Letzte Änderungen
|Recent changes
|Recent changes
|-
|Kontakt
|Contact
|Contact
|-
|Hilfe
|Help
|Help
|-
|'''Autor/inn/en-Seiten'''
|'''author pages'''
|'''author pages'''
|-
|Richtlinien/Übersichten
|Guidelines
|
|-
|Nutzungsrechte
|Rights
|Rights
|-
|Review
|Review
|
|-
|Kategorienbaum
|Category tree
|Category tree
|-
|Vorlagen
|Templates
|Templates
|-
|
|
|'''other wikis'''
|-
|
|
|SalzWiki
|-
|
|
|SaltWiki
|-
|'''Suche'''
|'''search'''
|'''search'''
|-
|'''Werkzeuge'''
|'''tools'''
|'''tools'''
|-
|Links auf diese Seite
|What links here
|What links here
|-
|Änderungen an verlinkten Seiten
|Related changes
|Related changes
|-
|Datei hochladen
|Upload file
|Upload file
|-
|Spezialseiten
|Special pages
|Special pages
|-
|Druckversion
|Printable version
|Printable version
|-
|Permanenter Link
|Permanent link
|Permanent link
|-
|Seiteninformationen
|Page information
|Page information
|-
|'''Andere Sprachen'''
|'''Languages'''
|
|-
|English
|German
|
|}
 
Die '''Autor-Variante''' muss durch Erstellung einer neuen Seite (Adminrechte erforderlich) erfolgen:
*Erst folgende Adresse im Browser eingeben:<br/>https://[wiki-domain]/index.php/MediaWiki:Autor_sidebar
*Danach mit Karteikarte "Erstellen" folgenden Quelltext eingeben:
 
<pre>&lt;!-- Salzwiki --&gt;
*Navigation
**Mainpage|Startseite
<del>**SalzWiki:Portal|SalzWiki:Portal</del>
<del>**SalzWiki:Portal|SalzWiki:Portal</del>
<!--**Informationen zum DFG-Projekt|SalzWiki-Portal-->
<!--**Informationen zum DFG-Projekt|SalzWiki-Portal-->
Zeile 2.921: Zeile 3.355:
</pre>
</pre>


====Navigationsbereich mit Nutzungsrechten versehen (Wiki-Code)====
==== Navigationsbereich mit Einschränkungen versehen ====
 
Um die linke Navigationsleiste abhängig von der Gruppenzugehörigkeit in der Menüauswahl zu beschränken werden folgende "Hooks" statt Änderungen am Wiki-Code verwendet:
* Sidebar-Variante: "SkinBuildSidebar", siehe [[#Sidebar-Einschr.C3.A4nkung|Sidebar-Einschränkung]]
* Werkzeuge-Auswahl: "BaseTemplateToolbox", siehe [[#Werkzeuge.2FToolbox|Werkzeuge/Toolbox]]


Um die Navigation links ("Sidebar") anzupassen werden bei MW1.31 Änderungen an den Dateien "\includes\skins\Skin.php" und "skins\MonoBook\MonoBookTemplate.php" vorgenommen. Bei MW 1.23 war es "\includes\Skin.php" ohne Unterverzeichnis "skins\".
Änderungen am Wiki-Code der Datei "Skin.php" für die zu verwendende Sidebar-Variante sind nicht mehr erforderlich, da mit dem "Hook" die Auswahl für die Menü-Variante je nach Gruppenzugehörigkeit festgelegt werden kann. Die Datei "Skin.php" befindet sich in folgendem Verzeichnis:
* MW1.31: "[wikiname]\includes\skins\Skin.php"
* MW1.23: "[wikiname]\includes\Skin.php" ohne Unterverzeichnis "skins\".


=== Sidebar-Einschränkung (Wiki-Code) ===
Änderungen am Wiki-Code der Datei "skins\MonoBook\MonoBookTemplate.php" für den Umfang der Werkzeuge sind nicht mehr erforderlich, da mit dem "Hook" die Einschränkungen bei den Werkzeugen je nach Gruppenzugehörigkeit festgelegt werden können.


ACHTUNG: Wenn Mediawiki aktualisiert wird, muss die Änderung in der Datei "Skin.php" wieder eingefügt werden, um die Funktionalität zu erhalten!
=== Sidebar-Einschränkung ===
Deshalb ist von der geänderten Datei "Skin.php" zusätzlich eine Kopie "Skin_SW.php" im Verzeichnis "includes" zu speichern.


Mit den nachfolgend beschriebenen Änderungen gibt es zwei Sidebar-Varianten (Menü-Varianten links). Welche Variante angezeigt wird, richtet sich dabei nach der Gruppen-Zugehörigkeit.
Mit den nachfolgend beschriebenen Änderungen gibt es zwei Sidebar-Varianten (Menü-Varianten links). Welche Variante angezeigt wird, richtet sich dabei nach der Gruppen-Zugehörigkeit.


Bei MW 1.31 wird nicht mehr die globale Variable "$wgUser" in der Datei "\includes\skins\Skin.php" - dies war bei MW 1.23 die Datei "\includes\Skin.php" - in der Funktion "function buildSidebar()" in der zweiten Zeile hinzugefügt, um später die Gruppenrechte abfragen zu können, weil $wgUser bereits bei MW1.27 als veraltet galt.
Bei MW1.31/1.27/1.23/1.16 können die Änderungen mit einem "Hook" in der Datei "LocalSettings.php" vorgenommen werden und sind für alle Layouts ("Skins") gültig; allerdings wurde bei den Wikis mit MW1.16 der Wiki-Code in der Datei "Skin.php" des jeweiligen Layouts angepasst, was sich nur auf den jeweiligen "Skin" auswirkte.


Außerdem erzeugt die bei MW1.27 verwendete Verschachtelung "...->getUser(User::getEffectiveGroups())" einen Fehler. Es kann jedoch auf "user" einfacher zugegriffen werden.
==== Sidebar-Anpassungen mit "Hook" ====


==== MW 1.31.1 ====
Der "Hook" für die Auswahl der Sidebar-Variante heißt "SkinBuildSidebar" und steht seit MW1.14 zur Verfügung.


Nach der Zeile mit "$bar = [];" (MW1.31 Z.1260) folgende Zeile auskommentieren:
In der Datei "LocalSettings.php" wird oberhalb der Anpassungen für die "Toolbox" (Werkzeuge) folgender Code eingefügt:
<pre>
<pre>
// new for HAWK HHG 2018-18-29
#### Beginn SIDEBAR je nach Gruppenzugehörigkeit
#$this->addToSidebar( $bar, 'sidebar' );
$wgHooks['SkinBuildSidebar'] = 'groupspecificSidebar';
function groupspecificSidebar( $skin, &$sidebar ) {
  global $wgUser;
  $groups = $wgUser->getEffectiveGroups();
  $sidebar = array();
  if (in_array("autor", $groups) || in_array("Administrator", $groups) || in_array("forschung", $groups)) {
    $skin->addToSidebar($sidebar, 'autor_sidebar');
  }
  else{
    $skin->addToSidebar($sidebar, 'sidebar');
  }
  return true;
};
#### Ende SIDEBAR je nach Gruppenzugehörigkeit
</pre>
 
==== Sidebar-Anpassungen ohne "Hook" (Wiki-Code) ====
 
ACHTUNG: Wenn Mediawiki aktualisiert wird, muss die Änderung in der Datei "Skin.php" wieder eingefügt werden, um die Funktionalität zu erhalten!
Deshalb ist von der geänderten Datei "Skin.php" zusätzlich eine Kopie "Skin_SW.php" im Verzeichnis "includes" zu speichern.
 
Bei MW 1.31 wird nicht mehr die globale Variable "$wgUser" in der Datei "\includes\skins\Skin.php" - dies war bei MW 1.23 die Datei "\includes\Skin.php" - in der Funktion "function buildSidebar()" in der zweiten Zeile hinzugefügt, um später die Gruppenrechte abfragen zu können, weil $wgUser bereits bei MW1.27 als veraltet galt.
 
Außerdem erzeugt die bei MW1.27 verwendete Verschachtelung "...->getUser(User::getEffectiveGroups())" einen Fehler. Es kann jedoch auf "user" einfacher zugegriffen werden.
 
===== MW 1.31.1 =====
 
Nach der Zeile mit "$bar = [];" (MW1.31 Z.1260) folgende Zeile auskommentieren:
<pre>
// new for HAWK HHG 2018-18-29
#$this->addToSidebar( $bar, 'sidebar' );
</pre>
</pre>
und folgenden Code für 2 Sidebar-Varianten einfügen:
und folgenden Code für 2 Sidebar-Varianten einfügen:
Zeile 2.960: Zeile 3.429:
</pre>
</pre>


==== MW 1.27.4 ====
===== MW 1.27.4 =====


Die Variable $wgUser gilt als "deprecated" und soll nicht mehr verwendet werden, siehe https://www.mediawiki.org/wiki/Manual:$wgUser.
Die Variable $wgUser gilt als "deprecated" und soll nicht mehr verwendet werden, siehe https://www.mediawiki.org/wiki/Manual:$wgUser.
Zeile 2.994: Zeile 3.463:
</pre>
</pre>


==== MW 1.23.11 ====
===== MW 1.23.11 =====


<pre><!--MW1.23 Z.1249-->
<pre><!--MW1.23 Z.1249-->
Zeile 3.021: Zeile 3.490:
'''Diese Möglichkeit gilt als veraltet und wird in Zukunft nicht mehr von PHP unterstützt werden, so dass der oben beschriebene Code der Funktion dann geändert werden muss!'''
'''Diese Möglichkeit gilt als veraltet und wird in Zukunft nicht mehr von PHP unterstützt werden, so dass der oben beschriebene Code der Funktion dann geändert werden muss!'''


=== Werkzeuge/Toolbox (Wiki-Code) ===
=== Werkzeuge/Toolbox ===
 
Standardmäßig – und somit für nicht angemeldete Gäste sowie einfache Konten – steht nur "Druckversion" bzw. "Printable version" zur Verfügung. Die gesamte Werkzeug-Auswahl steht folgenden Gruppen zur Verfügung:
* Administrator
* autor
* Editor
* forschung
 
Die bei MW1.16 durchgeführten Änderungen an der Datei "skins\MonoBook\MonoBookTemplate.php" sind bei MW1.31/1.27/1.23 nicht mehr erforderlich, da mit einem "Hook" namens "BaseTemplateToolbox" die Einschränkungen bei den Werkzeugen je nach Gruppenzugehörigkeit in der Datei "LocalSettings.php festgelegt werden können.
 
Anpassungen mittels "Hook" in der Datei "LocalSettings.php" wirken sich auf alle "Skins" aus, wohingegen sich Anpassungen in der Datei "MonoBookTemplate.php" nur auf das Layout "MonoBook" auswirken, wenn nicht in der Datei "[wikiname]\includes\skins\SkinTemplate.php" Änderungen entsprechend denen für die Spezialseiten erfolgen.
 
==== Werkzeuge-Anpassung mit "Hook" ====
 
Der verwendete "Hook" für den Umfang der zur Verfügung stehenden Werkzeuge heißt "BaseTemplateToolbox" und steht seit MW1.18 zur Verfügung.
 
In der Datei " in LocalSettings.php" ist folgender Code einzufügen:
<pre>
#### Beginn TOOLBOX je nach Gruppenzugehörigkeit nur 'print' oder alles
$wgHooks['BaseTemplateToolbox'][] = 'groupspecificToolbox';
function groupspecificToolbox( BaseTemplate $baseTemplate, array &$toolbox ) {
  global $wgUser;
  $groups = $wgUser->getEffectiveGroups();
  if (!in_array("autor", $groups) && !in_array("Administrator", $groups)
  && !in_array("Editor", $groups) && !in_array("Redakteur", $groups) && !in_array("forschung", $groups)) {
    foreach($toolbox as $k => $v_array){
      if($k!=="print" && isset($toolbox[$k])){
        unset($toolbox[$k]);
      }
    }
  }
  return true;
}
#### Ende TOOLBOX je nach Gruppenzugehörigkeit nur 'print' oder alles
</pre>
 
==== Werkzeuge-Anpassungen ohne "Hook" (Wiki-Code) ====


==== MW 1.31 ====
===== MW1.31 MonoBookTemplate.php =====


Die in früheren MW-Versionen angepasste Funktion "toolbox()" in der Datei "skins/MonoBook.php" existiert nicht mehr. Stattdessen gibt es eine Funktion "getToolboxBox()" in der Datei "skins\MonoBook\includes\MonoBookTemplate.php" in Z.222.
Die in früheren MW-Versionen angepasste Funktion "toolbox()" in der Datei "skins/MonoBook.php" existiert nicht mehr. Stattdessen gibt es eine Funktion "getToolboxBox()" in der Datei "skins\MonoBook\includes\MonoBookTemplate.php" in Z.222.


Eventuell ist die Funktion "getRenderedSidebar()" anzupassen.
Die in MW1.23 verwendete Funktion "getListItem()" befindet sich bei MW1.31 in der Datei "...\includes\skins\BaseTemplate.php". Diese enthält auch die Funktion "getToolBox()", die von "MonoBookTemplate.php" verwendet wird.


Von "MonoBookTemplate.php" für die "Toolbox" verwendete Funktionen:
* getRenderedSidebar Z.160f verwendet "getToolboxBox()"
* getToolboxBox() Z.226 verwendet "getBox(..., $this->getToolBox(), ...)" und Z.231 "deprecatedHookHack(...)"
* getBox() Z.292 verwendet "getPortlet()"
* getPortlet() Z.355ff $this->makeListItem
* deprecatedHookHack()
In der Funktion "getToolboxBox(...)" werden die einzelnen Werkzeug-Menüpunkte mit "$this->getToolbox()" gesammelt und in der Funktion "getPortlet(...)als Variable $content[$key]=$item in Z.355 weiterverarbeitet. Um die eingeschränkte Verfügbarkeit für bestimmte Gruppen zu ermöglichen, müssen die Elemente vor der Übergabe ausgefiltert werden:
<pre>
<pre>
...
protected function getRenderedSidebar(){
  ...
}
...
protected function getToolboxBox(){
protected function getToolboxBox(){
   $html = '';
   $html = '';
   $skin = $this;
   $skin = $this;
 
  // für HAWK HHG Verfügbarkeit für die Gruppen autor, Administrator und forschung, sonst nur Werkzeug "Druckversion", 2018-10-29
   $html .= $this->getBox( 'tb', $this->getToolbox(), 'toolbox', [ 'hooks' => [
  $user = $this->getSkin()->getUser();
  $groups = $user->getEffectiveGroups();
  $tools_normal = $this->getToolbox();
  // all Tools
  if (in_array("autor", $groups) || in_array("Adminstrator", $groups) in_array("forschung", $groups) ) {
    $tools_sw = $tools_normal;
  }
  // only printing
  else{
    $tools_sw['print'] = $tools_normal['print'];
  }
   $html .= $this->getBox( 'tb', $tools_sw, 'toolbox', [ 'hooks' => [
     // Deprecated hooks
     // Deprecated hooks
     'MonoBookTemplateToolboxEnd' => [ &$skin ],
     'MonoBookTemplateToolboxEnd' => [ &$skin ],
     'SkinTemplateToolboxEnd' => [ &$skin, true ]
     'SkinTemplateToolboxEnd' => [ &$skin, true ]
   );
   );
  #$html .= $this->getBox( 'tb', $this->getToolbox(), 'toolbox', [ 'hooks' => [
  #  // Deprecated hooks
  #  'MonoBookTemplateToolboxEnd' => [ &$skin ],
  #  'SkinTemplateToolboxEnd' => [ &$skin, true ]
  #);
}
}
</pre>
</pre>


==== MW 1.23 ====
===== MW 1.23 MonoBook.php =====


Die Sidebar im Bereich "Werkzeuge" wird mit einem Eingriff in den Wiki-Code bei "skins/MonoBook.php" für alle Gruppen außer "autor", "admin" und "forschung" manipuliert. Hierzu wird in der Funktion "toolbox()" Z.254ff die Variable "global $wgUser;" eingefügt und bei "foreach" die Z.262 bei "$this->makeListItem" mit einer Bedingung versehen:
Die Sidebar im Bereich "Werkzeuge" wird mit einem Eingriff in den Wiki-Code bei "skins/MonoBook.php" für alle Gruppen außer "autor", "admin" und "forschung" manipuliert. Hierzu wird in der Funktion "toolbox()" Z.254ff die Variable "global $wgUser;" eingefügt und bei "foreach" die Z.262 bei "$this->makeListItem" mit einer Bedingung versehen:
Zeile 3.117: Zeile 3.641:


Für das wiki-übergreifende Hochladen und Anzeigen von Media-Dateien sind in der Datei "LocalSettings.php" folgende Variablen anzupassen:
Für das wiki-übergreifende Hochladen und Anzeigen von Media-Dateien sind in der Datei "LocalSettings.php" folgende Variablen anzupassen:
* $wgUseImageResize
* $wgUploadNavigationUrl
* $wgUploadNavigationUrl
* $wgSharedUploadPath
* $wgSharedUploadPath
Zeile 3.137: Zeile 3.662:
|colspan="3"|Abschnitt "Datei"
|colspan="3"|Abschnitt "Datei"
* bei vorhandener Quelle:
* bei vorhandener Quelle:
** für Vorschaubilder in SalzWiki/SaltWiki: $wgUseImageResize = false;
** Datei-Verweis: '''$wgSharedUploadPath'''
** Datei-Verweis: '''$wgSharedUploadPath'''
** Dateibeschreibungsseite-Verweis: '''$wgRepositoryBaseUrl'''
** Dateibeschreibungsseite-Verweis: '''$wgRepositoryBaseUrl'''
Zeile 3.173: Zeile 3.699:
## bei Verwendung von Domain-Adresse statt IP-Adresse mit Protokoll
## bei Verwendung von Domain-Adresse statt IP-Adresse mit Protokoll
$wgUploadNavigationUrl = $protokoll."://".$url_repository."index.php/Special:Upload";
$wgUploadNavigationUrl = $protokoll."://".$url_repository."index.php/Special:Upload";
$wgEnableUploads       = false;  ##damit kein Upload in SalzWiki bzw. SaltWiki möglich ist
$wgEnableUploads = false;  ##damit kein Upload in SalzWiki bzw. SaltWiki möglich ist
</pre>
</pre>


Zudem sind folgende Änderungen in der Datei "LocalSettings.php" des Repositoriums vorzunehmen:
Zudem sind folgende Änderungen in der Datei "LocalSettings.php" des Repositoriums vorzunehmen:
<pre>
<pre>
$wgEnableUploads       = true;
$wgEnableUploads = true;
## Erlaubte Dateitypen
## Erlaubte Dateitypen
$wgFileExtensions = array('avi','bib','doc','docx','gif','jpeg','jpg','mov','mpeg','odt','ods','oga','ogg','ogv',
$wgFileExtensions = array('avi','bib','doc','docx','gif','jpeg','jpg','mov','mpeg','odt','ods','oga','ogg','ogv',
Zeile 3.203: Zeile 3.729:
Da alle Dateien wie z.B Fotos mit den dazugehörigen Metadaten und Lizenzhinweisen im Repositorium liegen, muss vom SalzWiki aus der Zugriff nicht nur auf die Dateien, sondern auch auf die dazugehörigen Metadaten und Lizenzhinweise erfolgen.
Da alle Dateien wie z.B Fotos mit den dazugehörigen Metadaten und Lizenzhinweisen im Repositorium liegen, muss vom SalzWiki aus der Zugriff nicht nur auf die Dateien, sondern auch auf die dazugehörigen Metadaten und Lizenzhinweise erfolgen.


Bei Seiten-Aufrufen mit https wird die Seite aus dem Repositorium mit den Metadaten, der Zusammenfassung und den Lizenzhinweisen ignoriert.
<del>Bei Seiten-Aufrufen mit https wird die Seite aus dem Repositorium mit den Metadaten, der Zusammenfassung und den Lizenzhinweisen ignoriert.</del>


Anzupassende Dateien:
Anzupassende Dateien:
Zeile 3.225: Zeile 3.751:


====== Anpassungen in der Konfigurationsdatei ======
====== Anpassungen in der Konfigurationsdatei ======
Siehe auch https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos.


<pre>
<pre>
$wgLocalInterwikis = array("salzwiki", "saltwiki", "repository"); # MW1.31
...
## Zugriff auf das Repositorium
## Zugriff auf das Repositorium
$wgFetchCommonsDescriptions  = true;
$wgFetchCommonsDescriptions  = true;
Zeile 3.243: Zeile 3.773:
## bei Verwendung von Domain-Adresse statt IP-Adresse mit Protokoll
## bei Verwendung von Domain-Adresse statt IP-Adresse mit Protokoll
$wgSharedUploadPath = $protokoll."://".$url_repository."images";
$wgSharedUploadPath = $protokoll."://".$url_repository."images";
$wgSharedUploadDirectory = "D:/xampp/htdocs/repository/images";
$wgSharedUploadDirectory = "D:/noxampp/htdocs/repository/images";
$wgHashedSharedUploadDirectory = true;
$wgHashedSharedUploadDirectory = true;
$wgSharedUploadDBname = "repository";
$wgSharedUploadDBname = "repository";
$wgSharedUploadDBprefix  = "sr_";
$wgSharedUploadDBprefix  = "sr_";
$wgSharedDBuser = "SW_repo";
$wgSharedDBpassword = "SWrepo_02";
## IP-Adresse mit Protokoll "http" wg. fehlendem Serverzertifikat
## IP-Adresse mit Protokoll "http" wg. fehlendem Serverzertifikat
#$wgRepositoryBaseUrl = 'http://193.175.110.91/repository/index.php/Datei:';   
#$wgRepositoryBaseUrl = 'http://193.175.110.91/repository/index.php/Datei:';   
Zeile 3.263: Zeile 3.795:
  'dbType' => $wgDBtype,
  'dbType' => $wgDBtype,
  'dbServer' => $wgDBserver,
  'dbServer' => $wgDBserver,
  'dbUser' => $wgDBuser,
  'dbUser' => $wgSharedDBuser,
  'dbPassword' => $wgDBpassword,
  'dbPassword' => $wgSharedDBpassword,
  'dbFlags' => DBO_DEFAULT,
  'dbFlags' => DBO_DEFAULT,
  'dbName' => $wgSharedUploadDBname,
  'dbName' => $wgSharedUploadDBname,
Zeile 3.289: Zeile 3.821:
** d\d6\Pict-by.png\30px-Pict-by.png
** d\d6\Pict-by.png\30px-Pict-by.png


==== MediaWiki-Datei anpassen (Wiki-Code) ====
==== MediaWiki-Datei anpassen entfällt (Wiki-Code) ====


Die nachfolgend beschriebene Vorgehensweise erlaubt es, auf ein für den normalen User gesperrtes Wiki wie das Repositorium zuzugreifen und die Metadaten der Abbildungen/Dateien auszulesen und in SalzWiki widerzugeben. '''Nach jedem mediawiki-Update muss die Datei "includes/httpFunctions.php" auf Änderungen überprüft werden!'''
Die nachfolgend beschriebene Vorgehensweise erlaubt es, auf ein für den normalen User gesperrtes Wiki wie das Repositorium zuzugreifen und die Metadaten der Abbildungen/Dateien auszulesen und in SalzWiki wiederzugeben. '''Nach jedem mediawiki-Update muss die Datei "includes/http/CurlHttpRequest.php" <del>"includes/httpFunctions.php"</del> auf Änderungen überprüft werden!'''
 
Mit den Wiki-Code-Anpassungen und der MW-Erweiterung "Snoopy" werden hauptsächlich Anpassungen gemacht, die den Text zurückgeben, sowie an der Abarbeitung von Fehlern. Beispielsweise wurde für das korrekte Bearbeiten von Sonderzeichen in der URL die Funktion "rawurldecode()" hinzugefügt.
 
* <del>Die Datei "CurlHttpRequest.php" im Verzeichnis "\includes\http\" von SalzWiki modifizieren für die Erweiterung "Snoopy". Für die "Snoopy"-Wiki-Code-Änderungen siehe auch https://phabricator.wikimedia.org/T27563. Dazu wird von der Datei eine Kopie "CurlHttpRequest_original.php" gespeichert; danach wird der Code angepasst.</del>
* <del>Die geänderte Datei "http/CurlHttpRequest.php" als Sicherung für Mediawiki-Updates kopieren und speichern als "http/CurlHttpRequest_SW.php".</del>
 
===== Voraussetzungen =====
 
Folgende Module bzw. Erweiterungen sind erforderlich:
* <del>MW-Erweiterung "Snoopy"</del>
* PHP-Modul "curl"
 
====== "Snoopy-2.0.0" entfällt ======
 
Die Erweiterung "Snoopy" wird aus folgenden Gründen nicht mehr verwendet:
* sie wurde lange nicht mehr aktualisiert und funktioniert deshalb nicht mehr
* der Code ist qualitativ inakzeptabel, siehe https://phabricator.wikimedia.org/T27563, Kommentar von "Catrope", 2011-11-20 1:21 PM, untere Mitte der Seite
 
<del>Verwendung von "Snoopy":</del>
* <del>von "https://sourceforge.net/projects/snoopy/" herunterladen</del>
* <del>zip-Dateien auspacken und die Dateien der Erweiterung in das Verzeichnis "extensions" des SalzWikis bzw. Saltwikis kopieren</del>
* <del>in der Datei "LocalSettings.php" die Erweiterung einbinden</del>
 
====== "Curl" ======
 
Das PHP-Modul "curl" muss beim Apache-Webserver aktiviert sein; hierfür muss in der Datei "D:\noxampp\php\php.ini" die folgende Zeile aktiv eingebunden sein:
<pre>
extension=php_curl.dll
</pre>
Sofern in der ini-Datei eine Änderung erfolgt, ist danach der Apache-Dienst neu zu starten, damit die Änderungen wirksam werden.
 
===== Hinweise zur Zugriffssperre =====
 
Der Zugriff auf das Repositorium wird gesperrt durch folgenden Eintrag in der Datei "LocalSettings.php" des Repositoriums:
<pre>
$wgGroupPermissions['*']['read'] = false;
</pre>
 
<del>Um den Zugriff auf das geschützte Repositorium durchführen zu können, ist folgende Konfiguration der Datei "LocalSettings.php" des Salzwikis bzw. Saltwikis vorzunehmen, bei der die Variablen von der MW-Erweiterung "Snoopy" verwendet werden:</del>
<pre>
#$wgAuthenticatedRepository = true;
#$wgAuthenticatedRepositoryUser = 'WikiSysop';
#$wgAuthenticatedRepositoryPassword = 'xxx';
#$wgShowAuthenticatedRepositoryError = false;
</pre>
 
* <del>$wgAuthenticatedRepository: aktiviert den Zugriff auf ein gesichertes Repository. Wenn dies nicht notwendig ist, bitte abstellen, da die Funktion zusätzliche Abfragen schickt, was die Zugriffe bei hoher Last verlangsamen kann.</del>
* <del>$wgShowAuthenticatedRepositoryError: Gibt Fehlermeldungen in die Log Dateien. Für den Produktiveinsatz bitte abstellen.</del>
 
===== MediaWiki-Version 1.31 entfällt =====
 
<del>In der Datei "CurlHttpRequest.php" in der Funktion "execute()" ab Z.121ff die Zugriffsberechtigung anpassen.</del>


*Zunächst ist die Datei "httpFunctions.php" im Verzeichnis includes von SalzWiki sowohl für https als auch für die Erweiterung "Snoopy" zu modifizieren. Dazu wird von der Datei eine Kopie "httpFunctions_original.php" gespeichert; danach wird folgender Code angepasst:
**für die Mediawiki-Version '''1.23''':
<pre>
<pre>
--- HttpFunctions.php 2010-06-09 05:49:34.000000000 +0200
--- CurlHttpRequest.php 2010-06-09 05:49:34.000000000 +0200
+++ HttpFunctions_sw.php 2018-01-29
+++ CurlHttpRequest_SW.php 2019-01-08
@@ -131,1 +131,1 @@
@@ -121,11 +121,97 @@
- if ( preg_match( '!^http://([\w.-]+)[/:].*$!' ) ) {
- $curlRes = curl_exec( $curlHandle );
+ if ( preg_match( '!^http://([\w.-]+)[/:].*$!' ) || preg_match( '!^https://([\w.-]+)[/:].*$!' ) ) {
- if ( curl_errno ($curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
@@ -790,11 +790,97 @@
- $this->status->fatal( 'http_timed_out', $this->url );
- $curlRes = curl_exec( $curlHandle );
- } elseif ($curlRes === false ) {
- if ( curl_errno ($curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
- $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
- $this->status->fatal( 'http_timed_out', $this->url );
- } else {
- } elseif ($curlRes === false ) {
- $this->headerList = explode( "\r\n", $this->headerText );
- $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
- }
- } else {
- $this->headerList = explode( "\r\n", $this->headerText );
- }
-
-
- curl_close( $curlHandle );
- curl_close( $curlHandle );
-
-
+ /* Neuer Code für "Snoopy" ungeprüft bei MW1.23 übernommen von MW1.16
+ // Neuer Code für "Snoopy" ungeprüft bei MW1.31 übernommen von MW1.23/1.16
+ * START:
+ // START:
+ * Add code to access restricted repositories.  
+ // Add code to access restricted repositories.  
+ * Add the following line in the LocalSettings.php  
+ // Add the following line in the LocalSettings.php  
+ * $wgAuthenticatedRepository = true;
+ // $wgAuthenticatedRepository = true;
+ * $wgAuthenticatedRepositoryUser = 'WikiSysop';
+ // $wgAuthenticatedRepositoryUser = 'WikiSysop';
+ * $wgAuthenticatedRepositoryPassword = 'dev2010wer';
+ // $wgAuthenticatedRepositoryPassword = 'dev2010wer';
+ * $wgShowAuthenticatedRepositoryError = true;
+ // $wgShowAuthenticatedRepositoryError = true;
+ */
+ //
+
+
+    global $wgAuthenticatedRepository, $wgAuthenticatedRepositoryUser, $wgAuthenticatedRepositoryPassword, $wgShowAuthenticatedRepositoryError;
+    global $wgAuthenticatedRepository, $wgAuthenticatedRepositoryUser, $wgAuthenticatedRepositoryPassword, $wgShowAuthenticatedRepositoryError;
Zeile 3.328: Zeile 3.907:
+    $token2 = array();
+    $token2 = array();
+
+
+ /* run the code only if the user activate is in the LocalSettings.php*/
+ // run the code only if the user activate is in the LocalSettings.php
+    if ( $wgAuthenticatedRepository ) {
+    if ( $wgAuthenticatedRepository ) {
+      require_once 'extensions/Snoopy-1.2.4/Snoopy.class.php';
+      require_once 'extensions/Snoopy-1.2.4/Snoopy.class.php';
Zeile 3.334: Zeile 3.913:
+      $login = '';
+      $login = '';
+       
+       
+      /* Get all relevat url informations */
+      // Get all relevat url informations
+      /* URL: http://localhost/mediawiki/mediawiki-repository/index.php/File:MediawikiExampleImageFlower.jpg?action=render&uselang=en */
+      // URL: http://localhost/mediawiki/mediawiki-repository/index.php/File:MediawikiExampleImageFlower.jpg?action=render&uselang=en
+      $wikiPath = "";
+      $wikiPath = "";
+      if (!preg_match('/(.*)\/index.php\/(.*)\?(.*)/', $this->url, $matches)) {
+      if (!preg_match('/(.*)\/index.php\/(.*)\?(.*)/', $this->url, $matches)) {
+         echo "nicht gefunden";
+       echo "nicht gefunden";
+      } else {
+      } else {
+         $wikiPath = $matches[1];
+       $wikiPath = $matches[1];
+   /* If the url contains special characters, when these characters must be convert */
+ // If the url contains special characters, when these characters must be convert
+   $title = rawurldecode($matches[2]);
+ $title = rawurldecode($matches[2]);
+      }
+      }
+       
+       
Zeile 3.349: Zeile 3.928:
+
+
+      $snoopy = new Snoopy;
+      $snoopy = new Snoopy;
+      /* Start request to get an token */
+      // Start request to get an token
+      $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword, 'format' => 'php');
+      $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword, 'format' => 'php');
+      if(!$snoopy->submit($apiPath, $request_vars))
+      if(!$snoopy->submit($apiPath, $request_vars))
Zeile 3.358: Zeile 3.937:
+      $token = unserialize($snoopy->results);
+      $token = unserialize($snoopy->results);
+       
+       
+      /* Use the Token to login */
+      // Use the Token to login
+      if ( $token['login']['result'] == 'NeedToken') {  
+      if ( $token['login']['result'] == 'NeedToken') {  
+      $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword,  'lgtoken' => $token['login']['token'], 'format' => 'php');
+      $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword,  'lgtoken' => $token['login']['token'], 'format' => 'php');
Zeile 3.370: Zeile 3.949:
+      }
+      }
+             
+             
+      /* If the login was successful, get the Information from the File Description */
+      // If the login was successful, get the Information from the File Description
+      if ( ($token2['login']['result'] == 'Success') or ($token['login']['result'] == 'Success') ) {  
+      if ( ($token2['login']['result'] == 'Success') or ($token['login']['result'] == 'Success') ) {  
+      $request_vars = array('action' => 'render', 'title'=> $title, 'lgtoken' => $token['login']['token'], 'format' => 'php');
+      $request_vars = array('action' => 'render', 'title'=> $title, 'lgtoken' => $token['login']['token'], 'format' => 'php');
Zeile 3.389: Zeile 3.968:
+    else  
+    else  
+    {     
+    {     
+ /*
+ //
+ * START: Original Code - now in a if statement
+ // START: Original Code - now in a if statement
+ */
+ //
+ $curlRes = curl_exec( $curlHandle );
+ if ( curl_errno ($curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
+ $this->status->fatal( 'http_timed_out', $this->url );
+ } elseif ($curlRes === false ) {
+ $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
+ } else {
+ $this->headerList = explode( "\r\n", $this->headerText );
+ }
+
+
+ if ( false === curl_exec( $curlHandle ) ) {
+ curl_close( $curlHandle );
+ $code = curl_error( $curlHandle );
+ //
+ //  END: Original Code - now in a if statement
+ //
+    }
+    //
+   //  END: Add code to access restricted repositories
+    //
+   
+   
if ( isset( self::$curlMessageMap[$code] ) ) {
    if ($this->profiler ) {
$this->status->fatal( self::$curlMessageMap[$code] );
      $this->profiler->scopedProfileOut( $profileSection );
} else {
    }  
$this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
 
+  }
    $this->parseHeader();
+  } else {
    $this->setStatus();
$this->headerList = explode("\r\n", $this->headerText);
 
+  }
    return Status:wrap( $this->status) // TODO B/C; move this to callers;
+  curl_close( $curlHandle );
  }
</pre>
+ /*
 
+ *  END: Original Code - now in a if statement
===== MediaWiki-Version 1.23 =====
+ */
 
}
Im Abschnitt "Extract host part" Z.129ff die Änderung für "https" einfügen.
+ /*
 
+ *  END: Add code to access restricted repositories
In der Funktion "execute()" die Zugriffsberechtigung anpassen.
+ */
$this->parseHeader();
$this->setStatus();
return $this->status;
}
}


**für die Mediawiki-Version '''16.0''':
<pre>
<pre>
--- HttpFunctions.php 2010-06-09 05:49:34.000000000 +0200
--- HttpFunctions.php 2010-06-09 05:49:34.000000000 +0200
+++ HttpFunctions_new.php 2010-11-22 17:09:33.000000000 +0100
+++ HttpFunctions_sw.php 2018-01-29
@@ -758,14 +758,97 @@
@@ -131,1 +131,1 @@
- if ( false === curl_exec( $curlHandle ) ) {
- if ( preg_match( '!^http://([\w.-]+)[/:].*$!' ) ) {
- $code = curl_error( $curlHandle );
+ if ( preg_match( '!^http://([\w.-]+)[/:].*$!' ) || preg_match( '!^https://([\w.-]+)[/:].*$!' ) ) {
-
@@ -790,11 +790,97 @@
- if ( isset( self::$curlMessageMap[$code] ) ) {
- $curlRes = curl_exec( $curlHandle );
- $this->status->fatal( self::$curlMessageMap[$code] );
- if ( curl_errno ($curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
- } else {
- $this->status->fatal( 'http_timed_out', $this->url );
- $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
- } elseif ($curlRes === false ) {
- }
- $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
- } else {
- } else {
- $this->headerList = explode("\r\n", $this->headerText);
- $this->headerList = explode( "\r\n", $this->headerText );
- }
- }
-
-
- curl_close( $curlHandle );
- curl_close( $curlHandle );
-
-
+ /*
+ /* Neuer Code für "Snoopy" ungeprüft bei MW1.23 übernommen von MW1.16
+ *  START:
+ *  START:
+ *  Add code to access restricted repositories.  
+ *  Add code to access restricted repositories.  
Zeile 3.545: Zeile 4.130:
}
}
}
}
class PhpHttpRequest extends HttpRequest {
</pre>
</pre>
Es wurden hauptsächlich Anpassungen gemacht, die den Text zurückgeben, sowie an der Abarbeitung von Fehlern. <br/>Für das korrekte Bearbeiten von Sonderzeichen in der url wurde rawurldecode() hinzugefügt.
*Die geänderte Datei "httpFunctions.php" als Sicherung für Mediawiki-Updates kopieren und speichern als "httpFunctions_sw.php".
*Die Erweiterung "Snoopy-2.0.0" von "https://sourceforge.net/projects/snoopy/" herunterladen, zip-Dateien auspacken und die Erweiterung in das Verzeichnis "extensions" des SalzWikis bzw. Saltwikis kopieren.
*Das Modul "curl" muss beim Apache-Webserver aktiviert sein; dazu kommentiert man in der Datei "D:\xampp\php\php.ini" die folgende Zeile ein:
<pre>extension=php_curl.dll </pre>
Den Apache-Dienst über das XAMPP-Control-Panel neu starten, damit die Änderungen wirksam werden.


*Der Zugriff auf das Repositorium wird gesperrt durch folgenden Eintrag in der Datei "LocalSettings.php" des Repositoriums:
===== Mediawiki-Version 1.16 =====
<pre>$wgGroupPermissions['*']['read'] = false;</pre>


*Um den Zugriff auf das geschützte Repositorium durchführen zu können, ist folgende Konfiguration der Datei "LocalSettings.php" des Salzwikis bzw. Saltwikis vorzunehmen:
<pre>
<pre>
$wgAuthenticatedRepository = true;
--- HttpFunctions.php 2010-06-09 05:49:34.000000000 +0200
$wgAuthenticatedRepositoryUser = 'WikiSysop';
+++ HttpFunctions_new.php 2010-11-22 17:09:33.000000000 +0100
$wgAuthenticatedRepositoryPassword = 'xxx';
@@ -758,14 +758,97 @@
$wgShowAuthenticatedRepositoryError = false;
- if ( false === curl_exec( $curlHandle ) ) {
</pre>
- $code = curl_error( $curlHandle );
$wgAuthenticatedRepository - aktiviert den Zugriff auf ein gesichertes Repository. Wenn dies nicht notwendig ist, bitte abstellen, da die Funktion zusätzliche Abfragen schickt, was die Zugriffe bei hoher Last verlangsamen kann.
-
<br>$wgShowAuthenticatedRepositoryError - Gibt Fehlermeldungen in die Log Dateien. Für den Live Betrieb bitte abstellen.
- if ( isset( self::$curlMessageMap[$code] ) ) {
 
- $this->status->fatal( self::$curlMessageMap[$code] );
=== Vorlagen  ===
- } else {
 
- $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
Vorlagen = Templates finden sich beispielhaft auf der Seite [[Vorlagen]] dargestellt.
- }
 
- } else {
Die einzelnen Vorlagen sind im Namensraum "Vorlage" bzw. "Template" zu finden. Für jede Vorlage ist eine eigene Wiki-Seite zu erstellen, um diese Vorlage dann im Wiki mit <nowiki>{{Vorlagenname}}</nowiki> verwenden zu können.
- $this->headerList = explode("\r\n", $this->headerText);
Die Vorlage ist anschließend auf der Seite "Vorlagen" beispielhaft aufzuführen.
- }
Die vorhandene Vorlage "Languages" wird ersetzt durch eine eigene Vorlage.
-
 
- curl_close( $curlHandle );
Für Vorlagen mit Beispieltexten unter Verwendung des Vorlagennamens im "noinclude"-Bereich siehe weiter unten bei [[#Code-Probleme und deren Lösungen|Code-Probleme und deren Lösungen]], Abschnitt "Timeout durch Template-Name im Template-Text" – betrifft insbesondere die Erweiterung "AccessControl".
-
 
+ /*
*'''Vorlagen für SalzWiki'''
+ *  START:
**FreeForTranslation
+ *  Add code to access restricted repositories.  
*'''Vorlagen für SalzWiki und Saltwiki'''
+ *  Add the following line in the LocalSettings.php
**Infobox_Salz bzw. Infobox_Salt
+ * $wgAuthenticatedRepository = true;
**MetadatenFoto_upload (wird im Artikel Vorlagen/Templates verwendet)
+ * $wgAuthenticatedRepositoryUser = 'WikiSysop';
*'''Vorlagen für das Repositorium'''
+ * $wgAuthenticatedRepositoryPassword = 'dev2010wer';
**MetadatenFoto_upload
+ * $wgShowAuthenticatedRepositoryError = true;
**MetadatenDaten_upload
+ */
**MetadatenLiteratur_upload
+
**MetadatenProben_upload
+    global $wgAuthenticatedRepository, $wgAuthenticatedRepositoryUser, $wgAuthenticatedRepositoryPassword, $wgShowAuthenticatedRepositoryError;
**MetadatenText_upload
+    $error = true;
**Untersuchungsmethoden
+    $text = '';
*'''Lizenzvorlagen''': Eine neue Kategorie "Kategorie:Lizenzenvorlagen" erstellen mit folgenden Vorlagen:
+    $token2 = array();
**CC-by-nc-nd,CC-by-nc-nd/de
+
**CC-by-nc-sa,CC-by-nc-sa/de
+ /* run the code only if the user activate is in the LocalSettings.php*/
**PD
+    if ( $wgAuthenticatedRepository ) {
**PD Help Page, PD Help Page/de, PD Help Page/fr
+      require_once 'extensions/Snoopy-1.2.4/Snoopy.class.php';
** GFDL,GFDL/de (nur im Repositorium)
+      $index = '';
 
+      $login = '';
Alle anderen Vorlagen wurden beim Einbinden der Hilfeseiten bzw. Extensions eingestellt.
+     
 
+      /* Get all relevat url informations */
=== Lizenzen-Auswahl im Upload-Formular ===
+      /* URL: http://localhost/mediawiki/mediawiki-repository/index.php/File:MediawikiExampleImageFlower.jpg?action=render&uselang=en */
 
+      $wikiPath = "";
Um neue Lizenzen im Klappfeld im Upload-Formular einzugeben muss die Datei Mediawiki:Licenses (http://193.175.110.91/repository_1.16.1/index.php?title=MediaWiki:Licenses) editiert werden, nach dem vorgegebene Schema:
+      if (!preg_match('/(.*)\/index.php\/(.*)\?(.*)/', $this->url, $matches)) {
 
+          echo "nicht gefunden";
<pre>
+      } else {
*Free licenses:          <!-- Lizenztyp -->
+          $wikiPath = $matches[1];
**PD|PD: public domain    <!--einzelne Lizenz-->
+   /* If the url contains special characters, when these characters must be convert */
**GNU|GFDL: GNU Free Documentation License
+   $title = rawurldecode($matches[2]);
 
+      }
*Creative Commons
+     
**CC-by-nc-nd|Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0)
+      $apiPath = "$wikiPath/api.php";
**CC-by-nc-sa|Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)
+      $indexPath = "$wikiPath/index.php";
</pre>
+
 
+      $snoopy = new Snoopy;
=== Editor (JavaScript) ===
+      /* Start request to get an token */
 
+      $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword, 'format' => 'php');
'''Achtung: Alle üblichen Editoren zur Bearbeitung von Seiteninhalten funktionieren nur mit JavaScript.''' Dies gilt auch für die Erweiterung [[#WikiEditor_.28JavaScript.29|WikiEditor]].
+      if(!$snoopy->submit($apiPath, $request_vars))
 
+      $this->status->fatal("Snoopy error: {$snoopy->error}");
==== Standard-Editor (Wiki-Code, JS) ====
+     
 
+      // We're only really interested in the cookies
'''Achtung: Funktioniert nur bei Browsern mit aktiviertem JavaScript und muss in den 3 nachfolgend genannten Dateien und dem Grafiken-Verzeichnis nach jedem MediaWiki-Update auf Vorhandensein und Änderungen überprüft werden!'''
+      $snoopy->setcookies();
 
+      $token = unserialize($snoopy->results);
Folgende Dateien werden  vom Standard-Editor verwendet:
+     
* "/includes/EditPage.php"
+      /* Use the Token to login */
* Symbole/Grafiken: "skins/common/images/..."
+      if ( $token['login']['result'] == 'NeedToken') {
* "/languages/i18n/..."
+      $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword, 'lgtoken' => $token['login']['token'], 'format' => 'php');
 
+      if(!$snoopy->submit($apiPath, $request_vars))
Vorhanden sind folgende Funktionen:
+  $this->status->fatal("Snoopy error: {$snoopy->error}");
* bold, italic
+      $token2 = unserialize($snoopy->results);
* link (wiki), ext. link
+      }
* headline size 2
+      else if ( ($token['login']['result'] == 'NoName') ) {
* file embedded, media
+        wfDebug( __METHOD__ . ": Wrong or no User for wgAuthenticatedRepositoryUser in the LocalSetting. \n" );
* nowiki, signatur
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no User for <i>wgAuthenticatedRepositoryUser</i> in the LocalSetting.<br/>";
* horizontal line
+      }
 
+           
Das Schaltflächen-Symbol für Weiterleitungen ist bei MW 1.23 im Gegensatz zu MW 1.16 nicht vorhanden und wird für die Salz-Wikis auch nicht mehr durch Anpassungen hinzugefügt.
+      /* If the login was successful, get the Information from the File Description */
 
+      if ( ($token2['login']['result'] == 'Success') or ($token['login']['result'] == 'Success') ) {
Das Schaltflächen-Symbol für mathematische Formeln wird von der Erweiterung "Math" hinzugefügt, u. a. in folgenden Dateien:
+      $request_vars = array('action' => 'render', 'title'=> $title, 'lgtoken' => $token['login']['token'], 'format' => 'php');
* "/extensions/Math/Math.hooks.php" für die Modul-Aktivierung von "math.editbuttons"
+      if(!$snoopy->submit($indexPath, $request_vars))
* "/extensions/Math/modules/ext.math.editbuttons.js"
+  $this->status->fatal("Snoopy error: {$snoopy->error}");
* "/extensions/Math/i18n/de.json" für Texte zur Schaltfläche
+      $this->content = $snoopy->results;
 
+      }
Ergänzt werden sollen folgende Funktionen (siehe "Anpassungen" weiter unten):
+      else if ( ($token2['login']['result'] == 'WrongPass') or ($token2['login']['result'] == 'WrongPluginPass') or ($token2['login']['result'] == 'EmptyPass') ) {
* Zeilenumbruch
+        wfDebug( __METHOD__ . ": Wrong or no Password for wgAuthenticatedRepositoryPassword in the LocalSetting." );
* Durchgestrichen
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no Password for <i>wgAuthenticatedRepositoryPassword</i> in the LocalSetting.<br/>";
* Hoch gestellt
+      }
* Tief gestellt
+      else if ( ($token2['login']['result'] == 'NotExists') ) {
* Zitat
+        wfDebug( __METHOD__ . ": Wrong or no User for wgAuthenticatedRepositoryUser in the LocalSetting. \n" );
* Fußnoten-Verweis
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no User for <i>wgAuthenticatedRepositoryUser</i> in the LocalSetting.<br/>";
* Versteckter Kommentar
+      }
* Tabelle einfügen
+      $this->headerList = explode("\r\n", $this->headerText);     
 
+    }
===== Anpassungen =====
+    else
 
+    {   
Für Anpassungen siehe auch https://www.mediawiki.org/wiki/Manual:Custom_edit_buttons#Classic_edit_toolbar
+ /*
 
+ *  START: Original Code - now in a if statement
* neues Unterverzeichnis "/editor_default_sw/" für Grafiken der Schaltflächen
+ */
* neue Einträge in den Sprachdateien im Verzeichnis "/languages/i18n/"
+
* Code-Anpassungen in der Core-Datei "EditPage.php"
+  if ( false === curl_exec( $curlHandle ) ) {
 
+  $code = curl_error( $curlHandle );
Es wird ein neues Unterverzeichnis "editor_default_sw" im Verzeichnis "/skins/common/images/" erstellt, da vom Wiki-Code für den Editor aus diesem Verzeichnis die Grafiken geholt werden. In das neu erstellte Verzeichnis werden folgende Grafiken aus der älteren Wiki-Installation oder von https://commons.wikimedia.org/wiki/Mediawiki_edit_toolbar kopiert und gespeichert:
* "Button_Bibliogryphy.png" umbenennen zu "Button_bibliography.png"
+  if ( isset( self::$curlMessageMap[$code] ) ) {
* "Button_blockquote.png"
+  $this->status->fatal( self::$curlMessageMap[$code] );
* "Button_enter.png"
+  } else {
* "Button_hide_comment.png" umbenennen zu "Button_hidden_comment.png"
+  $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
* "Button_insert_table.png"
+  }
* "Button_lower_letter.png" umbennen zu "Button_sub_letter.png"
+  } else {
* "Button_redirect.png"
+  $this->headerList = explode("\r\n", $this->headerText);
* "Button_reflink.png"
+  }
* <del>"Button_small.png"</del>
+  curl_close( $curlHandle );
* "Button_strike.png"
* "Button_upper_letter.png" umbenennen zu "Button_sup_letter.png"
+ /*
 
+ *  END: Original Code - now in a if statement
 
+ */
de.json Z.626 unter "hr_tip" wie folgt ergänzen und anschließend eine Kopie der Datei als "de_SW.json" speichern:
+  }
<pre>
+ /*
"enter_tip": "Zeilenumbruch",
+ *  END: Add code to access restricted repositories
"strike_sample": "durchgestrichener Text",
+ */
"strike_tip": "Durchgestrichen",
"sup_letter_sample": "hoch gestellter Text",
$this->parseHeader();
"sup_letter_tip": "Hoch gestellt",
$this->setStatus();
"sub_letter_sample": "tief gestellter Text",
return $this->status;
"sub_letter_tip": "Tief gestellt",
}
"blockquote_sample": "Zitat",
}
"blockquote_tip": "Zitierter Text",
"reflink_sample": "Fußnoten-Text",
"reflink_tip": "Fußnoten-Verweis",
"hidden_comment_sample": "Kommentar",
"hidden_comment_tip": "Versteckter Kommentar",
"insert_table_sample": "! Kopf1\n! Kopf2\n! Kopf3\n|-\n| Reihe1 Spalte1\n| Reihe1 Spalte2\n| Reihe1 Spalte3\n|-\n| Reihe2 Spalte1\n| Reihe2 Spalte2\n| Reihe2 Spalte3",
"insert_table_tip": "Tabelle einfügen (Tabellenkopf, 3 Spalten, 2 Reihen)",
"redirect_sample": "Seitenname",
"redirect_tip": "Weiterleitung",
"bibliography_sample": "Nachname:2017",
"bibliography_tip": "Literaturzitat einfügen",
</pre>
 
en.json Z.593 unter "hr_tip" wie folgt ergänzen und anschließend eine Kopie derDatei als "en_SW.json" speichern:
<pre>
"enter_tip": "Line break",
"strike_sample": "Strike-through text",
"strike_tip": "Strike",
"sup_letter_sample": "Superscript text",
"sup_letter_tip": "Superscript",
"sub_letter_sample": "Subscript text",
"sub_letter_tip": "Subscript",
"blockquote_sample": "Block quote",
"blockquote_tip": "Quoted text",
"reflink_sample": "Footnote text",
"reflink_tip": "footnote reference",
"hidden_comment_sample": "Comment",
"hidden_comment_tip": "Hidden comment",
"insert_table_sample": "! header 1\n! header 2\n! header 3\n|-\n| row 1, cell 1\n| row 1, cell 2\n| row 1, cell 3\n|-\n| row 2, cell 1\n| row 2, cell 2\n| row 2, cell 3",
"insert_table_tip": "Insert table (table head, 3 columns, 2 rows)",
"redirect_sample": "Page name",
"redirect_tip": "Redirect",
"bibliography_sample": "Surname:2017",
"bibliography_tip": "Insert literature blockquote",
</pre>
 
 
Nachfolgenden Code in der Datei "/includes/EditPage.php" bei der Array-Variablen "$Toolarray" (ab Zeile 3385) am Ende einfügen (Z. 3475); hierbei das erste Komma nicht vergessen.
<pre>
,
array(
  'image'  => "editor_default_sw/Button_enter.png",
  'id'    => 'mw-editbutton-enter',
  'open'  => '<br />',
  'close'  => '',
  'sample' => '',
  'tip'    => wfMessage( 'enter_tip' )->text()
),
array(
  'image'  => "editor_default_sw/Button_strike.png",
  'id'    => 'mw-editbutton-strike',
  'open'  => '<s>',
  'close'  => '</s>',
  'sample' => wfMessage( 'strike_sample' )->text(),
  'tip'    => wfMessage( 'strike_tip' )->text()
),
array(
  'image'  => "editor_default_sw/Button_sup_letter.png",
  'id'    => 'mw-editbutton-sup-letter',
  'open'  => '<sup>',
  'close'  => '</sup>',
  'sample' => wfMessage( 'sup_letter_sample' )->text(),
  'tip'    => wfMessage( 'sup_letter_tip' )->text()
),
array(
  'image'  => "editor_default_sw/Button_sub_letter.png",
  'id'    => 'mw-editbutton-sub-letter',
  'open'  => '<sub>',
  'close'  => '</sub>',
  'sample' => wfMessage( 'sub_letter_sample' )->text(),
  'tip'    => wfMessage( 'sub_letter_tip' )->text()
),
array(
  'image'  => "editor_default/Button_redirect.png",
  'id'    => 'mw-editbutton-redirect',
  'open'  => "#REDIRECT[[",
  'close'  => ']]',
  'sample' => wfMessage( 'redirect_sample' )->text(),
  'tip'    => wfMessage( 'redirect_tip' )->text(),
  'key'    => 'F'
),
array(
  'image'  => "editor_default_sw/Button_reflink.png",
  'id'    => 'mw-editbutton-reflink',
  'open'  => '<ref>',
  'close'  => '</ref>',
  'sample' => wfMessage( 'reflink_sample' )->text(),
  'tip'    => wfMessage( 'reflink_tip' )->text()
),
array(
  'image'  => "editor_default_sw/Button_blockquote.png",
  'id'    => 'mw-editbutton-blockquote',
  'open'  => '<blockquote>'."\n",
  'close'  => "\n".'</blockquote>',
  'sample' => wfMessage( 'blockquote_sample' )->text(),
  'tip'    => wfMessage( 'blockquote_tip' )->text()
),
array(
  'image'  => "editor_default_sw/Button_Bibliography.png",
  'id'    => 'mw-editbutton-bibliography',
  'open'  => '<bib id="',
  'close'  => '"/>',
  'sample' => wfMessage( 'bibliography_sample' )->text(),
  'tip'    => wfMessage( 'bibliography_tip' )->text()
),
array(
  'image'  => "editor_default_sw/Button_hidden_comment.png",
  'id'    => 'mw-editbutton-hidden-comment',
  'open'  => '<!-- ',
  'close'  => ' -->',
  'sample' => wfMessage( 'hidden_comment_sample' )->text(),
  'tip'    => wfMessage( 'hidden_comment_tip' )->text()
),
array(
  'image'  => "editor_default_sw/Button_insert_table.png",
  'id'    => 'mw-editbutton-insert-table',
  'open'  => '{| class="wikitable"'."\n".'|-'."\n",
  'close'  => "\n".'|}',
  'sample' => wfMessage( 'insert_table_sample' )->text(),
  'tip'    => wfMessage( 'insert_table_tip' )->text()
)
</pre>
 
Die Texte für "tip" und "sample" befinden sich in den json-Sprachdateien im Verzeichnis "/includes/i18n/".
 
ACHTUNG: Nach jedem mediawiki-Update muss überprüft werden, ob die vorgenommene Änderung in der Datei "EditPage.php" noch existiert und funktioniert. Deshalb ist im Verzeichnis "/includes/" von der Datei eine Kopie namens "EditPage_SW.php" zu speichern.
 
==== Erweiterung WikiEditor oder alter Standard-Editor ??? ====


Beispiel für einzufügenden HTML-Kommentar in Datei ??? ("ext.wikiEditor.js"? oder "ext.wikiEditor.toolbar.js"? im Verzeichnis "/extensions/WikiEditor/modules/"?):
class PhpHttpRequest extends HttpRequest {
<pre>
...
if(mw.toolbar){
  mw.toolbar.addButton({
    imageFile: '//upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png',
    speedTip: 'Comment visible only for editors',
    tagOpen: '<!-- ',
    tagClose: ' -->',
    sampleText: 'Insert comment here',
    imageId: 'button-comment'
  });
}
</pre>
</pre>


=== Namensräume ===
=== Vorlagen  ===


==== Übersicht der vorhandenen Namensräume ====
Vorlagen = Templates finden sich beispielhaft auf der Seite [[Vorlagen]] dargestellt.
 
Die einzelnen Vorlagen sind im Namensraum "Vorlage" bzw. "Template" zu finden. Für jede Vorlage ist eine eigene Wiki-Seite zu erstellen, um diese Vorlage dann im Wiki mit <nowiki>{{Vorlagenname}}</nowiki> verwenden zu können.
Die Vorlage ist anschließend auf der Seite "Vorlagen" beispielhaft aufzuführen.
Die vorhandene Vorlage "Languages" wird ersetzt durch eine eigene Vorlage.
 
Für Vorlagen mit Beispieltexten unter Verwendung des Vorlagennamens im "noinclude"-Bereich siehe weiter unten bei [[#Code-Probleme und deren Lösungen|Code-Probleme und deren Lösungen]], Abschnitt "Timeout durch Template-Name im Template-Text" – betrifft insbesondere die Erweiterung "AccessControl".
 
*'''Vorlagen für SalzWiki'''
**FreeForTranslation
*'''Vorlagen für SalzWiki und Saltwiki'''
**Infobox_Salz bzw. Infobox_Salt
**MetadatenFoto_upload (wird im Artikel Vorlagen/Templates verwendet)
*'''Vorlagen für das Repositorium'''
**MetadatenFoto_upload
**MetadatenDaten_upload
**MetadatenLiteratur_upload
**MetadatenProben_upload
**MetadatenText_upload
**Untersuchungsmethoden
*'''Lizenzvorlagen''': Eine neue Kategorie "Kategorie:Lizenzenvorlagen" erstellen mit folgenden Vorlagen:
**CC-by-nc-nd,CC-by-nc-nd/de
**CC-by-nc-sa,CC-by-nc-sa/de
**PD
**PD Help Page, PD Help Page/de, PD Help Page/fr
** GFDL,GFDL/de (nur im Repositorium)
 
Alle anderen Vorlagen wurden beim Einbinden der Hilfeseiten bzw. Extensions eingestellt.
 
=== Lizenzen-Auswahl im Upload-Formular ===
 
Um neue Lizenzen im Klappfeld im Upload-Formular einzugeben muss die Datei Mediawiki:Licenses (http://193.175.110.91/repository_1.16.1/index.php?title=MediaWiki:Licenses) editiert werden, nach dem vorgegebene Schema:
 
<pre>
*Free licenses:          <!-- Lizenztyp -->
**PD|PD: public domain    <!--einzelne Lizenz-->
**GNU|GFDL: GNU Free Documentation License
 
*Creative Commons
**CC-by-nc-nd|Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0)
**CC-by-nc-sa|Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)
</pre>
 
=== Editor (JavaScript) ===
 
'''Achtung: Alle üblichen Editoren zur Bearbeitung von Seiteninhalten funktionieren nur mit JavaScript.''' Dies gilt auch für die Erweiterung [[#WikiEditor_.28Extension-Code.2C_JavaScript.29|"WikiEditor"]], welche bei MW1.31 für den Standard-Editor verwendet wird.
 
=== Namensräume ===
 
==== Übersicht der vorhandenen Namensräume ====


Eine Übersicht sowohl der MediaWiki-Namensräume als auch der selbst erstellten Namensräume wird aufgelistet durch Eingabe folgender Adresse:
Eine Übersicht sowohl der MediaWiki-Namensräume als auch der selbst erstellten Namensräume wird aufgelistet durch Eingabe folgender Adresse:
Zeile 3.935: Zeile 4.418:
== Extensions  ==
== Extensions  ==


Welche Erweiterungen in welcher Distribution enthalten sind, erfährt man auf der Seite https://www.mediawiki.org/wiki/Comparison_of_extensions_in_distributions
=== Vorinstallierte Erweiterungen ===


Mit MW1.31 zu installierende Erweiterungen:
Welche Erweiterungen bei MW1.23 in welcher Linux-Distribution enthalten sind, erfährt man auf der Seite https://www.mediawiki.org/wiki/Comparison_of_extensions_in_distributions.
# ApprovedRevs v0.8
 
# BibManager v1.23.0 (2018-03-18)
Eine allgemeine Übersicht der enthaltenen Erweiterungen gibt es unter https://www.mediawiki.org/wiki/Bundled_extensions_and_skins/de-formal.
# ContactPage v2.3 (2018-04-14)
 
# DynamicPageList3 v3.3.2
Mit MW1.31 zu installierende Erweiterungen:
# Lingo v3.0.0
* ApprovedRevs v0.8
# Math v3.0.0 (2018-04-17)
* AuthorProtect v1.4.0 (2018-04-13)
# SaltWiki
* BibManager v1.23.0 (2018-03-18)
# TimedMediaHandler v0.5.0 (2018-08-07) mit MwEmbedSupport
* ContactPage v2.3 (2018-04-14)
# UserMerge v1.10.1 (2018-05-18)
* DynamicPageList3 v3.3.2
# WhosOnline v1.7.2 (2018-03-10)
* Lingo v3.0.0
* Math v3.0.0 (2018-04-17)
* SaltWiki
* TimedMediaHandler v0.5.0 (2018-08-07) mit MwEmbedSupport
* UserMerge v1.10.1 (2018-05-18)
* WhosOnline v1.7.2 (2018-03-10)


In MW1.31 enthaltene Erweiterungen, die genutzt werden:
In MW1.31 enthaltene Erweiterungen, die genutzt werden:
# CategoryTree
* CategoryTree
# Cite
* Cite
# ConfirmEdit v1.5.1
* CiteThisPage
# ImageMap
* ConfirmEdit v1.5.1
# Interwiki
* ImageMap
# MultimediaViewer
* Interwiki
# ParserFunctions v1.6.0 mit ControlStructureFunctions
* MultimediaViewer
# SpamBlacklist
* ParserFunctions v1.6.0 mit ControlStructureFunctions
# WikiEditor v0.5.1 bei Bedarf
* SpamBlacklist
* WikiEditor v0.5.1 bei Bedarf
 
In MW1.31 enthaltene Erweiterungen, die nicht genutzt werden:
* in der Datei "LocalSettings.php" auskommentieren
** <del>Cite wegen Fehlermeldung bei PHP7.2.2</del>
** RenameUser
* im Verzeichnis "extensions" enthalten
** CodeEditor
** Gadgets
** InputBox
** LocalisationUpdate
** Nuke [obwohl angeblich nicht mehr enthalten]
** OATHAuth
** PdfHandler
** Poem
** ReplaceText
** SyntaxHighlight_GeSHi
** TitleBlacklist


=== AccessControl (fehlerhaft)  ===
=== AccessControl (fehlerhaft)  ===


"AccessControl" wird nicht mehr installiert, da es von MediaWiki ab Version 1.31 nicht mehr unterstützt wird.
"AccessControl" wird nicht mehr installiert, da es von MediaWiki ab Version 1.31 nicht mehr unterstützt wird. Dies betrifft bisher geschützte Seiten, die ohne die Erweiterung nicht nur für Autor/inn/en sichtbar sind, beispielsweise die Seite "RichtlinienAutoren" und Seiten wie "Autoren" (Richtlinien/Übersichten) aus dem Sidebar-Bereich "Autor/inn/en-Seiten.
 
Auf der Seite der Erweiterung wird ab MW 1.23 die Version "AC 2.6" von 2016-06-06 empfohlen, siehe auch https://www.mediawiki.org/wiki/Extension:AccessControl. Allerdings gibt es bei allen neueren Versionen vor MW1.31 Fehlermeldungen wegen fehlender json-Dateien oder einer nicht unterstützten Manifest-Version 2. Verwendet werden musste bei MW1.23/1.27 die Version REL1.27 AC2.5 mit "include_once(...)" statt "wfLoadExtension(...)".


Auf der Seite der Erweiterung wird ab MW 1.23 die Version "AC 2.6" von 2016-06-06 empfohlen, siehe auch https://www.mediawiki.org/wiki/Extension:AccessControl. Allerdings gibt es bei allen neueren Versionen vor MW1.31 Fehlermeldungen wegen fehlender json-Dateien oder einer nicht unterstützten Manifest-Version 2. Verwendet werden musste REL1.27 AC2.5 mit "include_once(...)" statt "wfLoadExtension(...)".
Etliche Erweiterungen für spezielle Nutzungsrechte werden aufgelistet bei https://www.mediawiki.org/wiki/Category:Page_specific_user_rights_extensions, sind allerdings nicht mehr mit MW1.31 nutzbar.
 
Als vorläufiger Ersatz wird die Erweiterung "AuthorProtect" verwendet, mit der nach Auswahl der Karteikarte "Schützen" bei den Auswahllisten für den Seitenschutz "Bearbeitungen auf den Autor beschränken" zusätzlich zur Verfügung steht.


==== Verwendungszweck ====
==== Verwendungszweck ====
Zeile 4.337: Zeile 4.847:
==== Installation der Erweiterung "ApprovedRevs" ====
==== Installation der Erweiterung "ApprovedRevs" ====


* Die Erweiterung wird mit der Version 0.7.0 REL1.23 2015-06-16T21:01:12 513cff5 heruntergeladen und nach dem Extrahieren in das Extensions-Verzeichnis des jeweiligen Wikis kopiert.
* Die Erweiterung wird mit der Version 0.8 <del>0.7.0 REL1.23 2015-06-16T21:01:12 513cff5</del> heruntergeladen und nach dem Extrahieren in das Extensions-Verzeichnis des jeweiligen Wikis kopiert.
* Es muss bei einem neuen Wiki eine Datenbank-Tabelle mit dem Präfix "sw_" (SalzWiki, SaltWiki) bzw. "sr_" (Repository) und dem Namen "approved_revs" angelegt werden. Hierzu gibt es zwei Möglichkeiten:
* Es muss bei einem neuen Wiki eine Datenbank-Tabelle mit dem Präfix "sw_" (SalzWiki, SaltWiki) bzw. "sr_" (Repository) und dem Namen "approved_revs" angelegt werden. Hierzu gibt es zwei Möglichkeiten:
** Das Skript "update.php" von "MediaWiki's/maintenance" benutzen oder
** Das Skript "update.php" von "MediaWiki's/maintenance" benutzen oder
** Mittels "phpMyAdmin" in der Datenbank die Tabelle mit den beiden SQL-Befehlen, die in der Datei "ApprovedRevs.sql" der Erweiterung zu finden sind, erstellen.
** Mittels "phpMyAdmin" in der Datenbank die Tabelle mit den beiden SQL-Befehlen, die in der Datei "ApprovedRevs.sql" der Erweiterung zu finden sind, erstellen.
* Es muss bei einem bestehenden Wiki mit "phpMyAdmin" die Datenbank-Tabelle auf die Spalte "approver_id" überprüft werden und, sofern die Spalte fehlt, die Spalte mit dem SQL-Befehl aus der Datei "...\extensions\ApprovedRevs\sql\patch-approver_id.sql" hinzugefügt werden, wobei das Tabellen-Präfix "sw_" bzw. "sr_" zu ergänzen ist.
* Die Erweiterung in der Datei "LocalSettings.php" aktivieren
* Die Erweiterung in der Datei "LocalSettings.php" aktivieren
<pre>// SalzWiki, SaltWiki, Repository
<pre>// SalzWiki, SaltWiki, Repository
require_once( "$IP/extensions/ApprovedRevs/ApprovedRevs.php" );
#require_once( "$IP/extensions/ApprovedRevs/ApprovedRevs.php" );
wfLoadExtension("ApprovedRevs");
</pre>
</pre>


Zeile 4.377: Zeile 4.889:


Beispiele:
Beispiele:
* damit z. B. alle Mitglieder der Gruppe "autor" Seiten als geprüft markieren können
* damit z. B. alle Mitglieder der Gruppe "sysop" Seiten als geprüft markieren können
<pre>$wgGroupPermissions['autor']['approverevisions'] = true;</pre>
<pre>$wgGroupPermissions['sysop']['approverevisions'] = true;</pre>


* um den ApprovedRevs-Hyperlink standardmäßig zu deaktivieren
* um den ApprovedRevs-Hyperlink standardmäßig zu deaktivieren
Zeile 4.387: Zeile 4.899:
$wgGroupPermissions['sysops']['viewlinktolatest'] = true;</pre>
$wgGroupPermissions['sysops']['viewlinktolatest'] = true;</pre>


=== BibManager===
=== AuthorProtect ===
 
Die Erweiterung "AuthorProtect" wird als Ersatz für "Access Control" verwendet. Mit "AuthorProtect" kann die Bearbeitung einer Seite auf die Autorin bzw. den Autor einer Seite beschränkt werden. Durch die Erweiterung steht bei einer Seite nach Auswahl der Karteikarte "Schützen" bei den Auswahllisten für den Seitenschutz zusätzlich "Bearbeitungen auf den Autor beschränken" zur Verfügung.
 
Für Informationen und zum Herunterladen siehe https://www.mediawiki.org/wiki/Extension:AuthorProtect. Die Erweiterung wird für MW1.31 in Version 1.4.0 angeboten und wird in das Verzeichnis "...\[wikiname]\extensions\" entpackt.
 
Alle Seiten, die mit "<Accesscontrol>...</Accesscontrol>" eingeleitet werden, müssen entsprechend mit dem neuen Schutz ausgestattet werden. Die Suche nach "Access" in der linken Navigation findet im Repositorium nur 10 Seiten, welche mit "access:..." geschützt wurden.
 
Bisher für bestimmte Gruppen geschützte Seiten, die im Repsoitorium ausfindig gemacht werden konnten:
 
* access:RBK-luebeck
** Ratsbierkeller_Lübeck
* access:SIP
** Probe0009, Probe0016, Probe0020, Probe0021, Probe0025, Probe0029, Probe0035, Probe0082. Probe0094
* autor
** Analyses, Analyses/de
** Audios, Audios/de
** Category_tree, Category_tree/de
** Communication, Communication/de
** Diagrams, Diagrams/de
** Graphics, Graphics/de
** Neue_Bilder
** Photos, Photos/de
** Physical-chemical_Datam, Physical-chemical_Data/de
** Presentations, Presentations/de
** Project_Data
** Rights/de
** Suche_Daten, Suche_Daten/de
** Templates, Templates/de
** Videos, Videos/de
* autor, Projekte, Administrator
** Projects, Projects/de
* HAWK
** Steinbergkapelle Hildesheim
* SalzWiki
** SalzWiki
* SalzWiki, SIP
** Forschungsverbund
 
=== BibManager (Extension-Code) ===


Die Erweiterung "BibManager" wird zur Erstellung und Verwaltung der Literaturhinweise bzw. zum Einbinden der Zitate in Artikel benutzt und verwendet den Namensraum "NS_CITATION" ("Cit") mit der Nummer 800 sowie "NS_CITATION_TALK" ("Cit_talk") mit der Nummer 801.
Die Erweiterung "BibManager" wird zur Erstellung und Verwaltung der Literaturhinweise bzw. zum Einbinden der Zitate in Artikel benutzt und verwendet den Namensraum "NS_CITATION" ("Cit") mit der Nummer 800 sowie "NS_CITATION_TALK" ("Cit_talk") mit der Nummer 801.
Zeile 4.401: Zeile 4.952:
Die Erweiterung [[#SaltWikiUpload|"SaltWikiUpload"]] soll im Repositorium das Hochladen von Dateien mit BibTex-Angaben erleichtern, doch wird bei MW1.23LTS nur das MW-Standard-Upload-Formular angezeigt.
Die Erweiterung [[#SaltWikiUpload|"SaltWikiUpload"]] soll im Repositorium das Hochladen von Dateien mit BibTex-Angaben erleichtern, doch wird bei MW1.23LTS nur das MW-Standard-Upload-Formular angezeigt.


==== Versionen ====
==== Version ====
 
BibManager-REL1.31 weist in der Datei "version" einen Stand 2018-04-17 auf.


Für MediaWiki 1.23 LTS wurde wegen diverser Probleme bei der BibManager-Version v1.1.0 die Version 1.23 REL1.26 2015-11-17T01:01:50 d824ce8 installiert.
* BibManager-REL1.31 weist in der Datei "version" einen Stand 2018-04-17 auf.
 
* In der Datei "extension.json" ist Version 1.23.0 für MW>=1.29 angegeben.
* BibManager
* Die Datei "BibManager.php" enthält ebenfalls einen Hinweis für die Verwendung mit MW1.29+.
** v1.23.0 git-master 2018-03-18T00:23 657ec22
** v1.23.0 REL1.31 2018-04-17T22:02:18 657ec22
** v1.23.0 master 2016-01-15T07:01:22 951b12f
** v1.23.0 REL1.26 2015-11-17T01:01:50 d824ce8 verwenden bei MW1.23LTS
** v1.1.0 REL1.23 2015-06-16T21:02:02 6218f71 (angeboten für MW 1.22+)
** v1 (verwendet bei MW1.16)
* SaltWiki
** SaltWiki mit Datum 2012-05-25 verwenden bei MW1.23LTS
** SaltWiki mit Datum 2012-01-20 (verwendet bei MW1.16)
* SaltWikiUpload
** SaltWikiUpload mit Datum 2012-01-25 verwenden bei MW1.23LTS Repository
** SaltWikiUpload mit Datum 2012-01-11 (verwendet bei MW1.16 Repository)


==== Installation ====
==== Installation ====
Zeile 4.425: Zeile 4.962:
Bei der Installation werden die Erweiterungen in folgende Ordner kopiert:
Bei der Installation werden die Erweiterungen in folgende Ordner kopiert:
* "\extensions\BibManager\"
* "\extensions\BibManager\"
* "\extensions\SaltWiki\"
* "\extensions\BibManagerAdditionalPublications\" <del>"\extensions\SaltWiki\"</del>
* "\extensions\SaltWikiUpload\"
* "\extensions\BibManagerUploadMetaData\" <del>"\extensions\SaltWikiUpload\"</del>
 
===== Anpassung SQL-Datei =====


In der Datei "LocalSettings.php" wird Folgendes eingefügt:
Für Wiki-Updates mit der MW-Datei "\maintenance\update.php" ist in der Datei "...\BibManager\maintenance\bibmanager_page_citation_rel.sql" 2 Mal das jeweilige Wiki-Präfix einzufügen.
 
SalzWiki/SaltWiki:
<pre>
<pre>
## Namensräume
-- Add the Page <-> Citation relationship table for BibManager
CREATE TABLE /*_*/sw_bibmanager_page_citation_rel (
...
...
// für Erweiterung BibManager
) /*$wgDBTableOptions*/;
define("NS_CITATION", 800);
 
define("NS_CITATION_TALK", 801);
CREATE INDEX /*i*/bmpc_bibtexCitationIDX ON /*_*/sw_bibmanager_page_citation_rel ( bmpc_bibtexCitation(50) );
$wgExtraNamespaces[NS_CITATION] = 'Cit';
$wgExtraNamespaces[NS_CITATION_TALK] = 'Cit_talk';
...
## EXTENSIONS
...
require_once('extensions/BibManager/BibManager.php');
require_once('extensions/SaltWiki/SaltWiki.php' );
#nur im Repositorium:
require_once('extensions/SaltWikiUpload/SaltWikiUpload.php' );
...
## Einstellungen
...
## Erweiterung BibManager
# Namensraum berücksichtigen
$wgBibManagerCitationArticleNamespace = NS_CITATION;
# BibManager-Anpassung an die gewünschte Zitierweise
$wgBibManagerCitationFormats = array (
  '-' => '%author%: %title%, %year% %url%, %doi%.',
  'article' => '%author% (%year%): %title%. <em>%journal%</em>, <b>%volume%</b> (%number%), %pages%, %url%, %doi%.',
  'book' => '%editor% %author% (%year%): <em>%title%, %edition%, %publisher%, %address%, %pages%</em>, %url%., %doi%',
  'booklet' => '%title% %url%, %doi%.',
  'conference' => '%author% (%year%): %title%. %booktitle% %url%, %doi%.',
  'inbook' => '%author% (%year%): <em>%title%. In: %editor%: %edition%, %publisher%, %address%, %pages%</em> %url%, %doi%.',
  'incollection' => '%author% (%year%): %title%. In: %editor%: %booktitle%, <em>%publisher%</em>, %pages%, %url%, %doi%.',
  'inproceedings' => '%author% (%year%): %title%. In: %editor%: %booktitle%,<em>%publisher%</em>, %pages%, %url%, %doi%.',
  'manual' => '%title% %url%, %doi%.',
  'mastersthesis' => '%author% (%year%): %title%, %type%, %school%, %address%, %url%, %doi%.',
  'misc' => '%author% (%year%): %title%, %howpublished%, %pages% %url%, %doi%.',
  'phdthesis' => '%author% (%year%): %title%. %type%, %school%, %url%, %doi%.',
  'proceedings' => '%editor% (%year%): %title%,<em> %publisher%</em>, %url%, %doi%.',
  'techreport' => '%author% (%year%): %title%. %institution% %url%, %doi%.',
  'unpublished' => '%author% (%year%): %title%. %note%, %url%, %doi%.'
);
</pre>
</pre>


===== BibManager v1.23 REL1_26 und v1.23 master =====
Repository:
 
<pre>
* Fehler bei "Edit" mit Fehlermeldung zu bereits vorhandenem Schlüssel
-- Add the Page <-> Citation relationship table for BibManager
* Fehler bei "Delete" wegen fehlender Datensatzkennung
CREATE TABLE /*_*/sr_bibmanager_page_citation_rel (
* Bei "Verwalten" fehlen rechts die Icons für "Edit" und "Delete" sowie die Trennung zwischen beiden Texten: css-Datei fehlt im head-Bereich
...
* In der Datei "\extensions\BibManager\includes\BibManagerHooks.php" ist in der Funktion "getIcons(...)" der Pfad 2-mal hart-codiert statt mit einer Variablen angegeben:<pre>... htmlspecialchars( $wgScriptPath . '/extensions/BibManager/resources/images/[pencil.png|book.png]' );</pre>
) /*$wgDBTableOptions*/;
 
===== BibManager v1.1.0 REL1_23 =====
 
* Fehler bei "Create", "Edit" und "Delete" wegen fehlender Datensatzkennung.
* In der Datei "\extensions\BibManager\includes\BibManagerHooks.php" ist in der Funktion "onBeforePageDisplay(...)" der Pfad zur Erweiterung 3-mal hart-codiert statt mit einer Variablen angegeben: <pre>... htmlspecialchars( $wgScriptPath . '/extensions/BibManager/client/[BibManagerCommon.css|BibManagerEdit.js|BibManagerList.js]' );</pre>
*Für ebenfalls hart-codierte Pfadangaben in der Funktion "getIcons(...)" siehe [[#BibManager 1.23 REL1_26 und 1.23 master]]
 
==== Spezialseiten-Gruppe ====
 
Verfügbarkeit in Abhängigkeit vom Status
* Ohne Anmeldung sollen nur die Verweise zu "Bibliographien anzeigen: Autoren" und "Bibliographien verwalten" sichtbar sein. Bei "Bibliographien verwalten" sind dann die Funktionen "Edit" und "Delete" nicht vorhanden, sondern nur "Export".
* Nach Anmeldung sind auch die Funktionen "Bibliographieeintrag anlegen" und "Bibliographien importieren" verfügbar.
 
Von den zu ändernden Dateien bzw. Verzeichnissen ist nach den Anpassungen jeweils eine Kopie mit dem Suffix "SW" im Dateinamen bzw. Verzeichnisnamen zu speichern, um nach Updates von MediaWiki oder Erweiterungen die Änderungen übernehmen zu können.


Es sollte eine Datei "\i18n\qqq.json" mit folgendem Code erstellt werden:
CREATE INDEX /*i*/bmpc_bibtexCitationIDX ON /*_*/sr_bibmanager_page_citation_rel ( bmpc_bibtexCitation(50) );
<pre>
{
  "@metadata": {
    "authors": []
  },
  "bibmanager": "BibManager",
  "bibmanager-desc": "{{desc}}"
}
</pre>
</pre>


===== BibManager v1.23.0 REL1.26 Datei-Anpassungen =====
===== Anpassung Sprachdateien =====
 
* \i18n\ => \i18nSW\
** de.json
** de-formal.json
** en.json
** qqq.json
* \includes\
** BibManagerHooks.php => BibManagerHooksSW.php
** BibManagerPagerList.php =>BibManagerPagerListSW.php
* \includes\specials\
** SpecialBibManagerDelete.php => SpecialBibManagerDeleteSW.php
** SpecialBibManagerEdit.php => SpecialBibManagerEditSW.php
* \resources\ext.bibManager.css =ext.bibManagerSW.css>


===== BibManager v1.1.0 REL1.23 Datei-Anpassungen =====
Im Verzeichnis "[wikiname]\extensions\BibManager\i18n\" wird in den Sprachdateien Folgendes angepasst:


* BibManager.php => BibManagerSW.php
* doppelte Anführungszeichen in HTML-Tags durch Apostrophs und in Texten durch &amp;quot; bzw. durch „ und “ ersetzen
* <del>BibManager.alias.php => BibManager.aliasSW.php</del>
** Z.16 "heading_create_type"
* \i18n\ => \i18nSW\
** Z.22 "bm_list_welcome"
** de.json
** Z.38 "bm_create_back"
** de-formal.json
** Z.60 "bm_bibtex_string_import_link"
** en.json
** Z.62 "bm_delete_confirm-delete"
** qqq.json
** Z.72 "bm_error_citation_exists"
* \specialpages\ => \specialpagesSW\
** Z.74 "bm_error_delete-fail"
** BibManagerCreate_body.php
** Z.81 "bm_error_error-dataset"
** BibManagerDelete_body.php
** Z.84 "bm_error_not-found"
** BibManagerEdit_body.php
** Z.135 "bm_success_save-complete"
** BibManagerExport_body.php
** Z.136 "bm_success_delete"
** BibManagerImport_body.php
** Z.137 "bm_success_link-to-list"
** BibManagerList_body.php
* im Abschnitt "SpecialPage List" den Text des Array-Elements "bm_list_welcome" für Hinweise zu Neueinträgen, Importen und den Anleitungen ergänzen
** BibManagerListAuthors_body.php


Die Spezialseiten-Gruppe "BibManager" und die darin angezeigten Spezialseiten werden in der Datei "\extensions\BibManager\i18n\[Sprache].json" festgelegt; siehe https://www.mediawiki.org/wiki/Manual:Special_pages#The_localisation_file. Die Einbindung funktioniert mit MW1.23 fehlerhaft: Entweder werden die Seiten nicht angezeigt (Schlüssel mit Großbuchstaben wie bisher) oder werden die Seiten nicht gefunden (Schlüssel insgesamt in Kleinbuchstaben).
====== de.json ======


In den Zeilen 5 und 13 der json-Sprachdateien wäre der Array-Schlüssel von "BibManager" in Kleinbuchstaben zu ändern:
<pre>
<pre>
...
...
  "specialpages-group-bibmanager": "BibManager",
"heading_create_type": "BibManager: Eintrag &quot;$1&quot; anlegen",
...
"bm_list_welcome" => "Willkommen ... $1 und $2. <br />Beim Bearbeiten von Einträgen füge bitte in das Feld &quot;Sortierungsschlüssel&quot; das Wort <b>&quot;bearbeitet&quot;</b>, beim Neuanlegen <b>&quot;neu&quot;</b> ein.<br />Weitere Hilfen: <a href='https://salzwiki.de/index.php/BibManager:Benutzerhandbuch'>Benutzerhandbuch</a>. ",
...
...
  "bibmanager": "BibManager",
"bm_create_back": "<a href='$1' title='Zurück'>&lt;&lt; Zurück zur Auswahl</a>",
...
...
</pre>
</pre>


Die Variable $wgSpecialPageGroups in der Datei "BibManager.php" gilt als "deprecated" seit MW 1.21 (https://gerrit.wikimedia.org/r/#/c/220819/3) und kann auskommentiert werden, wenn im Verzeichnis "\specialpages\" in den jeweiligen Dateien "BibManager..._body.php" am Ende der Klasse folgende Funktion eingefügt wird (https://www.mediawiki.org/wiki/Manual:Special_pages => Special page group):
====== de-formal.json ======
 
<pre>
<pre>
  protected function getGroupName(){
...
    return 'bibmanager';
"bm_list_welcome" => "Willkommen ... $1 und $2. <br />Beim Bearbeiten von Einträgen fügen Sie bitte in das Feld &quot;Sortierungsschlüssel&quot; das Wort <b>&quot;bearbeitet&quot;</b>, beim Neuanlegen <b>&quot;neu&quot;</b> ein.<br />Weitere Hilfen: <a href='https://salzwiki.de/index.php/BibManager:Benutzerhandbuch'>Benutzerhandbuch</a>. ",
  }
...
</pre>
</pre>


'''Systemnachrichten für Gruppe prüfen'''
====== en.json ======
 
Ob die Gruppe "BibManager" in den Systemnachrichten auftaucht, lässt sich durch Aufruf der MediaWiki-Systemnachrichten bei den Spezialseiten überprüfen, indem als Präfixfilter "Specialpages-group" angegeben wird. Dann sollte bei den Ergebnissen der Name "specialpages-group-bibmanager" mit dem Text "BibManager" aufgelistet werden.
 
'''Einschränkungen für Darstellung in der Spezialseiten-Gruppe überprüfen'''
 
Wenn die BibManager-Spezialseiten nicht angezeigt werden, folgendes prüfen:
* In den Dateien "BibManager.php" oder "LocalSettings.php" die Gruppenberechtigung ändern:
** Bibliographien anlegen: $wgGroupPermissions['sysop']['bibmanagercreate'] => $wgGroupPermissions['*']['bibmanagercreate']
** Bibliographien importieren: $wgGroupPermissions['sysop']['bibmanageredit'] => $wgGroupPermissions['*']['bibmanageredit']
* Beim Klassen-Konstruktor "parent::__construct('...', '...')" den 2. Parameter (Kleinbuchstaben) für $restriction weggelassen in folgenden Dateien:
** "\specialpages\BibManagerCreate_body.php" in Zeile 6
** "\specialpages\BibManagerImport_body.php" in Zeile 6
 
==== Fehler korrigieren ====
 
===== Fehler beim Speichern nach Bearbeitung =====
 
Der bearbeitete Datensatz kann nicht gespeichert werden, weil die Prüfung des Bearbeitungsmodus fehlerhaft ist und der Datensatz wie ein Neueintrag auf einen bereits vorhandenen Zitatschlüssel überprüft wird.


In der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerEdit.php" muss in der Funktion "execute(...)" in Zeile 69 "bm_edit_mode" zu "wpbm_edit_mode" geändert werden:
<pre>
<pre>
$editMode = $wgRequest->getBool( 'wpbm_edit_mode' ); #$editMode = $wgRequest->getBool( 'bm_edit_mode' ); für HAWK HHG geändert 2016-02-16
...
"bm_list_welcome" => "Welcome ... $1 and $2 if you would like to add a new entry or import a BibTex-String.<br />Please add in the field &quot;key&quot; of a new reference the word <b>&quot;new&quot;</b>. If you are changing a reference, please add <b>&quot;edited&quot;</b> in the &quot;key&quot; field.<br />More Information: <a href='https://saltwiki.net/index.php/BibManager:User_manual'>User Manual</a>. ",
...
</pre>
</pre>


Anschließend ist eine Kopie der Datei mit dem Suffix "SW" zu speichern.
===== Anpassung "LocalSettings.php" =====
 
===== Fehler bei Löschvorgang =====
 
Der Datensatz kann wegen fehlender Angaben nach der Löschbestätigung nicht gelöscht werden:
* Element "bm_bibtexCitation" existiert nicht im Formular, sondern "wpbm_bibtexCitation"
* Element "bm_delete" existiert nicht im Formular, sondern "wpbm_delete"
* $deleteSubmit ist immer falsch, weil String (Zeichenkette) mit Boolean (Wahrheitswert) verglichen wird
 
In der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerDelete.php" folgende Anpassungen vornehmen:
* Bei Array "$formDescriptor" einen Namen für das Formularfeld "bm_delete" vorgeben
* Bei Array "$formDescriptor" einen Namen für das Formularfeld "bm_bibtexCitation" vorgeben
* In Funktion "formSubmit(...)" bei der Prüfung von "$formdata['bm_delete']" Umwandlung von Boolean in String einfügen


In der Datei "LocalSettings.php" wird Folgendes eingefügt:
<pre>
<pre>
//Z.59ff
## Namensräume
$formDescriptor = array (
...
   'bm_delete' = array (
// für Erweiterung BibManager
    'class' => 'HTMLHiddenField';
define("NS_CITATION", 800);
    'default' => true,
define("NS_CITATION_TALK", 801);
    'name' => 'bm_delete', // für HAWK HHG eingefügt 2016-02-09
$wgExtraNamespaces[NS_CITATION] = 'Cit';
   )
$wgExtraNamespaces[NS_CITATION_TALK] = 'Cit_talk';
   'bm_bibtexCitation' = array (
...
    'class' => 'HTMLHiddenField';
## EXTENSIONS
    'default' => $citation,
...
    'name' => 'bm_bibtexCitation', // für HAWK HHG eingefügt 2016-02-09
require_once('extensions/BibManager/BibManager.php');
   )
require_once('extensions/SaltWiki/SaltWiki.php' );
#nur im Repositorium:
require_once('extensions/SaltWikiUpload/SaltWikiUpload.php' );
...
## Einstellungen
...
## Erweiterung BibManager
# Namensraum berücksichtigen
$wgBibManagerCitationArticleNamespace = NS_CITATION;
# BibManager-Anpassung an die gewünschte Zitierweise
$wgBibManagerCitationFormats = array (
   '-' => '%author%: %title%, %year% %url%, %doi%',
  'article' => '%author% (%year%): %title%. <em>%journal%</em>, <b>%volume%</b> (%number%), %pages%, %url%, %doi%',
  'book' => '%editor% %author% (%year%): <em>%title%, %edition%, %publisher%, %address%, %pages%</em>, %url%., %doi%',
  'booklet' => '%title% %url%, %doi%',
  'conference' => '%author% (%year%): %title%. %booktitle% %url%, %doi%',
  'inbook' => '%author% (%year%): <em>%title%. In: %editor%: %edition%, %publisher%, %address%, %pages%</em> %url%, %doi%',
  'incollection' => '%author% (%year%): %title%. In: %editor%: %booktitle%, <em>%publisher%</em>, %pages%, %url%, %doi%',
  'inproceedings' => '%author% (%year%): %title%. In: %editor%: %booktitle%,<em>%publisher%</em>, %pages%, %url%, %doi%',
  'manual' => '%title% %url%, %doi%',
   'mastersthesis' => '%author% (%year%): %title%, %type%, %school%, %address%, %url%, %doi%, %fulltext%',
   'misc' => '%author% (%year%): %title%, %howpublished%, %pages% %url%, %doi%',
  'phdthesis' => '%author% (%year%): %title%. %type%, %school%, %url%, %doi%',
  'proceedings' => '%editor% (%year%): %title%,<em> %publisher%</em>, %url%, %doi%',
  'techreport' => '%author% (%year%): %title%. %institution% %url%, %doi%',
   'unpublished' => '%author% (%year%): %title%. %note%, %url%, %doi%'
);
);
//Z.89
if ( empty( $formData['bm_delete'] ) || $formData['bm_delete'] !== (string)true ) // für HAWK HHG ergänzt mit (string) 2016-02-09
</pre>
</pre>


===== Falscher Text nach Löschvorgang =====
==== Spezialseiten-Gruppe ====


Nachdem ein Eintrag gelöscht wurde, erscheint "Ihre Daten wurden erfolgreich gespeichert!" (auch schon in MW1.16).
Verfügbarkeit in Abhängigkeit vom Status
* Ohne Anmeldung sollen nur die Verweise zu "Bibliographien anzeigen: Autoren" und "Bibliographien verwalten" sichtbar sein. Bei "Bibliographien verwalten" sind dann die Funktionen "Edit" und "Delete" nicht vorhanden, sondern nur "Export".
* Nach Anmeldung sind auch die Funktionen "Bibliographieeintrag anlegen" und "Bibliographien importieren" verfügbar.


In der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerDelete.php" in der Funktion "formSubmit(...)" wird in Z.94 fälschlicherweise "bm_success_save-complete" verwendet. Da es kein Text-Element "bm_success_delete" gibt, muss es in den Dateien "\i18n\[en|de|de-formal].json" für "en", "de" und "de-formal" in der Zeile nach "bm_success_save-complete" ergänzt werden, damit es in der Datei "BibManagerDelete_body.php" verwendet werden kann.
Siehe [#Spezialseiten_mit_Gruppenberechtigung]


Nach den Anpassungen ist die Delete-Datei als Kopie mit dem Suffix "SW" im Verzeichnis "specials" und das Verzeichnis "i18n" als Kopie "i18nSW" zu speichern.
===== BibManager REL1.31 Datei-Anpassungen =====


<pre>
* \i18n\ => \i18n_SW\
//de.json Z.135f
** de.json
  "bm_success_save-complete": "<div class=\"successbox\"><strong>Deine Daten wurden erfolgreich gespeichert!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
** de-formal.json
  "bm_success_delete": "<div class=\"successbox\"><strong>Die Daten wurden erfolgreich gelöscht!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
** en.json
** qqq.json
* \includes\
** BibManagerPagerHooks.php =>BibManagerPagerHooks_SW.php
** BibManagerPagerList.php =>BibManagerPagerList_SW.php
* \includes\specials\
** SpecialBibManagerDelete.php => SpecialBibManagerDelete_SW.php
** SpecialBibManagerEdit.php => SpecialBibManagerEdit_SW.php
** SpecialBibManagerList.php => SpecialBibManagerList_SW.php


//de-formal.json Z.135f
===== Systemnachrichten für Gruppe prüfen =====
  "bm_success_save-complete": "<div class=\"successbox\"><strong>Ihre Daten wurden erfolgreich gespeichert!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
  "bm_success_delete": "<div class=\"successbox\"><strong>Die Daten wurden erfolgreich gelöscht!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",


//en.json Z.135f
Ob die Gruppe "BibManager" in den Systemnachrichten auftaucht, lässt sich durch Aufruf der MediaWiki-Systemnachrichten, die sich bei den Spezialseiten in der Rubrik "Daten und Werkzeuge" befinden, überprüfen, indem als Präfixfilter "Specialpages-group" angegeben wird. Dann sollte bei den Ergebnissen der Name "specialpages-group-bibmanager" mit dem Text "BibManager" aufgelistet werden.
  "bm_success_save-complete": "<div class=\"successbox\"><strong>Your data was successfully saved!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
  "bm_success_delete": "<div class=\"successbox\"><strong>The data were successfully deleted!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
</pre>


<pre>
==== Fehler korrigieren (Extension-Code) ====
//SpecialBibManagerDelete.php Z.92ff
// für HAWK HHG geändert zu "delete"-Text statt "save-complete" 2016-02-15
if ( $result === true ) {
  $wgOut->addHtml( wfMessage( 'bm_success_delete') ); #wfMsg( 'bm_success_save-complete') für HAWK HHG korrigiert 2016-02-08
  ...
}
</pre>


Außerdem kann in der Datei "SpecialBibManagerDelete.php" wie in Z.94 die Funktion "wfMsg()" ersetzt werden durch "wfMessage()" in den Zeilen 24, 29, 35, 43, 54, 71.
===== Fehlende Icons für "edit" und "delete" =====


===== Fehler im HTML-Code korrigieren =====
In der BibManager-Übersicht ohne JavaScript sind rechts nur Text-Hyperlinks ohne Abstand für "edit" und "delete" anstatt Icons vorhanden; es sind in folgender Datei Anpassungen vorzunehmen:
 
Bei der BibManager-Übesicht wird für jede Tabellenzeile ein <tr> statt eines </tr> erzeugt (auch schon in MW1.16). Im Verzeichnis "BibManager\includes\" in der Datei "bibManagerPagerList.php" in Zeile 133 den fehlenden Schrägstrich einfügen:
<pre>
  $tablerow[] = '</tr>'; // Schrägstrich für schließendes Tag eingefügt 2012-09-17 G. Werner
</pre>
 
===== Fehlende Icons bei Verweisen rechts für "edit" und "delete" =====
 
In der BibManager-Übersicht sind rechts Text-Hyperlinks ohne Abstand für "edit" und "delete" anstatt Icons; es sind in folgenden Dateien Anpassungen vorzunehmen:
* "\extensions\BibManager\includes\BibManagerHooks.php"
* "\extensions\BibManager\includes\BibManagerHooks.php"
* "\extensions\BibManager\resources\ext.bibManager.css"
* "\extensions\BibManager\includes\BibManagerPagerList.php"


Nach den Anpassungen ist jeweils eine Kopie der Datei mit dem Suffix "SW" zu speichern.
Vor den Anpassungen ist die Datei mit dem Suffix "_original" zu speichern und von dieser Datei eine Kopie ohne Suffix für die Anpassungen zu erstellen. Nach den Anpassungen ist eine Kopie der veränderten Datei mit dem Suffix "_SW" zu speichern.


Bei "BibManagerHooks.php" ist in Funktion "onBeforePageDisplay(...)" am Anfang, vor Zeile 29 (Eindbindung der JS-Module), die Einbindung der css-Datei einzufügen:
Bei "BibManagerHooks.php" ist in Funktion "onBeforePageDisplay(...)" am Anfang, vor Zeile 31 (Eindbindung der JS-Module), die Einbindung der css-Datei einzufügen:
<pre>
<pre>
   // für HAWK HHG eingefügt 2016-02-12
   // für HAWK HHG eingefügt 2016-02-12
Zeile 4.665: Zeile 5.122:
</pre>
</pre>


Bei "ext.bibManager.css" in Zeile 96 einen Kommentar einfügen und zwischen "width: 16px;" und "text-indent: 9999px;", Z.99f, eine neue Zeile "height: 15px;" einfügen
===== Fehler im HTML-Code =====
 
Bei der BibManager-Übesicht wird für jede Tabellenzeile am Ende ein <tr> statt eines </tr> erzeugt (auch schon in MW1.16). Im Verzeichnis "BibManager\includes\" in der Datei "bibManagerPagerList.php" in Zeile 140 den fehlenden Schrägstrich einfügen:
<pre>
<pre>
/* für HAWK HHG wg. nicht sichtbarer Icons, die bei BibManager v1 ohne "overflow:hidden" sehr weit rechts waren, geändert 2016-02-15 */
  $tablerow[] = '</tr>'; // Schrägstrich für schließendes Tag eingefügt 2012-09-17 G. Werner
#bm_table a.icon {
  ...
  height: 15 px; /*text-indent: 9999px;*/
  ...
}
</pre>
</pre>


Bei "BibManagerPagerList.php" in Funktion "formatRow(...)" in den Zeilen 104, 108, 117 und 120 die "wfMsg"-Funktionen ersetzen durch "wfMessage"-Funktionen:
===== Fehlende Hooks in Datei "Hooks.php" =====
<pre>
 
if ($wgUser->isAllowed('bibmanageredit')){
Folgende "Hooks" sind weder in der Datei "includes/BibManagerHooks.php" noch in einer anderen Datei vorhanden:
  // für HAWK HHG "wfMsg()" zu "wfMessage()" geändert 2016-02-15
* BibManagerBibTagBeforeTooltip, der in der Datei "BibManagerHooks.php" in der Funktion "getTooltip(...)" in Z.126 aufgerufen wird
  $editLink = Linker::link(
* BibManagerCreateBeforeTypeSelectFormCreate, der in der Datei "SpecialBibManagerCreate.php" in Z.50 aufgerufen wird
    SpecialPage::getTitleFor( 'BibManagerEdit' ),
* BibManagerEditBeforeFormCreate, der in der Datei "SpecialBibManagerEdit.php" in Z.106 aufgerufen wird
    wfMessage( 'bm_list_table_edit' ), /*wfMsg( 'bm_list_table_edit' )*/
* BibManagerGetFieldDefinitions, der in der Datei "BibManagerFieldsList.php" in der Funktion "getFieldDefinitions(..) in Z.158 aufgerufen wird
    array (
* BibManagerGetTypeDefinitions, der in der Datei "BibManagerFieldsList.php" in der Funktion "getTypeDefinitions(..) in Z.237 aufgerufen wird
      'class' => 'icon edit',
* BibManagerValidateCitation, der in der Datei "BibManagerValidator.php" in der Funktion "validateCitation(...) in Z.49 aufgerufen wird
      'title' => wfMessage( 'bm_list_table_edit' ) /*wfMsg( 'bm_list_table_edit' )*/
* BibManagerGetIcons, der in der Datei "BibManagerHooks.php" in der Funktion "getIcons(...)" in Z.167 aufgerufen wird
    ),
* BibManagerFormatEntry, der in der Datei "BibManagerHooks.php" in der Funktion "formatEntry(...)" in Z.350 aufgerufen wird
    $specialPageQuery
* BibManagerPagerBeforeSearch, der in der Datei "BibManagerPagerList.php" in der Funktion "getQueryInfo(...)" in Z.18 aufgerufen wird
  );
 
}
Folgende "Hooks"-Funktionen sind in der Datei "BibManagerHooks.php" vorhanden:
* onLoadExtensionSchemaUpdates(...)
* onBeforePageDisplay(...)
* onParserFirstCallInit(...)
* onBibTag(...)
* getTooltip(...)
* getIcons(...)
* onBiblistTag(...)
* onBibprintTag(...)
* onSkinAfterContent(...)
* formatEntry(...)
* getTableEntry(...)
* getTable(...)


if ($wgUser->isAllowed('bibmanagerdelete')){
Folgende "Hooks"-Funktionen aus der Datei "docs/Hooks.txt" sind nicht in der Datei "BibManagerHooks.php", sondern andernorts vorhanden:
  $deleteLink = Linker::link(
* validateCitation(...) in der Datei "includes/BibManagerValidator.php"
    SpecialPage::getTitleFor( 'BibManagerDelete' ),
* getFieldDefinitions(...) in der Datei "includes/BibManagerFieldsList.php"
    wfMessage( 'bm_list_table_delete' ),
* getTypeDefinitions(...) in der Datei "includes/BibManagerFieldsList.php"
    array (
      ...
    ),
    $specialPageQuery
  );
}
</pre>


Folgende "Hooks"-Funktionen aus der Datei "docs/Hooks.txt" sind in keiner Datei vorhanden:
* [BibTag]BeforeTooltip
* [Create]BeforeTypeSelectFormCreate
* [Edit]BeforeFormCreate
* [Pager]BeforeSearch


===== Fehlendes Icon "Link zum Volltext" bei Detailseite =====
===== Fehlerhafte Hyperlink-Erstellung bei Übersichtsseite =====


Auf der Detailseite eines Bibliographieeintrags wird rechts statt des Icons der Alternativtext "Link zum Volltext" bzw. "Fulltext link" angezeigt; es ist folgende Datei anzupassen:
Im Repositorium beim Willkommenstext oben auf der Seite "Bibliographien verwalten" erscheinen die Verweise "Bibliographieeintrag anlegen" und "Bibliographien importieren" als HTML-Code:
* "\extensions\SaltWiki\SaltWiki.php"
<pre>
<a href="/index.php/Special:BibManagerCreate" title="Special:BibManagerCreate">Bibliographieeintrag anlegen
...
<a href="/index.php/Special:BibManagerImport" title="Special:BibManagerImport">
</pre>


Nach den Anpassungen ist jeweils eine Kopie der Datei mit dem Suffix "_SW" zu speichern.
In der Datei "...\includes\specials\SpecialBibManagerList.php" wird in Z.30 "bm_list_welcome" nicht korrekt verarbeitet. Die Methode "->msg(...)" enthält 2 Parameter:
* den Inhalt zu "bm_list_welcome" aus den Sprachdateien
* die URLs, die die Angaben "$1" und "$2" in der Sprachdatei ersetzen soll


Bei "SaltWiki.php" ist in der Funktion "sw_onBibManagerGetIcons(...)" vor Zeile 160 ein Kommentar einzufügen und in Zeile 161 der Pfad von "client" zu "resources" anzupassen:
Die Methode "->escaped()" am Ende der Zeile muss geändert werden zu "->plain()"; auch "->text()" wäre möglich:
<pre>
<pre>
function sw_onBibManagerGetIcons ( $entry, &$icons) {
// for HAWK HHG changed 2018-12-07
...
$wgOut->addHTML( $this->msg( 'bm_list_welcome', $createLink, $importLink )->plain() ); //->escaped()
// für HAWK HHG und MW1.23LTS Pfad von "client" zu "resources" angepasst 2016-06-14
$icons['fulltext'] = array (
  'src' = $wgScriptPath . '/extensions/BibManager/resources/images/' . $icon,
  ...
);
...
}
</pre>
</pre>


===== In BibManager v1.1.0 Fehler bei SpecialPageAliases =====
Anschließend ist eine Kopie der Datei mit dem Suffix "_SW" zu speichern.


In der Datei "BibManager.alias.php" müssen die Array-Schlüssel von $specialPageAliases wie z. B. 'BibManagerCreate' für die jeweilige Sprache in Kleinbuchstaben angegeben werden, damit die BibManager-Seiten bei den Spezialseiten aufgelistet werden, allerdings werden die Seiten dann nicht mehr gefunden, wenn man auf die Verweise klickt.
===== Fehlerhafte Hyperlink-Erstellung bei neuem Eintrag und Eintragsbearbeitung =====


Einzige Lösung scheint zu sein, in der Datei "BibManager.php" die Zeile 66 auszukommentieren:
Nach Betätigung der Schaltfläche "Speichern" erscheint der Verweis "Zurück zur Übersicht" als HTML-Code:
<pre>
<pre>
#$wgExtensionMessagesFiles['BibManagerAlias'] = $dir . 'BibManager.alias.php'; // Fehlfunktion in MW 1.23
<a href="/salzwiki/index.php/Spezial:Bibliographieeintr%C3%A4ge_verwalten">Zurück zur Übersicht</a>
</pre>
</pre>


===== In BibManager v1.1.0 fehlerhafte Funktionen auskommentieren bzw. ändern =====
Der Fehler bei einem Neueintrag ist derselbe wie bei der Bearbeitung eines Eintrags, weil beim Speichern eines Neueintrags die Datei für Bearbeitungen "specialpages\BibManagerEdit.php" verwendet wird durch "Redirect" in Z.90ff.


BibManager v1.1.0 (REL1.23) verwendet in mehreren Dateien die Funktion "wfLoadExtensionMessages()", die seit MW 1.21 nicht mehr existiert, so dass die Zeile in folgenden Dateien auskommentiert werden muss:
Demnach wird in der Datei "SpecialBibManagerEdit.php" in Z.144 "bm_success_link-to-list" nicht korrekt verarbeitet. Die Methode "->msg(...)" enthält 2 Parameter:
*"\specialpages\BibManagerCreate_body.php" in Zeile 7
* den Inhalt zu "bm_success_link-to-list" aus den Sprachdateien
*"\specialpages\BibManagerEdit_body.php" in Zeile 7
* die URL, die die Angabe "$1" in der Sprachdatei ersetzen soll
*"\specialpages\BibManagerDelete_body.php" in Zeile 7
*"\specialpages\BibManagerList_body.php" in Zeile 7
*"\specialpages\BibManagerListAuthors_body.php" in Zeile 7


BibManager v1.1.0 (REL1.23) verwendet in der Datei "\specialpages\BibManagerList_body.php" in den Zeilen 25 und 29 die Methode "SpecialPageFactory::getPage('...')->getDescription()", die einen Fehler "Call to a member function getDescription() on null" verursacht, weil "getPage('...') als Ergebnis NULL hat und "getDescription()" nicht darauf angewendet werden kann. Ursache ist der Name bei "getPage('...')", der mit dem Alias ersetzt werden muss. Der Alias der Sprachvarianten befindet sich in der Datei "\BibManager\BibManager.alias.php". Um den Alias für "getPage('...')" zu erhalten, wird die Methode "SpecialPageFactory::getLocalNameFor('...')" benötigt:
Die Methode "->escaped()" am Ende der Zeile muss geändert werden zu "->plain()"; auch "->text()" wäre möglich:
<pre>
<pre>
// $linkDescription eingefügt und $createLink angepasst 2015-12-01 G. Werner für HAWK HHG
// for HAWK HHG changed 2018-11-12
$linkDescription = array();
#$this->getOutput()->addHTML( $this->msg( 'bm_success_link-to-list', SpecialPage::getTitleFor( 'BibManagerList' )->getLocalURL() )->escaped() );
if(SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerCreate'))===NULL){
$this->getOutput()->addHTML( $this->msg( 'bm_success_link-to-list', SpecialPage::getTitleFor( 'BibManagerList' )->getLocalURL() )->plain() );
  $linkDescription['Create'] = NULL;
</pre>
}
 
else{
Anschließend ist eine Kopie der Datei mit dem Suffix "_SW" zu speichern.
  $linkDescription['Create'] = SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerCreate'))->getDescription();
 
}
===== Fehler beim Speichern nach Bearbeitung =====
if(SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerImport'))===NULL){
 
  $linkDescription['Import'] = NULL;
Der bearbeitete Datensatz kann nicht gespeichert werden, weil die Prüfung des Bearbeitungsmodus' fehlerhaft ist und der Datensatz wie ein Neueintrag auf einen bereits vorhandenen Zitatschlüssel überprüft wird.
}
 
else{
Ursache ist, dass im Formular zur Bearbeitung eines Eintrags das entsprechende Element den Attributnamen "wpbm_edit_mode" statt "bm_edit_mode" aufweist.
  $linkDescription['Import'] = SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerImport'))->getDescription();
 
}
Deshalb wird in der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerEdit.php" wie für MW1.23 in Z.69 "bm_edit_mode" zu "wpbm_edit_mode" geändert:
$createLink = Linker::link(
<pre>
  SpecialPage::getTitleFor('BibManagerCreate'),
$editMode = $wgRequest->getBool( 'wpbm_edit_mode' ); #$editMode = $wgRequest->getBool( 'bm_edit_mode' ); für HAWK HHG geändert 2016-02-16
  /*SpecialPageFactory::getPage('BibManagerCreate')->getDescription()*/
  $linkDescription['Create']
);
$importLink = Linker::link(
  SpecialPage::getTitleFor('BibManagerImport'),
  /*SpecialPageFactory::getPage('BibManagerImport')->getDescription()*/
  $linkDescription['BibManagerImport']
);
</pre>
</pre>


===== In BibManager v1.1.0 Fehler bei neuem Eintrag und Eintragsbearbeitung =====
Vor den Änderungen wird die Datei "BibManagerEdit.php" in "BibManagerEdit_original.php" umbenannt und von dieser Datei eine Kopie namens "BibManagerEdit.php" für die Änderungen erstellt. Nach den Änderungen ist eine Kopie der veränderten Datei mit dem Suffix "_SW" zu speichern.
 
Das Formular enthält für den Zitatschlüssel ein weiteres Element mit dem Präfix "wpbm_..." statt "bm_..." im Attributnamen: "wpbm_bibtexCitation".


Der Fehler bei einem Neueintrag in BibManager v1.1.0 REL1.23 2015-06-16 resultiert aus der Weiterleitung zur Datei für Bearbeitungen "specialpages\BibManagerEdit_body.php".
In der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerEdit.php" wird in der Funktion "execute(...)" in den Zeilen 61ff und 79ff mit $formDescriptor die Bezeichnung "bibtexCitation" und "edit_mode" ohne "wp" am Anfang festgelegt, aber bei der Formularerzeugung mit "wp" versehen. Es erfolgt jedoch keine Änderung, weil es sonst beim Versuch einen neuen Eintrag mit bereits vorhandener Kennung zu speichern folgende Fehler gibt:
* die neue Kennung im Formularfeld "mb_bibtexCitation" lässt sich nicht bearbeiten
* mit "Speichern" wird der bereits vorhandene Eintrag überschrieben


In der Datei "specialpages\BibManagerCreate_body.php" kann in der Funktion "execute()" das Array "$formDescriptor" zwischen "id" und "options" um die Angabe eines Namens ergänzt werden, damit das Formularfeld "bm_select_type" nicht "wpbm_select_type" heißt:
Diese Fehler wurden durch folgende Änderungen in der Datei "SpecialBibManagerEdit.php" in den Zeilen 61ff und 79ff jeweils bei $formDescriptor mit der Ergänzung des Attribut-Schlüssels "name" hervorgerufen:
<pre>
<pre>
//Z.26ff
$formDescriptor['bm_bibtexCitation'] = array(
$formDescriptor = array (
   'class' => 'HTMLTextField',
   'bm_select_type' => array (
  'label-message' => 'bm_citation',
    'class' => 'HTMLSelectField',
  'name' => 'bm_bibtexCitation', // to prevent "wpbm_bibtexCitation", G. Werner for HAWK HHG, 2018-11-13
    ...
  'section' => 'citation',
    'id' => '',
  'required' => true,
    'name' => 'bm_select_type',
  'validation-callback' => 'BibManagerValidator::validateCitation'
    'options' => ...
);
  )
...
)
$formDescriptor['bm_edit_mode'] = array(
  'class' => 'HTMLHiddenField',
  'name' => 'bm_edit_mode', // to prevent "wpbm_edit_mode", G. Werner for HAWK HHG, 2018-11-13
  'default' => 1
);
</pre>
</pre>


==== BibManager-Berechtigungen ====
===== Falscher Info-Text nach Löschvorgang =====
 
Nachdem ein Eintrag gelöscht wurde, erscheint "Ihre Daten wurden erfolgreich gespeichert!" (auch schon in MW1.16).
 
In der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerDelete.php" in der Funktion "formSubmit(...)" wird in Z.94 fälschlicherweise "bm_success_save-complete" verwendet. Da es kein Text-Element "bm_success_delete" gibt, muss es in den Dateien "\i18n\[en|de|de-formal].json" für "en", "de" und "de-formal" in der Zeile nach "bm_success_save-complete" ergänzt werden, damit es in der Datei "BibManagerDelete.php" verwendet werden kann.


'''Rechte-Vergabe für BibManager'''
Nach den Anpassungen ist die Delete-Datei als Kopie mit dem Suffix "_SW" im Verzeichnis "specials/" und das Verzeichnis "i18n/" als Kopie "i18n_SW/" zu speichern.


In der Datei "LocalSettings.php" werden zwischen "include_once(...)" und dem Array für die Zitierweise folgende Berechtigungen definiert, wobei im deutschen Salzwiki "Redakteur" statt "Editor" anzugeben ist:
<pre>
//qqq.json Z.133f
  "bm_success_save-complete": "A success message",
  "bm_success_delete": "A success message",


## Berechtigungen eingefügt 2012-05-11
//de.json Z.135f
$wgGroupPermissions['*']['bibmanagercreate'] = false;
  "bm_success_save-complete": "<div class=\"successbox\"><strong>Deine Daten wurden erfolgreich gespeichert!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
$wgGroupPermissions['*']['bibmanageredit'] = false;
  "bm_success_delete": "<div class=\"successbox\"><strong>Die Daten wurden erfolgreich gelöscht!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
$wgGroupPermissions['*']['bibmanagerdelete'] = false;
$wgGroupPermissions['autor']['bibmanagercreate'] = true;
$wgGroupPermissions['autor']['bibmanageredit'] = true;
#$wgGroupPermissions['autor']['bibmanagerdelete'] = false;
$wgGroupPermissions['Redakteur|Editor']['bibmanagercreate'] = true;
$wgGroupPermissions['Redakteur|Editor']['bibmanageredit'] = true;
$wgGroupPermissions['Redakteur|Editor']['bibmanagerdelete'] = true;
$wgGroupPermissions['sysop']['bibmanagercreate'] = true;
$wgGroupPermissions['sysop']['bibmanageredit'] = true;
$wgGroupPermissions['sysop']['bibmanagerdelete'] = true;


'''Entfernen der Löschen- und Editier-Buttons ohne Rechte-Vergabe'''
//de-formal.json Z.135f
  "bm_success_save-complete": "<div class=\"successbox\"><strong>Ihre Daten wurden erfolgreich gespeichert!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
  "bm_success_delete": "<div class=\"successbox\"><strong>Die Daten wurden erfolgreich gelöscht!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",


Das Entfernen der Schaltflächen funktionierte bis April 2012 auf nachfolgend beschriebene Weise, solange es noch kein Rechte-Management für den BibManager gab.
//en.json Z.135f
  "bm_success_save-complete": "<div class=\"successbox\"><strong>Your data was saved.</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
  "bm_success_delete": "<div class=\"successbox\"><strong>The data were deleted.</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
</pre>


In der Datei BibManager/includes/BibManagerPagerList.php werden in den Zeilen 57ff dazu die Variablen "$editLink" und "$deleteLink" entfernt.
SpecialBibManagerDelete.php Z.92ff:
<pre>
// for HAWK HHG changed to replace "save-complete" with "delete"-Text 2016-02-15
// and to replace "->escaped()" with "->plain()" 2018-11-12
if ( $result === true ) {
  $wgOut->addHtml( $this->msg( 'bm_success_delete')->plain() ); /*$this->msg( 'bm_success_save-complete')->escaped() );*/
  ...
}
</pre>


Mit ein wenig PHP-Kenntnissen kann man auch die Anzeige des Links schaltbar machen:
===== Fehlerhafte Hyperlink-Erstellung nach Löschvorgang =====


  $tablerow = array ( );
Wie in der Datei "SpecialBibManagerEdit.php" in Z.144 wird auch in der Datei "SpecialBibManagerDelete.php" in Z.98ff das Element "bm_success_link-to-list" nicht korrekt verarbeitet. Die Methode "->msg(...)" enthält 2 Parameter:
  $tablerow[] = '<tr>';
* den Inhalt zu "bm_success_link-to-list" aus den Sprachdateien
  $tablerow[] = '  <td style="vertical-align:top;">' . $citationLink . '</td>';
* die URL, die die Angabe "$1" in der Sprachdatei ersetzen soll
  $tablerow[] = '  <td>' . $format . '</td>';
  #$tablerow[] = '  <td style="text-align:center;">' . $editLink . $deleteLink . '</td>';
  if($_REQUEST['showDelete'] == 1){$tablerow[] = '  <td style="text-align:center;">' . $editLink . $deleteLink . '</td>';}
  else{$tablerow[] = '  <td style="text-align:center;">' . $editLink . '</td>';}
  $tablerow[] = '  <td style="text-align:center;">' . $exportLink . '</td>';
  $tablerow[] = '<tr>';


So würde der Link nur angezeigt werden, wenn in der Url "&showDelete=1" vorkommt.
Die Methode "->escaped()" am Ende der Zeile muss geändert werden zu "->plain()"; auch "->text()" wäre möglich:
<pre>
if ( $result ==== true ) {
$wgOut->addHtml( $this->msg( 'bm_success_save-complete' )->plain()); /*$wgOut->addHtml( $this->msg( 'bm_success_save-complete' )->escaped() );*/
$wgOut->addHtml(
  $this->msg(
  'bm_success_link-to-list',
  SpecialPage::getTitleFor( 'BibManagerList' )->getLocalURL()
  )->plain() /* )->escaped() */
);
}
</pre>


Wenn die Löschen-Funktion vollständig deaktiviert und nicht nur den Link versteckt werden soll, müssen in der Datei BibManager/BibManager.php folgende Zeilen auskommentiert werden:
===== Fehler beim Löschen =====


  $wgAutoloadClasses['BibManagerDelete'] = $dir . 'specialpages/BibManagerDelete_body.php';
Nach der Bestätigung zum Löschen erscheint die Fehlermeldung:
  $wgSpecialPages['BibManagerDelete'] = 'BibManagerDelete';
<pre>
Der Datensatz "" wurde nicht gefunden!
</pre>


==== Anleitung anpassen und installieren ====
Im Zwischenschritt "Sind Sie sicher ..." sind im Löschformular zwei versteckte Formularfelder enthalten:
* id="mw-input-wpbm-delete" und name="wpbm_delete"
* id="mw-input-wpbm_bibtexCitation" und name="wpbm_bibtexCitation" mit der Datensatz-Kennung


Die von halloWelt! gelieferte Datei "manual.xml" enthält alle 4 Anleitungen: Benutzerhandbuch, User manual, Administrationshandbuch und Admin manual, die jeweils durch die <page>-Elemente gegliedert sind.
In der Datei "SpecialBibManagerDelete.php" wird in Z.59ff mit $formDescriptor die Bezeichnung ohne "wp" am Anfang festgelegt, aber bei der Formularerzeugung mit "wp" versehen. Somit weicht die Bezeichnung für das bestätigte Löschen von der Bezeichnung von der Zwischenseite ab. Denn in der BibManager-Übersicht wird für die Löschzwischenseite der Parameter "bm_bibtexCitation" mit der Datensatz-Kennung übermittelt.


* Für das SalzWiki ist nur der <page>-Bereich "BibManager:Benutzerhandbuch" für den Import relevant, so dass eine Kopie der Datei unter "bibmanager_manual_user_de.xml" gespeichert wird und in dieser Datei die 3 anderen <page>-Bereiche entfernt werden.
Außerdem muss der Wahrheits-Wert aus dem Formular für "bm_delete" in Z.88 als String verglichen werden.
* Für das SaltWiki und das Repositorium ist jeweils nur der <page>-Bereich "BibManager:User manual" für den Import relevant, so dass eine Kopie der Datei unter "bibmanager_manual_user_en.xml" gespeichert wird und in dieser Datei die 3 anderen <page>-Bereiche entfernt werden.
* Der Bilder-Import für das Handbuch findet nur im Repositorium statt.


==== Anleitung anpassen ====
Deshalb wird in der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerDelete.php" in der Funktion "execute(...)" in den Zeilen 60ff und 64ff jeweils $formDescriptor mit dem Attribut-Schlüssel "name" ergänzt sowie in der Funktion "formSubmit(...)" in Z.88 der String-Vergleich angepasst:
Im <title>-Element nach <page> ist jeweils "HalloWelt:" vor "BibManager:..." zu entfernen:
<pre>
<pre>
<page>
$formDescriptor = array(
  <title>HalloWelt:BibManager:...</title>
  'bm_delete' => array(
</pre>
  'class' => 'HTMLHiddenField',
Ebenso ist der Teil "Project:" vor "BibManager:..." in den Admin-Anleitungen am Ende des <text>-Elementes zu entfernen:
  'default' => true,
<pre>
  'name' => 'bm_delete', // to prevent "wpbm_delete", G. Werner for HAWK HHG, 2016-02-09
   [[Project:BibManager:...]]
),
   [[Project:BibManager:...]]</text>
'bm_bibtexCitation' = array(
   </revision>
   'class' => 'HTMLHiddenField',
</page>
   'default' => $citation,
</pre>
   'name' => 'bm_bibtexCitation', // to prevent "wpbm_bibtexCitation", G. Werner for HAWK HHG, 2016-02-09
 
)
==== Anleitung im Wiki installieren ====
);
 
...
* Die angepasste xml-Datei über "Spezialseiten->Import" ins Wiki laden.
if ( empty( $formData['bm_delete']) || $formData['bm_delete'] !== (string)true ) // for HAWK HHG completed with "(string)" 2016-12-09
* Anschließend sind die Bilder für das [[Project:BibManager:...]] im Repositorium mittels DOS-Konsole und PHP hochzuladen, um sie ins Wiki zu bringen:
...
<pre>
D:\
xampp\php\php.exe xampp\htdocs\saltwiki\maintenance\importImages.php xampp\htdocs\saltwiki\images_en
</pre>
</pre>


=== CategoryTree (fehlerhaft, JS) ===
===== Ehemals Fehler bei SpecialPageAliases =====


Die Erweiterung dient zur Darstellung der Kategorienbäume, damit schnell den Artikeln und Dokumenten die richtigen Kategorien zugewiesen werden können.
Bei BibManager v1.1.0 mussten in der Datei "BibManager.alias.php" die Array-Schlüssel von $specialPageAliases wie z. B. 'BibManagerCreate' für die jeweilige Sprache in Kleinbuchstaben angegeben werden, damit die BibManager-Seiten bei den Spezialseiten aufgelistet werden, allerdings werden die Seiten dann nicht mehr gefunden, wenn man auf die Verweise klickt.


Angeblich ist in den Versionen REL1.27, REL1.29 und REL1.30 die Aktivierung von JavaScript (JS) im Browser erforderlich, allerdings wird beispielsweise für "Salz" ein Kategorienbaum, bei dem ohne JS die 3-eckigen Grafiken zum Aufklappen/Zuklappen fehlen, angezeigt.
Einzige Lösung scheint zu sein, in der Datei "BibManager.php" die Zeile 66 auszukommentieren:
 
==== Fehler ====
 
===== Erweiterung einbinden =====
 
Die Erweiterung in der Version REL1.27 für MW1.27 ist fehlerhaft bei Verwendung von "wfLoadExtension(...)" statt "include_once(...)":
* Datei "composer.json" fehlt
* Datei "extension.json" fehlt
 
===== Verschachtelung mit JavaScript =====
 
Bei den Versionen REL1.27, REL1.29 und REL1.30 erscheint im Kategorienbaum nach Klick auf ein Dreieck zum Aufklappen ein Fehlerhinweis: "Beim Laden der Daten ist ein Problem aufgetreten. Bitte warten Sie einen Moment und versuchen Sie es dann erneut.".
 
Von den Lösungen bei https://www.mediawiki.org/wiki/CategoryTree#Troubleshooting wirkt keine, auch nicht diese:
<pre>
<pre>
$wgCategoryTreeDefaultOptions['namespaces'] = array(0, NS_CATEGORY, NS_FILE);
#$wgExtensionMessagesFiles['BibManagerAlias'] = $dir . 'BibManager.alias.php'; // Fehlfunktion in MW 1.23
</pre>
</pre>


==== Installationshinweise ====
===== Ehemals fehlerhafte Funktionen =====


Eingesetzt wird REL1.27.
BibManager v1.1.0 (REL1.23) verwendet in mehreren Dateien die Funktion "wfLoadExtensionMessages()", die seit MW 1.21 nicht mehr existiert, so dass die Zeile in folgenden Dateien auskommentiert werden muss:
*"\specialpages\BibManagerCreate_body.php" in Zeile 7
*"\specialpages\BibManagerEdit_body.php" in Zeile 7
*"\specialpages\BibManagerDelete_body.php" in Zeile 7
*"\specialpages\BibManagerList_body.php" in Zeile 7
*"\specialpages\BibManagerListAuthors_body.php" in Zeile 7


* Erweiterung unter https://www.mediawiki.org/wiki/Extension:CategoryTree herunterladen und in das Verzeichnis "extensions\CategoryTree" entpacken
BibManager v1.1.0 (REL1.23) verwendet in der Datei "\specialpages\BibManagerList_body.php" in den Zeilen 25 und 29 die Methode "SpecialPageFactory::getPage('...')->getDescription()", die einen Fehler "Call to a member function getDescription() on null" verursacht, weil "getPage('...') als Ergebnis NULL hat und "getDescription()" nicht darauf angewendet werden kann. Ursache ist der Name bei "getPage('...')", der mit dem Alias ersetzt werden muss. Der Alias der Sprachvarianten befindet sich in der Datei "\BibManager\BibManager.alias.php". Um den Alias für "getPage('...')" zu erhalten, wird die Methode "SpecialPageFactory::getLocalNameFor('...')" benötigt:
* In der Datei "LocalSettings.php" einfügen:
<pre>
<pre>
$wgUseAjax = true; ##muss von false auf true geändert werden, falls noch nicht geschehen
// $linkDescription eingefügt und $createLink angepasst 2015-12-01 G. Werner für HAWK HHG
#wfLoadExtension('CategoryTree'); // extension.json-Datei fehlt bei REL1.27
$linkDescription = array();
include_once('extensions/CategoryTree/CategoryTree.php');
if(SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerCreate'))===NULL){
  $linkDescription['Create'] = NULL;
}
else{
  $linkDescription['Create'] = SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerCreate'))->getDescription();
}
if(SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerImport'))===NULL){
  $linkDescription['Import'] = NULL;
}
else{
  $linkDescription['Import'] = SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerImport'))->getDescription();
}
$createLink = Linker::link(
  SpecialPage::getTitleFor('BibManagerCreate'),
  /*SpecialPageFactory::getPage('BibManagerCreate')->getDescription()*/
  $linkDescription['Create']
);
$importLink = Linker::link(
  SpecialPage::getTitleFor('BibManagerImport'),
  /*SpecialPageFactory::getPage('BibManagerImport')->getDescription()*/
  $linkDescription['BibManagerImport']
);
</pre>
</pre>


=== CharacterEscapes ===
==== BibManager-Berechtigungen ====


"CharacterEscapes" wird nicht mehr installiert, denn die Erweiterung ist nur als Beta-Version 0.9.1 von 2007-10-02 erhältlich (Stand 2018-10-12) und seit MW 1.12 verzichtbar, siehe auch
'''Rechte-Vergabe für BibManager'''
* https://www.mediawiki.org/wiki/Extension:Character_Escapes
* https://www.mediawiki.org/wiki/Extension:ControlStructureFunctions


Die Erweiterung wurde zusammen mit den Erweiterungen "ControlStructureFunctions" und "LOParserFunctions" für die Hilfeseiten bei den alten Wiki-Versionen verwendet. Sie benötigt die Erweiterungen "ControlStructureFunctions" und "Variables"; letztere wird nicht bei Wikis der Wikimedia Foundation aktiviert.
In der Datei "LocalSettings.php" werden zwischen "include_once(...)" und dem Array für die Zitierweise folgende Berechtigungen definiert, wobei im deutschen Salzwiki "Redakteur" statt "Editor" anzugeben ist:


=== CharInsert ===
## Berechtigungen eingefügt 2012-05-11
$wgGroupPermissions['*']['bibmanagercreate'] = false;
$wgGroupPermissions['*']['bibmanageredit'] = false;
$wgGroupPermissions['*']['bibmanagerdelete'] = false;
$wgGroupPermissions['autor']['bibmanagercreate'] = true;
$wgGroupPermissions['autor']['bibmanageredit'] = true;
#$wgGroupPermissions['autor']['bibmanagerdelete'] = false;
$wgGroupPermissions['Redakteur|Editor']['bibmanagercreate'] = true;
$wgGroupPermissions['Redakteur|Editor']['bibmanageredit'] = true;
$wgGroupPermissions['Redakteur|Editor']['bibmanagerdelete'] = true;
$wgGroupPermissions['sysop']['bibmanagercreate'] = true;
$wgGroupPermissions['sysop']['bibmanageredit'] = true;
$wgGroupPermissions['sysop']['bibmanagerdelete'] = true;


Diese Extension dient dazu Editierhilfen zum Einfügen von Spezialzeichen und Formatierungshilfen zur Verfügung zu stellen.Diese Hilfe wird im Bearbeitungsmodus und beim UpLoad-Formular zur Verfügung gestellt. Diese Erweiterung wurde Testweise installiert und dann wieder deaktiviert.
'''Entfernen der Löschen- und Editier-Buttons ohne Rechte-Vergabe'''
 
Das Entfernen der Schaltflächen funktionierte bis April 2012 auf nachfolgend beschriebene Weise, solange es noch kein Rechte-Management für den BibManager gab.
 
In der Datei BibManager/includes/BibManagerPagerList.php werden in den Zeilen 57ff dazu die Variablen "$editLink" und "$deleteLink" entfernt.


Die Extension wird bei http://www.mediawiki.org/wiki/Extension:CharInsert heruntergeladen und in ...Extensions/CharInsert extrahiert.
Mit ein wenig PHP-Kenntnissen kann man auch die Anzeige des Links schaltbar machen:


In die localsettings ist einzufügen:  
  $tablerow = array ( );
  $tablerow[] = '<tr>';
  $tablerow[] = '  <td style="vertical-align:top;">' . $citationLink . '</td>';
  $tablerow[] = '  <td>' . $format . '</td>';
  #$tablerow[] = '  <td style="text-align:center;">' . $editLink . $deleteLink . '</td>';
  if($_REQUEST['showDelete'] == 1){$tablerow[] = '  <td style="text-align:center;">' . $editLink . $deleteLink . '</td>';}
  else{$tablerow[] = '  <td style="text-align:center;">' . $editLink . '</td>';}
  $tablerow[] = '  <td style="text-align:center;">' . $exportLink . '</td>';
  $tablerow[] = '<tr>';


require_once("$IP/extensions/CharInsert/CharInsert.php");
So würde der Link nur angezeigt werden, wenn in der Url "&showDelete=1" vorkommt.


In Mediawiki:Edittools werden die entsprechenden Zeichen bzw. Hilfen mit
Wenn die Löschen-Funktion vollständig deaktiviert und nicht nur den Link versteckt werden soll, müssen in der Datei BibManager/BibManager.php folgende Zeilen auskommentiert werden:
<pre><charinsert> .. </charinsert> </pre>


eingefügt.
  $wgAutoloadClasses['BibManagerDelete'] = $dir . 'specialpages/BibManagerDelete_body.php';
  $wgSpecialPages['BibManagerDelete'] = 'BibManagerDelete';


=== Cite  ===
==== Anleitung anpassen und installieren ====


Die Erweiterung "Cite" dient zum Erstellen von Fußnoten in Wiki-Artikeln.
Die von halloWelt! gelieferte Datei "manual.xml" enthält alle 4 Anleitungen: Benutzerhandbuch, User manual, Administrationshandbuch und Admin manual, die jeweils durch die <page>-Elemente gegliedert sind.


* Erweiterung unter http://www.mediawiki.org/wiki/Cite herunterladen.
* Für das SalzWiki ist nur der <page>-Bereich "BibManager:Benutzerhandbuch" für den Import relevant, so dass eine Kopie der Datei unter "bibmanager_manual_user_de.xml" gespeichert wird und in dieser Datei die 3 anderen <page>-Bereiche entfernt werden.
* Extrahieren der Dateien nach "\[wikiname]\extensions\Cite\"  
* Für das SaltWiki und das Repositorium ist jeweils nur der <page>-Bereich "BibManager:User manual" für den Import relevant, so dass eine Kopie der Datei unter "bibmanager_manual_user_en.xml" gespeichert wird und in dieser Datei die 3 anderen <page>-Bereiche entfernt werden.
* Erweiterung in der Datei "LocalSettings.php" einfügen
* Der Bilder-Import für das Handbuch findet nur im Repositorium statt.


==== Anleitung anpassen ====
Im <title>-Element nach <page> ist jeweils "HalloWelt:" vor "BibManager:..." zu entfernen:
<pre>
<page>
<title>HalloWelt:BibManager:...</title>
</pre>
Ebenso ist der Teil "Project:" vor "BibManager:..." in den Admin-Anleitungen am Ende des <text>-Elementes zu entfernen:
<pre>
<pre>
require_once("$IP/extensions/Cite/Cite.php");
  [[Project:BibManager:...]]
  [[Project:BibManager:...]]</text>
  </revision>
</page>
</pre>
</pre>


Siehe näheres zum Einfügen von Fußnoten unter http://193.175.110.91/salzwiki/index.php/Autor#Fu.C3.9Fnoten.
==== Anleitung im Wiki installieren ====


=== CiteThisPage ===
* Die angepasste xml-Datei über "Spezialseiten->Import" ins Wiki laden.
* Anschließend sind die Bilder für das [[Project:BibManager:...]] im Repositorium mittels DOS-Konsole und PHP hochzuladen, um sie ins Wiki zu bringen:
<pre>
D:\
xampp\php\php.exe xampp\htdocs\saltwiki\maintenance\importImages.php xampp\htdocs\saltwiki\images_en
</pre>


Die Erweiterung "CiteThisPage" dient zum Erstellen von Zitierhilfen für Wiki-Artikel. Sie ist erst ab MW Version 1.24 einsetzbar.
=== BibManagerAdditionalPublications (Extension-Code) ===


* Erweiterung unter https://www.mediawiki.org/wiki/Extension:CiteThisPage?uselang=de herunterladen.
Diese Erweiterung ergänzt die Erweiterung "BibManager" für Volltexte und DOIs bei den BibTex-Attributen.
* Extrahieren der Dateien nach "\[wikiname]\extensions\CiteThisPage\"  
* Erweiterung in der Datei "LocalSettings.php" einfügen


<pre>
"BibManagerAdditionalPublications" basiert auf der Erweiterung "SaltWiki" für MW1.16 und wurde für die Verwendung mit MW1.31 vom Hornemann Institut angepasst:
require_once("$IP/extensions/CiteThisPage/CiteThisPage.php");
* Dateistruktur
</pre>
* Dateibezeichnungen
* Definitionen
* php-Code


=== ConfirmEdit ===
==== Dateistruktur ====


Registrierte Nutzer/innen dürfen auf die Diskussionseiten schreiben. Damit dies etwas sicherer vonstatten geht, wird mit ConfirmEdit das Captcha "QuestyCaptcha" eingeführt ('''bisher nur bei Salzwiki und Saltwiki, nicht bei Repositorium''').
Im Verzeichnis der Erweiterung "BibManagerAdditionalPublications\" befinden sich für MW1.31 folgende Dateien und Unterverzeichnisse:


*Dateien unter http://www.mediawiki.org/wiki/Confirmedit herunterladen und unter "extensions\ConfirmEdit\" speichern.
* BibManagerAdditionalPublications.php: neu, abgeleitet von der Datei "BibManager.php" der gleichnamigen Erweiterung
*In der Datei "LocalSettings.php" einfügen:
* BibManagerAdditionalPublicationsHooks.php: neu als Klasse mit den Funktionen aus der Datei SaltWiki.php
<pre>
* extension.json: neu, abgeleitet von der gleichnamigen Datei aus der Erweiterung "BibManager" und von den Angaben in der Datei "SaltWiki.php"
## MW 1.31
* i18n\: neu, Verzeichnis mit einzelnen json-Sprachdateien, abgeleitet aus den jeweiligen Sprachen-Blöcken der Datei "SaltWiki.i18n.php"
wfLoadExtensions(['ConfirmEdit', 'ConfirmEdit/QuestyCaptcha']);
** de.json
** de-formal.json
** en.json
** qqq.json
* patch-bibmanager_additionalpublications.sql: umbenannt von "patch-bibmanager.sql" in der Erweiterung "SaltWiki"
* resources\: neu, nach Vorbild der Erweiterung "BibManager"
** images\: neu für Icons, nach Vorbild der Erweiterung "BibManager"
*** link.png [Kopie aus Erweiterung "BibManager"]
*** link_error.png [Kopie aus Erweiterung "BibManager"]


## MW 1.23
In der Erweiterung "SaltWiki" für MW1.16 gab es folgende Dateien:
#require_once( "$IP/extensions/ConfirmEdit/ConfirmEdit.php" );
* SaltWiki.php
...
* SaltWiki.i18n.php
## Erweiterung ConfirmEdit mit Captcha
* patch-bibmanager.sql
#$wgCaptchaClass = 'QuestyCaptcha'; // für MW 1.23 und 1.16
</pre>


=== ContactPage - Kontaktseite (Wiki-Code de-formal) ===
==== Installationshinweis ====


ACHTUNG: Nach jedem MediaWiki-Update muss überprüft werden, ob die vorgenommenen Änderungen in den jeweiligen Dateien noch existieren. Deshalb ist von den geänderten Dateien jeweils eine Kopie "..._SW.json" bzw. "..._SW.php" zu speichern.
===== Anpassung SQL-Datei =====


Für Mitteilungen allgemeiner Art wird eine Kontaktformular-Seite eingesetzt, die im Repositorium nur nach Anmeldung zur Verfügung steht. Bei Versand einer Kopie an eine im Formular eingetragene E-Mail-Adresse steht im Betreff: "Kopie Ihrer Nachricht an Hornemann (von [Ihr Name])".
Für Wiki-Updates mit der MW-Datei "\maintenance\update.php" ist in der Datei "patch-bibmanager_additionalpublications.sql" das jeweilige Wiki-Präfix einzufügen.


Für das Kontaktformular muss als Empfangsadresse ein bestehendes Wiki-Konto angegeben werden und muss als E-Mail-Absender wegen Authentifizierung beim Versand die Angabe von $wgPasswordSender in der Datei "LocalSettings.php" übernommen werden:
SalzWiki/SaltWiki:
<pre>$wgContactConfig['default'] = array(
<pre>
'RecipientUser' => 'Hornemann', //'WikiUser' // Must be a valid account //vormals $wgContactUser
-- Add addtional fields to the bibmanager table
  ...
ALTER TABLE /*$wgDBprefix*/sw_bibmanager
  'SenderEmail' => null, // Defaults to $wgPasswordSender, may be changed as required
  ADD bm_fulltext text NOT NULL,
...);
  ADD bm_doi text NOT NULL;
</pre>
</pre>
Im jeweiligen Wiki-Konto "Hornemann" wird als E-Mail-Adresse "service@salzwiki.de" bzw. "service@saltwiki.net" angegeben. Es kann auch "salzwiki.fb@hawk-hhg.de" bzw. "saltwiki.fb@hawk-hhg.de" angegeben werden.


Für das Formular wird die Erweiterung "ContactPage" benutzt. Die Sie-Form der Wiki-Übersetzungsdatei "[wikiname]\languages\i18n\de-formal.json" ist um einen Eintrag für "emailccme" zu ergänzen.
Repository:
<pre>
-- Add addtional fields to the bibmanager table
ALTER TABLE /*$wgDBprefix*/sr_bibmanager
ADD bm_fulltext text NOT NULL,
ADD bm_doi text NOT NULL;
</pre>


Das Absenden des Kontaktformulars wird bei Nutzung ohne Anmeldung zum Verhindern von Spam über ein Captcha abgesichert. Hierfür sind bei der Erweiterung für MW 1.23 (REL1_23) Anpassungen am Code der Dateien "ContactPage_body.php", "\i18n\de.json" und "\i18n\en.json" sowie "\i18n\qqq.json" erforderlich.
==== neue Datei "extension.json" ====


*Dateien von https://www.mediawiki.org/wiki/Extension:ContactPage herunterladen und die Dateien unter "Extensions/ContactPage" speichern.
<pre>
*In den Übersetzungsdateien Zeilen einfügen (siehe weiter unten); MW1.31 "de.json", MW1.23 auch "en.json" und "qqq.json"
{
*In der Wiki-Systemtexte-Datei "[wikiname]\languages\i18n\de-formal.json" vor "'emailccsubject '=> '...'" das Array-Element "'emailccme' => 'Sende eine Kopie der E-Mail an mich'," einfügen und an Sie-Form anpassen: "Eine Kopie der E-Mail an mich senden"
"name": "BibManagerAdditionalPublications",
**Bei MediaWiki 1.23 im Verzeichnis "[wikiverzeichnis]\languages\i18n\" aus der Datei "de.json" aus Zeile 1759 in Datei "de-formal.json" in Zeile 217 einfügen
"version": "1.1",
*Erweiterung mit Variablenzuweisungen für $wgContactConfig in der Datei "LocalSettings.php" einfügen
"author": [
**Bei MW1.31 das Attribut "'cols' => 80," auskommentieren, weil sonst durch die MW-Datei "HTMLTextAreaField.php" mit der Funktion "getInputOOUI(...)" ein "OOUIHTMLForm"-Fehlerhinweis ausgegeben wird
  "HAWK HHG Hornemann Institut",
  "Hallo Welt! Medienwerkstatt GmbH",
  "Robert Vogel (Hallo Welt!)",
  "Tobias Weichart (Hallo Welt!)",
  "Gunnar Werner (HAWK HHG)"
],
"url": "https://hallowelt.com",
"descriptionmsg": "bm_additionalpublications-desc",
"license-name": "GPL-2.0-or-later",
"type": "specialpage",
"requires": {
  "MediaWiki": ">= 1.29.0",
  "extensions": {
  "BibManager": "*"
  }
},
"MessagesDirs": {
  "BibManagerAdditionalPublications": [
  "i18n"
  ]
},
"AutoloadClasses": {
  "BibManagerAdditionalPublicationsHooks": "BibManagerAdditionalPublicationsHooks.php"
},
"Hooks": {
  "BibManagerBibTagBeforeTooltip": "BibManagerAdditionalPublicationsHooks::onBibManagerBibTagBeforeTooltip",
  "BibManagerValidateCitation": "BibManagerAdditionalPublicationsHooks::onBibManagerValidateCitation",
  "BibManagerGetFieldDefinitions": "BibManagerAdditionalPublicationsHooks::onBibManagerGetFieldDefinitions",
  "BibManagerGetTypeDefinitions": "BibManagerAdditionalPublicationsHooks::onBibManagerGetTypeDefinitions",
  "BibManagerGetIcons": "BibManagerAdditionalPublicationsHooks::onBibManagerGetIcons",
  "BibManagerFormatEntry": "BibManagerAdditionalPublicationsHooks::onBibManagerFormatEntry",
  "BibManagerPagerBeforeSearch": "BibManagerAdditionalPublicationsHooks::onBibManagerChangeSearchValues",
  "LoadExtensionSchemaUpdates": "BibManagerAdditionalPublicationsHooks::onLoadExtensionSchemaUpdates"
},
"manifest_version": 2
}
 
 
</pre>
 
==== neue "Hooks"-Klasse mit angepassten Methodennamen ====
 
Für die "Hooks" wird die Datei "SaltWiki.php" zu "BibManagerAdditionalPublicationsHooks.php" umbenannt und werden die Funktionen zu Methoden in einer neuen Klasse "BibManagerAdditionalPublicationsHooks".


==== MW 1.31 ====
Die Funktionsnamen mit dem Präfix "sw_on..." werden geändert zu den Methodennamen "on...".


===== MW 1.31 Code-Anpassungen =====
Außerdem werden wie bei "BibManager" einleitend die "MediaWikiServices" aufgerufen.


Anzupassende Dateien:
Um Fehlermeldungen zu vermeiden, wenn $entry['bm_fulltext'] ein Leerzeichen oder Steuerzeichen enthält, wird Z.107 mit einer zusätzlichen Bedingung unter Verwendung von "trim()" versehen.
* "[wikiverzeichnis]\languages\i18n\de-formal.json"
* "...\extensions\ContactPage\i18n\de.json", "...en.json"
* <del>"...\extensions\ContactPage\includes\SpecialContact.php"</del>
* "LocalSettings.php"


In der Datei "LocalSettings.php" muss bei MW1.31 die Anzahl der Reihen des Textfeldes auskommentiert werden:
<pre>
<pre>
## Kontakt-Formular, SpecialPage
use MediaWiki\MediaWikiServices;
wfLoadExtension("ContactPage.php");
 
$wgContactConfig['default'] = array(
class BibManagerAdditionalPublicationsHooks {
  'RecipientUser' => 'Hornemann', //'WikiUser' // Must be the name of a valid account //vormals $wgContactUser
  'SenderName'=> 'Kontaktformular ' . $wgSitename, //"Contact Form " // "Contact Form on" needs to be translated //vormals $wgContactSenderName
  'SenderEmail'=> null // Defaults to $wgPasswordSender, may be changed as required
  'RequireDetails'=> true, // Whether users will be required to supply a name and an email address on Special:Contact
  'IncludeIP'=> false, // Whether the form will include a checkbox offering to put the IP address of the submitter in the subject line
  'AdditonalFields'=> array(
    'Text'=> array(
      'label-message'=> 'E-Mail-Nachricht', //'e-mail-message' //'emailmessage',
      'type'=> 'textarea',
      'rows'=> 20,
      #'cols'=> 80,
      'required' => true, //Pflichtfeld
    ),
  ),
  // Added in MW 1.26
  #'DisplayFormat' => 'table', // See HTMLForm documentation for available values.
  #'RLModules' => array(), // Resource loader modules to add to the form display page.
  #'RLStyleModules' => array(), // Resource loader CSS modules to add to the form display page.
);
</pre>


In der Datei "\extensions\ContactPage\i18n\de.json" Ergänzung bei "authors" hinter "Umherirrender", außerdem zusätzliche Captcha-Texte einfügen:
  public static function onBibManagerChangeSearchValues ( $sSearchType, $sSearchTerm, &$sCond ) {
<pre>
    if ( (strtolower ( $sSearchType ) == "url" || strtolower ( $sSearchType ) == "doi" || strtolower ( $sSearchType ) == "fulltext") && empty ( $sSearchTerm ) ) {
{
      $sCond = "bm_" . $sSearchType . " != ''";
   "metadata": {
    }
     "authors": [
    return true;
       ...
  }
      "Umherirrender",
 
       "Gunnar Werner HAWK HHG"
  public static function onBibManagerBibTagBeforeTooltip ( &$aBibEntry ) {
     ]
    ...
   },
  }
 
  public static function onBibManagerValidateCitation ( $citation, $allData, &$result ) {
if ( strpos ( $citation, ':' ) === false ) {
$result = wfMessage ( 'bm_additionalpublications-citation-format-error' )->escaped();
}
return true;
  }
 
  public static function onBibManagerGetFieldDefinitions ( &$fieldDefinitions ) {
    //TODO: Fields "DOI" und "fulltext" Felder von hier injizieren.
    $customFields = array (
      'doi' => array (
        'class' => 'HTMLTextField',
        'label' => wfMessage( 'bm_doi' )->escaped(),
        'default' => 'https://'
        //'validation-callback' => 'BibManagerValidator::validateUrl',
        //validate ?
      ), // Custom field by Hornemann Intitut
      'fulltext' => array (
        'rows' => 5,
        'class' => 'HTMLTextField',
        'label' => wfMessage( 'bm_fulltext' )->escaped(),
        #'default' => 'http://'
        //'validation-callback' => 'BibManagerFieldsList::validateUrl'
        //validate ?
      ) // Custom field by Hornemann Intitut
    );
 
    $fieldDefinitions = $fieldDefinitions + $customFields;
    return true;
  }
  ...
  public static function onLoadExtensionSchemaUpdates ( $updater = null ) {
    if ( $updater === null ) {
      // <= 1.16 support
      global $wgExtNewFields;
      $wgExtNewFields[] = array (
        'bibmanager',
        'bm_fulltext',
        dirname ( __FILE__ ) . '/patch-bibmanager_additionalpublications.sql'
      );
    } else {
      // >= 1.17 support
      $updater -> addExtensionUpdate (
        array (
          'addField',
          'bibmanager',
          dirname ( __FILE__ ) . '/patch-bibmanager_additionalpublications.sql',
          true
        )
      );
    }
    return true;
  }
 
   public static function onBibManagerGetIcons ( $entry, &$icons ) {
     global $wgScriptPath; #, $wgUser; // $wgUser->getSkin()->makeMediaLinkObj() for MW1.16
    // for HAWK HHG expanded with condition for space or control character 2019-04-12
    if ( isset ( $entry['bm_fulltext'] ) && !empty ( $entry['bm_fulltext'] ) && trim($entry['bm_fulltext'])!=="" ) {
      $icon = 'link_error.png';
      $file = RepoGroup::singleton () -> findFile ( $entry['bm_fulltext'] );
       $url = '';
      if ( $file === false ) {
        $fileTitle = Title::newFromText ( $entry['bm_fulltext'], NS_FILE );
        // TODO RBV (23.12.11 14:33): Hacky but okay...
        #$url = $wgUser -> getSkin () -> makeMediaLinkObj ( $fileTitle );
        $url = Linker::makeMediaLinkObj( $fileTitle );
        $url = preg_replace ( '#<a.*?href="(.*?)".*?</a>#si', '$1', $url );
      } else {
        $url = $file -> getTitle () -> getLinkURL ();
        $icon = 'link.png';
      }
       // for HAWK HHG und MW1.23LTS path changed from "client" to "resources", 2016-06-14
      $icons['fulltext'] = array (
        'src' => $wgScriptPath . '/extensions/BibManager/resources/images/' . $icon,
        'title' => 'bm_tooltip_fulltext',
        'href' => $url
      );
     }
    return true;
   }
   ...
   ...
  "contactpage-captcha": "Um die Nachricht senden zu können, bitte das Captcha lösen ([[Special:Captcha/help|weitere Informationen]])",
  "contactpage-captcha-failed": "Captcha-Test nicht bestanden! ([[Special:Captcha/help|weitere Informationen]])",
}
...
if ( $this->useCaptcha() && !$wgCaptcha->passCaptchaFromRequest( $request, $user ) ) {
  return $this->msg( 'contactpage-captcha-error' )->plain();
}
}
</pre>
</pre>


In der Datei "\extensions\ContactPage\i18n\en.json" Ergänzung bei "authors" hinter "Umherirrender", außerdem zusätzliche Captcha-Texte einfügen:
==== Fehler (Extension-Code) ====
 
===== Sprachdatei "de" enthält Sie-Form =====
 
In der Sprachdatei "de.json" enthält das Element "saltwiki-citation-format-error" die Sie-Form wie bei "de-formal" und wird korrigiert:
<pre>
<pre>
{
'saltwiki-citation-format-error' => 'Unerlaubtes Format. Bitte gib das Zitat in der Form <em>Autor:Jahr</em> an, z.B. <em>Nachname:2011</em>.',
  "metadata": {
</pre>
    "authors": [
 
      ...
===== Fehlendes Icon "Link zum Volltext" bei Detailseite =====
      "Umherirrender",
 
      "Gunnar Werner HAWK HHG"
Da sich in der verwendeten BibManager-Version der Dateipfad für eine Grafik geändert hat, muss der Code angepasst werden.
    ]
 
   },
Auf der Detailseite eines Bibliographieeintrags wird rechts statt des Icons nur der Alternativtext "Link zum Volltext" bzw. "Fulltext link" angezeigt, weil der Dateipfad nicht mehr stimmt. In der Funktion "sw_onBibManagerGetIcons(...)" wird in Z.161 eine Grafik aus dem Verzeichnis "\extensions\BibManager\client\images\" statt aus dem Verzeichnis "\extensions\BibManager\resources\images\" verwendet, weshalb der Alternativtext der Grafik angezeigt wird; es ist folgende Datei anzupassen:
 
* "\extensions\SaltWiki\SaltWiki.php"
 
Bei "SaltWiki.php" ist in der Funktion "sw_onBibManagerGetIcons(...)" vor Zeile 160 ein Kommentar einzufügen und in Zeile 161 der Pfad von "client" zu "resources" anzupassen:
 
function sw_onBibManagerGetIcons ( $entry, &$icons) {
...
// für HAWK HHG und MW1.23LTS Pfad von "client" zu "resources" angepasst 2016-06-14
$icons['fulltext'] = array (
   'src' = $wgScriptPath . '/extensions/BibManager/resources/images/' . $icon,
   ...
   ...
  "contactpage-captcha": "Please fill out to send the message ([[Special:Captcha/help|further information]])",
);
  "contactpage-captcha-failed": "Captcha-Test not right! ([[Special:Captcha/help|further information]])",
...
}
}
...
if ( $this->useCaptcha() && !$wgCaptcha->passCaptchaFromRequest( $request, $user ) ) {
  return $this->msg( 'contactpage-captcha-error' )->plain();
}
</pre>


Folgende Anpassungen entfallen bei MW1.31 in Datei "...\includes\SpecialContact.php", da der Code enthalten ist in den Zeilen ab 196, 205, 268, 406, 410, 472:
===== Veralteter Code =====
 
Es werden in der Datei "SaltWiki.php" noch folgende Methoden verwendet:
 
* "wfMsg()" anstatt von "wfMessage()->escaped()"
* "$wgUser -> getSkin () -> makeMediaLinkObj ( $fileTitle )" anstatt von "Linker::makeMediaLinkObj( $fileTitle )
 
===== Fehler bei einzelnen Seiten =====
 
Auf den Seiten "Halit" und "Test", zu erreichen über "Startseite => Chloride", wird eine Fehlermeldung erzeugt:
 
<pre>
[f05c554c78bb93f1e7833805] /index.php/Test TypeError from line 783 of D:\noxampp\apache\htdocs\salzwiki\includes\Linker.php: Argument 1 passed to Linker::makeMediaLinkFile() must be an instance of Title, null given, called in D:\noxampp\apache\htdocs\salzwiki\includes\Linker.php on line 768
 
Backtrace:
 
#0 D:\noxampp\apache\htdocs\salzwiki\includes\Linker.php(768): Linker::makeMediaLinkFile(NULL, boolean, string)
#1 D:\noxampp\apache\htdocs\salzwiki\extensions\BibManagerAdditionalPublications\BibManagerAdditionalPublicationsHooks.php(115): Linker::makeMediaLinkObj(NULL)
#2 D:\noxampp\apache\htdocs\salzwiki\includes\Hooks.php(177): BibManagerAdditionalPublicationsHooks::onBibManagerGetIcons(array, array)
#3 D:\noxampp\apache\htdocs\salzwiki\includes\Hooks.php(205): Hooks::callHook(string, array, array, NULL)
#4 D:\noxampp\apache\htdocs\salzwiki\extensions\BibManager\includes\BibManagerHooks.php(170): Hooks::run(string, array)
#5 D:\noxampp\apache\htdocs\salzwiki\extensions\BibManager\includes\BibManagerHooks.php(402): BibManagerHooks::getIcons(array)
#6 D:\noxampp\apache\htdocs\salzwiki\extensions\BibManager\includes\BibManagerHooks.php(307): BibManagerHooks::getTable(array)
#7 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Parser.php(3888): BibManagerHooks::onBibprintTag(NULL, array, Parser, PPFrame_DOM)
#8 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Preprocessor_DOM.php(1362): Parser->extensionSubstitution(array, PPFrame_DOM)
#9 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Parser.php(2942): PPFrame_DOM->expand(DOMElement, integer)
#10 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Parser.php(1293): Parser->replaceVariables(string)
#11 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Parser.php(443): Parser->internalParse(string)
#12 D:\noxampp\apache\htdocs\salzwiki\includes\content\WikitextContent.php(323): Parser->parse(string, Title, ParserOptions, boolean, boolean, integer)
#13 D:\noxampp\apache\htdocs\salzwiki\includes\content\AbstractContent.php(516): WikitextContent->fillParserOutput(Title, integer, ParserOptions, boolean, ParserOutput)
#14 D:\noxampp\apache\htdocs\salzwiki\includes\poolcounter\PoolWorkArticleView.php(144): AbstractContent->getParserOutput(Title, integer, ParserOptions)
#15 D:\noxampp\apache\htdocs\salzwiki\includes\poolcounter\PoolCounterWork.php(123): PoolWorkArticleView->doWork()
#16 D:\noxampp\apache\htdocs\salzwiki\includes\page\Article.php(604): PoolCounterWork->execute()
#17 D:\noxampp\apache\htdocs\salzwiki\includes\actions\ViewAction.php(68): Article->view()
#18 D:\noxampp\apache\htdocs\salzwiki\includes\MediaWiki.php(500): ViewAction->show()
#19 D:\noxampp\apache\htdocs\salzwiki\includes\MediaWiki.php(294): MediaWiki->performAction(Article, Title)
#20 D:\noxampp\apache\htdocs\salzwiki\includes\MediaWiki.php(861): MediaWiki->performRequest()
#21 D:\noxampp\apache\htdocs\salzwiki\includes\MediaWiki.php(524): MediaWiki->main()
#22 D:\noxampp\apache\htdocs\salzwiki\index.php(42): MediaWiki->run()
#23 {main}
<pre>
 
=== CategoryTree (JS) ===
 
Die Erweiterung ist ab MW1.31 standardmäßig enthalten und dient zur Darstellung der Kategorienbäume, damit schnell den Artikeln und Dokumenten die richtigen Kategorien zugewiesen werden können.
 
Angeblich ist in den Versionen REL1.27, REL1.29, REL1.30 und REL1.31 die Aktivierung von JavaScript (JS) im Browser erforderlich, allerdings wird beispielsweise für "Salz" ein Kategorienbaum, bei dem ohne JS die 3-eckigen Grafiken zum Aufklappen/Zuklappen fehlen, angezeigt.
 
==== Installationshinweis (entfällt) ====
 
Der Hinweis für die Erweiterung entfällt bei MW1.31.
 
In vorangegangenen Versionen war für die Variable $wgUseAjax, die es ab MW1.31 nicht mehr gibt, der Wahrheitswert "true" in der Datei "LocalSettings.php" einzufügen:
<pre>
<pre>
...
$wgUseAjax = true; ##muss von false auf true geändert werden, falls noch nicht geschehen
if ( $this->useCaptcha() ) {
  $formItems['Captcha'] = array(
    ...
  );
}
...
$form = HTMLForm::factory( 'ooui',
  $formItems, $this->getContext(), "contactpage-{$this->formType}"
);
...
public function processInput( $formData ) {
  global $wgUserEmailUseReplyTo, $wgPasswordSender, $wgCaptcha;
...
  // Stolen from Special:EmailUser
  $error = '';
  ...
  private function getYesOrNoMsg( $value ) {
    return $this->msg( $value ? 'htmlform-yes' : 'htmlform-no' )->inContentLanguage()->text();
  }
 
  /**
  * @return boolean True if CAPTCHA should be used, false otherwise
  */
  private function useCaptcha() {
    global $wgCaptchaClass, $wgCaptchaTriggers;
    return $wgCaptchaClass &&
      isset( $wgCaptchaTriggers['contactpage'] ) &&
      $wgCaptchaTriggers['contactpage'] &&
      !$this->getUser()->isAllowed( 'skipcaptcha' );
  }
 
  /**
  * @return string CAPTCHA form HTML
  */
  private function getCaptcha() {
    // NOTE: make sure we have a session. May be required for CAPTCHAs to work.
    \MediaWiki\Session\SessionManager::getGlobalSession()->persist();
    $captcha = ConfirmEditHooks::getInstance();
    $captcha->setTrigger( 'contactpage' );
    $captcha->setAction( 'contact' );
    ...
    return '<div class="captcha">' .
      $formInformation['html'] .
      "</div>\n";
  }
</pre>
</pre>


==== MW 1.27 ====
=== CharacterEscapes ===


* Datei "composer.json" fehlt
"CharacterEscapes" wird nicht mehr installiert, denn die Erweiterung ist nur als Beta-Version 0.9.1 von 2007-10-02 erhältlich (Stand 2018-10-12) und seit MW 1.12 verzichtbar, siehe auch
* Datei "extension.json" fehlt
* https://www.mediawiki.org/wiki/Extension:Character_Escapes
* vorangegangene Angaben zu MW 1.23 für MW 1.27 anpassen
* https://www.mediawiki.org/wiki/Extension:ControlStructureFunctions


==== MW 1.23 ====
Die Erweiterung wurde zusammen mit den Erweiterungen "ControlStructureFunctions" und "LOParserFunctions" für die Hilfeseiten bei den alten Wiki-Versionen verwendet. Sie benötigt die Erweiterungen "ControlStructureFunctions" und "Variables"; letztere wird nicht bei Wikis der Wikimedia Foundation aktiviert.
 
=== CharInsert ===
 
Diese Extension dient dazu Editierhilfen zum Einfügen von Spezialzeichen und Formatierungshilfen zur Verfügung zu stellen.Diese Hilfe wird im Bearbeitungsmodus und beim UpLoad-Formular zur Verfügung gestellt. Diese Erweiterung wurde Testweise installiert und dann wieder deaktiviert.
 
Die Extension wird bei http://www.mediawiki.org/wiki/Extension:CharInsert heruntergeladen und in ...Extensions/CharInsert extrahiert.
 
In die localsettings ist einzufügen:
 
require_once("$IP/extensions/CharInsert/CharInsert.php");
 
In Mediawiki:Edittools werden die entsprechenden Zeichen bzw. Hilfen mit
<pre><charinsert> .. </charinsert> </pre>


Für Upgrades von MW-Versionen bis einschließlich 1.22 zu neueren Versionen ab 1.23 sind die Angaben in der Datei "LocalSettings.php" anzupassen, siehe auch https://www.mediawiki.org/wiki/Extension:ContactPage.
eingefügt.


===== MW 1.23 Code-Anpassungen =====
=== Cite  ===


Zur Code-Anpassung siehe auch https://gerrit.wikimedia.org/r/#/c/156052/
Die Erweiterung "Cite" dient zum Erstellen von Fußnoten in Wiki-Artikeln. In MW1.31 erzeugte die Core-Erweiterung "Cite" unter PHP 7.2.2 einen Fehler "Uncommitted DB writes".


Anzupassende Dateien:
* Erweiterung unter http://www.mediawiki.org/wiki/Cite herunterladen.
* "[wikiverzeichnis]\languages\i18n\de-formal.json"
* Extrahieren der Dateien nach "\[wikiname]\extensions\Cite\"  
* "...\extensions\ContactPage\i18n\de.json", "...de-formal.json", "...en.json" und "...qqq.json"
* Erweiterung in der Datei "LocalSettings.php" einfügen
* "...\extensions\ContactPage\includes\ContactPage_body.php"


In der Datei "\extensions\ContactPage\i18n\qqq.json" Ergänzung bei "authors" hinter "Shirayuki" sowie in Zeile 25 am Ende ein Komma und darunter  eine Zeile für "contactpage-captcha-error" einfügen:
<pre>
<pre>
{
require_once("$IP/extensions/Cite/Cite.php");
  "metadata": {
    "authors": [
      ...
      "Shirayuki",
      "Gunnar Werner HAWK HHG"
    ]
  },
  ...
  "contactpage-usermailererror": "...",
  "contactpage-captcha-error": "Error message displayed when ehter was a CAPTCHA error (i.e. the user failed to enter the correct CAPTCHA, or didn't enter one at all, etc.)"
}
</pre>
</pre>


In der Datei "\extensions\ContactPage\i18n\en.json" Ergänzung bei "authors" hinter "Reedy" sowie in Zeile 20 am Ende ein Komma einfügen und darunter eine Zeile für "contactpage-captcha-error" einfügen:
Siehe näheres zum Einfügen von Fußnoten unter https://salzwiki.de/index.php/Autor#Fu.C3.9Fnoten.
<pre>
 
{
=== CiteThisPage ===
  "metadata": {
 
    "authors": [
Die Erweiterung "CiteThisPage" dient zum Erstellen von Zitierhilfen für Wiki-Artikel. Sie ist erst seit MW Version 1.24 einsetzbar und wurde in jener Version unter der Bezeichnung "Special:Cite" als Zusatzerweiterung zur Erweiterung "Cite" mit der Datei "SpecialCite.php" angeboten. Ab MW 1.25 handelt es sich bei "CiteThisPage" ("Zitierhilfe") um eine eigenständige Erweiterung, siehe https://www.mediawiki.org/wiki/MediaWiki_1.25/de-formal#Schwerwiegende_%C3%84nderungen.
      ...
 
      "Umherirrender",
Mit der Erweiterung wird im Menü links unter "Werkzeuge" bzw. "tools" ein Verweis "Seite zitieren" bzw. "Cite this page" zur Spezialseite "Special:CiteThisPage" angezeigt.
      "Gunnar Werner HAWK HHG"
 
    ]
Damit die Spezialseite mit der Zitierhilfe auch ohne Anmeldung angezeigt wird, muss in der Datei "LocalSettings.php" ein zusätzlicher Eintrag im "Hook" vorgenommen werden.
  },
 
  ...
* Erweiterung unter https://www.mediawiki.org/wiki/Extension:CiteThisPage?uselang=de herunterladen.
  "contactpage-usermailererror": "Mail object returned error:",
* Extrahieren der Dateien nach "\[wikiname]\extensions\CiteThisPage\"  
  "contactpage-captcha-error": "CAPTCHA error"
* Erweiterung in der Datei "LocalSettings.php" einfügen
}
* Spezialseite ohne Anmeldung zur Verfügung stellen
</pre>


In der Datei "\extensions\ContactPage\i18n\de.json" Ergänzung bei "authors" hinter "Umherirrender", außerdem die Menüleisten-Bezeichnung "Kontaktseite" sowie Captcha-Texte einfügen:
<pre>
<pre>
{
// Spezialseiten-Inhalte nur für bestimmte Gruppen anzeigen, ansonsten nur den Seitentitel
   "metadata": {
...
     "authors": [
   $aSpecialPages = array(
      ...
     ...
      "Umherirrender",
    "CiteThisPage" => "SpecialCiteThisPage",
      "Gunnar Werner HAWK HHG"
   )
    ]
...
  },
// MW1.31
   "contact": "Kontaktseite",
wfLoadExtension( 'CiteThisPage' );
  ...
// MW1.24
  "contactpage-captcha": "Um die Nachricht senden zu können, bitte das Captcha lösen ([[Special:Captcha/help|weitere Informationen]])",
require_once("$IP/extensions/CiteThisPage/CiteThisPage.php");
  "contactpage-captcha-error": "Captcha-Fehlfunktion",
  "contactpage-captcha-failed": "Captcha-Test nicht bestanden! ([[Special:Captcha/help|weitere Informationen]])"
}
</pre>
</pre>


Datei "ContactPage_body.php" vor Zeile 185 und nach Zeile 217+11 (228), vor Zeile 341+11+1 (353), nach Zeile 393+11+1+6 (411):
=== ConfirmEdit ===
 
Registrierte Nutzer/innen dürfen auf die Diskussionseiten schreiben. Damit dies etwas sicherer vonstatten geht, wird mit ConfirmEdit das Captcha "QuestyCaptcha" eingeführt ('''bisher nur bei Salzwiki und Saltwiki, nicht bei Repositorium''').
 
*Dateien unter http://www.mediawiki.org/wiki/Confirmedit herunterladen und unter "extensions\ConfirmEdit\" speichern.
*In der Datei "LocalSettings.php" einfügen:
<pre>
<pre>
## MW 1.31
wfLoadExtensions(['ConfirmEdit', 'ConfirmEdit/QuestyCaptcha']);
## MW 1.23
#require_once( "$IP/extensions/ConfirmEdit/ConfirmEdit.php" );
...
...
// Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
## Erweiterung ConfirmEdit mit Captcha
if ( $this->useCaptcha() ) {
#$wgCaptchaClass = 'QuestyCaptcha'; // für MW 1.23 und 1.16
  $formItems['Captcha'] = array(
</pre>
    'label-message' => 'captcha-label',
 
    'type' => 'info',
=== ContactPage - Kontaktseite (Wiki-Code de-formal) ===
    'default' => $this->getCaptcha(),
 
    'raw' => true,
ACHTUNG: Nach jedem MediaWiki-Update muss überprüft werden, ob die vorgenommenen Änderungen in den jeweiligen Dateien noch existieren. Deshalb ist von den geänderten Dateien jeweils eine Kopie "..._SW.json" bzw. "..._SW.php" zu speichern.
  );
 
}
Für Mitteilungen allgemeiner Art wird eine Kontaktformular-Seite eingesetzt, die im Repositorium nur nach Anmeldung zur Verfügung steht. Bei Versand einer Kopie an eine im Formular eingetragene E-Mail-Adresse steht im Betreff: "Kopie Ihrer Nachricht an Hornemann (von [Ihr Name])".
 
Für das Kontaktformular muss als Empfangsadresse ein bestehendes Wiki-Konto angegeben werden und muss als E-Mail-Absender wegen Authentifizierung beim Versand die Angabe von $wgPasswordSender in der Datei "LocalSettings.php" übernommen werden:
<pre>$wgContactConfig['default'] = array(
'RecipientUser' => 'Hornemann', //'WikiUser' // Must be a valid account //vormals $wgContactUser
...
'SenderEmail' => null, // Defaults to $wgPasswordSender, may be changed as required
...);
</pre>
Im jeweiligen Wiki-Konto "Hornemann" wird als E-Mail-Adresse "service@salzwiki.de" bzw. "service@saltwiki.net" angegeben. Es kann auch "salzwiki.fb@hawk-hhg.de" bzw. "saltwiki.fb@hawk-hhg.de" angegeben werden.
 
Für das Formular wird die Erweiterung "ContactPage" benutzt. Die Sie-Form der Wiki-Übersetzungsdatei "[wikiname]\languages\i18n\de-formal.json" ist um einen Eintrag für "emailccme" zu ergänzen.


$form = new HTMLForm( $formItems, $this->getContext(), "contactpage-{$this->formType}" );
Das Absenden des Kontaktformulars wird bei Nutzung ohne Anmeldung zum Verhindern von Spam über ein Captcha abgesichert. Hierfür sind bei der Erweiterung für MW 1.23 (REL1_23) Anpassungen am Code der Dateien "ContactPage_body.php", "\i18n\de.json" und "\i18n\en.json" sowie "\i18n\qqq.json" erforderlich.
...
 
public function processInput( $formData ) {
*Dateien von https://www.mediawiki.org/wiki/Extension:ContactPage herunterladen und die Dateien unter "Extensions/ContactPage" speichern.
  global $wgUserEmailUseReplyTo, $wgPasswordSender;
*In den Übersetzungsdateien Zeilen einfügen (siehe weiter unten); MW1.31 "de.json", MW1.23 auch "en.json" und "qqq.json"
  global $wgCaptcha; // Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
*In der Wiki-Systemtexte-Datei "[wikiname]\languages\i18n\de-formal.json" vor "'emailccsubject '=> '...'" das Array-Element "'emailccme' => 'Sende eine Kopie der E-Mail an mich'," einfügen und an Sie-Form anpassen: "Eine Kopie der E-Mail an mich senden"
...
**Bei MediaWiki 1.23 im Verzeichnis "[wikiverzeichnis]\languages\i18n\" aus der Datei "de.json" aus Zeile 1759 in Datei "de-formal.json" in Zeile 217 einfügen
// Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
*Erweiterung mit Variablenzuweisungen für $wgContactConfig in der Datei "LocalSettings.php" einfügen
if ( $this->useCaptcha() && !$wgCaptcha->passCaptcha() ) {
**Bei MW1.31 das Attribut "'cols' => 80," auskommentieren, weil sonst durch die MW-Datei "HTMLTextAreaField.php" mit der Funktion "getInputOOUI(...)" ein "OOUIHTMLForm"-Fehlerhinweis ausgegeben wird
  // TODO proper i18n message
 
  return wfMessage( 'contactpage-captcha-error' )->plain();
==== MW 1.31 ====
}
 
// Stolen from Special:EmailUser
===== MW 1.31 Code-Anpassungen =====
$error = '';
 
...
Anzupassende Dateien:
  private static function getYesOrNoMsg( $value ) {
* "[wikiverzeichnis]\languages\i18n\de-formal.json"
    return wfMessage( $value ? 'htmlform-yes' : 'htmlform-no' )->inContentLanguage()->text();
* "...\extensions\ContactPage\i18n\de.json", "...en.json"
  }
* <del>"...\extensions\ContactPage\includes\SpecialContact.php"</del>
  // Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
* "LocalSettings.php"
  /**
  * @return boolean True if CAPTCHA should be used, false otherwise
  */
  private function useCaptcha() {
    global $wgCaptchaClass, $wgCaptchaTriggers;
    return $wgCaptchaClass &&
      isset( $wgCaptchaTriggers['contactpage'] ) &&
      $wgCaptchaTriggers['contactpage'] &&
      !$this->getUser()->isAllowed( 'skipcaptcha' );
  }
  // Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
  /**
  * @return string CAPTCHA form HTML
  */
  private function getCaptcha() {
    // NOTE: make sure we have a session. May be required for CAPTCHAs to work.
    wfSetupSession();
    $captcha = ConfirmEditHooks::getInstance();
    $captcha->trigger = 'contactpage';
    $captcha->action = 'contact';
    return '<div class="captcha">' .
      $captcha->getForm() .
      "</div>\n";
  }
}
</pre>


==== LocalSettings.php ====
In der Datei "LocalSettings.php" muss bei MW1.31 die Anzahl der Reihen des Textfeldes auskommentiert werden:
<pre>
<pre>
// Version 2.2 für MediaWiki 1.25
## Kontakt-Formular, SpecialPage
#wfLoadExtension("ContactPage.php");
wfLoadExtension("ContactPage.php");
// Version 2.2 für MediaWiki 1.23
require_once( "$IP/extensions/ContactPage/ContactPage.php" );
$wgContactConfig['default'] = array(
$wgContactConfig['default'] = array(
   'RecipientUser' => 'Hornemann', //'WikiUser' // Must be the name of a valid account //vormals $wgContactUser
   'RecipientUser' => 'Hornemann', //'WikiUser' // Must be the name of a valid account //vormals $wgContactUser
Zeile 5.265: Zeile 5.889:
       'type'=> 'textarea',
       'type'=> 'textarea',
       'rows'=> 20,
       'rows'=> 20,
       'cols'=> 80,
       #'cols'=> 80,
       'required' => true, //Pflichtfeld
       'required' => true, //Pflichtfeld
     ),
     ),
Zeile 5.276: Zeile 5.900:
</pre>
</pre>


=== ControlStructureFunctions, LOParserFunctions ===
In der Datei "\extensions\ContactPage\i18n\de.json" Ergänzung bei "authors" hinter "Umherirrender", außerdem zusätzliche Captcha-Texte einfügen:
 
"ControlStructureFunctions" und "LOParserFunctions" werden nicht mehr installiert, da sie ab MW1.12 in der Erweiterung "ParserFunctions", die seit MW1.18 Teil des MW-Kerns ist, vereinigt wurden.
 
"LOParserFunctions" enthält in den neueren Versionen alle Bestandteile aus der Erweiterung "ParserFunctions" ohne die Teile von "ControlStructureFunctions", so dass theoretisch "ControlStructureFunctions" und "LOParserFunctions" gemeinsam statt "ParserFunctions" eingesetzt werden können.
 
"ControlStructureFunctions" war in älteren MW-Versionen notwendig für Anweisungen mit #if, #switch, #while und #do-while (z. B. beim Einsetzen des Seitentitels im Kopf von Vorlage:Infobox_Salz und bei den Hilfe-Seiten.
 
In den Salz-Wikis mit MW1.16 gab es noch Probleme mit der Erweiterung "ParserFunctions". Möglicherweise ist eine Erklärung dafür unter https://www.mediawiki.org/w/index.php?oldid=469082 zu finden:
<pre>
<pre>
Don't These Parser Functions Already Exist?
{
Yes and no. The ParserFunctions extension has
  "metadata": {
#if, #ifeq, #ifexpr, #switch, and #ifexist,  
    "authors": [
and Loop Functions extension has
      ...
#for and #foreach.  
      "Umherirrender",
The limitation of all those parser functions is
      "Gunnar Werner HAWK HHG"
that wiki markup is parsed before any parameters are passed to the underlying function.  
    ]
These functions bypass that limitation through character escapes (see below),  
  },
and allow wiki markup to be parsed after the parameters have been passed.
  ...
  "contactpage-captcha": "Um die Nachricht senden zu können, bitte das Captcha lösen ([[Special:Captcha/help|weitere Informationen]])",
  "contactpage-captcha-failed": "Captcha-Test nicht bestanden! ([[Special:Captcha/help|weitere Informationen]])",
}
...
if ( $this->useCaptcha() && !$wgCaptcha->passCaptchaFromRequest( $request, $user ) ) {
  return $this->msg( 'contactpage-captcha-error' )->plain();
}
</pre>
</pre>


Für weitere Informationen siehe
In der Datei "\extensions\ContactPage\i18n\en.json" Ergänzung bei "authors" hinter "Umherirrender", außerdem zusätzliche Captcha-Texte einfügen:
* LOParserFunctions: https://www.mediawiki.org/w/index.php?oldid=2140215
<pre>
* ControlStructureFunctions: https://www.mediawiki.org/w/index.php?oldid=469082
{
  "metadata": {
    "authors": [
      ...
      "Umherirrender",
      "Gunnar Werner HAWK HHG"
    ]
  },
  ...
  "contactpage-captcha": "Please fill out to send the message ([[Special:Captcha/help|further information]])",
  "contactpage-captcha-failed": "Captcha-Test not right! ([[Special:Captcha/help|further information]])",
}
...
if ( $this->useCaptcha() && !$wgCaptcha->passCaptchaFromRequest( $request, $user ) ) {
  return $this->msg( 'contactpage-captcha-error' )->plain();
}
</pre>


=== CreativeCommonsRdf ===
Folgende Anpassungen entfallen bei MW1.31 in Datei "...\includes\SpecialContact.php", da der Code enthalten ist in den Zeilen ab 196, 205, 268, 406, 410, 472:
 
<pre>
Die Erweiterung sollte ab MW-Version 1.19 die Variable "$wgEnableCreativeCommonsRdf" in der Datei "LocalSettings.php" ersetzen, hat aber immer noch Beta-Status (Stand 2018-10-12, 2015-09-21) und wird deshalb nicht verwendet, zumal der Beispiel-Code für die Einbindung nicht mehr vom MW-Kern unterstützt wird.
...
 
if ( $this->useCaptcha() ) {
Die 3 Dateien der Erweiterung wurden zuletzt bearbeitet 2012-10-02, 2011-12-13 und 2011-05-26. Sie können heruntergeladen werden bei
  $formItems['Captcha'] = array(
* https://www.mediawiki.org/wiki/Extension:CreativeCommonsRdf
    ...
* https://phabricator.wikimedia.org/diffusion/SVN/browse/trunk/extensions/CreativeCommonsRdf/
  );
 
}
=== DynamicPageList ===
...
 
$form = HTMLForm::factory( 'ooui',
Es gibt 3 Erweiterungen mit der Bezeichnung "DynamicPageList", wobei die erste mit dem Alias "Intersection" nicht verwendet wird (siehe auch https://www.mediawiki.org/wiki/Extension:DPL).
  $formItems, $this->getContext(), "contactpage-{$this->formType}"
 
);
==== MediaWiki 1.27 ====
...
 
public function processInput( $formData ) {
* Für MW 1.27 wird die Erweiterung "DynamicPageList" mit dem Alias "DynamicPageList3" von https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:DynamicPageList3 heruntergeladen und nach dem Extrahieren in das Verzeichnis "extensions" des jeweiligen Wikis extrahiert.
  global $wgUserEmailUseReplyTo, $wgPasswordSender, $wgCaptcha;
* Einfügen in der Datei "LocalSettings.php":
...
<pre>wfLoadExtension('DynamicPageList3');</pre>
  // Stolen from Special:EmailUser
  $error = '';
  ...
  private function getYesOrNoMsg( $value ) {
    return $this->msg( $value ? 'htmlform-yes' : 'htmlform-no' )->inContentLanguage()->text();
  }
 
  /**
  * @return boolean True if CAPTCHA should be used, false otherwise
  */
  private function useCaptcha() {
    global $wgCaptchaClass, $wgCaptchaTriggers;
    return $wgCaptchaClass &&
      isset( $wgCaptchaTriggers['contactpage'] ) &&
      $wgCaptchaTriggers['contactpage'] &&
      !$this->getUser()->isAllowed( 'skipcaptcha' );
  }


=== Inline SVG Extension ===
  /**
  * @return string CAPTCHA form HTML
  */
  private function getCaptcha() {
    // NOTE: make sure we have a session. May be required for CAPTCHAs to work.
    \MediaWiki\Session\SessionManager::getGlobalSession()->persist();
    $captcha = ConfirmEditHooks::getInstance();
    $captcha->setTrigger( 'contactpage' );
    $captcha->setAction( 'contact' );
    ...
    return '<div class="captcha">' .
      $formInformation['html'] .
      "</div>\n";
  }
</pre>


Diese Erweiterung wird ab Mediawiki 1.23 nicht mehr verwendet, weil die üblichen Browser inzwischen SVG-Elemente darstellen können.
==== MW 1.27 ====


Die php-Datei "SVGtag.php" sorgt dafür, dass Inline-SVG-Code im Upload-Verzeichnis gespeichert und in einem "iframe" geladen wird. Dies ist erforderlich für ältere Browser, insbesondere für Internet Explorer bis einschließlich Version 8.
* Datei "composer.json" fehlt
* Datei "extension.json" fehlt
* vorangegangene Angaben zu MW 1.23 für MW 1.27 anpassen


* Extension unter http://www.mediawiki.org/wiki/Extension:Inline_SVG_extension herunterladen.
==== MW 1.23 ====
* Datei in das Verzeichnis "extensions" kopieren
* In der Datei "LocalSettings.php" einfügen:
<pre>require_once("$IP/extensions/SVGtag.php");</pre>


=== Interwiki ===
Für Upgrades von MW-Versionen bis einschließlich 1.22 zu neueren Versionen ab 1.23 sind die Angaben in der Datei "LocalSettings.php" anzupassen, siehe auch https://www.mediawiki.org/wiki/Extension:ContactPage.


Die Erweiterung "Interwiki" ist in Mediawiki seit Version 1.21 enthalten und hieß ehemals "SpecialInterwiki", bevor sie umbenannt wurde.
===== MW 1.23 Code-Anpassungen =====


Diese Erweiterung fügt die Seite Special:Interwiki zu Mediawiki hinzu, um die Interwiki-Tabelle sehen und editieren zu können. Es werden auch alle Änderungen aufgezeichnet.
Zur Code-Anpassung siehe auch https://gerrit.wikimedia.org/r/#/c/156052/
Mit dieser InterWiki Tabelle kann man einerseits einfach zu Inhalten in anderen Wikis verlinken, auch zu Wikipedia, andererseits ist es damit möglich durch das Setzen von  $wgEnableScaryTranscluding = true;  Inhalte eines anderen Wikis zu "transcludieren".


Die Erweiterung für MW 1.23 wird bei http://www.mediawiki.org/wiki/Extension:Interwiki heruntergeladen und in das Verzeichnis "[wikiname]\extensions\Interwiki" extrahiert.
Anzupassende Dateien:
* "[wikiverzeichnis]\languages\i18n\de-formal.json"
* "...\extensions\ContactPage\i18n\de.json", "...de-formal.json", "...en.json" und "...qqq.json"
* "...\extensions\ContactPage\includes\ContactPage_body.php"


In der Datei "LocalSettings.php" eines jeden Wikis ist dann einzufügen:
In der Datei "\extensions\ContactPage\i18n\qqq.json" Ergänzung bei "authors" hinter "Shirayuki" sowie in Zeile 25 am Ende ein Komma und darunter eine Zeile für "contactpage-captcha-error" einfügen:
 
##to allow interwiki-linking, für Version MW 1.23 anderer Dateiname
#require_once("$IP/extensions/Interwiki/SpecialInterwiki.php");
require_once("$IP/extensions/Interwiki/Interwiki.php");
$wgGroupPermissions['*']['interwiki'] = false;
$wgGroupPermissions['sysop']['interwiki'] = true; ## nur sysops können die InterWiki Tabelle ändern und sehen
  $wgEnableScaryTranscluding = true;                ## Seiten von anderen Wikis können eingebunden werden
 
Diese Erweiterung wurde in SalzWiki, SaltWiki und im Repositorium installiert.
 
==== Anpassungen für geänderte Server-Adresse ====
 
Für die Umstellung der Wikis von IP-Adressen auf Domain-Adressen sind die Datenbank-Einträge der Tabelle "..._interwiki" zu bearbeiten. Hierzu wird unter "Daten und Werkzeuge => Interwikidaten ansehen und bearbeiten" bzw. "Data and Tools => View and edit interwiki data" die entsprechende Spezial-Seite "Spezial:Interwikitabelle" bzw. "Special:Interwiki" aufgerufen.
 
* Alte Adressen:
** repository | http://193.175.110.91/repository.hawk-hhg.de/index.php/$1
** saltwiki | http://193.175.110.91/saltwiki/index.php/$1
** salzwiki | http://193.175.110.91/salzwiki/index.php/$1
 
* Neue Adressen:
** repository | https://repository.hawk-hhg.de/index.php/$1
** saltwiki | https://saltwiki.net/index.php/$1
** salzwiki | https://salzwiki.de/index.php/$1
 
==== Anpassungen für HTTPS ====
 
Bei InterWikis in der Tabelle, für die sowohl "Als lokales Wiki definiert" als auch "Einbinden zulässig" aktiviert ist, die URL von "http" zu "https" ändern. Beispiel:
<pre>
<pre>
wikipedia | https://de.wikipedia.org/wiki/$1 | ja | ja
{
  "metadata": {
    "authors": [
      ...
      "Shirayuki",
      "Gunnar Werner HAWK HHG"
    ]
  },
  ...
  "contactpage-usermailererror": "...",
  "contactpage-captcha-error": "Error message displayed when ehter was a CAPTCHA error (i.e. the user failed to enter the correct CAPTCHA, or didn't enter one at all, etc.)"
}
</pre>
</pre>


=== JavaScript ===
In der Datei "\extensions\ContactPage\i18n\en.json" Ergänzung bei "authors" hinter "Reedy" sowie in Zeile 20 am Ende ein Komma einfügen und darunter eine Zeile für "contactpage-captcha-error" einfügen:
 
<pre>
Entfällt bei MW 1.23.11 LTS und wird ersetzt durch eine Anpassung in der Datei "skins\MonoBook.php".
{
  "metadata": {
    "authors": [
      ...
      "Umherirrender",
      "Gunnar Werner HAWK HHG"
    ]
  },
  ...
  "contactpage-usermailererror": "Mail object returned error:",
  "contactpage-captcha-error": "CAPTCHA error"
}
</pre>


Die Erweiterung hat den Status "unmaintained" (Stand 2015-09-15); die Version 3.0.8 (2012-02-15) kann wegen einer ungültigen Internetadresse nicht heruntergeladen werden, doch gibt es auf der Internetseite https://www.organicdesign.co.nz/Extension:Javascript den Hinweis, dass die Erweiterung obsolet ist, seitdem MediaWiki den ResourceLoader bereitstellt, siehe https://www.mediawiki.org/wiki/ResourceLoader.
In der Datei "\extensions\ContactPage\i18n\de.json" Ergänzung bei "authors" hinter "Umherirrender", außerdem die Menüleisten-Bezeichnung "Kontaktseite" sowie Captcha-Texte einfügen:
<pre>
{
  "metadata": {
    "authors": [
      ...
      "Umherirrender",
      "Gunnar Werner HAWK HHG"
    ]
  },
  "contact": "Kontaktseite",
  ...
  "contactpage-captcha": "Um die Nachricht senden zu können, bitte das Captcha lösen ([[Special:Captcha/help|weitere Informationen]])",
  "contactpage-captcha-error": "Captcha-Fehlfunktion",
  "contactpage-captcha-failed": "Captcha-Test nicht bestanden! ([[Special:Captcha/help|weitere Informationen]])"
}
</pre>


Diese Erweiterung diente zusammen mit der von S. Reher gelieferten Datei "customizeSidebar.js" dazu, den Navigationsbereich "Werkzeuge" in der Sidebar entsprechend dem Anmeldestatus zu manipulieren - siehe hierzu [[#Sidebar_anpassen_.28Wiki-Code.2C_JS.29|Sidebar anpassen]]. Dies funktionierte allerdings nur, wenn beim Browser JavaScript aktiviert war.
Datei "ContactPage_body.php" vor Zeile 185 und nach Zeile 217+11 (228), vor Zeile 341+11+1 (353), nach Zeile 393+11+1+6 (411):
<pre>
...
// Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
if ( $this->useCaptcha() ) {
  $formItems['Captcha'] = array(
    'label-message' => 'captcha-label',
    'type' => 'info',
    'default' => $this->getCaptcha(),
    'raw' => true,
  );
}


==== sichtbare Toolbox-Menüpunkte ====
$form = new HTMLForm( $formItems, $this->getContext(), "contactpage-{$this->formType}" );
 
...
* SalzWiki: alle Gruppen und User
public function processInput( $formData ) {
** Druckversion
  global $wgUserEmailUseReplyTo, $wgPasswordSender;
  global $wgCaptcha; // Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
...
// Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
if ( $this->useCaptcha() && !$wgCaptcha->passCaptcha() ) {
  // TODO proper i18n message
  return wfMessage( 'contactpage-captcha-error' )->plain();
}
// Stolen from Special:EmailUser
$error = '';
...
  private static function getYesOrNoMsg( $value ) {
    return wfMessage( $value ? 'htmlform-yes' : 'htmlform-no' )->inContentLanguage()->text();
  }
  // Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
  /**
  * @return boolean True if CAPTCHA should be used, false otherwise
  */
  private function useCaptcha() {
    global $wgCaptchaClass, $wgCaptchaTriggers;
    return $wgCaptchaClass &&
      isset( $wgCaptchaTriggers['contactpage'] ) &&
      $wgCaptchaTriggers['contactpage'] &&
      !$this->getUser()->isAllowed( 'skipcaptcha' );
  }
  // Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
  /**
  * @return string CAPTCHA form HTML
  */
  private function getCaptcha() {
    // NOTE: make sure we have a session. May be required for CAPTCHAs to work.
    wfSetupSession();
    $captcha = ConfirmEditHooks::getInstance();
    $captcha->trigger = 'contactpage';
    $captcha->action = 'contact';
    return '<div class="captcha">' .
      $captcha->getForm() .
      "</div>\n";
  }
}
</pre>


* SaltWiki: alle Gruppen und User
==== LocalSettings.php ====
** Printable version
<pre>
// Version 2.2 für MediaWiki 1.25
#wfLoadExtension("ContactPage.php");
// Version 2.2 für MediaWiki 1.23
require_once( "$IP/extensions/ContactPage/ContactPage.php" );
$wgContactConfig['default'] = array(
  'RecipientUser' => 'Hornemann', //'WikiUser' // Must be the name of a valid account //vormals $wgContactUser
  'SenderName'=> 'Kontaktformular ' . $wgSitename, //"Contact Form " // "Contact Form on" needs to be translated //vormals $wgContactSenderName
  'SenderEmail'=> null // Defaults to $wgPasswordSender, may be changed as required
  'RequireDetails'=> true, // Whether users will be required to supply a name and an email address on Special:Contact
  'IncludeIP'=> false, // Whether the form will include a checkbox offering to put the IP address of the submitter in the subject line
  'AdditonalFields'=> array(
    'Text'=> array(
      'label-message'=> 'E-Mail-Nachricht', //'e-mail-message' //'emailmessage',
      'type'=> 'textarea',
      'rows'=> 20,
      'cols'=> 80,
      'required' => true, //Pflichtfeld
    ),
  ),
  // Added in MW 1.26
  #'DisplayFormat' => 'table', // See HTMLForm documentation for available values.
  #'RLModules' => array(), // Resource loader modules to add to the form display page.
  #'RLStyleModules' => array(), // Resource loader CSS modules to add to the form display page.
);
</pre>


* Repository: alle Gruppen und User
=== ControlStructureFunctions, LOParserFunctions ===
** Printable version


==== ausgeblendete Toolbox-Menüpunkte ====
"ControlStructureFunctions" und "LOParserFunctions" werden nicht mehr installiert, da sie ab MW1.12 in der Erweiterung "ParserFunctions", die seit MW1.18 Teil des MW-Kerns ist, vereinigt wurden.


* SalzWiki: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
"LOParserFunctions" enthält in den neueren Versionen alle Bestandteile aus der Erweiterung "ParserFunctions" ohne die Teile von "ControlStructureFunctions", so dass theoretisch "ControlStructureFunctions" und "LOParserFunctions" gemeinsam statt "ParserFunctions" eingesetzt werden können.
** "Links auf diese Seite" (Special:WhatLinksHere/Main_Page)
** "Änderungen an verlinkten Seiten" (Spezial:%C3%84nderungen_an_verlinkten_Seiten)
** "Hochladen" (Special:Upload)
** "Spezialseiten" (Special:SpecialPages)
** "Permanenter Link" (Main_page&oldid=921)
** "Seiteninformationen" ([Seitentitel]&action=info])


* SaltWiki: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
"ControlStructureFunctions" war in älteren MW-Versionen notwendig für Anweisungen mit #if, #switch, #while und #do-while (z. B. beim Einsetzen des Seitentitels im Kopf von Vorlage:Infobox_Salz und bei den Hilfe-Seiten.
** "What links here" (Special:WhatLinksHere/Main_Page)
** "Related changes" (Special:RecentChangesLinked)
** "Hochladen" (Special:Upload)
** "Spezialseiten" (Special:SpecialPages)
** "Permanent link" (Main_page&oldid=921)
** "Page information" ([Seitentitel]&action=info])


* Repository: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
In den Salz-Wikis mit MW1.16 gab es noch Probleme mit der Erweiterung "ParserFunctions". Möglicherweise ist eine Erklärung dafür unter https://www.mediawiki.org/w/index.php?oldid=469082 zu finden:
** "Links auf diese Seite" (Special:WhatLinksHere/Main_Page)
** "Änderungen an verlinkten Seiten" (Spezial:%C3%84nderungen_an_verlinkten_Seiten)
** "Datei Hochladen" (Special:Upload)
** "Spezialseiten" (Spezial:Spezialseiten)
** "Permanent link" (Main_page&oldid=9522)
** "Seiteninformationen" ([Seitentitel]&action=info])
 
=== Lingo ===
 
Die Erweiterung "Lingo" wird bei den Wikis seit dem Upgrade auf MW 1.23 als Ersatz für die Erweiterung "Terminology" verwendet und kann heruntergeladen werden bei https://www.mediawiki.org/wiki/Extension:Lingo.
 
Die Dateien werden entpackt in das Verzeichnis "extensions\Lingo".
 
In der Datei "LocalSettings.php" folgende Zeile einfügen:
<pre>
<pre>
wfLoadExtensions('Lingo');
Don't These Parser Functions Already Exist?
Yes and no. The ParserFunctions extension has
#if, #ifeq, #ifexpr, #switch, and #ifexist,
and Loop Functions extension has
#for and #foreach.
The limitation of all those parser functions is
that wiki markup is parsed before any parameters are passed to the underlying function.
These functions bypass that limitation through character escapes (see below),
and allow wiki markup to be parsed after the parameters have been passed.
</pre>
</pre>


=== Math (Wiki-Code) ===
Für weitere Informationen siehe
* LOParserFunctions: https://www.mediawiki.org/w/index.php?oldid=2140215
* ControlStructureFunctions: https://www.mediawiki.org/w/index.php?oldid=469082


"Math" kann heruntergeladen werden von https://www.mediawiki.org/wiki/Extension:Math/de. Es ist inzwischen eine Erweiterung; bei MW1.16 wurde hingegen die Datei "[wikiname]\includes\Math.php" angepasst.
=== CreativeCommonsRdf ===


Die Erweiterung "Math" ist für die Darstellung von Formeln erforderlich und nutzt standardmäßig "texvc" (TeX validator and converter), wobei das mitgelieferte "texvc" nur unter Linux genutzt werden kann und für Windows erst kompiliert werden muss und problembehaftet ist.
Die Erweiterung sollte ab MW-Version 1.19 die Variable "$wgEnableCreativeCommonsRdf" in der Datei "LocalSettings.php" ersetzen, hat aber immer noch Beta-Status (Stand 2018-10-12, 2015-09-21) und wird deshalb nicht verwendet, zumal der Beispiel-Code für die Einbindung nicht mehr vom MW-Kern unterstützt wird.  


Somit scheidet "texvc" unter Windows aus. Stattdessen muss für die Nutzung von GhostScript, ImageMagick und MikTeX wie bei MW1.16 der Wiki-Code angepasst und die Klasse "LatexRender" in der Datei "Math_SW.php" mit Anpassungen als Klasse "MathLatexRender" weiterverwendet werden. Der Quelltext von "LatexRender" für alte MediaWikiVersionen wie MW1.16 steht zur Verfügung bei "https://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Windows/math.php".
Die 3 Dateien der Erweiterung wurden zuletzt bearbeitet 2012-10-02, 2011-12-13 und 2011-05-26. Sie können heruntergeladen werden bei
* https://www.mediawiki.org/wiki/Extension:CreativeCommonsRdf
* https://phabricator.wikimedia.org/diffusion/SVN/browse/trunk/extensions/CreativeCommonsRdf/


Getestet werden kann die Erweiterung "Math" über die Kommandozeile:
=== DynamicPageList ===
<pre>
D:
cd xampp\htdocs\[wikiname]
D:\xampp\php\php.exe tests\phpunit\phpunit.php extensions\Math\tests\
</pre>


Zur Installation und Konfiguration von GhostScript, ImageMagick und MikTeX siehe [[#Eingabe_von_Formeln_mittels_Tex_.28Wiki-Code.29| Eingabe_von_Formeln_mittels_Tex_(Wiki-Code)]]
Es gibt 3 Erweiterungen mit der Bezeichnung "DynamicPageList", wobei die erste mit dem Alias "Intersection" nicht verwendet wird (siehe auch https://www.mediawiki.org/wiki/Extension:DPL).


==== Symbol im Editor ====
==== MediaWiki 1.27 ====


Bei Verwendung des einfachen Standard-Editors wird diesem automatisch ein Symbol für "Math" mit den entsprechenden Funktionen hinzugefügt.
* Für MW 1.27 wird die Erweiterung "DynamicPageList" mit dem Alias "DynamicPageList3" von https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:DynamicPageList3 heruntergeladen und nach dem Extrahieren in das Verzeichnis "extensions" des jeweiligen Wikis extrahiert.
* Einfügen in der Datei "LocalSettings.php":
<pre>wfLoadExtension('DynamicPageList3');</pre>


Bei Verwendung der Erweiterung "WikiEditor" muss die Editor-Erweiterung angepasst werden, um das "Math"-Symbol mit den Bearbeitungsfunktionen nutzen zu können.
=== Inline SVG Extension ===


==== Installation "Math" ====
Diese Erweiterung wird ab Mediawiki 1.23 nicht mehr verwendet, weil die üblichen Browser inzwischen SVG-Elemente darstellen können.


* Die heruntergeladene Erweiterung entpacken in das Verzeichnis "extensions\"
Die php-Datei "SVGtag.php" sorgt dafür, dass Inline-SVG-Code im Upload-Verzeichnis gespeichert und in einem "iframe" geladen wird. Dies ist erforderlich für ältere Browser, insbesondere für Internet Explorer bis einschließlich Version 8.
* Die Dateien "Math.php" und "MathRenderer.php" umbenennen in "Math_original.php" und "MathRenderer_original.php"; davon Kopien "Math.php" und "MathRenderer.php" erstellen und die Kopien wie nachfolgend beschrieben anpassen
* Die Erweiterung in der Datei "LocalSettings.php" einbinden<pre>wfLoadExtensions( 'Math' );</pre>
* Existenz der Datenbanktabelle "math" überprüfen, ansonsten erstellen
** entweder SQL-Befehl für MySQL/MariaDB aus der Datei "\extensions\Math\db\math.sql" mit phpMyAdmin ausführen
** oder per Kommandozeile eine Aktualisierung ausführen, aber nur wenn die Tabelle noch nicht exisitiert: <pre>D:\xampp\php\php.exe D:\xampp\htdocs\[wikiname]\maintenance\update.php</pre>


==== ImageMagick und MikTeX für Math statt Texvc ====
* Extension unter http://www.mediawiki.org/wiki/Extension:Inline_SVG_extension herunterladen.
* Datei in das Verzeichnis "extensions" kopieren
* In der Datei "LocalSettings.php" einfügen:
<pre>require_once("$IP/extensions/SVGtag.php");</pre>


Bei MW1.23 soll zwar "Math" ohne "ImageMagick" verwendet werden (siehe https://www.mediawiki.org/Manual:Running_MediaWiki_on_Windows#ImageMagick), doch funktioniert dies nicht mit "texvc" unter Windows. Deshalb wird in der Datei "LocalSettings.php" weiterhin "ImageMagick" mit "true" aktiviert statt mit "false" deaktiviert und außerdem "Texvc" für die Datei "Math.hooks.php" deaktiviert:
=== Interwiki ===
<pre>
$wgUseImageMagick = true;
#ImageMagick
$wgImageMagickConvertCommand = 'D:\texmf\imagick\convert.exe';
$wgImageMagickIdentifyCommand = 'D:\texmf\imagick\identify.exe';
#TeX
$wgLaTexCommand = 'D:\texmf\miktex\bin\latex.exe';
$wgDvipsCommand = 'D:\texmf\miktex\bin\dvips.exe';
$wgSVGConverter = 'ImageMagick';
$wgSVGConverters = array(
  'ImageMagick' => '"D:\texmf\imagick\convert.exe" -background white $input PNG:$output',
);
require_once "$IP/extensions/Math/Math.php";
$wgMathDisableTexFilter = true; // in Math.hooks.php
</pre>


===== Anpassungen "Math.php" und "MathRenderer.php" (Wiki-Code) =====
Die Erweiterung "Interwiki" ist in MediaWiki seit Version 1.21 enthalten und hieß ehemals "SpecialInterwiki", bevor sie umbenannt wurde. Sie ist in MW1.31 standardmäßig aktiviert und wird in SalzWiki, SaltWiki sowie im Repositorium verwendet. Die Erweiterung kann ansonsten bei https://www.mediawiki.org/wiki/Extension:Interwiki heruntergeladen und in das Verzeichnis "[wikiname]\extensions\Interwiki" extrahiert werden.
* in der Datei "Math.php" zwischen Z.191 und Z.192 die Klasse "LatexRender" hinzufügen
: <pre>#$wgAutoloadClasses['MathLatexRender.php'] // für HAWK HHG eingefügt 2016-04-25</pre>
* in der Datei "MathRenderer.php" bei der Funktion "getRenderer(...)" in Z.122f bei "default:"
: <code>
: default: // für HAWK HHG angepasst 2016-04-25
: $renderer = new MathLatexRender( $tex, $params ); #$renderer = new MathTexvc( $tex, $params );
: </code>
* von den beiden Dateien eine Sicherungskopie "Math_SW.php" und "MathRender_SW.php" vorsorglich für Änderungen durch Wiki-Updates speichern


===== Anpassungen Klasse "LatexRender" =====
Diese Erweiterung fügt die Seite Special:Interwiki zu Mediawiki hinzu, um die Interwiki-Tabelle sehen und editieren zu können. Änderungen werden auch in der Datenbank-Tabelle "interwiki" übernommen.


In der alten Datei "Math.php" bzw. "Math_SW.php" waren 2 Klassen, nämlich die Klasse "MathRenderer" und die Klasse "LatexRender" enthalten, wobei "MathRenderer" im Vergleich zum Original nur rudimentär vorhanden war, um ein Objekt der Klasse, "LatexRender" zu erzeugen.
Mit der InterWiki-Tabelle kann man einerseits einfach zu Inhalten in anderen Wikis verlinken, auch zu Wikipedia, andererseits ist es damit möglich durch das Setzen von $wgEnableScaryTranscluding = true; Inhalte eines anderen Wikis zu "transcludieren", siehe auch https://www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding.


Aus diesen beiden Klassen wird für MW1.23 die Klasse "MathLatexRender" als Sub-Klasse der Klasse "MathRenderer" aus der Erweiterung "Math.
Allerdings kommt es mit MW1.31 bei Seiten mit Vorschaubildern (Thumbnails) aus dem Repositorium zu Fehlermeldungen, wenn der Standardwert von $wgUseImageResize=true nicht angepasst wird; siehe auch https://www.mediawiki.org/wiki/Manual:$wgUseImageResize.


Anstatt der Klasse "MathRenderer" unterhalb der Klasse "LatexRender" wird nun in der Klasse "LatexRender" die Funktion "renderMath()" durch Umbenennung und Anpassung als Konstruktor-Funktion "__constructor(...)" verwendet, wobei die Konstruktor-Funktion auch die Funktion "LatexRender(...)", die bisher zur Initialisierung als Konstruktor diente, ersetzt.
In der Datei "LocalSettings.php" eines jeden Wikis ist einzufügen:
<pre>
...
$wgEnalbeUploads = false; # Salzwiki/Saltwiki: false, Repository: true
## Vorschaubilder von Repositorium-Dateien benötigen in SalzWiki/SaltWiki "UseImageResize=false"
$wgUseImageResize = false; # Salzwiki/Saltwiki: false, Repositorium: true
$wgUseImageMagick = true; # Salzwiki/Saltwiki: true, Repository: false
...
#$wgTranscludeCacheExpiry = 60;
$wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', @filemtime(__FILE__)) );
...
#$wgLocalInterwiki = strtolower( $wgSitename );
$wgLocalInterwikis = array("salzwiki", "saltwiki", "repository");
...
## Zulassen von Interwiki-Verweisen, für MW1.23 statt ".../Interwiki/SpecialInterwiki.php" bei MW1.16
## to allow interwiki-linking, für Version MW1.23 anderer Dateiname
#require_once("$IP/extensions/Interwiki/SpecialInterwiki.php"); ## MW1.16
#require_once("$IP/extensions/Interwiki/Interwiki.php"); ## MW1.23, ist bei MW1.31 Standard-Erweiterung
$wgEnableScaryTranscluding = true; ## Seiten von anderen Wikis können eingebunden werden
...
## to allow editing Special:Interwiki
$wgGroupPermissions['*']['interwiki'] = false;
$wgGroupPermissions['sysop']['interwiki'] = true; ## nur sysops können die InterWiki-Tabelle ändern und sehen
</pre>


Hinzu kommt eine neue Funktion "render()", die durch die Definition in der Datei "MathRenderer.php" erforderlich ist.
==== Anpassungen für geänderte Server-Adresse ====
 
Für die Umstellung der Wikis von IP-Adressen auf Domain-Adressen sind die Datenbank-Einträge der Tabelle "..._interwiki" zu bearbeiten. Hierzu wird unter "Daten und Werkzeuge => Interwikidaten ansehen und bearbeiten" bzw. "Data and Tools => View and edit interwiki data" die entsprechende Spezial-Seite "Spezial:Interwikitabelle" bzw. "Special:Interwiki" aufgerufen.


Zudem werden die Variablen $url und $text als Klassen-Variablen definiert.
* Alte Adressen:
** repository | http://193.175.110.91/repository.hawk-hhg.de/index.php/$1
** saltwiki | http://193.175.110.91/saltwiki/index.php/$1
** salzwiki | http://193.175.110.91/salzwiki/index.php/$1


Außerdem wird in der Funktion "cleanTemporaryDirectory()" eine Ergänzung vorgenommen, damit vor dem Löschen der Dateien deren Existenz überprüft wird, um Warnungen zu vermeiden.
* Neue Adressen:
** repository | https://repository.hawk-hhg.de/index.php/$1
** saltwiki | https://saltwiki.net/index.php/$1
** salzwiki | https://salzwiki.de/index.php/$1


Zusätzlich werden für neuere PHP-Versionen bei "htmlentities(...)" die Parameter für XHTML und UTF-8 hinzugefügt.
==== Anpassungen für HTTPS ====


Bei InterWikis in der Tabelle, für die sowohl "Als lokales Wiki definiert" als auch "Einbinden zulässig" aktiviert ist, die URL von "http" zu "https" ändern. Beispiel:
<pre>
<pre>
/**
wikipedia | https://de.wikipedia.org/wiki/$1 | ja | ja
* LaTeX Rendering Class
</pre>
* Copyright (C) 2003  Benjamin Zeiss <zeiss@math.uni-goettingen.de>
 
* -----------------------------------------------------------------------
=== JavaScript ===
* Changed to MathLatexRender Class for HAWK HHG by Gunnar Werner (C) 2016
 
* to be used with MW 1.23 LTS and extension Math REL-1_23...
Entfällt bei MW 1.23.11 LTS und wird ersetzt durch eine Anpassung in der Datei "skins\MonoBook.php".
* for Windows with GhostScript+ImageMagick+MikTeX instead of Texvc
 
* Notice 1: In file Math.php loading this class has to be added:
Die Erweiterung hat den Status "unmaintained" (Stand 2015-09-15); die Version 3.0.8 (2012-02-15) kann wegen einer ungültigen Internetadresse nicht heruntergeladen werden, doch gibt es auf der Internetseite https://www.organicdesign.co.nz/Extension:Javascript den Hinweis, dass die Erweiterung obsolet ist, seitdem MediaWiki den ResourceLoader bereitstellt, siehe https://www.mediawiki.org/wiki/ResourceLoader.
* $wgAutoloadClasses['MathLatexRender'] = $dir . 'MathLatexRender.php';
 
* Notice 2: In file MathRenderer.php new default object $renderer has to be changed:
Diese Erweiterung diente zusammen mit der von S. Reher gelieferten Datei "customizeSidebar.js" dazu, den Navigationsbereich "Werkzeuge" in der Sidebar entsprechend dem Anmeldestatus zu manipulieren - siehe hierzu [[#Sidebar_anpassen_.28Wiki-Code.2C_JS.29|Sidebar anpassen]]. Dies funktionierte allerdings nur, wenn beim Browser JavaScript aktiviert war.
* $renderer = new MathLatexRender( $tex, $params ); #$renderer = new MathTexvc( $tex, $params );
 
* -----------------------------------------------------------------------
==== sichtbare Toolbox-Menüpunkte ====
*
 
* This library is free software; you can redistribute it and/or
* SalzWiki: alle Gruppen und User
* modify it under the terms of the GNU Lesser General Public
** Druckversion
* License as published by the Free Software Foundation; either
 
* version 2.1 of the License, or (at your option) any later version.
* SaltWiki: alle Gruppen und User
...
** Printable version
* @author Benjamin Zeiss <zeiss@math.uni-goettingen.de>
* => @author Gunnar Werner for HAWK HHG <gunnar.werner@hawk-hhg.de>
* @version v0.8 => v0.8.2016.05
* @package latexrender => class MathLatexRender for extension Math
...
*/
...
// "extends MathRenderer" new by changes 2016
class MathLatexRender extends MathRenderer {
  ...
  // new by changes 2016
  var $url = "";
  var $text = "";
  ...
  /* function replaced with function __constructor() below by changes 2016
  function LatexRender($picture_path,$picture_path_httpd,$tmp_dir) {
    ...
  }
  */
  // new constructor combining old function LatexRender()
  // and function renderMath() from old class MathRenderer
  // by changes 2016
  public function __construct ($latex_formula, $params = array() ) {
    global $wgMathDirectory,
          $wgMathPath,
          $wgTmpDirectory,
          $wgLaTexCommand,
          $wgDvipsCommand,
          $wgImageMagickConvertCommand,
          $wgImageMagickIdentifyCommand;


    $latex_formula = '\displaystyle ' . $latex_formula;
* Repository: alle Gruppen und User
** Printable version


    // from old function LatexRender()
==== ausgeblendete Toolbox-Menüpunkte ====
    $this->_picture_path = $wgMathDirectory;
    $this->_picture_path_httpd = $wgMathPath;
    $this->_tmp_dir = $wgTmpDirectory;
    $this->_tmp_filename = md5(rand());


    // check Math dir
* SalzWiki: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
    if(!file_exists($wgMathDirectory)){@mkdir($wgMathDirectory);}
** "Links auf diese Seite" (Special:WhatLinksHere/Main_Page)
    if(!file_exists($wgTmpDirectory)){@mkdir($wgTmpDirectory);}
** "Änderungen an verlinkten Seiten" (Spezial:%C3%84nderungen_an_verlinkten_Seiten)
** "Hochladen" (Special:Upload)
** "Spezialseiten" (Special:SpecialPages)
** "Permanenter Link" (Main_page&oldid=921)
** "Seiteninformationen" ([Seitentitel]&action=info])
 
* SaltWiki: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
** "What links here" (Special:WhatLinksHere/Main_Page)
** "Related changes" (Special:RecentChangesLinked)
** "Hochladen" (Special:Upload)
** "Spezialseiten" (Special:SpecialPages)
** "Permanent link" (Main_page&oldid=921)
** "Page information" ([Seitentitel]&action=info])
 
* Repository: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
** "Links auf diese Seite" (Special:WhatLinksHere/Main_Page)
** "Änderungen an verlinkten Seiten" (Spezial:%C3%84nderungen_an_verlinkten_Seiten)
** "Datei Hochladen" (Special:Upload)
** "Spezialseiten" (Spezial:Spezialseiten)
** "Permanent link" (Main_page&oldid=9522)
** "Seiteninformationen" ([Seitentitel]&action=info])
 
=== Lingo ===


    // Objects $latex and $url replaced with $this by changes 2016
Die Erweiterung "Lingo" wird bei den Wikis seit dem Upgrade auf MW 1.23 als Ersatz für die Erweiterung "Terminology" verwendet und kann heruntergeladen werden bei https://www.mediawiki.org/wiki/Extension:Lingo.
    $this->_latex_path = $wgLaTexCommand;
    $this->_dvips_path = $wgDvipsCommand;
    $this->_convert_path = $wgImageMagickConvertCommand;
    $this->_identify_path = $wgImageMagickIdentifyCommand;


    $this->url = $this->getFormulaURL($latex_formula);
Die Dateien werden entpackt in das Verzeichnis "extensions\Lingo".


    // htmlentities for newer PHP versions changed 2016
In der Datei "LocalSettings.php" folgende Zeile einfügen:
    $alt_latex_formula = htmlentities($latex_formula, ENT_QUOTES|ENT_XHTML, "UTF-8");
<pre>
    $alt_latex_formula = str_replace("\r", "", $alt_latex_formula);
wfLoadExtensions('Lingo');
    $alt_latex_formula = str_replace("\n", "", $alt_latex_formula);
</pre>
    $alt_latex_formula = str_replace('\displaystyle ', "", $alt_latex_formula);


    if($this->url != false){
=== Math (Wiki-Code) ===
      $this->text = '<img src="'.$this->url.'" title="'.$alt_latex_formula.'" alt="'.$alt_latex_formula.'" />';
    }
    else{
      $this->text = '[Unparseable or potentially dangerous latex formula. Error '.$this->_errorcode.' '.$this->_errorextra.']';
    }
  }
  ...
  // new for abstract function in "MathRenderer.php" by changes 2016
  public function render(){
    return $this->text."\n";
  }
  ...
  function renderLatex($latex_formula) {
    ...
    // create temporary dvi file
    ...
    $status_code = exec($command);
    // added checking file by changes 2016
    if (!$status_code || !file_exists($this->_tmp_filename.".dvi")) {
      ...
      $this->_errorcode = 4;
      return false;
    }
    ...
  }
  ...
  function cleanTemporaryDirectory() {
    ...
    // check existence before deleting to prevent warnings added by changes 2016
    /*
    unlink($this->_tmp_dir."/".$this->_tmp_filename.".tex");
    ...
    */
    $file_types = array("tex", "aux", "log", "dvi", "ps", $this->_image_format);
    foreach($file_types as $f_typ){
      $tmp_file = $this->_tmp_dir."/".$this->_tmp_filename.".".$f_typ;
      if(file_exists($tmp_file)){
        unlink($tmp_file);
      }
      $tmp_file = "";
    }


    chdir($current_dir);
"Math" kann heruntergeladen werden von https://www.mediawiki.org/wiki/Extension:Math/de. Es ist inzwischen eine Erweiterung; bei MW1.16 wurde hingegen die Datei "[wikiname]\includes\Math.php" angepasst.
  }
}
</pre>


==== LaTeXML für Math statt Texvc ====
Die Erweiterung "Math" ist für die Darstellung von Formeln erforderlich und nutzt standardmäßig "texvc" (TeX validator and converter), wobei das mitgelieferte "texvc" nur unter Linux genutzt werden kann und für Windows erst kompiliert werden muss und problembehaftet ist.


Da LaTeXML nur bei einfachen Formeln funktioniert, kommt es nicht als Alternative zu Texvc in Betracht.
Somit scheidet "texvc" unter Windows aus. Stattdessen muss für die Nutzung von GhostScript, ImageMagick und MikTeX wie bei MW1.16 der Wiki-Code angepasst und die Klasse "LatexRender" in der Datei "Math_SW.php" mit Anpassungen als Klasse "MathLatexRender" weiterverwendet werden. Der Quelltext von "LatexRender" für alte MediaWikiVersionen wie MW1.16 steht zur Verfügung bei "https://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Windows/math.php".


In der Datei "readme" gibt es folgende Hinweise:
Getestet werden kann die Erweiterung "Math" über die Kommandozeile:
* Seit MW1.19 beschränken sich die Rendering-Optionen auf "Always PNG" und "Leave it as TeX".
<pre>
* Statt Bildern kann "MathML" mittels "LaTeXML" verwendet werden
D:
** Für LaTeXML ist "php5-curl" erforderlich; bei Windows ist es im Verzeichnis "\php\ext\" die Datei "php_curl.dll", die als Modul in der Datei "php.ini" eingebunden sein muss
cd xampp\htdocs\[wikiname]
** In der Datei "LocalSettings.php" wird LaTeXML für die Konvertierung zu MathML verwendet: "$wgMathUseLaTeXML = true;"
D:\xampp\php\php.exe tests\phpunit\phpunit.php extensions\Math\tests\
** In der Datei "LocalSettings.php" wird für anonyme Seitenaufrufe  angegeben: "$wgDefaultUserOptions['math'] = MW_MATH_LATEXML"
</pre>
** Empfohlen wird eine Core-Version von wmf/1.22wmf7 oder neuer
 
Zur Installation und Konfiguration von GhostScript, ImageMagick und MikTeX siehe [[#Eingabe_von_Formeln_mittels_Tex_.28Wiki-Code.29| Eingabe_von_Formeln_mittels_Tex_(Wiki-Code)]].


==== Texvc für Math kompilieren ====
==== Symbol im Editor ====


Für die Kompilierung ist "MinGW" gegenüber "Cygwin" vorzuziehen, weil es unabhängig von den dll-Dateien und deren MS-Lizenzen mit der MSVC-Runtime funktioniert (siehe http://stackoverflow.com/questions/771756/what-is-the-difference-between-cygwin-and-mingw).
Bei Verwendung des einfachen Standard-Editors wird diesem automatisch ein Symbol für "Math" mit den entsprechenden Funktionen hinzugefügt.


Da für "MinGW" keine verwertbare Ausgangsdatei zur Verfügung steht - , "makefile" wird nicht akzeptiert -, müssen "Cygwin" und "OCaml" (Version 4.02.3 32Bit + findlib + batteries) installiert werden (Dauer ca. 20 Min.). "OCaml" kann bei http://caml.inria.fr oder bei http://protz.github.io/ocaml-installer/ heruntergeladen werden.
Bei Verwendung der Erweiterung "WikiEditor" muss die Editor-Erweiterung angepasst werden, um das "Math"-Symbol mit den Bearbeitungsfunktionen nutzen zu können.


'''Cygwin'''
==== Installation "Math" ====


Während der Installation von "OCaml" in das Verzeichnis "D:\texmf\" wird zusätzlich "Cygwin" im Verzeichnis "C:\cygwin\" installiert, sofern noch nicht vorhanden.
* Die heruntergeladene Erweiterung entpacken in das Verzeichnis "extensions\"
* Die Dateien "Math.php" und "MathRenderer.php" umbenennen in "Math_original.php" und "MathRenderer_original.php"; davon Kopien "Math.php" und "MathRenderer.php" erstellen und die Kopien wie nachfolgend beschrieben anpassen
* Die Erweiterung in der Datei "LocalSettings.php" einbinden<pre>wfLoadExtensions( 'Math' );</pre>
* Existenz der Datenbanktabelle "math" überprüfen, ansonsten erstellen
** entweder SQL-Befehl für MySQL/MariaDB aus der Datei "\extensions\Math\db\math.sql" mit phpMyAdmin ausführen
** oder per Kommandozeile eine Aktualisierung ausführen, aber nur wenn die Tabelle noch nicht exisitiert: <pre>D:\xampp\php\php.exe D:\xampp\htdocs\[wikiname]\maintenance\update.php</pre>


Für die Installation von "Cygwin" muss zum Herunterladen ein Mirror-Server ausgewählt werden, z. B. ftp://ftp.hawo.stw.uni-erlangen.de.
==== ImageMagick und MikTeX für Math statt Texvc ====


Vor dem Kompilieren müssen Dateien angepasst werden (siehe https://www.mediawiki.org/wiki/Texvc#Windows und https://www.mediawiki.org/wiki/MWWRender.ml):
Bei MW1.23 soll zwar "Math" ohne "ImageMagick" verwendet werden (siehe https://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Windows#ImageMagick), doch funktioniert dies nicht mit "texvc" unter Windows. Deshalb wird in der Datei "LocalSettings.php" weiterhin "ImageMagick" mit "true" aktiviert statt mit "false" deaktiviert und außerdem "Texvc" für die Datei "Math.hooks.php" deaktiviert:
* \Math\math\render.ml Z.42 und Z.48 (2 Backslashes statt einem Schrägstrich)
<pre>
: <pre>...finalpath^"\\"^md5...</pre>
## Vorschaubilder von Repositorium-Dateien benötigen in Salzwiki/Saltwiki "UseImageMagick=false"
: <pre>...finalpath^"\\"^md5...</pre>
$wgUseImageResize = false; # SalzWiki/SaltWiki: false, Repository: true;
$wgUseImageMagick = true; # Salzwiki/Saltwiki: true, Repository: auskommentiert
## ImageMagick
#$wgImageMagickConvertCommand = 'D:\texmf\imagick\convert.exe';
#$wgImageMagickIdentifyCommand = 'D:\texmf\imagick\identify.exe';
$wgImageMagickConvertCommand = 'D:/texmf/imagick/convert.exe';
$wgImageMagickIdentifyCommand = 'D:/texmf/imagick/identify.exe';
## TeX
#$wgLaTexCommand = 'D:\texmf\miktex\bin\latex.exe';
#$wgDvipsCommand = 'D:\texmf\miktex\bin\dvips.exe';
$wgLaTexCommand = 'D:/texmf/miktex/bin/latex.exe';
$wgDvipsCommand = 'D:/texmf/miktex/bin/dvips.exe';
$wgSVGConverter = 'ImageMagick';
$wgSVGConverters = array(
# 'ImageMagick' => '"D:\texmf\imagick\convert.exe" -background white $input PNG:$output',
  'ImageMagick' => '"D:/texmf/imagick/convert.exe" -background white $input PNG:$output',
);
require_once "$IP/extensions/Math/Math.php";
$wgMathDisableTexFilter = true; // in Math.hooks.php
</pre>


'''MinGW'''
==== Veränderungen bei wesentlichen Math-Klassen ====


"MinGW" (2013-10-26) kann als Installationsmanager, der während der Installation die ausgewählten "Packages" aus dem Internet lädt (Dauer ca. 10 Min.), heruntergeladen werden bei https://sourceforge.net/projects/mingw/files/ (Stand 2016-04-29).
* MW1.31 mit "class MathLaTeXML extends MathMathML" und "class MathRenderer"
* MW1.23 mit "class MathLatexRender extends MathRenderer"
* MW1.16 mit "class LatexRender" und "class MathRenderer"


"MinGW" wird als 32Bit-Version im Verzeichnis "C:\MinGW\" installiert und wird nicht in der Systemsteuerung bei den installierten Programmen aufgelistet. Das Programm-Unterverzeichnis "bin\" muss bei der Umgebungsvariablen "Path" hinzugefügt und der Server danach neu gestartet werden.
==== Restbase-Fehler ====


Im Installationsmanager bei <del>"Basic Setup"</del> "All Packages" alle Packages von "MinGW", aber nicht "MSYS" aktivieren. Danach im Menü "Installation => Apply changes" auswählen.
Bei MW1.31 erscheint beispielsweise auf der Seite https://www.salzwiki.de/index.php/Hilfe:Latex eine Fehlermeldung "Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server ...". Dies kann folgende Ursachen haben:
* RestbaseURL-Angabe fehlt, siehe https://www.mediawiki.org/wiki/Topic:Tqkr5mdviskc8fmk
* HTTP/2-Standard auf dem eigenen Server, siehe https://www.mediawiki.org/w/index.php?title=Topic:Uo3kkmmop1jj9vhw&topic_showPostId=v2pfwaghxx0fmu0c#flow-post-v2pfwaghxx0fmu0c


Kompilieren (siehe auch http://www.mingw.org/wiki/mingw_for_first_time_users_howto):
Folgende RestbaseURL-Angabe in der Datei "LocalSettings.php" zeigte keine Wirkung:
* Die DOS-Kommandozeile als Administrator öffnen
* zum "Math"-Verzeichnis wechseln
* Befehl zum Kompilieren eingeben
<pre>
<pre>
C:\MinGW\bin\gcc makefile -o texvc.exe
wfLoadExtension("Math");
$wgMathDisableTexFilter = true; // in Math.hooks.php
$wgMathFullRestbaseURL= 'https://en.wikipedia.org/api/rest_';
</pre>
</pre>


Fehlermeldung: "Das Programm kann nicht gestartet werden, da libiconv-2.dll auf dem Computer fehlt."
Folgende Anpassung in der Datei "...\includes\libs\MultiHttpClient.php" in Z.378 zeigte keine Wirkung:
<pre>
#if ( preg_match( "/^(HTTP\/1\.[01]) (\d{3}) (.*)/", $header, $matches ) ) {
if ( preg_match( "/^(HTTP\/[12](?:\.[01])?) (\d{3}) (.*)/", $header, $matches ) ) {
...
</pre>


In "Systemsteuerung => Alle Systemsteuerungselemente => System => Erweiterte Systemeinstellungen => Umgebungsvariablen" bei "Path" am Ende einfügen:
===== Anpassungen "Math.php" und "MathRenderer.php" (Wiki-Code) =====
<pre>;C:\MinGW\bin\</pre>


=== MwEmbedSupport (JavaScript) ===
Anpassungen bei MW1.23 bzw. MW1.16:
* in der Datei "Math.php" zwischen Z.191 und Z.192 die Klasse "LatexRender" hinzufügen
: <pre>#$wgAutoloadClasses['MathLatexRender.php'] // für HAWK HHG eingefügt 2016-04-25</pre>
* in der Datei "MathRenderer.php" bei der Funktion "getRenderer(...)" in Z.122f bei "default:"
: <code>
: default: // für HAWK HHG angepasst 2016-04-25
: $renderer = new MathLatexRender( $tex, $params ); #$renderer = new MathTexvc( $tex, $params );
: </code>
* von den beiden Dateien eine Sicherungskopie "Math_SW.php" und "MathRender_SW.php" vorsorglich für Änderungen durch Wiki-Updates speichern


Die Erweiterung wird bei MW1.31 nicht mehr installiert. Sie wurde bis MW1.30 für die Wiedergabe von Videodateien mit der Erweiterung [[#TimedMediaHandler (fehlerhaft, JavaScript)|"TimedMediaHandler"]] benötigt und funktioniert nur mit JavaScript.
===== Anpassungen Klasse "LatexRender" =====


Ab MW1.31 oder MW1.32 ist die Erweiterung in der Erweiterung "TimedMediaHandler" enthalten, die Angaben variieren:
In der alten Datei "Math.php" bzw. "Math_SW.php" bei MW1.16 waren 2 Klassen, nämlich die Klasse "MathRenderer" und die Klasse "LatexRender" enthalten, wobei "MathRenderer" im Vergleich zum Original nur rudimentär vorhanden war, um ein Objekt der Klasse, "LatexRender" zu erzeugen.
# https://www.mediawiki.org/wiki/Extension:MwEmbedSupport: ab MW1.32
# https://www.mediawiki.org/wiki/Extension:TimedMediaHandler: ab MW1.31


Die neueste Version 0.3.0 mit dem Datum 2014-04-02 (Stand 2018-10-12) kann aus dem MW-Archiv heruntergeladen werden bei https://www.mediawiki.org/w/index.php?oldid=2734400.
Aus diesen beiden Klassen wird für MW1.23 die Klasse "MathLatexRender" als Sub-Klasse der Klasse "MathRenderer" aus der Erweiterung "Math".


==== Einschränkung ====
Anstatt der Klasse "MathRenderer" unterhalb der Klasse "LatexRender" wird nun in der Klasse "LatexRender" die Funktion "renderMath()" durch Umbenennung und Anpassung als Konstruktor-Funktion "__constructor(...)" verwendet, wobei die Konstruktor-Funktion auch die Funktion "LatexRender(...)", die bisher zur Initialisierung als Konstruktor diente, ersetzt.


Die Version REL1.27 für MW1.27 funktionierte nicht, weil die Datei "extension.json" fehlt. Es funktionierten die Versionen REL1.29 und REL1.30; eingesetzt wurde REL1.30.
Hinzu kommt eine neue Funktion "render()", die durch die Definition in der Datei "MathRenderer.php" erforderlich ist.


=== OggHandler (JavaScript) ===
Zudem werden die Variablen $url und $text als Klassen-Variablen definiert.


Die Erweiterung wird nicht mehr installiert, da sie ab Mediawiki 1.24 nicht mehr unterstützt wird. Es wird die Erweiterung "TimedMediaHandler" empfohlen.
Außerdem wird in der Funktion "cleanTemporaryDirectory()" eine Ergänzung vorgenommen, damit vor dem Löschen der Dateien deren Existenz überprüft wird, um Warnungen zu vermeiden.


Diese Erweiterung diente zum Darstellen von Videodateien in SalzWiki-Artikeln. Da es sich beim OGG-Format um ein freies Format handelt, benötigt man keine Lizenz zum Darstellen der Inhalte.
Zusätzlich werden für neuere PHP-Versionen bei "htmlentities(...)" die Parameter für XHTML und UTF-8 hinzugefügt.
'''Es ist noch zu klären, ob eventuell das MPEG Format für eine Hochschulanwendung lizenzfrei sein könnte.'''
 
'''Für die Erweiterung sind "PEAR" und "FFmpeg" erforderlich. '''
*"PEAR" ist in der PHP-Installation des Servers enthalten.
*"FFmpeg" ist herunterzuladen von heise.de und wird dann gespeichert unter "D:\ffmpeg-wiki\"


Installation der Erweiterung:
MW1.16 mit "class LatexRender" und "class MathRenderer"
* Extension unter http://www.mediawiki.org/wiki/Extension:OggHandler herunterladen.
MW1.23 mit "class MathLatexRender extends MathRenderer":
* Extrahieren der Dateien nach extensions/OggHandler
* In der Datei "LocalSettings.php" einfügen:
<pre>
<pre>
## Repository: OggHandler oder MwEmbedSupport und TimedMediaHandler
/**
## OggHandler nur bis MW 1.23, danach MwEmbedSupport und TimedMediaHandler
* LaTeX Rendering Class
wfLoadExtensions( 'OggHandler' );
* Copyright (C) 2003  Benjamin Zeiss <zeiss@math.uni-goettingen.de>
# FFmpeg auskommentiert, solange kostenfreie Lizenz für Hochschule ungeklärt ist
* -----------------------------------------------------------------------
#$wgFFmpegLocation = "D:\ffmpeg-wiki\bin\ffmpeg";
* Changed to MathLatexRender Class for HAWK HHG by Gunnar Werner (C) 2016
</pre>
* to be used with MW 1.23 LTS and extension Math REL-1_23...
* for Windows with GhostScript+ImageMagick+MikTeX instead of Texvc
* Notice 1: In file Math.php loading this class has to be added:
* $wgAutoloadClasses['MathLatexRender'] = $dir . 'MathLatexRender.php';
* Notice 2: In file MathRenderer.php new default object $renderer has to be changed:
* $renderer = new MathLatexRender( $tex, $params ); #$renderer = new MathTexvc( $tex, $params );
* -----------------------------------------------------------------------
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
...
* @author Benjamin Zeiss <zeiss@math.uni-goettingen.de>
* => @author Gunnar Werner for HAWK HHG <gunnar.werner@hawk-hhg.de>
* @version v0.8 => v0.8.2016.05
* @package latexrender => class MathLatexRender for extension Math
...
*/
...
// "extends MathRenderer" new by changes 2016
class MathLatexRender extends MathRenderer {
  ...
  // new by changes 2016
  var $url = "";
  var $text = "";
  ...
  /* function replaced with function __constructor() below by changes 2016
  function LatexRender($picture_path,$picture_path_httpd,$tmp_dir) {
    ...
  }
  */
  // new constructor combining old function LatexRender()
  // and function renderMath() from old class MathRenderer
  // by changes 2016
  public function __construct ($latex_formula, $params = array() ) {
    global $wgMathDirectory,
          $wgMathPath,
          $wgTmpDirectory,
          $wgLaTexCommand,
          $wgDvipsCommand,
          $wgImageMagickConvertCommand,
          $wgImageMagickIdentifyCommand;


=== ParserFunctions ===
    $latex_formula = '\displaystyle ' . $latex_formula;


"ParserFunctions" ist seit MW1.18 im Kern enthalten und enthält seit MW1.15 die Funktionalitäten von "ControlStructureFunctions", "LOParserFunctions" und größtenteils auch von "StringFunctions".
    // from old function LatexRender()
    $this->_picture_path = $wgMathDirectory;
    $this->_picture_path_httpd = $wgMathPath;
    $this->_tmp_dir = $wgTmpDirectory;
    $this->_tmp_filename = md5(rand());


Die Erweiterung "ParserFunctions" soll in Kombination mit der Erweiterung "Loops", die die Erweiterung "Variables" nutzt, verwendet werden; siehe auch
    // check Math dir
# https://www.mediawiki.org/wiki/Help:ParserFunctions
    if(!file_exists($wgMathDirectory)){@mkdir($wgMathDirectory);}
# https://www.mediawiki.org/wiki/Extension:Loops
    if(!file_exists($wgTmpDirectory)){@mkdir($wgTmpDirectory);}


=== Piwik Integration ===
    // Objects $latex and $url replaced with $this by changes 2016
    $this->_latex_path = $wgLaTexCommand;
    $this->_dvips_path = $wgDvipsCommand;
    $this->_convert_path = $wgImageMagickConvertCommand;
    $this->_identify_path = $wgImageMagickIdentifyCommand;


Die Statistik-Anwendung "Piwik" wurde im Januar 2018 in "Matomo" umbenannt, weshalb ab März 2018 die Erweiterung [https://www.mediawiki.org/wiki/Extension:Matomo "Extension:Matomo"] zur Verfügung stehen und verwendet werden soll.
    $this->url = $this->getFormulaURL($latex_formula);


Die Erweiterung [https://www.mediawiki.org/wiki/Extension:Piwik_Integration "Extension:Piwik Integration"] für die Nutzung der Statistik-Anwendung "Piwik" kann ab den Versionen MW 1.14 und Piwik 0.4 verwendet werden.
    // htmlentities for newer PHP versions changed 2016
    $alt_latex_formula = htmlentities($latex_formula, ENT_QUOTES|ENT_XHTML, "UTF-8");
    $alt_latex_formula = str_replace("\r", "", $alt_latex_formula);
    $alt_latex_formula = str_replace("\n", "", $alt_latex_formula);
    $alt_latex_formula = str_replace('\displaystyle ', "", $alt_latex_formula);


* Dateien unter "extensions\Piwik\" speichern
    if($this->url != false){
* In der Datei "LocalSettings.php" einfügen:
      $this->text = '<img src="'.$this->url.'" title="'.$alt_latex_formula.'" alt="'.$alt_latex_formula.'" />';
<pre>
    }
##
    else{
## EXTENSIONS
      $this->text = '[Unparseable or potentially dangerous latex formula. Error '.$this->_errorcode.' '.$this->_errorextra.']';
...
    }
wfLoadExtension( 'Piwik' );
  }
$wgPiwikURL = $_SERVER['SERVER_NAME']."/analytics/piwik"; # ohne Protokoll-Angabe und ohne Schrägstrich am Ende!
  ...
$wgPiwikIDSite = "1"; # SalzWiki=1, SaltWiki=2, Repository=3
  // new for abstract function in "MathRenderer.php" by changes 2016
</pre>
  public function render(){
 
    return $this->text."\n";
=== QuestyCaptcha ===
  }
  ...
  function renderLatex($latex_formula) {
    ...
    // create temporary dvi file
    ...
    $status_code = exec($command);
    // added checking file by changes 2016
    if (!$status_code || !file_exists($this->_tmp_filename.".dvi")) {
      ...
      $this->_errorcode = 4;
      return false;
    }
    ...
  }
  ...
  function cleanTemporaryDirectory() {
    ...
    // check existence before deleting to prevent warnings added by changes 2016
    /*
    unlink($this->_tmp_dir."/".$this->_tmp_filename.".tex");
    ...
    */
    $file_types = array("tex", "aux", "log", "dvi", "ps", $this->_image_format);
    foreach($file_types as $f_typ){
      $tmp_file = $this->_tmp_dir."/".$this->_tmp_filename.".".$f_typ;
      if(file_exists($tmp_file)){
        unlink($tmp_file);
      }
      $tmp_file = "";
    }
 
    chdir($current_dir);
  }
}
</pre>


Das Plugin "QuestyCaptcha" ist bei MW 1.31 und 1.27 im Dateien-Paket der Erweiterung "ConfirmEdit" enthalten und muss nicht mehr zusätzlich heruntergeladen werden.
==== LaTeXML für Math statt Texvc ====


Zusätzlich zur Erweiterung [https://www.mediawiki.org/wiki/Extension:ConfirmEdit "Extension:ConfirmEdit"] wird für die Salzwikis als Plugin das Captcha [https://www.mediawiki.org/wiki/Extension:QuestyCaptcha "Extension:QuestyCaptcha"] gegen Spam-Anmeldungen genutzt, da das Standard-Mathe-Captcha nicht ausreichte.
Da LaTeXML nur bei einfachen Formeln funktioniert, kommt es nicht als Alternative zu Texvc in Betracht.
Die anderen angebotenen Captchas werden in zukünftigen Mediawiki-Versionen nicht mehr unterstützt oder funktionieren nicht mit allen gängigen Browsern oder funktionieren mit nicht-barrierefreien Bildern und/oder benötigen zusätzliche Installationen auf dem Wiki-Server mit Administrationsrechten, weshalb "QuestyCaptcha" trotz Beta-Status als einzig brauchbare Möglichkeit verwendet werden muss.  


* Überprüfen, ob im Verzeichnis "extensions\ConfirmEdit\" das Unterverzeichnis "QuestyCaptcha\" mit Dateien enthalten ist.
In der Datei "readme" gibt es folgende Hinweise:
* In der Datei "LocalSettings.php" nach "wfLoadExtension( 'Cite' );" einfügen:
* Seit MW1.19 beschränken sich die Rendering-Optionen auf "Always PNG" und "Leave it as TeX".
<pre>
* Statt Bildern kann "MathML" mittels "LaTeXML" verwendet werden
##
** Für LaTeXML ist "php5-curl" erforderlich; bei Windows ist es im Verzeichnis "\php\ext\" die Datei "php_curl.dll", die als Modul in der Datei "php.ini" eingebunden sein muss
## EXTENSIONS
** In der Datei "LocalSettings.php" wird LaTeXML für die Konvertierung zu MathML verwendet: "$wgMathUseLaTeXML = true;"
...
** In der Datei "LocalSettings.php" wird für anonyme Seitenaufrufe  angegeben: "$wgDefaultUserOptions['math'] = MW_MATH_LATEXML"
wfLoadExtensions([ 'ConfirmEdit', 'ConfirmEdit/QuestyCaptcha' ]);
** Empfohlen wird eine Core-Version von wmf/1.22wmf7 oder neuer
...
 
## Erweiterung ConfirmEdit mit Captcha
==== Texvc für Math kompilieren ====
#$wgCaptchaClass = "QuestyCaptcha"; // entfällt in MW 1.27
 
# Salzwiki
Für die Kompilierung ist "MinGW" gegenüber "Cygwin" vorzuziehen, weil es unabhängig von den dll-Dateien und deren MS-Lizenzen mit der MSVC-Runtime funktioniert (siehe http://stackoverflow.com/questions/771756/what-is-the-difference-between-cygwin-and-mingw).
$wgCaptchaQuestions[] = array('question' => 'Welches Wort fehlt: "Eine Frage stellen, eine ... geben"?', 'answer' => '***' );
 
$wgCaptchaQuestions[] = array('question' => 'Um welche Art von Webseiteninhalt handelt es sich hier: Blog oder Wiki?', 'answer' => '***' );
Da für "MinGW" keine verwertbare Ausgangsdatei zur Verfügung steht - , "makefile" wird nicht akzeptiert -, müssen "Cygwin" und "OCaml" (Version 4.02.3 32Bit + findlib + batteries) installiert werden (Dauer ca. 20 Min.). "OCaml" kann bei http://caml.inria.fr oder bei http://protz.github.io/ocaml-installer/ heruntergeladen werden.
$wgCaptchaQuestions[] = array('question' => 'Wie lautet der Name dieses Wikis?', 'answer' => $wgSitename );
 
$wgCaptchaQuestions[] = array('question' => 'Bitte das magische Wort - Salz - hier eingeben:', 'answer' => '***' );
'''Cygwin'''
$wgCaptchaQuestions[] = array('question' => 'Bitte das Spezialwort - 8Acht8 - hier eingeben:', 'answer' => '***' );
# Saltwiki
$wgCaptchaQuestions[] = array('question' => 'Which is the language of this question: Dutch, English, French, German or Spanish?', 'answer' => '***' );
$wgCaptchaQuestions[] = array( 'question' => 'Please write the following word backwards: '.$wgSitename, 'answer' => strrev($wgSitename) ); #'ikiwtlaS'
$wgCaptchaQuestions[] = array( 'question' => 'The taste of salt is neither bitter nor sweet nor sourish but &hellip;', 'answer' => '***' );
$wgCaptchaQuestions[] = array('question' => 'What is the missing word: "Ask a question, give an &hellip;"', 'answer' => ***'');
$wgCaptchaQuestions[] = array('question' => 'What kind of web content is this: Blog or Wiki?', 'answer' => '***');
$wgCaptchaQuestions[] = array( 'question' => 'What is this wiki\'s name (in capital letters)?', 'answer' => strtoupper($wgSitename) ); #'SALTWIKI'
# Repository
$wgCaptchaQuestions[] = array('question' => 'Which is the language of this question: Dutch, English, French, German or Spanish?', 'answer' => '***' );
$wgCaptchaQuestions[] = array( 'question' => 'Please write the following word backwards: '.$wgSitename, 'answer' => strrev($wgSitename) ); #'yrotisopeR'
$wgCaptchaQuestions[] = array( 'question' => 'The taste of salt is neither bitter nor sweet nor sourish but &hellip;', 'answer' => '***' );
$wgCaptchaQuestions[] = array('question' => 'What is the missing word: "Ask a question, give an &hellip;"', 'answer' => ***'');
$wgCaptchaQuestions[] = array('question' => 'What kind of web content is this: Blog or Wiki?', 'answer' => '***');
$wgCaptchaQuestions[] = array( 'question' => 'What is this wiki\'s name (in capital letters)?', 'answer' => strtoupper($wgSitename) ); #'REPOSITORY'
#$wgCaptchaQuestions[] = array('question' => 'Please write the magic secret, "salt", here:', 'answer' => '***');
#$wgCaptchaQuestions[] = array('question' => 'Type the code word, 8eight8, here:', 'answer' => '***');


## Auslöser für Captcha-Aktivierung
Während der Installation von "OCaml" in das Verzeichnis "D:\texmf\" wird zusätzlich "Cygwin" im Verzeichnis "C:\cygwin\" installiert, sofern noch nicht vorhanden.
# Salzwiki/Saltwiki
 
$wgCaptchaTriggers['edit']          = true;
Für die Installation von "Cygwin" muss zum Herunterladen ein Mirror-Server ausgewählt werden, z. B. ftp://ftp.hawo.stw.uni-erlangen.de.
$wgCaptchaTriggers['create']        = true;
$wgCaptchaTriggers['addurl']        = true;
$wgCaptchaTriggers['createaccount'] = true;
$wgCaptchaTriggers['badlogin']      = true;
# Salzwiki/Saltwiki/Repository
$wgCaptchaTriggers['contactpage'] = true;
...
##
## EINSTELLUNGEN
...
## Salzwiki/Saltwiki
#captcha Hschwarz 12.02.2010
$wgGroupPermissions['*'            ]['skipcaptcha'] = false;
$wgGroupPermissions['user'        ]['skipcaptcha'] = false;
$wgGroupPermissions['autor'        ]['skipcaptcha'] = true;
$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;
$wgGroupPermissions['bot'          ]['skipcaptcha'] = true; // registered bots
$wgGroupPermissions['sysop'        ]['skipcaptcha'] = true;
</pre>


=== SaltWiki (Wiki-Code) ===
Vor dem Kompilieren müssen Dateien angepasst werden (siehe https://www.mediawiki.org/wiki/Texvc#Windows und https://www.mediawiki.org/wiki/MWWRender.ml):
* \Math\math\render.ml Z.42 und Z.48 (2 Backslashes statt einem Schrägstrich)
: <pre>...finalpath^"\\"^md5...</pre>
: <pre>...finalpath^"\\"^md5...</pre>


Die Erweiterung "SaltWiki" ergänzt die Erweiterung [[#BibManager|"BibManager"]] für Volltexte und DOIs bei den BibTex-Attributen. Da sich in der verwendeten BibManager-Version der Dateipfad für eine Grafik geändert hat, muss der Code dieser Erweiterung angepasst werden.
'''MinGW'''


Von der angepassten Datei "SaltWiki.php" wird eine Kopie mit dem Suffix "_SW" gespeichert.
"MinGW" (2013-10-26) kann als Installationsmanager, der während der Installation die ausgewählten "Packages" aus dem Internet lädt (Dauer ca. 10 Min.), heruntergeladen werden bei https://sourceforge.net/projects/mingw/files/ (Stand 2016-04-29).


==== Versionshinweis ====
"MinGW" wird als 32Bit-Version im Verzeichnis "C:\MinGW\" installiert und wird nicht in der Systemsteuerung bei den installierten Programmen aufgelistet. Das Programm-Unterverzeichnis "bin\" muss bei der Umgebungsvariablen "Path" hinzugefügt und der Server danach neu gestartet werden.
Die Version 2015-05-25 enthält eine Korrektur in der Sprachdatei "SaltWiki.i18n.php", damit bei "de" nicht wie bei "de-formal" die Sie-Form verwendet wird.


==== Fehler (Wiki-Code) ====
Im Installationsmanager bei <del>"Basic Setup"</del> "All Packages" alle Packages von "MinGW", aber nicht "MSYS" aktivieren. Danach im Menü "Installation => Apply changes" auswählen.
In der Datei "SaltWiki.php" wird in der Funktion "sw_onBibManagerGetIcons(...)" in Z.161 eine Grafik aus dem Verzeichnis "\extensions\BibManager\client\images\" statt aus dem Verzeichnis "\extensions\BibManager\resources\images\" verwendet, weshalb der Alternativtext der Grafik angezeigt wird.


Z.159ff
Kompilieren (siehe auch http://www.mingw.org/wiki/mingw_for_first_time_users_howto):
* Die DOS-Kommandozeile als Administrator öffnen
* zum "Math"-Verzeichnis wechseln
* Befehl zum Kompilieren eingeben
<pre>
<pre>
// für HAWK HHG und MW1.23LTS Pfad von "client" zu "resources" angepasst 2016-06-14
C:\MinGW\bin\gcc makefile -o texvc.exe
$icons['fulltext'] = array (
  'src' => $wgScriptPath . '/extensions/BibManager/resources/images/' . $icon,
  ...
);
</pre>
</pre>


==== Veralteter Code ====
Fehlermeldung: "Das Programm kann nicht gestartet werden, da libiconv-2.dll auf dem Computer fehlt."
Es wird noch die Funktion "wfMsg()" anstatt von "wfMessage()" in der Datei "SaltWiki.php" verwendet.
 
In "Systemsteuerung => Alle Systemsteuerungselemente => System => Erweiterte Systemeinstellungen => Umgebungsvariablen" bei "Path" am Ende einfügen:
<pre>;C:\MinGW\bin\</pre>
 
=== MultimediaViewer (JavaScript, fehlerhaft) ===


=== SaltWikiUpload ===
Die Erweiterung "MultimediaViewer" kursiert auch unter der Bezeichnung "MediaViewer", siehe auch https://www.mediawiki.org/wiki/Hellp:Extension:Media_Viewer/de. Sie ist seit MediaWiki 1.31 standardmäßig als Kernerweiterung enthalten.


Die Erweiterung "SaltWikiUpload" ergänzt die Erweiterung [[#BibManager|"BibManager"]] für das Hochladen von Dateien im Repositorium unter Berücksichtigung von Meta-Daten (Vergleich der Formulareingaben siehe weiter unten)
Diese Erweiterung verursacht bei Browsern mit aktiviertem "JavaScript" Fehlermeldungen bei der Darstellung von Media-Dateien wie pdf und jpg.


==== Versionshinweis ====
Bei Bilddateien erscheinen Fehlermeldungen mit schwarzem Hintergrund und Funktionssymbolen, wenn die Erweiterung versucht, Bildvergrößerungen aus einem anderen Wiki anzuzeigen. Die Erweiterung versucht grundsätzlich eine Bildvergrößerung statt die Bilddatei-Seite zum Bild aufzurufen.
Die Version 2012-01-25 enthält
* in der Datei "SaltWikiUpload_body.php" ab Z.66 die Variable $aAuthorsLinks und in "foreach..." ab Z.104 Änderungen für $sFieldValue vor "$aText[]..."
* in der Sprachdatei "SaltWikiUpload.i18n.php" in den Zeilen 53, 105 und 157 ein Zusatzelement "help-various_bibtex"
* in der Datei "\includes\SaltWikiUpload_Fields.php" das Zusatzelement "help-various_bibtex"
* in der Datei "\includes\SaltWikiUpload_HTMLDateField.php" Korrekturen zur Darstellung von Monatszahlen kleiner als 10 mit vorangestellter 0


==== Fehler ====
Wird bei der Fehlermeldung mit schwarzem Hintergrund, die demnach eine überlagernde JavaScript-Schicht ist, der Verweis unten rechts zum Herunterladen angeklickt und die Datei im Browser geöffnet statt sie herunterzuladen, kann die Datei dargestellt werden.
* Das erweiterte Formular wird nicht angezeigt, sondern das MW-Upload-Formular
 
* Beim Hochladen mittels MW-Upload-Formular scheitert das Hochladen mit der Fehlermeldung "Es gibt fehlerhaft ausgefüllte Felder", wenn die Erweiterung in der Datei "LocalSettings.php" eingebunden wird.
Wenn die Verweise der Bilder zu der Bilddatei-Seite mit „Firefox“ in einem neuen Tab oder in einem neuen Fenster geöffnet werden, gibt es keine Fehlermeldung, weil dann der "MultimediaViewer" nicht zum Einsatz kommt.  
* Die Sprachdatei "SaltWikiUpload.i18n.php" enthält bei "de" die Sie-Form wie bei "de-formal".
 
Nach Aufruf einer Bilddatei-Seite wird beim Klick auf das Bild zur Vergrößerung des Bildes das vergrößerte Bild dargestellt. Jedoch wird bei aktiviertem "JavaScript" und Verwendung des Hyperlinks "Im Medienbetrachter öffnen", der unterhalb des Bildes erscheint, wieder die Fehlermeldung mit dem schwarzen Hintergrund ausgelöst.


==== Veralteter Code ====
Diese Erweiterung wird in den Salze-Wikis zur Fehlerbeseitigung deaktiviert. Hierzu wird nicht die Einbindung auskommentiert, sondern werden zwei Variablen in der Datei "LocalSettings.php" verwendet:
* Funktion "wfMsg" statt "wfMessage" in den Dateien
<pre>
** "SaltWikiUpload_body.php"
## MultimediaViewer deaktivieren wegen Fehler bei Interwiki-Bildvergrößerungen
** "\includes\SaltWikiUpload_Fields.php"
$wgMediaViewerEnableByDefault = false;
** "\includes\SaltWikiUpload_HTMLDateField.php"
$wgMediaViewerEnableByDefaultForAnonymous = false;
</pre>


==== Formularunterschiede ====
Ansonsten müsste bei allen Bildern der Quelltext angepasst werden, was sehr aufwändig wäre.
<b>SaltWikiUpload-Formular</b>
* Metadaten
** Beschreibung
** Quelle
** Datum
** Autor(en)
** Berechtigung
** Schlagwörter
** Typ
* Medium
** Medienart
* Quelldatei
** Quelldatei
* Dateibeschreibung
** Zielname
** Weitere Anmerkungen


<b>MW1.23LTS-Upload-Formular</b>
Eine Problemlösung durch eine Angabe im Quelltext für einen Aufruf in einem neuen Tab bzw. Fenster ist scheinbar nicht möglich, da bei der MediaWiki-Gallerie wohl nicht vorgesehen.
* Quelldatei
** Quelldatei
* Dateibeschreibung
** Zielname
** Beschreibung/Quelle
** Lizenz
* Hochladeoptionen
** Diese Datei beobachten
** Warnungen ignorieren


==== Quellcode der Version 2012-01-25 ====
Eine erfolgreiche Lösung kann in nachfolgender Beispiel-Anpassung der jeweiligen Bilder gefunden werden, die den MediaWiki-MediaViewer mit der Bildvergrößerung umgeht, aber viel Arbeit erfordert.
Zeile 66ff unter "$aAuthors = explode(...);"
<pre>
<pre>
$aAuthorsLinks = array();
bisher:
foreach( $aAuthors as $sAuthor ){
Image:Kop-Alveolar 4.JPG| Alveolarverwittering am Kronborg Castle in Dänemark, Ausschnitt
  ...
neu:
  $aCategories[] = '[['.$sPrefixedCatText.']]';
Image:Kop-Alveolar_4.JPG|link=File:Kop-Alveolar 4.JPG|Alveolarverwittering am Kronborg Castle in Dänemark, Ausschnitt
  $aAuthorsLinks[] = '[[:'.$sPrefixedCatText.'|'.$oCategoryTitle->getText().']]';
}
</pre>
</pre>


Zeile 104ff vor "$aText[] = ..."
=== MwEmbedSupport (JavaScript) ===
<pre>
 
foreach( $aTemplate as $sFieldName => $sFieldValue ) {
Die Erweiterung wird bei MW1.31 nicht mehr installiert, da sie Teil von TimedMediaHandler geworden ist. Sie wurde bis MW1.30 für die Wiedergabe von Videodateien mit der Erweiterung [[#TimedMediaHandler (fehlerhaft, JavaScript)|"TimedMediaHandler"]] benötigt und funktioniert nur mit JavaScript.
  if( in_array( $sFieldName, array('literature_bibtex','grey_literature_bibtex','unpublished_reports_bibtex') ) && !empty($sFieldValue) ){
    $sFieldValue = '<bib id="'.$sFieldValue.'" />';
  }
  if( $sFieldName == 'literature_doi' && !empty($sFieldValue) ){
    $sFieldValue = 'http://dx.doi.org/'.$sFieldValue;
  }
  if( $sFieldName == 'general_author' && !empty($sFieldValue) ){
    $sFieldValue = implode('; ', $aAuthorsLinks);
  }
 
  $aText[] = '|'.$sFieldName.'='.$sFieldValue;
}
</pre>


=== TimedMediaHandler (JavaScript) ===
Ab MW1.31 oder MW1.32 ist die Erweiterung in der Erweiterung "TimedMediaHandler" enthalten, die Angaben variieren:
# https://www.mediawiki.org/wiki/Extension:MwEmbedSupport: ab MW1.32
# https://www.mediawiki.org/wiki/Extension:TimedMediaHandler: ab MW1.31


"TimedMediaHandler" beinhaltet den "Kaltura HTML5 Player" (JavaScript, http://www.html5video.org/kaltura-player/docs) und den experimentellen "VideoJS Player". Unterstützt werden Streaming, WebM und Ogg sowie gegebenenfalls getID3.
Die neueste Version 0.3.0 mit dem Datum 2014-04-02 (Stand 2018-10-12) kann aus dem MW-Archiv heruntergeladen werden bei https://www.mediawiki.org/w/index.php?oldid=2734400.


==== Einschränkung ====
==== Einschränkung ====


Die Erweiterung steht ab Mediawiki 1.17 zur Verfügung, zuletzt als Version 0.5.0 mit Datum 2015-12-08 (Stand 2018-03-02). Die Versionen REL1.27, REL1.29 und REL1.30 sind nicht für MW 1.27 geeignet, da die Datei "extension.json fehlt.  
Die Version REL1.27 für MW1.27 funktionierte nicht, weil die Datei "extension.json" fehlte. Es funktionierten die Versionen REL1.29 und REL1.30; eingesetzt wurde REL1.30.
 
==== Nutzungsvoraussetzungen ====


Die Erweiterung benötigt zusätzlich
=== OggHandler (JavaScript) ===
* bis einschließlich MW1.30 die Erweiterung [[#MwEmbedSupport (JavaScript)|"MwEmbedSupport"]]
* libwinpthread-1.dll für die Installation der Anwendung "ffmpeg"
* die Anwendungen
** "ffmpeg"
** "ffmpeg2theora"
** "oggThumb"
* eventuell auch die Anwendungen
** "PEAR File_Ogg", wenn nicht in "...\extensions\TimedMediaHandler\handlers\OggHandler\" die Datei "OggHandler.php" und das Verzeichnis "PEAR\" mit dem Unterverzeichnis "File_Ogg\" vorhanden sind
*** "PEAR Package Manager" oder "PEAR Pyras Installer" - "PEAR" sollte in der PHP-Installation des Servers enthalten sein
*** "PEAR File_Ogg" 0.3.1 Beta 2010-08-27 (Stand 2016-06-21) wie bei Erweiterung "OggHandler" für "oggThumb"-Vorschaubilder
** "getID3()"


Für Details siehe https://phabricator.wikimedia.org/diffusion/ETMH/browse/master/README.
Die Erweiterung wird nicht mehr installiert, da sie ab Mediawiki 1.24 nicht mehr unterstützt wird. Es wird die Erweiterung "TimedMediaHandler" empfohlen.


Diese Erweiterung diente zum Darstellen von Videodateien in SalzWiki-Artikeln. Da es sich beim OGG-Format um ein freies Format handelt, benötigt man keine Lizenz zum Darstellen der Inhalte.
'''Es ist noch zu klären, ob eventuell das MPEG Format für eine Hochschulanwendung lizenzfrei sein könnte.'''
'''Es ist noch zu klären, ob eventuell das MPEG Format für eine Hochschulanwendung lizenzfrei sein könnte.'''
"FFmpeg" ist herunterzuladen von heise.de und wird dann gespeichert unter "D:\ffmpeg-wiki\".


==== Installation und Konfiguration ====
'''Für die Erweiterung sind "PEAR" und "FFmpeg" erforderlich. '''
*"PEAR" ist in der PHP-Installation des Servers enthalten.
*"FFmpeg" ist herunterzuladen von heise.de und wird dann gespeichert unter "D:\ffmpeg-wiki\"


* Erweiterung herunterladen bei https://www.mediawiki.org/wiki/Extension:TimedMediaHandler
Installation der Erweiterung:
* Dateien in das Verzeichnis "extensions" kopieren
* Extension unter http://www.mediawiki.org/wiki/Extension:OggHandler herunterladen.
* Datei "TimedMediaHandler.sql" für Tabelle "transcode" als Kopie mit Suffix "_SW" speichern, Kopie anpassen für Tabelle mit Präfix "sr_" und zur Erstellung der Tabelle "sr_transcode" als Admin mit der Konsole ausführen: mysql -u root -p -> USE repository[_draft]
* Extrahieren der Dateien nach extensions/OggHandler
* Zusatzsoftware herunterladen
** ffmpeg (Windows, 2016-05-10) bei www.heise.de oder https://ffmpeg.zeranoe.com/builds/ <del>http://firefogg.org/nightly/ffmpeg.exe (benötigt libwinpthread-1.dll)</del>
** ffmpeg2theora (Windows, 2014-03-06) bei www.heise.de oder http://v2v.cc/~j/ffmpeg2theora/ <del>http://firefogg.org/nightly/ffmpeg2theora.exe</del>
** oggThumb (2010-06-01) bei https://sourceforge.net/projects/oggvideotools/files/oggvideotools-win32/oggvideotools-0.8a-win32/OggVideoTools-0.8a-win32.exe (vormals http://www.streamnik.de/files.html)
** PEAR File_Ogg und Installer bei
*** http://pear.php.net/package/File_Ogg/download/File_Ogg-0.3.1.tgz (Beta, 2010-08-27)
*** http://pear.php.net/go-pear.phar, Installationsanleitung http://pear.php.net/manual/en/installation.getting.php
*** http://pear2.php.net
** getID3() Version 1.9.12 stable (2016-03-02) bei http://www.getid3.org
* Zusatzsoftware einrichten
** Verzeichnis "D:\ffmpeg_ogg\" erstellen
** "ffmpeg-20160620-afd0405-win32-static.zip" entpacken unter "D:\ffmpeg_ogg\" und Verzeichnis umbenennen in "\ffmpeg\"
** "ffmpeg2theora.exe" speichern unter "D:\ffmpeg_ogg\ffmpeg2theora\"
** "OggVideoTools-0.8a-win32.exe" installieren mit Auswahl "Add OggVideoTools to the system PATH for all users" und "Create...Desktop Icon" in Zielverzeichnis "D:\ffmpeg_ogg\OggVideoTools"
* In der Datei "LocalSettings.php" einfügen:
* In der Datei "LocalSettings.php" einfügen:
<pre>
<pre>
## MW1.27 bis MW1.30: MwEmbedSupport und TimedMediaHandler
## Repository: OggHandler oder MwEmbedSupport und TimedMediaHandler
wfLoadExtensions("MwEmbedSupport");
## OggHandler nur bis MW 1.23, danach MwEmbedSupport und TimedMediaHandler
require_once("$IP/extension/TimedMediaHandler/TimedMediaHandler.php");
wfLoadExtensions( 'OggHandler' );
## MW1.31: TimedMediaHandler
wfLoadExtensions("TimedMediaHandler");
## MW1.26 und älter: MwEmbedSupport und TimedMediaHandler
require_once("$IP/extension/MwEmbedSupport/MwEmbedSupport.php");
require_once("$IP/extension/TimedMediaHandler/TimedMediaHandler.php");
 
# FFmpeg auskommentiert, solange kostenfreie Lizenz für Hochschule ungeklärt ist
# FFmpeg auskommentiert, solange kostenfreie Lizenz für Hochschule ungeklärt ist
#$wgFFmpegLocation = "D:\ffmpeg-wiki\bin\ffmpeg";
#$wgFFmpegLocation = "D:\ffmpeg-wiki\bin\ffmpeg";
</pre>
</pre>


=== User Merge - Benutzername löschen ===
=== ParserFunctions ===


Das Löschen von benutzernamen, die nicht mehr benötigt werden, geschieht durch das Zusammenführen des zu löschenden Benuztzernamens mit dem Benutzername "Testuser" zu "Testuser" mit Hilfe der Extension UserMerge.  
"ParserFunctions" ist seit MW1.18 im Kern enthalten und enthält seit MW1.15 die Funktionalitäten von "ControlStructureFunctions", "LOParserFunctions" und größtenteils auch von "StringFunctions".


* Extension unter http://www.mediawiki.org/wiki/Extension:User_Merge_and_Delete herunterladen.
Die Erweiterung "ParserFunctions" soll in Kombination mit der Erweiterung "Loops", die die Erweiterung "Variables" nutzt, verwendet werden; siehe auch
* Datei in das Verzeichnis extensions/UserMerge kopieren
# https://www.mediawiki.org/wiki/Help:ParserFunctions
* In den Localsettings eingefügen
# https://www.mediawiki.org/wiki/Extension:Loops


<pre>
=== Piwik Integration ===
wfLoadExtensions( 'UserMerge' );
# Assign the usermerge right to a usergroup, i.e. to the bureaucrats:
$wgGroupPermissions['bureaucrat']['usermerge'] = true;
</pre>


=== WhosOnline - Wer ist online ===
Die Statistik-Anwendung "Piwik" wurde im Januar 2018 in "Matomo" umbenannt, weshalb ab März 2018 die Erweiterung [https://www.mediawiki.org/wiki/Extension:Matomo "Extension:Matomo"] zur Verfügung stehen und verwendet werden soll.


Die Extension WhosOnline dient dazu sich auf einer Specialpage anzeigen zu lassen, wer gerade online ist.
Die Erweiterung [https://www.mediawiki.org/wiki/Extension:Piwik_Integration "Extension:Piwik Integration"] für die Nutzung der Statistik-Anwendung "Piwik" kann ab den Versionen MW 1.14 und Piwik 0.4 verwendet werden.


Für MediaWiki 1.23 war im Herbst 2015 als älteste Version nur eine "REL1_25", also Version 1.4.0 für MW 1.25 erhältlich, die einen Script-Fehler verursachte, wenn in der Datei "WhosOnlineSpecialPage.php" bei der Funktion "getNavigationBar()" die Variable "$title" vom Typ String statt Objekt ist; zur Fehlerbehebung siehe weiter unten und https://www.mediawiki.org/wiki/Extension_talk:WhosOnline#Bug_in_MW_1.24_.3F
* Dateien unter "extensions\Piwik\" speichern
* In der Datei "LocalSettings.php" einfügen:
<pre>
##
## EXTENSIONS
...
wfLoadExtension( 'Piwik' );
$wgPiwikURL = $_SERVER['SERVER_NAME']."/analytics/piwik"; # ohne Protokoll-Angabe und ohne Schrägstrich am Ende!
$wgPiwikIDSite = "1"; # SalzWiki=1, SaltWiki=2, Repository=3
</pre>


Bei MediaWiki 1.25 verursachte die Version 1.5.0 einen Fehler, wenn die Datei "upgrade.php" verwendet wurde, weil die Datei "extension.json" in der Erweiterung fehlte; siehe https://www.mediawiki.org/wiki/Extension_talk:WhosOnline#Fatal_error_running_update.php_on_V1.5.0. Es musste deshalb in der Datei "LocalSettings.php" wie bei älteren Versionen "require_once ..." statt "wfLoadExtension(...)" verwendet werden.
=== QuestyCaptcha ===


*Dateien unter http://www.mediawiki.org/wiki/Extension:WhosOnline herunterladen und extrahieren
Das Plugin "QuestyCaptcha" ist bei MW 1.31 und 1.27 im Dateien-Paket der Erweiterung "ConfirmEdit" enthalten und muss nicht mehr zusätzlich heruntergeladen werden.
*Verzeichnis "WhosOnline" unter "Extensions" speichern
*Für MediaWiki 1.27 evtl. wie bei WM 1.23 in der Datei "WhosOnlineSpecialPage.php" die Funktion "getNavigationBar()" anpassen
*SQL-Befehl in der Extension-Datei "WhosOnline.sql" für neue Datenbank-Tabelle anpassen (siehe weiter unten)
*Mit "phpMyAdmin" und geändertem SQL-Befehl eine neue Datenbank-Tabelle erstellen (siehe weiter unten)
*In der Datei "LocalSettings.php" einfügen:
<pre>
wfLoadExtensions( 'WhosOnline' );
$wgWhosOnlineShowAnons = true;
</pre>


'''Datei "WhosOnlineSpecialPage.php" für MW 1.23 anpassen'''
Zusätzlich zur Erweiterung [https://www.mediawiki.org/wiki/Extension:ConfirmEdit "Extension:ConfirmEdit"] wird für die Salzwikis als Plugin das Captcha [https://www.mediawiki.org/wiki/Extension:QuestyCaptcha "Extension:QuestyCaptcha"] gegen Spam-Anmeldungen genutzt, da das Standard-Mathe-Captcha nicht ausreichte.
Die anderen angebotenen Captchas werden in zukünftigen Mediawiki-Versionen nicht mehr unterstützt oder funktionieren nicht mit allen gängigen Browsern oder funktionieren mit nicht-barrierefreien Bildern und/oder benötigen zusätzliche Installationen auf dem Wiki-Server mit Administrationsrechten, weshalb "QuestyCaptcha" trotz Beta-Status als einzig brauchbare Möglichkeit verwendet werden muss.  


Die Funktion "getNavigationBar()" ab Zeile 75 kopieren, auskommentieren und die Kopie darunter einfügen.
* Überprüfen, ob im Verzeichnis "extensions\ConfirmEdit\" das Unterverzeichnis "QuestyCaptcha\" mit Dateien enthalten ist.
In der Kopie die Variable $wgLang als Ersatz für $wgContLang und die entsprechenden Variablen für die return-Funktion hinzufügen:
* In der Datei "LocalSettings.php" nach "wfLoadExtension( 'Cite' );" einfügen:
<pre>
<pre>
function getNavigationBar(){
##
  global $wgContLang, $wgLang;
## EXTENSIONS
  $link = $wgContLang->specialpage('WhosOnline');
...
  if(is_object($link)){
wfLoadExtensions([ 'ConfirmEdit', 'ConfirmEdit/QuestyCaptcha' ]);
    $title = $link;
...
  }
## Erweiterung ConfirmEdit mit Captcha
  else{
#$wgCaptchaClass = "QuestyCaptcha"; // entfällt in MW 1.27
    $title = Title::newFromText($link);
# Salzwiki
    if(is_null($title)){
$wgCaptchaQuestions[] = array('question' => 'Welches Wort fehlt: "Eine Frage stellen, eine ... geben"?', 'answer' => '***' );
      return false;
$wgCaptchaQuestions[] = array('question' => 'Um welche Art von Webseiteninhalt handelt es sich hier: Blog oder Wiki?', 'answer' => '***' );
    }
$wgCaptchaQuestions[] = array('question' => 'Wie lautet der Name dieses Wikis?', 'answer' => $wgSitename );
  }
$wgCaptchaQuestions[] = array('question' => 'Bitte das magische Wort - Salz - hier eingeben:', 'answer' => '***' );
  $offset = $this->mOffset;
$wgCaptchaQuestions[] = array('question' => 'Bitte das Spezialwort - 8Acht8 - hier eingeben:', 'answer' => '***' );
  $limit = $this->mLimit;
# Saltwiki
  $query = '';
$wgCaptchaQuestions[] = array('question' => 'Which is the language of this question: Dutch, English, French, German or Spanish?', 'answer' => '***' );
  $query = wfCgiToArray('');
$wgCaptchaQuestions[] = array( 'question' => 'Please write the following word backwards: '.$wgSitename, 'answer' => strrev($wgSitename) ); #'ikiwtlaS'
  $atend = $this->countUsersOnline() < ($this->mLimit + $this->mOffset); // show next link
$wgCaptchaQuestions[] = array( 'question' => 'The taste of salt is neither bitter nor sweet nor sourish but &hellip;', 'answer' => '***' );
$wgCaptchaQuestions[] = array('question' => 'What is the missing word: "Ask a question, give an &hellip;"', 'answer' => ***'');
$wgCaptchaQuestions[] = array('question' => 'What kind of web content is this: Blog or Wiki?', 'answer' => '***');
$wgCaptchaQuestions[] = array( 'question' => 'What is this wiki\'s name (in capital letters)?', 'answer' => strtoupper($wgSitename) ); #'SALTWIKI'
# Repository
$wgCaptchaQuestions[] = array('question' => 'Which is the language of this question: Dutch, English, French, German or Spanish?', 'answer' => '***' );
$wgCaptchaQuestions[] = array( 'question' => 'Please write the following word backwards: '.$wgSitename, 'answer' => strrev($wgSitename) ); #'yrotisopeR'
$wgCaptchaQuestions[] = array( 'question' => 'The taste of salt is neither bitter nor sweet nor sourish but &hellip;', 'answer' => '***' );
$wgCaptchaQuestions[] = array('question' => 'What is the missing word: "Ask a question, give an &hellip;"', 'answer' => ***'');
$wgCaptchaQuestions[] = array('question' => 'What kind of web content is this: Blog or Wiki?', 'answer' => '***');
$wgCaptchaQuestions[] = array( 'question' => 'What is this wiki\'s name (in capital letters)?', 'answer' => strtoupper($wgSitename) ); #'REPOSITORY'
#$wgCaptchaQuestions[] = array('question' => 'Please write the magic secret, "salt", here:', 'answer' => '***');
#$wgCaptchaQuestions[] = array('question' => 'Type the code word, 8eight8, here:', 'answer' => '***');


  return $wgLang->viewPrevNext(
## Auslöser für Captcha-Aktivierung
    $title,
# Salzwiki/Saltwiki
    $offset,
$wgCaptchaTriggers['edit']          = true;
    $limit,
$wgCaptchaTriggers['create']        = true;
    $query,
$wgCaptchaTriggers['addurl']        = true;
    $atend
$wgCaptchaTriggers['createaccount'] = true;
  );
$wgCaptchaTriggers['badlogin']      = true;
}
# Salzwiki/Saltwiki/Repository
$wgCaptchaTriggers['contactpage'] = true;
...
##
## EINSTELLUNGEN
...
## Salzwiki/Saltwiki
#captcha Hschwarz 12.02.2010
$wgGroupPermissions['*'            ]['skipcaptcha'] = false;
$wgGroupPermissions['user'        ]['skipcaptcha'] = false;
$wgGroupPermissions['autor'        ]['skipcaptcha'] = true;
$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;
$wgGroupPermissions['bot'          ]['skipcaptcha'] = true; // registered bots
$wgGroupPermissions['sysop'        ]['skipcaptcha'] = true;
</pre>
</pre>


'''Datei "WhosOnline.sql" anpassen'''
=== SaltWiki (Extension-Code) ===
 
Die Erweiterung "SaltWiki" wird umbenannt in "BibManagerAdditionalPublications" und an die Anforderungen von MW1.31 angepasst.
 
Diese Erweiterung ergänzt die Erweiterung [[#BibManager|"BibManager"]] für Volltexte und DOIs bei den BibTex-Attributen.
 
==== Fehler (Extension-Code) ====


Den SQL-Befehl in der Extension-Datei "WhosOnline.sql" für die neue Datenbank-Tabelle in der ersten Zeile z. B. wie folgt mit Präfix "sw_" bzw. "sr_" anpassen:
===== Sprachdatei "de" enthält Sie-Form =====
<pre>CREATE TABLE `[datenbankname]`.`[praefix]online` (</pre>


'''Datenbank-Tabelle erstellen'''
Die Version 2015-05-25 enthält in der Sprachdatei "SaltWiki.i18n.php" bei "de" bzw. in der Sprachdatei "de.json" die Sie-Form wie bei "de-formal" und wird korrigiert.


Mit "phpMyAdmin" die MySQL-Datenbank für das Wiki auswählen und nach Auswahl des Karteikartenreiters/Tabs "SQL" die Tabelle "sw_online" bzw. "sr_online" durch Eingabe des folgenden SQL-Statements anlegen:
===== Fehlendes Icon "Link zum Volltext" bei Detailseite =====
<pre>
CREATE TABLE  `[datenbankname]`.`[praefix]online`  (
`userid` int(5) NOT NULL default '0',
`username` varchar(255) NOT NULL default '',
`timestamp` char(14) NOT NULL default '',
PRIMARY KEY USING HASH (`userid`, `username`),
INDEX USING BTREE (`timestamp`)
) TYPE=MEMORY;
</pre>


=== WikiEditor (JavaScript) ===
Da sich in der verwendeten BibManager-Version der Dateipfad für eine Grafik geändert hat, muss der Code angepasst werden.


'''Achtung: Funktioniert nur bei Browsern mit aktiviertem JavaScript und muss in den nachfolgend genannten Dateien und dem Grafiken-Verzeichnis nach jedem MediaWiki-Update auf Vorhandensein und Änderungen überprüft werden!'''
Auf der Detailseite eines Bibliographieeintrags wird rechts statt des Icons nur der Alternativtext "Link zum Volltext" bzw. "Fulltext link" angezeigt, weil der Dateipfad nicht mehr stimmt. In der Funktion "sw_onBibManagerGetIcons(...)" wird in Z.161 eine Grafik aus dem Verzeichnis "\extensions\BibManager\client\images\" statt aus dem Verzeichnis "\extensions\BibManager\resources\images\" verwendet, weshalb der Alternativtext der Grafik angezeigt wird; es ist folgende Datei anzupassen:
* "\extensions\SaltWiki\SaltWiki.php"


Die Erweiterung "WikiEditor" wird seit MW1.18 als Ersatz für den schlichten Editor mitgeliefert.
Nach den Anpassungen ist jeweils eine Kopie der Datei mit dem Suffix "_SW" zu speichern.


Um die Erweiterung einzubinden und sie für alle Nutzungskonten verfügbar zu machen, sind in der Datei "LocalSettings.php" in MW1.23 folgende Angaben nötig:
Bei "SaltWiki.php" ist in der Funktion "sw_onBibManagerGetIcons(...)" vor Zeile 160 ein Kommentar einzufügen und in Zeile 161 der Pfad von "client" zu "resources" anzupassen:
<pre>
<pre>
require_once("$IP/extensions/WikiEditor/WikiEditor.php");
function sw_onBibManagerGetIcons ( $entry, &$icons) {
$wgDefaultUserOptions['usebetatoolbar'] = 1; // Editor bei allen Nutzungskonten standardmäßig aktivieren
...
$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1; // Erweiterte Funktionen und Sonderzeichen bei allen Nutzungskonten standardmäßig aktivieren
// für HAWK HHG und MW1.23LTS Pfad von "client" zu "resources" angepasst 2016-06-14
$wgDefaultUserOptions['wikieditor-preview'] = 1; // Schaltfläche für Vorschau und Änderungen aktivieren
$icons['fulltext'] = array (
$wgDefaultUserOptions['wikieditor-publish'] = 1; // Schaltfläche für Speichern/Veröffentlichen und Abbrechen aktivieren
  'src' = $wgScriptPath . '/extensions/BibManager/resources/images/' . $icon,
  ...
);
...
}
</pre>
</pre>


Für die Nutzung zusätzlicher Funktionen siehe:
==== Veralteter Code ====
* https://www.mediawiki.org/wiki/Extension:WikiEditor/de
 
* Math, Durchgestrichen, HTML-Kommentar: https://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization/Library
Es werden in der Datei "SaltWiki.php" noch folgende Methoden verwendet:
* https://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization
* "wfMsg()" anstatt von "wfMessage()->escaped()"
* https://meta.mediawiki.org/wiki/User:Krinkle/Scripts/InsertWikiEditorButton
* "$wgUser -> getSkin () -> makeMediaLinkObj ( $fileTitle )" anstatt von "Linker::makeMediaLinkObj( $fileTitle )
 
 
Das Symbol für die Erweiterung "Math", das im Standard-Editor automatisch hinzugefügt wird, fehlt bei der Erweiterung "WikiEditor".
=== SaltWikiUpload ===
 
 
Es gibt 4 Standard-"Sektionen"
Die Erweiterung "SaltWikiUpload" ergänzt die Erweiterung [[#BibManager|"BibManager"]] für das Hochladen von Dateien im Repositorium unter Berücksichtigung von Meta-Daten (Vergleich der Formulareingaben siehe weiter unten)
* main für die Standard-Funktionen
 
* advanced für die erweiterten Funktionen
==== Versionshinweis ====
* characters für die Sonderzeichen
Die Version 2012-01-25 enthält
* help
* in der Datei "SaltWikiUpload_body.php" ab Z.66 die Variable $aAuthorsLinks und in "foreach..." ab Z.104 Änderungen für $sFieldValue vor "$aText[]..."
 
* in der Sprachdatei "SaltWikiUpload.i18n.php" in den Zeilen 53, 105 und 157 ein Zusatzelement "help-various_bibtex"
Die "Sektionen" können "Gruppen" für Gruppierungen von Funktionen enthalten.
* in der Datei "\includes\SaltWikiUpload_Fields.php" das Zusatzelement "help-various_bibtex"
 
* in der Datei "\includes\SaltWikiUpload_HTMLDateField.php" Korrekturen zur Darstellung von Monatszahlen kleiner als 10 mit vorangestellter 0
Die Funktionen sind über Schaltflächen (Text oder Symbol) oder Auswahllisten (Booklets) verfügbar.
 
 
==== Fehler ====
==== Anpassungen ====
* Das erweiterte Formular wird nicht angezeigt, sondern das MW-Upload-Formular
 
* Beim Hochladen mittels MW-Upload-Formular scheitert das Hochladen mit der Fehlermeldung "Es gibt fehlerhaft ausgefüllte Felder", wenn die Erweiterung in der Datei "LocalSettings.php" eingebunden wird.
Folgende Dateien sind für zusätzliche Bearbeitungsfunktionen zu bearbeiten:
* Die Sprachdatei "SaltWikiUpload.i18n.php" enthält bei "de" die Sie-Form wie bei "de-formal".
* Bilddatei "button-math.png" aus der Erweiterung "Math" kopieren in Verzeichnis "\extensions\WikiEditor\modules\images\toolbar\" und umbenennen in "insert-math.png"
 
* Sprach-Dateien im Verzeichnis "\extensions\WikiEditor\i18n\" ergänzen
==== Veralteter Code ====
* Im Verzeichnis "\extensions\WikiEditor\modules\" folgende Dateien ergänzen
* Funktion "wfMsg" statt "wfMessage" in den Dateien
** jquery.wikiEditor.toolbar.config.js Z.443 vor "redirect"
** "SaltWikiUpload_body.php"
** optional: jquery.wikiEditor.dialogs.config.js Z. 17 "remove" und Z.71 "addToToolbar" vor "search"
** "\includes\SaltWikiUpload_Fields.php"
 
** "\includes\SaltWikiUpload_HTMLDateField.php"
'''Beispiel Sprachdatei''' "de.json" in Z.85 ergänzen:
 
<pre>
==== Formularunterschiede ====
"wikieditor-toolbar-tool-math": "Formel",
<b>SaltWikiUpload-Formular</b>
"wikieditor-toolbar-tool-math-insert": "Formel einfügen",
* Metadaten
** Beschreibung
** Quelle
** Datum
** Autor(en)
** Berechtigung
** Schlagwörter
** Typ
* Medium
** Medienart
* Quelldatei
** Quelldatei
* Dateibeschreibung
** Zielname
** Weitere Anmerkungen
 
<b>MW1.23LTS-Upload-Formular</b>
* Quelldatei
** Quelldatei
* Dateibeschreibung
** Zielname
** Beschreibung/Quelle
** Lizenz
* Hochladeoptionen
** Diese Datei beobachten
** Warnungen ignorieren
 
==== Quellcode der Version 2012-01-25 ====
Zeile 66ff unter "$aAuthors = explode(...);"
<pre>
$aAuthorsLinks = array();
foreach( $aAuthors as $sAuthor ){
  ...
  $aCategories[] = '[['.$sPrefixedCatText.']]';
  $aAuthorsLinks[] = '[[:'.$sPrefixedCatText.'|'.$oCategoryTitle->getText().']]';
}
</pre>
 
Zeile 104ff vor "$aText[] = ..."
<pre>
foreach( $aTemplate as $sFieldName => $sFieldValue ) {
  if( in_array( $sFieldName, array('literature_bibtex','grey_literature_bibtex','unpublished_reports_bibtex') ) && !empty($sFieldValue) ){
    $sFieldValue = '<bib id="'.$sFieldValue.'" />';
  }
  if( $sFieldName == 'literature_doi' && !empty($sFieldValue) ){
    $sFieldValue = 'http://dx.doi.org/'.$sFieldValue;
  }
  if( $sFieldName == 'general_author' && !empty($sFieldValue) ){
    $sFieldValue = implode('; ', $aAuthorsLinks);
  }
 
  $aText[] = '|'.$sFieldName.'='.$sFieldValue;
}
</pre>
 
=== TimedMediaHandler (JavaScript) ===
 
"TimedMediaHandler" beinhaltet den "Kaltura HTML5 Player" (JavaScript, http://www.html5video.org/kaltura-player/docs) und den experimentellen "VideoJS Player". Unterstützt werden Streaming, WebM und Ogg sowie gegebenenfalls getID3.
 
==== Einschränkung ====
 
Die Erweiterung steht ab Mediawiki 1.17 zur Verfügung, zuletzt als Version 0.5.0 mit Datum 2015-12-08 (Stand 2018-03-02). Die Versionen REL1.27, REL1.29 und REL1.30 sind nicht für MW 1.27 geeignet, da die Datei "extension.json fehlt.
 
==== Nutzungsvoraussetzungen ====
 
Die Erweiterung benötigt zusätzlich
* bis einschließlich MW1.30 die Erweiterung [[#MwEmbedSupport (JavaScript)|"MwEmbedSupport"]]
* libwinpthread-1.dll für die Installation der Anwendung "ffmpeg"
* die Anwendungen
** "ffmpeg"
** "ffmpeg2theora"
** "oggThumb"
* eventuell auch die Anwendungen
** "PEAR File_Ogg", wenn nicht in "...\extensions\TimedMediaHandler\handlers\OggHandler\" die Datei "OggHandler.php" und das Verzeichnis "PEAR\" mit dem Unterverzeichnis "File_Ogg\" vorhanden sind
*** "PEAR Package Manager" oder "PEAR Pyras Installer" - "PEAR" sollte in der PHP-Installation des Servers enthalten sein
*** "PEAR File_Ogg" 0.3.1 Beta 2010-08-27 (Stand 2016-06-21) wie bei Erweiterung "OggHandler" für "oggThumb"-Vorschaubilder
** "getID3()"
 
Für Details siehe https://phabricator.wikimedia.org/diffusion/ETMH/browse/master/README.
 
'''Es ist noch zu klären, ob eventuell das MPEG Format für eine Hochschulanwendung lizenzfrei sein könnte.'''
"FFmpeg" ist herunterzuladen von heise.de und wird dann gespeichert unter "D:\ffmpeg-wiki\".
 
==== Installation und Konfiguration ====
 
* Erweiterung herunterladen bei https://www.mediawiki.org/wiki/Extension:TimedMediaHandler
* Dateien in das Verzeichnis "extensions" kopieren
* Datei "TimedMediaHandler.sql" für Tabelle "transcode" als Kopie mit Suffix "_SW" speichern, Kopie anpassen für Tabelle mit Präfix "sr_" und zur Erstellung der Tabelle "sr_transcode" als Admin mit der Konsole ausführen: mysql -u root -p -> USE repository[_draft]
* Zusatzsoftware herunterladen
** ffmpeg (Windows, 2016-05-10) bei www.heise.de oder https://ffmpeg.zeranoe.com/builds/ <del>http://firefogg.org/nightly/ffmpeg.exe (benötigt libwinpthread-1.dll)</del>
** ffmpeg2theora (Windows, 2014-03-06) bei www.heise.de oder http://v2v.cc/~j/ffmpeg2theora/ <del>http://firefogg.org/nightly/ffmpeg2theora.exe</del>
** oggThumb (2010-06-01) bei https://sourceforge.net/projects/oggvideotools/files/oggvideotools-win32/oggvideotools-0.8a-win32/OggVideoTools-0.8a-win32.exe (vormals http://www.streamnik.de/files.html)
** PEAR File_Ogg und Installer bei
*** http://pear.php.net/package/File_Ogg/download/File_Ogg-0.3.1.tgz (Beta, 2010-08-27)
*** http://pear.php.net/go-pear.phar, Installationsanleitung http://pear.php.net/manual/en/installation.getting.php
*** http://pear2.php.net
** getID3() Version 1.9.12 stable (2016-03-02) bei http://www.getid3.org
* Zusatzsoftware einrichten
** Verzeichnis "D:\ffmpeg_ogg\" erstellen
** "ffmpeg-20160620-afd0405-win32-static.zip" entpacken unter "D:\ffmpeg_ogg\" und Verzeichnis umbenennen in "\ffmpeg\"
** "ffmpeg2theora.exe" speichern unter "D:\ffmpeg_ogg\ffmpeg2theora\"
** "OggVideoTools-0.8a-win32.exe" installieren mit Auswahl "Add OggVideoTools to the system PATH for all users" und "Create...Desktop Icon" in Zielverzeichnis "D:\ffmpeg_ogg\OggVideoTools"
* In der Datei "LocalSettings.php" einfügen:
<pre>
## MW1.27 bis MW1.30: MwEmbedSupport und TimedMediaHandler
wfLoadExtensions("MwEmbedSupport");
require_once("$IP/extension/TimedMediaHandler/TimedMediaHandler.php");
## MW1.31: TimedMediaHandler
wfLoadExtensions("TimedMediaHandler");
## MW1.26 und älter: MwEmbedSupport und TimedMediaHandler
require_once("$IP/extension/MwEmbedSupport/MwEmbedSupport.php");
require_once("$IP/extension/TimedMediaHandler/TimedMediaHandler.php");
 
# FFmpeg auskommentiert, solange kostenfreie Lizenz für Hochschule ungeklärt ist
#$wgFFmpegLocation = "D:\ffmpeg-wiki\bin\ffmpeg";
</pre>
 
=== User Merge - Benutzername löschen ===
 
Das Löschen von benutzernamen, die nicht mehr benötigt werden, geschieht durch das Zusammenführen des zu löschenden Benuztzernamens mit dem Benutzername "Testuser" zu "Testuser" mit Hilfe der Extension UserMerge.
 
* Extension unter http://www.mediawiki.org/wiki/Extension:User_Merge_and_Delete herunterladen.
* Datei in das Verzeichnis extensions/UserMerge kopieren
* In den Localsettings eingefügen
 
<pre>
wfLoadExtensions( 'UserMerge' );
# Assign the usermerge right to a usergroup, i.e. to the bureaucrats:
$wgGroupPermissions['bureaucrat']['usermerge'] = true;
</pre>
 
=== WhosOnline - Wer ist online ===
 
Die Extension WhosOnline dient dazu sich auf einer Specialpage anzeigen zu lassen, wer gerade online ist.
 
Für MediaWiki 1.23 war im Herbst 2015 als älteste Version nur eine "REL1_25", also Version 1.4.0 für MW 1.25 erhältlich, die einen Script-Fehler verursachte, wenn in der Datei "WhosOnlineSpecialPage.php" bei der Funktion "getNavigationBar()" die Variable "$title" vom Typ String statt Objekt ist; zur Fehlerbehebung siehe weiter unten und https://www.mediawiki.org/wiki/Extension_talk:WhosOnline#Bug_in_MW_1.24_.3F
 
Bei MediaWiki 1.25 verursachte die Version 1.5.0 einen Fehler, wenn die Datei "upgrade.php" verwendet wurde, weil die Datei "extension.json" in der Erweiterung fehlte; siehe https://www.mediawiki.org/wiki/Extension_talk:WhosOnline#Fatal_error_running_update.php_on_V1.5.0. Es musste deshalb in der Datei "LocalSettings.php" wie bei älteren Versionen "require_once ..." statt "wfLoadExtension(...)" verwendet werden.
 
*Dateien unter http://www.mediawiki.org/wiki/Extension:WhosOnline herunterladen und extrahieren
*Verzeichnis "WhosOnline" unter "Extensions" speichern
*Für MediaWiki 1.27 evtl. wie bei WM 1.23 in der Datei "WhosOnlineSpecialPage.php" die Funktion "getNavigationBar()" anpassen
*SQL-Befehl in der Extension-Datei "WhosOnline.sql" für neue Datenbank-Tabelle anpassen (siehe weiter unten)
*Mit "phpMyAdmin" und geändertem SQL-Befehl eine neue Datenbank-Tabelle erstellen (siehe weiter unten)
*In der Datei "LocalSettings.php" einfügen:
<pre>
wfLoadExtensions( 'WhosOnline' );
$wgWhosOnlineShowAnons = true;
</pre>
 
'''Datei "WhosOnlineSpecialPage.php" für MW 1.23 anpassen'''
 
Die Funktion "getNavigationBar()" ab Zeile 75 kopieren, auskommentieren und die Kopie darunter einfügen.
In der Kopie die Variable $wgLang als Ersatz für $wgContLang und die entsprechenden Variablen für die return-Funktion hinzufügen:
<pre>
function getNavigationBar(){
  global $wgContLang, $wgLang;
  $link = $wgContLang->specialpage('WhosOnline');
  if(is_object($link)){
    $title = $link;
  }
  else{
    $title = Title::newFromText($link);
    if(is_null($title)){
      return false;
    }
  }
  $offset = $this->mOffset;
  $limit = $this->mLimit;
  $query = '';
  $query = wfCgiToArray('');
  $atend = $this->countUsersOnline() < ($this->mLimit + $this->mOffset); // show next link
 
  return $wgLang->viewPrevNext(
    $title,
    $offset,
    $limit,
    $query,
    $atend
  );
}
</pre>
 
'''Datei "WhosOnline.sql" anpassen'''
 
Den SQL-Befehl in der Extension-Datei "WhosOnline.sql" für die neue Datenbank-Tabelle in der ersten Zeile z. B. wie folgt mit Präfix "sw_" bzw. "sr_" anpassen:
<pre>CREATE TABLE `[datenbankname]`.`[praefix]online` (</pre>
 
'''Datenbank-Tabelle erstellen'''
 
Mit "phpMyAdmin" die MySQL-Datenbank für das Wiki auswählen und nach Auswahl des Karteikartenreiters/Tabs "SQL" die Tabelle "sw_online" bzw. "sr_online" durch Eingabe des folgenden SQL-Statements anlegen:
<pre>
CREATE TABLE  `[datenbankname]`.`[praefix]online`  (
`userid` int(5) NOT NULL default '0',
`username` varchar(255) NOT NULL default '',
`timestamp` char(14) NOT NULL default '',
PRIMARY KEY USING HASH (`userid`, `username`),
INDEX USING BTREE (`timestamp`)
) TYPE=MEMORY;
</pre>
 
=== WikiEditor (Extension-Code, JavaScript) ===
 
'''Achtung: Funktioniert nur bei Browsern mit aktiviertem JavaScript und muss in den nachfolgend genannten Dateien und dem Grafiken-Verzeichnis nach jedem MediaWiki-Update auf Vorhandensein und Änderungen überprüft werden!'''
 
Die Erweiterung "WikiEditor" wird bei MW1.31 als Standard-Editor mitgeliefert.
 
Um die Erweiterung einzubinden und sie für alle Nutzungskonten verfügbar zu machen, sind in der Datei "LocalSettings.php" in MW1.31 folgende Angaben nötig:
<pre>
wfLoadExtension("WikiEditor");
...
## Editor für Bearbeitung der Inhalte
#require_once("$IP/extensions/WikiEditor/WikiEditor.php");
## nicht erforderliche Angaben bei MW1.31
#$wgDefaultUserOptions['usebetatoolbar'] = 1; // Editor bei allen Nutzungskonten standardmäßig aktivieren
#$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1; // Erweiterte Funktionen und Sonderzeichen bei allen Nutzungskonten standardmäßig aktivieren
#$wgDefaultUserOptions['wikieditor-preview'] = 1; // Schaltfläche für Vorschau und Änderungen aktivieren
#$wgDefaultUserOptions['wikieditor-publish'] = 1; // Schaltfläche für Speichern/Veröffentlichen und Abbrechen aktivieren
</pre>
 
Für die Nutzung zusätzlicher Funktionen siehe:
* https://www.mediawiki.org/wiki/Extension:WikiEditor/de
* Math, Durchgestrichen, HTML-Kommentar: https://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization/Library
* https://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization
* https://meta.mediawiki.org/wiki/User:Krinkle/Scripts/InsertWikiEditorButton
 
Das Symbol für die Erweiterung "Math", das im ehemaligen Standard-Editor (MW1.16) automatisch hinzugefügt wurde, fehlt bei der Erweiterung "WikiEditor".
 
Es gibt 4 Standard-"Sektionen"
* main für die Standard-Funktionen
* advanced für die erweiterten Funktionen
* characters für die Sonderzeichen
* help
 
Die "Sektionen" können "Gruppen" für Gruppierungen von Funktionen enthalten.
 
Die Funktionen sind über Schaltflächen (Text oder Symbol) oder Auswahllisten (Booklets) verfügbar.
 
==== Anpassungen ====
 
Folgende Dateien sind für zusätzliche Bearbeitungsfunktionen zu bearbeiten:
* Bilddatei "button-math.png" aus der Erweiterung "Math" kopieren in Verzeichnis "\extensions\WikiEditor\modules\images\toolbar\" und umbenennen in "insert-math.png"
* Sprach-Dateien im Verzeichnis "\extensions\WikiEditor\i18n\" ergänzen
* Im Verzeichnis "\extensions\WikiEditor\modules\" folgende Dateien ergänzen
** jquery.wikiEditor.dialogs.config.js Z. 59 hinter "table"
** jquery.wikiEditor.toolbar.config.js Z. 277 vor "redirect" (für Schaltfläche in der Symbolleiste)
** <del>optional: jquery.wikiEditor.dialogs.config.js Z. 17 "remove" und Z. 71 "addToToolbar" vor "search"</del>
 
'''Beispiel Sprachdateien''' "de.json" in Z. 33 und "de-formal.json" in Z. 10 ergänzen:
<pre>
"wikieditor-toolbar-tool-math": "Formel",
"wikieditor-toolbar-tool-math-insert": "Formel einfügen",
</pre>
 
'''Beispiel Sprachdatei''' "en.json" in Z. 21 ergänzen:
<pre>
"wikieditor-toolbar-tool-math": "Formula",
"wikieditor-toolbar-tool-math-insert": "Insert formula",
</pre>
 
Die Datei "jquery.wikiEditor.dialogs.config.js" Z. 59:
<pre>
.wikiEditor( 'addToTollbar", {
section: 'advanced',
group: 'insert',
tools: {
  table: {
    ...
  },
  math: {
  labelMsg: 'wikieditor-toolbar-tool-math',
  type: 'button',
  oouiIcon: 'insert-math',
  action: {
    type: 'dialog',
    module: 'insert-math'
  }
  }
}
} )
.wikiEditor( 'addToTollbar", {
section: 'advanced',
groups: {
  search: {
  ...
</pre>
</pre>


Datei "jquery.wikiEditor.toolbar.config.js" Z.443 vor "redirect" mit den offset-Werten von "redirect" ergänzen und "redirect" auskommentieren:
Die Datei "jquery.wikiEditor.toolbar.config.js" Z. 277 im Bereich "Format section => advanced => groups => insert => tools" vor "redirect" ergänzen <del>mit den offset-Werten von "redirect" ergänzen und "redirect" auskommentieren</del>:
<pre>
<pre>
// neu für HAWK HHG 2017-01-31
math: {
'math': {
  labelMsg: 'wikieditor-toolbar-tool-math',
  'labelMsg': 'wikieditor-toolbar-tool-math',
  type: 'button',
  'type': 'button',
  oouiIcon: 'insert-math',
  'icon': {
  action: {
  'default': 'insert-math.png',
   type: 'encapsulate',
  'default-rtl': 'insert-math.png'
   options: {
},
   pre: '<math>\n',
'offset': {
   periMsg: 'wikieditor-toolbar-tool-math-insert',
  'default': [-70, -142],
   post: '\n</math>',
  'default-rtl': [-70, -502]
   ownline: true
  },
'action': {
   'type': 'encapsulate',
   'options': {
   'pre': '<math>\n',
   'periMsg': 'wikieditor-toolbar-tool-math-insert',
   'post': '\n</math>',
   'ownline': true
   }
   }
  }
  }
}/*,
},
'redirect': {
'redirect': {
...
...
}
}
*/
</pre>
Datei "jquery.wikiEditor.dialogs.config.js" Z.17 vor ".wikiEditor( 'addToToolbar', {...} )" und Z.71 zwischen "group:insert tools:table" und "group:search" ergänzen:
<pre>
replaceIcons: function ( $textarea ) {
...
.wikiEditor( 'removeFromToolbar', { section: 'advanced', group: 'insert', tool: 'math' } )
}
...
// neu für HAWK HHG 2017-01-31
.wikiEditor( 'addToToolbar', {
section: 'advanced',
group: 'insert',
tools: {
  'math': {
  labelMsg: 'wikieditor-toolbar-tool-math',
  type: 'button',
  icon: 'insert-math.png',
  offset: [-70, -142],
  action: {
    type: 'dialog',
    module: 'insert-math'
  }
  }
}
} )
</pre>
</pre>



Aktuelle Version vom 16. Mai 2024, 14:21 Uhr

Dokumentation zur Bereitstellung von "SalzWiki", "SaltWiki" und "Repository"

Allgemeines[Bearbeiten]

In dieser Dokumentation werden die Installation und Konfiguration der Salzwikis (3 Wikisysteme) und der Erweiterungen (Extensions) beschrieben. Die Angaben beziehen sich auf Mediawiki Version 1.31.0 LTS.

Ein Update kann durch Installation über die bestehende Version erfolgen oder durch Neuinstallation und Transfer von Konfigurationen und Daten. Um Altlasten in der neueren Version zu vermeiden empfiehlt sich Letzteres.

Das Repositorium-Wiki (deutsch) ist zusammen mit dem allgemeinen Salzwiki (deutsch) zu installieren, bevor die Konfigurationen in den Dateien "LocalSettings.php" geändert und Erweiterungen installiert werden, weil Zugriffe vom allgemeinen Salzwiki auf das Repositorium zu konfigurieren sind.

Sprachvarianten[Bearbeiten]

  • Das deutsche SalzWiki ist einsprachig "Deutsch".
  • Das englische Saltwiki ist einsprachig "English".
  • Das Repositorium ist seit 2012 einsprachig "Englisch" (zuvor "Deutsch") und soll 2-sprachig "Deutsch/English" werden.

Zur Konfiguration der Standardspracheinstellung siehe unter Wiki-Konfiguration -> Spracheinstellungen

Installationen[Bearbeiten]

Server und Anwendungen[Bearbeiten]

  1. Betriebssystem Windows-Server 2012 R2
  2. VMWare Tools (für Virtualisierung)
  3. Virenschutz Sophos
  4. Microsoft Visual C++ for Visual Studio 2017 Redistributable 64-Bit [VC15 x64]
  5. Webserver Apache 2.4.34 64-Bit VC15 mit OpenSSL 1.1.0i und anderen Zusatzmodulen
  6. Scriptsprache PHP 7.2.9 ThreadSafe 64-Bit (für Apache unter Windows) mit Zusatzmodulen
  7. Datenbank-Server (MySQL/)MariaDB 10.2.17 64-Bit
  8. Datenbank-Management-Anwendung phpMyAdmin 4.8.3
  9. Statistik-Anwendung Webalizer 2.23-08 32-Bit
  10. Wikisystem MediaWiki 1.31.1 LTS mit Erweiterungen und Zusatz-Software
  11. GhostScript AGPL 9.23 (für MediaWiki) neue 64-Bit-Version von 2018 statt GPL-Variante gs_910w32.exe von 2013
  12. ImageMagick (für MediaWiki) Version 7.0.8-11-Q16-HDRI-x64-dll.exe
  13. php-imagick (für MediaWiki mit ImageMagick) neue 64-Bit-Version für PHP7.2-TS-VC15
  14. MiKTeX 2.9.6637 NetInstaller-Version mit Complete-Installation (für MediaWiki mit Formeln) 64-Bit-Version
  15. Statistik-Anwendung Matomo, vormals Piwik

Programme unter Systemsteuerung Windows Server 2012 R2[Bearbeiten]

Für MediaWiki 1.31.1 LTS[Bearbeiten]
  • GPL Ghostscript 9.23
  • ImageMagick 7.0.8-11 Q16-HDRI (64-bit) (2018-08-31)
  • Microsoft Visual C++ 2017 Redistributable [VC15] (x64) - 14.13.26020.0
  • MikTeX 2.9
Für Server-System[Bearbeiten]
  • Sophos Anti-Virus, AutoUpdate, Endpoint Defense, System Protection
  • VMware Tools

Installationen ohne XAMPP[Bearbeiten]

Die Server und Anwendungen werden vergleichbar einer XAMPP-Installation in ein Verzeichnis "D:\noxampp\" installiert.

Für Apache, MySQL/MariaDB, PHP, phpMyAdmin und Webalizer sind die Angaben in den Konfigurationsdateien anzupassen.

Es ist im Verzeichnis "D:\noxampp\htdocs\" ein Unterverzeichnis "info\" anzugelegen, in dem die selbst erstellte Datei "phpinfo.php" gespeichert wird.

Die Dienste für Apache und MySQL müssen per Kommandozeile, die als Administrator zu öffnen ist, installiert werden, damit sie bei einem Windows-Server-Neustart ebenfalls neu gestartet werden.

Verzeichnisse und Dateien[Bearbeiten]

Im Verzeichnis "D:\noxampp\" befinden sich folgende Dateien mit Informationen und für die Konfiguration

  • apache
    • conf\httpd.conf
    • conf\extra\ mit Dateien httpd-default.conf, httpd-ssl.conf, httpd-vhosts.conf
  • htdocs
    • Angepasste Datei: index.php
    • info\phpinfo.php (neu erstelltes Verzeichnis mit selbst erstellter Datei)
    • Wiki-Verzeichnisse
  • mysql
    • my.ini
    • data
  • php
    • php.ini
  • phpmyadmin
    • config.inc.php
  • tmp (neu erstelltes Verzeichnis für Session-Dateien)
  • webalizer
    • webalizer.bat
    • conf-Dateien der Wikis

Firewall-Ausnahmen[Bearbeiten]

In der Windows Firewall sind 2 Ausnahmen für eingehenden Datenverkehr durch Erstellen eigener Regeln hinzuzufügen:

  • "Apache_TCP_80_443"
    • Beschreibung: Apache-Dienst TCP-Verbindungen Ports 80, 443 und 8080
    • Programme und Dienste: "D:\noxampp\apache\bin\httpd.exe"
    • Protokolle und Ports: Protokolltyp TCP, Ports 80, 443, 8080
    • Erweitert: Profil Öffentlich, Edgeausnahme blockieren
  • "IP_Bereiche_zulassen"
    • Beschreibung: fuer MSSQL von H.I. per VPN und von RedDot und HAWK-Website
    • Bereich: Remote-IP-Adressen für H.I.-DSL-Zugang, HAWK-VPN-Bereiche, RZ-Rechner, H.I.-Webserver, RedDot-Server, HAWK-Webserver, Datenbankserver
    • Erweitert: Profile Domäne, Privat und Öffentlich

Virenschutz-Ausnahmen[Bearbeiten]

In "Sophos" unter "Konfigurieren => Antivirus => On-Access-Scans... => Ausschlüsse" folgende Objekttypen hinzufügen:

  • Prozess
    • Apache*
    • MariaDB
  • Ordner
    • D:\noxampp\apache\
    • D:\noxampp\mysql\
    • D:\noxampp\texmf\miktex\

Apache-Webserver[Bearbeiten]

Der Apache-Webserver ist als Dienst zu installieren, damit er nach Rechner-Neustarts durch Windows-Updates automatisch gestartet werden kann.

Apache ohne XAMPP[Bearbeiten]

Für die Nutzung von Apache ohne XAMPP ist zu berücksichtigen, dass der Apache-Webserver für Windows nicht bei apache.org erhältlich ist. Es empfiehlt sich die Verwendung des Apache von https://www.apachelounge.com/download/. Eventuell können auch die Portable-Versionen von ApacheHTTPD_PHP_Portable_2.4.6 und portable-apache-2.2.17-win32-x86 verwendet werden.

Verzeichnisumbenennung[Bearbeiten]

Sofern das Verzeichnis für Apache "Apache24" lautet, wird es in "apache" umbenannt.

Die Pfadangaben in den Konfigurationsdateien mit der Dateiendung "conf" und in den batch-Dateien für Starts und Stopps mit der Dateiendung "bat" sind anschließend an die Bezeichnung "apache" anzupassen.

Apache als Dienst installieren[Bearbeiten]

Nachdem die Kommandozeile als Administrator geöffnet wurde, den Apache-Dienst installieren:

D:
cd noxampp\apache\bin
httpd -k install

Unter "Systemsteuerung => System und Sicherheit => Verwaltung => Dienste" prüfen, ob der Dienst "Apache2.4" den Starttyp "Automatisch" aufweist, damit er nach einem Rechner-Neustart automatisch gestartet wird.

Start und Stopp des Dienstes[Bearbeiten]

Der Apache-Webserver kann auf verschiedene Arten gestartet und angehalten werden:

  • Windows Task Manager => Dienste
  • mit Hilfe des Apache-Monitors
  • per Kommandozeile
Start und Stopp per Task Manager[Bearbeiten]

Um den Apache-Dienst zu starten oder anzuhalten, wird unter "Verwaltung => Dienste" nach Auswahl des Dienstes "Apache2.4" entweder im Menü unter "Aktion" oder mit der rechten Maustaste im Kontextmenü der jeweilige Vorgang ausgewählt.

Start und Stopp per Apache-Monitor[Bearbeiten]
  • Im Windows Explorer folgende Datei als Administrator ausführen: "D:\noxampp\apache\bin\ApacheMonitor.exe"
  • In der Taskleiste das Symbol mit der rechten Maustaste anklicken und "Open Apache Monitor" auswählen
  • Service "Apache2.4" markieren und Schaltfläche "Start" oder "Stop" auswählen
Start und Stopp per Kommandozeile[Bearbeiten]
NET start Apache2.4

cd D:\noxampp\
apache\bin\pv -f -k httpd.exe -q

Apache-Konfiguration[Bearbeiten]

Bei einer Installation von Apache ohne XAMPP werden die Verwendung von PHP und die Berechtigungen etwas anders als bei einer Installation mit XAMPP festgelegt. Die Haupt-Konfiguration unterscheidet sich je nach Installation wie folgt:

  • ohne XAMPP: in der Datei "apache\conf\httpd.conf"
  • mit XAMPP: zusätzlich in der Datei "apache\conf\extra\httpd-xampp.conf"

Konfigurationsdateien haben die Dateiendung ".conf" und befinden sich in folgenden Verzeichnispfaden:

  • Datei "apache\conf\httpd.conf
  • Dateien im Verzeichnis "apache\conf\extra\"
    • httpd-autoindex.conf
    • httpd-dav.conf
    • httpd-default.conf
    • httpd-manual.conf
    • httpd-mpm.conf
    • httpd-multilang-errordoc.conf
    • httpd-ssl.conf
    • httpd-vhosts.conf

httpd.conf[Bearbeiten]

In der Hauptkonfigurationsdatei werden allgemeine Einstellungen festgelegt, beispielsweise

  • Server-Pfad
  • Standard-HTTP-Port
  • Standard-Verzeichnis für Webdateien
  • Verwendung von Modulen wie "ssl" und "php"
  • Verwendung von Konfigurationsdateien aus dem Unterverzeichnis "\extra"
  • Schutz von Verzeichnissen

Sofern VHosts für verschiedene Domains in der Datei "httpd-vhosts.conf" eingerichtet werden, werden in der Datei "httpd.conf" nur HTTP-Aufrufe von "localhost" oder über die Server-IP festgelegt.

define SRVROOT "D:/noxampp/apache"
ServerRoot "${SRVROOT}"
...
Listen 80
..
## ThreadSafe von PHP verwenden, eingefügt 2018-09-03
LoadFile "D:/noxampp/php/php7ts.dll"
#LoadFile "/noxampp/php/libpq.dll"
...
LoadModule acces_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule headers_module modules/mod_headers.so
LoadModule include_module modules/mod_include.so
LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule log_rotate_module modules/mod_log_rotate.so # Zusatzmodul für LogRotation
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php7_module D:/noxampp/php/php7apache2_4.dll # Zusatzmodul für PHP7
#LoadModule session_module modules/mod_session.so
#LoadModule session_cookie_module modules/mod_session_cookie.so
#LoadModule session_crypto_module modules/mod_session_crypto.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule status_module modules/mod_status.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
...
ServerAdmin webmaster@hornemann-institut.de
ServerName localhost:80
...
DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
...
</Directory>
...
<IfModule dir_module>
  DirectoryIndex index.php index.html
</IfModule>
...
<Files ".ht*">
  Require all denied
</Files>

Bei einer Installation von Apache ohne XAMPP werden die Verwendung von PHP und die Berechtigungen nicht in der Datei "\conf\extra\httpd-xampp.conf", sondern in der Datei "httpd.conf" wie folgt festgelegt.

...
#### aus "/extras/httpd-xampp.conf"
#<IfModule env_module>
#  SetEnv MIBDIRS "/noxampp/php/extras/mibs"
#  SetEnv MYSQL_HOME "\\noxampp\\mysql\\bin"
#  SetEnv OPENSSL_CONF "/noxampp/apache/bin/openssl.cnf"
#  SetEnv PHP_PEAR_SYSCONF_DIR "\\noxampp\\php"
#  SetEnv PHPRC "\\noxampp\\php"
#  SetEnv TMP "\\noxampp\\tmp"
#</IfModule>
...
<IfModule mime_module>
  ...
  #AddType text/html .shtml
  #AddOutputFilter INCLUDES .shtml
  #### Fuer PHP eingefügt
  AddType text/html .php
</IfModule>
...
#### aus "XAMPP" abgewandelt
<IfModule php7_module>
  PHPIniDir "D:/noxampp/php"
</IfModule>
...
#### aus "XAMPP" abgewandelt
<FilesMatch "\.php$">
  SetHandler application/x-httpd-php
</FilesMatch>
...

Verzeichnisauflistungen verhindern[Bearbeiten]

Um Auflistungen von Dateien und Verzeichnissen im Browser zu verhindern, ist die Angabe "-Indexes" in der Konfigurationsdatei "apache\conf\httpd.conf" und bei den VHosts erforderlich:

<Directory />
  #Options -Indexes +FollowSymLinks
  AllowOverride none
  Require all denied
</Directory>
...
DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
  Options -Indexes +FollowSymLinks +Includes -ExecCGI
  AllowOverride All
  Require all granted
</Directory>

Verzeichniszugriff per Authentifizierung[Bearbeiten]

Um den Zugriff auf bestimmte Verzeichnisse per Browser nur für bestimmte Anmeldenamen mit Passwort zu erlauben, sind Angaben in folgenden Konfigurationsdateien erforderlich:

  • "noxampp\apache\conf\httpd.conf"
  • "noxampp\apache\conf\extra\httpd-default.conf"
  • "noxampp\phpMyAdmin\config.inc.php"


Apache-Datei "httpd.conf"[Bearbeiten]

ca. Z.300f

<Files ".ht*">
  Require all denied
<Files>
Apache-Datei "httpd-default.conf"[Bearbeiten]

Z.45

AccessFileName .htaccess

Verzeichniszugriff für bestimmte Rechner-IPs[Bearbeiten]

Um von einem Rechner aus, der sich in einem bestimmten Netz befindet oder per VPN mit einer bestimmten IP verbunden ist, per Browser die Verzeichnisse nicht nur mit "localhost" aufrufen zu können, müssen zusätzliche Angaben mit "Require ip ..." erfolgen; die Fehlermeldung für einen unzulässigen Aufruf wird mit "ErrorDocument ..." erzeugt.

In der Datei "D:\noxampp\apache\conf\httpd.conf" am Ende einfügen:


#### Verzeichnisschutz mit IP-Whitelist aus "xampp" abgewandelt
<LocationMatch "^/(?i:(?:info|phpmyadmin))">
  Require local
  Require ip 193.175.110.
  Require ip 10.104.5.
  Require ip 10.104.55.
  Require ip 10.104.56.
  Require ip 172.16.100.2
  Require ip 172.28.0.
</LocationMatch>

Server-Software auf Fehlerseiten nicht anzeigen[Bearbeiten]

Standardmäßig werden auf den Fehlerseiten folgende Details des Webservers angezeigt:

  • Webserver-Bezeichnung "Apache"
  • Webserver-Version
  • Betriebssystem-Art "Win64"
  • OpenSSL-Version

Dies ist der Fall, obwohl üblicherweise "ServerSignature Off" in Apache eingestellt ist, weil ab Version 2.0.44 die Angaben für "ServerTokens" ausschlaggebend sind, siehe auch

In der Datei "httpd.conf" können unterhalb der "include"-Anweisungen folgende Angaben eingetragen werden, um auch im HTTP-Request möglichst wenig Informationen zu übermitteln:

ServerSignature Off
ServerTokens Prod

Um auch die minimalen Angaben auf den Fehlerseiten aus Sicherheitsgründen zu unterbinden, ist in der Datei "D:\xampp\apache\error\include\bottom.html" im span-Element für die Variable "SERVER_SOFTWARE" hinter dem öffnenden HTML-Kommentar ein Leerzeichen einzufügen:

<span><!-- #echo var="SERVER_SOFTWARE" --></span>

Konfiguration für HTTPS[Bearbeiten]

Es sind für HTTPS mit Verschlüsselung folgende Änderungen gegenüber HTTP ohne Verschlüsselung erforderlich:

  • Server-Zertifikat
    • Zertifikat von einer anerkannten Zertifizierungsstelle erstellen lassen
    • Anpassung einiger Zertifikat-Dateien für Apache unter Windows
  • Domain-Adresse für das Repositorium
  • Apache-Konfiguration
    • für Virtuelle Hosts mit Port 443 in der Datei "...\apache\extra\httpd-vhosts.conf"
    • für Deaktivierung des Passphrasen-Dialogs in der Datei "...\apache\extra\httpd-ssl.conf"
  • MediaWiki-Konfigurationsdatei "LocalSettings.php"
    • eigene PHP-Variable für das bei der Anfrage verwendete Protokoll
    • CreativeCommons-URLs mit https
Server-Zertifikat[Bearbeiten]

Das Server-Zertifikat wird vom Rechenzentrum der Hochschule beim DFN beantragt.

Zertifikat-Domains[Bearbeiten]

Das Zertifikat muss folgende Domain-Adressen abdecken:

  • salzwiki.de, www.salzwiki.de
  • saltwiki.net, www.saltwiki.net
  • repository.hawk-hhg.de, salzwiki.hawk-hhg.de, saltwiki.hawk-hhg.de
  • repository.hawk.de, salzwiki.hawk.de, saltwiki.hawk.de

Für Tests auf einem Testserver können folgende Domain-Adressen verwendet werden:

  • test-szw.hawk.de
  • test-stw.hawk.de
  • test-rpw.hawk.de
Zertifikat-Dateien[Bearbeiten]

Die Zertifikat-Dateien haben folgende Bezeichnungen:

  • **öffentlicher Schlüssel**: "cert-***.pem" wird umbenannt in "salzwiki_cert_pem.crt"
  • **Zertifikate-Kette**: Es ist seit 2017 keine gesonderte Zertifikatsketten-Datei erforderlich, weil die Angaben zur Zertifizierungskette in den Zertifikaten enthalten sind.
  • privater Schlüssel
    • "salzwiki.de.key" ist mit einem Passwort geschützt und kann von Apache unter Windows nicht verwendet werden
    • "salzwiki.de.nopw.key" wird als Kopie von "salzwiki.de.key" ohne Passwortschutz erstellt

Um die Datei mit dem privaten Schlüssel ohne Passwortschutz verwenden zu können, müssen die Zugriffsrechte für das Verzeichnis "...\apache\conf\ssl.key\" erhöht werden. Das Verzeichnis darf nur vom Webserver ausgelesen werden können und nur mit Admin-Rechten zugänglich sein. Die Windows-Gruppe "Benutzer" muss von der Vererbung der übergeordneten Verzeichnisse befreit und aus den Verzeichnis-Berechtigungen entfernt werden.

Für die Erzeugung der Datei mit dem privaten Schlüssel ohne Passwortschutz kann die Datei "...\apache\bin\openssl.exe" verwendet werden, die inzwischen nicht mehr aus dem "XAMPP"-Paket hinzugefügt werden muss. Hierzu die geschützte Schlüsseldatei in dasselbe Verzeichnis einfügen, die Kommandozeile mit Admin-Rechten öffnen und folgenden Befehl eingeben:

openssl x509 -in salzwiki.de.key -out salzwiki.de.nopw.key

Die Zertifikate-Dateien werden in folgenden Unterverzeichnissen von "...\apache\conf\" gespeichert:

  • ssl.crt
    • salzwiki_cert_pem.crt
    • salzwiki_chain_pem.crt
  • ssl.key
    • salzwiki.de.key
    • salzwiki.de.nopw.key
Apache-Konfiguration ohne Passphrasen-Dialog[Bearbeiten]

Um unter Windows den Apache-Webserver bei Seitenaufrufen an der Passwort-Abfrage zu hindern ist in der Datei "httpd-ssl.conf" der Passphrasen-Dialog wie folgt auszukommentieren:

#SSLPassPhraseDialog builtin
Wiki-Konfiguration für Übertragungsprotokoll[Bearbeiten]

In der Datei "LocalSettings.php" wird bei Z.33ff eine Abfrage, welches Protokoll (http oder https) beim jeweiligen Seitenaufruf verwendet wird, eingefügt. Das Ergebnis wird in einer Variablen gespeichert und an mehreren Stellen in der Datei eingesetzt:

## The protocol and server name to use in fully-qualified URLs
if($_SERVER['HTTPS']==="on" OR !empty($_SERVER['HTTPS'])){$protokoll = "https";}
else{$protokoll = "http";}
$wgServer = $protokoll."://".$_SERVER['SERVER_NAME'];

Konfiguration für IP oder Domain[Bearbeiten]

"SalzWiki" und "Salt"Wiki" wurden ursprünglich durch Weiterleitungen von den "1&1"-Servern über folgende IP-Adressen eines "HAWK"-Servers zur Verfügung gestellt:

  • salzwiki.de => 193.175.110.91/salzwiki
  • saltwiki.net => 193.175.110.91/saltwiki

Das Repositorium war ohne Domain nur direkt über folgende IP-Adresse eines "HAWK"-Servers verfügbar:

  • 193.175.110.91/repository

Für eine Nutzung der Wikis per "HTTPS" mit SSL-Server-Zertifikat müssen Domain-Adressen statt IP-Adressen verwendet werden. Hierfür wurde bei den über "1&1" gehosteten Domains der DNS-Eintrag vom "1&1"-Server zum "HAWK"-Server geändert und die Weiterleitung aufgehoben.

Damit bei der Anmeldung im Repositorium vom Browser keine Sicherheitswarnung wegen eines fehlenden Server-Zertifikats erscheint, ist eine eigene Domain-Adresse für das Repositorium notwendig. Weil der Vertrag mit "1&1" keine Subdomains vorsieht, wurde hierfür bei der HAWK die Subdomain "repository.hawk-hhg.de" eingerichtet.

Konfiguration für IP[Bearbeiten]

Sofern die Wikis mit der IP-Adresse verwendet werden, sind keine besonderen Anpassungen in den Apache-Konfigurationsdateien erforderlich, abgesehen von den Unterschieden zwischen einer Installation mit oder ohne "XAMPP".

Konfiguration für Domain[Bearbeiten]

Sofern die Wikis mit den Domain-Adressen und "HTTPS" verwendet werden, sind Definitionen in folgenden Apache-Konfigurationsdateien im Unterverzeichnis "\extra\" erforderlich:

  • httpd-vhosts.conf für Virtual Hosts
  • httpd-ssl.conf eventuell für Anpassung der Standard-SSL-Konfiguration
Virtual Hosts[Bearbeiten]

Mehrere Domain-Adressen mit unterschiedlichen Inhalten auf einem Server werden als Virtual Hosts (VHosts) in der Datei "httpd-vhosts.conf" verwaltet.

Der zuerst definierte VHost ist der Standard-Server, beispielsweise "localhost", für Test-Wikis ohne Domain-Adresse und für nicht definierte Adressen mit dem Standard-Port 80 für "HTTP". Danach folgen die Definitionen für die Domain-Adressen und ihre Alias-Adressen mit dem Standard-Port 80 für "HTTP":

  • localhost (inkl. 193.175.110.91/salzwiki_draft, 193.175.110.91/saltwiki_draft, 193.175.110.91/repository_draft)
  • salzwiki.de alias www.salzwiki.de und salzwiki.hawk-hhg.de
  • saltwiki.net alias www.saltwiki.net und saltwiki.hawk-hhg.de
  • repository.hawk-hhg.de
  • subdomain-name.localhost

Für HTTPS-Verbindungen mit Port 443 erhalten folgende Domain-Adressen ebenfalls einen Eintrag in dieser VHosts-Datei – nicht in der Datei "httpd-ssl.conf":

  • localhost (mit selbst erstelltem SSL-Server-Zertifikat)
  • salzwiki.de alias www.salzwiki.de und salzwiki.hawk-hhg.de
  • saltwiki.net alias www.saltwiki.net und saltwiki.hawk-hhg.de
  • repository.hawk-hhg.de
Subdomains für localhost[Bearbeiten]

Subdomains für "localhost" können als "ServerAlias" oder für lokale Tests als "ServerName" festgelegt werden. Hierfür ist zusätzlich die "hosts"-Datei von Windows im Verzeichnis "C:\Windows\System32\drivers\etc\" zu ergänzen:

# Für Tests des Hornemann Instituts der HAWK eingefügt 2017-05-23
193.175.110.91   szw.localhost
193.175.110.91   stw.localhost
193.175.110.91   rpw.localhost
193.175.110.91   salzwiki.localhost
193.175.110.91   saltwiki.localhost
193.175.110.91   repository.localhost
Umstellung von IP-Adresse zu Domain-Adresse[Bearbeiten]

Bei einer Umstellung von IP-Adresse zu Domain-Adresse ändert sich das "root"-Verzeichnis von "htdocs" zum jeweiligen Wiki-Unterverzeichnis, das bei der VHost-Definition angegeben ist. Deshalb werden beim Standard-VHost für die bisher verwendeten Wiki-IP-Adressen Weiterleitungen zu den Wiki-Domain-Adressen eingerichtet, weil bei einer solchen Umstellung auch in den Wiki-Konfigurationsdateien "LocalSettings.php" in Z.30 der Pfad bei "$wgScriptPath" zu einem leeren String zu ändern ist:

$wgScriptPath = ""; #"/salzwiki"; #"/saltwiki"; #"/repository";

Vergleich zwischen IP-Adresse und Domain-Adresse:

  • SalzWiki
    • IP-Adresse: salzwiki.de als Weiterleitung zu "193.175.110.91/salzwiki/" mit $wgScriptPath = "/salzwiki";
    • Domain-Adresse: salzwiki.de als DNS-Eintrag zu "193.175.110.91" bei "1&1" mit Apache-VHost-Verzeichnis "/salzwiki" und mit $wgScriptPath = "";
  • SaltWiki
    • IP-Adresse: saltwiki.net als Weiterleitung zu "193.175.110.91/saltwiki/" mit $wgScriptPath = "/saltwiki";
    • Domain-Adresse: saltwiki.net als DNS-Eintrag zu "193.175.110.91" bei "1&1" mit Apache-VHost-Verzeichnis "/saltwiki" und mit $wgScriptPath = "";
  • Repository ohne Domain-Adresse
    • IP-Adresse: "193.175.110.91/repository/" mit $wgScriptPath = "/repository";
  • Repository mit Domain-Adresse
    • IP-Adresse: repository.hawk-hhg.de als Weiterleitung zu "193.175.110.91/repository/" mit $wgScriptPath = "/repository";
    • Domain-Adresse: repository.hawk-hhg.de als DNS-Eintrag zu "193.175.110.91" bei der HAWK mit Apache-VHost-Verzeichnis "/repository" und mit $wgScriptPath = "";
VHost-Definitionen[Bearbeiten]

Für HTTPS ist das öffentliche Ketten-Zertifikat "salzwiki_chain_pem.crt" als Standard-Zertifikat in der Direktive "SSLCertificateFile" anzugeben und die Direktive "SSLCertificateChainFile" auszukommentieren, weil sonst die Browser bei der Überprüfung hängen bleiben, wenn nicht gerade der Apache-Dienst im Task-Manager neu gestartet wurde.

Für HTTPS dürfen die Angaben für ServerName und ServerAlias keine Port-Angabe enthalten, weil "Google Chrome" sonst das Zertifikat als unsicher deklariert.

Einzutragende Definitionen in der Datei "httpd-vhosts.conf":

# Standard-VHost HTTP
<VirtualHost *:80>
 ServerName localhost
 ##ServerAlias 193.175.110.91
 ServerAdmin service@salzwiki.de
 DocumentRoot "D:/xampp/htdocs/"
 ErrorLog "logs/error.log"
 CustomLog "logs/access.log" combined
 RewriteEngine On
 RewriteCond %{REQUEST_URI} /salzwiki
 RewriteCond %{REQUEST_URI} !=/salzwiki_
 RewriteRule "^/salzwiki/(.*)$" "http://salzwiki.de/$1" [R=301,L] 
 RewriteCond %{REQUEST_URI} /saltwiki
 RewriteCond %{REQUEST_URI} !=/saltwiki_
 RewriteRule "^/saltwiki/(.*)$" "http://saltwiki.net/$1" [R=301,L]
 # Weiterleitung, sobald eine Subdomain repository.hawk-hhg.de eingerichtet ist
 RewriteCond %{REQUEST_URI} /repository
 RewriteCond %{REQUEST_URI} !=/repository_
 RewriteRule "^/repository/(.*)$" "http://repository.hawk-hhg.de/$1" [R=301,L] 
</VirtualHost>
# Standard-VHost HTTPS
<VirtualHost *:443>
 ServerName localhost
 ServerAdmin service@salzwiki.de
 DocumentRoot "D:/xampp/htdocs"
 <Directory "D:/xampp/htdocs">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error.log"
 TransferLog "logs/access.log"
 CustomLog "logs/ssl_request.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 RewriteEngine On
 RewriteCond %{HTTP_HOST} salzwiki.localhost
 RewriteRule "^(.*)$" "https://salzwiki.de$1" [R=301,L]
 RewriteCond %{REQUEST_URI} /repository
 RewriteCond %{REQUEST_URI} !=/repository_
 RewriteRule "^(.*)$" "http://193.175.110.91/$1" [R=301,L]
 # Weiterleitung, sobald eine Subdomain repository.hawk-hhg.de eingerichtet ist
 RewriteCond %{REQUEST_URI} /repository
 RewriteCond %{REQUEST_URI} !=/repository_
 RewriteRule "^/repository/(.*)$" "https://repository.hawk-hhg.de/$1" [R=301,L] 
 SSLEngine on
 SSLCertificateFile "conf/ssl.crt/server.crt"
 SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>
# SalzWiki-VHost HTTP
<VirtualHost *:80>
 ServerName salzwiki.de
 ServerAlias www.salzwiki.de salzwiki.hawk-hhg.de salzwiki.localhost
 ServerAdmin service@salzwiki.de
 DocumentRoot "D:/xampp/htdocs/salzwiki"
 <Directory "D:/xampp/htdocs/salzwiki">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error_salzwiki.log"
 CustomLog "logs/access_salzwiki.log" combined
 RewriteEngine On
 RewriteCond %{HTTP_HOST} salzwiki.localhost
 RewriteRule "^(.*)$" "http://193.175.110.91/salzwiki$1" [R=301,L]
 RewriteCond %{REQUEST_URI} /repository
 RewriteCond %{REQUEST_URI} !=/repository_
 RewriteRule "^(.*)$" "http://193.175.110.91/$1" [R=301,L] 
</VirtualHost>
# SalzWiki-VHost HTTPS
<VirtualHost *:443>
 ServerName salzwiki.de
 ServerAlias www.salzwiki.de salzwiki.hawk-hhg.de salzwiki.localhost
 ServerAdmin service@salzwiki.de
 DocumentRoot "D:/xampp/htdocs/salzwiki"
 <Directory "D:/xampp/htdocs/salzwiki">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error_salzwiki.log"
 TransferLog "logs/access_salzwiki.log"
 CustomLog "logs/ssl_request.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 RewriteEngine On
 RewriteCond %{HTTP_HOST} salzwiki.localhost
 RewriteRule "^(.*)$" "https://salzwiki.de$1" [R=301,L]
 RewriteCond %{REQUEST_URI} /repository
 RewriteCond %{REQUEST_URI} !=/repository_
 RewriteRule "^(.*)$" "http://193.175.110.91/$1" [R=301,L]
 SSLEngine on
 SSLCertificateFile "conf/ssl.crt/salzwiki_chain_pem.crt"
 #SSLCertificateFile "conf/ssl.crt/salzwiki_cert_pem.crt"
 SSLCertificateKeyFile "conf/ssl.key/salzwiki.denopw.key"
 #SSLCertificateChainFile "conf/ssl.crt/salzwiki_chain_pem.crt"
 #SSLCertificateFile "conf/ssl.crt/server.crt"
 #SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>
# SaltWiki-VHost HTTP
<VirtualHost *:80>
 ServerName saltwiki.net
 ServerAlias www.saltwiki.net saltwiki.hawk-hhg.de saltwiki.localhost
 ServerAdmin service@saltwiki.net
 DocumentRoot "D:/xampp/htdocs/saltwiki"
 <Directory "D:/xampp/htdocs/saltwiki">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error_saltwiki.log"
 CustomLog "logs/access_saltwiki.log" combined
 RewriteEngine On
 RewriteCond %{HTTP_HOST} saltwiki.localhost
 RewriteRule "^(.*)$" "http://193.175.110.91/saltwiki$1" [R=301,L]
 RewriteCond %{REQUEST_URI} /repository
 RewriteCond %{REQUEST_URI} !=/repository_
 RewriteRule "^(.*)$" "http://193.175.110.91/$1" [R=301,L] 
</VirtualHost>
# SaltWiki-VHost HTTPS
<VirtualHost *:443>
 ServerName saltwiki.net
 ServerAlias www.saltwiki.net saltwiki.hawk-hhg.de saltwiki.localhost
 ServerAdmin service@saltwiki.net
 DocumentRoot "D:/xampp/htdocs/saltwiki"
 <Directory "D:/xampp/htdocs/saltwiki">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error_saltwiki.log"
 TransferLog "logs/access_saltwiki.log"
 CustomLog "logs/ssl_request.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 RewriteEngine On
 RewriteCond %{HTTP_HOST} saltwiki.localhost
 RewriteRule "^(.*)$" "https://saltwiki.net$1" [R=301,L]
 RewriteCond %{REQUEST_URI} /repository
 RewriteCond %{REQUEST_URI} !=/repository_
 RewriteRule "^(.*)$" "http://193.175.110.91/$1" [R=301,L]
 SSLEngine on
 SSLCertificateFile "conf/ssl.crt/salzwiki_chain_pem.crt"
 #SSLCertificateFile "conf/ssl.crt/salzwiki_cert_pem.crt"
 SSLCertificateKeyFile "conf/ssl.key/salzwiki.denopw.key"
 #SSLCertificateChainFile "conf/ssl.crt/salzwiki_chain_pem.crt"
 #SSLCertificateFile "conf/ssl.crt/server.crt"
 #SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>
# Repositorium-VHost HTTP
<VirtualHost *:80>
 ServerName repository.hawk-hhg.de
 ServerAlias repository.localhost
 ServerAdmin service@salzwiki.de
 DocumentRoot "D:/xampp/htdocs/repository"
 <Directory "D:/xampp/htdocs/repository">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error_repository.log"
 CustomLog "logs/access_repository.log" combined
 # Weiterleitung, solange keine Subdomain repository.hawk-hhg.de eingerichtet ist
 RewriteEngine On
 RewriteCond %{HTTP_HOST} repository.localhost [OR]
 RewriteCond %{HTTP_HOST} repository.hawk-hhg.de
 RewriteRule "^(.*)$" "http://193.175.110.91/repository$1" [R=301,L] 
</VirtualHost>
# Repositorium-VHost HTTPS
<VirtualHost *:443>
 ServerName repository.hawk-hhg.de
 ServerAlias repository.localhost
 ServerAdmin service@salzwiki.de
 DocumentRoot "D:/xampp/htdocs/repository"
 <Directory "D:/xampp/htdocs/repository">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error_repository.log"
 TransferLog "logs/access_repository.log"
 CustomLog "logs/ssl_request.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 # Weiterleitung, solange keine Subdomain repository.hawk-hhg.de eingerichtet ist
 #RewriteEngine On
 #RewriteCond %{HTTP_HOST} repository.localhost [OR]
 #RewriteCond %{HTTP_HOST} repository.hawk-hhg.de
 #RewriteRule "^(.*)$" "https://193.175.110.91/repository$1" [R=301,L] 
 SSLEngine on
 SSLCertificateFile "conf/ssl.crt/salzwiki_chain_pem.crt"
 #SSLCertificateFile "conf/ssl.crt/salzwiki_cert_pem.crt"
 SSLCertificateKeyFile "conf/ssl.key/salzwiki.denopw.key"
 #SSLCertificateChainFile "conf/ssl.crt/salzwiki_chain_pem.crt"
 #SSLCertificateFile "conf/ssl.crt/server.crt"
 #SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>

######## Beginn Draft-Wikis für Tests ########
<VirtualHost *:80>
 ServerName szw.localhost
 ServerAdmin service@salzwiki.de
 DocumentRoot "D:/xampp/htdocs/salzwiki_draft"
 <Directory "D:/xampp/htdocs/salzwiki_draft">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error_salzwiki_draft.log"
 CustomLog "logs/access_salzwiki_draft.log" combined
 RewriteEngine On
 RewriteCond %{HTTP_HOST} szw.localhost
 RewriteRule "^(.*)$" "http://193.175.110.91/salzwiki_draft$1" [R=301,L] 
</VirtualHost>
<VirtualHost *:80>
 ServerName stw.localhost
 ServerAdmin service@saltwiki.net
 DocumentRoot "D:/xampp/htdocs/saltwiki_draft"
 <Directory "D:/xampp/htdocs/saltwiki_draft">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error_saltwiki_draft.log"
 CustomLog "logs/access_saltwiki_draft.log" combined
 RewriteEngine On
 RewriteCond %{HTTP_HOST} stw.localhost
 RewriteRule "^(.*)$" "http://193.175.110.91/saltwiki_draft$1" [R=301,L] 
</VirtualHost>
<VirtualHost *:80>
 ServerName rpw.localhost
 ServerAdmin service@salzwiki.de
 DocumentRoot "D:/xampp/htdocs/repository_draft"
 <Directory "D:/xampp/htdocs/repository_draft">
  Options -Indexes +FollowSymLinks -Includes -ExecCGI
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog "logs/error_repository_draft.log"
 CustomLog "logs/access_repository_draft.log" combined
 RewriteEngine On
 RewriteCond %{HTTP_HOST} rpw.localhost
 RewriteRule "^(.*)$" "http://193.175.110.91/repository_draft$1" [R=301,L] 
</VirtualHost>
######## Ende Draft-Wikis für Tests ########

Datenbank-Server[Bearbeiten]

Der MySQL-Datenbank-Server ist als Dienst zu installieren, damit er nach Rechner-Neustarts durch Windows-Updates automatisch gestartet werden kann.

MySQL/MariaDB ohne XAMPP[Bearbeiten]

MariaDB-Service installieren[Bearbeiten]

Nachdem die Kommandozeile als Administrator geöffnet wurde, den MySQL-Dienst mit der Bezeichnung "MariaDB" installieren:

D:
cd noxampp\mysql\bin
mysqld --install MariaDB

Unter "Systemsteuerung => System und Sicherheit => Verwaltung => Dienste" prüfen, ob der Dienst "MariaDB" den Starttyp "Automatisch" aufweist, damit er nach einem Rechner-Neustart automatisch gestartet wird.

Zugangsdaten absichern[Bearbeiten]

Bei MariaDB ab Version 5.2 gibt es ein Authentication-Plugin für Socket-Authentifizierung, weshalb bei der Installation mittels Kommandozeile das Konto "root" ohne Passwort-Anmeldung eingerichtet wird.

Unter Windows kann ein Passwort für "root" in der Admin-Kommandozeile mit folgenden Befehlen festgelegt werden:

cd D:\noxampp\mysql\bin
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhos' IDENTIFIED BY '[passwort]';
ALTER USER 'root'@'::1' IDENTIFIED BY '[passwort]';
ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY '[passwort]';

Um die Passwort-Änderung zu aktivieren, muss der Dienst "MariaDB" neu gestartet werden.

Möglicherweise muss zusätzlich das Authentication-Plugin "ed25519" verwendet werden. Es hat das Plugin "mysql_native_password", das SHA-1 basiert war, abgelöst.

Konfigurationsdatei[Bearbeiten]

Die Konfigurationsdatei "my.ini" für v10.2.17 wird auf Basis der Vorlagendatei "my-huge.ini" und der bisher verwendeten Datei "my.ini" v10.0.17 erstellt.

Die Vorlagendateien "my-[...].ini befinden sich bei v10.2.17 im Verzeichnis "mysql\" statt wie bei v10.0.17 im Verzeichnis "myslq\bin\".

Die Definitionen bei v10.2.17 erfolgen ohne Anführungszeichen und wie bei v10.0.17 mit "/" statt "\" auch unter Windows.

Defintionen im Abschnitten "[client]":

port = 3306
socket = D:/noxampp/mysql/mysql.sock

Definitionen im Abschnitt "[mysqld]":

port = 3306
socket = D:/noxampp/mysql/mysql.sock
skip-external-locking #neu
key_buffer_size = 384M #ersetzt key_buffer = 16M
max_allowed_packet = 1M
table_open_cache = 512 #neu
sort_buffer_size = 2M #ehemals 512K
read_buffer_size = 2M #ehemals 256K
read_rnd_buffer_size = 8M #ehemals 512K
myisam_sort_buffer_size = 64M #ehemals 8M
thread_cache_size = 8 #neu
query_cache_size = 32M #neu
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8 #neu

# Point the following paths to a dedicated disk
#tmpdir = /tmp/
tmpdir = D:/noxampp/tmp
...
log_bin = mysql_bin #neu
...
innodb_data_file_path = ibdata:1:10M:autoextend
...
innodb_buffer_pool_size = 384M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 100M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

Entfallene Definitionen in Abschnitt "[mysqld]":

  • basedir
  • datadir
  • pid_file
  • net_buffer_length
  • log_error
  • plugin_dir

Entfallener Abschnitt:

  • "[isamchk]"

Start und Stopp im Produktivbetrieb[Bearbeiten]

Um den mysql-Dienst zu starten oder anzuhalten, gibt es folgende Möglichkeiten:

  • unter "Verwaltung => Dienste" nach Auswahl des Dienstes "mysql" entweder im Menü unter "Aktion" oder mit der rechten Maustaste im Kontextmenü den jeweiligen Vorgang auswählen
  • per Kommandozeile
D:
cd noxampp\mysql\
bin\mysqld.exe --defaults-file=mysql\my.ini

D:
cd noxampp\mysql
bin\mysqld.exe -q
del data\%computername%.pid

PHP[Bearbeiten]

PHP-Versionen[Bearbeiten]

Erforderlich ist für Apache eine TS-Version, die als herunterladbare zip-Datei im Dateinamen kein "ts" enthält, während die "nts-Version "nts" enthält. Im Dateinamen ist "Win32" auch bei der 64-Bit-Version "x64" enthalten.

PHP 7.2.9[Bearbeiten]

VC15 (2017) x64 TS: php-7.2.9-Win32-VC15-x64.zip (2018-08-16)

PHP 7.2.2[Bearbeiten]

VC15 (2017) x64 TS: php-7.2.2-Win32-VC15-x64.zip (2018-02-01)

  • Core-Erweiterung "Cite" erzeugt Fehler "Uncommitted DB writes" und ist zu ersetzen durch die Erweiterung "CiteThisPage"
  • Core-Erweiterung "ImageMap" erzeugt Fehler "Fatal exception of type MWException"

PHP 7.1[Bearbeiten]

Laut https://wiki.php.net/internals/windows/compiler soll PHP 7.1 zwar mit VC14 und VC15 funktionieren, doch wird dies nicht offiziell unterstützt.

PHP 7.0[Bearbeiten]

Das Support-Ende für PHP 7.0 ist früher als für PHP 5.6.

php.ini[Bearbeiten]

Module[Bearbeiten]

aktivierte Module[Bearbeiten]

Folgende Module sind aktiviert:

  • bz2
  • curl
  • fileinfo
  • gd2
  • gettext
  • mbstring
  • exif ; Must be after mbstring
  • mysqli
  • openssl
  • pdo_mysql
  • pdo_sqlite
  • sqlite3
  • xmlrpc
  • xsl

Damit "cURL" von PHP verwendet wird, ist die Windows-Systemvariable "PATH" für PHP zu ergänzen. Hierzu "Systemsteuerung => System und Sicherheit => System => Erweiterte Systemeinstellungen" auswählen, im Fenster "Systemeigenschaften" beim Karteikartenreiter "Erweitert" die Schaltfläche "Umgebungsvariablen..." auswählen und bei "Systemvariablen" die Variable "PATH" markieren. Anschließend über die Schaltfläche "Bearbeiten..." folgenden Eintrag am Ende hinzufügen:

...;D:\noxampp\php\
zusätzliche Module[Bearbeiten]
  • imagick

Die dll-Datei "php_imagick.dll" für das Modul "imagick" kann bei "PECL" heruntergeladen werden: https://windows.php.net/downloads/pecl/releases/imagick/.

php-Konfiguration[Bearbeiten]

engine = On
short_open_tag = On
allow_call_time_pass_reference = Off
safe_mode = Off
expose_php = Off
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
enable_dl = On
file_uploads = On
allow_url_fopen = On
allow_url_include = Off

phpMyAdmin[Bearbeiten]

Es wird Version 4.8.3 verwendet.

Fehler bei Konto-Erstellung[Bearbeiten]

In phpMyAdmin 4.6.5.2 ist ein Bug, der eine Fehlermeldung erzeugt, wenn versucht wird, ein neues Datenbank-Nutzungskonto zu erstellen, weil im Verzeichnis "D:\xampp\mysql\" die Unterverzeichnisse "lib\plugin\ fehlen:

SHOW PLUGINS SONAME LIKE '%_password_check%'
MySQL meldet:
#1018 - Verzeichnis von 'D:\xampp\mysql\lib\plugin\' nicht lesbar (Fehler: 2 "No such file or directory")

Die Lösung besteht darin, im Verzeichnis "D:\xampp\mysql\" die Unterverzeichnisse "lib\plugin\" zu erstellen.

Konfiguration[Bearbeiten]

Für die Konfiguration gibt es 2 Möglichkeiten

  • Im Browser durch Aufruf von "phpmyadmin/setup/index.php"
  • Im Editor durch
    • Kopie von "config.sample.inc.php" zu "config.inc.php"
    • Anpassung von "config.inc.php"

phpMyAdmin-Datei "config.inc.php"[Bearbeiten]

Um die Anmeldung bei der Nutzung von "phpMyAdmin" per HTTP-Authentifizierung durchzuführen, sind folgende Angaben in der Konfigurationsdatei ab Z.18 erforderlich:

/* Authentication type and info */
#$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['auth_type'] = 'http';
#$cfg['Servers'][$i]['user'] = 'root';
#$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;

Anmeldename und Passwort werden bei der HTTP-Anmeldung mit den Einträgen in der Tabelle "user" der Datenbank "mysql" verglichen.

Test mit phpMyAdmin-Datei ".htaccess"[Bearbeiten]

Datei "\xampp\phpMyAdmin\.htaccess"

AuthType Basic
AuthName "phpMyAdmin"
AuthUserFile "../security/phpmyadmin.htpasswd"
Require valid-user

Datei "\xampp\security\dashboard.htpasswd":

username:password

php-imagick[Bearbeiten]

Die PHP-Erweiterung für ImageMagick kann unter folgenden Adressen heruntergeladen werden:

  • http://windows.php.net/downloads/pecl/releases/imagick/
    • 3.4.4 (Stand 2019-08-13) für
      • PHP 7.2 VC15 x86 und x64 NTS und TS
      • PHP 7.1 VC15 x86 und x64 NTS und TS
      • PHP 7.0 VC15 x86 und x64 NTS und TS
    • 3.4.3 (Stand 2019-01-22) für
      • PHP 7.1 VC14 x86 und x64 NTS und TS
      • PHP 7.0 VC14 x86 und x64 NTS und TS
      • PHP 5.6 VC11 x86 und x64 NTS und TS
      • PHP 5.5 VC11 x86 und x64 NTS und TS
  • http://www.peewit.fr/imagick/ (Stand 2019-08-13)
    • Imagick 3.4.3 stable für PHP 7.2 VC15 x64 NTS (IIS)
    • Imagick 3.3.0RC2 beta für PHP 7.0 VC14 x64 NTS (IIS)
    • Imagick 3.2.0RC1 beta für
      • PHP 5.6 VC11 x86 NTS (IIS) und TS (Apache)
      • PHP 5.5 VC11 x86 NTS (IIS) und TS (Apache)
      • PHP 5.4 VC9 x86 NTS (IIS) und TS (Apache)
  • https://windows.php.net/downloads/pecl/deps/
    • ImageMagick-7.0.7-11-vc15-x64.zip

Zur Nutzung von php-imagick für PHP 7.2 mit VC15 folgende Schritte ausführen:

  1. "php_imagick-3.4.4-7.2 ts-vc15-x64.zip" (PECL) herunterladen
  2. die VC15-kompilierte 64-Bit-ThreadSafe-Datei "php_imagick.dll" in das PHP-Unterverzeichnis "ext/" kopieren
  3. Für PHP 5.7.2 in der Datei "php.ini" im Bereich Windows Extensions die Datei "php_imagick.dll" einbinden
    extension=imagick
  4. Den Apache-Webserver-Dienst neu starten

GhostScript[Bearbeiten]

Bei GhostScript gab es bis Version 9.07 unterschiedliche Lizenzen: (A)GPL und AFPL, siehe auch https://de.wikipedia.org/wiki/Ghostscript. Deshalb wurde bis Version 9.10 die GPL-Variante genutzt. Neuere OpenSource-FreeWare-Versionen gibt es unter der AGPL-Lizenz. Zum Herunterladen können folgende Adressen genutzt werden:

  1. GhostScript Version 9.22 herunterladen
    • gs922w64.exe für 64-Bit
    • gs922w32.exe für 32-Bit
  2. GhostScript als Administrator im Unterverzeichnis "D:\texmf\ghostscript\" installieren.
  3. aus dem Unterverzeichnis "bin\" die Datei "gswin32c.exe" kopieren und die Kopie umbenennen zu "gs.exe"
  4. In der Systemsteuerung unter "Erweiterte Systemeinstellungen => Erweitert => Umgebungsvariablen" die Systemvariable "Path" erweitern mit ";D:\texmf\ghostscript\bin\"

ImageMagick[Bearbeiten]

  1. ImageMagick 64-Bit herunterladen von
  2. ImageMagick als Administrator im Unterverzeichnis "D:\texmf\imagick\" installieren
    1. ImageMagick dll-Datei (bei vorhandener Windows-Server-Konfigurationsberechtigung), sonst static-Datei (nur XAMPP-Zugriffsberechtigungen), inkl.
      • "Create a desktop icon"
      • "Add application directory to your system path"
      • "Install FFmpeg"
      • "Install Legacy Utilities (e.g. convert)"
      • "Install developement headers and libraries for C and C++"
    2. Testen mit der "Eingabeaufforderung/Konsole"
      • bei Windows Server 2012R2 durch Eingabe von
        1. convert wizard: wizard.jpg [=>Enter drücken]
        2. convert wizard.jpg win: [=>Enter drücken]
        3. => ein Bild soll angezeigt werden, Fenstertitel "IMDisplay - magick-..."
      • bei Windows Server 2008 durch Eingabe von
        1. convert logo: logo.miff [=>Enter drücken]
        2. imdisplay logo.miff [=>Enter drücken]
        3. => ein Bild soll angezeigt werden

MiKTeX[Bearbeiten]

Die Applikationen als Administrator für alle User im Verzeichnis "D:\texmf\" installieren:

  1. Sophos-Anpassungen
    1. Für Sophos-Ausnahme im Verzeichnis "D:\texmf\" ein Unterverzeichnis "miktex\" erstellen
    2. Für Sophos-Antivirus eine Ausnahme festlegen:
      Konfigurieren => Antivirus => On--Access-Scans => Ausschlüsse => Hinzufügen => Ordner => D:\texmf\miktex\
  2. MikTeX setup-2.9.6637-x64.exe (Net Installer), nicht basic-miktex-2.9.6615-x64.exe (Basic) oder miktexsetup-2.9.637-x64.exe (Setup Utility), herunterladen – kann bis zu einer Stunde dauern! – bei einer der folgenden Adressen:
  3. Datei "setup-2.9.6637-x64.exe" umbenennen zu "MiKTeX_2.9.6637-x64_NetInstaller_setup.exe"
    1. Zum Herunterladen der Installationsdateien die Datei "MiKTeX_2.9.6637-x64_NetInstaller_setup.exe" ausführen und folgendes auswählen:
      • "Download MiKTeX" statt "Install MiKTeX"
      • "Complete MiKTeX" statt "Basic MiKTeX"
      • Zielverzeichnis "D:\Install\MiKTeX\NetInstall_Downloads\"
      • "Anyone who uses this computer (all users)" statt "Only for: [Useraccount (Username)]"
      • "Preferred paper: A4", "Install missing packags on-the-fly: Yes"
  4. Die Erweiterung Math (Wiki-Code) installieren und anpassen
  5. In der Datei "LocalSettings.php" ist jeweils einzufügen:
 $wgUseTeX = true;
 # ImageMagick
 $wgImageMagickConvertCommand = 'D:\texmf\imagick\convert.exe'; 
 $wgImageMagickIdentifyCommand = 'D:\texmf\imagick\identify.exe';
 # Tex 64-Bit mit zusätzlichem Unterverzeichnis "\x64"
 $wgLaTexCommand = 'D:\texmf\miktex\miktex\bin\x64\latex.exe'; 
 $wgDvipsCommand = 'D:\texmf\miktex\miktex\bin\x64\dvips.exe';
 $wgSVGConverter = 'ImageMagick';
 $wgSVGConverters = array(
  'ImageMagick' => '"D:\texmf\imagick\convert.exe" -background white $input PNG:$output', 
 );
 #require_once "$IP/extensions/Math/Math.php";
 wfLoadExtension("Math");
 $wgMathDisableTexFilter = true; // in Math.hooks.php

Statistik-Anwendung Piwik oder Matomo[Bearbeiten]

"Piwik" wurde umbenannt zu "Matomo".

Zusätzlich zu "Matomo" ist die MW-Erweiterung "Piwik Integration" erforderlich oder muss der Code in der Datei "MonoBook.php" hinter dem Footer-Bereich mit dem "Piwik"-Code ergänzt werden.

Die Anwendung "Matomo" wird im Verzeichnis "noxampp\htdocs\analytics\matomo\" zuerst auf dem Test-Server installiert.

Die Administration von "Matomo" erfolgt im Browser über die Adresse "localhost/analytics/matomo/index.php".

Die Datei "...\htdocs\robots.txt" ist zu ergänzen:

Disallow:/analytics/

Die Apache-Konfiguration ist dahingehend anzupassen, dass die Verzeichnisse "analytics\" und "matomo\" nach dem Vorbild von "phpmyadmin\" nur lokal erreichbar sind.

Installationshinweise[Bearbeiten]

Bei der Installation gibt es eine Warnung zur PHP-Konfiguration, wenn in der Datei "php.ini" nicht "always_populate_raw_post_data=-1" gesetzt ist. Dieser Parameter gilt als "deprecated" und entfällt mit PHP 7.0.0, weshalb sein Wert auf "-1" gesetzt werden soll.

Für die Installation per Browser muss JavaScript (JS) aktiviert sein oder muss mit dem Firefox-Plugin "Firebug" im HTML-Code bei select-Elementen die CSS-Definition "display:none;" entfernt werden. Ohne JS oder CSS-Anpassung fehlt

  • bei der Datenbank-Konfiguration der Adapter
  • bei der Website-Konfiguration die Zeitzone

Es wird empfohlen, für die "piwik"-Datenbank ein eigenes Nutzungskonto, das nur für diese Datenbank Berechtigungen hat, zu verwenden. Die Datenbank-Einrichtung von "Matomo" per Browser-Installation schlägt jedoch fehl, wenn das hierfür verwendete neue Benutzungskonto für "MySql" nicht existiert. Das Konto und die Datenbank sind deshalb vorab mit "phpMyAdmin" zu erstellen.

Konfiguration[Bearbeiten]

Die Matomo-System-Konfigurationsdatei "config.ini.php" befindet sich im Verzeichnis "...\analytics\matomo\config\".

Benutzungskonten[Bearbeiten]

Standardmäßig gibt es folgende Benutzungskonten:

  • [SuperUserName], Alias [...], Hauptadministrator WAHR
  • anonymous, Alias anonymous, Ansicht deaktiviert (rot), Administrator N/A
    • Kein Zugriff: "Für alle Websites anwenden" deaktiviert (rot)
    • Kein Zugriff: "SalzWiki" bzw. "SaltWiki" bzw. "Repository" aktiviert (grün)

Zusätzlich zum Hauptadmin-Konto wird für die Ansicht der Statistiken und für die Erstellung von Statistik-Berichten ein Benutzungskonto für Beschäftigte des Hornemann Instituts eingerichtet, womit es folgende Konten gibt:

  • Hauptadministration
  • Statistiknutzung
  • anonymous
Konto für Hauptadministration[Bearbeiten]

Das Nutzungskonto "SW_piwik" für die Hauptadministration wird bei der Installation von "Matomo" erstellt.

Der E-Mail-Versand wird unter "Einstellungen => System => Allgemeine Einstellungen => E-Mail-Server-Einstellungen" konfiguriert und sieht in der Matomo-System-Konfigurationsdatei "...\matomo\config\config.ini.php" wie folgt aus, nachdem :

[mail]
transport = "smtp"
port = "587"
host = "smtp.1und1.de"
type = "Login"
username = "service@salzwiki.de"
password = "***"
encryption = "ssl"

Damit als Absender nicht "noreply@localhost" gesendet wird, muss folgende Zeile in der Konfigurationsdatei im Abschnitt "[mail]" hinzugefügt werden:

defaultHostnameIfEmpty = "salzwiki.de"
Konto für Statistiknutzung[Bearbeiten]

Mit dem Hauptadmin-Konto wird unter "Einstellungen => System => Benutzer" ein Konto "Hornemann" erstellt. Dabei ist darauf zu achten, dass oben bei "Zugriffsverwaltung" nicht nur eines der Wikis, sondern "Für alle Websites anwenden" ausgewählt ist.

Das Konto hat folgende Einstellungen:

  • Benutzer Hornemann, Alias H.I.-SW-Statistik
  • E-Mail webmaster@hornemann-institut.org
  • Kein Zugriff deaktiviert (rot)
  • Ansicht
    • "Für alle Websites anwenden" aktiviert (grün), wird nach Auswahl einer Seite wie "SalzWiki" bei der Rückkehr deaktiviert (rot)
    • "SalzWiki" bzw. "SaltWiki" bzw. "Repository" aktiviert (grün)
  • Administrator deaktiviert (rot)
  • Hauptadministrator deaktiviert (rot)

Statistik-Berichte[Bearbeiten]

Für jedes Wiki wird ein eigener Bericht jeweils vom Typ HTML und PDF erstellt:

  • SalzWiki
    • HTML
    • PDF
  • SaltWiki
    • HTML
    • PDF
  • Repository
    • HTML
    • PDF

Bei dem Konto für die Statistiknutzung wird unter "Einstellungen => Persönlich => E-Mail-Berichte" festgelegt, welche Art von Bericht wann per E-Mail übermittelt wird.

  • Website: SalzWiki|SaltWiki|Repository
  • Beschreibung: Monatlicher Statistikbericht
  • Segment: Alle Besuche
  • Zeitplan: Monatlich
  • Uhrzeit: 1|2 (1 Uhr für HTML, 2 Uhr für PDF)
  • Versand via: E-Mail
  • Berichtsformat: HTML|PDF
  • Bericht senden an: An mich senden
  • Anzeigeoptionen: Tabellen und Graphen für alle Berichte anzeigen
  • Beinhaltete Statistiken
    • Alle Websites: Dashboard aller Websites
    • Verweise: Verweisart, Alle Verweise, Suchbegriffe, Suchmaschinen Websites, Soziale Netzwerke
    • Besucher: Besucherüberblick, Benutzer, Gerätetyp, Gerätemodell, Gerätemarke, Bildschirmauflösungen, Betriebssystem-Versionen, Browser, Browser-Version, Land, Kontinent, Region, Browsersprache, Stadt, Besuchslänge, Seiten pro Besuch
    • Aktionen: Aktionen - Kernmetriken, Seiten URL, Einstiegsseiten, Ausstiegsseiten, Ausgehende Verweise, Downloads

Statistik-Anwendung Webalizer[Bearbeiten]

Webalizer gibt es bei www.webalizer.org nicht für Windows, sondern nur als DOS-Quellcode, zuletzt in der Version 2.23-08 von 2013. Andere Varianten wie die der Firma "Stone Steps Inc." basieren auf Version 2.01-10. Die aktuellste Windows-Variante ist in XAMPP enthalten, beispielsweise in XAMPP 5.6.14 als Webalizer Version 2.23-04 vermutlich mit Stand März 2011.

Installiert wird die XAMPP-Variante.

Log-Format[Bearbeiten]

Als Log-Format wird das Standardformat CLF ("NCSA Common Log Format" bzw. "NCSA Combined Log Format") für die Auswertung der Apache-Log-Datei "access.log" verwendet, siehe auch https://en.wikipedia.org/wiki/Common_Log_Format. Es enthält folgende Angaben:

 * IP-Adresse des anfordernden Hosts
 * Ungenutzt für RFC-1413-Identität
 * Nutzername aus einer HTTP-Authentifizierung, ansonsten "-"
 * Zeitstempel (Datum, Uhrzeit und UTC-Abweichung)
 * Übermittlungsart, angeforderte Adresse und Übertragungsprotokoll mit Version, z. B. "GET /index.php HTTP/1.1"
 * HTTP-Statuscode
 * Menge der gesendeten Daten in Byte, ansonsten "-" (bei Umleitungen usw.) 
 * Ausgangsadresse des anfordernden Hosts
 * Systemangaben zum anfordernden Host wie Browser mit Version und Betriebssystem mit Version
 * Cookie

Common Log Format[Bearbeiten]

host rfc931 username date:time request statuscode bytes

Combined Log Format[Bearbeiten]

host rfc931 username date:time request statuscode bytes referrer user_agent cookie

Konfiguration[Bearbeiten]

Für jedes Wiki wird eine eigene Statistik-Konfigurationsdatei erstellt:

  • salzwiki.conf
  • saltwiki.conf
  • repository.conf

In diesen Dateien wird jeweils festgelegt, welche Webserver-Log-Datei ausgewertet wird und in welchem Verzeichnis die Auswertung gespeichert wird.

Wenn bei der Apache-Webserver-Konfiguration jedes Wiki als virtueller Host eine eigene Log-Datei zugewiesen bekommen hat, können diese VHost-Log-Dateien ausgewertet werden, ansonsten muss die allgemeine Log-Datei ausgewertet werden:

  • allgemeine Log-Datei: "access.log"
  • gesonderte VHost-Log-Dateien
    • "access_salzwiki.log"
    • "access_saltwiki.log"
    • "access_repository.log"

Welches Wiki ausgewertet wird, erfolgt über die Angabe der Host-Namen mit "IgnoreSite" und "IncludeSite":

# Internet-Adresse für Wiki:
IgnoreSite  *
# für Seiten inkl. Mediadateien aus dem Repositorium
IncludeSite 193.175.110.91
# für Seiten ohne Mediadateien aus dem Repositorium
#IncludeSite 193.175.110.91/salzwiki/
#IncludeSite 193.175.110.91/saltwiki/
IncludeSite salzwiki.de
IncludeSite www.salzwiki.de
IncludeSite salzwiki.hawk-hhg.de
#IncludeSite saltwiki.net
#IncludeSite www.saltwiki.net
#IncludeSite saltwiki.hawk-hhg.de
#IncludeSite repository.hawk-hhg.de

Die Auswertung für das jeweilige Wiki betrifft nur Aufrufe der index-Datei und der Dateien in den hexadezimal benannten Unterverzeichnissen im Verzeichnis "\wikiname\images\". Diese URLs werden folgendermaßen mit "IgnoreURL" und "IncludeURL" angegeben:

# Pfad für Wiki
IgnoreURL  *
IncludeURL /index.php*
IncludeURL /images/0/*
IncludeURL /images/1/*
IncludeURL /images/2/*
IncludeURL /images/3/*
IncludeURL /images/4/*
IncludeURL /images/5/*
IncludeURL /images/6/*
IncludeURL /images/7/*
IncludeURL /images/8/*
IncludeURL /images/9/*
IncludeURL /images/a/*
IncludeURL /images/b/*
IncludeURL /images/c/*
IncludeURL /images/d/*
IncludeURL /images/e/*
IncludeURL /images/f/*
IncludeURL /wikiname/index.php*
IncludeURL /wikiname/images/0/*
IncludeURL /wikiname/images/1/*
IncludeURL /wikiname/images/2/*
IncludeURL /wikiname/images/3/*
IncludeURL /wikiname/images/4/*
IncludeURL /wikiname/images/5/*
IncludeURL /wikiname/images/6/*
IncludeURL /wikiname/images/7/*
IncludeURL /wikiname/images/8/*
IncludeURL /wikiname/images/9/*
IncludeURL /wikiname/images/a/*
IncludeURL /wikiname/images/b/*
IncludeURL /wikiname/images/c/*
IncludeURL /wikiname/images/d/*
IncludeURL /wikiname/images/e/*
IncludeURL /wikiname/images/f/*

Folgende Definitionen sind zusätzlich erforderlich:

LogFile Pfadangabe/logdateiname
LogType clf
OutputDir Pfadangabe/wikiname
HistoryName wikiname.hist
Incremental yes
IncrementalName wikiname.current
ReportTitle Usage Statistics for
HostName wikiname
HTMLExtension html
PageType htm*
PageType php*
#UseHTTPS no
#DNSCache dns_cache.db
#DNSChildren 20
Quiet no
ReallyQuiet no
GMTTime no
VisitTimeout 1800
CountryGraph yes
GraphLegend yes
GraphLines 10
TopURLs 20
TopReferrers 20
TopAgents 10
TopCountries 50
TopSearch 20
AllSites no
AllURLs yes
AllReferrers yes
AllAgents yes
AllSearchStr yes
AllUsers no
#IndexAlias home.htm
#IndexAlias homepage.htm
DefaultIndex no
HideSite localhost
HideReferrer localhost/
HideReferrer 193.175.110.91/
HideReferrer salzwiki.de
HideReferrer www.salzwiki.de
HideReferrer salzwiki.hawk-hhg.de
HideReferrer Direct Request

HideURL *.css
HideURL *.ico
HideURL *.ICO
HideURL *.js
HideURL *.ra
HideURL robots.txt
HideURL api.php
HideURL load.php
HideURL opensearch_desc.php
HideURL /docs/
HideURL /extensinos/
HideURL /images/common/
HideURL /images/math/
HideURL /includes/
HideURL /languages/
HideURL /maintenance/
HideURL /mw-config/
HideURL /resources/
HideURL /serialized/
HideURL /skins/
HideURL /tests/

Dateien[Bearbeiten]

Die nachfolgenden Informationen sind in der Datei "D:\xampp\webalizer\INFO_WikiStatistiken.txt" gespeichert.

Bis Ende Mai 2017 war eine einzige Log-Datei für alle Wikis beim Apache-Webserver konfiguriert. Ab Ende Mai 2017 sind für die 3 Wikis eigene Log-Dateien beim Apache-Webserver konfiguriert.

2017-06-20: Die Log-Dateien des Apache-Webservers, access.log und access.old1.log, enthalten für Januar bis April 2017 identische Aufzeichnungen.

Für die Auswertung durch Webalizer wurden die großen Log-Dateien access.log und access.old1.log vom Apache-Log-Verzeichnis zu den Verzeichnissen "\webalizer\logs\access_20170612\" und "\webalizer\logs\access_old1_2016\" kopiert. Anschließend wurden die großen Dateien mit "7-zip" in kleine Dateien für jeden Monat aufgeteilt. Hierzu wird mit "Hinzufügen" die Kompressionsstärke "Speichern" ausgewählt und "In Teildaten aufsplitten (Bytes)" verwendet. Dann werden die Inhalte der Teildateien so zusammengestellt, dass für jeden Monat eine Datei "access_YYYY_Monat00.log" vorhanden ist. Für den Monat Mai 2017 wurde wegen der Umstellung auf Wiki-Log-Dateien jeweils die Datei "access_2017_Monat05.log" mit der Datei "access_2017_Monat05_02_wikiname.log" zur Datei "access_2017_Monat05_wikiname.log zusammengefügt". Für die Monate von Juni 2017 bis einschließlich Dezember 2017 werden die Wiki-Log-Dateien wie die alten, großen Dateien in Teildateien für jeden Monat aufgeteilt, beispielsweise "access_YYYY_Monat00_wikiname.log". Ab Januar 2018 werden die Wiki-Log-Dateien in Teildateien für jeden Monat nach dem Schema "wikiname_YYYY_Monat00.log" aufgeteilt.

Für die Statistiken bis einschließlich April 2017 wird in den Konfigurationsdateien der Wikis, "wikiname_YYYY_Monate.conf", die Monatsdatei "access_YYYY_Monat00.log", die aus der großen log-Datei stammt, angegeben. Für die Statistiken ab Mai 2017 wird in den Konfigurationsdateien der Wikis, "wikiname_YYYY_Monate.conf", die Monatsdatei "access_YYYY_Monat00_wikiname.log", die aus den einzelnen Wiki-Log-Dateien stammt, angegeben.

Die Batch-Datei "webalizer_YYYY_Monate.bat" wird für jeden Monat nach Anpassung der conf-Dateien ausgeführt.

  • Statistiken für 2018:
    • Log-Dateien-Verzeichnis für Webalizer: \logs\access_2018\access_wikiname.log => wikiname_2018_Monat00.log
    • Statistik-Verzeichnisse: \stats\wikiname\
    • Konfigurationsdateien: wikiname_[2018_]monate.conf
    • Batch-Datei: webalizer_[2018_]monate.bat
  • Statistiken für 2017:
    • Log-Dateien-Verzeichnis für Webalizer bis Juli: \logs\access_20170612\access_2017.log => access_2017_Monat00.log, access_wikiname.log => access_2017_Monat00_wikiname.log
    • Log-Dateien-Verzeichnis für Webalizer ab August: \logs\access_20171231\access_wikiname_2017_Hj2.log => access_2017_Monat00_wikiname.log
    • Statistik-Verzeichnisse: \stats_2017\wikiname\ => \stats_2017\wikiname\
    • Konfigurationsdateien: wikiname_2017_monate.conf
    • Batch-Datei: webalizer_2017_monate.bat
  • Statistiken für 2016:
    • Log-Dateien-Verzeichnis für Webalizer: \logs\access_old1_2016\access.old2016.log => access_2016_Monat00.log
    • Statistik-Verzeichnisse: \stats_2016\wikiname\
    • Konfigurationsdateien: wikiname_2016.conf
    • Batch-Datei: webalizer_2016.bat

DNS-Cache[Bearbeiten]

Anhand der IPs – sowohl IPv4 als auch IPv6 – erfolgt eine Zuordnung von Domains und abgeleitet von den First-Level-Domains eine Zuordnung von Ländern. Die Zuordnungen werden standardmäßig in einer DNS-Cache-Datei namens "dnscache.db" zwischengespeichert.

Der DNS-Zwischenspeicher wird mit folgenden Parametern festgelegt:

  1. DNSCache: Dateiname
  2. DNSChildren: Anzahl der Prozesse (1-100) für die DNS-Zuordnungen
  3. CacheIPs: IPs speichern, wenn keine Domain-Zuordnung möglich ist [yes|no]
  4. CacheTTL: Gültigkeitsdauer in Tagen (1-100) für jede zwischengespeicherten Adresse

Bei der Konfiguration kann der Cache für IPs, die nicht in Domainnamen aufgelöst werden können, aktiviert werden, wenn dies häufig vorkommt, damit bei der nächsten Auswertung nicht noch einmal eine Auflösung versucht wird:

CacheIPs yes

Suchmaschinen[Bearbeiten]

robots.txt[Bearbeiten]

Damit Test-Wikis während der Erprobungsphase, das Repositorium und verschiedene Wiki-Unterverzeichnisse nicht von Suchmaschinen durchsucht werden, wird eine Datei "robots.txt" im Verzeichnis "htdocs" gespeichert.
Damit kein Robot irgendetwas liest:

User-agent: *
Disallow:

Angaben nach dem Upgrade auf MW1.23 am 26.02.2016, damit der "Riddler"-Robot (hohe Zugriffszahlen) gar nichts und andere Robots nur das jeweilige Hauptverzeichnis von SalzWiki und SaltWiki und sonst nichts durchsuchen:

# robots.txt für Salzwiki und Saltwiki, damit Robots weder Unterverzeichnisse noch das Repositorium noch Test-Wikis durchsuchen
User-agent: Riddler
Disallow:/

User-agent: *
Disallow:/analytics/
Disallow:/webalizer/
Disallow:/salzwiki/cache/
Disallow:/salzwiki/docs/
Disallow:/salzwiki/extensions/
Disallow:/salzwiki/images/
Disallow:/salzwiki/includes/
Disallow:/salzwiki/languages/
Disallow:/salzwiki/maintenance/
Disallow:/salzwiki/mw-config/
Disallow:/salzwiki/resources/
Disallow:/salzwiki/serialized/
Disallow:/salzwiki/skins/
Disallow:/salzwiki/tests/
Disallow:/saltwiki/cache/
Disallow:/saltwiki/docs/
Disallow:/saltwiki/extensions/
Disallow:/saltwiki/images/
Disallow:/saltwiki/includes/
Disallow:/saltwiki/languages/
Disallow:/saltwiki/maintenance/
Disallow:/saltwiki/mw-config/
Disallow:/saltwiki/resources/
Disallow:/saltwiki/serialized/
Disallow:/saltwiki/skins/
Disallow:/saltwiki/tests/
Disallow:/repository/
Disallow:/salzwiki_draft/
Disallow:/saltwiki_draft/
Disallow:/repository_draft/
Disallow:/salz_salt_repo/
Disallow:/mediawiki_1_23_11/

Im jeweiligen Wiki-Hauptverzeichnis:

# Robots sollen keine Unterverzeichnisse durchsuchen
User-agent: Riddler
Disallow:/

User-agent: *
Disallow:/cache/
Disallow:/docs/
Disallow:/extensions/
Disallow:/images/
Disallow:/includes/
Disallow:/languages/
Disallow:/maintenance/
Disallow:/mw-config/
Disallow:/resources/
Disallow:/serialized/
Disallow:/skins/
Disallow:/tests/

Setzen von Keywords für den Head-Bereich eines Wikis[Bearbeiten]

Hierzu ist in der Datei "LocalSettings.php" die Funktion "efSetKeywords()" mit den entsprechenden Keywords einzufügen. Hier am Beispiel von SaltWiki. Diese sind jedoch nur bei Zugang über die IP-Adresse und nicht über den Frame von 1&1 sichtbar. Damit Keywords über den Frame sichtbar sind, sind diese für unseren Zugang bei 1&1 bei der Einrichtung der Website mit anzugeben. Dasselbe gilt für "description".

##Setzen von keywords
function efSetKeywords(){
   global $wgOut;
   $wgOut->addKeyword( 'salt' );
   $wgOut->addKeyword( 'desalination' );
   $wgOut->addKeyword( 'salt decay' );   
   $wgOut->addKeyword( 'cultural heritage' );   
   $wgOut->addKeyword( 'salt damage' );
   $wgOut->addKeyword( 'conservation' );
}

E-Mail-Versand[Bearbeiten]

Die HAWK-Outlook-Adressen können nicht für den Versand per SMTP als Absender verwendet werden, sondern nur als Zieladresse.

Die Datei "localSettings.php" wurde in den Verzeichnissen

  • salzwiki/
  • repository/
  • saltwiki/

folgendermaßen für E-Mail-Versand angepasst:

Salzwiki/Repositorium

## E-Mail-Versand angepasst 15.01.2016 G. Werner
$wgEmergencyContact = "salzwiki.fb@hawk-hhg.de";
$wgPasswordSender = "service@salzwiki.de"; 
$wgSMTP = array( 
 'host' => "smtp.1und1.de", 
 'IDHost' => "1und1.de", 
 'port' => "587", 
 'auth' => true, 
 'username' => "service@salzwiki.de", 
 'password' => "********" 
);
$wgEnotifUserTalk = true; # UPO
$wgEnotifWatchlist = true; # UPO
$wgEmailAuthentication = true;

Saltwiki

## E-Mail-Versand angepasst 15.01.2016 G. Werner
$wgEmergencyContact = "saltwiki.fb@hawk-hhg.de";
$wgPasswordSender = "service@saltwiki.net"; 
$wgSMTP = array( 
 'host' => "smtp.1und1.de", 
 'IDHost' => "1und1.de", 
 'port' => "587", 
 'auth' => true, 
 'username' => "service@saltwiki.net", 
 'password' => "********" 
);
$wgEnotifUserTalk = true; # UPO
$wgEnotifWatchlist = true; # UPO
$wgEmailAuthentication = true;

Externe Links[Bearbeiten]

Damit externe Links in einem neuen Fenster geöffnet werden, ist in die "localsettings.php" einzufügen:

##Externe links erscheinen in einem neuen Fenster
$wgExternalLinkTarget = '_blank';

Datenbank-Fehler[Bearbeiten]

Falls ein Hinweis "A database query error has occured" angezeigt wird, kann man sich weitere Angaben anzeigen lassen, indem man in der Datei "LocalSettings.php" unten einfügt:

$wgShowSQLErrors = 1;
# oder
$wgShowExceptionDetails = true;
$wgShowDBErrorBacktrace = true;

Versionshinweise[Bearbeiten]

Betriebssystem und Wiki-Serversysteme[Bearbeiten]

Datenbanksystem[Bearbeiten]

  • MariaDB
    • "ini"-Dateien als Vorlagen für die Konfiguration befinden sich bei v10.2.17 im Verzeichnis "mysql\", bei v10.0.17 im Verzeichnis "mysql\bin\"
  • MySQL
    • MySQL-Upgrade von Version 5.1 zu Version 5.6 ist nur möglich über Version 5.5
  • XAMPP
    • XAMPP hat in Version 5.6.14.0 die MariaDB-Version 10.0.x, aber in Version 5.6.14.3 die MariaDB-Version 10.1.x
    • XAMPP hat bis Version 5.5.28 bzw. 5.6.12 als Datenbanksystem MySQL, danach MariaDB
    • XAMPP hat zuletzt in Version 1.8.2-6 die MySQL-Version 5.5.x, danach die Version 5.6 - wichtig für MySQL-Upgrade von 5.1 über 5.5 zu 5.6

MediaWiki[Bearbeiten]

Informationen zu

MW Version 1.31[Bearbeiten]

  • PHP 7.0.0 oder neuer mit "fileinfo"-Erweiterung ist erforderlich
  • Skins
    • "CologneBlue" und "Modern" sind nicht mehr enthalten, aber weiter kompatibel, und müssen separat heruntergeladen werden
    • "Timeless" für responsives Layout mit 4 Varianten: Mobil, Tablet, durchschnittlicher Desktop, breiter Desktop
  • Core-Variablen
    • nicht mehr vorhanden sind z. B. $wgScriptExtension und $wgUseAjax
    • Wert geändert bei $wgLogAutopatrol von true zu false
    • $wgDBmysql5 gilt als veraltet und war nur experimentell
  • Datenbank-Schema verändert
    • Tabelle "archive" bei den Spalten "ar_flags" und "ar_text"
    • Tabelle "actor" im Zusammenhang mit Variable $wgActorTableSchemaMigrationStage
  • implementierte Erweiterungen
    • CategoryTree
    • CodeEditor
    • MultimediaViewer
    • OATHAuth
    • Replace Text
  • nicht mehr enthaltene Erweiterung
    • Nuke
  • nicht mehr unterstützte Erweiterung
    • AccessControl
    • MWEmbedSupport ist Teil von TimedMediaHandler geworden

MW Version 1.30[Bearbeiten]

  • Hooks
    • $wgExceptionHooks['MWException'][] entfällt

MW Version 1.27[Bearbeiten]

  • PHP 5.5.9 oder neuer mit "mbstring"-Erweiterung ist erforderlich
  • Skins-Element
    • $wgCopyrightIcon wird ersetzt durch $wgFooterIcons['copyright']['copyright']
  • Core-Variablen
    • $wgScriptExtension entfällt
    • $wgSessionHandler gilt als veraltet
    • $wgDisableAuthManager auf "true" setzen, wenn alte Erweiterungen nicht für "AuthManager" angepasst wurden
  • implementierte Erweiterungen
    • RandomRootPage
    • ApiSandbox

MW Version 1.26[Bearbeiten]

MW Version 1.25[Bearbeiten]

Skin-Registrierung

wfLoadSkin("MonoBook"); //statt require_once "$IP/skins/MonoBook.php";

Erweiterungen-Registrierung

wfLoadExtension("CategoryTree"); //statt require_once "$IP/extensions/CategoryTree/CategoryTree.php";

MW Version 1.24[Bearbeiten]

  • Logo-Speicherort geändert von "skins/common/images/" zu "resources/assets/" bzw. "images/..."
  • Bisher mitgelieferte Skins sind nicht mehr enthalten; die jeweiligenSkins-php-Dateien und Ordner sind gegebenenfalls aus dem Verzeichnis "skins/" zu entfernen:
    • CologneBlue.php, cologneblue
    • Modern.php, modern
    • MonoBook.php, monobook
    • Vector.php, vector
  • Datei "LocalSettings.php" eventuell an neue Skin-Registrierung anpassen
require_once "$IP/skins/MonoBookSW.php"; //statt $wgDefaultSkin = "monobooksw";
  • Nicht mehr unterstützt wird "register_globals => Bei PHP vor Version 5.4 in der Datei "php.ini" angeben "register_globals=Off"
  • Nicht mehr unterstützt werden Sprachdateien im "php"-Dateiformat, sondern nur noch Dateien im "json"-Dateiformat
  • Erweiterung "OggHandler" wird nicht mehr unterstützt

MW Version 1.23[Bearbeiten]

  • Skins werden anders eingebunden
    • Das jeweilige Skin-Unterverzeichnis sollte wie die php-Datei die Groß-Klein-Schreibweise berücksichtigen ("monobooksw/" => "MonoBookSW/")
    • Kleinbuchstaben bei $wgDefaultSkin = "monobooksw"; in der Datei "LocalSettings.php"
    • Die Skin-php-Datei, z. B. "MonoBookSW.php", ist nicht mehr im Verzeichnis "skins/", sondern im Unterverzeichnis, z. B. "skins/MonoBookSW/"
    • Die Skin-Datei "MonoBookSW.php" anpassen an die neue Version, siehe www.mediawiki.org/wiki/Manual:Skin_autodiscovery#Migration_guide
  • "Autodiscovery mechanism" für "Core Skins" gilt als "deprecated" und schreibt Warnungen in die Log-Dateien. Folgende Dateien und Ordner sind gegebenenfalls aus dem Verzeichnis "skins/" zu entfernen:
    • Chick.php, chick
    • Nostalgia.php, nostalgia
    • Simple.php, simple
    • Standard.php, standard
  • Sprachdateien sind separate "json"-Dateien für jede Sprache statt einer gemeinsamen "php"-Datei für alle Sprachen; letztere gelten als "deprecated"
  • $wgLocalInterwiki gilt als "deprecated" und kann ersetzt werden mit "$wgLocalInterwikis"
  • $wgImageMagickIdentifyCommand für XCF-Dateien gilt als "deprecated", weil MediaWiki inzwischen das in "ImageMagick" enthaltene Kommando von sich aus nutzen kann
  • "The info page action, which provides useful statistics for any given page, has been improved and turned on by default."
  • Bei "Spezialseiten" wird die "ISBN-Suche" unter "Daten und Werkzeuge" statt unter "Andere Spezialseiten" angezeigt.
  • $wgPasswordSenderName wurde abgeschafft; der Name für die E-Mail-Adresse von $wgPasswordSender kann nur noch in der Seite "MediaWiki:Emailsender" angepasst werden

MW Version 1.21[Bearbeiten]

  • implementierte Erweiterungen
    • Cite
    • ImageMap
    • TitleBlacklist
    • SpamBlacklist
    • Interwiki bzw. SpecialInterwiki u. a.
  • Änderungen
    • Die Funktion "wfLoadExtensionMessages()" existiert nicht mehr, wird aber von BibManager REL1_23 verwendet und muss auskommentiert werden

MW Version 1.20[Bearbeiten]

  • PHP 5.3.2 oder neuer ist erforderlich
  • Erweiterungen, die Elemente der neuen Version voraussetzen
    • ApprovedRevs
    • Cite u. a.

MW Version 1.19[Bearbeiten]

  • $wgEnableCreativeCommonsRdf für "LocalSettings.php" wird nicht mehr unterstützt; stattdessen gibt es eine Erweiterung "CreativeCommonsRdf", die Beta-Status hat (2015-09-21).
  • $wgImageMagickIdentifyCommand für XCF-Dateien

MW Version 1.18[Bearbeiten]

  • MySQL 5.0.2 oder neuer ist erforderlich
  • mehr Genderneutralität bei Sprachdateien
  • Neue "Hooks"
    • BaseTemplateToolbox
  • implementierte Erweiterungen:
    • ConfirmEdit
    • ParserFunctions mit Control Structure Functions ohne Loops
    • RenameUser
    • Nuke u. a.
  • Neue Erweiterungen
    • "Math", bisher Datei "\includes\math.php", siehe https://www.mediawiki.org/wiki/Texvc/de, verwendet "texvc", welches 3 Zusatzprogramme benötigt:
      • ocaml
      • LaTeX
      • dvipng
    • "WikiEditor", bisher Datei "\includes\EditPage.php" bzw. JS-Erweiterung "Extra Edit Buttons (XEB)", siehe en.wikipedia.org/wiki/User:MarkS/Extra_edit_buttons und en.wikipedia.org/wiki/User:MarkS/extraeditbuttons.js

MW Version 1.17[Bearbeiten]

  • PHP 5.2.3 oder neuer ist erforderlich
  • neuer Installationsvorgang
  • Kategoriensortierung geändert
  • Interwiki-Verweise werden in gesonderten Tabellen gespeichert
  • Standard-Skin "vector" statt "monobook"
  • neue Variable $wgPasswordSenderName (existiert nur bis Version 1.22)

SalzWiki SaltWiki Repository[Bearbeiten]

Anpassungen an Systemdateien[Bearbeiten]

Nach der Installation sowie der Sicherung der Datenbanken sind Anpassungen für folgende Verzeichnisse und Dateien im jeweiligen Wiki vorzunehmen:

  • includes
    • skins\
      • Skin.php für 2 Varianten des linken Menüs
      • SkinTemplate.php für Spezialseiten-Zugriffsbeschränkung
    • specialpages\SpecialPageFactory.php
  • languages
    • i18n\de-formal.json für Text bei Kontaktformular
  • skins
    • MonoBook\includes\MonoBookTemplate.php für Footer-Elemente und eingeschränkte Sichtbarkeit von Werkzeugen
    • MonoBook\resources\ (enthielt in älteren Versionen die Datei "main.css")
      • screen-common.less
      • screen-desktop.less
      • variables.less für allgemeine Farben
      • skinStyles\mediawiki.special.preferences.styles.less für Farben in bestimmten Seitenbereichen

"Hooks"[Bearbeiten]

Um Anpassungen im Wiki-Code zu vermeiden, die bei MW1.16 vorgenommen wurden, werden folgende sogenannte MW-"Hooks" in der Datei "LocalSettings.php" verwendet:

  • "BaseTemplateToolbox", seit MW 1.18 verfügbar, für Werkzeuge-Berechtigungen in der Menüleiste links
  • "SkinBuildSidebar", seit MW1.14 verfügbar, für Menüleisten-Berechtigungen links
  • "SkinTemplateOutputPageBeforeExec", seit MW 1.10 verfügbar, für Fußzeile mittig
  • "SpecialPage_initList", seit MW.1.7.0 verfügbar, für Spezialseiten-Berechtigungen

Upgrade vorhandener Wikis[Bearbeiten]

  1. neue Wiki-Version 1.31 entpacken nach "D:\noxampp\[wikiname]"
  2. Erweiterungen
    1. Erweiterungen für aktuelle Version herunterladen
    2. aktuelle Erweiterungen entpacken nach "D:\noxampp\[wikiname]\extensions"
  3. Datei "LocalSettings.php" umbenennen zu "LocalSettings_original_131.php"
  4. Dateien vom alten Server zum neuen Server kopieren
    1. ...\[wikiname]\images inkl. eigenem Unterverzeichnis "commons\"
    2. ...\[wikiname]\LocalSettings.php
  5. Wiki-Datenbanken
    1. Datenbankdaten auf dem alten Server sichern
    2. Datenbankdaten vom alten zum neuen Server kopieren
    3. Datenbankdaten auf dem neuen Server wiederherstellen
  6. Wiki-Anpassungen
    1. Datei "LocalSettings.php" vergleichen mit Angaben in "LocalSettings_original_131.php" und anpassen
    2. Datei "...\[wikiname]\maintenance\runJobs.php" mit php.exe auf der Admin-Kommandozeile ausführen
    3. Datei "...\[wikiname]\maintenance\upgrade.php" mit php.exe auf der Admin-Kommandozeile ausführen

Datenbanken sichern[Bearbeiten]

Kommandozeile als Administrator öffnen und folgenden Befehl eingeben:

D:
cd xampp\mysql\bin
mysqldump -uroot -p --databases db_wikiname > D:\Backup_193.175.110.91\Laufwerk_D\Backups
mysqldump --user=root --password --databases db_wikiname > D:\Backup_193.175.110.91\Laufwerk_D\Backups\db_wikiname_MW1.23_MariaDBv10.0.17_yyyymmdd.sql

Datenbanken wiederherstellen[Bearbeiten]

Kommandozeile als Administrator öffnen und folgenden Befehl eingeben:

D:
cd xampp\mysql\bin
mysql -uroot -p --execute="source D:\Backups\db_wikiname_MW1.23_MariaDBv10.0.17_yyyymmdd.sql" --force
mysql --user=root --password --execute="source D:\Backups\db_wikiname_MW1.23_MariaDBv10.0.17_yyyymmdd.sql" --force

Datenbank anlegen[Bearbeiten]

Seit der Version 1.16.1 kann die jeweilige Datenbank statt mit phpMyAdmin während der Installation mittels Browser (/[wikiverzeichnis]/config/index.php) angelegt werden, sofern der Superuser-Account (Datenbank-Hauptadministrator) bekannt ist:

salzwiki[Bearbeiten]

Database name: salzwiki
Benutzer: SW_sawi 
Host: localhost 
Global Rechte: all privileges 
Grant: ja 
database table prefix: sw_

repository[Bearbeiten]

Database name: repository 
Benutzer: SW_repo 
Host: localhost 
Global Rechte: all privileges 
Grant: ja 
database table prefix: sr_

saltwiki[Bearbeiten]

Database name: saltwiki 
Benutzer: SW_sawi 
Host: localhost 
Global Rechte: all privileges 
Grant: ja 
database table prefix: sw_

Mediawiki Installieren[Bearbeiten]

  • Für die jeweiligen Wikis einen entsprechenden Wiki- und Verzeichnisnamen festlegen: "salzwiki", "repository", "saltwiki".
  • Die Dateien und Verzeichnisse aus der tar.gz-Datei in das jeweilige Wiki-Verzeichnis entpacken:
"D:\noxampp\htdocs\[wikiverzeichnisname]\"
  • Nach Installationsanweisung das jeweilige Wiki installieren; hierzu im Browser die Adresse "D:\noxampp\htdocs\[wikiverzeichnisname]\mw-config\index.php" oder "localhost/[wikiverzeichnisname]" aufrufen.
  • Warnungen ignorieren
    • GNU diff3 wurde nicht gefunden
    • Die Versionsverwaltungssoftware "git" wurde nicht gefunden
    • Die PECL-Erweiterung intl ist für die Unicode-Normalisierung nicht verfügbar
  • Angaben eintragen
    • Contact e-mail: service@salzwiki.hawk-hhg.de
    • Language: Je nach Wiki Deutsch oder English
    • Copyright/license: Creative Commons BY-NC-SA (Namensnennung, nicht kommerziell, Weitergabe unter gleichen Bedingungen)
    • Admin username: Hornemann
    • Object caching: No
    • E-Mail
      • E-mail features: enabled
      • User-to-user e-mail: enabled
      • E-mail notification: enabled for discussion pages and watchlists
      • E-mail address authentication: enabled
    • Datenbank
      • Database type: MySQL
      • Database host: localhost
      • Database name: [wikiname]
      • DB username: SW_sawi (SalzWiki, SaltWiki) bzw. SW_repo (Repositorium) hi_wiki_1
      • Superuser account: yes
      • Superuser name: root
      • Database table prefix: sw_ (SalzWiki, Saltwiki) bzw. sr_ (Repositorium)
      • Storage Engine: InnoDB
      • Database character set: MySQL 4.1/5.0 binary
    • Wiki
      • SalzWiki bzw. SaltWiki bzw. Repository
      • Projektraum entspricht Namen des Wikis
      • Benutzername: Hornemann
      • E-Mail-Adresse: salzwiki@hornemann-institut.de
    • Optionen
      • ausschließlich berechtigte Bearbeiter (SalzWiki, SaltWiki) bzw. geschlossenes Wiki (Repository)
    • Benutzeroberflächen
      • MonoBook = Standard aktivieren
      • Timeless (responsive)
      • Vector
    • Erweiterungen
      • CiteThisPage
      • Interwiki
      • Renameuser
      • WikiEditor
      • CategoryTree
      • Cite
      • ImageMap
      • ParserFunctions
      • ConfirmEdit
      • SpamBlacklist
      • MultimediaViewer
    • Hochladen/Uploads
      • ermöglichen
      • Verzeichnis: D:\noxampp\htdocs\[wikiname]\images\deleted
      • Logo-URL: $wgResourceBasePath/resources/assets/wiki.png bzw. $wgScriptPath/images/common/Logo.png

Lizenz für das jeweilige Wiki[Bearbeiten]

Verwendet werden Creative-Commons-Lizenzen. Für SalzWiki wird die deutsche Variante, für SaltWiki und Repository wird die Standard-Variante vom Typ "cc-by-nc-sa" – Version 3.0 (Stand 2017-07-21) – eingesetzt.

Da die Grafiken unter "\skins\images\common\cc-..." keine Unterscheidung nach Versionsnummer und Länderversion anbieten, werden die Grafiken von "Creative Commons" heruntergeladen, umbenannt und gespeichert unter "[wikiname]\images\common\":

Die Lizenzkonfiguration erfolgt in der Datei "LocalSettings.php":

  • Salzwiki
## For attaching licensing metadata to pages, and displaying an 
## appropriate copyright notice / icon. GNU Free Documentation 
## License and Creative Commons licenses are supported so far. 
$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright 
## Deutsch
$wgRightsUrl = "https://creativecommons.org/licenses/by-nc-sa/3.0/de/"; 
$wgRightsText = "Namensnennung-Nicht-kommerziell-Weitergabe unter gleichen Bedingungen 3.0 Deutschland"; 
// bei MW 1.23
#$wgRightsIcon = "https://i.creativecommons.org/l/by-nc-sa/3.0/de/88x31.png";
#$wgRightsIcon = "{$wgStylePath}/common/images/cc-by-nc-sa.png";
$wgRightsIcon = $wgScriptPath."/common/images/CC_BY_NC_SA_3.0_de_88x31.png";
# $wgRightsCode = "[license_code]"; # Not yet used
  • Saltwiki und Repositorium
## For attaching licensing metadata to pages, and displaying an 
## appropriate copyright notice / icon. GNU Free Documentation 
## License and Creative Commons licenses are supported so far. 
$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright 
## English und Repositorium
$wgRightsUrl = "https://creativecommons.org/licenses/by-nc-sa/3.0/"; 
$wgRightsText = "Attribution-Noncommercial-Share Alike 3.0 Unported"; 
// bei MW 1.23
#$wgRightsIcon = "https://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png";
#$wgRightsIcon = "{$wgStylePath}/common/images/cc-by-nc-sa.png";
$wgRightsIcon = $wgScriptPath."/common/images/CC_BY_NC_SA_3.0_en_88x31.png";
# $wgRightsCode = "[license_code]"; # Not yet used

Style/Skin[Bearbeiten]

MW 1.31 LTS MonoBook[Bearbeiten]

Das Design für die Salzwikis basierte wegen der beim ursprünglichen Design verwendeten Hintergrundgrafik und wegen der links angeordneten Footer-Icons auf dem Stil (Skin) "Monobook", obwohl der Stil bei MW 1.17 von "Vector" als Standardstil abgelöst wurde.

Bei MW 1.31 gibt es wie bei MW 1.27 LTS im Gegensatz zu MW 1.23 bezüglich der Auto-discovery-Funktion und der Datei "MonoBook.php" nichts zu beachten. Bei MW 1.23 LTS hingegen wurde die Original-Datei "MonoBook.php" wegen der veralteten Auto-discovery-Funktion, die "Monobook" noch hatte, als Kopie namens "MonoBook_Original.php" im Verzeichnis "skins\monobook\" gespeichert.

Style-Dateien[Bearbeiten]

Die Klassen "SkinMonoBook" und "MonoBookTemplate" aus der Datei "MonoBook.php" von MW1.23 befinden sich bei MW1.31 in jeweils eigenen Dateien im Verzeichnis "...\[wikiname]\skins\MonoBook\includes\":

  • MonoBookTemplate.php
  • SkinMonoBook.php

Folgende Dateien werden für das Layout und eigene Grafiken bearbeitet:

  • Verzeichnis [wikiname]\skins\MonoBook\includes\
    • MonoBookTemplate.php
  • Verzeichnis [wikiname]\skins\MonoBook\resources\
    • variables.less
    • screen-common.less
    • screen-desktop.less
  • Unterverzeichnis [wikiname]\skins\MonoBook\resources\skinStyles\
    • mediawiki.special.preferences.styles.less

Hintergrund-Grafik[Bearbeiten]

Beim Layout "MonoBook" ist standardmäßig eine Hintergrund-Grafik "headbg-gradient.svg" eingebunden. Für das schlichtere HAWK-Design mit CI/CD-Logo wird die Hintergrund-Grafik in der Datei "screen-common.less" unterhalb Z.47 auskommentiert, siehe Adm:HAWK-Design.

Style in "LocalSettings"[Bearbeiten]

In der Datei "LocalSettings.php" heißt die entsprechende Zuweisung bei MW1.31

$wgDefaultSkin = "monobook";
$wfLoadSkin("MonoBook");

Zusätzlich sind darunter folgende Zeilen erforderlich:

  // CC-Icon rechts unten für "MonoBook" angepasst 2015-09-28:
  $wgFooterIcon_copyright['copyright'] = array(
    "src" => $wgRightsIcon, // Icon
    "url" => $wgRightsUrl,
    "alt" => $wgRightsText,
    //"height" => "", // Icon-Höhe
    //"width" => "" // Icon-Breite
  );
  unset($wgFooterIcons['copyright']);
  $wgFooterIcons_r['poweredby'] = array_merge($wgFooterIcon_copyright,$wgFooterIcons['poweredby']);
  // für "MonoBook" und "Vector" ergänzt
  ## FOOTER-Icons links, wobei der erste Schlüssel zu <li id="footer-...ico"> verarbeitet wird
  $wgFooterIcons_l['copyright']['hornemanninstitut'] = array(
    "src" => "$wgScriptPath/images/common/HI.png", // Icon
    "url" => "http://www.hornemann-institut.de",
    "alt" => "Hornemann Institut",
    //"height" => "", // Icon-Höhe
    //"width" => "" // Icon-Breite
  );
  $wgFooterIcons_l['copyright']['hawk'] = array(
    "src" => "$wgScriptPath/images/common/hawk.png", // Icon
    "url" => "http://www.hawk-hhg.de",
    "alt" => "HAWK HHG",
    //"height" => "", // Icon-Höhe
    //"width" => "" // Icon-Breite
  );
  $wgFooterIcons_l['copyright']['dfg'] = array(
    "src" => "$wgScriptPath/images/common/DFG.jpg", // Icon
    "url" => "http://www.dfg.de",
    "alt" => "DFG",
    //"height" => "", // Icon-Höhe
    //"width" => "" // Icon-Breite
  );
  // für "Vector"
  #$wgFooterIcons_r = $wgFooterIcons;
  unset($wgFooterIcons);
  $wgFooterIcons = array_merge($wgFooterIcons_l, $wgFooterIcons_r);

MW 1.31 LTS Timeless[Bearbeiten]

Bei MW 1.31 gibt es das sogenanntes "responsive" Layout namens "Timeless" für 4 verschiedene Gerätetypen.

MW 1.23 LTS Vector[Bearbeiten]

Bei der Verwendung von "Vector" wird die Original-Datei "skins\Vector.php" wegen der veralteten Auto-discovery-Funktion, die "Vector" bei MW 1.23 LTS noch hat, als Kopie namens "Vector_Original.php" im Verzeichnis "skins\vector\" gespeichert.

In der Datei "LocalSettings.php" heißt die entsprechende Zuweisung dann
$wgDefaultSkin = "vector";.

Im Verzeichnis "vector/components/footer.less" wird für die eigenen Icons im Footer unten links die Definition von "#footer-icons" kopiert und umbenannt in "#footer-icons-left" und folgendermaßen angepasst:

/* SalzWiki eingefügt 2015-09-28 */
#footer-icons-left {
  float: left;
  li {
    float: left;
    margin-right: 0.5em;
    line-height: 2em;
    text-align: left;
  }
}

Im Verzeichnis "vector/images/" wird die Datei "headbg.jpg" für ein eigenes Hintergrundbild eingefügt.

Im Verzeichnis "vector/components/common.less" wird für das Hintergrundbild "body" folgendermaßen angepasst:

body {
  /* SalzWiki eingefügt 2015-09-28 */
  background: #F9F9F4 url("headbg.jpg");
  /*background-color: @menu-background-color*/
}

HAWK-Design[Bearbeiten]

Für Anpassungen der StyleSheets an das HAWK-Design siehe Adm:HAWK-Design.

[Bearbeiten]

Das ursprüngliche Logo wurde bei SalzWiki und SaltWiki durch ein CI/CD-Logo ersetzt, welches unter MW1.23 das Suffix "_draft" erhielt und für MW1.31 mit dem Suffix "_CICD" gekennzeichnet wird:

  • ursprüngliches Logo: Logo_Salz.png, Logo_Salt.png, Logo_Repo.png
  • CI/CD-Logo bei MW1.23: Logo_Salz_draft.png, Logo_Salt_draft.png
  • CI/CD-Logo bei MW1.31: Logo_Salz_CICD.png, Logo_Salt_CICD.png

Die Datei für das Logo links oben ist hochzuladen und in der Datei "LocalSettings.php" zuzuweisen. In MW1.31 wird standardmäßig $wgResourceBasePath für das ResoureceLoader-Modul verwendet, wobei $wgResourceBasePath = $wgScriptPath ist:

  • Salzwiki
##Logo MW1.23
#$wgLogo = $wgScriptPath."/images/common/Logo_Salz_draft.png";
##Logo MW1.31
$wgLogo = $wgResourceBasePath."/images/common/Logo_Salz_CICD.png";
  • Saltwiki
##Logo MW1.23
#$wgLogo = $wgScriptPath."/images/common/Logo_Salt_draft.png";
##Logo MW1.31
$wgLogo = $wgResourceBasePath."/images/common/Logo_Salt_CICD.png";
  • Repositorium
##Logo MW1.23
#$wgLogo = $wgScriptPath."/images/common/Logo_Repo.png";
##Logo MW1.31
$wgLogo = $wgResourceBasePath."/images/common/Logo_Repo.png";

Fußzeile "Footer" anpassen[Bearbeiten]

Um "Footer"-Verweise auszublenden und anzupassen sowie eigene Logos mit Verlinkung einzufügen, sind folgende Schritte notwendig:

LocalSettings.php anpassen[Bearbeiten]

Änderungen in der Datei "LocalSettings.php" "MonoBookSW.php": Zeile 141ff:

Ausblendung des Besuche-Zählers entfällt[Bearbeiten]

Seit MW1.25 ist die Variable $wgDisableCounters nicht mehr verfügbar, weil die Zählfunktion nicht mehr unterstützt wird. Als Ersatz soll die Erweiterung "HitCounters" verwendet werden können.

Die Anzeige der Texte von "Anzahl der Seitenabrufe" wurde bei MW1.23 wie folgt unterbunden:

$wgDisableCounters = true;
Anpassung für Logos links und rechts[Bearbeiten]

Die Logos und Verweise links für "Hornemann Institut", "HAWK" und "SIK" sowie rechts für "CC-Lizenz" und "Powered by MediaWiki" werden wie folgt festgelegt:

#### Beginn FOOTER ab Version MW1.23
// CC-Icon rechts unten für "MonoBook" angepasst 2015-09-28:
$wgFooterIcon_copyright['copyright'] = array(
  "src" => $wgRightsIcon, // Icon
  "url" => $wgRightsUrl,
  "alt" => $wgRightsText,
  //"height" => "", // Icon-Höhe
  //"width" => "" // Icon-Breite
);
unset($wgFooterIcons['copyright']);
$wgFooterIcons_r['poweredby'] = array_merge($wgFooterIcon_copyright,$wgFooterIcons['poweredby']);
// für "MonoBook" und "Vector" ergänzt
## FOOTER-Icons links, wobei der erste Schlüssel zu <li id="footer-...ico"> verarbeitet wird
$wgFooterIcons_l['copyright']['hornemanninstitut'] = array(
  "src" => "$wgScriptPath/images/common/HI.png", // Icon
  "url" => "http://www.hornemann-institut.de",
  "alt" => "Hornemann Institut",
  //"height" => "", // Icon-Höhe
  //"width" => "" // Icon-Breite
);
$wgFooterIcons_l['copyright']['hawk'] = array(
  "src" => "$wgScriptPath/images/common/hawk.png", // Icon
  "url" => "http://www.hawk-hhg.de",
  "alt" => "HAWK HHG",
  //"height" => "", // Icon-Höhe
  //"width" => "" // Icon-Breite
);
$wgFooterIcons_l['copyright']['sik'] = array(
  "src" => "$wgScriptPath/images/common/SIK.png", // Icon
  "url" => "http://http://www.salze-kulturgut.de",
  "alt" => "SIK",
  "height" => "30px", // Icon-Höhe
  "width" => "30px" // Icon-Breite
);
// für "Vector"
#$wgFooterIcons_r = $wgFooterIcons;
unset($wgFooterIcons);
$wgFooterIcons = array_merge($wgFooterIcons_l, $wgFooterIcons_r);
#### Ende FOOTER ab Version MW1.23
Anpassung mittlerer Fußzeilen-Elemente[Bearbeiten]

Die Änderung von "Über [Wiki-Name]" zu "Forschungsverbund"/"Projektverbund" findet nicht mehr statt, weshalb "about" weggelassen wird. Zusätzlich muss "Disclaimer" durch "Impressum" ersetzt werden.

Der verwendete "Hook", um Fußzeilen-Elemente auszublenden, heißt "SkinTemplateOutputPageBeforeExec" und steht seit MW1.10 zur Verfügung.

Die Anzeige der Texte von "lastmodified", "about" und "CC-Lizenz" im mittleren Bereich kann mit einem "Hook" wie folgt unterbunden werden:

#### Beginn mittlerer FOOTER ab Version MW1.31
// Elemente verbergen
$wgHooks['SkinTemplateOutputPageBeforeExec'] = 'lfHide';
function lfHide( $skin, &$template ) {
  $template->set( "lastmod", "");
  $template->set( "copyright", "");
  $template->set( "about", "");
  return true;
};
// "Haftungsausschluss" wird auf der Seite "MediaWiki:Disclaimers" durch "Impressum" ersetzt
// Datenschutz ist bei MW1.31 mit "privacy" standardmäßig enthalten
// Projektverbund soll nicht mehr im Fußbereich erscheinen
#### Ende mittlerer FOOTER ab Version MW1.31

Für neue, geänderte und ausgeblendete Footer-Verweise, siehe auch https://www.mediawiki.org/wiki/Manual:Footer. Nicht mehr erforderliche Festlegungen:

// "Haftungsausschluss" wird auf der Seite "MediaWiki:Disclaimers" durch "Impressum" ersetzt
#$wgHooks['SkinTemplateOutputPageBeforeExec'][] = function ($sk, &$tpl){
#  $tpl->set('impressum', $sk->footerLink('impressum', 'Impressum'));
#  $tpl->data['footerlinks']['places'][] = 'impressum';
#  return true;
#}
// Datenschutz ist bei MW1.31 standardmäßig enthalten
#$wgHooks['SkinTemplateOutputPageBeforeExec'][] = function ($sk, &$tpl){
#  $tpl->set('datenschutz', $sk->footerLink('datenschutz', 'Datenschutz'));
#  $tpl->data['footerlinks']['places'][] = 'datenschutz';
#  return true;
#}
// Projektverbund soll nicht mehr im Fußbereich erscheinen
#$wgHooks['SkinTemplateOutputPageBeforeExec'][] = function ($sk, &$tpl){
#  $tpl->set('projektverbund', $sk->footerLink('projektverbund', 'Projektverbund'));
#  $tpl->data['footerlinks']['places'][] = 'projektverbund';
#  return true;
#}

Angeblich können auch nicht erwünschte "Footer"-Seiten ausgeblendet werden, indem im Namensraum "MediaWiki:..." der enthaltene Text durch einen Bindestrich ersetzt wird, siehe https://www.mediawiki.org/wiki/Manual:Footer#Customizing_the_Built-in_items letzte Zeile. Dann müsste aber bei der entsprechenden Seite für jede Sprache die Änderung erfolgen.

Ursprüngliche Texte für "de-formal":

  • "MediaWiki:About": Über
  • "MediaWiki:Copyright": Der Inhalt ist verfügbar unter der Lizenz $1, sofern nicht anders angegeben.
  • "MediaWiki:Lastmodifiedat": Diese Seite wurde zuletzt am $1 um $2 Uhr bearbeitet.

MonoBookTemplate.php nicht mehr anpassen (Wiki-Code)[Bearbeiten]

Bei MW1.31 ist die Datei "MonoBookTemplate.php" im neuen Unterverzeichnis "[wikiname]\skins\MonoBook\includes\" enthalten.

Bei MW1.27.4 befand sich die Datei noch im Verzeichnis "[wikiname]\skins\MonoBook\". Bei MW1.23.11 wurde stattdessen die Datei "[wikiname]\skins\MonoBook.php" angepasst.

Bei MW1.31 finden keine Änderungen in der Datei "MonoBookTemplate.php" für die Texte von "lastmodified" und "CC-Lizenz" sowie der Verweis zu "Über" bzw. "About" durch eigenen Code unter Zeile 529 statt, weil die Anpassung in der Datei "LocalSettings.php" mit einem "Hook" erzeugt werden kann. Bei MW1.31 nicht erforderliche Änderung:

  foreach ( $validFooterLinks as $aLink ) {
    #if($aLink!=="lastmod" && $aLink!=="copyright" && $aLink!=="about"){ /*eingefügt für HAWK HHG 2018-10-15,2016-03-29,2015-12-07*/
      $html .= Html::rawElement(
        'li',
        [ 'id' => Sanitizer::escapeIdForAttribute( $aLink ) ],
        $this->get( $aLink )
      );
    #} /*eingefügt für HAWK HHG 2018-10-15,2016-03-29,2015-12-07*/
  }
  ?>

Bei MW1.27 wurden in der Datei "MonoBookTemplate.php" die Texte von "lastmodified" und "CC-Lizenz" sowie der Verweis zu "Über" bzw. "About" durch eigenen Code unter Zeile 194 herausgefiltert:

  <?php
  foreach ( $validFooterLinks as $aLink ) { ?>
    <?php if($aLink!=="lastmod" && $aLink!=="copyright" && $aLink!=="about"){ /*eingefügt für HAWK HHG 2015-12-07 u. 2016-03-29*/ ?>
    <li id="<?php echo $aLink ?>"><?php $this->html( $aLink ) ?>
  <?php   } /*eingefügt für HAWK HHG 2015-12-07*/
  }
  ?>

Original-Code bei MW1.27:

  <?php
  foreach ( $validFooterLinks as $aLink ) { 
    ?>
    <li id="<?php echo $aLink ?>"><?php $this->html( $aLink ) ?>
  <?php
  }
  ?>

HTML-Footer-Elemente[Bearbeiten]

Bei MW1.23 bis 1.31 kann die Variable $wgFooterIcons für Icons links und rechts unten im Footer erweitert werden. Bei MW1.16 bis 1.26 gab es die Variable $wgCopyrightIcon, mit der nur der Bereich rechts unten im Footer angepasst werden konnte.

Bei MW1.31 besteht der Footer-Container aus folgenden Bereichen:

  • div id="footer"
    • div id="f-copyrightico" (unterer Footer-Bereich links)
    • div id="f-poweredbyico" (unterer Footer-Bereich rechts)
    • ul id="f-list" (oberer=mittlerer Footer-Bereich)
      • li id="privacy"
      • li id="about"
      • li id="disclaimer"

Bei MW1.27 bestand der Footer-Container aus folgenden Bereichen:

  • div id="footer"
    • div id="f-copyrightico" (unterer Footer-Bereich links)
    • div id="f-poweredbyico" (unterer Footer-Bereich rechts)
    • ul id="f-list" (oberer=mittlerer Footer-Bereich)
      • li id="lastmod"
      • li id="copyright"
      • li id="privacy"
      • li id="about"
      • li id="disclaimer"

Bei MW1.23 bestand der Footer-Container aus folgenden Bereichen:

  • div id="footer"
    • div id="f-copyrightico" (unterer Footer-Bereich links)
    • div id="f-poweredbyico" (unterer Footer-Bereich rechts)
    • ul id="f-list" (oberer=mittlerer Footer-Bereich)
      • li id="lastmod"
      • li id="viewcount"
      • li id="copyright"
      • li id="privacy"
      • li id="about"
      • li id="disclaimer"

Bei MW1.16 bestand der Footer-Container aus folgenden Bereichen:

  • ul id="footer-info" (oberer Footer-Bereich)
    • li id="footer-info-lastmod"
    • li id="footer-info-copyright"
  • ul id="footer-places" (unterer Footer-Bereich links)
    • ul id="footer-places-privacy"
    • ul id="footer-places-about"
    • ul id="footer-places-disclaimer"
  • ul id="footer-icons" (unterer Footer-Bereich rechts)
    • ul id="footer-copyrightico"
    • ul id="footer-poweredbyico"

Favicon[Bearbeiten]

Damit in der Browser-Adresszeile ein Favicon dargestellt wird, ist eine Datei "salzwiki.ico" in das jeweilige Wiki-Verzeichnis hochzuladen und folgender Eintrag in der jeweiligen Datei "LocalSettings.php" vorzunehmen:

#$wgFavicon = "/[wikiverzeichnisname]/salzwiki.ico";
$wgFavicon = $wgResourceBsePath."/salzwiki.ico";

Bug-Beseitigung bei SHA1-Spalten[Bearbeiten]

Nach dem Upgrade auf MW1.31 erscheint beim Versuch Seiten zu verschieben eine Fehlermeldung "MediaWiki\Storage\IncompleteRevisionException". Sie wird verursacht durch leere Spaltenwerte in den Tabellen-Spalten "rev_sha1" der Tabelle "[Präfix]revision" und "ar_sha1" der Tabelle "[Präfix]archive", siehe

Abhilfe schafft die Datei "populateRevisionSha1.php --force" im Verzeichnis "maintenance" des jeweiligen Wikis:

cd D:
cd noxampp\php
php.exe D:\noxampp\apache\htdocs\wikiname\maintenance\populateRevisionSha1.php --force

Sofern beim Versuche eine Seite zu verschieben dann noch eine Fehlermeldung erscheint, ist in der Tabelle "content" die Spalte "content_sha1" zu prüfen und gegebenenfalls mit "populateContentTables.php" anzupassen, bevor das zuvor genannte Script ausgeführt wird, siehe https://phabricator.wikimedia.org/T200653:

php.exe D:\noxampp\apache\htdocs\wikiname\maintenance\populateContentTables.php --force
php.exe D:\noxampp\apache\htdocs\wikiname\maintenance\populateRevisionSha1.php --force

Darstellung in einem Frame[Bearbeiten]

Diese Funktionalität war nötig, solange die Wikis über die IP durch Frame-"Weiterleitung" bei "1&1" erreichbar waren. Sie wurde im ersten Halbjahr 2017 überflüssig nach Änderung des DNS-Eintrags auf die HAWK-IP bei "1&1" im Rahmen der Umstellung auf HTTPS und Server-Zertifikate.

Seit MW Version 1.16.1 gibt es Vorkehrungen gegen CrossSiteScripting, was Seiten, die in Frames dargestellt werden und somit die Weiterleitung des Salzwiki-Hosters zur IP des HAWK-Rechenzentrumsservers, betrifft.

Die neuen Versionen des Internet Explorers und des Firefox zeigen eine Fehlermeldung, wenn man sich anmelden möchte, da der Inhalt in einem Frame angezeigt werden soll. Meist hilft die Nutzung eines Links zur IP-Seite weiter.

Dies ist zu umgehen, d.h. es tritt keine Fehlermeldung auf, wenn man in den localsetting.php einfügt:

$wgEditPageFrameOptions = 'false'; 

Hierzu näheres unter http://webcache.googleusercontent.com/search?q=cache:H1KG7SKYpvoJ:100thpriest.appspot.com/www.mediawiki.org/wiki/Project:Support_desk+mediawiki+1.16.1+frame+warnung+anmelden&cd=3&hl=de&ct=clnk&gl=de&client=firefox-a&source=www.google.de

* The X-Frame-Options header to send on pages sensitive to clickjacking
* attacks, such as edit pages. This prevents those pages from being displayed
* in a frame or iframe. The options are:
*
*   - 'DENY': Do not allow framing. This is recommended for most wikis.
*
*   - 'SAMEORIGIN': Allow framing by pages on the same domain. This can be used
*         to allow framing within a trusted domain. This is insecure if there
*         is a page on the same domain which allows framing of arbitrary URLs.
*
*   - false: Allow all framing. This opens up the wiki to XSS attacks and thus
*         full compromise of local user accounts. Private wikis behind a
*         corporate firewall are especially vulnerable. This is not
*         recommended.
*
* For extra safety, set $wgBreakFrames = true, to prevent framing on all pages,
* not just edit pages. 

Wiki-Konfiguration[Bearbeiten]

Die Konfiguration eines Wikis erfolgt hauptsächlich mit PHP-Variablen in der Datei "xampp\htdocs\[wikiname]\LocalSettings.php".

Z.23ff bei Verwendung der Domain-Adressen mit HTTP oder HTTPS

...
$wgSitename = "Salzwiki"; # "Salzwiki" "Saltwiki" "Repository"
// neu in MW 1.31
$wgMetaNamespace = "Salzwiki";
...
$wgScriptPath = ""; # "/salzwiki" "/saltwiki" "/repository"
#$wgScriptExtension = ".php"; // entfällt seit MW1.27
...
## The protocol and server name to use in fully-qualified URLs
if($_SERVER['HTTPS']==="on" OR !empty($_SERVER['HTTPS'])){$protokoll = "https";}
else{$protokoll = "http";}
$wgServer = $protokoll."://".$_SERVER['SERVER_NAME'];
...
# Neu in MW1.31
## The URL path to static resources (images, scripts, etc.)
$wgResourceBasePath = $wgScriptPath;
...

Z.23ff bei Verwendung der IP-Adresse

...
$wgSitename = "Salzwiki"; # "Salzwiki" "Saltwiki" "Repository"
...
$wgScriptPath = "/salzwiki"; # "/salzwiki" "/saltwiki" "/repository"
#$wgScriptExtension = ".php"; // entfällt seit MW1.27
...
## The protocol and server name to use in fully-qualified URLs
$wgServer = "http://".$_SERVER['SERVER_NAME'];
...
# Neu in MW1.31
## The URL path to static resources (images, scripts, etc.)
$wgResourceBasePath = $wgScriptPath;
...

Spracheinstellungen[Bearbeiten]

Standardsprache[Bearbeiten]

Die Standardsprache wird in der Datei "LocalSettings.php" festgelegt, kann von den Usern in den Profileinstellungen aber nach den persönnlichen Bedürfnissen angepasst werden.

  • Salzwiki: $wgLanguageCode = "de-formal";
  • Saltwiki: $wgLanguageCode = "en";
  • Repositorium: $wgLanguageCode = "en";

de-formal korrigieren (Wiki-Code)[Bearbeiten]

Die Datei "[wikiname]\languages\i18n\de-formal.json" wird wegen einer Du-Form ergänzt. Zuvor ist die Datei als Kopie "de-formal_original.json" zu speichern. Nach der Korrektur ist für Wiki-Updates eine Kopie als "de-formalSW.json" zu speichern.

Für die Sie-Form wird aus der Datei "de.json" von Zeile 1759 "emailccme" mit Du-Form verwendet: "Sende eine Kopie der E-Mail an mich"; deshalb ist in der Datei "de-formal.json" in Zeile 216f zwischen "emailpagetext" und "emailccsubject" einzufügen:

"emailccme": "Eine Kopie der E-Mail an mich senden",

Zugangsberechtigungen[Bearbeiten]

Passwort-Sicherheit[Bearbeiten]

Ab MW1.26 wird durch eine integrierte "Policy" die Passwortlänge und die Unterscheidung vom Anmeldename vorgegeben. Dabei wird für die Anmeldung mit bereits bestehenden Zugangsdaten nicht berücksichtigt, dass die neuen Voraussetzungen nicht immer erfüllt werden. Weitere Hinweise unter

Nach Eingabe eines zu kurzen Passworts erscheinen die Schaltflächen für "Weiter" zur Passwortänderung und "Abbrechen" nicht auf Deutsch übersetzt, sondern in Englisch mit "Continue login" und "Skip".

In der Datei "LocalSettings.php" einfügen:

$wgPasswordPolicy['policies']['default']['MinimalPasswordLength'] = 6;
$wgPasswordPolicy['policies']['sysop']['MinimalPasswordLength'] = 6;
$wgPasswordPolicy['policies']['bureaucrat']['MinimalPasswordLength'] = 6;
$wgPasswordPolicy['policies']['Administratoren']['MinimalPasswordLength'] = 6;
$wgPasswordPolicy['policies']['default']['MinimumPasswordLengthToLogin'] = 6;
$wgPasswordPolicy['policies']['sysop']['MinimumPasswordLengthToLogin'] = 6;
$wgPasswordPolicy['policies']['bureaucrat']['MinimumPasswordLengthToLogin'] = 6;
$wgPasswordPolicy['policies']['Administratoren']['MinimumPasswordLengthToLogin'] = 6;

Gruppen für Berechtigungen[Bearbeiten]

  • Administratoren = Chef-Redakteure für Accounts erstellen/sperren, Systemtexte bearbeiten, Wiki-Inhalte verschieben, löschen, importieren etc.
  • autor = Autor/in für Wiki-Inhalte
  • Benutzer = nur Diskussionsseiten
  • Bots (Systemgruppe)
  • Bürokraten = Rechtevergabe, Account-Vereinigung
  • Editor (saltwiki, repository) = Wiki-Inhalte-Kontrolle
  • Redakteur (salzwiki) = siehe Editor
  • Sicherheit = Seitensperre für Spezialseiten und gesperrte Seiten bei deaktiviertem JavaScript
  • Salzwiki, HAWK, SIP etc. = Gruppen im Repository
  • sysop = Hauptadministrator

Berechtigungen für Seiten[Bearbeiten]

Eine Übersicht mit Erweiterungen für Seitenberechtigungen gibt es bei https://www.mediawiki.org/wiki/Category:Page_specific_user_rights_extensions, wovon die meisten jedoch nicht mehr eingesetzt werden können.

Es gibt für MW1.31 möglicherweise folgende Erweiterungen zur Beschränkung von Berechtigungen einzelner Seiten:

  • AuthorProtect: verhindert die Bearbeitung außer für das Konto, mit dem die Seite erstellt wurde
  • Lockdown: verhindert den Zugang zu bestimmten Namensräumen und Spezialseiten
  • NSFileRepo: verhindert lesen und hochladen von Dateien und Bildern für bestimmte Gruppen bezogen auf Namensräume

Vergabe von Nutzungsrechten durch das Hauptadmin-Konto[Bearbeiten]

Damit die unten beschriebenen Rechtevergaben umgesetzt werden können, erhält das Hauptadmin-Konto "sysop" zunächst den Zugang zu den Spezialseiten, um auch nach Änderung der Datei "SpecialPage.php" Zugriff auf die Spezialseiten zu haben.

HJschwarz 22.02.2011, Ersteinstellung für "restrictusers" zum Einstellen der Rechte
Folgende Zeile ist in der Datei "LocalSettings.php" einzufügen:

## Freischalten der Spezialseiten
$wgGroupPermissions['sysop']['restrictusers'] = true;	

Anschließend werden über "SpecialPages->UserRightsManagement->[Username]" die Rechte erweitert und alle Gruppen aktiviert.

Nutzungsrechte im Repositorium einschränken[Bearbeiten]

Als Gast, ohne Anmeldung, kann keine Seite im Repositorium gelesen werden, die in der Datei "LocalSettings.php" nicht im Array von "$wgWhitelistRead" oder "$wgWhitelistReadRegexp" aufgeführt wird, siehe auch

$wgGroupPermissions['*']['read'] = false;

Zum Lesen freigegebene Seiten:

  • Startseite
  • Anmeldeseite
  • Seiten von Bildern und Dateien für Ansicht in "SalzWiki" und "SaltWiki"

Definition der freigegebenen Seiten:

$wgWhitelistRead = array(":Repository", ":home", "Spezial:Userlogin");
$wgWhitelistReadRegexp = array("/Datei:/", "/File:/");

Benutzer-Rechte in allen 3 Wikis[Bearbeiten]

Das Benutzerrechteschema sieht folgendermaßen aus:

// Salzwiki (auskommentiert)
#$wgWhitelistRead = array(":Hauptseite", "Spezial:Userlogin", "Salzwiki:Impressum", "General_disclaimer");
// Saltwiki
#$wgWhitelistRead = array("Welcome_to_SaltWiki", "Saltwiki:About", "Saltwiki:General disclaimer", "Saltwiki:Privacy policy");
// Repository
#$wgWhitelistRead = array(":Repository", ":home", "Spezial:Userlogin");
#$wgWhitelistReadRegexp = array("/Datei:/", "/File:/");
// Salzwiki/Saltwiki
#$wgWhitelistEdit = "talk"; // veraltet seit MW1.5.0 und "...Edit" statt "...edit"
// Salzwiki/Saltwiki
$wgGroupPermissions['Sysadmin']['editadmin'] = true;
# alle duerfen lesen, alle dürfen nicht editieren
$wgGroupPermissions['*']['read']          = true;
$wgGroupPermissions['*']['edit']          = false;
$wgGroupPermissions['*']['createpage']    = false;
$wgGroupPermissions['*']['createaccount'] = false; // Salzwiki: true, Saltwiki/Repository: false
$wgGroupPermissions['*']['createtalk']    = false;
$wgGroupPermissions['*']['writeapi']      = false;
$wgGroupPermissions['*']['restrictusers'] = false; // Salzwiki/Saltwiki: false, Repository: auskommentiert

# Benutzer duerfen: lesen, Diskussionsseiten erstellen
$wgGroupPermissions['user']['read']            = true; // Salzwiki/Saltwiki: true, Repository: false
$wgGroupPermissions['user']['createtalk']      = true; // Salzwiki/Saltwiki: true, Repository: false
$wgGroupPermissions['user']['move']            = false;	
$wgGroupPermissions['user']['move-rootuserpages'] = false;
$wgGroupPermissions['user']['move-subpages']   = false;
$wgGroupPermissions['user']['edit']            = false; // true; // angepasst wg. Spameintrag 2019-03-29	
$wgGroupPermissions['user']['createpage']      = false;			
$wgGroupPermissions['user']['upload']          = false;		
$wgGroupPermissions['user']['reupload']        = false;		
$wgGroupPermissions['user']['reupload-shared'] = false;		
$wgGroupPermissions['user']['minoredit']       = false;		
$wgGroupPermissions['user']['purge']           = false;
$wgGroupPermissions['user']['writeapi']        = false;
$wgGroupPermissions['user']['restrictusers']   = false;
#$wgGroupPermissions['user']['sendemail']      = false; Repository: false, Salzwiki/Saltwiki: fehlt

# Spezialgruppe Autor
$wgGroupPermissions['autor']['emailconfirmed'] = true;
$wgGroupPermissions['autor']['createpage'] = true;
$wgGroupPermissions['autor']['createaccount'] = false; // Salzwiki: true, Saltwiki: false, Repository: auskommentiert
$wgGroupPermissions['autor']['createtalk'] = true;
$wgGroupPermissions['autor']['edit'] = true;
$wgGroupPermissions['autor']['protect'] = true; // Salzwiki/Saltwiki: true, Repository: auskommentiert
$wgGroupPermissions['autor']['editprotected'] = true; // Salzwiki/Saltwiki: true, Repository: auskommentiert
$wgGroupPermissions['autor']['read'] = true;
$wgGroupPermissions['autor']['upload'] = true;
$wgGroupPermissions['autor']['move'] = true;
$wgGroupPermissions['autor']['restrictusers'] = true; // Spezialseiten lesen

# Spezialgruppe Redakteur (Salzwiki) bzw. Editor (Saltwiki/Repository)
$wgGroupPermissions['Redakteur']['emailconfirmed'] = true;
$wgGroupPermissions['Redakteur']['createpage'] = true;
$wgGroupPermissions['Redakteur']['createtalk'] = true;
$wgGroupPermissions['Redakteur']['edit'] = true;
$wgGroupPermissions['Redakteur']['protect'] = true;
$wgGroupPermissions['Redakteur']['editprotected'] = true;
$wgGroupPermissions['Redakteur']['read'] = true;
$wgGroupPermissions['Redakteur']['upload'] = true;
$wgGroupPermissions['Redakteur']['patrol'] = true;
$wgGroupPermissions['Redakteur']['move'] = true;
$wgGroupPermissions['Redakteur']['createaccount'] = true;
$wgGroupPermissions['Redakteur']['movefile'] = true;
$wgGroupPermissions['Redakteur']['deletedtext'] = true;
$wgGroupPermissions['Redakteur']['deletedhistory'] = true;
$wgGroupPermissions['Redakteur']['noratelimit'] = true;
$wgGroupPermissions['Redakteur']['undelete'] = true;
$wgGroupPermissions['Redakteur']['restrictusers'] = true; // Salzwiki/Saltwiki: true, Repository: false
$wgGroupPermissions['Redakteur']['skipcaptcha'] = true;
$wgGroupPermissions['Redakteur']['approverevisions'] = true;

##Benutzergruppe um zu verhindern, dass Seiten der Specialpages 
##von jedem anderen außer Bürokraten und Admin und Sicherheit 
##aufgerufen werden können. Risos 08.02.2012
$wgGroupPermissions['Sicherheit']['read'] = true;
$wgGroupPermissions['Sicherheit']['Sicherheit'] = true;

# Prevent new user registrations except by sysops
$wgWhitelistAccount = array( "user" => 0, "sysop" => 1, "developer" => 1 );
#$wgGroupPermissions['sysop']['createaccount'] = false; // Salzwiki: fehlt, Saltwiki: false, Repository: auskommentiert

## Freischalten der Spezialseiten
$wgGroupPermissions['sysop']['restrictusers'] = true;

#$wgGroupPermissions['emailconfirmed']['emailconfirmed'] = true;

## to allow editing Special:Interwiki
$wgGroupPermissions['*']['interwiki'] = false;
$wgGroupPermissions['sysop']['interwiki'] = true;

Folgende Festlegungen wurden wegen Unwirksamkeit herausgenommen:

## Special Pages nur für Autoren lesbar; ohne Wirkung, da NS-Protection nur für edit und wegen falscher Bezeichnungen
##$wgNamespaceProtection[NS_spezial] = array( 'spezial-read');
##$wgGroupPermissions['autor']['spezial-read'] = true;
## Special Pages nur für bestimmte Gruppen lesbar; wirkt nicht, weil nur edit-Schutz möglich
#$wgNamespaceProtection[NS_SPECIAL] = array( 'sp_read'); // edit-protection: array( 'edit')
#$wgRestrictionLevels[] = "sp_read";
#$wgGroupPermissions['*']['sp_read'] = true;
#$wgGroupPermissions['user']['sp_read'] = true;
#$wgGroupPermissions['Redakteur']['sp_read'] = true;
#$wgGroupPermissions['Administratoren']['sp_read'] = true;
#$wgGroupPermissions['autor']['sp_read'] = true;
#$wgGroupPermissions['Sicherheit']['sp_read'] = true;
#$wgGroupPermissions['sysop']['sp_read'] = true;

Benutzer-Rechte in Repository[Bearbeiten]

Das für das Repositorium erweiterte Benutzerrechteschema enthält folgende Angaben:

# Repository
##---------------------------------------------------------------------------------
# Spezialgruppe HAWK eingefügt HSChwarz 4.10.2011
$wgGroupPermissions['HAWK']['emailconfirmed'] = true;
$wgGroupPermissions['HAWK']['createpage'] = true;
$wgGroupPermissions['HAWK']['createtalk'] = true;
$wgGroupPermissions['HAWK']['edit'] = true;
$wgGroupPermissions['HAWK']['read'] = true;
$wgGroupPermissions['HAWK']['move'] = true;
$wgGroupPermissions['HAWK']['restrictusers'] = false;
## Anlegen von Rechteschema für Projekte
# Spezialgruppe SalzWiki eingefügt HSChwarz 27.07.2010
$wgGroupPermissions['SalzWiki']['emailconfirmed'] = true;
$wgGroupPermissions['SalzWiki']['createpage'] = true;
$wgGroupPermissions['SalzWiki']['createtalk'] = true;
$wgGroupPermissions['SalzWiki']['edit'] = true;
$wgGroupPermissions['SalzWiki']['read'] = true;
$wgGroupPermissions['SalzWiki']['move'] = true;
$wgGroupPermissions['SalzWiki']['restrictusers'] = false;
# Spezialgruppe SIP eingefügt HSChwarz 27.07.2010
$wgGroupPermissions['SIP']['emailconfirmed'] = true;
$wgGroupPermissions['SIP']['createpage'] = true;
$wgGroupPermissions['SIP']['createtalk'] = true;
$wgGroupPermissions['SIP']['edit'] = true;
$wgGroupPermissions['SIP']['read'] = true;
$wgGroupPermissions['SIP']['move'] = true;
$wgGroupPermissions['SIP']['restrictusers'] = false;

## Erweiterung ApprovedRevs nicht zusammen mit "AccessControl" einsetzbar
#$wgGroupPermissions['sysop']['approverevisions'] = true;
#$wgGroupPermissions['*']['viewlinktolatest'] = false;
#$wgGroupPermissions['autor']['viewlinktolatest'] = true; // Salzwiki/Saltwiki: true, Repository: auskommentiert
#$wgGroupPermissions['sysop']['viewlinktolatest'] = true;

## BibManager-Berechtigungen eingefügt 2016-02-23
$wgGroupPermissions['*']['bibmanagercreate'] = false;
$wgGroupPermissions['*']['bibmanageredit'] = false;
$wgGroupPermissions['*']['bibmanagerdelete'] = false;
$wgGroupPermissions['autor']['bibmanager'create] = true;
$wgGroupPermissions['autor']['bibmanageredit'] = true;
#$wgGroupPermissions['autor']['bibmanagerdelete'] = true;
$wgGroupPermissions['Redakteur']['bibmanager'create] = true;
$wgGroupPermissions['Redakteur']['bibmanageredit'] = true;
$wgGroupPermissions['Redakteur']['bibmanagerdelete'] = true;
$wgGroupPermissions['sysop']['bibmanager'create] = true;
$wgGroupPermissions['sysop']['bibmanageredit'] = true;
$wgGroupPermissions['sysop']['bibmanagerdelete'] = true;
/*
## Salzwiki/Saltwiki: Erweiterung ConfirmEdit
#captcha Hschwarz 12.01.2010
$wgGroupPermissions['*']['skipcaptcha'] = false;
$wgGroupPermissions['user']['skipcaptcha'] = false;
$wgGroupPermissions['autor']['skipcaptcha'create] = true;
$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;
#$wgGroupPermissions['bot']['skipcaptcha'] = true; // registered bots
$wgGroupPermissions['sysop']['skipcaptcha'] = true;
*/

Namensraum "Adm"[Bearbeiten]

Damit im deutschen SalzWiki der Namensraum "Adm" mit den Anleitungen für die Administration der Wikis nur für Mitglieder der Gruppen "Administratoren" und "sysop" verfügbar ist, wird in der Konfigurationsdatei "LocalSettings.php" ein "Hook" namens "userCan" eingefügt. Für weitere Informationen zu "userCan" siehe https://www.mediawiki.org/wiki/Manual:Hooks/userCan.

Da der Namensraum "Adm" in allen Wikis definiert ist, wird der "Hook" für den Namensraum in allen Wikis zwischen dem "Hook" für die Spezialseiten und dem Abschnitt "Extensions" eingefügt.

$wgHooks['SpecialPage_initList'][] = 'groupspecificSpecialpages';
...
// Schutz des Namensraums "Adm:"
$wgHooks['userCan'][] = 'protectNamespaceAdm';
function protectNamespaceAdm(&$title, &$user, $action, &$result){
  $groups = $user->getEffectiveGroups();
  if( ($user->isAnon() || (!in_array("sysop", $groups) && !in_array("Administratoren", $groups)) )
   && substr($title,0,4)==="Adm:" ){
    $result = false;
    return false;
  }
}

##
## EXTENSIONS
...

Spezial-Seiten[Bearbeiten]

Für die Spezialseiten gibt es die Berechtigungsgruppe "Sicherheit" mit entsprechender Konfiguration in der Datei "LocalSettings.php".

Spezial-Seiten mit Sonderrechten[Bearbeiten]

Spezialseiten, die nur mit besonderen Berechtigungen verfügbar sind, werden nach Anmeldung bei einem Konto mit besonderen Berechtigungen auf der Seite "Spezialseiten" per CSS fett-formatiert dargestellt:

<li class="mw-specialpagerestricted">...
Spezial-Seiten verbergen[Bearbeiten]

Werden die Spezial-Seiten in der linken Menüleiste verborgen - siehe Sidebar-Einschränkung - sind sie dennoch über die Adresszeile des Browsers erreichbar, beispielsweise die Spezialseiten-Übersicht mit "https://wikiname.tld/index.php/Spezial:Spezialseiten".

Um derartige Seitenaufrufe zu unterbinden, werden in der Datei "LocalSettings.php" Berechtigungen festgelegt bzw. wird die Liste der Seiten auf das Notwendigste reduziert.

Spezialseiten mit Gruppenberechtigung[Bearbeiten]

Es sollen nur Mitglieder bestimmter Gruppen die Spezialseiten im Namensraum "NS_SPECIAL" lesen dürfen, aber nicht unangemeldete Gäste oder Mitglieder anderer Gruppen. Gruppen mit Leserecht:

  • Administratoren
  • autor
  • Redakteur
  • Sicherheit
  • sysop

Spezialseiten, die auch ohne Anmeldung zur Verfügung zu stellen sind:

  • Übersichtsseite mit reduzierter Auswahl: SpecialSpecialpages
    • Anmeldung: SpecialUserLogin
    • Abmeldung: SpecialUserLogout
    • Registrierung: SpecialCreateAccount
    • Kontakt: SpecialContact
    • Letzte Änderungen: SpecialRecentChanges
    • Bibliographie: SpecialBibManagerList

Für Berechtigungen von Spezialseiten siehe auch

In der Datei "LocalSettings.php" wird am Ende des Blocks "Namensräume" ein "Hook" namens "SpecialPage_initList" eingefügt. Der "Hook" wird in der Datei "SpecialPagesFactory.php" in der Funktion "getPageList()" ausgeführt. Verarbeitet werden die Angaben aus der Variablen $coreList.

Damit alle, die nicht Mitglied der berechtigten Gruppen sind, bestimmte Spezialseiten dennoch aufrufen können, wird Folgendes in der Datei "LocalSettings.php" eingegeben:

$wgHooks['SpecialPage_initList'][] = 'groupspecificSpecialpages';
function groupspecificSpecialpages(&$aSpecialPages){
  global $wgUser;
  $groups = $wgUser->getEffectiveGroups();
  if($wgUser->isAnon() || ( !in_array("sysop", $groups)
    && !in_array("autor", $groups) && !in_array("Administratoren", $groups)
    && !in_array("Redakteur", $groups) && !in_array("Editor", $groups)
    && !in_array("forschung", $groups)
  ) ){
    $aSpecialPages = array(
      "Specialpages" => "SpecialSpecialpages", // Übersicht mit reduzierter Auswahl
      "UserLogin" => "SpecialUserLogin", // für Anmeldung
      "UserLogout" => "SpecialUserLogout", // Seite nach der Abmeldung
      "CreateAccount" => "SpecialCreateAccount", // für Registrierung
      "Contact" => "SpecialContact", // Kontaktseite im Menü links
      "Recentchanges" => "SpecialRecentChanges", // Letzte Änderung im Menü links
      "BibManagerList" => "SpecialBibManagerList", // Bibliographie im Menü links
      #"BibManagerListAuthors" => "SpecialBibManagerListAuthors",
      "BibManagerCreate" => "SpecialBibManagerCreate", // notwendig für "SpecialBibManagerList.php"
      "BibManagerImport" => "SpecialBibManagerImport", // notwendig für "SpecialBibManagerList.php"
      "BibManagerExport" => "SpecialBibManagerExport", // notwendig für Export-Funktion auf Seite "Bibliographie"
      "CiteThisPage" => "SpecialCiteThisPage",
    );
  }
  return true;
};

Die Spezialseiten "BibManagerCreate" und "BibManagerImport" müssen in $aSpecialPages mit aufgenommen werden, damit keine Fehlermeldung ausgegeben wird. Der Fehler wird verursacht in den Zeilen 24 und 28 durch den Wert "NULL" bei der Methode "getDescription()", wenn die beiden Spezialseiten nicht berücksichtigt werden.

Anpassungen in vorigen MW-Versionen (Wiki-Code)[Bearbeiten]

Die nachfolgend beschriebenen Änderungen dienten in älteren MW-Versionen dazu, dass die "SpecialPages" nicht ohne Anmeldung sichtbar sind.

Achtung: Bei MW1.31 sind keine Anpassungen in der Datei "[wikiname]\includes\skins\SkinTemplate.php" vorzunehmen!. Erfolgen dennoch Änderungen siehe auch http://nullraffer.de/wiki/index.php?title=Mediawiki_absichern.

Bei MW1.16 waren die Anpassungen im Wiki-Code der Datei "SpecialPage.php" sowie in der Konfigurationsdatei erforderlich. Bei MW1.31/1.27/1.23 heißt die Datei "SpecialPageFactory.php" statt "SpecialPage.php". Die gleichnamige Klasse mit der Funktion "getRestrictedPages(...)" gilt ab MW1.32 als veraltet.

Es gibt in der MW-Klasse "User" eine Funktion "isAllowed()", mit der Berechtigungen für bestimmte Aktionen abgefragt werden können.

Der bei MW1.31 nicht mehr anzupassende Wiki-Code in der Datei "\includes\skins\SkinTemplate.php" bei der Funktion "buildNavUrls()" in der Zeile 1288ff wäre:

...
  $nav_urls['upload'] = false;
}
// für HAWK HHG Bedingung Spezialseiten nach Anmeldung sichtbar, eingefügt 2018-10-29
$sw_user = $this->getUser();
if(!$sw_user->isAnon()){
 $nav_urls['specialpages'] = [ 'href' => self::makeSpecialUrl( 'Specialpages') ];
}
$nav_urls['print'] = false;
...

MW1.23 zum Vergleich:

global $wgUploadNavigationUrl;
global $wgUser; // eingefügt 2015-12-04 für HAWK HHG
...
// Bedingung eingefügt 2015-12-04 für HAWK HHG
if(!$wgUser->isAnon()){
  $nav_urls['specialpages'] = array( 'href' => self::makeSpecialUrl( 'Specialpages' ) );
}
...

Folgende Anpassung in der Datei "LocalSettings.php" entfällt bei MW1.31: Zeile einfügen:

$wgGroupPermissions['autor']['restrictusers'] = true;

und folgende Zeile wieder auskommentieren:

$wgGroupPermissions['sysop']['restrictusers'] = true;

Die Anpassung von Wiki-Code in der Datei "SpecialPageFactory.php" entfällt bei MW1.31.

Wiki-Code bei MW 1.31 im Vergleich zu MW 1.23:

  • Assoziative Array-Elemente haben geänderte Werte, die nicht mehr als Text-Strings, sondern als Klassenmethoden angegeben sind
    • Bereich "Media reports and uploads" ab Zeile 125
    • Bereich "Unlisted / redirects" in Zeile 172
// Media reports and uploads
'Listfiles' => SpecialListFiles::class,
'Filepath' => SpecialFilePath::class,
...
// Unlisted / redirects
...
'Specialpages' => SpecialSpecialpages::class,
...

Wiki-Code bei MW 1.23 im Vergleich zu MW 1.16:

  • Variable "private static $list" statt "static public $mList"
  • Assoziative Array-Elemente haben geänderte Werte, die nicht mehr in Arrays, sondern nur noch als Text-Strings angegeben sind
    • Bereich "Media reports and uploads" ab Zeile 114
    • Bereich "Unlisted / redirects" in Zeile 171
// Media reports and uploads
'Listfiles' => 'SpecialListFiles',
'Filepath' => 'SpecialFilePath',
...
// Unlisted / redirects
'Specialpages' => 'SpecialSpecialpages',
...

Weiterleitungen[Bearbeiten]

Für einige Seiten werden Weiterleitungen eingerichtet. Für eine Übersicht der bestehenden Weiterleitungen siehe bei den Spezialseiten http://193.175.110.91/[wikiverzeichnis]/index.php/Spezial:Weiterleitungen bzw. http://193.175.110.91/[wikiverzeichnis]/index.php/Special:ListRedirects:

Für die Navigation links (Sidebar), den Footer-Bereich und dergleichen gibt es folgende Weiterleitungen:

  • SalzWiki
    • Aktuelles => Startseite#Aktuelles
    • Bibliographie => Special:BibMangerList
    • Forschungsverbund => Informationen zum DFG-Projekt#Projektverbund
    • Hauptseite => Startseite
    • Projektverbund => Informationen zum DFG-Projekt#Projektverbund
    • Willkommen im SalzWiki => Informationen zum DFG-Projekt
    • Über => Informationen zum DFG-Projekt
    • Über SalzWiki => Informationen zum DFG-Projekt
    • Über Salzwiki => Informationen zum DFG-Projekt
    • Diskussion:Hauptseite => Diskussion:Startseite
    • Diskussion:Willkommen im SalzWiki => Diskussion:Informationen zum DFG-Projekt
    • Salzwiki:Forschungsverbund => Informationen zum DFG-Projekt#Projektverbund
    • Salzwiki:Portal => Informationen zum DFG-Projekt
    • Salzwiki:Projektverbund => Informationen zum DFG-Projekt#Projektverbund
    • Salzwiki Diskussion:Portal => Diskussion:Informationen zum DFG-Projekt
    • Hilfe:Variables => Help:Magic words
    • Adm:ToDo-Liste => Salzwiki:ToDo-Liste
  • SaltWiki
    • Literature and Data => Literature and Programs
    • News => Home
    • Project Network => About the project#Research Network
    • Research Network => About the project#Research Network
    • Welcome to SaltWiki => About the project
    • Talk:Welcome to SaltWiki => Talk:About the project
    • Saltwiki:Portal => Home
    • Saltwiki:Research Network => About the project#Research Network
    • Help:Tex/de => Help:TeX/de
    • Help:Variables => Help:Magic words
  • Repository
    • Hauptseite => Repository
    • Main Page => Repository
    • Main Page/de => Repository
    • Repository:About => VRE/Repository

Sidebar anpassen[Bearbeiten]

Logo-Hyperlink[Bearbeiten]

Die Seite, die beim Klick auf das Logo aufgerufen werden soll, wird in der Seite "MediaWiki:Mainpage" angegeben.

Navigation links mit 3 Varianten[Bearbeiten]

Es gibt drei Varianten:

  • die Standard-Variante für
    • nicht-angemeldete Gäste, welche Wiki-Seiten nur ansehen können
    • angemeldete Standard-User
  • die Autor-Variante für
    • Autor/inn/en
    • Administrator/inn/en
    • Forscher/innen
  • die Editor-Variante auf Basis der Standard-Variante mit Werkzeugen der Autor/inn/en für
    • Editor/inn/en bzw. Redakteur/inn/e/n

Ein Vergleich der Varianten ist dokumentiert in der Datei Datei:Adm-SalzSaltRepoWikis MenueLinks Screenshots 20190226.pdf

Navigation links Standard-Variante[Bearbeiten]

Sichtbare Menüpunkte ohne JavaScript:

SalzWiki SaltWiki Repository
Navigation navigation Navigation
Startseite Home Home
Bibliographie Bibliography
Glossar Glossary
Redaktion Editorial Board
Autor/inn/en Authors
Letzte Änderungen
Kontakt Contact
Hilfe Help
other wikis
SalzWiki
SaltWiki
Suche search search
Werkzeuge tools tools
Druckversion Printable version Printable version
Andere Sprachen languages
English German

Die Standard-Variante ist zu erreichen über:
https://[wiki-domain]/index.php/MediaWiki:Sidebar

<!-- Salzwiki -->
*navigation
**Mainpage|Startseite
<del>**Salzwiki:Portal|SalzWiki:Portal</del>
<!--**Informationen zum DFG-Projekt|SalzWiki-Portal-->
<!--**Aktuelles|Aktuelles-->
Special:BibManager_Overview|Bibliographie
**Glossar|Glossar
<!--**Autorenanmeldung|Autorenanmedlung-->
**Redaktion SalzWiki|Redaktion
**Autoren/innen_von_SalzWiki|Autor/inn/en
**recentchanges-url|Recentchanges
**special:contact|Kontakt
**Hilfe:Contents/de|Hilfe

*SEARCH
<!--*Umfrage-->
<!--**http://www.worktogether51.net/gc/wsl.php?I=Y4TTY7YTOTTYT47TTUTTBT4NTTYT4BT40 |Ihre Meinung zu SalzWiki-->

*TOOLBOX

*andere Sprachen
**https://www.saltwiki.net/|English
<-- Repositorium -->
*Navigation 
**Hauptseite|Home

*Other Wikis
**https://www.salzwiki.de/|SalzWiki
**https://www.saltwiki.net/|SaltWiki
<-- Saltwiki -->
* navigation
** mainpage|Home
<!--** portal-url|SaltWiki-Portal-->
<!--** About_the_project|SaltWiki Portal-->
<!--** News|News-->
** Special:BibManager_Overview|Bibliography|Literature
** Glossary|Glossary
** Editorial Board|Editorial Board
** Authors in SaltWiki|Authors
** Special:Contact|Contact
** Help:Contents|Help

* SEARCH

* TOOLBOX

*Languages
**https://www.salzwiki.de/|German
Navigation links Autor-Variante[Bearbeiten]

Sichtbare Menüpunkte ohne JavaScript:

SalzWiki SaltWiki Repository
Navigation Navigation Navigation
Startseite Home Home
News
Repositorium Repository Projects
Communication
Publication
Bibliographie Bibliography Bibliography
Glossar Glossary Glossary
Redaktion Editorial Board
Autor/inn/en Authors Authors' Contents
Letzte Änderungen Recent changes Recent changes
Kontakt Contact Contact
Hilfe Help Help
Autor/inn/en-Seiten author pages author pages
Richtlinien/Übersichten Guidelines
Nutzungsrechte Rights Rights
Review Review
Kategorienbaum Category tree Category tree
Vorlagen Templates Templates
other wikis
SalzWiki
SaltWiki
Suche search search
Werkzeuge tools tools
Links auf diese Seite What links here What links here
Änderungen an verlinkten Seiten Related changes Related changes
Datei hochladen Upload file Upload file
Spezialseiten Special pages Special pages
Druckversion Printable version Printable version
Permanenter Link Permanent link Permanent link
Seiteninformationen Page information Page information
Andere Sprachen Languages
English German

Die Autor-Variante muss durch Erstellung einer neuen Seite (Adminrechte erforderlich) erfolgen:

  • Erst folgende Adresse im Browser eingeben:
    https://[wiki-domain]/index.php/MediaWiki:Autor_sidebar
  • Danach mit Karteikarte "Erstellen" folgenden Quelltext eingeben:
<!-- Salzwiki -->
*Navigation
**Mainpage|Startseite
<del>**SalzWiki:Portal|SalzWiki:Portal</del>
<!--**Informationen zum DFG-Projekt|SalzWiki-Portal-->
<!--**Aktuelles|Aktuelles-->
<!--**http://193.175.110.91/repository/index.php/Main_Page |Repositorium-->
**https://repository.hawk-hhg.de/ |Repositorium
**Spezial:Bibliographieeinträge_verwalten|Bibliographie
**Glossar|Glossar
**Redaktion_SalzWiki|Redaktion
**Autoren/innen von SalzWiki|Autor/inn/en
**recentchanges-url|recentchanges
**special:contact|Kontakt
**help:contents/de|help
<!--
*Umfrage
**http://www.worktogether51.net/gc/wsl.php?I=Y4TTY7YTOTTYT47TTUTTBT4NTTYT4BT40ON84RMK758E |Ihre Meinung als Autor zu SalzWiki 
**http://www.worktogether51.net/gc/wsl.php?I=Y4TTY7YTOTTYT47TTUTTBT4NTTYT4BT40 |Ihre Meinung als Nutzer zu SalzWiki -->

* Autor/inn/en-Seiten
**Autoren|Richtlinien/Übersichten
**Nutzungsrechte|Nutzungsrechte
**Review|Review
**Kategorie|Kategorienbaum
**Vorlagen|Vorlagen
<!--**sandkasten|Sandbox-->

*SEARCH

*TOOLBOX

*Andere Sprachen
**https://www.saltwiki.net/ |English


<-- Saltwiki -->
*Navigation
**Mainpage|Home
<!--**Saltwiki:Community_portal|SaltWiki:Portal-->
<!--**About_the_Project|SaltWiki Portal-->
<!--**News|News-->
<!--**http://193.175.110.91/repository/index.php/Main_Page |Repository-->
**https://repository.hawk-hhg.de/ |Repository
**Special:BibManager_Overview|Bibliography
**Glossary|Glossary
**Editorial_Board|Editorial Board
**Authors in Saltwiki|Authors
**recentchanges-url|recentchanges 
**Special:Contact|Contact
**Help:Contents|Help
<!--**Helppage|help-->

* Author Pages
**Authors_Page|Guidelines
**Rights|Rights
**Review|Review
**categories|Category tree
**Templates|Templates
<!--**sandbox|Sandbox-->

*SEARCH

*TOOLBOX

*Languages
**https://www.salzwiki.de/ |German


<-- Repositorium -->
*Navigation
<!--*Research Environment-->
**Mainpage|Home
<!--**Repository Portal|Repository Portal-->
**News|News
**Projekte|Projects
**Communication|Communication
**Publications|Publication

* 
**Special:BibManager_Overview|Bibliography
**terminology|Glossary
**Category:Author|Authors' Contents
**recentchanges-url|Recent changes
**Special:Contact|Contact
**Help:Contents|Help

* author pages
**Rights|Rights
**Kategorienbaum|Category tree

* other wikis
**Vorlagen|Templates
**https://www.salzwiki.de/ |SalzWiki
**https://www.saltwiki.net/ |SaltWiki

*SEARCH

*TOOLBOX

*LANGUAGES

Navigationsbereich mit Einschränkungen versehen[Bearbeiten]

Um die linke Navigationsleiste abhängig von der Gruppenzugehörigkeit in der Menüauswahl zu beschränken werden folgende "Hooks" statt Änderungen am Wiki-Code verwendet:

Änderungen am Wiki-Code der Datei "Skin.php" für die zu verwendende Sidebar-Variante sind nicht mehr erforderlich, da mit dem "Hook" die Auswahl für die Menü-Variante je nach Gruppenzugehörigkeit festgelegt werden kann. Die Datei "Skin.php" befindet sich in folgendem Verzeichnis:

  • MW1.31: "[wikiname]\includes\skins\Skin.php"
  • MW1.23: "[wikiname]\includes\Skin.php" ohne Unterverzeichnis "skins\".

Änderungen am Wiki-Code der Datei "skins\MonoBook\MonoBookTemplate.php" für den Umfang der Werkzeuge sind nicht mehr erforderlich, da mit dem "Hook" die Einschränkungen bei den Werkzeugen je nach Gruppenzugehörigkeit festgelegt werden können.

Sidebar-Einschränkung[Bearbeiten]

Mit den nachfolgend beschriebenen Änderungen gibt es zwei Sidebar-Varianten (Menü-Varianten links). Welche Variante angezeigt wird, richtet sich dabei nach der Gruppen-Zugehörigkeit.

Bei MW1.31/1.27/1.23/1.16 können die Änderungen mit einem "Hook" in der Datei "LocalSettings.php" vorgenommen werden und sind für alle Layouts ("Skins") gültig; allerdings wurde bei den Wikis mit MW1.16 der Wiki-Code in der Datei "Skin.php" des jeweiligen Layouts angepasst, was sich nur auf den jeweiligen "Skin" auswirkte.

Sidebar-Anpassungen mit "Hook"[Bearbeiten]

Der "Hook" für die Auswahl der Sidebar-Variante heißt "SkinBuildSidebar" und steht seit MW1.14 zur Verfügung.

In der Datei "LocalSettings.php" wird oberhalb der Anpassungen für die "Toolbox" (Werkzeuge) folgender Code eingefügt:

#### Beginn SIDEBAR je nach Gruppenzugehörigkeit
$wgHooks['SkinBuildSidebar'] = 'groupspecificSidebar';
function groupspecificSidebar( $skin, &$sidebar ) {
  global $wgUser;
  $groups = $wgUser->getEffectiveGroups();
  $sidebar = array();
  if (in_array("autor", $groups) || in_array("Administrator", $groups) || in_array("forschung", $groups)) {
    $skin->addToSidebar($sidebar, 'autor_sidebar');
  }
  else{
    $skin->addToSidebar($sidebar, 'sidebar');
  }
  return true;
};
#### Ende SIDEBAR je nach Gruppenzugehörigkeit

Sidebar-Anpassungen ohne "Hook" (Wiki-Code)[Bearbeiten]

ACHTUNG: Wenn Mediawiki aktualisiert wird, muss die Änderung in der Datei "Skin.php" wieder eingefügt werden, um die Funktionalität zu erhalten! Deshalb ist von der geänderten Datei "Skin.php" zusätzlich eine Kopie "Skin_SW.php" im Verzeichnis "includes" zu speichern.

Bei MW 1.31 wird nicht mehr die globale Variable "$wgUser" in der Datei "\includes\skins\Skin.php" - dies war bei MW 1.23 die Datei "\includes\Skin.php" - in der Funktion "function buildSidebar()" in der zweiten Zeile hinzugefügt, um später die Gruppenrechte abfragen zu können, weil $wgUser bereits bei MW1.27 als veraltet galt.

Außerdem erzeugt die bei MW1.27 verwendete Verschachtelung "...->getUser(User::getEffectiveGroups())" einen Fehler. Es kann jedoch auf "user" einfacher zugegriffen werden.

MW 1.31.1[Bearbeiten]

Nach der Zeile mit "$bar = [];" (MW1.31 Z.1260) folgende Zeile auskommentieren:

// new for HAWK HHG 2018-18-29
#$this->addToSidebar( $bar, 'sidebar' );

und folgenden Code für 2 Sidebar-Varianten einfügen:

  $user = $this->getUser();
  $groups = $user->getEffectiveGroups();
  ## add here admin support
  if (in_array("autor", $groups) || in_array("Administrators", $groups) || in_array("forschung", $groups)) {
    $this->addToSidebar( $bar, 'autor_sidebar' );
  } else {
    $this->addToSidebar( $bar, 'sidebar' );
  }

Eventuell zusätzlich in der Funktion "addToSidebarPlain(...)", Z.1325, folgende Zeile auskommentieren:

$lines = explode( "\n", &text );
MW 1.27.4[Bearbeiten]

Die Variable $wgUser gilt als "deprecated" und soll nicht mehr verwendet werden, siehe https://www.mediawiki.org/wiki/Manual:$wgUser.

Stattdessen soll das User-Objekt verwendet werden, siehe

Die Klassenmethode "$wgUser->getEffectiveGroups();" muss ersetzt werden durch eine Objektinstanz von "RequestContext" und deren Methode "...->getUser(User::getEffectiveGroups())".

<!--MW1.27 Z.1188-->
global $wgEnableSidebarCache, $wgSidebarCacheExpiry, $wgUser;

Nach der Zeile mit "$bar = [];" (MW1.27 Z.1192) folgende Zeile auskommentieren:

#$this->addToSidebar( $bar, 'sidebar' );

und folgenden Code einfügen:

  #$groups = $wgUser->getEffectiveGroups(); // erzeugt Fehler: Exception encounterd, of type "Error"
  $context = new RequestContext();
  $groups = $context->getUser(User::getEffectiveGroups());
  ## add here admin support
  if (in_array("autor", $groups) || in_array("Administrators", $groups) || in_array("forschung", $groups)) {
    $this->addToSidebar( $bar, 'autor_sidebar' );
  } else {
    $this->addToSidebar( $bar, 'sidebar' );
  }

Eventuell zusätzlich folgende Zeile in der Funktioin "addToSidebarPlain(...)" auskommentieren:

$lines = explode( "\n", $text );
MW 1.23.11[Bearbeiten]
<!--MW1.23 Z.1249-->
global $wgMemc, $wgEnableSidebarCache, $wgSidebarCacheExpiry, $wgUser;

Nach der Zeile mit "$bar = array();" (MW1.23 Z.1263, MW1.16 Z.2085) folgende Zeile auskommentieren:

#$this->addToSidebar( $bar, 'sidebar' );

und folgenden Code einfügen:

  $groups = $wgUser->getEffectiveGroups();
  ## add here admin support
  if (in_array("autor", $groups) || in_array("Administrators", $groups) || in_array("forschung", $groups)) {
    //$lines = explode( "\n", wfMsgForContent( 'autor_sidebar' ) );
    $this->addToSidebar( $bar, 'autor_sidebar' );
  } else {
    //$lines = explode( "\n", wfMsgForContent( 'sidebar' ) );
    $this->addToSidebar( $bar, 'sidebar' );
  }

Eventuell zusätzlich die Zeile "$lines = explode( "\n", $text );" auskommentieren. In MW1.16 musste die Zeile "$lines = explode( "\n", wfMsgForContent( 'sidebar' ) );" auskommentiert oder gelöscht werden.

Sollte es danach PHP-Warnungen wie "Warning: Call-time pass-by-reference has been deprecated ..." geben, gibt es folgende vorübergehende Notlösung: In der Datei "php.ini" in Zeile 165 "allow_call_time_pass_reference = On" statt "Off" setzen. Diese Möglichkeit gilt als veraltet und wird in Zukunft nicht mehr von PHP unterstützt werden, so dass der oben beschriebene Code der Funktion dann geändert werden muss!

Werkzeuge/Toolbox[Bearbeiten]

Standardmäßig – und somit für nicht angemeldete Gäste sowie einfache Konten – steht nur "Druckversion" bzw. "Printable version" zur Verfügung. Die gesamte Werkzeug-Auswahl steht folgenden Gruppen zur Verfügung:

  • Administrator
  • autor
  • Editor
  • forschung

Die bei MW1.16 durchgeführten Änderungen an der Datei "skins\MonoBook\MonoBookTemplate.php" sind bei MW1.31/1.27/1.23 nicht mehr erforderlich, da mit einem "Hook" namens "BaseTemplateToolbox" die Einschränkungen bei den Werkzeugen je nach Gruppenzugehörigkeit in der Datei "LocalSettings.php festgelegt werden können.

Anpassungen mittels "Hook" in der Datei "LocalSettings.php" wirken sich auf alle "Skins" aus, wohingegen sich Anpassungen in der Datei "MonoBookTemplate.php" nur auf das Layout "MonoBook" auswirken, wenn nicht in der Datei "[wikiname]\includes\skins\SkinTemplate.php" Änderungen entsprechend denen für die Spezialseiten erfolgen.

Werkzeuge-Anpassung mit "Hook"[Bearbeiten]

Der verwendete "Hook" für den Umfang der zur Verfügung stehenden Werkzeuge heißt "BaseTemplateToolbox" und steht seit MW1.18 zur Verfügung.

In der Datei " in LocalSettings.php" ist folgender Code einzufügen:

#### Beginn TOOLBOX je nach Gruppenzugehörigkeit nur 'print' oder alles
$wgHooks['BaseTemplateToolbox'][] = 'groupspecificToolbox';
function groupspecificToolbox( BaseTemplate $baseTemplate, array &$toolbox ) {
  global $wgUser;
  $groups = $wgUser->getEffectiveGroups();
  if (!in_array("autor", $groups) && !in_array("Administrator", $groups)
   && !in_array("Editor", $groups) && !in_array("Redakteur", $groups) && !in_array("forschung", $groups)) {
    foreach($toolbox as $k => $v_array){
      if($k!=="print" && isset($toolbox[$k])){
        unset($toolbox[$k]);
      }
    }
  }
  return true;
}
#### Ende TOOLBOX je nach Gruppenzugehörigkeit nur 'print' oder alles

Werkzeuge-Anpassungen ohne "Hook" (Wiki-Code)[Bearbeiten]

MW1.31 MonoBookTemplate.php[Bearbeiten]

Die in früheren MW-Versionen angepasste Funktion "toolbox()" in der Datei "skins/MonoBook.php" existiert nicht mehr. Stattdessen gibt es eine Funktion "getToolboxBox()" in der Datei "skins\MonoBook\includes\MonoBookTemplate.php" in Z.222.

Die in MW1.23 verwendete Funktion "getListItem()" befindet sich bei MW1.31 in der Datei "...\includes\skins\BaseTemplate.php". Diese enthält auch die Funktion "getToolBox()", die von "MonoBookTemplate.php" verwendet wird.

Von "MonoBookTemplate.php" für die "Toolbox" verwendete Funktionen:

  • getRenderedSidebar Z.160f verwendet "getToolboxBox()"
  • getToolboxBox() Z.226 verwendet "getBox(..., $this->getToolBox(), ...)" und Z.231 "deprecatedHookHack(...)"
  • getBox() Z.292 verwendet "getPortlet()"
  • getPortlet() Z.355ff $this->makeListItem
  • deprecatedHookHack()

In der Funktion "getToolboxBox(...)" werden die einzelnen Werkzeug-Menüpunkte mit "$this->getToolbox()" gesammelt und in der Funktion "getPortlet(...)als Variable $content[$key]=$item in Z.355 weiterverarbeitet. Um die eingeschränkte Verfügbarkeit für bestimmte Gruppen zu ermöglichen, müssen die Elemente vor der Übergabe ausgefiltert werden:

protected function getToolboxBox(){
  $html = '';
  $skin = $this;
  // für HAWK HHG Verfügbarkeit für die Gruppen autor, Administrator und forschung, sonst nur Werkzeug "Druckversion", 2018-10-29
  $user = $this->getSkin()->getUser();
  $groups = $user->getEffectiveGroups();
  $tools_normal = $this->getToolbox();
  // all Tools
  if (in_array("autor", $groups) || in_array("Adminstrator", $groups) in_array("forschung", $groups) ) {
    $tools_sw = $tools_normal;
  }
  // only printing
  else{
    $tools_sw['print'] = $tools_normal['print'];
  }
  $html .= $this->getBox( 'tb', $tools_sw, 'toolbox', [ 'hooks' => [
    // Deprecated hooks
    'MonoBookTemplateToolboxEnd' => [ &$skin ],
    'SkinTemplateToolboxEnd' => [ &$skin, true ]
  );
  #$html .= $this->getBox( 'tb', $this->getToolbox(), 'toolbox', [ 'hooks' => [
  #  // Deprecated hooks
  #  'MonoBookTemplateToolboxEnd' => [ &$skin ],
  #  'SkinTemplateToolboxEnd' => [ &$skin, true ]
  #);
}
MW 1.23 MonoBook.php[Bearbeiten]

Die Sidebar im Bereich "Werkzeuge" wird mit einem Eingriff in den Wiki-Code bei "skins/MonoBook.php" für alle Gruppen außer "autor", "admin" und "forschung" manipuliert. Hierzu wird in der Funktion "toolbox()" Z.254ff die Variable "global $wgUser;" eingefügt und bei "foreach" die Z.262 bei "$this->makeListItem" mit einer Bedingung versehen:

function toolbox();
  global $wgUser; // Für HAWK HHG
  $groups = $wgUser->getEffecitveGroups(); // Für HAWK HHG
  ...
  foreach ( $this->getToolbox() as $key => $tbitem ) {
    // Für HAWK HHG: Alle Werkzeuge für die Gruppen autor, Administrators und forschung, sonst nur Werkzeug "Druckversion"
    if(in_array("autor", $groups) || in_array("Administrators", $groups) || in_array("forschung", $groups) || $key==="print"){
      <?php echo $this->makeListItem( $key, $tbitem); ?>
    }
  }

Achtung: Code-Anpassung muss in "skins/MonoBook.php" nach jedem mediawiki-Update auf Vorhandensein und Funktion überprüft werden!

Werkzeuge-Schlüsselwörter[Bearbeiten]

  • Links auf diese Seite: key = whatlinkshere
  • Änderungen an verlinkten Seiten: key = recentchangeslinked
  • Datei hochladen: key = upload
  • Spezialseiten: key = specialpages
  • Druckversion: key = print
  • Permanenter Link: key = permalink
  • Seiteninformationen: key = info

sichtbare Toolbox-Menüpunkte[Bearbeiten]

  • SalzWiki, Repositorium: alle Gruppen und User
    • Druckversion
  • SaltWiki: alle Gruppen und User
    • Printable version

ausgeblendete Toolbox-Menüpunkte[Bearbeiten]

  • SalzWiki: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
    • "Links auf diese Seite" (Special:WhatLinksHere/Main_Page)
    • "Änderungen an verlinkten Seiten" (Spezial:%C3%84nderungen_an_verlinkten_Seiten)
    • "Hochladen" (Special:Upload)
    • "Spezialseiten" (Special:SpecialPages)
    • "Permanenter Link" (Main_page&oldid=921)
    • "Seiteninformationen" ([Seitentitel]&action=info])
  • SaltWiki: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
    • "What links here" (Special:WhatLinksHere/Main_Page)
    • "Related changes" (Special:RecentChangesLinked)
    • "Hochladen" (Special:Upload)
    • "Spezialseiten" (Special:SpecialPages)
    • "Permanent link" (Main_page&oldid=921)
    • "Page information" ([Seitentitel]&action=info])
  • Repository: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
    • "Links auf diese Seite" (Special:WhatLinksHere/Main_Page)
    • "Änderungen an verlinkten Seiten" (Spezial:%C3%84nderungen_an_verlinkten_Seiten)
    • "Datei Hochladen" (Special:Upload)
    • "Spezialseiten" (Spezial:Spezialseiten)
    • "Permanent link" (Main_page&oldid=9522)
    • "Seiteninformationen" ([Seitentitel]&action=info])

Überschrift der Hauptseite/Mainpage ändern[Bearbeiten]

Die Überschrift ist auf der Systemseite "Mediawiki:Mainpage" eingetragen und muss dort geändert werden. Die Überschrift, die per Voreinstellung Main Page (Hauptseite in der deutschen Übersetzung) heißt, ist in die entsprechende Titelzeile zu ändern.

Repositorium-Dateien im SalzWiki[Bearbeiten]

Für das wiki-übergreifende Hochladen und Anzeigen von Media-Dateien sind in der Datei "LocalSettings.php" folgende Variablen anzupassen:

  • $wgUseImageResize
  • $wgUploadNavigationUrl
  • $wgSharedUploadPath
  • $wgRepositoryBaseUrl
Logo Wiki-Header-Leiste
Datei Diskussion auf einem gemeinsam genutzten Medienarchiv ansehen $wgRepositoryBaseUrl
Navigation


Suche

Werkzeuge
 Datei hochladen
 $wgUploadNavigatonUrl

Abschnitt "Datei"
  • bei vorhandener Quelle:
    • für Vorschaubilder in SalzWiki/SaltWiki: $wgUseImageResize = false;
    • Datei-Verweis: $wgSharedUploadPath
    • Dateibeschreibungsseite-Verweis: $wgRepositoryBaseUrl
  • bei nicht gefundener Quelle
    • moved-Verweis: $wgRepositoryBaseUrl
Abschnitte aus anderem Wiki mittels $wgRepositoryBaseUrl
  • "Metadaten"
  • "Summary"
  • "Licensing" aus Vorlage im anderen Wiki mit relativem Pfad im Verweis für Icons
Abschnitt "Dateiversionen" mit Verweis zu "Version vom": $wgSharedUploadPath
Abschnitt "Dateiverwendung" mit Datei-Verweis: $wgRepositoryBaseUrl
Wiki-Footer-Leiste

Hochladen von Dateien[Bearbeiten]

Das Hochladen von Dateien geschieht immer in das Repositorium. Hierfür sind Anpassungen in der Konfigurationsdatei erforderlich.

Konfigurationsdatei anpassen[Bearbeiten]

Für das Hochladen ins Repositorium über "Werkzeuge => Datei hochladen" bzw. "tools => Upload file" sind folgende Änderungen in der Datei "LocalSettings.php" des SalzWikis bzw. SaltWikis vorzunehmen, siehe auch https://www.mediawiki.org/wiki/Manual:$wgUploadNavigationUrl:

## für $wgUploadNavigationUrl, $wgSharedUploadPath und $wgRepositoryBaseUrl
## bei Verwendung einer IP-Adresse statt Domain-Adresse
#$url_repository = "/repository/";
## bei Verwendung von Domain-Adresse statt IP-Adresse ohne Protokoll wg. Inhalten bei "https"
$url_repository = "repository.hawk-hhg.de/";
...
## relative IP-Adresse "..._draft"
#$wgUploadNavigationUrl = "/repository_draft/index.php/Special:Upload";
#$wgUploadNavigationUrl = $url_repository."index.php/Special:Upload";
## bei Verwendung von Domain-Adresse statt IP-Adresse mit Protokoll
$wgUploadNavigationUrl = $protokoll."://".$url_repository."index.php/Special:Upload";
$wgEnableUploads = false;  ##damit kein Upload in SalzWiki bzw. SaltWiki möglich ist

Zudem sind folgende Änderungen in der Datei "LocalSettings.php" des Repositoriums vorzunehmen:

$wgEnableUploads = true;
## Erlaubte Dateitypen
$wgFileExtensions = array('avi','bib','doc','docx','gif','jpeg','jpg','mov','mpeg','odt','ods','oga','ogg','ogv',
'pdf','png','svg','tif','tiff','txt','xls','xlsx','xml');
Text der Upload-Spezialseite[Bearbeiten]

Es gibt folgende MW-Seiten für den Text der Seite "Special:Upload":

  • MediaWiki:Uploadtext (Standard "en")
  • MediaWiki:Uploadtext/de
  • MediaWiki:Uploadtext/de-formal
  • MediaWiki:Uploadtext/[Sprachenkürzel] (andere Sprachen)

In den Textdefinitionen unter "...\[wikiname]\languages\i18n\" gibt es ebenfalls Texte für die Uploadseite, welche scheinbar nicht verwendet werden; diese Texte befinden sich in den json-Dateien im Element "uploadtext":

  • en.json Z.1286
  • de.json Z.1290
  • de-formal.json Z.176

Übergreifende Darstellung[Bearbeiten]

Für den Zugriff vom SalzWiki bzw. SaltWiki auf Dateien und deren Seiten im Repositorium mittels "http" bzw. "https" durch anonyme User sind Anpassungen wie nachfolgend beschrieben erforderlich.

Da alle Dateien wie z.B Fotos mit den dazugehörigen Metadaten und Lizenzhinweisen im Repositorium liegen, muss vom SalzWiki aus der Zugriff nicht nur auf die Dateien, sondern auch auf die dazugehörigen Metadaten und Lizenzhinweise erfolgen.

Bei Seiten-Aufrufen mit https wird die Seite aus dem Repositorium mit den Metadaten, der Zusammenfassung und den Lizenzhinweisen ignoriert.

Anzupassende Dateien:

  • Konfigurationsdatei "LocalSettings.php" des SalzWikis bzw. SaltWikis
  • PHP-Konfigurationsdatei "php.ini"
Wiki-Konfigurationsdatei[Bearbeiten]

Findet das Salzwiki eine Datei oder ein Bild nicht im eigenen Wiki, schaut es mit Hilfe von Shared-Einstellungen automatisch im Repositorium nach und sucht dort. Wird auf ein englischsprachiges Repositorium verwiesen, ist in der Wiki-Konfigurationsdatei "Datei:" durch "File:" zu ersetzen, damit die Metadaten ausgelesen werden können.

Zusammenhang zwischen Variablen und Darstellung[Bearbeiten]
  • $wgSharedUploadPath
    • Abschnitt "Datei": Verweis zur Datei
  • $wgRepositoryBaseUrl
    • Karteikartenreiter "Auf einem gemeinsam genutzten Medienarchiv ansehen" bzw. "View on a shared repository"
    • Abschnitt "Datei": Verweis zur Dateibeschreibungsseite, anderenfalls Verweis "moved"
    • Abschnitt "Dateiversionen": Verweis zur "Version vom"
    • Abschnitt "Dateiverwendung": Verweis zur Ursprungsdatei der erzeugten Duplikatdatei
    • Zusätzliche Inhalte (Metadata, Summary, Licencing) der Datei-Seite im Repositorium benötigen "http" als Base-URL-Protokoll
Anpassungen in der Konfigurationsdatei[Bearbeiten]

Siehe auch https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos.

$wgLocalInterwikis = array("salzwiki", "saltwiki", "repository"); # MW1.31
...
## Zugriff auf das Repositorium
$wgFetchCommonsDescriptions  = true;
## für $wgUploadNavigationUrl, $wgSharedUploadPath und $wgRepositoryBaseUrl
## bei Verwendung von IP-Adresse statt Domain-Adresse
#$url_repository = "/repository/";
## bei Verwendung von Domain-Adresse statt IP-Adresse ohne Protokoll wg. Inhalten bei "https"
$url_repository = "repository.hawk-hhg.de/";
...
## shared uploads: Das Laden der Daten erfolgt immer aus dem Repositorium
## Damit automatisch im Repository nach "Dateien" gesucht wird:
$wgUseSharedUploads = true;
## bei Verwendung von IP-Adresse statt Domain-Adresse
#$wgSharedUploadPath = "/repository/images";
#$wgSharedUploadPath = $url_repository."images";
## bei Verwendung von Domain-Adresse statt IP-Adresse mit Protokoll
$wgSharedUploadPath = $protokoll."://".$url_repository."images";
$wgSharedUploadDirectory = "D:/noxampp/htdocs/repository/images";
$wgHashedSharedUploadDirectory = true;
$wgSharedUploadDBname = "repository";
$wgSharedUploadDBprefix  = "sr_";
$wgSharedDBuser = "SW_repo";
$wgSharedDBpassword = "SWrepo_02";
## IP-Adresse mit Protokoll "http" wg. fehlendem Serverzertifikat
#$wgRepositoryBaseUrl = 'http://193.175.110.91/repository/index.php/Datei:';  
#$wgRepositoryBaseUrl = 'http://'.$_SERVER['SERVER_NAME'].'/repository/index.php/File:';
#$wgRepositoryBaseUrl = 'http://'.$_SERVER['SERVER_ADDR'].'/repository/index.php/File:';
## Domain-Adresse mit Protokoll "http" bei "https"-Aufruf wg. Seiteninhalten mit CC-Icons u. Ä., 2018-02-06
#$wgRepositoryBaseUrl = "http://".$url_repository."index.php/Datei:";
$wgRepositoryBaseUrl = "http://".$url_repository."index.php/File:";
## Verwendung der Klasse ForeignDBRepo
$wgForeignFileRepos[] = array(
 'class' => 'ForeignDBRepo',
 'name' => 'repository',
 'url' => $wgSharedUploadPath,
 'directory' => $wgSharedUploadDirectory,
 'hashLevels' => 2, // This must be the same for the other family member
 'dbType' => $wgDBtype,
 'dbServer' => $wgDBserver,
 'dbUser' => $wgSharedDBuser,
 'dbPassword' => $wgSharedDBpassword,
 'dbFlags' => DBO_DEFAULT,
 'dbName' => $wgSharedUploadDBname,
 'tablePrefix' => $wgSharedUploadDBprefix,
 'hasSharedCache' => false,
 'descBaseUrl' => $wgRepositoryBaseUrl,
 'fetchDescription' => $wgFetchCommonsDescriptions
);
PHP-Konfigurationsdatei[Bearbeiten]

Die Funktion "fopen()" muss ausgeführt werden können, um Beschreibungsdaten wie Metadaten und Zusammenfassungen sowie Lizenzhinweise vom Repositorium zu holen. Hierfür muss in der PHP-Konfigurationsdatei "php.ini" in Zeile 523 folgende Einstellung vorhanden sein:

allow_url_fopen = On
Grafiken für Lizenz[Bearbeiten]

Die Grafiken für die CC-Lizenz werden im Repositorium in der Vorlage "CC-by-nc-nd" verwendet und haben eine interne Adresse. Diese Lizenz-Grafiken werden bei Aufrufen mit "http" und "https" nur im Repositorium, aber nicht im SalzWiki bzw. SaltWiki angezeigt, wenn das Repositorium mit einer Domain-Adresse statt mit einer IP-Adresse konfiguriert ist. Ein Änderung in der Interwiki-Tabelle von "ja" zu "nein" bei "lokales Wiki" bewirkt nichts.

Für Seiten im SalzWiki und SaltWiki, die Media-Dateien des Repositoriums verwenden, sind für http-/https-Aufrufe deshalb folgende Unterverzeichnisse und Dateien aus dem Repositorium in die beiden anderen Wikis zu kopieren:

  • [wikiverzeichnis]\images\thumb\
    • 0\07\Pict-nd.png\30px-Pict-nd.png
    • 1\1f\Pict-nc.png\30px-Pict-nc.png
    • d\d6\Pict-by.png\30px-Pict-by.png

MediaWiki-Datei anpassen entfällt (Wiki-Code)[Bearbeiten]

Die nachfolgend beschriebene Vorgehensweise erlaubt es, auf ein für den normalen User gesperrtes Wiki wie das Repositorium zuzugreifen und die Metadaten der Abbildungen/Dateien auszulesen und in SalzWiki wiederzugeben. Nach jedem mediawiki-Update muss die Datei "includes/http/CurlHttpRequest.php" "includes/httpFunctions.php" auf Änderungen überprüft werden!

Mit den Wiki-Code-Anpassungen und der MW-Erweiterung "Snoopy" werden hauptsächlich Anpassungen gemacht, die den Text zurückgeben, sowie an der Abarbeitung von Fehlern. Beispielsweise wurde für das korrekte Bearbeiten von Sonderzeichen in der URL die Funktion "rawurldecode()" hinzugefügt.

  • Die Datei "CurlHttpRequest.php" im Verzeichnis "\includes\http\" von SalzWiki modifizieren für die Erweiterung "Snoopy". Für die "Snoopy"-Wiki-Code-Änderungen siehe auch https://phabricator.wikimedia.org/T27563. Dazu wird von der Datei eine Kopie "CurlHttpRequest_original.php" gespeichert; danach wird der Code angepasst.
  • Die geänderte Datei "http/CurlHttpRequest.php" als Sicherung für Mediawiki-Updates kopieren und speichern als "http/CurlHttpRequest_SW.php".
Voraussetzungen[Bearbeiten]

Folgende Module bzw. Erweiterungen sind erforderlich:

  • MW-Erweiterung "Snoopy"
  • PHP-Modul "curl"
"Snoopy-2.0.0" entfällt[Bearbeiten]

Die Erweiterung "Snoopy" wird aus folgenden Gründen nicht mehr verwendet:

  • sie wurde lange nicht mehr aktualisiert und funktioniert deshalb nicht mehr
  • der Code ist qualitativ inakzeptabel, siehe https://phabricator.wikimedia.org/T27563, Kommentar von "Catrope", 2011-11-20 1:21 PM, untere Mitte der Seite

Verwendung von "Snoopy":

  • von "https://sourceforge.net/projects/snoopy/" herunterladen
  • zip-Dateien auspacken und die Dateien der Erweiterung in das Verzeichnis "extensions" des SalzWikis bzw. Saltwikis kopieren
  • in der Datei "LocalSettings.php" die Erweiterung einbinden
"Curl"[Bearbeiten]

Das PHP-Modul "curl" muss beim Apache-Webserver aktiviert sein; hierfür muss in der Datei "D:\noxampp\php\php.ini" die folgende Zeile aktiv eingebunden sein:

extension=php_curl.dll

Sofern in der ini-Datei eine Änderung erfolgt, ist danach der Apache-Dienst neu zu starten, damit die Änderungen wirksam werden.

Hinweise zur Zugriffssperre[Bearbeiten]

Der Zugriff auf das Repositorium wird gesperrt durch folgenden Eintrag in der Datei "LocalSettings.php" des Repositoriums:

$wgGroupPermissions['*']['read'] = false;

Um den Zugriff auf das geschützte Repositorium durchführen zu können, ist folgende Konfiguration der Datei "LocalSettings.php" des Salzwikis bzw. Saltwikis vorzunehmen, bei der die Variablen von der MW-Erweiterung "Snoopy" verwendet werden:

#$wgAuthenticatedRepository = true;
#$wgAuthenticatedRepositoryUser = 'WikiSysop';
#$wgAuthenticatedRepositoryPassword = 'xxx';
#$wgShowAuthenticatedRepositoryError = false;
  • $wgAuthenticatedRepository: aktiviert den Zugriff auf ein gesichertes Repository. Wenn dies nicht notwendig ist, bitte abstellen, da die Funktion zusätzliche Abfragen schickt, was die Zugriffe bei hoher Last verlangsamen kann.
  • $wgShowAuthenticatedRepositoryError: Gibt Fehlermeldungen in die Log Dateien. Für den Produktiveinsatz bitte abstellen.
MediaWiki-Version 1.31 entfällt[Bearbeiten]

In der Datei "CurlHttpRequest.php" in der Funktion "execute()" ab Z.121ff die Zugriffsberechtigung anpassen.

--- CurlHttpRequest.php	2010-06-09 05:49:34.000000000 +0200
+++ CurlHttpRequest_SW.php	2019-01-08
@@ -121,11 +121,97 @@
-	$curlRes = curl_exec( $curlHandle );
-	if ( curl_errno ($curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
-		$this->status->fatal( 'http_timed_out', $this->url );
-	} elseif ($curlRes === false ) {
-		$this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
-	} else {
-		$this->headerList = explode( "\r\n", $this->headerText );
-	}
-
-	curl_close( $curlHandle );
-
+	//  Neuer Code für "Snoopy" ungeprüft bei MW1.31 übernommen von MW1.23/1.16
+	//  START:
+	//  Add code to access restricted repositories. 
+	//  Add the following line in the LocalSettings.php 		 
+	// 		$wgAuthenticatedRepository = true;
+	// 		$wgAuthenticatedRepositoryUser = 'WikiSysop';
+	// 		$wgAuthenticatedRepositoryPassword = 'dev2010wer';
+	// 		$wgShowAuthenticatedRepositoryError = true;
+	//
+
+    global $wgAuthenticatedRepository, $wgAuthenticatedRepositoryUser, $wgAuthenticatedRepositoryPassword, $wgShowAuthenticatedRepositoryError;
+    $error = true;
+    $text = '';
+    $token2 = array();
+
+	// run the code only if the user activate is in the LocalSettings.php
+    if ( $wgAuthenticatedRepository ) {
+      require_once 'extensions/Snoopy-1.2.4/Snoopy.class.php';
+      $index = '';
+      $login = '';
+      
+      // Get all relevat url informations
+      // URL: http://localhost/mediawiki/mediawiki-repository/index.php/File:MediawikiExampleImageFlower.jpg?action=render&uselang=en
+      $wikiPath = "";
+      if (!preg_match('/(.*)\/index.php\/(.*)\?(.*)/', $this->url, $matches)) {
+       echo "nicht gefunden";
+      } else {
+       $wikiPath = $matches[1];
+	// If the url contains special characters, when these characters must be convert
+  	$title = rawurldecode($matches[2]);
+      }
+      
+      $apiPath = "$wikiPath/api.php";
+      $indexPath = "$wikiPath/index.php";
+
+      $snoopy = new Snoopy;
+      // Start request to get an token
+      $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword, 'format' => 'php');
+      if(!$snoopy->submit($apiPath, $request_vars))
+      	$this->status->fatal("Snoopy error: {$snoopy->error}");
+      
+      // We're only really interested in the cookies
+      $snoopy->setcookies();
+      $token = unserialize($snoopy->results);
+      
+      // Use the Token to login
+      if ( $token['login']['result'] == 'NeedToken') { 
+    	  $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword,  'lgtoken' => $token['login']['token'], 'format' => 'php');
+    	  if(!$snoopy->submit($apiPath, $request_vars))
+   				$this->status->fatal("Snoopy error: {$snoopy->error}");
+    	  $token2 = unserialize($snoopy->results);
+      }
+      else if ( ($token['login']['result'] == 'NoName') ) {
+        wfDebug( __METHOD__ . ": Wrong or no User for wgAuthenticatedRepositoryUser in the LocalSetting. \n" );
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no User for <i>wgAuthenticatedRepositoryUser</i> in the LocalSetting.<br/>";
+      }
+            
+      // If the login was successful, get the Information from the File Description
+      if ( ($token2['login']['result'] == 'Success') or ($token['login']['result'] == 'Success') ) { 
+    	  $request_vars = array('action' => 'render', 'title'=> $title, 'lgtoken' => $token['login']['token'], 'format' => 'php');
+    	  if(!$snoopy->submit($indexPath, $request_vars))
+   				$this->status->fatal("Snoopy error: {$snoopy->error}");
+    	  $this->content = $snoopy->results;
+      }
+      else if ( ($token2['login']['result'] == 'WrongPass') or ($token2['login']['result'] == 'WrongPluginPass') or ($token2['login']['result'] == 'EmptyPass') ) {
+        wfDebug( __METHOD__ . ": Wrong or no Password for wgAuthenticatedRepositoryPassword in the LocalSetting." );
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no Password for <i>wgAuthenticatedRepositoryPassword</i> in the LocalSetting.<br/>";
+      }
+      else if ( ($token2['login']['result'] == 'NotExists') ) {
+        wfDebug( __METHOD__ . ": Wrong or no User for wgAuthenticatedRepositoryUser in the LocalSetting. \n" );
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no User for <i>wgAuthenticatedRepositoryUser</i> in the LocalSetting.<br/>";
+      }
+      $this->headerList = explode("\r\n", $this->headerText);      
+    }
+    else 
+    {    
+	//
+	//  START: Original Code - now in a if statement
+	//
+	$curlRes = curl_exec( $curlHandle );
+	if ( curl_errno ($curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
+		$this->status->fatal( 'http_timed_out', $this->url );
+	} elseif ($curlRes === false ) {
+		$this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
+	} else {
+		$this->headerList = explode( "\r\n", $this->headerText );
+	}
+
+	curl_close( $curlHandle );
+	//
+	//  END: Original Code - now in a if statement
+	//
+    }
+    //
+    //  END: Add code to access restricted repositories
+    //
+  
    if ($this->profiler ) {
      $this->profiler->scopedProfileOut( $profileSection );
    }    

    $this->parseHeader();
    $this->setStatus();

    return Status:wrap( $this->status) // TODO B/C; move this to callers;
  }
MediaWiki-Version 1.23[Bearbeiten]

Im Abschnitt "Extract host part" Z.129ff die Änderung für "https" einfügen.

In der Funktion "execute()" die Zugriffsberechtigung anpassen.

--- HttpFunctions.php	2010-06-09 05:49:34.000000000 +0200
+++ HttpFunctions_sw.php	2018-01-29
@@ -131,1 +131,1 @@
-		if ( preg_match( '!^http://([\w.-]+)[/:].*$!' ) ) {
+		if ( preg_match( '!^http://([\w.-]+)[/:].*$!' ) || preg_match( '!^https://([\w.-]+)[/:].*$!' ) ) {
@@ -790,11 +790,97 @@
-		$curlRes = curl_exec( $curlHandle );
-		if ( curl_errno ($curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
-			$this->status->fatal( 'http_timed_out', $this->url );
-		} elseif ($curlRes === false ) {
-			$this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
-		} else {
-			$this->headerList = explode( "\r\n", $this->headerText );
-		}
-
-		curl_close( $curlHandle );
-
+		/*  Neuer Code für "Snoopy" ungeprüft bei MW1.23 übernommen von MW1.16
+		 *  START:
+		 *  Add code to access restricted repositories. 
+		 *  Add the following line in the LocalSettings.php 		 
+		 * 		$wgAuthenticatedRepository = true;
+		 * 		$wgAuthenticatedRepositoryUser = 'WikiSysop';
+		 * 		$wgAuthenticatedRepositoryPassword = 'dev2010wer';
+		 * 		$wgShowAuthenticatedRepositoryError = true;
+		 */
+
+    global $wgAuthenticatedRepository, $wgAuthenticatedRepositoryUser, $wgAuthenticatedRepositoryPassword, $wgShowAuthenticatedRepositoryError;
+    $error = true;
+    $text = '';
+    $token2 = array();
+
+		/* run the code only if the user activate is in the LocalSettings.php*/
+    if ( $wgAuthenticatedRepository ) {
+      require_once 'extensions/Snoopy-1.2.4/Snoopy.class.php';
+      $index = '';
+      $login = '';
+      
+      /* Get all relevat url informations */
+      /* URL: http://localhost/mediawiki/mediawiki-repository/index.php/File:MediawikiExampleImageFlower.jpg?action=render&uselang=en */
+      $wikiPath = "";
+      if (!preg_match('/(.*)\/index.php\/(.*)\?(.*)/', $this->url, $matches)) {
+          echo "nicht gefunden";
+      } else {
+          $wikiPath = $matches[1];
+				  /* If the url contains special characters, when these characters must be convert */
+			  	$title = rawurldecode($matches[2]);
+      }
+      
+      $apiPath = "$wikiPath/api.php";
+      $indexPath = "$wikiPath/index.php";
+
+      $snoopy = new Snoopy;
+      /* Start request to get an token */
+      $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword, 'format' => 'php');
+      if(!$snoopy->submit($apiPath, $request_vars))
+      	$this->status->fatal("Snoopy error: {$snoopy->error}");
+      
+      // We're only really interested in the cookies
+      $snoopy->setcookies();
+      $token = unserialize($snoopy->results);
+      
+      /* Use the Token to login */
+      if ( $token['login']['result'] == 'NeedToken') { 
+    	  $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword,  'lgtoken' => $token['login']['token'], 'format' => 'php');
+    	  if(!$snoopy->submit($apiPath, $request_vars))
+   				$this->status->fatal("Snoopy error: {$snoopy->error}");
+    	  $token2 = unserialize($snoopy->results);
+      }
+      else if ( ($token['login']['result'] == 'NoName') ) {
+        wfDebug( __METHOD__ . ": Wrong or no User for wgAuthenticatedRepositoryUser in the LocalSetting. \n" );
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no User for <i>wgAuthenticatedRepositoryUser</i> in the LocalSetting.<br/>";
+      }
+            
+      /* If the login was successful, get the Information from the File Description */
+      if ( ($token2['login']['result'] == 'Success') or ($token['login']['result'] == 'Success') ) { 
+    	  $request_vars = array('action' => 'render', 'title'=> $title, 'lgtoken' => $token['login']['token'], 'format' => 'php');
+    	  if(!$snoopy->submit($indexPath, $request_vars))
+   				$this->status->fatal("Snoopy error: {$snoopy->error}");
+    	  $this->content = $snoopy->results;
+      }
+      else if ( ($token2['login']['result'] == 'WrongPass') or ($token2['login']['result'] == 'WrongPluginPass') or ($token2['login']['result'] == 'EmptyPass') ) {
+        wfDebug( __METHOD__ . ": Wrong or no Password for wgAuthenticatedRepositoryPassword in the LocalSetting." );
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no Password for <i>wgAuthenticatedRepositoryPassword</i> in the LocalSetting.<br/>";
+      }
+      else if ( ($token2['login']['result'] == 'NotExists') ) {
+        wfDebug( __METHOD__ . ": Wrong or no User for wgAuthenticatedRepositoryUser in the LocalSetting. \n" );
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no User for <i>wgAuthenticatedRepositoryUser</i> in the LocalSetting.<br/>";
+      }
+      $this->headerList = explode("\r\n", $this->headerText);      
+    }
+    else 
+    {    
+			/*
+			 *  START: Original Code - now in a if statement
+			 */
+
+  		if ( false === curl_exec( $curlHandle ) ) {
+  			$code = curl_error( $curlHandle );
+  
+  			if ( isset( self::$curlMessageMap[$code] ) ) {
+  				$this->status->fatal( self::$curlMessageMap[$code] );
+  			} else {
+  				$this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
+  			}
+  		} else {
+  			$this->headerList = explode("\r\n", $this->headerText);
+  		}
+  		curl_close( $curlHandle );
+  		
+			/*
+			 *  END: Original Code - now in a if statement
+			 */
+  	}
+		/*
+		 *  END: Add code to access restricted repositories
+		 */
+  
 		$this->parseHeader();
 		$this->setStatus();
 		return $this->status;
	}
}
Mediawiki-Version 1.16[Bearbeiten]
--- HttpFunctions.php	2010-06-09 05:49:34.000000000 +0200
+++ HttpFunctions_new.php	2010-11-22 17:09:33.000000000 +0100
@@ -758,14 +758,97 @@
-		if ( false === curl_exec( $curlHandle ) ) {
-			$code = curl_error( $curlHandle );
-
-			if ( isset( self::$curlMessageMap[$code] ) ) {
-				$this->status->fatal( self::$curlMessageMap[$code] );
-			} else {
-				$this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
-			}
-		} else {
-			$this->headerList = explode("\r\n", $this->headerText);
-		}
-
-		curl_close( $curlHandle );
-
+		/*
+		 *  START:
+		 *  Add code to access restricted repositories. 
+		 *  Add the following line in the LocalSettings.php 		 
+		 * 		$wgAuthenticatedRepository = true;
+		 * 		$wgAuthenticatedRepositoryUser = 'WikiSysop';
+		 * 		$wgAuthenticatedRepositoryPassword = 'dev2010wer';
+		 * 		$wgShowAuthenticatedRepositoryError = true;
+		 */
+
+    global $wgAuthenticatedRepository, $wgAuthenticatedRepositoryUser, $wgAuthenticatedRepositoryPassword, $wgShowAuthenticatedRepositoryError;
+    $error = true;
+    $text = '';
+    $token2 = array();
+
+		/* run the code only if the user activate is in the LocalSettings.php*/
+    if ( $wgAuthenticatedRepository ) {
+      require_once 'extensions/Snoopy-1.2.4/Snoopy.class.php';
+      $index = '';
+      $login = '';
+      
+      /* Get all relevat url informations */
+      /* URL: http://localhost/mediawiki/mediawiki-repository/index.php/File:MediawikiExampleImageFlower.jpg?action=render&uselang=en */
+      $wikiPath = "";
+      if (!preg_match('/(.*)\/index.php\/(.*)\?(.*)/', $this->url, $matches)) {
+          echo "nicht gefunden";
+      } else {
+          $wikiPath = $matches[1];
+				  /* If the url contains special characters, when these characters must be convert */
+			  	$title = rawurldecode($matches[2]);
+      }
+      
+      $apiPath = "$wikiPath/api.php";
+      $indexPath = "$wikiPath/index.php";
+
+      $snoopy = new Snoopy;
+      /* Start request to get an token */
+      $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword, 'format' => 'php');
+      if(!$snoopy->submit($apiPath, $request_vars))
+      	$this->status->fatal("Snoopy error: {$snoopy->error}");
+      
+      // We're only really interested in the cookies
+      $snoopy->setcookies();
+      $token = unserialize($snoopy->results);
+      
+      /* Use the Token to login */
+      if ( $token['login']['result'] == 'NeedToken') { 
+    	  $request_vars = array('action' => 'login', 'lgname' => $wgAuthenticatedRepositoryUser, 'lgpassword' => $wgAuthenticatedRepositoryPassword,  'lgtoken' => $token['login']['token'], 'format' => 'php');
+    	  if(!$snoopy->submit($apiPath, $request_vars))
+   				$this->status->fatal("Snoopy error: {$snoopy->error}");
+    	  $token2 = unserialize($snoopy->results);
+      }
+      else if ( ($token['login']['result'] == 'NoName') ) {
+        wfDebug( __METHOD__ . ": Wrong or no User for wgAuthenticatedRepositoryUser in the LocalSetting. \n" );
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no User for <i>wgAuthenticatedRepositoryUser</i> in the LocalSetting.<br/>";
+      }
+            
+      /* If the login was successful, get the Information from the File Description */
+      if ( ($token2['login']['result'] == 'Success') or ($token['login']['result'] == 'Success') ) { 
+    	  $request_vars = array('action' => 'render', 'title'=> $title, 'lgtoken' => $token['login']['token'], 'format' => 'php');
+    	  if(!$snoopy->submit($indexPath, $request_vars))
+   				$this->status->fatal("Snoopy error: {$snoopy->error}");
+    	  $this->content = $snoopy->results;
+      }
+      else if ( ($token2['login']['result'] == 'WrongPass') or ($token2['login']['result'] == 'WrongPluginPass') or ($token2['login']['result'] == 'EmptyPass') ) {
+        wfDebug( __METHOD__ . ": Wrong or no Password for wgAuthenticatedRepositoryPassword in the LocalSetting." );
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no Password for <i>wgAuthenticatedRepositoryPassword</i> in the LocalSetting.<br/>";
+      }
+      else if ( ($token2['login']['result'] == 'NotExists') ) {
+        wfDebug( __METHOD__ . ": Wrong or no User for wgAuthenticatedRepositoryUser in the LocalSetting. \n" );
+        if ( $wgShowAuthenticatedRepositoryError ) $this->content = "Wrong or no User for <i>wgAuthenticatedRepositoryUser</i> in the LocalSetting.<br/>";
+      }
+      $this->headerList = explode("\r\n", $this->headerText);      
+    }
+    else 
+    {    
+			/*
+			 *  START: Original Code - now in a if statement
+			 */
+
+  		if ( false === curl_exec( $curlHandle ) ) {
+  			$code = curl_error( $curlHandle );
+  
+  			if ( isset( self::$curlMessageMap[$code] ) ) {
+  				$this->status->fatal( self::$curlMessageMap[$code] );
+  			} else {
+  				$this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
+  			}
+  		} else {
+  			$this->headerList = explode("\r\n", $this->headerText);
+  		}
+  		curl_close( $curlHandle );
+  		
+			/*
+			 *  END: Original Code - now in a if statement
+			 */
+  	}
+		/*
+		 *  END: Add code to access restricted repositories
+		 */
+  
 		$this->parseHeader();
 		$this->setStatus();
 		return $this->status;
	}
}

class PhpHttpRequest extends HttpRequest {
...

Vorlagen[Bearbeiten]

Vorlagen = Templates finden sich beispielhaft auf der Seite Vorlagen dargestellt.

Die einzelnen Vorlagen sind im Namensraum "Vorlage" bzw. "Template" zu finden. Für jede Vorlage ist eine eigene Wiki-Seite zu erstellen, um diese Vorlage dann im Wiki mit {{Vorlagenname}} verwenden zu können. Die Vorlage ist anschließend auf der Seite "Vorlagen" beispielhaft aufzuführen. Die vorhandene Vorlage "Languages" wird ersetzt durch eine eigene Vorlage.

Für Vorlagen mit Beispieltexten unter Verwendung des Vorlagennamens im "noinclude"-Bereich siehe weiter unten bei Code-Probleme und deren Lösungen, Abschnitt "Timeout durch Template-Name im Template-Text" – betrifft insbesondere die Erweiterung "AccessControl".

  • Vorlagen für SalzWiki
    • FreeForTranslation
  • Vorlagen für SalzWiki und Saltwiki
    • Infobox_Salz bzw. Infobox_Salt
    • MetadatenFoto_upload (wird im Artikel Vorlagen/Templates verwendet)
  • Vorlagen für das Repositorium
    • MetadatenFoto_upload
    • MetadatenDaten_upload
    • MetadatenLiteratur_upload
    • MetadatenProben_upload
    • MetadatenText_upload
    • Untersuchungsmethoden
  • Lizenzvorlagen: Eine neue Kategorie "Kategorie:Lizenzenvorlagen" erstellen mit folgenden Vorlagen:
    • CC-by-nc-nd,CC-by-nc-nd/de
    • CC-by-nc-sa,CC-by-nc-sa/de
    • PD
    • PD Help Page, PD Help Page/de, PD Help Page/fr
    • GFDL,GFDL/de (nur im Repositorium)

Alle anderen Vorlagen wurden beim Einbinden der Hilfeseiten bzw. Extensions eingestellt.

Lizenzen-Auswahl im Upload-Formular[Bearbeiten]

Um neue Lizenzen im Klappfeld im Upload-Formular einzugeben muss die Datei Mediawiki:Licenses (http://193.175.110.91/repository_1.16.1/index.php?title=MediaWiki:Licenses) editiert werden, nach dem vorgegebene Schema:

*Free licenses:           <!-- Lizenztyp -->
**PD|PD: public domain    <!--einzelne Lizenz-->
**GNU|GFDL: GNU Free Documentation License 

*Creative Commons
**CC-by-nc-nd|Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0) 
**CC-by-nc-sa|Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)

Editor (JavaScript)[Bearbeiten]

Achtung: Alle üblichen Editoren zur Bearbeitung von Seiteninhalten funktionieren nur mit JavaScript. Dies gilt auch für die Erweiterung "WikiEditor", welche bei MW1.31 für den Standard-Editor verwendet wird.

Namensräume[Bearbeiten]

Übersicht der vorhandenen Namensräume[Bearbeiten]

Eine Übersicht sowohl der MediaWiki-Namensräume als auch der selbst erstellten Namensräume wird aufgelistet durch Eingabe folgender Adresse:
localhost/[wikiname]/api.php?action=query&meta=siteinfo&siprop=namespaces

Einrichten von Namensräumen[Bearbeiten]

Es werden folgende Namensräume eingerichtet:

  1. "ADM" bzw. "Access": "ADM" bei Salzwiki und Saltwiki, "Access" bei Repository) für Dokumente der Administratoren, den nur diese bearbeiten können,
  2. "Bearbeitung": nur bei Saltwiki zum erstmaligen Erstellen von Dokumenten, die kein Leser sehen soll
  3. "Literature": für die Bibliographie - Achtung: Bei der Zuweisung in $wgExtraNamespaces ist ein Leerzeichen vor "_talk"!
  4. "SalzeImPorenraum": nur bei Repository
  5. "RBKLuebeck": nur bei Repository - Achtung: Ursprüngliche Konstante "RBK-Luebeck" mit Bindestrich erzeugt bei MW 1.23 eine Fehlermeldung und Bindestrich ist auch nicht bei $wgExtraNamespaces enthalten

Leerzeichen und Bindestriche sind für selbst definierte Namensräume (custom namespaces) nicht zulässig, siehe https://www.mediawiki.org/wiki/Manual:Using_custom_namespaces

Salzwiki

# Einrichten der Namensräume Adm, Bearbeitung und Literature
define("NS_ADM", 100);
define("NS_ADM_TALK", 101);
#define("NS_Bearbeitung", 120);
#define("NS_Bearbeitung_TALK", 121);
define("NS_Literature", 110);
define("NS_Literature_TALK", 111);
# Create namespaces
$wgExtraNamespaces = array(
NS_ADM => 'Adm',
NS_ADM_TALK => 'Adm_talk',
#NS_Bearbeitung => 'Bearbeitung',
#NS_Bearbeitung_TALK => 'Bearbeitung_talk',
NS_Literature => 'Literature',
NS_Literature_TALK => 'Literature _talk'
);
$wgNamespacesWithSubpages[NS_HELP] = true;            #subpages enabled for the Helpnamespace
$wgNamespaceProtection[NS_ADM] = array( 'editadm' ); #permission "editadmin" required to edit the Adm namespace
$wgNamespacesWithSubpages[NS_ADM] = true;            #subpages enabled for the ADM namespace
$wgGroupPermissions['Administrator']['editadm'] = true;

Saltwiki

# Einrichten der Namensräume Adm, Bearbeitung und Literature
define("NS_ADM", 100);
define("NS_ADM_TALK", 101);
define("NS_Bearbeitung", 120);
define("NS_Bearbeitung_TALK", 121);
define("NS_Literature", 110);
define("NS_Literature_TALK", 111);
# Create namespaces
$wgExtraNamespaces = array(
NS_ADM => 'Adm',
NS_ADM_TALK => 'Adm_talk',
NS_Bearbeitung => 'Bearbeitung',
NS_Bearbeitung_TALK => 'Bearbeitung_talk',
NS_Literature => 'Literature',
NS_Literature_TALK => 'Literature _talk'
);

$wgNamespacesWithSubpages[NS_HELP] = true;           #subpages enabled for the Helpnamespace
$wgNamespaceProtection[NS_ADM] = array( 'editadm' ); #permission "editadmin" required to edit the Adm namespace
$wgNamespacesWithSubpages[NS_ADM] = true;            #subpages enabled for the ADM namespace
$wgGroupPermissions['Sysadmin']['editadm'] = true;

Repository

# Einrichten der Namensräume Adm, Bearbeitung und Literature
define("NS_Access", 100);
define("NS_Access_TALK", 101);
#define("NS_Bearbeitung", 120);
#define("NS_Bearbeitung_TALK", 121);
define("NS_Literature", 110);
define("NS_Literature_TALK", 111);
# Create namespaces
$wgExtraNamespaces = array(
NS_Access => 'Access',
NS_Access_TALK => 'Access_talk',
#NS_Bearbeitung => 'Bearbeitung',
#NS_Bearbeitung_TALK => 'Bearbeitung_talk',
NS_Literature => 'Literature',
NS_Literature_TALK => 'Literature _talk'
);

##Anlegen von Namensräumen für Projekte
define('NS_SalzeImPorenraum', 1010);
define('NS_SalzeImPorenraum_TALK', 1011);
$wgExtraNamespaces[NS_SalzeImPorenraum] = 'SIPP';
$wgExtraNamespaces[NS_SalzeImPorenraum_TALK] = 'SIPP_talk';
#define('NS_RBK-Luebeck', 1020); //Achtung: Bindestrich darf nicht sein und ist auch nicht bei $wgExtraNamespaces enthalten
#define('NS_RBK-Luebeck_TALK', 1021);  //Achtung: Bindestrich darf nicht sein und ist auch nicht bei $wgExtraNamespaces enthalten
define('NS_RBKLuebeck', 1021);
define('NS_RBKLuebeck_TALK', 1021);
$wgExtraNamespaces[NS_RBKLuebeck] = 'Rbkl';
$wgExtraNamespaces[NS_RBKLuebeck_TALK] = 'Rbkl_talk';

#$wgNamespacesWithSubpages[NS_HELP] = true;            #subpages enabled for the Helpnamespace
#$wgNamespaceProtection[NS_ADM] = array( 'editadm' ); #permission "editadmin" required to edit the Adm namespace
#$wgNamespacesWithSubpages[NS_ADM] = true;            #subpages enabled for the ADM namespace
#$wgGroupPermissions['Sysadmin']['editadm'] = true;

Extensions[Bearbeiten]

Vorinstallierte Erweiterungen[Bearbeiten]

Welche Erweiterungen bei MW1.23 in welcher Linux-Distribution enthalten sind, erfährt man auf der Seite https://www.mediawiki.org/wiki/Comparison_of_extensions_in_distributions.

Eine allgemeine Übersicht der enthaltenen Erweiterungen gibt es unter https://www.mediawiki.org/wiki/Bundled_extensions_and_skins/de-formal.

Mit MW1.31 zu installierende Erweiterungen:

  • ApprovedRevs v0.8
  • AuthorProtect v1.4.0 (2018-04-13)
  • BibManager v1.23.0 (2018-03-18)
  • ContactPage v2.3 (2018-04-14)
  • DynamicPageList3 v3.3.2
  • Lingo v3.0.0
  • Math v3.0.0 (2018-04-17)
  • SaltWiki
  • TimedMediaHandler v0.5.0 (2018-08-07) mit MwEmbedSupport
  • UserMerge v1.10.1 (2018-05-18)
  • WhosOnline v1.7.2 (2018-03-10)

In MW1.31 enthaltene Erweiterungen, die genutzt werden:

  • CategoryTree
  • Cite
  • CiteThisPage
  • ConfirmEdit v1.5.1
  • ImageMap
  • Interwiki
  • MultimediaViewer
  • ParserFunctions v1.6.0 mit ControlStructureFunctions
  • SpamBlacklist
  • WikiEditor v0.5.1 bei Bedarf

In MW1.31 enthaltene Erweiterungen, die nicht genutzt werden:

  • in der Datei "LocalSettings.php" auskommentieren
    • Cite wegen Fehlermeldung bei PHP7.2.2
    • RenameUser
  • im Verzeichnis "extensions" enthalten
    • CodeEditor
    • Gadgets
    • InputBox
    • LocalisationUpdate
    • Nuke [obwohl angeblich nicht mehr enthalten]
    • OATHAuth
    • PdfHandler
    • Poem
    • ReplaceText
    • SyntaxHighlight_GeSHi
    • TitleBlacklist

AccessControl (fehlerhaft)[Bearbeiten]

"AccessControl" wird nicht mehr installiert, da es von MediaWiki ab Version 1.31 nicht mehr unterstützt wird. Dies betrifft bisher geschützte Seiten, die ohne die Erweiterung nicht nur für Autor/inn/en sichtbar sind, beispielsweise die Seite "RichtlinienAutoren" und Seiten wie "Autoren" (Richtlinien/Übersichten) aus dem Sidebar-Bereich "Autor/inn/en-Seiten.

Auf der Seite der Erweiterung wird ab MW 1.23 die Version "AC 2.6" von 2016-06-06 empfohlen, siehe auch https://www.mediawiki.org/wiki/Extension:AccessControl. Allerdings gibt es bei allen neueren Versionen vor MW1.31 Fehlermeldungen wegen fehlender json-Dateien oder einer nicht unterstützten Manifest-Version 2. Verwendet werden musste bei MW1.23/1.27 die Version REL1.27 AC2.5 mit "include_once(...)" statt "wfLoadExtension(...)".

Etliche Erweiterungen für spezielle Nutzungsrechte werden aufgelistet bei https://www.mediawiki.org/wiki/Category:Page_specific_user_rights_extensions, sind allerdings nicht mehr mit MW1.31 nutzbar.

Als vorläufiger Ersatz wird die Erweiterung "AuthorProtect" verwendet, mit der nach Auswahl der Karteikarte "Schützen" bei den Auswahllisten für den Seitenschutz "Bearbeitungen auf den Autor beschränken" zusätzlich zur Verfügung steht.

Verwendungszweck[Bearbeiten]

Die Erweiterung dient dazu, Seiten beispielsweise auch zum Lesen zu sperren, wenn wie im Repositorium Inhalte zwar bereits bearbeitet und ins Wiki eingestellt werden, aber noch nicht öffentlich zugänglich sein sollen.

Der Zugang auf eine Seite wird durch Eingabe einer Nutzergruppe (Beispiel: "parole") erlaubt, die vorher z.B. in "LocalSettings.php" definiert wird:

$wgGroupPermissions['parole']['read'] = true;

Damit nur Mitglieder der Gruppe "parole" Zugang zu einer Seite erhalten, wird auf der jeweiligen Seite oben folgende Zeile eingegeben (siehe dazu auch http://www.mediawiki.org/wiki/Extension:AccessControl):

<accesscontrol>parole</accesscontrol>

Die Überprüfung der Gruppenberechtigung darf nicht mit einer Seite für die Gruppe mit Kontenliste, sondern muss mit den Angaben in der Wiki-Datenbank ausgeführt werden.

Gruppenzugehörigkeit mit Datenbank statt Gruppen-Seite prüfen[Bearbeiten]

Für die Überprüfung der Gruppenberechtigung mit den Angaben in der Wiki-Datenbank statt mit einer Seite für die Gruppe mit Kontenliste:

  • Datei "LocalSettings.php" mit "$wgUseMediaWikiGroups = true;" ergänzen
  • Datei "\extensions\AccessControl\AccessControl.hooks.php" in der Funktion "makeGroupArray(...)" anpassen

Datei "AccessControl.hooks.php" REL1.30 AC2.6 Z.47ff:

function makeGroupArray( $accesslist ) {
  ...
  $userswrite = [];
  $usersreadonly = [];
  // für HAWK HHG eingefügt 2016-05-17
  // users of group from wiki database
  global $wgUseMediaWikiGroups, $wgUser;
  if($wgUseMediaWikiGroups === true){
    if( in_array($accesslist, $wgUser->getGroups()) ){
      $userswrite[] = $wgUser->getName();
    }
    return [ $userswrite, $usersreadonly ];
  }
  // users from group-page with list of users and their rights for writing or reading
  $users = self::getUsersFromPages( $accesslist );
  ...
    $case 'read':
     $usersreadonly[] = (string)$user; #$usersreadonly[] = $user;
     break;
    $case 'edit':
     $userswrite[] = (string)$user; #$userswrite[] = $user;
     ...
}

Versionsfehler[Bearbeiten]

AccessControl v2.6 fehlerhaft bei MW 1.27[Bearbeiten]
  • Es gibt bei REL1.30 für die Datei "extension.json" die Fehlermeldung "... unsupported manifest_version: 2 ..."
  • Es fehlt bei REL1.29 die Datei "extension.json".
AccessControl v2.5 fehlerhaft bei MW 1.27[Bearbeiten]

Es fehlen bei REL1.27 die Dateien

  • composer.json
  • extension.json
AccessControl v2.4 fehlerhaft bei MW 1.23[Bearbeiten]

Für MW 1.23 wurde versucht, AccessControl v2.5 zu verwenden. Der Download enthält aber nicht wie in Aussicht gestellt Version 2.5, sondern Version v2.4, bei welcher in der Datei "changelog.txt" nur Änderungen bis v2.3 aufgelistet sind. Die Version 2.4 hat mehrere Fehler:

  • Z.21: "$wgAccessControlRedirect = true;" fehlt
  • Z.136: in Funktion getTemplatePage() ist ein Rückgabewert auskommentiert
  • Z.173: php-Warnung, weil "isset($allow)" fehlt
  • Z.225: php-Warnung, weil "isset($rights)" fehlt
  • Z.202, Z.210: in Funktion fromTemplates() wird dieselbe Funktion evtl. endlos aufgerufen
  • Z.284: in Funktion allRightsTag() wird die Funktion fromTemplates() aufgerufen, die wiederum evtl. die Funktion allRightsTag() in Z.213, Z.218 und Z.220 endlos aufruft
  • Funktion doRedirect() ist im Vergleich zu v2.5 anders
AccessControl v2.5 für MW 1.23[Bearbeiten]

Für die Gruppe "autor" wird standardmäßig beispielsweise die Seite "Autor" nach einer Liste mit Kontonamen durchsucht, wobei unterschieden wird zwischen "write"-Berechtigung und durch das Suffix "(ro)", was "readonly" bedeutet, "read"-Berechtigung.

Da eine Vielzahl Benutzungskonten zur Gruppe "autor" gehört und die Seite "Autor" in SalzWiki anderweitig verwendet wird, muss die Gruppenzugehörigkeit mit der Zuordnung in der MW-Datenbank überprüft werden und der Code der Erweiterung in der Funktion "makeGroupArray(...)" angepasst werden.

Installationshinweise[Bearbeiten]

Achtung:

  • Version 2.6 REL1.30: Für MW1.27 muss in der Datei "extension.json" die Manifest-Version von 2 zu 1 geändert werden.
  • Version 2.6 REL1.29 und 2.5 REL1.27: Für MW1.27 fehlt die Datei "extension.json".
  • Version 2.5 ist nicht zum Herunterladen bei REL1.23, sondern erst bei REL1.24 verfügbar.
  • Die Extension wird als REL1.xy heruntergeladen und nach dem Extrahieren in das Verzeichnis "extensions" kopiert.
    • v2.6 "...REL1.30...", Datei "version": 2017-09-21T22:00:29 a04ebe6 [nicht verwendet]
    • v2.6 "...REL1.29...", Datei "version": 2017-06-14T01:00:26 4c085e6 [nicht verwendet]
    • v2.5 "...REL1.27...", Datei "version": 2016-06-13T23:00:13 62d3051 [nach Anpassung mit MW1.27 verwendet]
    • v2.5 "...REL1.26...", Datei "version": 2016-01-09T22:48:53 1a2ce27 [nach Anpassungen mit MW1.23 verwendet]
    • v2.5 "...REL1.24...", Datei "version": 2016-01-09T22:48:53 c7e1e54 [nicht verwendet]
    • v2.4 "...REL1.23...", Datei "version": 2015-06-16T21:00:32 befc02e [nicht verwendet]

Installation und Konfiguration[Bearbeiten]

Folgende Dateien sind bei REL1.30 anzupassen:

  • ...\extension\AccessControl\
    • bei REL1.30 für Versionen bis MW1.29: extension.json
    • AccessControl.hooks.php
  • LocalSettings.php
Anpassung extension.json[Bearbeiten]

Vor der Verwendung in MW1.27 wird für die Anpassung der ungültigen Manifest-Version die Original-Datei "extension.json" kopiert und die Kopie umbenannt in "extension_original.json". Danach erfolgt in der Datei "extension.json" die Code-Anpassung in Z.34 für Manifest-Version 1 statt 2

...
 "manifest_version": 1
...

Anschließend wird eine Kopie der geänderten Datei zur Sicherung gespeichert als Datei "extension_SW.json"

Anpassung AccessControl.hooks.php[Bearbeiten]

Für die Beseitigung der Fehler in der Datei "AccessControl.hooks.php", wie es weiter unten beschrieben ist, wird zuerst eine Kopie mit der Bezeichnung "AccessControl.hooks_original.php" gespeichert und nach den Änderungen die geänderte Datei als Kopie unter der Bezeichnung "AccessControl.hooks_SW.php" gesichert.

Anpassung LocalSettings.php[Bearbeiten]

Die Verwendung der Erweiterung REL1.27 ohne Datei "extension.json" einfügen in der Datei "LocalSettings.php":

require_once("$IP/extensions/AccessControl/AccessControl.php");
$wgUseMediaWikiGroups = true;

Die Verwendung der Erweiterung REL1.30 mit Datei "extension.json" einfügen in der Datei "LocalSettings.php":

wfLoadExtensions('AccessControl');
$wgUseMediaWikiGroups = true;

Fehler und Probleme[Bearbeiten]

Fehler bei Spezialseiten[Bearbeiten]

"Fatal exception of type MWException" bei vielen Seiten aus der linken Navigation

Probleme mit Templates[Bearbeiten]

In früheren Versionen gab es ein Script-Timeout wie bei AccessControl v2.4 durch Verwendung des Template-Namens im Template-Text. Dies betraf in den Templates "Ynotice", "Baustelle" und "FreeForTranslation" die noinclude-Bereiche, in denen der Template-Name erneut auftaucht. Der erste Buchstabe muss entweder kleingeschrieben werden oder - besser - durch Hexadezimal-HTML-Zeichen ersetzt werden:


<noinclude>
=== Beispielvorlage ===
{{&#98;notice|text=
}}
</noinclude>

<noinclude>
=== Beispielvorlage ===
{{&#66;austelle}}
</noinclude>

<noinclude>
=== Beispielvorlage ===
{{&#70;reeForTranslation}}
</noinclude>

undefinierte Variablen[Bearbeiten]

PHP erzeugt evtl. eine Meldung "Notice: Undefined variable: allow ...". Es fehlt bei $allow die Abfrage "isset(...)".

Die Datei "AccessControl.hooks.php" ist zur Verhinderung von php-Warnungen wie folgt zu bearbeiten:
In Zeile 143 (REL1.27) bzw. Z.128 (REL1.30) "if(is_array($allow)){" mit "isset($allow) &&" ergänzen:

if( isset($allow) && is_array($allow) ){
Hooks-Fehlerquellen mit veralteten Definitionen[Bearbeiten]

Abhilfe gegen weitere Fehler schaffen folgende Änderungen in der Datei "AccessControl.hooks.php" die bei https://www.mediawiki.org/wiki/Extension_talk:AccessControl#Selected_fixes_against_2.5 aufgeführt sind:

//function makeGroupArray(...)
//Z.57
$usersreadonly[] = (string)$user;   #$usersreadonly[] = $user;
//Z.60
$userswrite[] = (string)$user;   #$userswrite[] = $user;

//function getUsersFromPages(...)
//Z.119 (REL1.27) bzw. Z.108 (REL1.30)
$gt = $Title->newFromText( $group );    #$gt = $Title->makeTitle( 0, $group );

//function fromTemplates(...)
//Z.200 (REL1.27) bzw. Z.185 (REL1.30)
if ( $wgUser->isAnon() ) {    #if ( $wgUser->mID === 0 ) {
//Z.205 (REL1.27) bzw. Z.190 (REL1.30)
if ( in_array( 'sysop', $wgUser->getGroups(), true) ) {    #if ( in_array( 'sysop', $wgUser->mGroups, true) ) {
//Z.213 (REL1.27) bzw. Z.198 (REL1.30)
if ( ! in_array( $wgUser->getName(), $users[0], true) ) {    #if ( ! in_array( $wgUser->mName, $users[0], true) ) {
//Z.224 (REL1.27) bzw. Z.209 (REL1.30)
if ( ! in_array( $wgUser->getName(), $users[1], true) ) {    #if ( ! in_array( $wgUser->mName, $users[1], true) ) {

// function allRightTags(...)
//Z.255 (REL1.27) bzw. Z.240 (REL1.30)
$gt = $Title->newFromText( $redirecttarget );    #$gt = $Title->makeTitle( 0, $redirecttarget );

//function onUserCan(...)
//Z.293 (REL1.27) bzw. Z.278 (REL1.30)
if ( $wgUser->isAnon() ) {    #if ( $wgUser->mID === 0 ) {
//Z.313 (REL1.27) bzw. Z.298 (REL1.30)
if ( $wgUser->isAnon() ) {    #if ( $wgUser->mID === 0 ) {
//Z.326 (REL1.27) bzw. Z.311 (REL1.30)
if ( in_array( $wgUser->getName(), $users[0], true) ) {    #if ( in_array( $wgUser->mName, $users[0], true) ) {
//Z.339 (REL1.27) bzw. Z.324 (REL1.30)
if ( in_array( $wgUser->getName(), $users[1], true) ) {    #if ( in_array( $wgUser->mName, $users[1], true) ) {
Hooks-Fehlerquellen mit unerwarteten NULL-Werten[Bearbeiten]

Funktion "fromTemplates"

Bei der Funktion "fromTemplates($string)" Z.168ff (REL1.27) bzw. Z.153ff (REL1.30) hat möglicherweise die Variable $rights den Wert NULL, weil sie die verschachtelteten Funktionen "allRightTags( getContentPage( 10, $templatepage) )" mit dem Namensraum 10 (ID für Templates) und mit dem Inhalt anstatt mit dem Seitentitel verwendet:

} elseif ( ctype_alnum( substr( $templatepage, 0, 1 ) )) {
  // für HAWK HHG angepasst 2016-05-17, 2018-03-05
  $context = new RequestContext();
  $gt2 = $context->getTitle();
  // The check of included template
  if (strpos( $templatepage, '|' ) > 0) {
    $templatename = substr( $templatepage, 0, strpos( $templatepage, '|' ) );
    #$rights = self::allRightTags( self::getContentPage( 10, $templatename ) );
    $rights = self::allRightTags( self::getContentPage( $gt2->getNamespace(), $templatename ) );
    #MW1.23: $rights = allRightTags( getContentPage( $gt2->getNamespace(), $templatename ) );
  } else {
    #$rights = self::allRightTags( self::getContentPage( 10, $templatepage ) );
    $rights = self::allRightTags( self::getContentPage( $gt2->getNamespace(), $templatepage ) );
    #MW1.23: $rights = allRightTags( getContentPage( $gt2->getNamespace(), $gt2->getFullText() ) );
  }
}

Funktionen getContentPage(), getTemplatePage() und getUsersFromPages()

In den Funktionen "getContentPage()" Z.80ff (REL1.27, REL1.30), "getTemplatePage(...)" Z.97 (REL1.27) bzw. Z.91ff (REL1.30) und "getUsersFromPages(...)" Z.113ff (REL1.27) bzw. Z.102ff (REL1.30) muss der Wert, der sich aus der Methode "getContent()" ergibt, auf "NULL" überprüft werden.

Bei REL1.27 "getContentPage()" wird auf NULL geprüft. "new WikiPage($gt)" kann nicht zu "WikiPage::factory($gt)" angepasst werden, weil es "MWExceptions" auslöst.

#REL1.27 undverändert

#REL1.30
function getContentPage( $namespace, $title ) {
  ...
  Title = new Title();
  $gt = $Title->makeTitle( $namespace, $title);
  // Article::fetchContent() is deprecated.
  // Replaced by WikiPage::getContent()
  $page = WikiPage::factory( $gt );
  // für HAWK HHG NULL-Wert-Abfrage angepasst 2018-03-05
  #$content = $ContentHandler::getContentText( $page -> getContent() );
  #return $content;
  $contentPageContent = $page->getContent( Revision::RAW );
  if ( $contentPageContent != NULL ){
    return ContentHandler::getContentText( $contentPageContent );
  }
}
#REL1.27
function getTemplatePage( $template ) {
  ...
  Title = new Title();
  $gt = $Title->makeTitle( 10, $template);
  if ( method_exists ( 'WikiPage', 'getContent' ) ) {
   // für HAWK HHG NULL-Wert-Abfrage angepasst 2018-03-05
   #$contentPage = new WikiPage( $gt );
   #return $contentPage->getContent()->getNativeData();
   $contentPage = WikiPage::factory( $gt );
   $contentPageContent = $contentPage->getContent( Revision::RAW );
   if ( $contentPageContent != NULL ){
    return ContentHandler::getContentText( $contentPageContent );
   }
  } else {
   // create Article and get the content
   ...
  }
}

#REL1.30
function getTemplatePage( $template ) {
  ...
  Title = new Title();
  $gt = $Title->makeTitle( 10, $template);
  // Article::fetchContent() is deprecated.
  // Replaced by WikiPage::getContent()
  $page = WikiPage::factory( $gt );
  // für HAWK HHG NULL-Wert-Abfrage angepasst 2018-03-05
  #$content = $ContentHandler::getContentText( $page -> getContent() );
  #return $content;
  $contentPageContent = $page->getContent( Revision::RAW );
  if ( $contentPageContent != NULL ){
    return ContentHandler::getContentText( $contentPageContent );
  }
}
#REL1.27
function getUsersFromPages( $group ) {
  ...
  // für HAWK HHG Titelerzeugung ohne Namespace-Festlegung und NULL-Wert-Abfrage angepasst 2018-03-05
  $allowedAccess = array();
  $allow = array();
  $Title = new Title();
  // Remark: position to add code to use namespace from mediawiki
  $gt = $Title->newFromText( $group ); #$gt = $Title->makeTitle( 0, $group );
  if ( method_exists( 'WikiPage', 'getContent' ) ) {
   // NULL-Wert-Abfrage
   #$groupPage = new WikiPage( $gt );
   #$allowedUsers = $groupPage->getContent()->getNativeData();
   $groupPage = WikiPage::factory( $gt );
   $groupContent = $groupPage->getContent( Revision::RAW );
   if ( $groupContent != NULL ){
    $allowedUsers = ContentHandler::getContentText( $groupContent );
   }
  } else {
   ...
  }
  ...
}

#REL1.30
function getUsersFromPages( $group ) {
  ...
  // für HAWK HHG Titelerzeugung ohne Namespace-Festlegung und NULL-Wert-Abfrage angepasst 2018-03-05
  $allowedAccess = [];
  $allow = [];
  $Title = new Title();
  // Remark: position to add code to use namespace from mediawiki
  $gt = $Title->newFromText( $group ); #$gt = $Title->makeTitle( 0, $group );
  // Article::fetchContent() is deprecated.
  // Replaced by WikiPage::getContent()
  $groupPage = WikiPage::factory( $gt );
  // NULL-Wert-Abfrage
  #$allowedUsers = ContentHandler::getContentText( $groupPage -> getContent() );
  $groupContent = $groupPage->getContent( Revision::RAW );
  if ( $groupContent != NULL ){
    $allowedUsers = ContentHandler::getContentText( $groupContent );
  }
  ...
}

Einrichten einer Nutzungsgruppe[Bearbeiten]

Eine Gruppe von Usern, die alleine Zugang auf bestimmte Seiten haben soll, wird z. b. beim Repositorium im Namensrauam "ACCESS" auf einer Gruppen-Seite statt über die Datenbank wie unten eingerichtet.

Speichern der Liste auf der Seite Access:SIP
<accesscontrol>Access:SIP</accesscontrol># Schutz der eigenen Seite
*Hschwarz                                                 # einfache Liste der User
*HJuling
*MSteiger
*SLaue
*SBrueggerhoff
*Testuser

ApprovedRevs (Inkompatibilität)[Bearbeiten]

Einschränkung[Bearbeiten]

Diese Erweiterung kann nicht verwendet werden, wenn die Erweiterung "AccessControl" verwendet wird; siehe https://www.mediawiki.org/wiki/Extension:ApprovedRevs.

Verwendungszweck[Bearbeiten]

Mit dieser Erweiterung können Revisionen (Versionen einer SalzWiki-Seite) bestätigt oder abgelehnt werden. Die bestätigte Version wird allen Usern angezeigt.

Approved Revs-1.jpg

Installation der Erweiterung "ApprovedRevs"[Bearbeiten]

  • Die Erweiterung wird mit der Version 0.8 0.7.0 REL1.23 2015-06-16T21:01:12 513cff5 heruntergeladen und nach dem Extrahieren in das Extensions-Verzeichnis des jeweiligen Wikis kopiert.
  • Es muss bei einem neuen Wiki eine Datenbank-Tabelle mit dem Präfix "sw_" (SalzWiki, SaltWiki) bzw. "sr_" (Repository) und dem Namen "approved_revs" angelegt werden. Hierzu gibt es zwei Möglichkeiten:
    • Das Skript "update.php" von "MediaWiki's/maintenance" benutzen oder
    • Mittels "phpMyAdmin" in der Datenbank die Tabelle mit den beiden SQL-Befehlen, die in der Datei "ApprovedRevs.sql" der Erweiterung zu finden sind, erstellen.
  • Es muss bei einem bestehenden Wiki mit "phpMyAdmin" die Datenbank-Tabelle auf die Spalte "approver_id" überprüft werden und, sofern die Spalte fehlt, die Spalte mit dem SQL-Befehl aus der Datei "...\extensions\ApprovedRevs\sql\patch-approver_id.sql" hinzugefügt werden, wobei das Tabellen-Präfix "sw_" bzw. "sr_" zu ergänzen ist.
  • Die Erweiterung in der Datei "LocalSettings.php" aktivieren
// SalzWiki, SaltWiki, Repository
#require_once( "$IP/extensions/ApprovedRevs/ApprovedRevs.php" );
wfLoadExtension("ApprovedRevs");

Konfiguration von "ApprovedRevs"[Bearbeiten]

Diejenigen, die das Recht "viewlinktolatest" haben, sehen einen Hyperlink unter dem Titel des Artikels, um zur aktuellen unbestätigten Version zu kommen.

Diejenigen, die das Recht "approverevisions" haben, können in der History (Versionen-Übersicht) eine Version "bestätigen" oder "ablehnen".

Damit nur Admins und Mitglieder der Gruppen "Redakteur"/"Editor" eine Version bestätigen bzw. ablehnen können und zusätzlich Mitglieder der Gruppe "autor" den Verweis zur aktuellen unbestätigten Version zur Verfügung gestellt bekommen, sind in der Datei "LocalSettings.php" folgende Angaben erforderlich:

// SalzWiki
$wgGroupPermissions['Redakteur']['approverevisions'] = true;
$wgGroupPermissions['sysop']['approverevisions'] = true;
$wgGroupPermissions['autor']['viewlinktolatest'] = true;
$wgGroupPermissions['*']['viewlinktolatest'] = false;
$wgGroupPermissions['sysop']['viewlinktolatest'] = true;
// SaltWiki
$wgGroupPermissions['Editor']['approverevisions'] = true;
$wgGroupPermissions['sysop']['approverevisions'] = true;
$wgGroupPermissions['autor']['viewlinktolatest'] = true;
$wgGroupPermissions['*']['viewlinktolatest'] = false;
$wgGroupPermissions['sysop']['viewlinktolatest'] = true;
// Repository
$wgGroupPermissions['Editor']['approverevisions'] = true;
$wgGroupPermissions['sysop']['approverevisions'] = true;
#$wgGroupPermissions['autor']['viewlinktolatest'] = true;
$wgGroupPermissions['*']['viewlinktolatest'] = false;
$wgGroupPermissions['sysop']['viewlinktolatest'] = true;

Beispiele:

  • damit z. B. alle Mitglieder der Gruppe "sysop" Seiten als geprüft markieren können
$wgGroupPermissions['sysop']['approverevisions'] = true;
  • um den ApprovedRevs-Hyperlink standardmäßig zu deaktivieren
$wgGroupPermissions['*']['viewlinktolatest'] = false;
  • um den ApprovedRevs-Hyperlink allen Admins und Mitgliedern der Gruppe "autor" zur Verfügung zu stellen
$wgGroupPermissions['autor']['viewlinktolatest'] = true;
$wgGroupPermissions['sysops']['viewlinktolatest'] = true;

AuthorProtect[Bearbeiten]

Die Erweiterung "AuthorProtect" wird als Ersatz für "Access Control" verwendet. Mit "AuthorProtect" kann die Bearbeitung einer Seite auf die Autorin bzw. den Autor einer Seite beschränkt werden. Durch die Erweiterung steht bei einer Seite nach Auswahl der Karteikarte "Schützen" bei den Auswahllisten für den Seitenschutz zusätzlich "Bearbeitungen auf den Autor beschränken" zur Verfügung.

Für Informationen und zum Herunterladen siehe https://www.mediawiki.org/wiki/Extension:AuthorProtect. Die Erweiterung wird für MW1.31 in Version 1.4.0 angeboten und wird in das Verzeichnis "...\[wikiname]\extensions\" entpackt.

Alle Seiten, die mit "<Accesscontrol>...</Accesscontrol>" eingeleitet werden, müssen entsprechend mit dem neuen Schutz ausgestattet werden. Die Suche nach "Access" in der linken Navigation findet im Repositorium nur 10 Seiten, welche mit "access:..." geschützt wurden.

Bisher für bestimmte Gruppen geschützte Seiten, die im Repsoitorium ausfindig gemacht werden konnten:

  • access:RBK-luebeck
    • Ratsbierkeller_Lübeck
  • access:SIP
    • Probe0009, Probe0016, Probe0020, Probe0021, Probe0025, Probe0029, Probe0035, Probe0082. Probe0094
  • autor
    • Analyses, Analyses/de
    • Audios, Audios/de
    • Category_tree, Category_tree/de
    • Communication, Communication/de
    • Diagrams, Diagrams/de
    • Graphics, Graphics/de
    • Neue_Bilder
    • Photos, Photos/de
    • Physical-chemical_Datam, Physical-chemical_Data/de
    • Presentations, Presentations/de
    • Project_Data
    • Rights/de
    • Suche_Daten, Suche_Daten/de
    • Templates, Templates/de
    • Videos, Videos/de
  • autor, Projekte, Administrator
    • Projects, Projects/de
  • HAWK
    • Steinbergkapelle Hildesheim
  • SalzWiki
    • SalzWiki
  • SalzWiki, SIP
    • Forschungsverbund

BibManager (Extension-Code)[Bearbeiten]

Die Erweiterung "BibManager" wird zur Erstellung und Verwaltung der Literaturhinweise bzw. zum Einbinden der Zitate in Artikel benutzt und verwendet den Namensraum "NS_CITATION" ("Cit") mit der Nummer 800 sowie "NS_CITATION_TALK" ("Cit_talk") mit der Nummer 801.

Die Erweiterung besteht aus

  • der Grunderweiterung "BibManager"
  • und den von "HalloWelt" für die HAWK HHG programmierten Zusatzerweiterungen

Mit der Erweiterung "SaltWiki" können im SalzWiki/SaltWiki/Repository weitere Felder, die nicht im original "BibTeX" spezifiziert sind, wie DOI und Fulltext, verwendet werden.

Die Erweiterung "SaltWikiUpload" soll im Repositorium das Hochladen von Dateien mit BibTex-Angaben erleichtern, doch wird bei MW1.23LTS nur das MW-Standard-Upload-Formular angezeigt.

Version[Bearbeiten]

  • BibManager-REL1.31 weist in der Datei "version" einen Stand 2018-04-17 auf.
  • In der Datei "extension.json" ist Version 1.23.0 für MW>=1.29 angegeben.
  • Die Datei "BibManager.php" enthält ebenfalls einen Hinweis für die Verwendung mit MW1.29+.

Installation[Bearbeiten]

Bei der Installation werden die Erweiterungen in folgende Ordner kopiert:

  • "\extensions\BibManager\"
  • "\extensions\BibManagerAdditionalPublications\" "\extensions\SaltWiki\"
  • "\extensions\BibManagerUploadMetaData\" "\extensions\SaltWikiUpload\"
Anpassung SQL-Datei[Bearbeiten]

Für Wiki-Updates mit der MW-Datei "\maintenance\update.php" ist in der Datei "...\BibManager\maintenance\bibmanager_page_citation_rel.sql" 2 Mal das jeweilige Wiki-Präfix einzufügen.

SalzWiki/SaltWiki:

-- Add the Page <-> Citation relationship table for BibManager
CREATE TABLE /*_*/sw_bibmanager_page_citation_rel (
...
) /*$wgDBTableOptions*/;

CREATE INDEX /*i*/bmpc_bibtexCitationIDX ON /*_*/sw_bibmanager_page_citation_rel ( bmpc_bibtexCitation(50) );

Repository:

-- Add the Page <-> Citation relationship table for BibManager
CREATE TABLE /*_*/sr_bibmanager_page_citation_rel (
...
) /*$wgDBTableOptions*/;

CREATE INDEX /*i*/bmpc_bibtexCitationIDX ON /*_*/sr_bibmanager_page_citation_rel ( bmpc_bibtexCitation(50) );
Anpassung Sprachdateien[Bearbeiten]

Im Verzeichnis "[wikiname]\extensions\BibManager\i18n\" wird in den Sprachdateien Folgendes angepasst:

  • doppelte Anführungszeichen in HTML-Tags durch Apostrophs und in Texten durch &quot; bzw. durch „ und “ ersetzen
    • Z.16 "heading_create_type"
    • Z.22 "bm_list_welcome"
    • Z.38 "bm_create_back"
    • Z.60 "bm_bibtex_string_import_link"
    • Z.62 "bm_delete_confirm-delete"
    • Z.72 "bm_error_citation_exists"
    • Z.74 "bm_error_delete-fail"
    • Z.81 "bm_error_error-dataset"
    • Z.84 "bm_error_not-found"
    • Z.135 "bm_success_save-complete"
    • Z.136 "bm_success_delete"
    • Z.137 "bm_success_link-to-list"
  • im Abschnitt "SpecialPage List" den Text des Array-Elements "bm_list_welcome" für Hinweise zu Neueinträgen, Importen und den Anleitungen ergänzen
de.json[Bearbeiten]
...
 "heading_create_type": "BibManager: Eintrag "$1" anlegen",
...
 "bm_list_welcome" => "Willkommen ... $1 und $2. <br />Beim Bearbeiten von Einträgen füge bitte in das Feld "Sortierungsschlüssel" das Wort <b>"bearbeitet"</b>, beim Neuanlegen <b>"neu"</b> ein.<br />Weitere Hilfen: <a href='https://salzwiki.de/index.php/BibManager:Benutzerhandbuch'>Benutzerhandbuch</a>. ",
...
 "bm_create_back": "<a href='$1' title='Zurück'><< Zurück zur Auswahl</a>",
...
de-formal.json[Bearbeiten]
...
 "bm_list_welcome" => "Willkommen ... $1 und $2. <br />Beim Bearbeiten von Einträgen fügen Sie bitte in das Feld "Sortierungsschlüssel" das Wort <b>"bearbeitet"</b>, beim Neuanlegen <b>"neu"</b> ein.<br />Weitere Hilfen: <a href='https://salzwiki.de/index.php/BibManager:Benutzerhandbuch'>Benutzerhandbuch</a>. ",
...
en.json[Bearbeiten]
...
 "bm_list_welcome" => "Welcome ... $1 and $2 if you would like to add a new entry or import a BibTex-String.<br />Please add in the field "key" of a new reference the word <b>"new"</b>. If you are changing a reference, please add <b>"edited"</b> in the "key" field.<br />More Information: <a href='https://saltwiki.net/index.php/BibManager:User_manual'>User Manual</a>. ",
...
Anpassung "LocalSettings.php"[Bearbeiten]

In der Datei "LocalSettings.php" wird Folgendes eingefügt:

## Namensräume
...
 // für Erweiterung BibManager
 define("NS_CITATION", 800);
 define("NS_CITATION_TALK", 801);
 $wgExtraNamespaces[NS_CITATION] = 'Cit';
 $wgExtraNamespaces[NS_CITATION_TALK] = 'Cit_talk';
 ...
## EXTENSIONS
...
 require_once('extensions/BibManager/BibManager.php');
 require_once('extensions/SaltWiki/SaltWiki.php' );
 #nur im Repositorium:
 require_once('extensions/SaltWikiUpload/SaltWikiUpload.php' );
 ...
## Einstellungen
...
## Erweiterung BibManager
# Namensraum berücksichtigen
$wgBibManagerCitationArticleNamespace = NS_CITATION;
# BibManager-Anpassung an die gewünschte Zitierweise
$wgBibManagerCitationFormats = array (
  '-' => '%author%: %title%, %year% %url%, %doi%',
  'article' => '%author% (%year%): %title%. <em>%journal%</em>, <b>%volume%</b> (%number%), %pages%, %url%, %doi%',
  'book' => '%editor% %author% (%year%): <em>%title%, %edition%, %publisher%, %address%, %pages%</em>, %url%., %doi%',
  'booklet' => '%title% %url%, %doi%',
  'conference' => '%author% (%year%): %title%. %booktitle% %url%, %doi%',
  'inbook' => '%author% (%year%): <em>%title%. In: %editor%: %edition%, %publisher%, %address%, %pages%</em> %url%, %doi%',
  'incollection' => '%author% (%year%): %title%. In: %editor%: %booktitle%, <em>%publisher%</em>, %pages%, %url%, %doi%',
  'inproceedings' => '%author% (%year%): %title%. In: %editor%: %booktitle%,<em>%publisher%</em>, %pages%, %url%, %doi%',
  'manual' => '%title% %url%, %doi%',
  'mastersthesis' => '%author% (%year%): %title%, %type%, %school%, %address%, %url%, %doi%, %fulltext%',
  'misc' => '%author% (%year%): %title%, %howpublished%, %pages% %url%, %doi%',
  'phdthesis' => '%author% (%year%): %title%. %type%, %school%, %url%, %doi%',
  'proceedings' => '%editor% (%year%): %title%,<em> %publisher%</em>, %url%, %doi%',
  'techreport' => '%author% (%year%): %title%. %institution% %url%, %doi%',
  'unpublished' => '%author% (%year%): %title%. %note%, %url%, %doi%'
);

Spezialseiten-Gruppe[Bearbeiten]

Verfügbarkeit in Abhängigkeit vom Status

  • Ohne Anmeldung sollen nur die Verweise zu "Bibliographien anzeigen: Autoren" und "Bibliographien verwalten" sichtbar sein. Bei "Bibliographien verwalten" sind dann die Funktionen "Edit" und "Delete" nicht vorhanden, sondern nur "Export".
  • Nach Anmeldung sind auch die Funktionen "Bibliographieeintrag anlegen" und "Bibliographien importieren" verfügbar.

Siehe [#Spezialseiten_mit_Gruppenberechtigung]

BibManager REL1.31 Datei-Anpassungen[Bearbeiten]
  • \i18n\ => \i18n_SW\
    • de.json
    • de-formal.json
    • en.json
    • qqq.json
  • \includes\
    • BibManagerPagerHooks.php =>BibManagerPagerHooks_SW.php
    • BibManagerPagerList.php =>BibManagerPagerList_SW.php
  • \includes\specials\
    • SpecialBibManagerDelete.php => SpecialBibManagerDelete_SW.php
    • SpecialBibManagerEdit.php => SpecialBibManagerEdit_SW.php
    • SpecialBibManagerList.php => SpecialBibManagerList_SW.php
Systemnachrichten für Gruppe prüfen[Bearbeiten]

Ob die Gruppe "BibManager" in den Systemnachrichten auftaucht, lässt sich durch Aufruf der MediaWiki-Systemnachrichten, die sich bei den Spezialseiten in der Rubrik "Daten und Werkzeuge" befinden, überprüfen, indem als Präfixfilter "Specialpages-group" angegeben wird. Dann sollte bei den Ergebnissen der Name "specialpages-group-bibmanager" mit dem Text "BibManager" aufgelistet werden.

Fehler korrigieren (Extension-Code)[Bearbeiten]

Fehlende Icons für "edit" und "delete"[Bearbeiten]

In der BibManager-Übersicht ohne JavaScript sind rechts nur Text-Hyperlinks ohne Abstand für "edit" und "delete" anstatt Icons vorhanden; es sind in folgender Datei Anpassungen vorzunehmen:

  • "\extensions\BibManager\includes\BibManagerHooks.php"

Vor den Anpassungen ist die Datei mit dem Suffix "_original" zu speichern und von dieser Datei eine Kopie ohne Suffix für die Anpassungen zu erstellen. Nach den Anpassungen ist eine Kopie der veränderten Datei mit dem Suffix "_SW" zu speichern.

Bei "BibManagerHooks.php" ist in Funktion "onBeforePageDisplay(...)" am Anfang, vor Zeile 31 (Eindbindung der JS-Module), die Einbindung der css-Datei einzufügen:

  // für HAWK HHG eingefügt 2016-02-12
  $out->addModuleStyles( 'ext.bibManager.styles' );
Fehler im HTML-Code[Bearbeiten]

Bei der BibManager-Übesicht wird für jede Tabellenzeile am Ende ein statt eines erzeugt (auch schon in MW1.16). Im Verzeichnis "BibManager\includes\" in der Datei "bibManagerPagerList.php" in Zeile 140 den fehlenden Schrägstrich einfügen:

  $tablerow[] = '</tr>'; // Schrägstrich für schließendes Tag eingefügt 2012-09-17 G. Werner
Fehlende Hooks in Datei "Hooks.php"[Bearbeiten]

Folgende "Hooks" sind weder in der Datei "includes/BibManagerHooks.php" noch in einer anderen Datei vorhanden:

  • BibManagerBibTagBeforeTooltip, der in der Datei "BibManagerHooks.php" in der Funktion "getTooltip(...)" in Z.126 aufgerufen wird
  • BibManagerCreateBeforeTypeSelectFormCreate, der in der Datei "SpecialBibManagerCreate.php" in Z.50 aufgerufen wird
  • BibManagerEditBeforeFormCreate, der in der Datei "SpecialBibManagerEdit.php" in Z.106 aufgerufen wird
  • BibManagerGetFieldDefinitions, der in der Datei "BibManagerFieldsList.php" in der Funktion "getFieldDefinitions(..) in Z.158 aufgerufen wird
  • BibManagerGetTypeDefinitions, der in der Datei "BibManagerFieldsList.php" in der Funktion "getTypeDefinitions(..) in Z.237 aufgerufen wird
  • BibManagerValidateCitation, der in der Datei "BibManagerValidator.php" in der Funktion "validateCitation(...) in Z.49 aufgerufen wird
  • BibManagerGetIcons, der in der Datei "BibManagerHooks.php" in der Funktion "getIcons(...)" in Z.167 aufgerufen wird
  • BibManagerFormatEntry, der in der Datei "BibManagerHooks.php" in der Funktion "formatEntry(...)" in Z.350 aufgerufen wird
  • BibManagerPagerBeforeSearch, der in der Datei "BibManagerPagerList.php" in der Funktion "getQueryInfo(...)" in Z.18 aufgerufen wird

Folgende "Hooks"-Funktionen sind in der Datei "BibManagerHooks.php" vorhanden:

  • onLoadExtensionSchemaUpdates(...)
  • onBeforePageDisplay(...)
  • onParserFirstCallInit(...)
  • onBibTag(...)
  • getTooltip(...)
  • getIcons(...)
  • onBiblistTag(...)
  • onBibprintTag(...)
  • onSkinAfterContent(...)
  • formatEntry(...)
  • getTableEntry(...)
  • getTable(...)

Folgende "Hooks"-Funktionen aus der Datei "docs/Hooks.txt" sind nicht in der Datei "BibManagerHooks.php", sondern andernorts vorhanden:

  • validateCitation(...) in der Datei "includes/BibManagerValidator.php"
  • getFieldDefinitions(...) in der Datei "includes/BibManagerFieldsList.php"
  • getTypeDefinitions(...) in der Datei "includes/BibManagerFieldsList.php"

Folgende "Hooks"-Funktionen aus der Datei "docs/Hooks.txt" sind in keiner Datei vorhanden:

  • [BibTag]BeforeTooltip
  • [Create]BeforeTypeSelectFormCreate
  • [Edit]BeforeFormCreate
  • [Pager]BeforeSearch
Fehlerhafte Hyperlink-Erstellung bei Übersichtsseite[Bearbeiten]

Im Repositorium beim Willkommenstext oben auf der Seite "Bibliographien verwalten" erscheinen die Verweise "Bibliographieeintrag anlegen" und "Bibliographien importieren" als HTML-Code:

<a href="/index.php/Special:BibManagerCreate" title="Special:BibManagerCreate">Bibliographieeintrag anlegen
...
<a href="/index.php/Special:BibManagerImport" title="Special:BibManagerImport">

In der Datei "...\includes\specials\SpecialBibManagerList.php" wird in Z.30 "bm_list_welcome" nicht korrekt verarbeitet. Die Methode "->msg(...)" enthält 2 Parameter:

  • den Inhalt zu "bm_list_welcome" aus den Sprachdateien
  • die URLs, die die Angaben "$1" und "$2" in der Sprachdatei ersetzen soll

Die Methode "->escaped()" am Ende der Zeile muss geändert werden zu "->plain()"; auch "->text()" wäre möglich:

// for HAWK HHG changed 2018-12-07
$wgOut->addHTML( $this->msg( 'bm_list_welcome', $createLink, $importLink )->plain() ); //->escaped()

Anschließend ist eine Kopie der Datei mit dem Suffix "_SW" zu speichern.

Fehlerhafte Hyperlink-Erstellung bei neuem Eintrag und Eintragsbearbeitung[Bearbeiten]

Nach Betätigung der Schaltfläche "Speichern" erscheint der Verweis "Zurück zur Übersicht" als HTML-Code:

<a href="/salzwiki/index.php/Spezial:Bibliographieeintr%C3%A4ge_verwalten">Zurück zur Übersicht</a>

Der Fehler bei einem Neueintrag ist derselbe wie bei der Bearbeitung eines Eintrags, weil beim Speichern eines Neueintrags die Datei für Bearbeitungen "specialpages\BibManagerEdit.php" verwendet wird durch "Redirect" in Z.90ff.

Demnach wird in der Datei "SpecialBibManagerEdit.php" in Z.144 "bm_success_link-to-list" nicht korrekt verarbeitet. Die Methode "->msg(...)" enthält 2 Parameter:

  • den Inhalt zu "bm_success_link-to-list" aus den Sprachdateien
  • die URL, die die Angabe "$1" in der Sprachdatei ersetzen soll

Die Methode "->escaped()" am Ende der Zeile muss geändert werden zu "->plain()"; auch "->text()" wäre möglich:

// for HAWK HHG changed 2018-11-12
#$this->getOutput()->addHTML( $this->msg( 'bm_success_link-to-list', SpecialPage::getTitleFor( 'BibManagerList' )->getLocalURL() )->escaped() );
$this->getOutput()->addHTML( $this->msg( 'bm_success_link-to-list', SpecialPage::getTitleFor( 'BibManagerList' )->getLocalURL() )->plain() );

Anschließend ist eine Kopie der Datei mit dem Suffix "_SW" zu speichern.

Fehler beim Speichern nach Bearbeitung[Bearbeiten]

Der bearbeitete Datensatz kann nicht gespeichert werden, weil die Prüfung des Bearbeitungsmodus' fehlerhaft ist und der Datensatz wie ein Neueintrag auf einen bereits vorhandenen Zitatschlüssel überprüft wird.

Ursache ist, dass im Formular zur Bearbeitung eines Eintrags das entsprechende Element den Attributnamen "wpbm_edit_mode" statt "bm_edit_mode" aufweist.

Deshalb wird in der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerEdit.php" wie für MW1.23 in Z.69 "bm_edit_mode" zu "wpbm_edit_mode" geändert:

$editMode = $wgRequest->getBool( 'wpbm_edit_mode' ); #$editMode = $wgRequest->getBool( 'bm_edit_mode' ); für HAWK HHG geändert 2016-02-16

Vor den Änderungen wird die Datei "BibManagerEdit.php" in "BibManagerEdit_original.php" umbenannt und von dieser Datei eine Kopie namens "BibManagerEdit.php" für die Änderungen erstellt. Nach den Änderungen ist eine Kopie der veränderten Datei mit dem Suffix "_SW" zu speichern.

Das Formular enthält für den Zitatschlüssel ein weiteres Element mit dem Präfix "wpbm_..." statt "bm_..." im Attributnamen: "wpbm_bibtexCitation".

In der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerEdit.php" wird in der Funktion "execute(...)" in den Zeilen 61ff und 79ff mit $formDescriptor die Bezeichnung "bibtexCitation" und "edit_mode" ohne "wp" am Anfang festgelegt, aber bei der Formularerzeugung mit "wp" versehen. Es erfolgt jedoch keine Änderung, weil es sonst beim Versuch einen neuen Eintrag mit bereits vorhandener Kennung zu speichern folgende Fehler gibt:

  • die neue Kennung im Formularfeld "mb_bibtexCitation" lässt sich nicht bearbeiten
  • mit "Speichern" wird der bereits vorhandene Eintrag überschrieben

Diese Fehler wurden durch folgende Änderungen in der Datei "SpecialBibManagerEdit.php" in den Zeilen 61ff und 79ff jeweils bei $formDescriptor mit der Ergänzung des Attribut-Schlüssels "name" hervorgerufen:

$formDescriptor['bm_bibtexCitation'] = array(
  'class' => 'HTMLTextField',
  'label-message' => 'bm_citation',
  'name' => 'bm_bibtexCitation', // to prevent "wpbm_bibtexCitation", G. Werner for HAWK HHG, 2018-11-13
  'section' => 'citation',
  'required' => true,
  'validation-callback' => 'BibManagerValidator::validateCitation'
);
...
$formDescriptor['bm_edit_mode'] = array(
  'class' => 'HTMLHiddenField',
  'name' => 'bm_edit_mode', // to prevent "wpbm_edit_mode", G. Werner for HAWK HHG, 2018-11-13
  'default' => 1
);
Falscher Info-Text nach Löschvorgang[Bearbeiten]

Nachdem ein Eintrag gelöscht wurde, erscheint "Ihre Daten wurden erfolgreich gespeichert!" (auch schon in MW1.16).

In der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerDelete.php" in der Funktion "formSubmit(...)" wird in Z.94 fälschlicherweise "bm_success_save-complete" verwendet. Da es kein Text-Element "bm_success_delete" gibt, muss es in den Dateien "\i18n\[en|de|de-formal].json" für "en", "de" und "de-formal" in der Zeile nach "bm_success_save-complete" ergänzt werden, damit es in der Datei "BibManagerDelete.php" verwendet werden kann.

Nach den Anpassungen ist die Delete-Datei als Kopie mit dem Suffix "_SW" im Verzeichnis "specials/" und das Verzeichnis "i18n/" als Kopie "i18n_SW/" zu speichern.

//qqq.json Z.133f
  "bm_success_save-complete": "A success message",
  "bm_success_delete": "A success message",

//de.json Z.135f
  "bm_success_save-complete": "<div class=\"successbox\"><strong>Deine Daten wurden erfolgreich gespeichert!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
  "bm_success_delete": "<div class=\"successbox\"><strong>Die Daten wurden erfolgreich gelöscht!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",

//de-formal.json Z.135f
  "bm_success_save-complete": "<div class=\"successbox\"><strong>Ihre Daten wurden erfolgreich gespeichert!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
  "bm_success_delete": "<div class=\"successbox\"><strong>Die Daten wurden erfolgreich gelöscht!</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",

//en.json Z.135f
  "bm_success_save-complete": "<div class=\"successbox\"><strong>Your data was saved.</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",
  "bm_success_delete": "<div class=\"successbox\"><strong>The data were deleted.</strong></div><div class=\"visualClear\" id=\"mw-pref-clear\"></div>",

SpecialBibManagerDelete.php Z.92ff:

// for HAWK HHG changed to replace "save-complete" with "delete"-Text 2016-02-15
// and to replace "->escaped()" with "->plain()" 2018-11-12
if ( $result === true ) {
  $wgOut->addHtml( $this->msg( 'bm_success_delete')->plain() ); /*$this->msg( 'bm_success_save-complete')->escaped() );*/
  ...
}
Fehlerhafte Hyperlink-Erstellung nach Löschvorgang[Bearbeiten]

Wie in der Datei "SpecialBibManagerEdit.php" in Z.144 wird auch in der Datei "SpecialBibManagerDelete.php" in Z.98ff das Element "bm_success_link-to-list" nicht korrekt verarbeitet. Die Methode "->msg(...)" enthält 2 Parameter:

  • den Inhalt zu "bm_success_link-to-list" aus den Sprachdateien
  • die URL, die die Angabe "$1" in der Sprachdatei ersetzen soll

Die Methode "->escaped()" am Ende der Zeile muss geändert werden zu "->plain()"; auch "->text()" wäre möglich:

if ( $result ==== true ) {
 $wgOut->addHtml( $this->msg( 'bm_success_save-complete' )->plain()); /*$wgOut->addHtml( $this->msg( 'bm_success_save-complete' )->escaped() );*/
 $wgOut->addHtml(
  $this->msg(
   'bm_success_link-to-list',
   SpecialPage::getTitleFor( 'BibManagerList' )->getLocalURL() 
  )->plain() /* )->escaped() */
 );
}
Fehler beim Löschen[Bearbeiten]

Nach der Bestätigung zum Löschen erscheint die Fehlermeldung:

Der Datensatz "" wurde nicht gefunden!

Im Zwischenschritt "Sind Sie sicher ..." sind im Löschformular zwei versteckte Formularfelder enthalten:

  • id="mw-input-wpbm-delete" und name="wpbm_delete"
  • id="mw-input-wpbm_bibtexCitation" und name="wpbm_bibtexCitation" mit der Datensatz-Kennung

In der Datei "SpecialBibManagerDelete.php" wird in Z.59ff mit $formDescriptor die Bezeichnung ohne "wp" am Anfang festgelegt, aber bei der Formularerzeugung mit "wp" versehen. Somit weicht die Bezeichnung für das bestätigte Löschen von der Bezeichnung von der Zwischenseite ab. Denn in der BibManager-Übersicht wird für die Löschzwischenseite der Parameter "bm_bibtexCitation" mit der Datensatz-Kennung übermittelt.

Außerdem muss der Wahrheits-Wert aus dem Formular für "bm_delete" in Z.88 als String verglichen werden.

Deshalb wird in der Datei "\extensions\BibManager\includes\specials\SpecialBibManagerDelete.php" in der Funktion "execute(...)" in den Zeilen 60ff und 64ff jeweils $formDescriptor mit dem Attribut-Schlüssel "name" ergänzt sowie in der Funktion "formSubmit(...)" in Z.88 der String-Vergleich angepasst:

$formDescriptor = array(
 'bm_delete' => array(
  'class' => 'HTMLHiddenField',
  'default' => true,
  'name' => 'bm_delete', // to prevent "wpbm_delete", G. Werner for HAWK HHG, 2016-02-09
 ),
 'bm_bibtexCitation' = array(
  'class' => 'HTMLHiddenField',
  'default' => $citation,
  'name' => 'bm_bibtexCitation', // to prevent "wpbm_bibtexCitation", G. Werner for HAWK HHG, 2016-02-09
 )
);
...
if ( empty( $formData['bm_delete']) || $formData['bm_delete'] !== (string)true ) // for HAWK HHG completed with "(string)" 2016-12-09
...
Ehemals Fehler bei SpecialPageAliases[Bearbeiten]

Bei BibManager v1.1.0 mussten in der Datei "BibManager.alias.php" die Array-Schlüssel von $specialPageAliases wie z. B. 'BibManagerCreate' für die jeweilige Sprache in Kleinbuchstaben angegeben werden, damit die BibManager-Seiten bei den Spezialseiten aufgelistet werden, allerdings werden die Seiten dann nicht mehr gefunden, wenn man auf die Verweise klickt.

Einzige Lösung scheint zu sein, in der Datei "BibManager.php" die Zeile 66 auszukommentieren:

#$wgExtensionMessagesFiles['BibManagerAlias'] = $dir . 'BibManager.alias.php'; // Fehlfunktion in MW 1.23
Ehemals fehlerhafte Funktionen[Bearbeiten]

BibManager v1.1.0 (REL1.23) verwendet in mehreren Dateien die Funktion "wfLoadExtensionMessages()", die seit MW 1.21 nicht mehr existiert, so dass die Zeile in folgenden Dateien auskommentiert werden muss:

  • "\specialpages\BibManagerCreate_body.php" in Zeile 7
  • "\specialpages\BibManagerEdit_body.php" in Zeile 7
  • "\specialpages\BibManagerDelete_body.php" in Zeile 7
  • "\specialpages\BibManagerList_body.php" in Zeile 7
  • "\specialpages\BibManagerListAuthors_body.php" in Zeile 7

BibManager v1.1.0 (REL1.23) verwendet in der Datei "\specialpages\BibManagerList_body.php" in den Zeilen 25 und 29 die Methode "SpecialPageFactory::getPage('...')->getDescription()", die einen Fehler "Call to a member function getDescription() on null" verursacht, weil "getPage('...') als Ergebnis NULL hat und "getDescription()" nicht darauf angewendet werden kann. Ursache ist der Name bei "getPage('...')", der mit dem Alias ersetzt werden muss. Der Alias der Sprachvarianten befindet sich in der Datei "\BibManager\BibManager.alias.php". Um den Alias für "getPage('...')" zu erhalten, wird die Methode "SpecialPageFactory::getLocalNameFor('...')" benötigt:

// $linkDescription eingefügt und $createLink angepasst 2015-12-01 G. Werner für HAWK HHG
$linkDescription = array();
if(SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerCreate'))===NULL){
  $linkDescription['Create'] = NULL;
}
else{
  $linkDescription['Create'] = SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerCreate'))->getDescription();
}
if(SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerImport'))===NULL){
  $linkDescription['Import'] = NULL;
}
else{
  $linkDescription['Import'] = SpecialPageFactory::getPage(SpecialPageFactory::getLocalNameFor('BibManagerImport'))->getDescription();
}
$createLink = Linker::link(
  SpecialPage::getTitleFor('BibManagerCreate'),
  /*SpecialPageFactory::getPage('BibManagerCreate')->getDescription()*/
  $linkDescription['Create']
);
$importLink = Linker::link(
  SpecialPage::getTitleFor('BibManagerImport'),
  /*SpecialPageFactory::getPage('BibManagerImport')->getDescription()*/
  $linkDescription['BibManagerImport']
);

BibManager-Berechtigungen[Bearbeiten]

Rechte-Vergabe für BibManager

In der Datei "LocalSettings.php" werden zwischen "include_once(...)" und dem Array für die Zitierweise folgende Berechtigungen definiert, wobei im deutschen Salzwiki "Redakteur" statt "Editor" anzugeben ist:

## Berechtigungen eingefügt 2012-05-11
$wgGroupPermissions['*']['bibmanagercreate'] = false;
$wgGroupPermissions['*']['bibmanageredit'] = false;
$wgGroupPermissions['*']['bibmanagerdelete'] = false;
$wgGroupPermissions['autor']['bibmanagercreate'] = true;
$wgGroupPermissions['autor']['bibmanageredit'] = true;
#$wgGroupPermissions['autor']['bibmanagerdelete'] = false;
$wgGroupPermissions['Redakteur|Editor']['bibmanagercreate'] = true;
$wgGroupPermissions['Redakteur|Editor']['bibmanageredit'] = true;
$wgGroupPermissions['Redakteur|Editor']['bibmanagerdelete'] = true;
$wgGroupPermissions['sysop']['bibmanagercreate'] = true;
$wgGroupPermissions['sysop']['bibmanageredit'] = true;
$wgGroupPermissions['sysop']['bibmanagerdelete'] = true;

Entfernen der Löschen- und Editier-Buttons ohne Rechte-Vergabe

Das Entfernen der Schaltflächen funktionierte bis April 2012 auf nachfolgend beschriebene Weise, solange es noch kein Rechte-Management für den BibManager gab.

In der Datei BibManager/includes/BibManagerPagerList.php werden in den Zeilen 57ff dazu die Variablen "$editLink" und "$deleteLink" entfernt.

Mit ein wenig PHP-Kenntnissen kann man auch die Anzeige des Links schaltbar machen:

  $tablerow = array ( );

$tablerow[] = ''; $tablerow[] = ' ' . $citationLink . ''; $tablerow[] = ' ' . $format . ''; #$tablerow[] = ' ' . $editLink . $deleteLink . ''; if($_REQUEST['showDelete'] == 1){$tablerow[] = ' ' . $editLink . $deleteLink . '';} else{$tablerow[] = ' ' . $editLink . '';} $tablerow[] = ' ' . $exportLink . ''; $tablerow[] = ''; So würde der Link nur angezeigt werden, wenn in der Url "&showDelete=1" vorkommt. Wenn die Löschen-Funktion vollständig deaktiviert und nicht nur den Link versteckt werden soll, müssen in der Datei BibManager/BibManager.php folgende Zeilen auskommentiert werden: $wgAutoloadClasses['BibManagerDelete'] = $dir . 'specialpages/BibManagerDelete_body.php'; $wgSpecialPages['BibManagerDelete'] = 'BibManagerDelete';

Anleitung anpassen und installieren[Bearbeiten]

Die von halloWelt! gelieferte Datei "manual.xml" enthält alle 4 Anleitungen: Benutzerhandbuch, User manual, Administrationshandbuch und Admin manual, die jeweils durch die <page>-Elemente gegliedert sind.

  • Für das SalzWiki ist nur der <page>-Bereich "BibManager:Benutzerhandbuch" für den Import relevant, so dass eine Kopie der Datei unter "bibmanager_manual_user_de.xml" gespeichert wird und in dieser Datei die 3 anderen <page>-Bereiche entfernt werden.
  • Für das SaltWiki und das Repositorium ist jeweils nur der <page>-Bereich "BibManager:User manual" für den Import relevant, so dass eine Kopie der Datei unter "bibmanager_manual_user_en.xml" gespeichert wird und in dieser Datei die 3 anderen <page>-Bereiche entfernt werden.
  • Der Bilder-Import für das Handbuch findet nur im Repositorium statt.

Anleitung anpassen[Bearbeiten]

Im <title>-Element nach <page> ist jeweils "HalloWelt:" vor "BibManager:..." zu entfernen:

<page>
 <title>HalloWelt:BibManager:...</title>

Ebenso ist der Teil "Project:" vor "BibManager:..." in den Admin-Anleitungen am Ende des <text>-Elementes zu entfernen:

  [[Project:BibManager:...]]
  [[Project:BibManager:...]]</text>
  </revision>
</page>

Anleitung im Wiki installieren[Bearbeiten]

  • Die angepasste xml-Datei über "Spezialseiten->Import" ins Wiki laden.
  • Anschließend sind die Bilder für das Project:BibManager:... im Repositorium mittels DOS-Konsole und PHP hochzuladen, um sie ins Wiki zu bringen:
D:\
xampp\php\php.exe xampp\htdocs\saltwiki\maintenance\importImages.php xampp\htdocs\saltwiki\images_en

BibManagerAdditionalPublications (Extension-Code)[Bearbeiten]

Diese Erweiterung ergänzt die Erweiterung "BibManager" für Volltexte und DOIs bei den BibTex-Attributen.

"BibManagerAdditionalPublications" basiert auf der Erweiterung "SaltWiki" für MW1.16 und wurde für die Verwendung mit MW1.31 vom Hornemann Institut angepasst:

  • Dateistruktur
  • Dateibezeichnungen
  • Definitionen
  • php-Code

Dateistruktur[Bearbeiten]

Im Verzeichnis der Erweiterung "BibManagerAdditionalPublications\" befinden sich für MW1.31 folgende Dateien und Unterverzeichnisse:

  • BibManagerAdditionalPublications.php: neu, abgeleitet von der Datei "BibManager.php" der gleichnamigen Erweiterung
  • BibManagerAdditionalPublicationsHooks.php: neu als Klasse mit den Funktionen aus der Datei SaltWiki.php
  • extension.json: neu, abgeleitet von der gleichnamigen Datei aus der Erweiterung "BibManager" und von den Angaben in der Datei "SaltWiki.php"
  • i18n\: neu, Verzeichnis mit einzelnen json-Sprachdateien, abgeleitet aus den jeweiligen Sprachen-Blöcken der Datei "SaltWiki.i18n.php"
    • de.json
    • de-formal.json
    • en.json
    • qqq.json
  • patch-bibmanager_additionalpublications.sql: umbenannt von "patch-bibmanager.sql" in der Erweiterung "SaltWiki"
  • resources\: neu, nach Vorbild der Erweiterung "BibManager"
    • images\: neu für Icons, nach Vorbild der Erweiterung "BibManager"
      • link.png [Kopie aus Erweiterung "BibManager"]
      • link_error.png [Kopie aus Erweiterung "BibManager"]

In der Erweiterung "SaltWiki" für MW1.16 gab es folgende Dateien:

  • SaltWiki.php
  • SaltWiki.i18n.php
  • patch-bibmanager.sql

Installationshinweis[Bearbeiten]

Anpassung SQL-Datei[Bearbeiten]

Für Wiki-Updates mit der MW-Datei "\maintenance\update.php" ist in der Datei "patch-bibmanager_additionalpublications.sql" das jeweilige Wiki-Präfix einzufügen.

SalzWiki/SaltWiki:

-- Add addtional fields to the bibmanager table
ALTER TABLE /*$wgDBprefix*/sw_bibmanager
 ADD bm_fulltext text NOT NULL,
 ADD bm_doi text NOT NULL;

Repository:

-- Add addtional fields to the bibmanager table
ALTER TABLE /*$wgDBprefix*/sr_bibmanager
 ADD bm_fulltext text NOT NULL,
 ADD bm_doi text NOT NULL;

neue Datei "extension.json"[Bearbeiten]

{
 "name": "BibManagerAdditionalPublications",
 "version": "1.1",
 "author": [
  "HAWK HHG Hornemann Institut",
  "Hallo Welt! Medienwerkstatt GmbH",
  "Robert Vogel (Hallo Welt!)",
  "Tobias Weichart (Hallo Welt!)",
  "Gunnar Werner (HAWK HHG)"
 ],
 "url": "https://hallowelt.com",
 "descriptionmsg": "bm_additionalpublications-desc",
 "license-name": "GPL-2.0-or-later",
 "type": "specialpage",
 "requires": {
  "MediaWiki": ">= 1.29.0",
  "extensions": {
   "BibManager": "*"
  }
 },
 "MessagesDirs": {
  "BibManagerAdditionalPublications": [
   "i18n"
  ]
 },
 "AutoloadClasses": {
  "BibManagerAdditionalPublicationsHooks": "BibManagerAdditionalPublicationsHooks.php"
 },
 "Hooks": {
  "BibManagerBibTagBeforeTooltip": "BibManagerAdditionalPublicationsHooks::onBibManagerBibTagBeforeTooltip",
  "BibManagerValidateCitation": "BibManagerAdditionalPublicationsHooks::onBibManagerValidateCitation",
  "BibManagerGetFieldDefinitions": "BibManagerAdditionalPublicationsHooks::onBibManagerGetFieldDefinitions",
  "BibManagerGetTypeDefinitions": "BibManagerAdditionalPublicationsHooks::onBibManagerGetTypeDefinitions",
  "BibManagerGetIcons": "BibManagerAdditionalPublicationsHooks::onBibManagerGetIcons",
  "BibManagerFormatEntry": "BibManagerAdditionalPublicationsHooks::onBibManagerFormatEntry",
  "BibManagerPagerBeforeSearch": "BibManagerAdditionalPublicationsHooks::onBibManagerChangeSearchValues",
  "LoadExtensionSchemaUpdates": "BibManagerAdditionalPublicationsHooks::onLoadExtensionSchemaUpdates"		
 },
 "manifest_version": 2
}


neue "Hooks"-Klasse mit angepassten Methodennamen[Bearbeiten]

Für die "Hooks" wird die Datei "SaltWiki.php" zu "BibManagerAdditionalPublicationsHooks.php" umbenannt und werden die Funktionen zu Methoden in einer neuen Klasse "BibManagerAdditionalPublicationsHooks".

Die Funktionsnamen mit dem Präfix "sw_on..." werden geändert zu den Methodennamen "on...".

Außerdem werden wie bei "BibManager" einleitend die "MediaWikiServices" aufgerufen.

Um Fehlermeldungen zu vermeiden, wenn $entry['bm_fulltext'] ein Leerzeichen oder Steuerzeichen enthält, wird Z.107 mit einer zusätzlichen Bedingung unter Verwendung von "trim()" versehen.

use MediaWiki\MediaWikiServices;

class BibManagerAdditionalPublicationsHooks {

  public static function onBibManagerChangeSearchValues ( $sSearchType, $sSearchTerm, &$sCond ) {
    if ( (strtolower ( $sSearchType ) == "url" || strtolower ( $sSearchType ) == "doi" || strtolower ( $sSearchType ) == "fulltext") && empty ( $sSearchTerm ) ) {
      $sCond = "bm_" . $sSearchType . " != ''";
    }
    return true;
  }

  public static function onBibManagerBibTagBeforeTooltip ( &$aBibEntry ) {
    ...
  }

  public static function onBibManagerValidateCitation ( $citation, $allData, &$result ) {
		if ( strpos ( $citation, ':' ) === false ) {
			$result = wfMessage ( 'bm_additionalpublications-citation-format-error' )->escaped();
		}
		return true;
  }

  public static function onBibManagerGetFieldDefinitions ( &$fieldDefinitions ) {
    //TODO: Fields "DOI" und "fulltext" Felder von hier injizieren.
    $customFields = array (
      'doi' => array (
        'class' => 'HTMLTextField',
        'label' => wfMessage( 'bm_doi' )->escaped(),
        'default' => 'https://'
        //'validation-callback' => 'BibManagerValidator::validateUrl',
        //validate ?
      ), // Custom field by Hornemann Intitut
      'fulltext' => array (
        'rows' => 5,
        'class' => 'HTMLTextField',
        'label' => wfMessage( 'bm_fulltext' )->escaped(),
        #'default' => 'http://'
        //'validation-callback' => 'BibManagerFieldsList::validateUrl'
        //validate ?
      ) // Custom field by Hornemann Intitut
    );

    $fieldDefinitions = $fieldDefinitions + $customFields;
    return true;
  }
  ...
  public static function onLoadExtensionSchemaUpdates ( $updater = null ) {
    if ( $updater === null ) {
      // <= 1.16 support
      global $wgExtNewFields;
      $wgExtNewFields[] = array (
        'bibmanager',
        'bm_fulltext',
        dirname ( __FILE__ ) . '/patch-bibmanager_additionalpublications.sql'
      );
    } else {
      // >= 1.17 support
      $updater -> addExtensionUpdate (
        array (
          'addField',
          'bibmanager',
          dirname ( __FILE__ ) . '/patch-bibmanager_additionalpublications.sql',
          true
        )
      );
    }
    return true;
  }

  public static function onBibManagerGetIcons ( $entry, &$icons ) {
    global $wgScriptPath; #, $wgUser; // $wgUser->getSkin()->makeMediaLinkObj() for MW1.16
	
    // for HAWK HHG expanded with condition for space or control character 2019-04-12
    if ( isset ( $entry['bm_fulltext'] ) && !empty ( $entry['bm_fulltext'] ) && trim($entry['bm_fulltext'])!=="" ) {
      $icon = 'link_error.png';
      $file = RepoGroup::singleton () -> findFile ( $entry['bm_fulltext'] );
      $url = '';
      if ( $file === false ) {
        $fileTitle = Title::newFromText ( $entry['bm_fulltext'], NS_FILE );
        // TODO RBV (23.12.11 14:33): Hacky but okay...
        #$url = $wgUser -> getSkin () -> makeMediaLinkObj ( $fileTitle );
        $url = Linker::makeMediaLinkObj( $fileTitle );
        $url = preg_replace ( '#<a.*?href="(.*?)".*?</a>#si', '$1', $url );
      } else {
        $url = $file -> getTitle () -> getLinkURL ();
        $icon = 'link.png';
      }
      // for HAWK HHG und MW1.23LTS path changed from "client" to "resources", 2016-06-14
      $icons['fulltext'] = array (
        'src' => $wgScriptPath . '/extensions/BibManager/resources/images/' . $icon,
        'title' => 'bm_tooltip_fulltext',
        'href' => $url
      );
    }
    return true;
  }
  ...
}

Fehler (Extension-Code)[Bearbeiten]

Sprachdatei "de" enthält Sie-Form[Bearbeiten]

In der Sprachdatei "de.json" enthält das Element "saltwiki-citation-format-error" die Sie-Form wie bei "de-formal" und wird korrigiert:

'saltwiki-citation-format-error' => 'Unerlaubtes Format. Bitte gib das Zitat in der Form <em>Autor:Jahr</em> an, z.B. <em>Nachname:2011</em>.',
Fehlendes Icon "Link zum Volltext" bei Detailseite[Bearbeiten]

Da sich in der verwendeten BibManager-Version der Dateipfad für eine Grafik geändert hat, muss der Code angepasst werden.

Auf der Detailseite eines Bibliographieeintrags wird rechts statt des Icons nur der Alternativtext "Link zum Volltext" bzw. "Fulltext link" angezeigt, weil der Dateipfad nicht mehr stimmt. In der Funktion "sw_onBibManagerGetIcons(...)" wird in Z.161 eine Grafik aus dem Verzeichnis "\extensions\BibManager\client\images\" statt aus dem Verzeichnis "\extensions\BibManager\resources\images\" verwendet, weshalb der Alternativtext der Grafik angezeigt wird; es ist folgende Datei anzupassen:

  • "\extensions\SaltWiki\SaltWiki.php"

Bei "SaltWiki.php" ist in der Funktion "sw_onBibManagerGetIcons(...)" vor Zeile 160 ein Kommentar einzufügen und in Zeile 161 der Pfad von "client" zu "resources" anzupassen:

function sw_onBibManagerGetIcons ( $entry, &$icons) {

...
// für HAWK HHG und MW1.23LTS Pfad von "client" zu "resources" angepasst 2016-06-14
$icons['fulltext'] = array (
 'src' = $wgScriptPath . '/extensions/BibManager/resources/images/' . $icon,
 ...
);
...

}

Veralteter Code[Bearbeiten]

Es werden in der Datei "SaltWiki.php" noch folgende Methoden verwendet:

  • "wfMsg()" anstatt von "wfMessage()->escaped()"
  • "$wgUser -> getSkin () -> makeMediaLinkObj ( $fileTitle )" anstatt von "Linker::makeMediaLinkObj( $fileTitle )
Fehler bei einzelnen Seiten[Bearbeiten]

Auf den Seiten "Halit" und "Test", zu erreichen über "Startseite => Chloride", wird eine Fehlermeldung erzeugt:

[f05c554c78bb93f1e7833805] /index.php/Test TypeError from line 783 of D:\noxampp\apache\htdocs\salzwiki\includes\Linker.php: Argument 1 passed to Linker::makeMediaLinkFile() must be an instance of Title, null given, called in D:\noxampp\apache\htdocs\salzwiki\includes\Linker.php on line 768

Backtrace:

#0 D:\noxampp\apache\htdocs\salzwiki\includes\Linker.php(768): Linker::makeMediaLinkFile(NULL, boolean, string)
#1 D:\noxampp\apache\htdocs\salzwiki\extensions\BibManagerAdditionalPublications\BibManagerAdditionalPublicationsHooks.php(115): Linker::makeMediaLinkObj(NULL)
#2 D:\noxampp\apache\htdocs\salzwiki\includes\Hooks.php(177): BibManagerAdditionalPublicationsHooks::onBibManagerGetIcons(array, array)
#3 D:\noxampp\apache\htdocs\salzwiki\includes\Hooks.php(205): Hooks::callHook(string, array, array, NULL)
#4 D:\noxampp\apache\htdocs\salzwiki\extensions\BibManager\includes\BibManagerHooks.php(170): Hooks::run(string, array)
#5 D:\noxampp\apache\htdocs\salzwiki\extensions\BibManager\includes\BibManagerHooks.php(402): BibManagerHooks::getIcons(array)
#6 D:\noxampp\apache\htdocs\salzwiki\extensions\BibManager\includes\BibManagerHooks.php(307): BibManagerHooks::getTable(array)
#7 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Parser.php(3888): BibManagerHooks::onBibprintTag(NULL, array, Parser, PPFrame_DOM)
#8 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Preprocessor_DOM.php(1362): Parser->extensionSubstitution(array, PPFrame_DOM)
#9 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Parser.php(2942): PPFrame_DOM->expand(DOMElement, integer)
#10 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Parser.php(1293): Parser->replaceVariables(string)
#11 D:\noxampp\apache\htdocs\salzwiki\includes\parser\Parser.php(443): Parser->internalParse(string)
#12 D:\noxampp\apache\htdocs\salzwiki\includes\content\WikitextContent.php(323): Parser->parse(string, Title, ParserOptions, boolean, boolean, integer)
#13 D:\noxampp\apache\htdocs\salzwiki\includes\content\AbstractContent.php(516): WikitextContent->fillParserOutput(Title, integer, ParserOptions, boolean, ParserOutput)
#14 D:\noxampp\apache\htdocs\salzwiki\includes\poolcounter\PoolWorkArticleView.php(144): AbstractContent->getParserOutput(Title, integer, ParserOptions)
#15 D:\noxampp\apache\htdocs\salzwiki\includes\poolcounter\PoolCounterWork.php(123): PoolWorkArticleView->doWork()
#16 D:\noxampp\apache\htdocs\salzwiki\includes\page\Article.php(604): PoolCounterWork->execute()
#17 D:\noxampp\apache\htdocs\salzwiki\includes\actions\ViewAction.php(68): Article->view()
#18 D:\noxampp\apache\htdocs\salzwiki\includes\MediaWiki.php(500): ViewAction->show()
#19 D:\noxampp\apache\htdocs\salzwiki\includes\MediaWiki.php(294): MediaWiki->performAction(Article, Title)
#20 D:\noxampp\apache\htdocs\salzwiki\includes\MediaWiki.php(861): MediaWiki->performRequest()
#21 D:\noxampp\apache\htdocs\salzwiki\includes\MediaWiki.php(524): MediaWiki->main()
#22 D:\noxampp\apache\htdocs\salzwiki\index.php(42): MediaWiki->run()
#23 {main}
<pre>

=== CategoryTree (JS) ===

Die Erweiterung ist ab MW1.31 standardmäßig enthalten und dient zur Darstellung der Kategorienbäume, damit schnell den Artikeln und Dokumenten die richtigen Kategorien zugewiesen werden können.

Angeblich ist in den Versionen REL1.27, REL1.29, REL1.30 und REL1.31 die Aktivierung von JavaScript (JS) im Browser erforderlich, allerdings wird beispielsweise für "Salz" ein Kategorienbaum, bei dem ohne JS die 3-eckigen Grafiken zum Aufklappen/Zuklappen fehlen, angezeigt.

==== Installationshinweis (entfällt) ====

Der Hinweis für die Erweiterung entfällt bei MW1.31.

In vorangegangenen Versionen war für die Variable $wgUseAjax, die es ab MW1.31 nicht mehr gibt, der Wahrheitswert "true" in der Datei "LocalSettings.php" einzufügen:
<pre>
$wgUseAjax = true; ##muss von false auf true geändert werden, falls noch nicht geschehen

CharacterEscapes[Bearbeiten]

"CharacterEscapes" wird nicht mehr installiert, denn die Erweiterung ist nur als Beta-Version 0.9.1 von 2007-10-02 erhältlich (Stand 2018-10-12) und seit MW 1.12 verzichtbar, siehe auch

Die Erweiterung wurde zusammen mit den Erweiterungen "ControlStructureFunctions" und "LOParserFunctions" für die Hilfeseiten bei den alten Wiki-Versionen verwendet. Sie benötigt die Erweiterungen "ControlStructureFunctions" und "Variables"; letztere wird nicht bei Wikis der Wikimedia Foundation aktiviert.

CharInsert[Bearbeiten]

Diese Extension dient dazu Editierhilfen zum Einfügen von Spezialzeichen und Formatierungshilfen zur Verfügung zu stellen.Diese Hilfe wird im Bearbeitungsmodus und beim UpLoad-Formular zur Verfügung gestellt. Diese Erweiterung wurde Testweise installiert und dann wieder deaktiviert.

Die Extension wird bei http://www.mediawiki.org/wiki/Extension:CharInsert heruntergeladen und in ...Extensions/CharInsert extrahiert.

In die localsettings ist einzufügen:

require_once("$IP/extensions/CharInsert/CharInsert.php");

In Mediawiki:Edittools werden die entsprechenden Zeichen bzw. Hilfen mit

<charinsert> .. </charinsert> 

eingefügt.

Cite[Bearbeiten]

Die Erweiterung "Cite" dient zum Erstellen von Fußnoten in Wiki-Artikeln. In MW1.31 erzeugte die Core-Erweiterung "Cite" unter PHP 7.2.2 einen Fehler "Uncommitted DB writes".

  • Erweiterung unter http://www.mediawiki.org/wiki/Cite herunterladen.
  • Extrahieren der Dateien nach "\[wikiname]\extensions\Cite\"
  • Erweiterung in der Datei "LocalSettings.php" einfügen
require_once("$IP/extensions/Cite/Cite.php");

Siehe näheres zum Einfügen von Fußnoten unter https://salzwiki.de/index.php/Autor#Fu.C3.9Fnoten.

CiteThisPage[Bearbeiten]

Die Erweiterung "CiteThisPage" dient zum Erstellen von Zitierhilfen für Wiki-Artikel. Sie ist erst seit MW Version 1.24 einsetzbar und wurde in jener Version unter der Bezeichnung "Special:Cite" als Zusatzerweiterung zur Erweiterung "Cite" mit der Datei "SpecialCite.php" angeboten. Ab MW 1.25 handelt es sich bei "CiteThisPage" ("Zitierhilfe") um eine eigenständige Erweiterung, siehe https://www.mediawiki.org/wiki/MediaWiki_1.25/de-formal#Schwerwiegende_%C3%84nderungen.

Mit der Erweiterung wird im Menü links unter "Werkzeuge" bzw. "tools" ein Verweis "Seite zitieren" bzw. "Cite this page" zur Spezialseite "Special:CiteThisPage" angezeigt.

Damit die Spezialseite mit der Zitierhilfe auch ohne Anmeldung angezeigt wird, muss in der Datei "LocalSettings.php" ein zusätzlicher Eintrag im "Hook" vorgenommen werden.

// Spezialseiten-Inhalte nur für bestimmte Gruppen anzeigen, ansonsten nur den Seitentitel
...
  $aSpecialPages = array(
    ...
    "CiteThisPage" => "SpecialCiteThisPage",
  )
...
// MW1.31
wfLoadExtension( 'CiteThisPage' );
// MW1.24
require_once("$IP/extensions/CiteThisPage/CiteThisPage.php");

ConfirmEdit[Bearbeiten]

Registrierte Nutzer/innen dürfen auf die Diskussionseiten schreiben. Damit dies etwas sicherer vonstatten geht, wird mit ConfirmEdit das Captcha "QuestyCaptcha" eingeführt (bisher nur bei Salzwiki und Saltwiki, nicht bei Repositorium).

## MW 1.31
wfLoadExtensions(['ConfirmEdit', 'ConfirmEdit/QuestyCaptcha']);

## MW 1.23
#require_once( "$IP/extensions/ConfirmEdit/ConfirmEdit.php" );
...
## Erweiterung ConfirmEdit mit Captcha
#$wgCaptchaClass = 'QuestyCaptcha'; // für MW 1.23 und 1.16

ContactPage - Kontaktseite (Wiki-Code de-formal)[Bearbeiten]

ACHTUNG: Nach jedem MediaWiki-Update muss überprüft werden, ob die vorgenommenen Änderungen in den jeweiligen Dateien noch existieren. Deshalb ist von den geänderten Dateien jeweils eine Kopie "..._SW.json" bzw. "..._SW.php" zu speichern.

Für Mitteilungen allgemeiner Art wird eine Kontaktformular-Seite eingesetzt, die im Repositorium nur nach Anmeldung zur Verfügung steht. Bei Versand einer Kopie an eine im Formular eingetragene E-Mail-Adresse steht im Betreff: "Kopie Ihrer Nachricht an Hornemann (von [Ihr Name])".

Für das Kontaktformular muss als Empfangsadresse ein bestehendes Wiki-Konto angegeben werden und muss als E-Mail-Absender wegen Authentifizierung beim Versand die Angabe von $wgPasswordSender in der Datei "LocalSettings.php" übernommen werden:

$wgContactConfig['default'] = array(
 'RecipientUser' => 'Hornemann', //'WikiUser' // Must be a valid account //vormals $wgContactUser
 ...
 'SenderEmail' => null, // Defaults to $wgPasswordSender, may be changed as required
...);

Im jeweiligen Wiki-Konto "Hornemann" wird als E-Mail-Adresse "service@salzwiki.de" bzw. "service@saltwiki.net" angegeben. Es kann auch "salzwiki.fb@hawk-hhg.de" bzw. "saltwiki.fb@hawk-hhg.de" angegeben werden.

Für das Formular wird die Erweiterung "ContactPage" benutzt. Die Sie-Form der Wiki-Übersetzungsdatei "[wikiname]\languages\i18n\de-formal.json" ist um einen Eintrag für "emailccme" zu ergänzen.

Das Absenden des Kontaktformulars wird bei Nutzung ohne Anmeldung zum Verhindern von Spam über ein Captcha abgesichert. Hierfür sind bei der Erweiterung für MW 1.23 (REL1_23) Anpassungen am Code der Dateien "ContactPage_body.php", "\i18n\de.json" und "\i18n\en.json" sowie "\i18n\qqq.json" erforderlich.

  • Dateien von https://www.mediawiki.org/wiki/Extension:ContactPage herunterladen und die Dateien unter "Extensions/ContactPage" speichern.
  • In den Übersetzungsdateien Zeilen einfügen (siehe weiter unten); MW1.31 "de.json", MW1.23 auch "en.json" und "qqq.json"
  • In der Wiki-Systemtexte-Datei "[wikiname]\languages\i18n\de-formal.json" vor "'emailccsubject '=> '...'" das Array-Element "'emailccme' => 'Sende eine Kopie der E-Mail an mich'," einfügen und an Sie-Form anpassen: "Eine Kopie der E-Mail an mich senden"
    • Bei MediaWiki 1.23 im Verzeichnis "[wikiverzeichnis]\languages\i18n\" aus der Datei "de.json" aus Zeile 1759 in Datei "de-formal.json" in Zeile 217 einfügen
  • Erweiterung mit Variablenzuweisungen für $wgContactConfig in der Datei "LocalSettings.php" einfügen
    • Bei MW1.31 das Attribut "'cols' => 80," auskommentieren, weil sonst durch die MW-Datei "HTMLTextAreaField.php" mit der Funktion "getInputOOUI(...)" ein "OOUIHTMLForm"-Fehlerhinweis ausgegeben wird

MW 1.31[Bearbeiten]

MW 1.31 Code-Anpassungen[Bearbeiten]

Anzupassende Dateien:

  • "[wikiverzeichnis]\languages\i18n\de-formal.json"
  • "...\extensions\ContactPage\i18n\de.json", "...en.json"
  • "...\extensions\ContactPage\includes\SpecialContact.php"
  • "LocalSettings.php"

In der Datei "LocalSettings.php" muss bei MW1.31 die Anzahl der Reihen des Textfeldes auskommentiert werden:

## Kontakt-Formular, SpecialPage
wfLoadExtension("ContactPage.php");
$wgContactConfig['default'] = array(
  'RecipientUser' => 'Hornemann', //'WikiUser' // Must be the name of a valid account //vormals $wgContactUser
  'SenderName'=> 'Kontaktformular ' . $wgSitename, //"Contact Form " // "Contact Form on" needs to be translated //vormals $wgContactSenderName
  'SenderEmail'=> null // Defaults to $wgPasswordSender, may be changed as required
  'RequireDetails'=> true, // Whether users will be required to supply a name and an email address on Special:Contact
  'IncludeIP'=> false, // Whether the form will include a checkbox offering to put the IP address of the submitter in the subject line
  'AdditonalFields'=> array(
    'Text'=> array(
      'label-message'=> 'E-Mail-Nachricht', //'e-mail-message' //'emailmessage',
      'type'=> 'textarea',
      'rows'=> 20,
      #'cols'=> 80,
      'required' => true, //Pflichtfeld
    ),
  ),
  // Added in MW 1.26
  #'DisplayFormat' => 'table', // See HTMLForm documentation for available values.
  #'RLModules' => array(), // Resource loader modules to add to the form display page.
  #'RLStyleModules' => array(), // Resource loader CSS modules to add to the form display page.
);

In der Datei "\extensions\ContactPage\i18n\de.json" Ergänzung bei "authors" hinter "Umherirrender", außerdem zusätzliche Captcha-Texte einfügen:

{
  "metadata": {
    "authors": [
      ...
      "Umherirrender",
      "Gunnar Werner HAWK HHG"
    ]
  },
  ...
  "contactpage-captcha": "Um die Nachricht senden zu können, bitte das Captcha lösen ([[Special:Captcha/help|weitere Informationen]])",
  "contactpage-captcha-failed": "Captcha-Test nicht bestanden! ([[Special:Captcha/help|weitere Informationen]])",
}
...
if ( $this->useCaptcha() && !$wgCaptcha->passCaptchaFromRequest( $request, $user ) ) {
  return $this->msg( 'contactpage-captcha-error' )->plain();
}

In der Datei "\extensions\ContactPage\i18n\en.json" Ergänzung bei "authors" hinter "Umherirrender", außerdem zusätzliche Captcha-Texte einfügen:

{
  "metadata": {
    "authors": [
      ...
      "Umherirrender",
      "Gunnar Werner HAWK HHG"
    ]
  },
  ...
  "contactpage-captcha": "Please fill out to send the message ([[Special:Captcha/help|further information]])",
  "contactpage-captcha-failed": "Captcha-Test not right! ([[Special:Captcha/help|further information]])",
}
...
if ( $this->useCaptcha() && !$wgCaptcha->passCaptchaFromRequest( $request, $user ) ) {
  return $this->msg( 'contactpage-captcha-error' )->plain();
}

Folgende Anpassungen entfallen bei MW1.31 in Datei "...\includes\SpecialContact.php", da der Code enthalten ist in den Zeilen ab 196, 205, 268, 406, 410, 472:

...
 if ( $this->useCaptcha() ) {
  $formItems['Captcha'] = array(
    ...
  );
 }
...
 $form = HTMLForm::factory( 'ooui',
  $formItems, $this->getContext(), "contactpage-{$this->formType}"
 );
...
public function processInput( $formData ) {
  global $wgUserEmailUseReplyTo, $wgPasswordSender, $wgCaptcha;
...
  // Stolen from Special:EmailUser
  $error = '';
  ...
  private function getYesOrNoMsg( $value ) {
    return $this->msg( $value ? 'htmlform-yes' : 'htmlform-no' )->inContentLanguage()->text();
  }
  
  /**
  * @return boolean True if CAPTCHA should be used, false otherwise
  */
  private function useCaptcha() {
    global $wgCaptchaClass, $wgCaptchaTriggers;
 
    return $wgCaptchaClass &&
      isset( $wgCaptchaTriggers['contactpage'] ) &&
      $wgCaptchaTriggers['contactpage'] &&
      !$this->getUser()->isAllowed( 'skipcaptcha' );
  }

  /**
  * @return string CAPTCHA form HTML
  */
  private function getCaptcha() {
    // NOTE: make sure we have a session. May be required for CAPTCHAs to work.
    \MediaWiki\Session\SessionManager::getGlobalSession()->persist();
 
    $captcha = ConfirmEditHooks::getInstance();
    $captcha->setTrigger( 'contactpage' );
    $captcha->setAction( 'contact' );
    ...
    return '<div class="captcha">' .
      $formInformation['html'] .
      "</div>\n";
  }

MW 1.27[Bearbeiten]

  • Datei "composer.json" fehlt
  • Datei "extension.json" fehlt
  • vorangegangene Angaben zu MW 1.23 für MW 1.27 anpassen

MW 1.23[Bearbeiten]

Für Upgrades von MW-Versionen bis einschließlich 1.22 zu neueren Versionen ab 1.23 sind die Angaben in der Datei "LocalSettings.php" anzupassen, siehe auch https://www.mediawiki.org/wiki/Extension:ContactPage.

MW 1.23 Code-Anpassungen[Bearbeiten]

Zur Code-Anpassung siehe auch https://gerrit.wikimedia.org/r/#/c/156052/

Anzupassende Dateien:

  • "[wikiverzeichnis]\languages\i18n\de-formal.json"
  • "...\extensions\ContactPage\i18n\de.json", "...de-formal.json", "...en.json" und "...qqq.json"
  • "...\extensions\ContactPage\includes\ContactPage_body.php"

In der Datei "\extensions\ContactPage\i18n\qqq.json" Ergänzung bei "authors" hinter "Shirayuki" sowie in Zeile 25 am Ende ein Komma und darunter eine Zeile für "contactpage-captcha-error" einfügen:

{
  "metadata": {
    "authors": [
      ...
      "Shirayuki",
      "Gunnar Werner HAWK HHG"
    ]
  },
  ...
  "contactpage-usermailererror": "...",
  "contactpage-captcha-error": "Error message displayed when ehter was a CAPTCHA error (i.e. the user failed to enter the correct CAPTCHA, or didn't enter one at all, etc.)"
}

In der Datei "\extensions\ContactPage\i18n\en.json" Ergänzung bei "authors" hinter "Reedy" sowie in Zeile 20 am Ende ein Komma einfügen und darunter eine Zeile für "contactpage-captcha-error" einfügen:

{
  "metadata": {
    "authors": [
      ...
      "Umherirrender",
      "Gunnar Werner HAWK HHG"
    ]
  },
  ...
  "contactpage-usermailererror": "Mail object returned error:",
  "contactpage-captcha-error": "CAPTCHA error"
}

In der Datei "\extensions\ContactPage\i18n\de.json" Ergänzung bei "authors" hinter "Umherirrender", außerdem die Menüleisten-Bezeichnung "Kontaktseite" sowie Captcha-Texte einfügen:

{
  "metadata": {
    "authors": [
      ...
      "Umherirrender",
      "Gunnar Werner HAWK HHG"
    ]
  },
  "contact": "Kontaktseite",
  ...
  "contactpage-captcha": "Um die Nachricht senden zu können, bitte das Captcha lösen ([[Special:Captcha/help|weitere Informationen]])",
  "contactpage-captcha-error": "Captcha-Fehlfunktion",
  "contactpage-captcha-failed": "Captcha-Test nicht bestanden! ([[Special:Captcha/help|weitere Informationen]])"
}

Datei "ContactPage_body.php" vor Zeile 185 und nach Zeile 217+11 (228), vor Zeile 341+11+1 (353), nach Zeile 393+11+1+6 (411):

...
// Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
if ( $this->useCaptcha() ) {
  $formItems['Captcha'] = array(
    'label-message' => 'captcha-label',
    'type' => 'info',
    'default' => $this->getCaptcha(),
    'raw' => true,
  );
}

$form = new HTMLForm( $formItems, $this->getContext(), "contactpage-{$this->formType}" );
...
public function processInput( $formData ) {
  global $wgUserEmailUseReplyTo, $wgPasswordSender;
  global $wgCaptcha; // Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
...
// Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
if ( $this->useCaptcha() && !$wgCaptcha->passCaptcha() ) {
  // TODO proper i18n message
  return wfMessage( 'contactpage-captcha-error' )->plain();
}
// Stolen from Special:EmailUser
$error = '';
...
  private static function getYesOrNoMsg( $value ) {
    return wfMessage( $value ? 'htmlform-yes' : 'htmlform-no' )->inContentLanguage()->text();
  }
  // Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
  /**
  * @return boolean True if CAPTCHA should be used, false otherwise
  */
  private function useCaptcha() {
    global $wgCaptchaClass, $wgCaptchaTriggers;
 
    return $wgCaptchaClass &&
      isset( $wgCaptchaTriggers['contactpage'] ) &&
      $wgCaptchaTriggers['contactpage'] &&
      !$this->getUser()->isAllowed( 'skipcaptcha' );
  }
  // Captcha-Verwendung eingefügt für HAWK HHG 2015-12-07
  /**
  * @return string CAPTCHA form HTML
  */
  private function getCaptcha() {
    // NOTE: make sure we have a session. May be required for CAPTCHAs to work.
    wfSetupSession();
 
    $captcha = ConfirmEditHooks::getInstance();
    $captcha->trigger = 'contactpage';
    $captcha->action = 'contact';
 
    return '<div class="captcha">' .
      $captcha->getForm() .
      "</div>\n";
  }
}

LocalSettings.php[Bearbeiten]

// Version 2.2 für MediaWiki 1.25
#wfLoadExtension("ContactPage.php");
// Version 2.2 für MediaWiki 1.23
require_once( "$IP/extensions/ContactPage/ContactPage.php" );
$wgContactConfig['default'] = array(
  'RecipientUser' => 'Hornemann', //'WikiUser' // Must be the name of a valid account //vormals $wgContactUser
  'SenderName'=> 'Kontaktformular ' . $wgSitename, //"Contact Form " // "Contact Form on" needs to be translated //vormals $wgContactSenderName
  'SenderEmail'=> null // Defaults to $wgPasswordSender, may be changed as required
  'RequireDetails'=> true, // Whether users will be required to supply a name and an email address on Special:Contact
  'IncludeIP'=> false, // Whether the form will include a checkbox offering to put the IP address of the submitter in the subject line
  'AdditonalFields'=> array(
    'Text'=> array(
      'label-message'=> 'E-Mail-Nachricht', //'e-mail-message' //'emailmessage',
      'type'=> 'textarea',
      'rows'=> 20,
      'cols'=> 80,
      'required' => true, //Pflichtfeld
    ),
  ),
  // Added in MW 1.26
  #'DisplayFormat' => 'table', // See HTMLForm documentation for available values.
  #'RLModules' => array(), // Resource loader modules to add to the form display page.
  #'RLStyleModules' => array(), // Resource loader CSS modules to add to the form display page.
);

ControlStructureFunctions, LOParserFunctions[Bearbeiten]

"ControlStructureFunctions" und "LOParserFunctions" werden nicht mehr installiert, da sie ab MW1.12 in der Erweiterung "ParserFunctions", die seit MW1.18 Teil des MW-Kerns ist, vereinigt wurden.

"LOParserFunctions" enthält in den neueren Versionen alle Bestandteile aus der Erweiterung "ParserFunctions" ohne die Teile von "ControlStructureFunctions", so dass theoretisch "ControlStructureFunctions" und "LOParserFunctions" gemeinsam statt "ParserFunctions" eingesetzt werden können.

"ControlStructureFunctions" war in älteren MW-Versionen notwendig für Anweisungen mit #if, #switch, #while und #do-while (z. B. beim Einsetzen des Seitentitels im Kopf von Vorlage:Infobox_Salz und bei den Hilfe-Seiten.

In den Salz-Wikis mit MW1.16 gab es noch Probleme mit der Erweiterung "ParserFunctions". Möglicherweise ist eine Erklärung dafür unter https://www.mediawiki.org/w/index.php?oldid=469082 zu finden:

Don't These Parser Functions Already Exist?
Yes and no. The ParserFunctions extension has
 #if, #ifeq, #ifexpr, #switch, and #ifexist, 
and Loop Functions extension has
 #for and #foreach. 
The limitation of all those parser functions is 
that wiki markup is parsed before any parameters are passed to the underlying function. 
These functions bypass that limitation through character escapes (see below), 
and allow wiki markup to be parsed after the parameters have been passed.

Für weitere Informationen siehe

CreativeCommonsRdf[Bearbeiten]

Die Erweiterung sollte ab MW-Version 1.19 die Variable "$wgEnableCreativeCommonsRdf" in der Datei "LocalSettings.php" ersetzen, hat aber immer noch Beta-Status (Stand 2018-10-12, 2015-09-21) und wird deshalb nicht verwendet, zumal der Beispiel-Code für die Einbindung nicht mehr vom MW-Kern unterstützt wird.

Die 3 Dateien der Erweiterung wurden zuletzt bearbeitet 2012-10-02, 2011-12-13 und 2011-05-26. Sie können heruntergeladen werden bei

DynamicPageList[Bearbeiten]

Es gibt 3 Erweiterungen mit der Bezeichnung "DynamicPageList", wobei die erste mit dem Alias "Intersection" nicht verwendet wird (siehe auch https://www.mediawiki.org/wiki/Extension:DPL).

MediaWiki 1.27[Bearbeiten]

wfLoadExtension('DynamicPageList3');

Inline SVG Extension[Bearbeiten]

Diese Erweiterung wird ab Mediawiki 1.23 nicht mehr verwendet, weil die üblichen Browser inzwischen SVG-Elemente darstellen können.

Die php-Datei "SVGtag.php" sorgt dafür, dass Inline-SVG-Code im Upload-Verzeichnis gespeichert und in einem "iframe" geladen wird. Dies ist erforderlich für ältere Browser, insbesondere für Internet Explorer bis einschließlich Version 8.

require_once("$IP/extensions/SVGtag.php");

Interwiki[Bearbeiten]

Die Erweiterung "Interwiki" ist in MediaWiki seit Version 1.21 enthalten und hieß ehemals "SpecialInterwiki", bevor sie umbenannt wurde. Sie ist in MW1.31 standardmäßig aktiviert und wird in SalzWiki, SaltWiki sowie im Repositorium verwendet. Die Erweiterung kann ansonsten bei https://www.mediawiki.org/wiki/Extension:Interwiki heruntergeladen und in das Verzeichnis "[wikiname]\extensions\Interwiki" extrahiert werden.

Diese Erweiterung fügt die Seite Special:Interwiki zu Mediawiki hinzu, um die Interwiki-Tabelle sehen und editieren zu können. Änderungen werden auch in der Datenbank-Tabelle "interwiki" übernommen.

Mit der InterWiki-Tabelle kann man einerseits einfach zu Inhalten in anderen Wikis verlinken, auch zu Wikipedia, andererseits ist es damit möglich durch das Setzen von $wgEnableScaryTranscluding = true; Inhalte eines anderen Wikis zu "transcludieren", siehe auch https://www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding.

Allerdings kommt es mit MW1.31 bei Seiten mit Vorschaubildern (Thumbnails) aus dem Repositorium zu Fehlermeldungen, wenn der Standardwert von $wgUseImageResize=true nicht angepasst wird; siehe auch https://www.mediawiki.org/wiki/Manual:$wgUseImageResize.

In der Datei "LocalSettings.php" eines jeden Wikis ist einzufügen:

...
$wgEnalbeUploads = false; # Salzwiki/Saltwiki: false, Repository: true
## Vorschaubilder von Repositorium-Dateien benötigen in SalzWiki/SaltWiki "UseImageResize=false"
$wgUseImageResize = false; # Salzwiki/Saltwiki: false, Repositorium: true
$wgUseImageMagick = true; # Salzwiki/Saltwiki: true, Repository: false
...
#$wgTranscludeCacheExpiry = 60;
$wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', @filemtime(__FILE__)) );
...
#$wgLocalInterwiki = strtolower( $wgSitename );
$wgLocalInterwikis = array("salzwiki", "saltwiki", "repository");
...
## Zulassen von Interwiki-Verweisen, für MW1.23 statt ".../Interwiki/SpecialInterwiki.php" bei MW1.16
## to allow interwiki-linking, für Version MW1.23 anderer Dateiname
#require_once("$IP/extensions/Interwiki/SpecialInterwiki.php"); ## MW1.16
#require_once("$IP/extensions/Interwiki/Interwiki.php"); ## MW1.23, ist bei MW1.31 Standard-Erweiterung
$wgEnableScaryTranscluding = true; ## Seiten von anderen Wikis können eingebunden werden
...
## to allow editing Special:Interwiki
$wgGroupPermissions['*']['interwiki'] = false;
$wgGroupPermissions['sysop']['interwiki'] = true; ## nur sysops können die InterWiki-Tabelle ändern und sehen

Anpassungen für geänderte Server-Adresse[Bearbeiten]

Für die Umstellung der Wikis von IP-Adressen auf Domain-Adressen sind die Datenbank-Einträge der Tabelle "..._interwiki" zu bearbeiten. Hierzu wird unter "Daten und Werkzeuge => Interwikidaten ansehen und bearbeiten" bzw. "Data and Tools => View and edit interwiki data" die entsprechende Spezial-Seite "Spezial:Interwikitabelle" bzw. "Special:Interwiki" aufgerufen.

Anpassungen für HTTPS[Bearbeiten]

Bei InterWikis in der Tabelle, für die sowohl "Als lokales Wiki definiert" als auch "Einbinden zulässig" aktiviert ist, die URL von "http" zu "https" ändern. Beispiel:

wikipedia | https://de.wikipedia.org/wiki/$1 | ja | ja

JavaScript[Bearbeiten]

Entfällt bei MW 1.23.11 LTS und wird ersetzt durch eine Anpassung in der Datei "skins\MonoBook.php".

Die Erweiterung hat den Status "unmaintained" (Stand 2015-09-15); die Version 3.0.8 (2012-02-15) kann wegen einer ungültigen Internetadresse nicht heruntergeladen werden, doch gibt es auf der Internetseite https://www.organicdesign.co.nz/Extension:Javascript den Hinweis, dass die Erweiterung obsolet ist, seitdem MediaWiki den ResourceLoader bereitstellt, siehe https://www.mediawiki.org/wiki/ResourceLoader.

Diese Erweiterung diente zusammen mit der von S. Reher gelieferten Datei "customizeSidebar.js" dazu, den Navigationsbereich "Werkzeuge" in der Sidebar entsprechend dem Anmeldestatus zu manipulieren - siehe hierzu Sidebar anpassen. Dies funktionierte allerdings nur, wenn beim Browser JavaScript aktiviert war.

sichtbare Toolbox-Menüpunkte[Bearbeiten]

  • SalzWiki: alle Gruppen und User
    • Druckversion
  • SaltWiki: alle Gruppen und User
    • Printable version
  • Repository: alle Gruppen und User
    • Printable version

ausgeblendete Toolbox-Menüpunkte[Bearbeiten]

  • SalzWiki: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
    • "Links auf diese Seite" (Special:WhatLinksHere/Main_Page)
    • "Änderungen an verlinkten Seiten" (Spezial:%C3%84nderungen_an_verlinkten_Seiten)
    • "Hochladen" (Special:Upload)
    • "Spezialseiten" (Special:SpecialPages)
    • "Permanenter Link" (Main_page&oldid=921)
    • "Seiteninformationen" ([Seitentitel]&action=info])
  • SaltWiki: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
    • "What links here" (Special:WhatLinksHere/Main_Page)
    • "Related changes" (Special:RecentChangesLinked)
    • "Hochladen" (Special:Upload)
    • "Spezialseiten" (Special:SpecialPages)
    • "Permanent link" (Main_page&oldid=921)
    • "Page information" ([Seitentitel]&action=info])
  • Repository: Nicht-Mitglieder der Gruppen "autor", "Administrators", "forschung"
    • "Links auf diese Seite" (Special:WhatLinksHere/Main_Page)
    • "Änderungen an verlinkten Seiten" (Spezial:%C3%84nderungen_an_verlinkten_Seiten)
    • "Datei Hochladen" (Special:Upload)
    • "Spezialseiten" (Spezial:Spezialseiten)
    • "Permanent link" (Main_page&oldid=9522)
    • "Seiteninformationen" ([Seitentitel]&action=info])

Lingo[Bearbeiten]

Die Erweiterung "Lingo" wird bei den Wikis seit dem Upgrade auf MW 1.23 als Ersatz für die Erweiterung "Terminology" verwendet und kann heruntergeladen werden bei https://www.mediawiki.org/wiki/Extension:Lingo.

Die Dateien werden entpackt in das Verzeichnis "extensions\Lingo".

In der Datei "LocalSettings.php" folgende Zeile einfügen:

wfLoadExtensions('Lingo');

Math (Wiki-Code)[Bearbeiten]

"Math" kann heruntergeladen werden von https://www.mediawiki.org/wiki/Extension:Math/de. Es ist inzwischen eine Erweiterung; bei MW1.16 wurde hingegen die Datei "[wikiname]\includes\Math.php" angepasst.

Die Erweiterung "Math" ist für die Darstellung von Formeln erforderlich und nutzt standardmäßig "texvc" (TeX validator and converter), wobei das mitgelieferte "texvc" nur unter Linux genutzt werden kann und für Windows erst kompiliert werden muss und problembehaftet ist.

Somit scheidet "texvc" unter Windows aus. Stattdessen muss für die Nutzung von GhostScript, ImageMagick und MikTeX wie bei MW1.16 der Wiki-Code angepasst und die Klasse "LatexRender" in der Datei "Math_SW.php" mit Anpassungen als Klasse "MathLatexRender" weiterverwendet werden. Der Quelltext von "LatexRender" für alte MediaWikiVersionen wie MW1.16 steht zur Verfügung bei "https://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Windows/math.php".

Getestet werden kann die Erweiterung "Math" über die Kommandozeile:

D:
cd xampp\htdocs\[wikiname]
D:\xampp\php\php.exe tests\phpunit\phpunit.php extensions\Math\tests\

Zur Installation und Konfiguration von GhostScript, ImageMagick und MikTeX siehe Eingabe_von_Formeln_mittels_Tex_(Wiki-Code).

Symbol im Editor[Bearbeiten]

Bei Verwendung des einfachen Standard-Editors wird diesem automatisch ein Symbol für "Math" mit den entsprechenden Funktionen hinzugefügt.

Bei Verwendung der Erweiterung "WikiEditor" muss die Editor-Erweiterung angepasst werden, um das "Math"-Symbol mit den Bearbeitungsfunktionen nutzen zu können.

Installation "Math"[Bearbeiten]

  • Die heruntergeladene Erweiterung entpacken in das Verzeichnis "extensions\"
  • Die Dateien "Math.php" und "MathRenderer.php" umbenennen in "Math_original.php" und "MathRenderer_original.php"; davon Kopien "Math.php" und "MathRenderer.php" erstellen und die Kopien wie nachfolgend beschrieben anpassen
  • Die Erweiterung in der Datei "LocalSettings.php" einbinden
    wfLoadExtensions( 'Math' );
  • Existenz der Datenbanktabelle "math" überprüfen, ansonsten erstellen
    • entweder SQL-Befehl für MySQL/MariaDB aus der Datei "\extensions\Math\db\math.sql" mit phpMyAdmin ausführen
    • oder per Kommandozeile eine Aktualisierung ausführen, aber nur wenn die Tabelle noch nicht exisitiert:
      D:\xampp\php\php.exe D:\xampp\htdocs\[wikiname]\maintenance\update.php

ImageMagick und MikTeX für Math statt Texvc[Bearbeiten]

Bei MW1.23 soll zwar "Math" ohne "ImageMagick" verwendet werden (siehe https://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Windows#ImageMagick), doch funktioniert dies nicht mit "texvc" unter Windows. Deshalb wird in der Datei "LocalSettings.php" weiterhin "ImageMagick" mit "true" aktiviert statt mit "false" deaktiviert und außerdem "Texvc" für die Datei "Math.hooks.php" deaktiviert:

## Vorschaubilder von Repositorium-Dateien benötigen in Salzwiki/Saltwiki "UseImageMagick=false"
$wgUseImageResize = false; # SalzWiki/SaltWiki: false, Repository: true;
$wgUseImageMagick = true; # Salzwiki/Saltwiki: true, Repository: auskommentiert
## ImageMagick
#$wgImageMagickConvertCommand = 'D:\texmf\imagick\convert.exe';
#$wgImageMagickIdentifyCommand = 'D:\texmf\imagick\identify.exe';
$wgImageMagickConvertCommand = 'D:/texmf/imagick/convert.exe';
$wgImageMagickIdentifyCommand = 'D:/texmf/imagick/identify.exe';
## TeX
#$wgLaTexCommand = 'D:\texmf\miktex\bin\latex.exe';
#$wgDvipsCommand = 'D:\texmf\miktex\bin\dvips.exe';
$wgLaTexCommand = 'D:/texmf/miktex/bin/latex.exe';
$wgDvipsCommand = 'D:/texmf/miktex/bin/dvips.exe';
$wgSVGConverter = 'ImageMagick';
$wgSVGConverters = array(
# 'ImageMagick' => '"D:\texmf\imagick\convert.exe" -background white $input PNG:$output',
  'ImageMagick' => '"D:/texmf/imagick/convert.exe" -background white $input PNG:$output',
);
require_once "$IP/extensions/Math/Math.php";
$wgMathDisableTexFilter = true; // in Math.hooks.php

Veränderungen bei wesentlichen Math-Klassen[Bearbeiten]

  • MW1.31 mit "class MathLaTeXML extends MathMathML" und "class MathRenderer"
  • MW1.23 mit "class MathLatexRender extends MathRenderer"
  • MW1.16 mit "class LatexRender" und "class MathRenderer"

Restbase-Fehler[Bearbeiten]

Bei MW1.31 erscheint beispielsweise auf der Seite https://www.salzwiki.de/index.php/Hilfe:Latex eine Fehlermeldung "Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server ...". Dies kann folgende Ursachen haben:

Folgende RestbaseURL-Angabe in der Datei "LocalSettings.php" zeigte keine Wirkung:

wfLoadExtension("Math");
$wgMathDisableTexFilter = true; // in Math.hooks.php
$wgMathFullRestbaseURL= 'https://en.wikipedia.org/api/rest_';

Folgende Anpassung in der Datei "...\includes\libs\MultiHttpClient.php" in Z.378 zeigte keine Wirkung:

#if ( preg_match( "/^(HTTP\/1\.[01]) (\d{3}) (.*)/", $header, $matches ) ) {
if ( preg_match( "/^(HTTP\/[12](?:\.[01])?) (\d{3}) (.*)/", $header, $matches ) ) {
...
Anpassungen "Math.php" und "MathRenderer.php" (Wiki-Code)[Bearbeiten]

Anpassungen bei MW1.23 bzw. MW1.16:

  • in der Datei "Math.php" zwischen Z.191 und Z.192 die Klasse "LatexRender" hinzufügen
#$wgAutoloadClasses['MathLatexRender.php'] // für HAWK HHG eingefügt 2016-04-25
  • in der Datei "MathRenderer.php" bei der Funktion "getRenderer(...)" in Z.122f bei "default:"
default: // für HAWK HHG angepasst 2016-04-25
$renderer = new MathLatexRender( $tex, $params ); #$renderer = new MathTexvc( $tex, $params );
  • von den beiden Dateien eine Sicherungskopie "Math_SW.php" und "MathRender_SW.php" vorsorglich für Änderungen durch Wiki-Updates speichern
Anpassungen Klasse "LatexRender"[Bearbeiten]

In der alten Datei "Math.php" bzw. "Math_SW.php" bei MW1.16 waren 2 Klassen, nämlich die Klasse "MathRenderer" und die Klasse "LatexRender" enthalten, wobei "MathRenderer" im Vergleich zum Original nur rudimentär vorhanden war, um ein Objekt der Klasse, "LatexRender" zu erzeugen.

Aus diesen beiden Klassen wird für MW1.23 die Klasse "MathLatexRender" als Sub-Klasse der Klasse "MathRenderer" aus der Erweiterung "Math".

Anstatt der Klasse "MathRenderer" unterhalb der Klasse "LatexRender" wird nun in der Klasse "LatexRender" die Funktion "renderMath()" durch Umbenennung und Anpassung als Konstruktor-Funktion "__constructor(...)" verwendet, wobei die Konstruktor-Funktion auch die Funktion "LatexRender(...)", die bisher zur Initialisierung als Konstruktor diente, ersetzt.

Hinzu kommt eine neue Funktion "render()", die durch die Definition in der Datei "MathRenderer.php" erforderlich ist.

Zudem werden die Variablen $url und $text als Klassen-Variablen definiert.

Außerdem wird in der Funktion "cleanTemporaryDirectory()" eine Ergänzung vorgenommen, damit vor dem Löschen der Dateien deren Existenz überprüft wird, um Warnungen zu vermeiden.

Zusätzlich werden für neuere PHP-Versionen bei "htmlentities(...)" die Parameter für XHTML und UTF-8 hinzugefügt.

MW1.16 mit "class LatexRender" und "class MathRenderer" MW1.23 mit "class MathLatexRender extends MathRenderer":

/**
 * LaTeX Rendering Class
 * Copyright (C) 2003  Benjamin Zeiss <zeiss@math.uni-goettingen.de>
 * -----------------------------------------------------------------------
 * Changed to MathLatexRender Class for HAWK HHG by Gunnar Werner (C) 2016
 * to be used with MW 1.23 LTS and extension Math REL-1_23...
 * for Windows with GhostScript+ImageMagick+MikTeX instead of Texvc
 * Notice 1: In file Math.php loading this class has to be added:
 * $wgAutoloadClasses['MathLatexRender'] = $dir . 'MathLatexRender.php';
 * Notice 2: In file MathRenderer.php new default object $renderer has to be changed:
 * $renderer = new MathLatexRender( $tex, $params ); #$renderer = new MathTexvc( $tex, $params );
 * -----------------------------------------------------------------------
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
...
 * @author Benjamin Zeiss <zeiss@math.uni-goettingen.de>
 * => @author Gunnar Werner for HAWK HHG <gunnar.werner@hawk-hhg.de>
 * @version v0.8 => v0.8.2016.05
 * @package latexrender => class MathLatexRender for extension Math
...
*/
...
// "extends MathRenderer" new by changes 2016
class MathLatexRender extends MathRenderer {
  ...
  // new by changes 2016
  var $url = "";
  var $text = "";
  ...
  /* function replaced with function __constructor() below by changes 2016
  function LatexRender($picture_path,$picture_path_httpd,$tmp_dir) {
    ...
  }
  */
  // new constructor combining old function LatexRender()
  // and function renderMath() from old class MathRenderer
  // by changes 2016
  public function __construct ($latex_formula, $params = array() ) {
    global $wgMathDirectory,
           $wgMathPath,
           $wgTmpDirectory,
           $wgLaTexCommand,
           $wgDvipsCommand,
           $wgImageMagickConvertCommand,
           $wgImageMagickIdentifyCommand;

    $latex_formula = '\displaystyle ' . $latex_formula;

    // from old function LatexRender()
    $this->_picture_path = $wgMathDirectory;
    $this->_picture_path_httpd = $wgMathPath;
    $this->_tmp_dir = $wgTmpDirectory;
    $this->_tmp_filename = md5(rand());

    // check Math dir
    if(!file_exists($wgMathDirectory)){@mkdir($wgMathDirectory);}
    if(!file_exists($wgTmpDirectory)){@mkdir($wgTmpDirectory);}

    // Objects $latex and $url replaced with $this by changes 2016
    $this->_latex_path = $wgLaTexCommand;
    $this->_dvips_path = $wgDvipsCommand;
    $this->_convert_path = $wgImageMagickConvertCommand;
    $this->_identify_path = $wgImageMagickIdentifyCommand;

    $this->url = $this->getFormulaURL($latex_formula);

    // htmlentities for newer PHP versions changed 2016
    $alt_latex_formula = htmlentities($latex_formula, ENT_QUOTES|ENT_XHTML, "UTF-8");
    $alt_latex_formula = str_replace("\r", "", $alt_latex_formula);
    $alt_latex_formula = str_replace("\n", "", $alt_latex_formula);
    $alt_latex_formula = str_replace('\displaystyle ', "", $alt_latex_formula);

    if($this->url != false){
      $this->text = '<img src="'.$this->url.'" title="'.$alt_latex_formula.'" alt="'.$alt_latex_formula.'" />';
    }
    else{
      $this->text = '[Unparseable or potentially dangerous latex formula. Error '.$this->_errorcode.' '.$this->_errorextra.']';
    }
  }
  ...
  // new for abstract function in "MathRenderer.php" by changes 2016
  public function render(){
    return $this->text."\n";
  }
  ...
  function renderLatex($latex_formula) {
    ...
    // create temporary dvi file
    ...
    $status_code = exec($command);
    // added checking file by changes 2016
    if (!$status_code || !file_exists($this->_tmp_filename.".dvi")) {
      ...
      $this->_errorcode = 4;
      return false;
    }
    ...
  }
  ...
  function cleanTemporaryDirectory() {
    ...
    // check existence before deleting to prevent warnings added by changes 2016
    /*
    unlink($this->_tmp_dir."/".$this->_tmp_filename.".tex");
    ...
    */
    $file_types = array("tex", "aux", "log", "dvi", "ps", $this->_image_format);
    foreach($file_types as $f_typ){
      $tmp_file = $this->_tmp_dir."/".$this->_tmp_filename.".".$f_typ;
      if(file_exists($tmp_file)){
        unlink($tmp_file);
      }
      $tmp_file = "";
    }

    chdir($current_dir);
  }
}

LaTeXML für Math statt Texvc[Bearbeiten]

Da LaTeXML nur bei einfachen Formeln funktioniert, kommt es nicht als Alternative zu Texvc in Betracht.

In der Datei "readme" gibt es folgende Hinweise:

  • Seit MW1.19 beschränken sich die Rendering-Optionen auf "Always PNG" und "Leave it as TeX".
  • Statt Bildern kann "MathML" mittels "LaTeXML" verwendet werden
    • Für LaTeXML ist "php5-curl" erforderlich; bei Windows ist es im Verzeichnis "\php\ext\" die Datei "php_curl.dll", die als Modul in der Datei "php.ini" eingebunden sein muss
    • In der Datei "LocalSettings.php" wird LaTeXML für die Konvertierung zu MathML verwendet: "$wgMathUseLaTeXML = true;"
    • In der Datei "LocalSettings.php" wird für anonyme Seitenaufrufe angegeben: "$wgDefaultUserOptions['math'] = MW_MATH_LATEXML"
    • Empfohlen wird eine Core-Version von wmf/1.22wmf7 oder neuer

Texvc für Math kompilieren[Bearbeiten]

Für die Kompilierung ist "MinGW" gegenüber "Cygwin" vorzuziehen, weil es unabhängig von den dll-Dateien und deren MS-Lizenzen mit der MSVC-Runtime funktioniert (siehe http://stackoverflow.com/questions/771756/what-is-the-difference-between-cygwin-and-mingw).

Da für "MinGW" keine verwertbare Ausgangsdatei zur Verfügung steht - , "makefile" wird nicht akzeptiert -, müssen "Cygwin" und "OCaml" (Version 4.02.3 32Bit + findlib + batteries) installiert werden (Dauer ca. 20 Min.). "OCaml" kann bei http://caml.inria.fr oder bei http://protz.github.io/ocaml-installer/ heruntergeladen werden.

Cygwin

Während der Installation von "OCaml" in das Verzeichnis "D:\texmf\" wird zusätzlich "Cygwin" im Verzeichnis "C:\cygwin\" installiert, sofern noch nicht vorhanden.

Für die Installation von "Cygwin" muss zum Herunterladen ein Mirror-Server ausgewählt werden, z. B. ftp://ftp.hawo.stw.uni-erlangen.de.

Vor dem Kompilieren müssen Dateien angepasst werden (siehe https://www.mediawiki.org/wiki/Texvc#Windows und https://www.mediawiki.org/wiki/MWWRender.ml):

  • \Math\math\render.ml Z.42 und Z.48 (2 Backslashes statt einem Schrägstrich)
...finalpath^"\\"^md5...
...finalpath^"\\"^md5...

MinGW

"MinGW" (2013-10-26) kann als Installationsmanager, der während der Installation die ausgewählten "Packages" aus dem Internet lädt (Dauer ca. 10 Min.), heruntergeladen werden bei https://sourceforge.net/projects/mingw/files/ (Stand 2016-04-29).

"MinGW" wird als 32Bit-Version im Verzeichnis "C:\MinGW\" installiert und wird nicht in der Systemsteuerung bei den installierten Programmen aufgelistet. Das Programm-Unterverzeichnis "bin\" muss bei der Umgebungsvariablen "Path" hinzugefügt und der Server danach neu gestartet werden.

Im Installationsmanager bei "Basic Setup" "All Packages" alle Packages von "MinGW", aber nicht "MSYS" aktivieren. Danach im Menü "Installation => Apply changes" auswählen.

Kompilieren (siehe auch http://www.mingw.org/wiki/mingw_for_first_time_users_howto):

  • Die DOS-Kommandozeile als Administrator öffnen
  • zum "Math"-Verzeichnis wechseln
  • Befehl zum Kompilieren eingeben
C:\MinGW\bin\gcc makefile -o texvc.exe

Fehlermeldung: "Das Programm kann nicht gestartet werden, da libiconv-2.dll auf dem Computer fehlt."

In "Systemsteuerung => Alle Systemsteuerungselemente => System => Erweiterte Systemeinstellungen => Umgebungsvariablen" bei "Path" am Ende einfügen:

;C:\MinGW\bin\

MultimediaViewer (JavaScript, fehlerhaft)[Bearbeiten]

Die Erweiterung "MultimediaViewer" kursiert auch unter der Bezeichnung "MediaViewer", siehe auch https://www.mediawiki.org/wiki/Hellp:Extension:Media_Viewer/de. Sie ist seit MediaWiki 1.31 standardmäßig als Kernerweiterung enthalten.

Diese Erweiterung verursacht bei Browsern mit aktiviertem "JavaScript" Fehlermeldungen bei der Darstellung von Media-Dateien wie pdf und jpg.

Bei Bilddateien erscheinen Fehlermeldungen mit schwarzem Hintergrund und Funktionssymbolen, wenn die Erweiterung versucht, Bildvergrößerungen aus einem anderen Wiki anzuzeigen. Die Erweiterung versucht grundsätzlich eine Bildvergrößerung statt die Bilddatei-Seite zum Bild aufzurufen.

Wird bei der Fehlermeldung mit schwarzem Hintergrund, die demnach eine überlagernde JavaScript-Schicht ist, der Verweis unten rechts zum Herunterladen angeklickt und die Datei im Browser geöffnet statt sie herunterzuladen, kann die Datei dargestellt werden.

Wenn die Verweise der Bilder zu der Bilddatei-Seite mit „Firefox“ in einem neuen Tab oder in einem neuen Fenster geöffnet werden, gibt es keine Fehlermeldung, weil dann der "MultimediaViewer" nicht zum Einsatz kommt.

Nach Aufruf einer Bilddatei-Seite wird beim Klick auf das Bild zur Vergrößerung des Bildes das vergrößerte Bild dargestellt. Jedoch wird bei aktiviertem "JavaScript" und Verwendung des Hyperlinks "Im Medienbetrachter öffnen", der unterhalb des Bildes erscheint, wieder die Fehlermeldung mit dem schwarzen Hintergrund ausgelöst.

Diese Erweiterung wird in den Salze-Wikis zur Fehlerbeseitigung deaktiviert. Hierzu wird nicht die Einbindung auskommentiert, sondern werden zwei Variablen in der Datei "LocalSettings.php" verwendet:

## MultimediaViewer deaktivieren wegen Fehler bei Interwiki-Bildvergrößerungen
$wgMediaViewerEnableByDefault = false;
$wgMediaViewerEnableByDefaultForAnonymous = false;

Ansonsten müsste bei allen Bildern der Quelltext angepasst werden, was sehr aufwändig wäre.

Eine Problemlösung durch eine Angabe im Quelltext für einen Aufruf in einem neuen Tab bzw. Fenster ist scheinbar nicht möglich, da bei der MediaWiki-Gallerie wohl nicht vorgesehen.

Eine erfolgreiche Lösung kann in nachfolgender Beispiel-Anpassung der jeweiligen Bilder gefunden werden, die den MediaWiki-MediaViewer mit der Bildvergrößerung umgeht, aber viel Arbeit erfordert.

bisher: 
Image:Kop-Alveolar 4.JPG| Alveolarverwittering am Kronborg Castle in Dänemark, Ausschnitt
neu: 
Image:Kop-Alveolar_4.JPG|link=File:Kop-Alveolar 4.JPG|Alveolarverwittering am Kronborg Castle in Dänemark, Ausschnitt

MwEmbedSupport (JavaScript)[Bearbeiten]

Die Erweiterung wird bei MW1.31 nicht mehr installiert, da sie Teil von TimedMediaHandler geworden ist. Sie wurde bis MW1.30 für die Wiedergabe von Videodateien mit der Erweiterung "TimedMediaHandler" benötigt und funktioniert nur mit JavaScript.

Ab MW1.31 oder MW1.32 ist die Erweiterung in der Erweiterung "TimedMediaHandler" enthalten, die Angaben variieren:

  1. https://www.mediawiki.org/wiki/Extension:MwEmbedSupport: ab MW1.32
  2. https://www.mediawiki.org/wiki/Extension:TimedMediaHandler: ab MW1.31

Die neueste Version 0.3.0 mit dem Datum 2014-04-02 (Stand 2018-10-12) kann aus dem MW-Archiv heruntergeladen werden bei https://www.mediawiki.org/w/index.php?oldid=2734400.

Einschränkung[Bearbeiten]

Die Version REL1.27 für MW1.27 funktionierte nicht, weil die Datei "extension.json" fehlte. Es funktionierten die Versionen REL1.29 und REL1.30; eingesetzt wurde REL1.30.

OggHandler (JavaScript)[Bearbeiten]

Die Erweiterung wird nicht mehr installiert, da sie ab Mediawiki 1.24 nicht mehr unterstützt wird. Es wird die Erweiterung "TimedMediaHandler" empfohlen.

Diese Erweiterung diente zum Darstellen von Videodateien in SalzWiki-Artikeln. Da es sich beim OGG-Format um ein freies Format handelt, benötigt man keine Lizenz zum Darstellen der Inhalte. Es ist noch zu klären, ob eventuell das MPEG Format für eine Hochschulanwendung lizenzfrei sein könnte.

Für die Erweiterung sind "PEAR" und "FFmpeg" erforderlich.

  • "PEAR" ist in der PHP-Installation des Servers enthalten.
  • "FFmpeg" ist herunterzuladen von heise.de und wird dann gespeichert unter "D:\ffmpeg-wiki\"

Installation der Erweiterung:

## Repository: OggHandler oder MwEmbedSupport und TimedMediaHandler
## OggHandler nur bis MW 1.23, danach MwEmbedSupport und TimedMediaHandler
wfLoadExtensions( 'OggHandler' );
# FFmpeg auskommentiert, solange kostenfreie Lizenz für Hochschule ungeklärt ist
#$wgFFmpegLocation = "D:\ffmpeg-wiki\bin\ffmpeg";

ParserFunctions[Bearbeiten]

"ParserFunctions" ist seit MW1.18 im Kern enthalten und enthält seit MW1.15 die Funktionalitäten von "ControlStructureFunctions", "LOParserFunctions" und größtenteils auch von "StringFunctions".

Die Erweiterung "ParserFunctions" soll in Kombination mit der Erweiterung "Loops", die die Erweiterung "Variables" nutzt, verwendet werden; siehe auch

  1. https://www.mediawiki.org/wiki/Help:ParserFunctions
  2. https://www.mediawiki.org/wiki/Extension:Loops

Piwik Integration[Bearbeiten]

Die Statistik-Anwendung "Piwik" wurde im Januar 2018 in "Matomo" umbenannt, weshalb ab März 2018 die Erweiterung "Extension:Matomo" zur Verfügung stehen und verwendet werden soll.

Die Erweiterung "Extension:Piwik Integration" für die Nutzung der Statistik-Anwendung "Piwik" kann ab den Versionen MW 1.14 und Piwik 0.4 verwendet werden.

  • Dateien unter "extensions\Piwik\" speichern
  • In der Datei "LocalSettings.php" einfügen:
##
## EXTENSIONS
...
wfLoadExtension( 'Piwik' );
$wgPiwikURL = $_SERVER['SERVER_NAME']."/analytics/piwik"; # ohne Protokoll-Angabe und ohne Schrägstrich am Ende!
$wgPiwikIDSite = "1"; # SalzWiki=1, SaltWiki=2, Repository=3

QuestyCaptcha[Bearbeiten]

Das Plugin "QuestyCaptcha" ist bei MW 1.31 und 1.27 im Dateien-Paket der Erweiterung "ConfirmEdit" enthalten und muss nicht mehr zusätzlich heruntergeladen werden.

Zusätzlich zur Erweiterung "Extension:ConfirmEdit" wird für die Salzwikis als Plugin das Captcha "Extension:QuestyCaptcha" gegen Spam-Anmeldungen genutzt, da das Standard-Mathe-Captcha nicht ausreichte. Die anderen angebotenen Captchas werden in zukünftigen Mediawiki-Versionen nicht mehr unterstützt oder funktionieren nicht mit allen gängigen Browsern oder funktionieren mit nicht-barrierefreien Bildern und/oder benötigen zusätzliche Installationen auf dem Wiki-Server mit Administrationsrechten, weshalb "QuestyCaptcha" trotz Beta-Status als einzig brauchbare Möglichkeit verwendet werden muss.

  • Überprüfen, ob im Verzeichnis "extensions\ConfirmEdit\" das Unterverzeichnis "QuestyCaptcha\" mit Dateien enthalten ist.
  • In der Datei "LocalSettings.php" nach "wfLoadExtension( 'Cite' );" einfügen:
##
## EXTENSIONS
...
wfLoadExtensions([ 'ConfirmEdit', 'ConfirmEdit/QuestyCaptcha' ]);
...
## Erweiterung ConfirmEdit mit Captcha
#$wgCaptchaClass = "QuestyCaptcha"; // entfällt in MW 1.27
# Salzwiki
$wgCaptchaQuestions[] = array('question' => 'Welches Wort fehlt: "Eine Frage stellen, eine ... geben"?', 'answer' => '***' );
$wgCaptchaQuestions[] = array('question' => 'Um welche Art von Webseiteninhalt handelt es sich hier: Blog oder Wiki?', 'answer' => '***' );
$wgCaptchaQuestions[] = array('question' => 'Wie lautet der Name dieses Wikis?', 'answer' => $wgSitename );
$wgCaptchaQuestions[] = array('question' => 'Bitte das magische Wort - Salz - hier eingeben:', 'answer' => '***' );
$wgCaptchaQuestions[] = array('question' => 'Bitte das Spezialwort - 8Acht8 - hier eingeben:', 'answer' => '***' );
# Saltwiki
$wgCaptchaQuestions[] = array('question' => 'Which is the language of this question: Dutch, English, French, German or Spanish?', 'answer' => '***' );
$wgCaptchaQuestions[] = array( 'question' => 'Please write the following word backwards: '.$wgSitename, 'answer' => strrev($wgSitename) ); #'ikiwtlaS'
$wgCaptchaQuestions[] = array( 'question' => 'The taste of salt is neither bitter nor sweet nor sourish but …', 'answer' => '***' );
$wgCaptchaQuestions[] = array('question' => 'What is the missing word: "Ask a question, give an …"', 'answer' => ***'');
$wgCaptchaQuestions[] = array('question' => 'What kind of web content is this: Blog or Wiki?', 'answer' => '***');
$wgCaptchaQuestions[] = array( 'question' => 'What is this wiki\'s name (in capital letters)?', 'answer' => strtoupper($wgSitename) ); #'SALTWIKI'
# Repository
$wgCaptchaQuestions[] = array('question' => 'Which is the language of this question: Dutch, English, French, German or Spanish?', 'answer' => '***' );
$wgCaptchaQuestions[] = array( 'question' => 'Please write the following word backwards: '.$wgSitename, 'answer' => strrev($wgSitename) ); #'yrotisopeR'
$wgCaptchaQuestions[] = array( 'question' => 'The taste of salt is neither bitter nor sweet nor sourish but …', 'answer' => '***' );
$wgCaptchaQuestions[] = array('question' => 'What is the missing word: "Ask a question, give an …"', 'answer' => ***'');
$wgCaptchaQuestions[] = array('question' => 'What kind of web content is this: Blog or Wiki?', 'answer' => '***');
$wgCaptchaQuestions[] = array( 'question' => 'What is this wiki\'s name (in capital letters)?', 'answer' => strtoupper($wgSitename) ); #'REPOSITORY'
#$wgCaptchaQuestions[] = array('question' => 'Please write the magic secret, "salt", here:', 'answer' => '***');
#$wgCaptchaQuestions[] = array('question' => 'Type the code word, 8eight8, here:', 'answer' => '***');

## Auslöser für Captcha-Aktivierung
# Salzwiki/Saltwiki
$wgCaptchaTriggers['edit']          = true; 
$wgCaptchaTriggers['create']        = true; 
$wgCaptchaTriggers['addurl']        = true; 
$wgCaptchaTriggers['createaccount'] = true;
$wgCaptchaTriggers['badlogin']      = true;
# Salzwiki/Saltwiki/Repository
$wgCaptchaTriggers['contactpage'] = true;
...
##
## EINSTELLUNGEN
...
## Salzwiki/Saltwiki
#captcha Hschwarz 12.02.2010
$wgGroupPermissions['*'            ]['skipcaptcha'] = false;
$wgGroupPermissions['user'         ]['skipcaptcha'] = false;
$wgGroupPermissions['autor'        ]['skipcaptcha'] = true;
$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;
$wgGroupPermissions['bot'          ]['skipcaptcha'] = true; // registered bots
$wgGroupPermissions['sysop'        ]['skipcaptcha'] = true;

SaltWiki (Extension-Code)[Bearbeiten]

Die Erweiterung "SaltWiki" wird umbenannt in "BibManagerAdditionalPublications" und an die Anforderungen von MW1.31 angepasst.

Diese Erweiterung ergänzt die Erweiterung "BibManager" für Volltexte und DOIs bei den BibTex-Attributen.

Fehler (Extension-Code)[Bearbeiten]

Sprachdatei "de" enthält Sie-Form[Bearbeiten]

Die Version 2015-05-25 enthält in der Sprachdatei "SaltWiki.i18n.php" bei "de" bzw. in der Sprachdatei "de.json" die Sie-Form wie bei "de-formal" und wird korrigiert.

Fehlendes Icon "Link zum Volltext" bei Detailseite[Bearbeiten]

Da sich in der verwendeten BibManager-Version der Dateipfad für eine Grafik geändert hat, muss der Code angepasst werden.

Auf der Detailseite eines Bibliographieeintrags wird rechts statt des Icons nur der Alternativtext "Link zum Volltext" bzw. "Fulltext link" angezeigt, weil der Dateipfad nicht mehr stimmt. In der Funktion "sw_onBibManagerGetIcons(...)" wird in Z.161 eine Grafik aus dem Verzeichnis "\extensions\BibManager\client\images\" statt aus dem Verzeichnis "\extensions\BibManager\resources\images\" verwendet, weshalb der Alternativtext der Grafik angezeigt wird; es ist folgende Datei anzupassen:

  • "\extensions\SaltWiki\SaltWiki.php"

Nach den Anpassungen ist jeweils eine Kopie der Datei mit dem Suffix "_SW" zu speichern.

Bei "SaltWiki.php" ist in der Funktion "sw_onBibManagerGetIcons(...)" vor Zeile 160 ein Kommentar einzufügen und in Zeile 161 der Pfad von "client" zu "resources" anzupassen:

function sw_onBibManagerGetIcons ( $entry, &$icons) {
 ...
 // für HAWK HHG und MW1.23LTS Pfad von "client" zu "resources" angepasst 2016-06-14
 $icons['fulltext'] = array (
  'src' = $wgScriptPath . '/extensions/BibManager/resources/images/' . $icon,
  ...
 );
 ...
}

Veralteter Code[Bearbeiten]

Es werden in der Datei "SaltWiki.php" noch folgende Methoden verwendet:

  • "wfMsg()" anstatt von "wfMessage()->escaped()"
  • "$wgUser -> getSkin () -> makeMediaLinkObj ( $fileTitle )" anstatt von "Linker::makeMediaLinkObj( $fileTitle )

SaltWikiUpload[Bearbeiten]

Die Erweiterung "SaltWikiUpload" ergänzt die Erweiterung "BibManager" für das Hochladen von Dateien im Repositorium unter Berücksichtigung von Meta-Daten (Vergleich der Formulareingaben siehe weiter unten)

Versionshinweis[Bearbeiten]

Die Version 2012-01-25 enthält

  • in der Datei "SaltWikiUpload_body.php" ab Z.66 die Variable $aAuthorsLinks und in "foreach..." ab Z.104 Änderungen für $sFieldValue vor "$aText[]..."
  • in der Sprachdatei "SaltWikiUpload.i18n.php" in den Zeilen 53, 105 und 157 ein Zusatzelement "help-various_bibtex"
  • in der Datei "\includes\SaltWikiUpload_Fields.php" das Zusatzelement "help-various_bibtex"
  • in der Datei "\includes\SaltWikiUpload_HTMLDateField.php" Korrekturen zur Darstellung von Monatszahlen kleiner als 10 mit vorangestellter 0

Fehler[Bearbeiten]

  • Das erweiterte Formular wird nicht angezeigt, sondern das MW-Upload-Formular
  • Beim Hochladen mittels MW-Upload-Formular scheitert das Hochladen mit der Fehlermeldung "Es gibt fehlerhaft ausgefüllte Felder", wenn die Erweiterung in der Datei "LocalSettings.php" eingebunden wird.
  • Die Sprachdatei "SaltWikiUpload.i18n.php" enthält bei "de" die Sie-Form wie bei "de-formal".

Veralteter Code[Bearbeiten]

  • Funktion "wfMsg" statt "wfMessage" in den Dateien
    • "SaltWikiUpload_body.php"
    • "\includes\SaltWikiUpload_Fields.php"
    • "\includes\SaltWikiUpload_HTMLDateField.php"

Formularunterschiede[Bearbeiten]

SaltWikiUpload-Formular

  • Metadaten
    • Beschreibung
    • Quelle
    • Datum
    • Autor(en)
    • Berechtigung
    • Schlagwörter
    • Typ
  • Medium
    • Medienart
  • Quelldatei
    • Quelldatei
  • Dateibeschreibung
    • Zielname
    • Weitere Anmerkungen

MW1.23LTS-Upload-Formular

  • Quelldatei
    • Quelldatei
  • Dateibeschreibung
    • Zielname
    • Beschreibung/Quelle
    • Lizenz
  • Hochladeoptionen
    • Diese Datei beobachten
    • Warnungen ignorieren

Quellcode der Version 2012-01-25[Bearbeiten]

Zeile 66ff unter "$aAuthors = explode(...);"

$aAuthorsLinks = array();
foreach( $aAuthors as $sAuthor ){
  ...
  $aCategories[] = '[['.$sPrefixedCatText.']]';
  $aAuthorsLinks[] = '[[:'.$sPrefixedCatText.'|'.$oCategoryTitle->getText().']]';
}

Zeile 104ff vor "$aText[] = ..."

foreach( $aTemplate as $sFieldName => $sFieldValue ) {
  if( in_array( $sFieldName, array('literature_bibtex','grey_literature_bibtex','unpublished_reports_bibtex') ) && !empty($sFieldValue) ){
    $sFieldValue = '<bib id="'.$sFieldValue.'" />';
  }
  if( $sFieldName == 'literature_doi' && !empty($sFieldValue) ){
    $sFieldValue = 'http://dx.doi.org/'.$sFieldValue;
  }
  if( $sFieldName == 'general_author' && !empty($sFieldValue) ){
    $sFieldValue = implode('; ', $aAuthorsLinks);
  }
  
  $aText[] = '|'.$sFieldName.'='.$sFieldValue;
}

TimedMediaHandler (JavaScript)[Bearbeiten]

"TimedMediaHandler" beinhaltet den "Kaltura HTML5 Player" (JavaScript, http://www.html5video.org/kaltura-player/docs) und den experimentellen "VideoJS Player". Unterstützt werden Streaming, WebM und Ogg sowie gegebenenfalls getID3.

Einschränkung[Bearbeiten]

Die Erweiterung steht ab Mediawiki 1.17 zur Verfügung, zuletzt als Version 0.5.0 mit Datum 2015-12-08 (Stand 2018-03-02). Die Versionen REL1.27, REL1.29 und REL1.30 sind nicht für MW 1.27 geeignet, da die Datei "extension.json fehlt.

Nutzungsvoraussetzungen[Bearbeiten]

Die Erweiterung benötigt zusätzlich

  • bis einschließlich MW1.30 die Erweiterung "MwEmbedSupport"
  • libwinpthread-1.dll für die Installation der Anwendung "ffmpeg"
  • die Anwendungen
    • "ffmpeg"
    • "ffmpeg2theora"
    • "oggThumb"
  • eventuell auch die Anwendungen
    • "PEAR File_Ogg", wenn nicht in "...\extensions\TimedMediaHandler\handlers\OggHandler\" die Datei "OggHandler.php" und das Verzeichnis "PEAR\" mit dem Unterverzeichnis "File_Ogg\" vorhanden sind
      • "PEAR Package Manager" oder "PEAR Pyras Installer" - "PEAR" sollte in der PHP-Installation des Servers enthalten sein
      • "PEAR File_Ogg" 0.3.1 Beta 2010-08-27 (Stand 2016-06-21) wie bei Erweiterung "OggHandler" für "oggThumb"-Vorschaubilder
    • "getID3()"

Für Details siehe https://phabricator.wikimedia.org/diffusion/ETMH/browse/master/README.

Es ist noch zu klären, ob eventuell das MPEG Format für eine Hochschulanwendung lizenzfrei sein könnte. "FFmpeg" ist herunterzuladen von heise.de und wird dann gespeichert unter "D:\ffmpeg-wiki\".

Installation und Konfiguration[Bearbeiten]

## MW1.27 bis MW1.30: MwEmbedSupport und TimedMediaHandler
wfLoadExtensions("MwEmbedSupport");
require_once("$IP/extension/TimedMediaHandler/TimedMediaHandler.php");
## MW1.31: TimedMediaHandler
wfLoadExtensions("TimedMediaHandler");
## MW1.26 und älter: MwEmbedSupport und TimedMediaHandler
require_once("$IP/extension/MwEmbedSupport/MwEmbedSupport.php");
require_once("$IP/extension/TimedMediaHandler/TimedMediaHandler.php");

# FFmpeg auskommentiert, solange kostenfreie Lizenz für Hochschule ungeklärt ist
#$wgFFmpegLocation = "D:\ffmpeg-wiki\bin\ffmpeg";

User Merge - Benutzername löschen[Bearbeiten]

Das Löschen von benutzernamen, die nicht mehr benötigt werden, geschieht durch das Zusammenführen des zu löschenden Benuztzernamens mit dem Benutzername "Testuser" zu "Testuser" mit Hilfe der Extension UserMerge.

wfLoadExtensions( 'UserMerge' );
# Assign the usermerge right to a usergroup, i.e. to the bureaucrats:
$wgGroupPermissions['bureaucrat']['usermerge'] = true;

WhosOnline - Wer ist online[Bearbeiten]

Die Extension WhosOnline dient dazu sich auf einer Specialpage anzeigen zu lassen, wer gerade online ist.

Für MediaWiki 1.23 war im Herbst 2015 als älteste Version nur eine "REL1_25", also Version 1.4.0 für MW 1.25 erhältlich, die einen Script-Fehler verursachte, wenn in der Datei "WhosOnlineSpecialPage.php" bei der Funktion "getNavigationBar()" die Variable "$title" vom Typ String statt Objekt ist; zur Fehlerbehebung siehe weiter unten und https://www.mediawiki.org/wiki/Extension_talk:WhosOnline#Bug_in_MW_1.24_.3F

Bei MediaWiki 1.25 verursachte die Version 1.5.0 einen Fehler, wenn die Datei "upgrade.php" verwendet wurde, weil die Datei "extension.json" in der Erweiterung fehlte; siehe https://www.mediawiki.org/wiki/Extension_talk:WhosOnline#Fatal_error_running_update.php_on_V1.5.0. Es musste deshalb in der Datei "LocalSettings.php" wie bei älteren Versionen "require_once ..." statt "wfLoadExtension(...)" verwendet werden.

  • Dateien unter http://www.mediawiki.org/wiki/Extension:WhosOnline herunterladen und extrahieren
  • Verzeichnis "WhosOnline" unter "Extensions" speichern
  • Für MediaWiki 1.27 evtl. wie bei WM 1.23 in der Datei "WhosOnlineSpecialPage.php" die Funktion "getNavigationBar()" anpassen
  • SQL-Befehl in der Extension-Datei "WhosOnline.sql" für neue Datenbank-Tabelle anpassen (siehe weiter unten)
  • Mit "phpMyAdmin" und geändertem SQL-Befehl eine neue Datenbank-Tabelle erstellen (siehe weiter unten)
  • In der Datei "LocalSettings.php" einfügen:
wfLoadExtensions( 'WhosOnline' );
$wgWhosOnlineShowAnons = true;

Datei "WhosOnlineSpecialPage.php" für MW 1.23 anpassen

Die Funktion "getNavigationBar()" ab Zeile 75 kopieren, auskommentieren und die Kopie darunter einfügen. In der Kopie die Variable $wgLang als Ersatz für $wgContLang und die entsprechenden Variablen für die return-Funktion hinzufügen:

function getNavigationBar(){
  global $wgContLang, $wgLang;
  $link = $wgContLang->specialpage('WhosOnline');
  if(is_object($link)){
    $title = $link;
  }
  else{
    $title = Title::newFromText($link);
    if(is_null($title)){
      return false;
    }
  }
  $offset = $this->mOffset;
  $limit = $this->mLimit;
  $query = '';
  $query = wfCgiToArray('');
  $atend = $this->countUsersOnline() < ($this->mLimit + $this->mOffset); // show next link

  return $wgLang->viewPrevNext(
    $title,
    $offset,
    $limit,
    $query,
    $atend
  );
}

Datei "WhosOnline.sql" anpassen

Den SQL-Befehl in der Extension-Datei "WhosOnline.sql" für die neue Datenbank-Tabelle in der ersten Zeile z. B. wie folgt mit Präfix "sw_" bzw. "sr_" anpassen:

CREATE TABLE `[datenbankname]`.`[praefix]online` (

Datenbank-Tabelle erstellen

Mit "phpMyAdmin" die MySQL-Datenbank für das Wiki auswählen und nach Auswahl des Karteikartenreiters/Tabs "SQL" die Tabelle "sw_online" bzw. "sr_online" durch Eingabe des folgenden SQL-Statements anlegen:

CREATE TABLE  `[datenbankname]`.`[praefix]online`  (
	`userid` int(5) NOT NULL default '0',
	`username` varchar(255) NOT NULL default '',
	`timestamp` char(14) NOT NULL default '',
	PRIMARY KEY USING HASH (`userid`, `username`),
	INDEX USING BTREE (`timestamp`)
) TYPE=MEMORY;

WikiEditor (Extension-Code, JavaScript)[Bearbeiten]

Achtung: Funktioniert nur bei Browsern mit aktiviertem JavaScript und muss in den nachfolgend genannten Dateien und dem Grafiken-Verzeichnis nach jedem MediaWiki-Update auf Vorhandensein und Änderungen überprüft werden!

Die Erweiterung "WikiEditor" wird bei MW1.31 als Standard-Editor mitgeliefert.

Um die Erweiterung einzubinden und sie für alle Nutzungskonten verfügbar zu machen, sind in der Datei "LocalSettings.php" in MW1.31 folgende Angaben nötig:

wfLoadExtension("WikiEditor");
...
## Editor für Bearbeitung der Inhalte
#require_once("$IP/extensions/WikiEditor/WikiEditor.php");
## nicht erforderliche Angaben bei MW1.31 
#$wgDefaultUserOptions['usebetatoolbar'] = 1; // Editor bei allen Nutzungskonten standardmäßig aktivieren
#$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1; // Erweiterte Funktionen und Sonderzeichen bei allen Nutzungskonten standardmäßig aktivieren
#$wgDefaultUserOptions['wikieditor-preview'] = 1; // Schaltfläche für Vorschau und Änderungen aktivieren
#$wgDefaultUserOptions['wikieditor-publish'] = 1; // Schaltfläche für Speichern/Veröffentlichen und Abbrechen aktivieren

Für die Nutzung zusätzlicher Funktionen siehe:

Das Symbol für die Erweiterung "Math", das im ehemaligen Standard-Editor (MW1.16) automatisch hinzugefügt wurde, fehlt bei der Erweiterung "WikiEditor".

Es gibt 4 Standard-"Sektionen"

  • main für die Standard-Funktionen
  • advanced für die erweiterten Funktionen
  • characters für die Sonderzeichen
  • help

Die "Sektionen" können "Gruppen" für Gruppierungen von Funktionen enthalten.

Die Funktionen sind über Schaltflächen (Text oder Symbol) oder Auswahllisten (Booklets) verfügbar.

Anpassungen[Bearbeiten]

Folgende Dateien sind für zusätzliche Bearbeitungsfunktionen zu bearbeiten:

  • Bilddatei "button-math.png" aus der Erweiterung "Math" kopieren in Verzeichnis "\extensions\WikiEditor\modules\images\toolbar\" und umbenennen in "insert-math.png"
  • Sprach-Dateien im Verzeichnis "\extensions\WikiEditor\i18n\" ergänzen
  • Im Verzeichnis "\extensions\WikiEditor\modules\" folgende Dateien ergänzen
    • jquery.wikiEditor.dialogs.config.js Z. 59 hinter "table"
    • jquery.wikiEditor.toolbar.config.js Z. 277 vor "redirect" (für Schaltfläche in der Symbolleiste)
    • optional: jquery.wikiEditor.dialogs.config.js Z. 17 "remove" und Z. 71 "addToToolbar" vor "search"

Beispiel Sprachdateien "de.json" in Z. 33 und "de-formal.json" in Z. 10 ergänzen:

"wikieditor-toolbar-tool-math": "Formel",
"wikieditor-toolbar-tool-math-insert": "Formel einfügen",

Beispiel Sprachdatei "en.json" in Z. 21 ergänzen:

"wikieditor-toolbar-tool-math": "Formula",
"wikieditor-toolbar-tool-math-insert": "Insert formula",

Die Datei "jquery.wikiEditor.dialogs.config.js" Z. 59:

.wikiEditor( 'addToTollbar", {
 section: 'advanced',
 group: 'insert',
 tools: {
  table: {
    ...
  },
  math: {
   labelMsg: 'wikieditor-toolbar-tool-math',
   type: 'button',
   oouiIcon: 'insert-math',
   action: {
    type: 'dialog',
    module: 'insert-math'
   }
  }
 }
} )
.wikiEditor( 'addToTollbar", {
 section: 'advanced',
 groups: {
  search: {
   ...

Die Datei "jquery.wikiEditor.toolbar.config.js" Z. 277 im Bereich "Format section => advanced => groups => insert => tools" vor "redirect" ergänzen mit den offset-Werten von "redirect" ergänzen und "redirect" auskommentieren:

math: {
 labelMsg: 'wikieditor-toolbar-tool-math',
 type: 'button',
 oouiIcon: 'insert-math',
 action: {
  type: 'encapsulate',
  options: {
   pre: '<math>\n',
   periMsg: 'wikieditor-toolbar-tool-math-insert',
   post: '\n</math>',
   ownline: true
  }
 }
},
'redirect': {
...
}

Eingabe von Formeln mittels Tex (Wiki-Code)[Bearbeiten]

Damit mathematische und auch chemische Formeln dargestellt werden können, wird in Mediawiki "Texvc" benutzt. Dies funktioniert nicht unter Windows, sondern nur unter Linux. Siehe hierzu

Deshalb muss zusammen mit der Erweiterung Math (Wiki-Code) die Klasse LatexRender von Benjamin Zeiss in abgewandelter Form als Klasse MathLatexRender verwendet werden und muss folgende Software installiert werden:

  1. Windows Server 2012R2
    1. GPL GhostScript 9.10 (gs910w32.exe, 2013-09-02)
    2. ImageMagick 6.9.3-8-Q16-x86-dll.exe (16Bit dynamic, nicht static)
    3. MikTeX 2.9.5870 Net Installer 32Bit (complete, nicht basic)
  2. Windows Server 2008
    1. GPL GhostScript 8.70 (gs870w32.exe)
    2. ImageMagick 6.5.9-0-Q16-windows-dll.exe (16Bit dynamic, nicht static)
    3. MikTeX 2.8 Net Installer 32Bit (complete, nicht basic)

Nach jedem mediawiki-Update muss die Erweiterung "Math" mit den Dateien "Math.php" und "MathRenderer.php" auf Windows-Kompatibilität überprüft werden!

Die tatsächliche Installation eines Tex-Systems erfolgt in Anlehnung an die alternative Methode auf der Mediawiki Seite http://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Windows#Alternative_Solution.

Tatsächliche Installation[Bearbeiten]

Siehe weiter oben unter Installationen

Alternative Installationsmethode gemäß Mediawiki[Bearbeiten]

  1. install the complete MikTeX (not the basic one, use the network installer) in D:\texfm\miktex - No: Since installing the complete version failed, we installed the basic one with administrator rights at last after installing GhostScript and installing ImageMagick.
  2. install the static (to be sure dependencies are embed) binary of für Windows in D:\texmf\imagick (ensure there are no spaces in the path you choose) - No: We installed the dynamic version wih administrator rights.
  3. install AFPL GhostScript bzw. GhostScript 8.54 bzw. [1] in D:\texmf\ghostscript
  4. oder GPL GhostScript 9.10 (gs910w32.exe) bzw. GhostScript in D:\texmf\ghostscript
  5. copy D:\texfm\ghostscript\gs8.70\bin\gswin32c.exe to D:\texmf\ghostscript\gs8.70\bin\gs.exe (8.70 can be different depending on version you install)
  6. add to the windows PATH environnement variable this path: D:\texmf\ghostscript\gs8.70\bin (again, 8.70 can be different depending on version you install)
  7. If you installed MiKTeX for all users and are running IIS, you may also need to create MiKTeX folders under "C:\Documents and Settings\Default User\Application Data" and "C:\Documents and Settings\Default User\Local Settings\Application Data". Make sure the IIS working process account running PHP (IUSR_[whoever]) has both read and write permissions to these directories!
  8. open a command line (start -> execute -> cmd.exe)
  9. verify that the following commands are working:
    latex
    dvips
    convert (not the microsoft convert)
    gs
  10. [edit] Settings
  • your wiki directory = $

replace the file $/includes/Math.php with code from http://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Windows/math.php

  • uncomment or insert in $/LocalSettings.php:
$wgUseTeX= true;
  • insert in $/LocalSettings.php:

- ImageMagick

$wgImageMagickConvertCommand    = 'D:\texmf\imagick\convert.exe';
$wgImageMagickIdentifyCommand   = 'D:\texmf\imagick\identify.exe'; 

- Tex

$wgLaTexCommand                 = 'D:\texmf\miktex\miktex\bin\latex.exe';
$wgDvipsCommand                 = 'D:\texmf\miktex\miktex\bin\dvips.exe';
  • reboot if needed so that paths variables are updated for your services too

Ausblenden der History[Bearbeiten]

Diese Möglichkeit wurde nicht aktiviert.

Wenn nur Admins sowie Mitglieder der Gruppen "autor" und "Redakteur"/"Editor" die Versionsgeschichte einer Seite (History) sehen sollen, ist Folgendes in der Datei "LocalSettings.php" zu ergänzen:

## Bei der angegebenen User-Gruppe wird der Versionen-Button angezeigt. Der Admin sieht diesen immer!
$groupToShowHistory = 'autor';
## Code um die Histroy zu verstecken - sreher 20101105
$wgHooks['SkinTemplateContentActions'][] = 'removeHistory';
function removeHistory( $content_actions ) {
global $wgUser, $groupToShowHistory;
# print_r ($wgUser);
if ( ! (in_array( $groupToShowHistory, $wgUser->mGroups ) or in_array( 'sysop', $wgUser-
>mGroups) ) ) {
#print "drin!";
unset( $content_actions['history'] ); // only this to remove an action
}
return true;
}

Hilfeseiten[Bearbeiten]

Die Dateien, Abbildungen und Vorlagen entsprechend den Anweisungen in "http://www.mediawiki.org/wiki/Project:PD_help/Copying" in ein Verzeichnis exportieren und von dort in das entsprechende Wiki importieren. Die Import- und Export-Funktionen stehen unter "Spezialseiten->Seitenwerkzeuge" bzw. "Special pages->Page tools" zur Verfügung. Aktuelle Dateien vom 16.3.2011 sind unter D:\Dokumente\Hilfe-Dateien auf dem SalzWiki-Server gespeichert.

Bisher werden aus Mediawiki die deutschen Hilfeseiten nicht automatisch mit aufgelistet, weshalb neben den englischen Dateien (MediaWiki-help-en.xml) eine zweite Exportdatei (MediaWiki-Hilfe-de.xml) für die deutschen Dateien erstellt werden muss. Als Dateien wählt man dazu alle aus dem Namensraum "help/de" aus.

Die Abbildungen werden - in Abwandlung der Hinweise - direkt aus Mediawiki im Verzeichnis D:\Dokumente\Hilfe-Dateien gespeichert und von dort im Repositorium über "Spezialseiten->Medien" oder den Menüpunkt "Werkzeuge: Hochladen" hochgeladen. Auf die z. T. unterschiedlichen Lizenzen ist beim Hochladen bei der Eingabe der Metadaten zu achten.

  • Deutsche Version: Soll zuerst auf die deutsche Version verwiesen werden, ist der Hyperlink im Menü links (Sidebar) auf "help:contents/de" zu setzen.
  • Englische Version: Soll zuerst auf die englische Version verwiesen werden, ist der Hyperlink im Menü links (Sidebar) auf "help:Contents" zu setzen.

Die Extension "ParserFunctions" wird benötigt.