summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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) {