[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/lib/plugins/authad/ -> action.php (source)

   1  <?php
   2  
   3  use dokuwiki\Extension\ActionPlugin;
   4  use dokuwiki\Extension\EventHandler;
   5  use dokuwiki\Extension\Event;
   6  
   7  /**
   8   * DokuWiki Plugin addomain (Action Component)
   9   *
  10   * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
  11   * @author  Andreas Gohr <gohr@cosmocode.de>
  12   */
  13  
  14  /**
  15   * Class action_plugin_addomain
  16   */
  17  class action_plugin_authad extends ActionPlugin
  18  {
  19      /**
  20       * Registers a callback function for a given event
  21       */
  22      public function register(EventHandler $controller)
  23      {
  24          $controller->register_hook('AUTH_LOGIN_CHECK', 'BEFORE', $this, 'handleAuthLoginCheck');
  25          $controller->register_hook('FORM_LOGIN_OUTPUT', 'BEFORE', $this, 'handleFormLoginOutput');
  26      }
  27  
  28      /**
  29       * Adds the selected domain as user postfix when attempting a login
  30       *
  31       * @param Event $event
  32       * @param array      $param
  33       */
  34      public function handleAuthLoginCheck(Event $event, $param)
  35      {
  36          global $INPUT;
  37  
  38          /** @var auth_plugin_authad $auth */
  39          global $auth;
  40          if (!is_a($auth, 'auth_plugin_authad')) return; // AD not even used
  41  
  42          if ($INPUT->str('dom')) {
  43              $usr = $auth->cleanUser($event->data['user']);
  44              $dom = $auth->getUserDomain($usr);
  45              if (!$dom) {
  46                  $usr = "$usr@" . $INPUT->str('dom');
  47              }
  48              $INPUT->post->set('u', $usr);
  49              $event->data['user'] = $usr;
  50          }
  51      }
  52  
  53      /**
  54       * Shows a domain selection in the login form when more than one domain is configured
  55       *
  56       * @param Event $event
  57       * @param array      $param
  58       */
  59      public function handleFormLoginOutput(Event $event, $param)
  60      {
  61          global $INPUT;
  62          /** @var auth_plugin_authad $auth */
  63          global $auth;
  64          if (!is_a($auth, 'auth_plugin_authad')) return; // AD not even used
  65          $domains = $auth->getConfiguredDomains();
  66          if (count($domains) <= 1) return; // no choice at all
  67  
  68          /** @var dokuwiki\Form\Form $form */
  69          $form =& $event->data;
  70  
  71          // find the username input box
  72          $pos = $form->findPositionByAttribute('name', 'u');
  73          if ($pos === false) return;
  74  
  75          // any default?
  76          if ($INPUT->has('u')) {
  77              $usr = $auth->cleanUser($INPUT->str('u'));
  78              $dom = $auth->getUserDomain($usr);
  79  
  80              // update user field value
  81              if ($dom) {
  82                  $usr = $auth->getUserName($usr);
  83                  $element = $form->getElementAt($pos);
  84                  $element->val($usr);
  85              }
  86          }
  87  
  88          // add locate domain selector just after the username input box
  89          $element = $form->addDropdown('dom', $domains, $this->getLang('domain'), $pos + 1);
  90          $element->addClass('block');
  91      }
  92  }
  93  
  94  // vim:ts=4:sw=4:et: