From 7d3c8d4263d48bd16be068d3b134f70451afac94 Mon Sep 17 00:00:00 2001 From: Gabriel Birke <Gabriel.Birke@delti.com> Date: Sun, 17 Aug 2008 16:11:21 +0200 Subject: [PATCH] Wrap user modifications in events Adds a wrapper function in the basic auth class which is used by the core code to modify the user database. The wrapper function signals events and delegates the action to the auth backend. darcs-hash:20080817141121-79ce3-3300a4342b62a7a18ebcc9a765d87b30a0264621.gz --- inc/auth.php | 6 +++--- inc/auth/basic.class.php | 33 +++++++++++++++++++++++++++++++ lib/plugins/usermanager/admin.php | 6 +++--- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/inc/auth.php b/inc/auth.php index 6e3b543de..8d6f48738 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 c3bb9d32e..c93e3d5c5 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 0a3de919f..1d35c7abe 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) { -- GitLab