diff options
author | Andreas Gohr <andi@splitbrain.org> | 2014-03-14 17:09:29 +0100 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2014-03-14 17:09:29 +0100 |
commit | 3275c5d6feb683bf4151f7d4867b10431b254d1e (patch) | |
tree | 4fd5e9ecf9165eb1b7cddd3d2bb1ae1330db92ab /lib/plugins/authad/action.php | |
parent | 8fcb305db0081dacd8e8ad0583da5ecc6c6837dc (diff) | |
parent | 1359eacbdbff842b241a85ea274a00982fec9267 (diff) | |
download | rpg-3275c5d6feb683bf4151f7d4867b10431b254d1e.tar.gz rpg-3275c5d6feb683bf4151f7d4867b10431b254d1e.tar.bz2 |
Merge branch 'master' into diff_navigation
* master: (103 commits)
Add a basic test case for the cache
Events: Trigger a warning if the default action is not callable
Fix caching (make the event callback public again)
translation update
translation update
translation update
translation update
translation update
translation update
translation update
avoid HTTP image screenshot urls. closes #595
translation update
Extension manager: Fix cache extension to be .repo
adjusted the office type color again
another instance of empty() where an array key might not exist
remove placeholder van denied.txt
updated file icons once more
removed 'not logged in' text, loginform is shown already
Revert "added stripped bit to language file"
fixed index file
...
Conflicts:
inc/html.php
Diffstat (limited to 'lib/plugins/authad/action.php')
-rw-r--r-- | lib/plugins/authad/action.php | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/lib/plugins/authad/action.php b/lib/plugins/authad/action.php index e69de29bb..97be9897e 100644 --- a/lib/plugins/authad/action.php +++ b/lib/plugins/authad/action.php @@ -0,0 +1,91 @@ +<?php +/** + * DokuWiki Plugin addomain (Action Component) + * + * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html + * @author Andreas Gohr <gohr@cosmocode.de> + */ + +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +/** + * Class action_plugin_addomain + */ +class action_plugin_authad extends DokuWiki_Action_Plugin { + + /** + * Registers a callback function for a given event + */ + public function register(Doku_Event_Handler &$controller) { + + $controller->register_hook('AUTH_LOGIN_CHECK', 'BEFORE', $this, 'handle_auth_login_check'); + $controller->register_hook('HTML_LOGINFORM_OUTPUT', 'BEFORE', $this, 'handle_html_loginform_output'); + + } + + /** + * Adds the selected domain as user postfix when attempting a login + * + * @param Doku_Event $event + * @param array $param + */ + public function handle_auth_login_check(Doku_Event &$event, $param) { + global $INPUT; + + /** @var auth_plugin_authad $auth */ + global $auth; + if(!is_a($auth, 'auth_plugin_authad')) return; // AD not even used + + if($INPUT->str('dom')) { + $usr = $auth->cleanUser($event->data['user']); + $dom = $auth->_userDomain($usr); + if(!$dom) { + $usr = "$usr@".$INPUT->str('dom'); + } + $INPUT->post->set('u', $usr); + $event->data['user'] = $usr; + } + } + + /** + * Shows a domain selection in the login form when more than one domain is configured + * + * @param Doku_Event $event + * @param array $param + */ + public function handle_html_loginform_output(Doku_Event &$event, $param) { + global $INPUT; + /** @var auth_plugin_authad $auth */ + global $auth; + if(!is_a($auth, 'auth_plugin_authad')) return; // AD not even used + $domains = $auth->_getConfiguredDomains(); + if(count($domains) <= 1) return; // no choice at all + + /** @var Doku_Form $form */ + $form =& $event->data; + + // any default? + $dom = ''; + if($INPUT->has('u')) { + $usr = $auth->cleanUser($INPUT->str('u')); + $dom = $auth->_userDomain($usr); + + // update user field value + if($dom) { + $usr = $auth->_userName($usr); + $pos = $form->findElementByAttribute('name', 'u'); + $ele =& $form->getElementAt($pos); + $ele['value'] = $usr; + } + } + + // add select box + $element = form_makeListboxField('dom', $domains, $dom, $this->getLang('domain'), '', 'block'); + $pos = $form->findElementByAttribute('name', 'p'); + $form->insertElement($pos + 1, $element); + } + +} + +// vim:ts=4:sw=4:et:
\ No newline at end of file |