diff options
Diffstat (limited to 'engine/lib/users.php')
| -rw-r--r-- | engine/lib/users.php | 100 | 
1 files changed, 52 insertions, 48 deletions
diff --git a/engine/lib/users.php b/engine/lib/users.php index 95ef9d176..a8fb9121c 100644 --- a/engine/lib/users.php +++ b/engine/lib/users.php @@ -237,7 +237,7 @@ function make_user_admin($user_guid) {  			}  			$r = update_data("UPDATE {$CONFIG->dbprefix}users_entity set admin='yes' where guid=$user_guid"); -			invalidate_cache_for_entity($user_guid); +			_elgg_invalidate_cache_for_entity($user_guid);  			return $r;  		} @@ -273,7 +273,7 @@ function remove_user_admin($user_guid) {  			}  			$r = update_data("UPDATE {$CONFIG->dbprefix}users_entity set admin='no' where guid=$user_guid"); -			invalidate_cache_for_entity($user_guid); +			_elgg_invalidate_cache_for_entity($user_guid);  			return $r;  		} @@ -290,7 +290,7 @@ function remove_user_admin($user_guid) {   * @param int $limit     Number of results to return   * @param int $offset    Any indexing offset   * - * @return false|array On success, an array of ElggSites + * @return ElggSite[]|false On success, an array of ElggSites   */  function get_user_sites($user_guid, $limit = 10, $offset = 0) {  	$user_guid = (int)$user_guid; @@ -302,7 +302,7 @@ function get_user_sites($user_guid, $limit = 10, $offset = 0) {  		'relationship' => 'member_of_site',  		'relationship_guid' => $user_guid,  		'inverse_relationship' => FALSE, -		'types' => 'site', +		'type' => 'site',  		'limit' => $limit,  		'offset' => $offset,  	)); @@ -343,8 +343,6 @@ function user_add_friend($user_guid, $friend_guid) {   * @return bool Depending on success   */  function user_remove_friend($user_guid, $friend_guid) { -	global $CONFIG; -  	$user_guid = (int) $user_guid;  	$friend_guid = (int) $friend_guid; @@ -379,7 +377,7 @@ function user_is_friend($user_guid, $friend_guid) {   * @param int    $limit     Number of results to return (default 10)   * @param int    $offset    Indexing offset, if any   * - * @return false|array Either an array of ElggUsers or false, depending on success + * @return ElggUser[]|false Either an array of ElggUsers or false, depending on success   */  function get_user_friends($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,  $offset = 0) { @@ -387,8 +385,8 @@ $offset = 0) {  	return elgg_get_entities_from_relationship(array(  		'relationship' => 'friend',  		'relationship_guid' => $user_guid, -		'types' => 'user', -		'subtypes' => $subtype, +		'type' => 'user', +		'subtype' => $subtype,  		'limit' => $limit,  		'offset' => $offset  	)); @@ -402,7 +400,7 @@ $offset = 0) {   * @param int    $limit     Number of results to return (default 10)   * @param int    $offset    Indexing offset, if any   * - * @return false|array Either an array of ElggUsers or false, depending on success + * @return ElggUser[]|false Either an array of ElggUsers or false, depending on success   */  function get_user_friends_of($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,  $offset = 0) { @@ -411,8 +409,8 @@ $offset = 0) {  		'relationship' => 'friend',  		'relationship_guid' => $user_guid,  		'inverse_relationship' => TRUE, -		'types' => 'user', -		'subtypes' => $subtype, +		'type' => 'user', +		'subtype' => $subtype,  		'limit' => $limit,  		'offset' => $offset  	)); @@ -428,7 +426,7 @@ $offset = 0) {   * @param int    $timelower The earliest time the entity can have been created. Default: all   * @param int    $timeupper The latest time the entity can have been created. Default: all   * - * @return false|array An array of ElggObjects or false, depending on success + * @return ElggObject[]|false An array of ElggObjects or false, depending on success   */  function get_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,  $offset = 0, $timelower = 0, $timeupper = 0) { @@ -555,13 +553,18 @@ function get_user($guid) {  function get_user_by_username($username) {  	global $CONFIG, $USERNAME_TO_GUID_MAP_CACHE; +	// Fixes #6052. Username is frequently sniffed from the path info, which, +	// unlike $_GET, is not URL decoded. If the username was not URL encoded, +	// this is harmless. +	$username = rawurldecode($username); +  	$username = sanitise_string($username);  	$access = get_access_sql_suffix('e');  	// Caching  	if ((isset($USERNAME_TO_GUID_MAP_CACHE[$username])) -	&& (retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]))) { -		return retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]); +			&& (_elgg_retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]))) { +		return _elgg_retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]);  	}  	$query = "SELECT e.* from {$CONFIG->dbprefix}users_entity u @@ -594,9 +597,9 @@ function get_user_by_code($code) {  	// Caching  	if ((isset($CODE_TO_GUID_MAP_CACHE[$code])) -	&& (retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]))) { +	&& (_elgg_retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]))) { -		return retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]); +		return _elgg_retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]);  	}  	$query = "SELECT e.* from {$CONFIG->dbprefix}users_entity u @@ -675,25 +678,22 @@ function find_active_users($seconds = 600, $limit = 10, $offset = 0, $count = fa   * @return bool   */  function send_new_password_request($user_guid) { -	global $CONFIG; -  	$user_guid = (int)$user_guid;  	$user = get_entity($user_guid); -	if ($user) { +	if ($user instanceof ElggUser) {  		// generate code  		$code = generate_random_cleartext_password();  		$user->setPrivateSetting('passwd_conf_code', $code); -  		// generate link -		$link = $CONFIG->site->url . "resetpassword?u=$user_guid&c=$code"; +		$link = elgg_get_site_url() . "resetpassword?u=$user_guid&c=$code";  		// generate email  		$email = elgg_echo('email:resetreq:body', array($user->name, $_SERVER['REMOTE_ADDR'], $link)); -		return notify_user($user->guid, $CONFIG->site->guid, -			elgg_echo('email:resetreq:subject'), $email, NULL, 'email'); +		return notify_user($user->guid, elgg_get_site_entity()->guid, +			elgg_echo('email:resetreq:subject'), $email, array(), 'email');  	}  	return false; @@ -710,19 +710,18 @@ function send_new_password_request($user_guid) {   * @return bool   */  function force_user_password_reset($user_guid, $password) { -	global $CONFIG; -  	$user = get_entity($user_guid); +	if ($user instanceof ElggUser) { +		$ia = elgg_set_ignore_access(); -	if ($user) { -		$salt = generate_random_cleartext_password(); // Reset the salt -		$user->salt = $salt; +		$user->salt = generate_random_cleartext_password(); +		$hash = generate_user_password($user, $password);		 +		$user->password = $hash; +		$result = (bool)$user->save(); -		$hash = generate_user_password($user, $password); +		elgg_set_ignore_access($ia); -		$query = "UPDATE {$CONFIG->dbprefix}users_entity -			set password='$hash', salt='$salt' where guid=$user_guid"; -		return update_data($query); +		return $result;  	}  	return false; @@ -742,7 +741,7 @@ function execute_new_password_request($user_guid, $conf_code) {  	$user_guid = (int)$user_guid;  	$user = get_entity($user_guid); -	if ($user) { +	if ($user instanceof ElggUser) {  		$saved_code = $user->getPrivateSetting('passwd_conf_code');  		if ($saved_code && $saved_code == $conf_code) { @@ -756,7 +755,7 @@ function execute_new_password_request($user_guid, $conf_code) {  				$email = elgg_echo('email:resetpassword:body', array($user->name, $password));  				return notify_user($user->guid, $CONFIG->site->guid, -					elgg_echo('email:resetpassword:subject'), $email, NULL, 'email'); +					elgg_echo('email:resetpassword:subject'), $email, array(), 'email');  			}  		}  	} @@ -841,7 +840,7 @@ function validate_username($username) {  	for ($n = 0; $n < strlen($blacklist2); $n++) {  		if (strpos($username, $blacklist2[$n]) !== false) {  			$msg = elgg_echo('registration:invalidchars', array($blacklist2[$n], $blacklist2)); -			$msg = htmlentities($msg, ENT_COMPAT, 'UTF-8'); +			$msg = htmlspecialchars($msg, ENT_QUOTES, 'UTF-8');  			throw new RegistrationException($msg);  		}  	} @@ -908,13 +907,11 @@ function validate_email_address($address) {   * @param string $invitecode            An invite code from a friend   *   * @return int|false The new user's GUID; false on failure + * @throws RegistrationException   */  function register_user($username, $password, $name, $email,  $allow_multiple_emails = false, $friend_guid = 0, $invitecode = '') { -	// Load the configuration -	global $CONFIG; -  	// no need to trim password.  	$username = trim($username);  	$name = trim(strip_tags($name)); @@ -1031,7 +1028,7 @@ function elgg_get_user_validation_status($user_guid) {  		'metadata_name' => 'validated'  	));  	if ($md == false) { -		return; +		return null;  	}  	if ($md[0]->value) { @@ -1067,10 +1064,10 @@ function collections_submenu_items() {   * @return bool   * @access private   */ -function friends_page_handler($page_elements, $handler) { +function friends_page_handler($segments, $handler) {  	elgg_set_context('friends'); -	if (isset($page_elements[0]) && $user = get_user_by_username($page_elements[0])) { +	if (isset($segments[0]) && $user = get_user_by_username($segments[0])) {  		elgg_set_page_owner_guid($user->getGUID());  	}  	if (elgg_get_logged_in_user_guid() == elgg_get_page_owner_guid()) { @@ -1099,6 +1096,7 @@ function friends_page_handler($page_elements, $handler) {   * @access private   */  function collections_page_handler($page_elements) { +	gatekeeper();  	elgg_set_context('friends');  	$base = elgg_get_config('path');  	if (isset($page_elements[0])) { @@ -1197,13 +1195,11 @@ function set_last_login($user_guid) {   * @param string   $object_type user   * @param ElggUser $object      User object   * - * @return bool + * @return void   * @access private   */  function user_create_hook_add_site_relationship($event, $object_type, $object) { -	global $CONFIG; - -	add_entity_relationship($object->getGUID(), 'member_of_site', $CONFIG->site->getGUID()); +	add_entity_relationship($object->getGUID(), 'member_of_site', elgg_get_site_entity()->guid);  }  /** @@ -1233,6 +1229,7 @@ function user_avatar_hook($hook, $entity_type, $returnvalue, $params) {   */  function elgg_user_hover_menu($hook, $type, $return, $params) {  	$user = $params['entity']; +	/* @var ElggUser $user */  	if (elgg_is_logged_in()) {  		if (elgg_get_logged_in_user_guid() != $user->guid) { @@ -1309,7 +1306,12 @@ function elgg_user_hover_menu($hook, $type, $return, $params) {  /**   * Setup the menu shown with an entity   * + * @param string $hook + * @param string $type + * @param array $return + * @param array $params   * @return array + *   * @access private   */  function elgg_users_setup_entity_menu($hook, $type, $return, $params) { @@ -1321,6 +1323,7 @@ function elgg_users_setup_entity_menu($hook, $type, $return, $params) {  	if (!elgg_instanceof($entity, 'user')) {  		return $return;  	} +	/* @var ElggUser $entity */  	if ($entity->isBanned()) {  		$banned = elgg_echo('banned'); @@ -1334,9 +1337,10 @@ function elgg_users_setup_entity_menu($hook, $type, $return, $params) {  	} else {  		$return = array();  		if (isset($entity->location)) { +			$location = htmlspecialchars($entity->location, ENT_QUOTES, 'UTF-8', false);  			$options = array(  				'name' => 'location', -				'text' => "<span>$entity->location</span>", +				'text' => "<span>$location</span>",  				'href' => false,  				'priority' => 150,  			); @@ -1587,7 +1591,7 @@ function users_init() {  /**   * Runs unit tests for ElggObject   * - * @param sting  $hook   unit_test + * @param string $hook   unit_test   * @param string $type   system   * @param mixed  $value  Array of tests   * @param mixed  $params Params  | 
