summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Birke <Gabriel.Birke@delti.com>2008-08-17 16:11:21 +0200
committerGabriel Birke <Gabriel.Birke@delti.com>2008-08-17 16:11:21 +0200
commit7d3c8d4263d48bd16be068d3b134f70451afac94 (patch)
treebfed95742d29aca438887ddaa84869ed0adda5f7
parente7835c601a9d31a48299c5cf122de0df6f61a08a (diff)
downloadrpg-7d3c8d4263d48bd16be068d3b134f70451afac94.tar.gz
rpg-7d3c8d4263d48bd16be068d3b134f70451afac94.tar.bz2
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
-rw-r--r--inc/auth.php6
-rw-r--r--inc/auth/basic.class.php33
-rw-r--r--lib/plugins/usermanager/admin.php6
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
@@ -90,6 +90,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 ]
*
* Is run in addition to the ususal logoff method. Should
@@ -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) {