123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446 |
- <?php
- /**
- * Elgg user settings functions.
- * Functions for adding and manipulating options on the user settings panel.
- *
- * @package Elgg.Core
- * @subpackage Settings.User
- */
- /**
- * Set a user's password
- * Returns null if no change is required
- * Returns true or false indicating success or failure if change was needed
- *
- * @return bool|void
- * @since 1.8.0
- * @access private
- */
- function _elgg_set_user_password() {
- $current_password = get_input('current_password', null, false);
- $password = get_input('password', null, false);
- $password2 = get_input('password2', null, false);
- $user_guid = get_input('guid');
- if ($user_guid) {
- $user = get_user($user_guid);
- } else {
- $user = elgg_get_logged_in_user_entity();
- }
- 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
- );
- try {
- pam_auth_userpass($credentials);
- } catch (LoginException $e) {
- register_error(elgg_echo('LoginException:ChangePasswordFailure'));
- return false;
- }
- }
- try {
- $result = validate_password($password);
- } catch (RegistrationException $e) {
- register_error($e->getMessage());
- return false;
- }
- if ($result) {
- if ($password == $password2) {
- $user->setPassword($password);
- _elgg_services()->persistentLogin->handlePasswordChange($user, elgg_get_logged_in_user_entity());
- 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;
- }
- return false;
- }
- /**
- * Set a user's display name
- * Returns null if no change is required or input is not present in the form
- * Returns true or false indicating success or failure if change was needed
- *
- * @return bool|void
- * @since 1.8.0
- * @access private
- */
- function _elgg_set_user_name() {
- $name = get_input('name');
- $user_guid = get_input('guid');
- if (!isset($name)) {
- return;
- }
- $name = strip_tags($name);
- if ($user_guid) {
- $user = get_user($user_guid);
- } else {
- $user = elgg_get_logged_in_user_entity();
- }
- 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;
- }
- } else {
- register_error(elgg_echo('user:name:fail'));
- }
- return false;
- }
- /**
- * Set a user's language
- * Returns null if no change is required or input is not present in the form
- * Returns true or false indicating success or failure if change was needed
- *
- * @return bool|void
- * @since 1.8.0
- * @access private
- */
- function _elgg_set_user_language() {
- $language = get_input('language');
- $user_guid = get_input('guid');
- if (!isset($language)) {
- return;
- }
-
- if ($user_guid) {
- $user = get_user($user_guid);
- } else {
- $user = elgg_get_logged_in_user_entity();
- }
- 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;
- }
- } else {
- register_error(elgg_echo('user:language:fail'));
- }
- return false;
- }
- /**
- * Set a user's email address
- * Returns null if no change is required or input is not present in the form
- * Returns true or false indicating success or failure if change was needed
- *
- * @return bool|void
- * @since 1.8.0
- * @access private
- */
- function _elgg_set_user_email() {
- $email = get_input('email');
- $user_guid = get_input('guid');
- if (!isset($email)) {
- return;
- }
-
- if ($user_guid) {
- $user = get_user($user_guid);
- } else {
- $user = elgg_get_logged_in_user_entity();
- }
- 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;
- }
- } else {
- register_error(elgg_echo('email:save:fail'));
- }
- return false;
- }
- /**
- * Set a user's default access level
- * Returns null if no change is required or input is not present in the form
- * Returns true or false indicating success or failure if change was needed
- *
- * @return bool|void
- * @since 1.8.0
- * @access private
- */
- function _elgg_set_user_default_access() {
- if (!elgg_get_config('allow_user_default_access')) {
- return;
- }
- $default_access = get_input('default_access');
- $user_guid = get_input('guid');
- if ($user_guid) {
- $user = get_user($user_guid);
- } else {
- $user = elgg_get_logged_in_user_entity();
- }
- 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:failure'));
- }
- } else {
- // no change
- return;
- }
- } else {
- register_error(elgg_echo('user:default_access:failure'));
- }
- return false;
- }
- /**
- * Set up the menu for user settings
- *
- * @return void
- * @access private
- */
- function _elgg_user_settings_menu_setup() {
- $user = elgg_get_page_owner_entity();
- if (!$user) {
- return;
- }
- if (!elgg_in_context("settings")) {
- return;
- }
-
- $params = array(
- 'name' => '1_account',
- 'text' => elgg_echo('usersettings:user:opt:linktext'),
- 'href' => "settings/user/{$user->username}",
- 'section' => 'configure',
- );
- elgg_register_menu_item('page', $params);
- $params = array(
- 'name' => '1_plugins',
- 'text' => elgg_echo('usersettings:plugins:opt:linktext'),
- 'href' => '#',
- 'section' => 'configure',
- );
- elgg_register_menu_item('page', $params);
- $params = array(
- 'name' => '1_statistics',
- 'text' => elgg_echo('usersettings:statistics:opt:linktext'),
- 'href' => "settings/statistics/{$user->username}",
- 'section' => 'configure',
- );
- elgg_register_menu_item('page', $params);
-
- // register plugin user settings menu items
- $active_plugins = elgg_get_plugins();
-
- foreach ($active_plugins as $plugin) {
- $plugin_id = $plugin->getID();
- if (elgg_view_exists("usersettings/$plugin_id/edit") || elgg_view_exists("plugins/$plugin_id/usersettings")) {
- $params = array(
- 'name' => $plugin_id,
- 'text' => $plugin->getFriendlyName(),
- 'href' => "settings/plugins/{$user->username}/$plugin_id",
- 'parent_name' => '1_plugins',
- 'section' => 'configure',
- );
- elgg_register_menu_item('page', $params);
- }
- }
-
- elgg_register_plugin_hook_handler("prepare", "menu:page", "_elgg_user_settings_menu_prepare");
- }
- /**
- * Prepares the page menu to strip out empty plugins menu item for user settings
- *
- * @param string $hook prepare
- * @param string $type menu:page
- * @param array $value array of menu items
- * @param array $params menu related parameters
- *
- * @return array
- * @access private
- */
- function _elgg_user_settings_menu_prepare($hook, $type, $value, $params) {
- if (empty($value)) {
- return $value;
- }
-
- if (!elgg_in_context("settings")) {
- return $value;
- }
-
- $configure = elgg_extract("configure", $value);
- if (empty($configure)) {
- return $value;
- }
-
- foreach ($configure as $index => $menu_item) {
- if (!($menu_item instanceof ElggMenuItem)) {
- continue;
- }
-
- if ($menu_item->getName() == "1_plugins") {
- if (!$menu_item->getChildren()) {
- // no need for this menu item if it has no children
- unset($value["configure"][$index]);
- }
- }
- }
-
- return $value;
- }
- /**
- * Page handler for user settings
- *
- * @param array $page Pages array
- *
- * @return bool
- * @access private
- */
- function _elgg_user_settings_page_handler($page) {
- global $CONFIG;
- if (!isset($page[0])) {
- $page[0] = 'user';
- }
- if (isset($page[1])) {
- $user = get_user_by_username($page[1]);
- elgg_set_page_owner_guid($user->guid);
- } else {
- $user = elgg_get_logged_in_user_entity();
- elgg_set_page_owner_guid($user->guid);
- }
- elgg_push_breadcrumb(elgg_echo('settings'), "settings/user/$user->username");
- switch ($page[0]) {
- case 'statistics':
- elgg_push_breadcrumb(elgg_echo('usersettings:statistics:opt:linktext'));
- $path = $CONFIG->path . "pages/settings/statistics.php";
- break;
- case 'plugins':
- if (isset($page[2])) {
- set_input("plugin_id", $page[2]);
- elgg_push_breadcrumb(elgg_echo('usersettings:plugins:opt:linktext'));
- $path = $CONFIG->path . "pages/settings/tools.php";
- }
- break;
- case 'user':
- $path = $CONFIG->path . "pages/settings/account.php";
- break;
- }
- if (isset($path)) {
- require $path;
- return true;
- }
- return false;
- }
- /**
- * Initialize the user settings library
- *
- * @return void
- * @access private
- */
- function _elgg_user_settings_init() {
- elgg_register_page_handler('settings', '_elgg_user_settings_page_handler');
- elgg_register_event_handler('pagesetup', 'system', '_elgg_user_settings_menu_setup');
- elgg_register_plugin_hook_handler('usersettings:save', 'user', '_elgg_set_user_language');
- elgg_register_plugin_hook_handler('usersettings:save', 'user', '_elgg_set_user_password');
- elgg_register_plugin_hook_handler('usersettings:save', 'user', '_elgg_set_user_default_access');
- elgg_register_plugin_hook_handler('usersettings:save', 'user', '_elgg_set_user_name');
- elgg_register_plugin_hook_handler('usersettings:save', 'user', '_elgg_set_user_email');
-
- elgg_register_action("usersettings/save");
- // extend the account settings form
- elgg_extend_view('forms/account/settings', 'core/settings/account/name', 100);
- elgg_extend_view('forms/account/settings', 'core/settings/account/password', 100);
- elgg_extend_view('forms/account/settings', 'core/settings/account/email', 100);
- elgg_extend_view('forms/account/settings', 'core/settings/account/language', 100);
- elgg_extend_view('forms/account/settings', 'core/settings/account/default_access', 100);
- }
- return function(\Elgg\EventsService $events, \Elgg\HooksRegistrationService $hooks) {
- $events->registerHandler('init', 'system', '_elgg_user_settings_init');
- };
|