Erstmal Danke für die Antwort. Ich habe mich inzwischen mit dem Event-System auseinander gesetzt und ein Plugin geschrieben welches auch funktioniert. Jedoch ist der Ansatz bei mir ganz anders. Jetzt ist es eine Frage der Eleganz und ich würde gern noch etwas dazulerenen!
Der Event heißt ACTION_ACT_PREPROCESS. In dem Plugin checkst du ob die action "show" ist, ob der user noch nicht eingeloggt ist ($_SERVER['REMOTE_USER'] ist nicht gesetzt) und ob die aufgerufene Seite schreibgeschützt ist (die Funtion dafür heißt auth_quickaclcheck()).
Treffen alle diese Vorraussetzung zu, setzt du einfach $event->data = "login" und DokuWiki sollte die login seite anzeigen.
* Der Event "ACTION_ACT_PREPROCESS" wird in act_dispatch() zwei mal aufgerufen und ich vermute Du meinst den "BEFORE" Event?
* Woher nehme ich im Event-Hanlder die $ID die ich für auth_quickaclcheck() benötige? (global $ID; ?)
Ich versuche das mal so zu programmieren, denn es klingt alles logisch. Vielleicht wirst Du auch mal einen Blick auf meine derzeitige Lösung und sagst mir ob ich da falsch liege, denn ich bin einen ganz anderen Ansatz gegangen.
Meine Lösung:
sieht bislang so aus, das ich den Event "TPL_CONTENT_DISPLAY"/"AFTER" hooke. Hier habe ich eine $ACT von "denied", also es wurde bereits die "Zugriff Verweigert" Seite ausgegeben. Im Event-Handler rufe ich dann html_login() auf, was die Login-Seite rendert und hinzufügt. So habe ich oben in der Seite den Grund und darunter direkt die Loginfelder.
<?php
/**
* Dokuwiki Action Plugin: Show Login-Page on "Access Denied"
*
* @author Oliver Geisen <oliver.geisen@kreisbote.de>
*/
if(!defined('DOKU_INC')) die();
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'action.php');
class action_plugin_showlogin extends DokuWiki_Action_Plugin {
/**
* return some info
*/
function getInfo(){
return array(
'author' => 'Oliver Geisen',
'email' => 'oliver.geisen@kreisbote.de',
'date' => '2008-04-17',
'name' => 'Show Login',
'desc' => 'Shows login page on access denied.',
'url' => 'http://service.kreisbote.de/downloads/public/showlogin.zip',
);
}
/**
* Register its handlers with the dokuwiki's event controller
*/
function register(&$controller) {
$controller->register_hook('TPL_CONTENT_DISPLAY', 'AFTER', $this, 'append_to_content');
}
function append_to_content(&$event, $param) {
global $ACT;
global $INFO;
if ($ACT == 'denied') {
if ($INFO['perm'] == 0) {
html_login();
}
}
}
}