From f9501bd6cef73e88b130c6640087008f8d58ef92 Mon Sep 17 00:00:00 2001 From: cash Date: Sun, 13 Feb 2011 19:44:26 +0000 Subject: Fixes #2848 pulls user settings code out of actions into functions. We should investigate putting them in a library that is only loaded on demand git-svn-id: http://code.elgg.org/elgg/trunk@8204 36083f99-b078-4883-b0ff-0f9b5a30f544 --- actions/email/save.php | 41 ---- actions/user/default_access.php | 31 --- actions/user/language.php | 29 --- actions/user/name.php | 34 ---- actions/user/password.php | 49 ----- engine/lib/user_settings.php | 244 ++++++++++++++++++++++- engine/lib/users.php | 21 -- views/default/core/settings/account/language.php | 2 +- views/default/forms/account/settings.php | 7 + 9 files changed, 249 insertions(+), 209 deletions(-) delete mode 100644 actions/email/save.php delete mode 100644 actions/user/default_access.php delete mode 100644 actions/user/language.php delete mode 100644 actions/user/name.php delete mode 100644 actions/user/password.php diff --git a/actions/email/save.php b/actions/email/save.php deleted file mode 100644 index d0ce4571b..000000000 --- a/actions/email/save.php +++ /dev/null @@ -1,41 +0,0 @@ -email) != 0) { - if (!get_user_by_email($email)) { - if ($user->email != $email) { - - $user->email = $email; - if ($user->save()) { - system_message(elgg_echo('email:save:success')); - } else { - register_error(elgg_echo('email:save:fail')); - } - } - } else { - register_error(elgg_echo('registration:dupeemail')); - } - } -} else { - register_error(elgg_echo('email:save:fail')); -} diff --git a/actions/user/default_access.php b/actions/user/default_access.php deleted file mode 100644 index 5ddd86296..000000000 --- a/actions/user/default_access.php +++ /dev/null @@ -1,31 +0,0 @@ -getPrivateSetting('elgg_default_access'); - if ($default_access !== $current_default_access) { - if ($user->setPrivateSetting('elgg_default_access', $default_access)) { - system_message(elgg_echo('user:default_access:success')); - } else { - register_error(elgg_echo('user:default_access:fail')); - } - } - } else { - register_error(elgg_echo('user:default_access:fail')); - } -} diff --git a/actions/user/language.php b/actions/user/language.php deleted file mode 100644 index 30d3b45e8..000000000 --- a/actions/user/language.php +++ /dev/null @@ -1,29 +0,0 @@ -language) != 0) { - $user->language = $language; - if ($user->save()) { - system_message(elgg_echo('user:language:success')); - } else { - register_error(elgg_echo('user:language:fail')); - } - } -} else { - register_error(elgg_echo('user:language:fail')); -} diff --git a/actions/user/name.php b/actions/user/name.php deleted file mode 100644 index 881019e86..000000000 --- a/actions/user/name.php +++ /dev/null @@ -1,34 +0,0 @@ - 50) { - register_error(elgg_echo('user:name:fail')); - forward(REFERER); -} - -if (($user) && ($user->canEdit()) && ($name)) { - if ($name != $user->name) { - $user->name = $name; - if ($user->save()) { - system_message(elgg_echo('user:name:success')); - } else { - register_error(elgg_echo('user:name:fail')); - } - } -} else { - register_error(elgg_echo('user:name:fail')); -} diff --git a/actions/user/password.php b/actions/user/password.php deleted file mode 100644 index 8619372e4..000000000 --- a/actions/user/password.php +++ /dev/null @@ -1,49 +0,0 @@ -guid == elgg_get_logged_in_user_guid()) { - $credentials = array( - 'username' => $user->username, - 'password' => $current_password - ); - - if (!pam_auth_userpass($credentials)) { - register_error(elgg_echo('user:password:fail:incorrect_current_password')); - forward(REFERER); - } - } - - if (strlen($password) >= 4) { - if ($password == $password2) { - $user->salt = generate_random_cleartext_password(); // Reset the salt - $user->password = generate_user_password($user, $password); - if ($user->save()) { - system_message(elgg_echo('user:password:success')); - } else { - register_error(elgg_echo('user:password:fail')); - } - } else { - register_error(elgg_echo('user:password:fail:notsame')); - } - } else { - register_error(elgg_echo('user:password:fail:tooshort')); - } -} diff --git a/engine/lib/user_settings.php b/engine/lib/user_settings.php index f74c01975..e3688d7f7 100644 --- a/engine/lib/user_settings.php +++ b/engine/lib/user_settings.php @@ -8,7 +8,242 @@ */ /** - * Set up the page for user settings + * Saves user settings. + * + * @todo this assumes settings are coming in on a GET/POST request + * + * @note This is a handler for the 'usersettings:save', 'user' plugin hook + * + * @return void + */ +function users_settings_save() { + elgg_set_user_language(); + elgg_set_user_password(); + elgg_set_user_default_access(); + elgg_set_user_name(); + elgg_set_user_email(); +} + +/** + * Set a user's password + * + * @return bool + * @since 1.8.0 + */ +function elgg_set_user_password() { + $current_password = get_input('current_password'); + $password = get_input('password'); + $password2 = get_input('password2'); + $user_id = get_input('guid'); + + if (!$user_id) { + $user = elgg_get_logged_in_user_entity(); + } else { + $user = get_entity($user_id); + } + + if (($user) && ($password != "")) { + // let admin user change anyone's password without knowing it except his own. + if (!elgg_is_admin_logged_in() || elgg_is_admin_logged_in() && $user->guid == elgg_get_logged_in_user_guid()) { + $credentials = array( + 'username' => $user->username, + 'password' => $current_password + ); + + if (!pam_auth_userpass($credentials)) { + register_error(elgg_echo('user:password:fail:incorrect_current_password')); + return false; + } + } + + if (strlen($password) >= 4) { + if ($password == $password2) { + $user->salt = generate_random_cleartext_password(); // Reset the salt + $user->password = generate_user_password($user, $password); + if ($user->save()) { + system_message(elgg_echo('user:password:success')); + return true; + } else { + register_error(elgg_echo('user:password:fail')); + } + } else { + register_error(elgg_echo('user:password:fail:notsame')); + } + } else { + register_error(elgg_echo('user:password:fail:tooshort')); + } + } else { + // no change + return null; + } + return false; +} + +/** + * Set a user's display name + * + * @return bool + * @since 1.8.0 + */ +function elgg_set_user_name() { + $name = strip_tags(get_input('name')); + $user_id = get_input('guid'); + + if (!$user_id) { + $user = elgg_get_logged_in_user_entity(); + } else { + $user = get_entity($user_id); + } + + if (elgg_strlen($name) > 50) { + register_error(elgg_echo('user:name:fail')); + return false; + } + + if (($user) && ($user->canEdit()) && ($name)) { + if ($name != $user->name) { + $user->name = $name; + if ($user->save()) { + system_message(elgg_echo('user:name:success')); + return true; + } else { + register_error(elgg_echo('user:name:fail')); + } + } else { + // no change + return null; + } + } else { + register_error(elgg_echo('user:name:fail')); + } + return false; +} + +/** + * Set a user's language + * + * @return bool + * @since 1.8.0 + */ +function elgg_set_user_language() { + $language = get_input('language'); + $user_id = get_input('guid'); + + if (!$user_id) { + $user = elgg_get_logged_in_user_entity(); + } else { + $user = get_entity($user_id); + } + + if (($user) && ($language)) { + if (strcmp($language, $user->language) != 0) { + $user->language = $language; + if ($user->save()) { + system_message(elgg_echo('user:language:success')); + return true; + } else { + register_error(elgg_echo('user:language:fail')); + } + } else { + // no change + return null; + } + } else { + register_error(elgg_echo('user:language:fail')); + } + return false; +} + +/** + * Set a user's email address + * + * @return bool + * @since 1.8.0 + */ +function elgg_set_user_email() { + $email = get_input('email'); + $user_id = get_input('guid'); + + if (!$user_id) { + $user = elgg_get_logged_in_user_entity(); + } else { + $user = get_entity($user_id); + } + + if (!is_email_address($email)) { + register_error(elgg_echo('email:save:fail')); + return false; + } + + if ($user) { + if (strcmp($email, $user->email) != 0) { + if (!get_user_by_email($email)) { + if ($user->email != $email) { + + $user->email = $email; + if ($user->save()) { + system_message(elgg_echo('email:save:success')); + return true; + } else { + register_error(elgg_echo('email:save:fail')); + } + } + } else { + register_error(elgg_echo('registration:dupeemail')); + } + } else { + // no change + return null; + } + } else { + register_error(elgg_echo('email:save:fail')); + } + return false; +} + +/** + * Set a user's default access level + * + * @return bool + * @since 1.8.0 + */ +function elgg_set_user_default_access() { + + if (!elgg_get_config('allow_user_default_access')) { + return false; + } + + $default_access = get_input('default_access'); + $user_id = get_input('guid'); + + if (!$user_id) { + $user = elgg_get_logged_in_user_entity(); + } else { + $user = get_entity($user_id); + } + + if ($user) { + $current_default_access = $user->getPrivateSetting('elgg_default_access'); + if ($default_access !== $current_default_access) { + if ($user->setPrivateSetting('elgg_default_access', $default_access)) { + system_message(elgg_echo('user:default_access:success')); + return true; + } else { + register_error(elgg_echo('user:default_access:fail')); + } + } else { + // no change + return null; + } + } else { + register_error(elgg_echo('user:default_access:fail')); + } + + return false; +} + +/** + * Set up the menu for user settings * * @return void */ @@ -75,13 +310,16 @@ function usersettings_page_handler($page) { } /** - * Initialise the admin page. + * Initialize the user settings library * * @return void */ function usersettings_init() { - // Page handler register_page_handler('settings', 'usersettings_page_handler'); + + elgg_register_plugin_hook_handler('usersettings:save', 'user', 'users_settings_save'); + + elgg_register_action("usersettings/save"); } /// Register init function diff --git a/engine/lib/users.php b/engine/lib/users.php index 2f5d37551..8d8c7fb64 100644 --- a/engine/lib/users.php +++ b/engine/lib/users.php @@ -1536,8 +1536,6 @@ function users_init() { elgg_register_plugin_hook_handler('entity:icon:url', 'user', 'user_avatar_hook'); - elgg_register_action("usersettings/save"); - elgg_register_action("user/passwordreset", '', 'public'); elgg_register_action("user/requestnewpassword", '', 'public'); @@ -1553,28 +1551,9 @@ function users_init() { // Register the user type register_entity_type('user', ''); - elgg_register_plugin_hook_handler('usersettings:save', 'user', 'users_settings_save'); - elgg_register_event_handler('create', 'user', 'user_create_hook_add_site_relationship'); } -/** - * Saves user settings by directly including actions. - * - * @todo this is dirty. - * - * @return void - */ -function users_settings_save() { - global $CONFIG; - //@todo Wha?? - include($CONFIG->path . "actions/user/name.php"); - include($CONFIG->path . "actions/user/password.php"); - include($CONFIG->path . "actions/email/save.php"); - include($CONFIG->path . "actions/user/language.php"); - include($CONFIG->path . "actions/user/default_access.php"); -} - /** * Runs unit tests for ElggObject * diff --git a/views/default/core/settings/account/language.php b/views/default/core/settings/account/language.php index c8fef3a46..a1e8d9886 100644 --- a/views/default/core/settings/account/language.php +++ b/views/default/core/settings/account/language.php @@ -20,7 +20,7 @@ if ($user) { 'language', - 'value' => $value, + 'value' => $user->language, 'options_values' => get_installed_translations() )); ?> diff --git a/views/default/forms/account/settings.php b/views/default/forms/account/settings.php index b3d9bbc7f..824b2280b 100644 --- a/views/default/forms/account/settings.php +++ b/views/default/forms/account/settings.php @@ -1 +1,8 @@