Plugins sind spezielle Dateien, die im Verzeichnis wiki_app/plugins/ abgelegt sind. Diese Seiten können spezielle Zugriffsrechte verlangen, sodass nicht jeder User jede Seite aufrufen kann. Die Plugin Seiten werden üblicherweise über die Seite Erweiterte Funktionen aufgerufen, welche über die Schaltfläche [W] der Wiki-Toolbar aufgerufen werden kann oder über die Eingabe @wiki im Suchfeld.
Zweck von Plugins
Es bestehen mehrere Möglichkeiten, Plugin-Seiten mit erweiterten Wiki-Funktionen aufzurufen:
Der Benutzer gelangt über die Schaltfläche [W] in der Wiki-Toolbar zum Verzeichnis der Plugin-Seiten. Diese Seite kann auch durch Eingabe von @wiki in das Suchfeld aufgerufen werden.
Per URL lässt sich eine bestimmte Plugin-Seite wiefolgt aufrufen:
index.asp?op=wiki index.asp?op=exe&fn=Seitenname
Die erste Zeile ruft die Seite Erweiterte Funktionen auf, mit der zweiten URL kann eine bestimmte Plugin-Seite gerufen werden. Seitenname muss der Name der Plugin-Datei ohne Extension sein. Der angezeigte Name ist der in die Landessprache übersetzte Dateiname.
Um in einem Wikitext einen Link auf eine Plugin-Seite zu machen, verwende das Makro Wiki:
{{Wiki|Seitenname|Text}}
Beispiel
{{Wiki|Extendet Functions|Erweiterte Funktionen}}
Die URL auf eine Plugin-Seite kann per Makro WikiUrl erfragt werden (z.B. für form-Makros):
{{WikiUrl|Seitenname}}
Beispiel
{{form|{{WikiUrl|Plugin-Page}}}}
index.asp?op=exe&fn=Plugin-Page
Alle Plugin-Seiten sind im Plugin-Verzeichnis wiki_app/plugins/ als Dateien mit der Endung .inc abgelegt. Im Plugin-Verzeichnis gibt es zwei weitere wichtige Unterverzeichnisse:
Plugin-Seiten sind (fast) normale Wiki-Seiten. Das heisst, sie enthalten Wiki-Text, aber in der Mehrzahl Wiki-Scripts. Die Wiki-Scripts in Plugin-Seiten unterliegen keinerlei Beschränkungen. Sie haben vollen Zugriff auf das Filesystem des Servers. Daher können Plugin-Seiten auch nur vom Webmaster angelegt werden.
Gemeinsam genutzte Bibliotheken und Stylesheets, die im Verzeichnis plugins/lib/ abgelegt sind, können mit der speziellen Anweisung #INCLUDE Dateiname in eine Plugin-Seite includet werden. Eingefügte Dateien dürfen auch selbst wieder Includes auf diese Weise includen.
#INCLUDE Dateiname
Includes können VBScript Programme, Texte, Styles usw. sein. Sie müssen einfach nur in jenem Format vorliegen, das an der Stelle der #INCLUDE Anweisung erwartet wird.
Spezialfall: Damit normale ASP-Bibliotheken includet werden können, werden beim Includen die ASP-Tags <% und %> herausgefiltert, wenn sie auf einer eigenen Zeile stehen. Dadurch können ASP-Bibliotheken direkt in WScript includet und verwendet werden (z.B. die mvc.inc Bibliothek).
In einem optionalen Header können spezielle Eigenschaften einer Plugin-Seiten angegeben werden:
<hidden> #REQ_RIGHT edit xMsgD("Seitenname") </hidden>
Durch Einschliessen der obigen Angaben in die hidden-Wiki-Tags wird erreicht, dass diese Angaben nicht auf der Seite ausgegeben werden.
Mit der Zeile #REQ_RIGHT wird definiert, welche Rechte ein User mindestens haben muss, um die Plugin-Seite aufrufen bzw. ausführen zu können. Standard-Recht ist new, womit ein User mindestens die Rechte zum Anlegen (Upload) von Seiten haben muss.
Weitere mögliche Werte in aufsteigender Reihenfolge sind: none, read, disc, new, edit, manage, admin
Durch die Zeile xMsgD(..) wird dem Verwaltungsprogramm zum Erstellen der Übersetzungen xlang.asp der Originalname der Plugin-Seite bekannt gemacht. xlang.asp scannt alle Dateien im Plugin-Verzeichnis nach Stellen mit xMsg Aufrufen und sammelt die so gefundenen Texte in Sprach-Dateien (siehe xlang Dokumentation).
Wenn der Plugin-Seitenname in einem Script benötigt wird, kann er anstatt im Header im Script definiert werden:
<wscript> dim PluginPageName: PluginPageName = xMsgD("Seitenname") : </wscript>
Ein Plugin muss nur in einer Landessprache erstellt werden. Wenn alle Ausgabetexte in xMsg() Aufrufe verpackt werden, wird die Seite automatisch in der gewählten Landessprache ausgegeben, sofern eine entsprechende Sprach-Datei erstellt worden ist. Somit sind Plugin-Seiten Sprachunabhängig.
ASP: Mehrsprachige Programme (xlang)
Plugins laufen mit erweiterten Rechten. Das heisst, Plugins dürfen alle VbScript und Wiki-Funktionen ohne Einschränkung nutzen. Diese Rechte werden standardmässig auch auf User-Scripts und User-Makros vererbt, welche per Plugin ausgeführt werden (z.B. bei der Probierseite des Wikis).
Durch Aufruf der Funktion InhibitExecRight werden diese Rechte für User Makros und Scripts wieder auf die normalerweise dafür geltenden Rechte zurückgesetzt.
sub PluginFunction() InhibitExecRight : end sub
Mit InhibitExecRight werden nicht die Rechte des Plugins selbst eingeschränkt.
Damit wird verhindert, dass böswillige Scripts oder Makros ausgeführt werden, mit denen zum Beispiel Seiten gelöscht werden.
Das Debuggen von Plugin-Code ist mit Hilfe eines Debuggers nur beschränkt möglich. Folgende Einstellungen können bei der Fehlersuche nützlich sein:
Setze in wikiengine.inc die Konstante WIKI_DEBUG = true. Dadurch werden Javascripts in nicht gepackter Form geladen und bei einigen Programmierfehlern wird das Programm gestopt und eine Fehlermeldung ausgegeben.
Setze in einem Wscript die Anweisung #DEBUG. Dies fügt umfangreiche Trace-Aufrufe in jeder Funktion ein. Bei einigen Runtime-Fehlern wird dann die Zeile ausgegeben, bei welcher der Fehler aufgetreten ist.