diff --git a/inc/auth.php b/inc/auth.php index 6e3b543de1db5775f7e84b77ecbd93d234f920e2..8d6f487387e83a3864b3553a94942cac89a34505 100644 --- a/inc/auth.php +++ b/inc/auth.php @@ -630,7 +630,7 @@ function register(){ } //okay try to create the user - if(!$auth->createUser($_POST['login'],$pass,$_POST['fullname'],$_POST['email'])){ + if(!$auth->triggerUserMod('create', array($_POST['login'],$pass,$_POST['fullname'],$_POST['email']))){ msg($lang['reguexists'],-1); return false; } @@ -715,7 +715,7 @@ function updateprofile() { } } - return $auth->modifyUser($_SERVER['REMOTE_USER'], $changes); + return $auth->triggerUserMod('modify', array($_SERVER['REMOTE_USER'], $changes)); } /** @@ -764,7 +764,7 @@ function act_resendpwd(){ } $pass = auth_pwgen(); - if (!$auth->modifyUser($user,array('pass' => $pass))) { + if (!$auth->triggerUserMod('modify', array($user,array('pass' => $pass)))) { msg('error modifying user data',-1); return false; } diff --git a/inc/auth/basic.class.php b/inc/auth/basic.class.php index c3bb9d32ea79ffdf8fb3cb47947fee87ea51b9d8..c93e3d5c581894d10bb5b3d4aad23b99763d487b 100644 --- a/inc/auth/basic.class.php +++ b/inc/auth/basic.class.php @@ -89,6 +89,38 @@ class auth_basic { } } + /** + * Trigger the AUTH_USERDATA_CHANGE event and call the modification function. [ DO NOT OVERRIDE ] + * + * You should use this function instead of calling createUser, modifyUser or + * deleteUsers directly. The event handlers can prevent the modification, for + * example for enforcing a user name schema. + * + * @author Gabriel Birke <birke@d-scribe.de> + * @param string $type Modification type ('create', 'modify', 'delete') + * @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type + * @return mixed Result from the modification function or false if an event handler has canceled the action + */ + function triggerUserMod($type, $params) + { + $validTypes = array( + 'create' => 'createUser', + 'modify' => 'modifyUser', + 'delete' => 'deleteUsers' + ); + if(empty($validTypes[$type])) + return false; + $eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null); + $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata); + if ($evt->advise_before(true)) { + $result = call_user_func_array(array($this, $validTypes[$type]), $params); + $evt->data['modification_result'] = $result; + } + $evt->advise_after(); + unset($evt); + return $result; + } + /** * Log off the current user [ OPTIONAL ] * @@ -290,6 +322,7 @@ class auth_basic { return array(); } + /** * Check Session Cache validity [implement only where required/possible] * diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php index 0a3de919f8acf9819e2ae46efced88b1fb8b2b89..1d35c7abe1b6d05bd9e544c04362343f3954c7fd 100644 --- a/lib/plugins/usermanager/admin.php +++ b/lib/plugins/usermanager/admin.php @@ -346,7 +346,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { return false; } - if ($ok = $this->_auth->createUser($user,$pass,$name,$mail,$grps)) { + if ($ok = $this->_auth->triggerUserMod('create', array($user,$pass,$name,$mail,$grps))) { msg($this->lang['add_ok'], 1); @@ -373,7 +373,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { if (!is_array($selected) || empty($selected)) return false; $selected = array_keys($selected); - $count = $this->_auth->deleteUsers($selected); + $count = $this->_auth->triggerUserMod('delete', array($selected)); if ($count == count($selected)) { $text = str_replace('%d', $count, $this->lang['delete_ok']); msg("$text.", 1); @@ -454,7 +454,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin { if (!empty($newgrps) && $this->_auth->canDo('modGroups') && $newgrps != $oldinfo['grps']) $changes['grps'] = $newgrps; - if ($ok = $this->_auth->modifyUser($olduser, $changes)) { + if ($ok = $this->_auth->triggerUserMod('modify', array($olduser, $changes))) { msg($this->lang['update_ok'],1); if (!empty($_REQUEST['usernotify']) && $newpass) {