| 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');
 
- };
 
 
  |