diff options
Diffstat (limited to 'wiki/inc/Action/Logout.php')
-rw-r--r-- | wiki/inc/Action/Logout.php | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/wiki/inc/Action/Logout.php b/wiki/inc/Action/Logout.php new file mode 100644 index 0000000..1590904 --- /dev/null +++ b/wiki/inc/Action/Logout.php @@ -0,0 +1,50 @@ +<?php + +namespace dokuwiki\Action; + +use dokuwiki\Action\Exception\ActionDisabledException; +use dokuwiki\Action\Exception\ActionException; + +/** + * Class Logout + * + * Log out a user + * + * @package dokuwiki\Action + */ +class Logout extends AbstractUserAction { + + /** @inheritdoc */ + public function minimumPermission() { + return AUTH_NONE; + } + + /** @inheritdoc */ + public function checkPreconditions() { + parent::checkPreconditions(); + + /** @var \DokuWiki_Auth_Plugin $auth */ + global $auth; + if(!$auth->canDo('logout')) throw new ActionDisabledException(); + } + + /** @inheritdoc */ + public function preProcess() { + global $ID; + global $INPUT; + + // when logging out during an edit session, unlock the page + $lockedby = checklock($ID); + if($lockedby == $INPUT->server->str('REMOTE_USER')) { + unlock($ID); + } + + // do the logout stuff and redirect to login + auth_logoff(); + send_redirect(wl($ID, array('do' => 'login'))); + + // should never be reached + throw new ActionException('login'); + } + +} |