]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #2848 pulls user settings code out of actions into functions. We should investi...
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 13 Feb 2011 19:44:26 +0000 (19:44 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 13 Feb 2011 19:44:26 +0000 (19:44 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@8204 36083f99-b078-4883-b0ff-0f9b5a30f544

actions/email/save.php [deleted file]
actions/user/default_access.php [deleted file]
actions/user/language.php [deleted file]
actions/user/name.php [deleted file]
actions/user/password.php [deleted file]
engine/lib/user_settings.php
engine/lib/users.php
views/default/core/settings/account/language.php
views/default/forms/account/settings.php

diff --git a/actions/email/save.php b/actions/email/save.php
deleted file mode 100644 (file)
index d0ce457..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-/**
- * Save email address for user.
- *
- * @package Elgg.Core
- * @subpackage Administration.Users
- */
-
-$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'));
-       forward(REFERER);
-}
-
-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'));
-                               } 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 (file)
index 5ddd862..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-/**
- * Action for changing a user's default access level
- *
- * @package Elgg
- * @subpackage Core
- */
-
-if (elgg_get_config('allow_user_default_access')) {
-       $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'));
-                       } 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 (file)
index 30d3b45..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Action for changing a user's personal language settings
- *
- * @package Elgg
- * @subpackage Core
- */
-
-$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'));
-               } 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 (file)
index 881019e..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Action for changing a user's name
- *
- * @package Elgg
- * @subpackage Core
- */
-
-$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'));
-       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 (file)
index 8619372..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Action for changing a user's password
- *
- * @package Elgg
- * @subpackage Core
- */
-
-$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'));
-                       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'));
-       }
-}
index f74c01975f995aa1a67f80b07bb7c05ee805ffd7..e3688d7f7545f6b63b485ac372eec22c27ae8a2d 100644 (file)
@@ -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
index 2f5d37551ae64612f8737d672bc001dfc29c9e9d..8d8c7fb6498c0ba36ba91cf9f240165555011c3b 100644 (file)
@@ -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
  *
index c8fef3a461b90fea83ef9716628647c1fb26dd47..a1e8d9886b449537a682a23802ae47457705ddfb 100644 (file)
@@ -20,7 +20,7 @@ if ($user) {
                        <?php
                        echo elgg_view("input/dropdown", array(
                                'internalname' => 'language',
-                               'value' => $value,
+                               'value' => $user->language,
                                'options_values' => get_installed_translations()
                        ));
                        ?>
index b3d9bbc7f3711e882119cd6b3af051245d859d04..824b2280be9790fbb146d2e7ccfba19a5826dd34 100644 (file)
@@ -1 +1,8 @@
 <?php
+/**
+ * Account settings form used for user settings
+ *
+ * This form is extended by Elgg with the views in core/settings/account.
+ * Plugins can additionally extend it and then register for the
+ * 'usersettings:save', 'user' plugin hook.
+ */