tpl['class'] .= ' userspicker'; } /** * Allow receiving user attributes by ".". Ex. user.name * You can pass an optional argument to user.grps enclosed in brackets, used as an groups delimiter Ex. user.grps(, ) * * @return string */ public function getReplacementPattern() { $label = $this->opt['label']; return '/(@@|##)' . preg_quote($label, '/') . '(?:\((?P.*?)\))?' .//delimiter '(?:\.(?P.*?))?' . //match attribute after "." '\1/si'; } /** * Used as an callback for preg_replace_callback * * @param $matches * @return string */ public function replacementValueCallback($matches) { /** @var DokuWiki_Auth_Plugin $auth */ global $auth; $value = $this->opt['value']; //copy the value by default if (isset($matches[2]) && is_array($matches[2]) && count($matches[2]) == 2) { return is_null($value) || $value === false ? $matches[0] : $value; } $attribute = isset($matches['attribute']) ? $matches['attribute'] : ''; //check if matched string containts a pair of brackets $delimiter = preg_match('/\(.*\)/s', $matches[0]) ? $matches['delimiter'] : ', '; $users = array_map('trim', explode(',', $value)); switch($attribute) { case '': return implode($delimiter, $users); case 'name': case 'mail': return implode($delimiter, array_map(function ($user) use ($auth, $attribute) { return $auth->getUserData($user)[$attribute]; }, $users)); default: return $matches[0]; } } /** * Return the callback for user replacement * * @return array */ public function getReplacementValue() { return array($this, 'replacementValueCallback'); } /** * Validate value of field * * @throws Exception when user not exists */ protected function _validate() { parent::_validate(); /** @var DokuWiki_Auth_Plugin $auth */ global $auth; $users = array_filter(preg_split('/\s*,\s*/', $this->getParam('value'))); foreach ($users as $user) { if ($auth->getUserData($user) === false) { throw new Exception(sprintf($this->getLang('e_users'), hsc($this->getParam('display')))); } } } }