Aktuelle Änderungen - Suchen:

PmWiki (deutsch) für die Liste aller Seiten


Englisch:

PmWiki

pmwiki.org

edit SideBar

https://dados.ufrn.br/sv/user/xanax874 https://dados.ufrn.br/sv/user/xanor358 https://dados.ufrn.br/sv/user/valium924 https://dados.ufrn.br/sv/user/stesolid354 https://dados.ufrn.br/sv/user/ativan844 https://dados.ufrn.br/sv/user/stilnoct978 https://dados.ufrn.br/sv/user/ambien352 https://dados.ufrn.br/sv/user/tramadol326 https://dados.ufrn.br/sv/user/ritalin838 https://dados.ufrn.br/sv/user/adderall235 https://dados.ufrn.br/sv/user/concerta663 https://dados.ufrn.br/sv/user/elvanse932 https://dados.ufrn.br/sv/user/sonata824 https://dados.ufrn.br/sv/user/lunesta729 https://dados.ufrn.br/sv/user/modafinil390 https://dados.ufrn.br/sv/user/karisoprodol132 https://dados.ufrn.br/sv/user/midazolam325 https://dados.ufrn.br/sv/user/triazolam340 https://dados.ufrn.br/sv/user/temazepam392 https://dados.ufrn.br/sv/user/etizolam353 https://dados.ufrn.br/es/user/xanax875 https://dados.ufrn.br/es/user/trankimazin942 https://dados.ufrn.br/es/user/valium844 https://dados.ufrn.br/es/user/ativan323 https://dados.ufrn.br/es/user/orfidal388 https://dados.ufrn.br/es/user/stilnox748 https://dados.ufrn.br/es/user/ambien923 https://dados.ufrn.br/es/user/imovane530 https://dados.ufrn.br/es/user/tramadol284 https://dados.ufrn.br/es/user/adipex947 https://dados.ufrn.br/es/user/rivotril902 https://dados.ufrn.br/es/user/lexatin923 https://dados.ufrn.br/es/user/lexotan913 https://dados.ufrn.br/es/user/lyrica348 https://dados.ufrn.br/es/user/tapentadol240 https://dados.ufrn.br/es/user/ritalin737 https://dados.ufrn.br/es/user/adderall320 https://dados.ufrn.br/es/user/cytotec823 https://dados.ufrn.br/es/user/concerta552 https://dados.ufrn.br/es/user/rubifen325 https://dados.ufrn.br/es/user/elvanse934 https://dados.ufrn.br/es/user/sonata663 https://dados.ufrn.br/es/user/lunesta728 https://dados.ufrn.br/es/user/modafinilo492 https://dados.ufrn.br/es/user/carisoprodol249 https://dados.ufrn.br/es/user/midazolam349 https://dados.ufrn.br/es/user/triazolam934 https://dados.ufrn.br/es/user/temazepam234 https://dados.ufrn.br/es/user/etizolam428 https://dados.ufrn.br/it/user/xanax578 https://dados.ufrn.br/it/user/valium342 https://dados.ufrn.br/it/user/ativan991 https://dados.ufrn.br/it/user/tavor922 https://dados.ufrn.br/it/user/stilnox882 https://dados.ufrn.br/it/user/ambien576 https://dados.ufrn.br/it/user/imovane663 https://dados.ufrn.br/it/user/tramadolo249 https://dados.ufrn.br/it/user/adipex924 https://dados.ufrn.br/it/user/rivotril539 https://dados.ufrn.br/it/user/lexotan924 https://dados.ufrn.br/it/user/lyrica667 https://dados.ufrn.br/it/user/tapentadolo935 https://dados.ufrn.br/it/user/ritalin367 https://dados.ufrn.br/it/user/adderall848 https://dados.ufrn.br/it/user/cytotec892 https://dados.ufrn.br/it/user/concerta349 https://dados.ufrn.br/it/user/elvanse874 https://dados.ufrn.br/it/user/sonata842 https://dados.ufrn.br/it/user/lunesta922 https://dados.ufrn.br/it/user/modafinil220 https://dados.ufrn.br/it/user/carisoprodolo290 https://dados.ufrn.br/it/user/midazolam488 https://dados.ufrn.br/it/user/triazolam377 https://dados.ufrn.br/it/user/temazepam233 https://dados.ufrn.br/it/user/etizolam582 https://dados.ufrn.br/nl/user/xanax773 https://dados.ufrn.br/nl/user/valium928 https://dados.ufrn.br/nl/user/ativan327 https://dados.ufrn.br/nl/user/temesta684 https://dados.ufrn.br/nl/user/stilnoct934 https://dados.ufrn.br/nl/user/ambien750 https://dados.ufrn.br/nl/user/imovane569 https://dados.ufrn.br/nl/user/tramadol531 https://dados.ufrn.br/nl/user/tapentadol663 https://dados.ufrn.br/nl/user/rivotril437 https://dados.ufrn.br/nl/user/lexotanil495 https://dados.ufrn.br/nl/user/lyrica982 https://dados.ufrn.br/nl/user/adipex920 https://dados.ufrn.br/nl/user/cytotec847 https://dados.ufrn.br/nl/user/ritalin748 https://dados.ufrn.br/nl/user/adderall774 https://dados.ufrn.br/nl/user/concerta551 https://dados.ufrn.br/nl/user/elvanse982 https://dados.ufrn.br/nl/user/sonata628 https://dados.ufrn.br/nl/user/lunesta620 https://dados.ufrn.br/nl/user/modafinil538 https://dados.ufrn.br/nl/user/carisoprodol889 https://dados.ufrn.br/nl/user/midazolam235 https://dados.ufrn.br/nl/user/triazolam824 https://dados.ufrn.br/nl/user/temazepam302 https://dados.ufrn.br/nl/user/etizolam537 https://dados.ufrn.br/de/user/xanax573 https://dados.ufrn.br/de/user/valium139 https://dados.ufrn.br/de/user/ativan348 https://dados.ufrn.br/de/user/tavor563 https://dados.ufrn.br/de/user/stilnox890 https://dados.ufrn.br/de/user/ambien875 https://dados.ufrn.br/de/user/imovane738 https://dados.ufrn.br/de/user/tramadol982 https://dados.ufrn.br/de/user/tapentadol955 https://dados.ufrn.br/de/user/rivotril499 https://dados.ufrn.br/de/user/lexotanil942 https://dados.ufrn.br/de/user/lyrica981 https://dados.ufrn.br/de/user/adipex987 https://dados.ufrn.br/de/user/cytotec944 https://dados.ufrn.br/de/user/ritalin895 https://dados.ufrn.br/de/user/adderall903 https://dados.ufrn.br/de/user/xanax357 https://dados.ufrn.br/de/user/alprazolam130 https://dados.ufrn.br/de/user/valium847 https://dados.ufrn.br/de/user/diazepam299 https://dados.ufrn.br/de/user/ativan771 https://dados.ufrn.br/de/user/tavor135 https://dados.ufrn.br/de/user/lorazepam583 https://dados.ufrn.br/de/user/ambien532 https://dados.ufrn.br/de/user/stilnox350 https://dados.ufrn.br/de/user/zolpidem577 https://dados.ufrn.br/de/user/imovane883 https://dados.ufrn.br/de/user/zopiclon964 https://dados.ufrn.br/de/user/tramadol638 https://dados.ufrn.br/de/user/tapentadol236 https://dados.ufrn.br/de/user/rivotril368 https://dados.ufrn.br/de/user/clonazepam647 https://dados.ufrn.br/de/user/lexotanil445 https://dados.ufrn.br/de/user/bromazepam730 https://dados.ufrn.br/de/user/lyrica331 https://dados.ufrn.br/de/user/pregabalin682 https://dados.ufrn.br/de/user/adipex489 https://dados.ufrn.br/de/user/phentermin537 https://dados.ufrn.br/de/user/cytotec228 https://dados.ufrn.br/de/user/misoprostol355 https://dados.ufrn.br/de/user/ritalin325 https://dados.ufrn.br/de/user/concerta554 https://dados.ufrn.br/de/user/medikinet364 https://dados.ufrn.br/de/user/adderall605 https://dados.ufrn.br/de/user/elvanse356 https://dados.ufrn.br/de/user/modafinil479 https://dados.ufrn.br/fi/user/xanax588 https://dados.ufrn.br/fi/user/valium840 https://dados.ufrn.br/fi/user/ativan942 https://dados.ufrn.br/fi/user/temesta789 https://dados.ufrn.br/fi/user/rativor663 https://dados.ufrn.br/fi/user/stilnoct920 https://dados.ufrn.br/fi/user/ambien982 https://dados.ufrn.br/fi/user/imovane953 https://dados.ufrn.br/fi/user/tramadoli358 https://dados.ufrn.br/fi/user/tapentadoli532 https://dados.ufrn.br/fi/user/rivotril935 https://dados.ufrn.br/fi/user/rivatril942 https://dados.ufrn.br/fi/user/lexotanil955 https://dados.ufrn.br/fi/user/lyrica093 https://dados.ufrn.br/fi/user/adipex984 https://dados.ufrn.br/fi/user/cytotec354 https://dados.ufrn.br/fi/user/ritalin882 https://dados.ufrn.br/fi/user/adderall490 https://dados.ufrn.br/fi/user/concerta562 https://dados.ufrn.br/fi/user/elvanse856 https://dados.ufrn.br/fi/user/sonata782 https://dados.ufrn.br/fi/user/lunesta682 https://dados.ufrn.br/fi/user/modafiniili253 https://dados.ufrn.br/fi/user/karisoprodoli538 https://dados.ufrn.br/fi/user/midatsolaami835 https://dados.ufrn.br/fi/user/triatsolaami783 https://dados.ufrn.br/fi/user/tematsepaami856 https://dados.ufrn.br/fi/user/etitsolaami753 https://dados.ufrn.br/da_DK/user/xanax775 https://dados.ufrn.br/da_DK/user/valium858 https://dados.ufrn.br/da_DK/user/stesolid151 https://dados.ufrn.br/da_DK/user/ativan779 https://dados.ufrn.br/da_DK/user/stilnoct894 https://dados.ufrn.br/da_DK/user/ambien799 https://dados.ufrn.br/da_DK/user/imovane562 https://dados.ufrn.br/da_DK/user/tramadol559 https://dados.ufrn.br/da_DK/user/tapentadol537 https://dados.ufrn.br/da_DK/user/rivotril953 https://dados.ufrn.br/da_DK/user/lexotanil535 https://dados.ufrn.br/da_DK/user/bromam994 https://dados.ufrn.br/da_DK/user/lyrica944 https://dados.ufrn.br/da_DK/user/adipex995 https://dados.ufrn.br/da_DK/user/cytotec437 https://dados.ufrn.br/da_DK/user/ritalin746 https://dados.ufrn.br/da_DK/user/adderall538 https://dados.ufrn.br/da_DK/user/concerta527 https://dados.ufrn.br/da_DK/user/elvanse549 https://dados.ufrn.br/da_DK/user/sonata783 https://dados.ufrn.br/da_DK/user/lunesta268 https://dados.ufrn.br/da_DK/user/modafinil946 https://dados.ufrn.br/da_DK/user/carisoprodol122 https://dados.ufrn.br/da_DK/user/midazolam340 https://dados.ufrn.br/da_DK/user/triazolam942 https://dados.ufrn.br/da_DK/user/temazepam734 https://dados.ufrn.br/da_DK/user/etizolam520 https://dados.ufrn.br/pl/user/xanax548 https://dados.ufrn.br/pl/user/valium347 https://dados.ufrn.br/pl/user/ativan664 https://dados.ufrn.br/pl/user/tavor674 https://dados.ufrn.br/pl/user/stilnox883 https://dados.ufrn.br/pl/user/ambine732 https://dados.ufrn.br/pl/user/imovane240 https://dados.ufrn.br/pl/user/zimovane523 https://dados.ufrn.br/pl/user/tramadol984 https://dados.ufrn.br/pl/user/tapentadol249 https://dados.ufrn.br/pl/user/rivotril428 https://dados.ufrn.br/pl/user/lexotanil981 https://dados.ufrn.br/pl/user/lexotan426 https://dados.ufrn.br/pl/user/bromox924 https://dados.ufrn.br/pl/user/lyrica922 https://dados.ufrn.br/pl/user/adipex902 https://dados.ufrn.br/pl/user/cytotec872 https://dados.ufrn.br/pl/user/ritalin247 https://dados.ufrn.br/pl/user/adderall359 https://dados.ufrn.br/pl/user/concerta924 https://dados.ufrn.br/pl/user/elvanse952 https://dados.ufrn.br/pl/user/sonata539 https://dados.ufrn.br/pl/user/lunesta552 https://dados.ufrn.br/pl/user/modafinil357 https://dados.ufrn.br/pl/user/karizoprodol235 https://dados.ufrn.br/pl/user/midazolam110 https://dados.ufrn.br/pl/user/triazolam284 https://dados.ufrn.br/pl/user/temazepam357 https://dados.ufrn.br/pl/user/etizolam377 https://dados.ufrn.br/cs_CZ/user/xanax377 https://dados.ufrn.br/cs_CZ/user/valium859 https://dados.ufrn.br/cs_CZ/user/ativan462 https://dados.ufrn.br/cs_CZ/user/stilnox824 https://dados.ufrn.br/cs_CZ/user/stilnoct843 https://dados.ufrn.br/cs_CZ/user/ambien134 https://dados.ufrn.br/cs_CZ/user/imovane504 https://dados.ufrn.br/cs_CZ/user/tramadol359 https://dados.ufrn.br/cs_CZ/user/tapentadol935 https://dados.ufrn.br/cs_CZ/user/rivotril834 https://dados.ufrn.br/cs_CZ/user/lexotanil358 https://dados.ufrn.br/cs_CZ/user/lyrica943 https://dados.ufrn.br/cs_CZ/user/adipex955 https://dados.ufrn.br/cs_CZ/user/cytotec940 https://dados.ufrn.br/cs_CZ/user/ritalin788 https://dados.ufrn.br/cs_CZ/user/adderall326 https://dados.ufrn.br/cs_CZ/user/concerta873 https://dados.ufrn.br/cs_CZ/user/elvanse523 https://dados.ufrn.br/cs_CZ/user/sonata642 https://dados.ufrn.br/cs_CZ/user/lunesta593 https://dados.ufrn.br/cs_CZ/user/modafinil359 https://dados.ufrn.br/cs_CZ/user/carisoprodol158 https://dados.ufrn.br/cs_CZ/user/midazolam105 https://dados.ufrn.br/cs_CZ/user/triazolam924 https://dados.ufrn.br/cs_CZ/user/temazepam942 https://dados.ufrn.br/cs_CZ/user/etizolam829 https://dados.ufrn.br/pt_BR/user/xanax358 https://dados.ufrn.br/pt_BR/user/valium548 https://dados.ufrn.br/pt_BR/user/ativan842 https://dados.ufrn.br/pt_BR/user/lorenin358 https://dados.ufrn.br/pt_BR/user/ambien359 https://dados.ufrn.br/pt_BR/user/stilnox627 https://dados.ufrn.br/pt_BR/user/cymerion325 https://dados.ufrn.br/pt_BR/user/imovane552 https://dados.ufrn.br/pt_BR/user/tramadol239 https://dados.ufrn.br/pt_BR/user/tapentadol358 https://dados.ufrn.br/pt_BR/user/rivotril478 https://dados.ufrn.br/pt_BR/user/lexotan823 https://dados.ufrn.br/pt_BR/user/bromalex932 https://dados.ufrn.br/pt_BR/user/lyrica920 https://dados.ufrn.br/pt_BR/user/adipex929 https://dados.ufrn.br/pt_BR/user/cytotec828 https://dados.ufrn.br/pt_BR/user/ritalin881 https://dados.ufrn.br/pt_BR/user/adderall298 https://dados.ufrn.br/fr/user/alprazolam753 https://dados.ufrn.br/fr/user/diazepam744 https://dados.ufrn.br/fr/user/lorazepam239 https://dados.ufrn.br/fr/user/zolpidem482 https://dados.ufrn.br/fr/user/tramadol389 https://dados.ufrn.br/fr/user/bromazepam845 https://dados.ufrn.br/de/user/alprazolam667 https://dados.ufrn.br/de/user/diazepam993 https://dados.ufrn.br/de/user/lorazepam538 https://dados.ufrn.br/de/user/zolpidem313 https://dados.ufrn.br/de/user/tramadol235 https://dados.ufrn.br/de/user/bromazepam359 https://dados.ufrn.br/es/user/alprazolam539 https://dados.ufrn.br/es/user/diazepam352 https://dados.ufrn.br/es/user/lorazepam464 https://dados.ufrn.br/es/user/tramadol694 https://dados.ufrn.br/es/user/bromazepam834 https://dados.ufrn.br/it/user/alprazolam745 https://dados.ufrn.br/it/user/diazepam538 https://dados.ufrn.br/it/user/lorazepam350 https://dados.ufrn.br/it/user/zolpidem883 https://dados.ufrn.br/it/user/tramadolo771 https://dados.ufrn.br/it/user/bromazepam839 https://dados.ufrn.br/nl/user/alprazolam388 https://dados.ufrn.br/nl/user/diazepam667 https://dados.ufrn.br/nl/user/lorazepam358 https://dados.ufrn.br/nl/user/zolpidem119 https://dados.ufrn.br/nl/user/tramadol992 https://dados.ufrn.br/nl/user/bromazepam450 https://dados.ufrn.br/fi/user/alpratsolaami352 https://dados.ufrn.br/fi/user/diatsepaami889 https://dados.ufrn.br/fi/user/lorasepaami774 https://dados.ufrn.br/fi/user/tsolpideemi880 https://dados.ufrn.br/fi/user/tramadoli257 https://dados.ufrn.br/fi/user/bromatsepaami350 https://dados.ufrn.br/da_DK/user/alprazolam557 https://dados.ufrn.br/da_DK/user/diazepam429 https://dados.ufrn.br/da_DK/user/lorazepam248 https://dados.ufrn.br/da_DK/user/zolpidem250 https://dados.ufrn.br/da_DK/user/tramadol536 https://dados.ufrn.br/da_DK/user/bromazepam753 https://dados.ufrn.br/pt_BR/user/alprazolam724 https://dados.ufrn.br/pt_BR/user/diazepam428 https://dados.ufrn.br/pt_BR/user/lorazepam537 https://dados.ufrn.br/pt_BR/user/zolpidem166 https://dados.ufrn.br/pt_BR/user/tramadol592 https://dados.ufrn.br/pt_BR/user/bromazepam953 https://dados.ufrn.br/pl/user/alprazolam935 https://dados.ufrn.br/pl/user/diazepam530 https://dados.ufrn.br/pl/user/lorazepam359 https://dados.ufrn.br/pl/user/zolpidem554 https://dados.ufrn.br/pl/user/tramadol588 https://dados.ufrn.br/pl/user/bromazepam247 https://dados.ufrn.br/cs_CZ/user/alprazolam357 https://dados.ufrn.br/cs_CZ/user/diazepam635 https://dados.ufrn.br/cs_CZ/user/lorazepam188 https://dados.ufrn.br/cs_CZ/user/zolpidem350 https://dados.ufrn.br/cs_CZ/user/tramadol135 https://dados.ufrn.br/cs_CZ/user/bromazepam349 https://dados.ufrn.br/sv/user/oxycontin935 https://dados.ufrn.br/sv/user/oxynorm892 https://dados.ufrn.br/sv/user/piracetam420 https://dados.ufrn.br/sv/user/hydrokodon135 https://dados.ufrn.br/fr/user/oxycontin315 https://dados.ufrn.br/fr/user/oxynorm924 https://dados.ufrn.br/fr/user/piracetam913 https://dados.ufrn.br/fr/user/hydrocodone246 https://dados.ufrn.br/de/user/oxycontin913 https://dados.ufrn.br/de/user/oxygesic248 https://dados.ufrn.br/de/user/piracetam035 https://dados.ufrn.br/de/user/hydrocodon136 https://dados.ufrn.br/it/user/oxycontin591 https://dados.ufrn.br/it/user/oxynorm913 https://dados.ufrn.br/it/user/piracetam952 https://dados.ufrn.br/it/user/idrocodone335 https://dados.ufrn.br/es/user/oxycontin981 https://dados.ufrn.br/es/user/oxynorm518 https://dados.ufrn.br/es/user/piracetam843 https://dados.ufrn.br/es/user/hidrocodona527 https://dados.ufrn.br/nl/user/oxycontin357 https://dados.ufrn.br/nl/user/oxynorm752 https://dados.ufrn.br/nl/user/oxycodon428 https://dados.ufrn.br/nl/user/piracetam951 https://dados.ufrn.br/nl/user/hydrocodon362

Funktionen

für die Liste aller Seiten

Administratoren (Fortgeschritten), Entwickler

Diese Seite erklärt einiges der inneren Arbeit von PmWiki, indem sie erklärt, wie einige der Funktionen in PmWiki arbeiten. Wegen einer kürzeren Liste/Übersicht, die zum Beispiel für Rezepteschreiber nützlich ist, siehe Cookbook:Functions.

Wenn Sie diese Funktionen nutzen, versichern Sie sich, dass alle relevanten internen Variablen korrekt initialisiert worden sind. Siehe Eigene Auszeichnungen und Eigene Aktionen wegen weiterer Informationen darüber, wie diese Funktionen typischerweise von Markup() oder $HandleActions[] aufgerufen werden.

pmcrypt($password, $salt = null)

Die pmcrypt()-Funktion ist dazu gedacht, einen sicheren Ersatz für die PHP 5.6+ crypt()-Funktion zu bieten, wenn man kein $salt einsetzt, was sonst eine Warnmeldung (notice) hervorrufen würde. Wenn ein $salt angegeben wird, wird crypt() aufgerufen, um ein existierendes Passwort zu prüfen. Wenn ein $salt nicht angegeben wird, wird password_hash() aufgerufen, um ein kryptografisch starkes Passwort zu erzeugen.

pmsetcookie($name, $val="", $exp=0, $path="", $dom="", $secure=null, $httponly=null)

Diese Funktion ist gedacht als Ersatz für setcookie(). Sie setzt die $secure- und $httponly-Argumente, wenn sie nicht von der aufrufenden Funktion gesetzt werden und wenn $EnableCookieSecure und $EnableCookieHTTPOnly aktiviert sind.

PCCF($php_code, $callback_template='default', $callback_arguments = '$m') Missbilligt seit PHP 7.2

Die PCCF()-Funktion (PmWiki Create Callback Function) kann man einsetzen, um Callback-Funktionen zu erzeugen, die man mit preg_replace_callback einsetzt. Sie ist nötig für PHP 5.5., funktioniert aber auch bei früheren Versionen.

Das erste Element ist der auszuwertende PHP-Kode.

Das zweite Element (optional) ist die Callback-Vorlage, ein Schlüssel aus dem globalen $CallbackFnTemplates-Array. Es gibt zwei Vorlagen, die Rezepte-Autoren nutzen können

  • 'default' übergibt den $php_code als einen Funktionskode
  • 'return' packt $php_code als "return $php_code;" ein (seit PmWiki 2.2.62)

Das dritte Argument (optional) ist das Argument der Callback-Funktion. Beachten Sie, dass PmWiki das '$m'-Argument heranzieht, um Übereinstimmungen mit regulären Ausdrücken zu übergeben, Ihre Funktion kann aber auch eigene Argumente benutzen.

PCCF() erzeugt eine anonyme (Lambda-)Funktion, die den übergebenen Kode enthält, und lagert sie in einem Cache ein. Bei darauffolgenden Aufrufen mit demselben $php_code wird PCCF() den eingelagerten Funktionsnamen zurückgeben.

Siehe http://php.net/create_function.

PHP 7.2 missbilligt create_function() und zukünftige Versionen werden die Funktion entfernen. Wenn Sie alten Kode übertragen müssen, der PCCF() benutzt hat, können Sie gewöhnlich reguläre Funktionen schreiben und den Funktionsnamen dort übergeben, wo Sie vorher das Ergebnis von PCCF() übergeben haben. Nehmen wir z. B. an, Sie haben ein Muster wie dieses:

    '/(?<=^| )([a-z])/' => PCCF("return strtoupper(\$m[1]);"),

Für PHP_7.2-Kompatibilität können Sie eine Callback-Funktion schreiben:

    function my_callback($m) { return strtoupper($m[1]); }

Verändern Sie dann noch das Muster, dass es so aussieht:

    '/(?<=^| )([a-z])/' => 'my_callback%',

Siehe auch: das Rezept PccfToPcfOverride erlaubt existierende Rezepte unter PHP 7 laufen zu lassen ohne "deprecated create_function()"-Meldungen zu verursachen.

PPRA($array_search_replace, $string)

Die PPRA()-Funktion (PmWiki preg_replace array) kann man einsetzen, um eine Ersetzung mit Hilfe eines regulären Ausdrucks mit oder ohne Auswertung durchzuführen, für PHP_5.5-Kompatibilität.

Seit PmWiki 2.2.56 nutzt PmWiki diese Funktion, um die folgenden Arrays abzuarbeiten: $MakePageNamePatterns, $FmtP, $QualifyPatterns, $ROEPatterns, $ROSPatterns, $SaveAttrPatterns, $MakeUploadNamePatterns. Alle Benutzereinstellungen sollten weiterhin mit PHP_5.4 und früher funktionieren, aber Wikis, die mit PHP_5.5 laufen, brauchen ein paar Änderungen.

Das erste Argument enthält die "suchen'=>'ersetzen'-Paare, das zweite ist der "haystack"-String, der manipuliert werden soll.

Die 'replace'-Teile des Arrays können Strings oder Funktionsnamen sein. Wenn der 'replace'-Teil ein aufrufbarer Funktionsname ist, wird er via preg_replace_callback() mit dem Array der Übereinstimmungen als erstes Argument aufgerufen. Wenn er keine Funktion ist, wird ein einfacher preg_replace()-Aufruf durchgeführt.

Früher hat PmWiki solche Konstrukte benutzt:

  $fmt = preg_replace(array_keys($FmtP), array_values($FmtP), $fmt);

Jetzt ist es möglich, einfach dies zu benutzen:

  $fmt = PPRA($FmtP, $fmt);

Beachten Sie, dass die Suchmuster seit PHP_5.5 kein /e-Flag (Evaluation, Auswertung) mehr haben können. Beim Erzeugen eines $array_search_replace-Arrays vor PHP_5.5 konnte man (z. B. für $MakePageNamePatterns) etwas einsetzen wie:

  '/(?<=^| )([a-z])/e' => "strtoupper('$1')",

Seit PHP_5.5 sollte man dies einsetzen (funktioniert auch mit PHP_5.4 und früher):

  '/(?<=^| )([a-z])/' => PCCF("return strtoupper(\$m[1]);"),

Beachten Sie, dass das /e-Flag jetzt weggelassen werden sollte, anstelle von '$0', '$1', '$2', sollte man $m[0], $m[1], $m[2], etc. in dem Ersetzungskode einsetzen, und der Aufruf von PSS() im Ersetzungskode ist nicht nötig, da Backslashes nicht automatisch hinzugefügt werden.

PPRE($search_pattern, $replacement_code, $string) missbilligt seit PHP 7.2

Die PPRE()-Funktion (PmWiki preg_replace evaluate) kann eingesetzt werden, um eine reguläre Ausdruckersetzung mit Auswertung durchzuführen.

Seit PHP_5.5 missbilligt die preg_replace()-Funktion das /e-Flag und zeigt Warnungen an, wenn es doch eingesetzt wird. Die PPRE()-Funktion erzeugt automatisch eine Callback-Funktion mit dem Ersetzungskode und ruft diese auf.

Vor PHP_5.5 konnte man solche Aufrufe nutzen:

  $fmt = preg_replace('/\\$([A-Z]\\w*Fmt)\\b/e','$GLOBALS["$1"]',$fmt);

Seit PHP_5.5 kann man den vorhergehenden Kode-Schnipsel durch den folgenden ersetzen (funktioniert auch vor PHP 5.5):

  $fmt = PPRE('/\\$([A-Z]\\w*Fmt)\\b/','$GLOBALS[$m[1]]',$fmt);

Beachten Sie, dass das /e-Flag jetzt weggelassen werden sollte, anstelle von '$0', '$1', '$2', sollte man $m[0], $m[1], $m[2], etc. in dem Ersetzungskode einsetzen, und der Aufruf von PSS() im Ersetzungskode ist nicht nötig, da kein automatisches Hinzufügen von Backslashes passiert.

In PHP 7.2 und jünger ruft der Aufruf dieser Funktion eine "deprecated"-Notiz hervor. Sie sollten Ihren Kode neu schreiben für den Aufruf der Funktion preg_replace_callback, indem Sie den Kode in eine richtige Funktion übertragen:

  $fmt = preg_replace_callback('/\\$([A-Z]\\w*Fmt)\\b/', 'my_global_var_callback',$fmt);
  function my_global_var_callback($m) { return $GLOBALS[$m[1]]; }

Anstatt PCCF() zu benutzen, um eine anonyme Funktion zu erzeugen, fügen wir unserem Add-on eine reale Funktion hinzu und übergeben dann den Funktionsnamen als Muster-Ersetzung (siehe Beispiel bei PCCF, das funktioniert auch mit PHP4 und 5):

  '/(?<=^| )([a-z])/' => 'my_callback',

Qualify($pagename, $text)

Qualify() setzt $QualifyPatterns ein, um relative Verweise und Referenzen in absolute Entsprechungen umzuwandeln. Diese Funktion wird von gewöhnlichen Markups aufgerufen, die Text aus anderen Seiten einfügen. Sie ersetzt Links wie [[Page]] durch [[Group/Page]] und Seiten(text)variablen wie {$Title} durch {Group.Page$Title}, sodass sie in der Quellenseite und der einbettenden Seite gleichermaßen funktionieren. Siehe auch $QualifyPatterns und RetrieveAuthSection().

PHSC($string_or_array, $flags=ENT_COMPAT, $encoding=null, $double_encode=true)

Die PHSC()-Funktion (PmWiki HTML special characters) ist ein Ersatz für die PHP-Funktion htmlspecialchars.

Die htmlspecialchars()-Funktion wurde ab PHP_5.4 in zweierlei Hinsicht verändert: sie benötigt nun einen gültigen String für die eingesetzte Zeichenkodierung und die voreingestellte Zeichenkodierung ist UTF-8. Dadurch können Abschnitte einer Seite auf vielen Sites, die ISO-8859-1 nutzen, leer sein, wenn das dritte Argument ($encoding) in htmlspecialchars() bei dessen Aufruf nicht gesetzt ist.

Die PHSC()-Funktion ruft htmlspecialchars() mit einer 8-bit-Zeichenkodierung als drittes Argument auf, welche Zeichenkodierung das Wiki auch immer hat (es sei denn, Sie setzen explizit eine Zeichenkodierung). Auf diese Weise enthält der String niemals ungültige Zeichen.

Es sollte für Entwickler sicher sein, wenn sie Aufrufe von htmlspecialchars() durch solche von PHSC() ersetzten. In PHSC() ist nur der erste Parameter obligatorisch, wenngleich Autoren dazu neigen könnten, PHSC($string_or_array, ENT_QUOTES) aufzurufen.

Anders als htmlspecialchars() kann die PHSC()-Funktion Arrays iterativ bearbeiten, dabei werden nur die Werte verändert, nicht die Schlüssel des Arrays.

PSS($string)

Die PSS()-Funktion (PmWiki Strip Slashes) entfernt die Backslashes, die automatisch durch die /e-Option von PHPs preg_replace()-Funktion vor Anführungszeichen gesetzt werden. PSS() wird am ehesten eingesetzt, um Argumente für Markup() zu ersetzen, wenn das Muster die /e-Option gesetzt hat und eines oder mehrere der eingeklammerten Musterteile Backslashes oder Anführungszeichen enthalten könnte.

Von PM: PmWiki erwartet den Einsatz von PSS() immer innerhalb von Strings in doppelten Anführungszeichen, in deren Inneren wiederum einfach angeführte Strings enthalten sind. Der Grund dafür ist, dass wir nicht wollen, dass $1 oder $2 aus Versehen Zeichen enthalten, die dann zwischen den doppelten Anführungzeichen interpretiert werden, wenn PSS() durchgeführt wird.
Markup('foo', 'inline', '/(something)/e', 'Foo(PSS("$1"))'); # falsch
Markup('foo', 'inline', '/(something)/e', "Foo(PSS('$1'))"); # richtig

Beachten Sie, die Extra-Schrägstriche werden nur von preg_replace mit einem /e-Modifizierer hinzugefügt. Die Markup-Definition mit Markup_e() braucht PSS() im Ersetzungsstring NICHT zu benutzen. Die Markup-Definitionen neuen Typs mit Markup() und einem einfachen Funktionsna,en als Ersetzung brauchen PSS() in der Ersetzungsfunktion NICHT zu benutzen. Löschen Sie die PSS()-Aufrufe, wenn Sie alte Markup-Regeln in das neue Format übertragen.

Beispiel

Dies ist ein fiktives Beispiel, bei dem PSS() eingesetzt werden sollte. Nehmen wir an, dass Sie eine Direktive (:example:) definieren wollen, sodass (:example "Ein Pferd":) diesen HTML-Kode ergibt:

<div>"Ein Pferd"</div>.

Und so könnte die Markup-Regel erzeugt werden:

Markup('example', 'directives',
       '/\\(:example\\s(.*?):\\)/e',
       "Keep('<div>'.PSS('$1').'</div>')");

Der Einsatz von PSS() um '$1' ist nötig, weil der auf das Muster passende Text Anführungszeichen enthalten könnte und das /e Backslashes davorsetzen wird.

stripmagic($string)

Diese Funktion sollte eingesetzt werden beim Bearbeiten des Inhalts von $_POST- oder $_GET-Variablen, wenn diese Anführungszeichen oder Backslashes enthalten könnten. Sie prüft get_magic_quotes() und entfernt, beim Ergebnis wahr, die automatisch eingefügten Escapes aus dem String.

Diese Funktion kann Arrays rekursiv bearbeiten (nur die Werte werden bearbeitet).

FmtPageName($fmt, $pagename)

Gibt $fmt zurück, mit durchgeführter $variablen- und $[Internationalisierungs]-Ersetzung, mit der Vorgabe, dass die aktuelle Seite $pagename ist. Siehe unter den Variablen nach einer (unvollständigen) Liste der verfügbaren Variablen, siehe auch nach in Internationalisierungen wegen der Internationalisierung. Sicherheit: Nicht anwenden bei vom Benutzer eingegebenen Daten.

Das ist eine der wichtigsten Funktionen in PmWiki, siehe in FmtPageName() wegen der vielen Details.

Markup($name, $when, $pattern, $replace)

Fügt der Umwandlungstabelle ein neues Markup hinzu. Eine detailliertere Beschreibung finden Sie in Eigene Auszeichnungen.

Diese Funktion wird verwendet, um Übersetzungsregeln in PmWikis Übersetzungs-'Maschine' einzufügen. Alle Argumente von Markup() sind Strings, und zwar

$name
Der String benennt die eingefügte Regel. Wenn es schon eine Regel mit diesem Namen gibt, wird diese Regel ignoriert.
$when
Dieser String wird genutzt, um zu kontrollieren, wann eine Regel angewandt wird relativ zu anderen Regeln. Die Angabe "<xyz" bedeutet, wende diese Regel vor der Regel namens "xyz" an, während ">xyz" bedeutet, wende diese Regel nach der Regel namens "xyz" an. Siehe Eigene Auszeichnungen wegen weiterer Details bezüglich der Reihenfolge von Regeln.
$pattern
Dieser String ist ein regulärer Ausdruck, der von der Übersetzungs-'Maschine' benutzt wird, um nach dem Auftreten dieser Regel in der Quelle für das Markup zu suchen.
$replace
Dieser String wird den auf den regulären Ausdruck passenden Text ersetzen, wenn einer gefunden wurde.

Siehe auch Eigene Auszeichnungen und Cookbook:Functions#Markup

MarkupToHTML($pagename, $str)

wandelt den String in $str, der das Markup enthält, in den korrespondierenden HTML-Kode um, unter der Vorgabe, die aktuelle Seite sei $pagename.

Siehe auch: Cookbook:Functions#MarkupToHTML

mkdirp($dir)

Die Funktion mkdirp($dir) legt ein Verzeichnis $dir an, wenn es nicht schon existiert, einschließlich aller Elternverzeichnisse, die nötig sind. Für jedes erzeugte Verzeichnis wird geprüft, ob die Rechte für dies Verzeichnis ausreichen, damit PmWiki-Skripten daraus lesen und darin schreiben dürfen. Das schließt den Test auf Einschränkungen ein, die PHPs 'safe_mode'-Einstellungen bewirken. Wenn es mkdirp() nicht möglich ist, erfolgreich ein Schreib-/Lese-Verzeichnis anzulegen, bricht mkdirp() mit einer Fehlermeldung ab, die dem Administrator die Schritte anzeigt, entweder das Verzeichnis manuell anzulegen oder PmWiki genügend Rechte einzuräumen, dass es das selbst erledigen kann.

MakeLink($pagename, $target, $txt, $suffix, $fmt)

Die Funktion MakeLink($pagename, $target, $txt, $suffix, $fmt) gibt einen HTML-formatierten Anker-Verweis zurück. Ihre Argumente sind wie folgt:

 $pagename ist die Quellseite
 $target ist das Ziel des Verweises
 $txt ist der Wert für '$LinkText' in der Ausgabe 
 $suffix ist ein Anhängsel, das an $txt angehängt wird 
 $fmt ist ein Formatstring, der zur Anwendung kommt

Wenn $txt NULL ist oder nicht angegeben ist, dann wird es automatisch aus $target bestimmt.

Wenn $fmt NULL ist oder nicht angegeben ist, dann verwendet MakeLink das Standardformat, das durch den Typ des Verweises gegeben ist. Für Seitenverweise sind das die $LinkPageExistsFmt und die $LinkPageCreateFmt-Variablen, für externe Verweise kommt es entweder vom $IMapLinkFmt-Array oder von $UrlLinkFmt. Innerhalb des Formatstrings wird $LinkUrl ersetzt durch den aufgelösten URL für den Verweis, $LinkText wird ersetzt durch den zugehörigen Text und $LinkAlt wird ersetzt durch alle "title"-Informationen (alternativer Text), die mit dem Verweise zusammenhängen.

Siehe auch: MakeLink und Cookbook:Functions#MakeLink

MakeUploadName($pagename, $x)

MakeUploadName() nimmt einfach einen String $x (den Namen eines Anhangs) und wandelt ihn in einen gültigen Namen um, indem alle unerwünschten Zeichen entfernt werden. Der Name soll mit einem alphanumerischen Zeichen beginnen und enden. Seit Version 2.0.beta28, wird die Dateierweiterung in Kleinbuchstaben umgewandelt. Diese Funktion ist in scripts/upload.php definiert und wird nur angewendet, wenn Hochladen von Dateien aktiviert ist.

SessionAuth($pagename, $auth=NULL)

SessionAuth() bewältigt die Aufrechterhaltung der Authentifikation mit Cookie-Sitzungen. Die Sitzung enthält ein Passwort oder eine überprüfte ID und verbundene Gruppen von vorherigen Aufrufen. Es fügt der Sitzung Elemente, die von $auth übergeben werden, hinzu. Sie schreibt außerdem jedes Element, das in der Sitzung gesichert wurde, in $AuthPw (Passwörter) und $AuthList (IDs und Gruppen).

IsAuthorized($chal, $source, &$from)

IsAuthorized nimmt einen Seitenattribute-String (z. B. "id:user1 $1$Ff3w34HASH...") in $chal entgegen. $source wird einfach zurückgegeben und wird gebraucht, um die Auth-Kaskade (Seitenattribute - Gruppenattribute - $DefaultPassword) aufzustellen. $from wird zurückgegeben, wenn $chal leer ist, weil es nicht vor dem Aufruf von IsAuthorized() überprüft wird. Das ist nötig für die Auth-Kaskade. IsAuthorized() gibt ein Array mit drei Werten zurück: $auth 1 - authenticated, 0 - not authenticated, -1 - refused; $passwd; $source von der Parameterliste.

CondAuth ($pagename, 'auth level')

CondAuth implementiert das ConditionalMarkup für (:if auth level:). Zum Beispiel ist CondAuth($pagename,'edit') wahr, wenn die Autorisierungsebene 'edit' ist.

Sie können entweder Autorisierungsebenen ('read', 'edit', 'attr', 'admin') oder Aktionsnamen ('browse', 'upload', 'source') als das zweite Argument von CondAuth() einsetzen. Benutzen Sie die Funktion in Konfigurationsdateien, um Bedingungen mit einer Überprüfung der Autorisierungsebenen aufzustellen, ähnlich des Gebrauchs von (:if auth level:) in Wiki-Seiten.

Anmerkung: CondAuth() sollte aufgerufen werden, nachdem alle Autorisierungssebenen und Passwörter definiert worden sind. Wenn Sie sie mit PmWikiDe.Drafts benutzen, sollten Sie das draft.php-Skript einfügen bevor sie CondAuth() aufrufen:

   $EnableDrafts = 1;
   $DefaultPasswords['publish'] = pmcrypt('secret');
   include_once("$FarmD/scripts/draft.php");
   if (! CondAuth($pagename, 'edit')) { /* was auch immer */ }

Es ist wichtig, sich zu erinnern, dass der beste Platz für den Aufruf von CondAuth() nahe dem Ende Ihres config.php-Skriptes ist. CondAuth() bevölkert den Cache (die Cashes), nachfolgende (Kochbuch-)Skripten könnten damit Schwierigkeiten haben, weil sie einen leeren Cache erwarten. Troubleshooting ist in einem solchen Fall eine schwierige Angelegenheit.

RetrieveAuthPage($pagename, $level, $authprompt=true, $since=0)

Pm words as said in http://article.gmane.org/gmane.comp.web.wiki.pmwiki.user/12493/match=retrieveauthpage%% mit:

   $pagename   - Name der zu lesenden Seite
   $level      - erforderliche Autorisierungsebene (read/edit/auth/upload)
   $authprompt - wahr, wenn der Benutzer nötigenfalls zur Eingabe des Passwortes 
                 aufgefordert werden sollte
   $since      - wieviel vom Seitenverlauf gelesen werden soll 
                 0 == lies die komplette Seite einschließlich der ganzen Versionen ein
                 READPAGE_CURRENT == lies die Seite ein ohne die Versionen zu laden
                 timestamp == lies die Versionen nur zurück bis zum Zeitstempel ein

Der $since Parameter erlaubt PmWiki, das Einlesen zu beenden, sobald es die benötigte Information hat – d. h., wenn eine Operation wie Browsen die Seitenversionen nicht braucht, kann die Angabe von READPAGE_CURRENT die Ladezeit merklich verkürzen. (Das kann insbesondere für so etwas wie Suchen und Seitenlisten wichtig sein.)

Wenden Sie zum Beispiel $page = @RetrieveAuthPage('Main.MyPage', 'read') an, um ein Seitenobjekt zu erhalten, das all die Informationen der korrespondierenden Datei in unterschiedlichen Schlüsseln enthält, $page['text'] beispielsweise enthält einen String mit dem aktuellen Inhalt (wiki markup) von Main.MyPage. Dieser Gebrauch ist der alternativen Funktion ReadPage($pagename, $since=0) vorzuziehen, da sie die Autorisierung des Benutzers berücksichtigt, d. h. sie überprüft die Autorisierungsebene vorm Laden der Seite, jedenfalls kann sie so eingestellt werden. ReadPage() liest eine Seite ohne Rücksicht auf die Rechte ein.

Übergibt man 'ALWAYS' als Autorisierungsebene (statt 'read', 'edit', etc.), veranlasst das RetrieveAuthPage, die Seite auf jeden Fall zu lesen, sogar, wenn sie mit einem Lesepasswort geschützt ist.

RetrieveAuthSection($pagename, $pagesection, $list=NULL, $auth='read')

RetrieveAuthSection extrahiert einen Textabschnitt aus einer Seite. Wenn $pagesection mit etwas anderem als '#' beginnt, wird der Teil vor dem ersten '#' – oder bei dessen Fehlen, der gesamte Wert ~ als Angabe der gewünschten Herkunftsseite angesehen. Andernfalls sucht RetrieveAuthSection, sofern $list angegeben wurde, in den darin genannten Seiten (sollte ein Array sein). Falls keine dieser beiden Möglichkeiten eine Quellseite vorgegeben hat, wird $pagename als Quelle verwendet.

  • Der Name der verwendeten Quellseite wird in der globalen Variablen $RASPageName gespeichert.
  • Die aufrufende Funktion ist selbst verantwortlich dafür, ob und wie der beschaffte Text mittels Qualify() aufbereitet werden muss. Dies ist (nur) dann nötig, wenn Sie vorausbestimmen möchten, wie unqualifizierte Seiten- und Variablennamen aufgelöst werden sollen.
    • Wenn sie so funktionieren sollen wie im Originaltext, wählen Sie die Quellseite als Bezugsseite für Qualify().
    • Wenn der importierte Text nicht als Wikitext gedacht ist, sondern als sonstige Auszeichnungssprache, in der Doppelpaare eckiger Klammern vorkommen können, oder Dollarzeichen in geschweiften Klammern, dann sollte der Text nicht mittels Qualify() angepasst werden. Wenn Sie den Text in einen Wikitext ausgeben wollen, müssen Sie ihn möglicherweise mittels Keep() als "endgültig" verpacken lassen (im Falle von HTML-, RSS- oder sonstig XML-artiger Ausgabe: vorher PHSC()!), damit nachgelagerte Verarbeitungsschritte nicht auf die Idee kommen, sie müssten eine scheinbar vergessene Qualify()zierung nachholen.
    • Wenn Ihr Kode Wikitext für eine Hilfsseite produziert, die von anderen Seiten in einem späteren Stadium der Einfügungskette einverleibt wird, benutzen Sie "GruppenName.SeitenName" der Hilfsseite als $pagename-Argument für Qualify().

Das bietet einen Weg, das von ReadPage zurückgegebene Array zu begrenzen, sodass es nur den Inhalt bis zu einer bestimmten Abschnittmarkierung herauszieht. Zum Beispiel, ziehe den Text zwischen dem Textbeginn und '##blogend' heraus:

function FeedText($pagename, &$page, $tag) {
  $text = RetrieveAuthSection($pagename, '##blogend');
  $content = MarkupToHTML($pagename, $text);
  return "<$tag><![CDATA[$content]]></$tag>";
}

Das '##blogend'-Argument heißt, lies vom Beginn der Seite bis genau vor der Zeile, die die Markierung enthält. Siehe Einbinden anderer Seiten wegen weiterer Informationen über die Abschnittspezifikationen.

Diese Version liest keinen Text von Seiten, die lesegeschützt sind; wenn Sie Text auch von lesegeschützten Seiten haben wollen:

  $text = RetrieveAuthSection($pagename, '##blogend', NULL, 'ALWAYS');

UpdatePage($pagename, $old (page object), $new (page object));

weitere technische Anmerkungen

UpdatePage() erlaubt Kochbuchrezepten, das Verhalten des Bearbeitens einer Wikiseite mit dem Browser zu imitieren. Intern macht PmWiki einige haushälterische Arbeiten, die über diese Funktion erreichbar sind (Erhalten der Verlaufs-(diff)-Information, Erhöhen der Seitenrevisionsnummer, Auffrischen der RecentChanges-Seiten, Senden von E-Mail-Benachrichtigungen etc. )

  • "Page objekt" bezieht sich auf ein Array, das von ReadPage($pagename); zurückgegeben wurde. Anmerkung: $new['text'] sollte alle Seitendaten für die neue Version der Seite enthalten.
  • Wenn eine Seite nicht existiert, wird UpdatePage() versuchen, sie anzulegen.
  • Weglassen von $old (also UpdatePage($pagename, '', $new);) wird alle Seitenverlaufsdaten löschen – ein tabula rasa.

UpdatePage() kann nicht direkt von config.php aufgerufen werden, weil es notwendige Initialisierungen gibt, die erst später in pmwiki.php gemacht werden. Es reicht nicht, stdconfig.php zu laden. Wenn Sie UpdatePage() nutzen wollen, müssen Sie es innerhalb einer eigenen Auszeichnung, eines eigenen Markup-Ausdrucks, oder einer benutzerdefinierten Aktion tun.

Categories: PmWiki Developer

Siehe auch

Cookbook.Functions? auf englisch für die Liste aller Seiten


Übersetzung von PmWiki.Functions,   Originalseite auf PmWikiDe.Functions   —   Rückverweise

Zuletzt geändert:   PmWikiDe.Functionsam 03.09.2019
 PmWiki.Functionsam 30.08.2019
Bearbeiten - Versionen - Druckansicht - Aktuelle Änderungen - Suchen
Zuletzt geändert am 03.09.2019 09:10 Uhr