diff options
Diffstat (limited to 'phpBB/includes/functions_user.php')
| -rw-r--r-- | phpBB/includes/functions_user.php | 236 | 
1 files changed, 86 insertions, 150 deletions
| diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index bfdd1badc3..bbf00735af 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -89,7 +89,7 @@ function user_get_id_name(&$user_id_ary, &$username_ary, $user_type = false)  */  function update_last_username()  { -	global $db; +	global $config, $db;  	// Get latest username  	$sql = 'SELECT user_id, username, user_colour @@ -102,9 +102,9 @@ function update_last_username()  	if ($row)  	{ -		set_config('newest_user_id', $row['user_id'], true); -		set_config('newest_username', $row['username'], true); -		set_config('newest_user_colour', $row['user_colour'], true); +		$config->set('newest_user_id', $row['user_id'], false); +		$config->set('newest_username', $row['username'], false); +		$config->set('newest_user_colour', $row['user_colour'], false);  	}  } @@ -138,7 +138,7 @@ function user_update_name($old_name, $new_name)  	if ($config['newest_username'] == $old_name)  	{ -		set_config('newest_username', $new_name, true); +		$config->set('newest_username', $new_name, false);  	}  	/** @@ -166,7 +166,7 @@ function user_update_name($old_name, $new_name)  */  function user_add($user_row, $cp_data = false, $notifications_data = null)  { -	global $db, $user, $auth, $config, $phpbb_root_path, $phpEx; +	global $db, $config;  	global $phpbb_dispatcher, $phpbb_container;  	if (empty($user_row['username']) || !isset($user_row['group_id']) || !isset($user_row['user_email']) || !isset($user_row['user_type'])) @@ -281,6 +281,7 @@ function user_add($user_row, $cp_data = false, $notifications_data = null)  	{  		$cp_data['user_id'] = (int) $user_id; +		/* @var $cp \phpbb\profilefields\manager */  		$cp = $phpbb_container->get('profilefields.manager');  		$sql = 'INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . ' ' .  			$db->sql_build_array('INSERT', $cp->build_insert_sql_array($cp_data)); @@ -313,7 +314,7 @@ function user_add($user_row, $cp_data = false, $notifications_data = null)  		{  			global $phpbb_log; -			// Because these actions only fill the log unneccessarily we skip the add_log() entry. +			// Because these actions only fill the log unnecessarily, we disable it  			$phpbb_log->disable('admin');  			// Add user to "newly registered users" group and set to default group if admin specified so. @@ -334,9 +335,9 @@ function user_add($user_row, $cp_data = false, $notifications_data = null)  	// set the newest user and adjust the user count if the user is a normal user and no activation mail is sent  	if ($user_row['user_type'] == USER_NORMAL || $user_row['user_type'] == USER_FOUNDER)  	{ -		set_config('newest_user_id', $user_id, true); -		set_config('newest_username', $user_row['username'], true); -		set_config_count('num_users', 1, true); +		$config->set('newest_user_id', $user_id, false); +		$config->set('newest_username', $user_row['username'], false); +		$config->increment('num_users', 1, false);  		$sql = 'SELECT group_colour  			FROM ' . GROUPS_TABLE . ' @@ -345,7 +346,7 @@ function user_add($user_row, $cp_data = false, $notifications_data = null)  		$row = $db->sql_fetchrow($result);  		$db->sql_freeresult($result); -		set_config('newest_user_colour', $row['group_colour'], true); +		$config->set('newest_user_colour', $row['group_colour'], false);  	}  	// Use default notifications settings if notifications_data is not set @@ -366,6 +367,7 @@ function user_add($user_row, $cp_data = false, $notifications_data = null)  	// Subscribe user to notifications if necessary  	if (!empty($notifications_data))  	{ +		/* @var $phpbb_notifications \phpbb\notification\manager */  		$phpbb_notifications = $phpbb_container->get('notification_manager');  		foreach ($notifications_data as $subscription)  		{ @@ -606,7 +608,7 @@ function user_delete($mode, $user_ids, $retain_username = true)  	if ($num_users_delta != 0)  	{ -		set_config_count('num_users', $num_users_delta, true); +		$config->increment('num_users', $num_users_delta, false);  	}  	// Now do the invariant tasks @@ -839,12 +841,12 @@ function user_active_flip($mode, $user_id_ary, $reason = INACTIVE_MANUAL)  	if ($deactivated)  	{ -		set_config_count('num_users', $deactivated * (-1), true); +		$config->increment('num_users', $deactivated * (-1), false);  	}  	if ($activated)  	{ -		set_config_count('num_users', $activated, true); +		$config->increment('num_users', $activated, false);  	}  	// Update latest username @@ -864,7 +866,7 @@ function user_active_flip($mode, $user_id_ary, $reason = INACTIVE_MANUAL)  */  function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reason, $ban_give_reason = '')  { -	global $db, $user, $auth, $cache; +	global $db, $user, $cache, $phpbb_log;  	// Delete stale bans  	$sql = 'DELETE FROM ' . BANLIST_TABLE . ' @@ -1013,7 +1015,6 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas  						if ($ip_2_counter == 0 && $ip_2_end == 254)  						{  							$ip_2_counter = 256; -							$ip_2_fragment = 256;  							$banlist_ary[] = "$ip_1_counter.*";  						} @@ -1026,7 +1027,6 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas  							if ($ip_3_counter == 0 && $ip_3_end == 254)  							{  								$ip_3_counter = 256; -								$ip_3_fragment = 256;  								$banlist_ary[] = "$ip_1_counter.$ip_2_counter.*";  							} @@ -1039,7 +1039,6 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas  								if ($ip_4_counter == 0 && $ip_4_end == 254)  								{  									$ip_4_counter = 256; -									$ip_4_fragment = 256;  									$banlist_ary[] = "$ip_1_counter.$ip_2_counter.$ip_3_counter.*";  								} @@ -1255,13 +1254,22 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas  		$log_entry = ($ban_exclude) ? 'LOG_BAN_EXCLUDE_' : 'LOG_BAN_';  		// Add to admin log, moderator log and user notes -		add_log('admin', $log_entry . strtoupper($mode), $ban_reason, $ban_list_log); -		add_log('mod', 0, 0, $log_entry . strtoupper($mode), $ban_reason, $ban_list_log); +		$phpbb_log->add('admin', $user->data['user_id'], $user->ip, $log_entry . strtoupper($mode), false, array($ban_reason, $ban_list_log)); +		$phpbb_log->add('mod', $user->data['user_id'], $user->ip, $log_entry . strtoupper($mode), false, array( +			'forum_id' => 0, +			'topic_id' => 0, +			$ban_reason, +			$ban_list_log +		));  		if ($mode == 'user')  		{  			foreach ($banlist_ary as $user_id)  			{ -				add_log('user', $user_id, $log_entry . strtoupper($mode), $ban_reason, $ban_list_log); +				$phpbb_log->add('user', $user->data['user_id'], $user->ip, $log_entry . strtoupper($mode), false, array( +					'reportee_id' => $user_id, +					$ban_reason, +					$ban_list_log +				));  			}  		} @@ -1281,7 +1289,7 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas  */  function user_unban($mode, $ban)  { -	global $db, $user, $auth, $cache; +	global $db, $user, $cache, $phpbb_log;  	// Delete stale bans  	$sql = 'DELETE FROM ' . BANLIST_TABLE . ' @@ -1339,13 +1347,20 @@ function user_unban($mode, $ban)  		$db->sql_query($sql);  		// Add to moderator log, admin log and user notes -		add_log('admin', 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list); -		add_log('mod', 0, 0, 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list); +		$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_UNBAN_' . strtoupper($mode), false, array($l_unban_list)); +		$phpbb_log->add('mod', $user->data['user_id'], $user->ip, 'LOG_UNBAN_' . strtoupper($mode), false, array( +			'forum_id' => 0, +			'topic_id' => 0, +			$l_unban_list +		));  		if ($mode == 'user')  		{  			foreach ($user_ids_ary as $user_id)  			{ -				add_log('user', $user_id, 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list); +				$phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_UNBAN_' . strtoupper($mode), false, array( +					'reportee_id' => $user_id, +					$l_unban_list +				));  			}  		}  	} @@ -1664,89 +1679,37 @@ function validate_username($username, $allowed_username = false)  		return 'INVALID_CHARS';  	} -	$mbstring = $pcre = false; - -	// generic UTF-8 character types supported? -	if (phpbb_pcre_utf8_support()) -	{ -		$pcre = true; -	} -	else if (function_exists('mb_ereg_match')) -	{ -		mb_regex_encoding('UTF-8'); -		$mbstring = true; -	} -  	switch ($config['allow_name_chars'])  	{  		case 'USERNAME_CHARS_ANY': -			$pcre = true;  			$regex = '.+';  		break;  		case 'USERNAME_ALPHA_ONLY': -			$pcre = true;  			$regex = '[A-Za-z0-9]+';  		break;  		case 'USERNAME_ALPHA_SPACERS': -			$pcre = true;  			$regex = '[A-Za-z0-9-[\]_+ ]+';  		break;  		case 'USERNAME_LETTER_NUM': -			if ($pcre) -			{ -				$regex = '[\p{Lu}\p{Ll}\p{N}]+'; -			} -			else if ($mbstring) -			{ -				$regex = '[[:upper:][:lower:][:digit:]]+'; -			} -			else -			{ -				$pcre = true; -				$regex = '[a-zA-Z0-9]+'; -			} +			$regex = '[\p{Lu}\p{Ll}\p{N}]+';  		break;  		case 'USERNAME_LETTER_NUM_SPACERS': -			if ($pcre) -			{ -				$regex = '[-\]_+ [\p{Lu}\p{Ll}\p{N}]+'; -			} -			else if ($mbstring) -			{ -				$regex = '[-\]_+ \[[:upper:][:lower:][:digit:]]+'; -			} -			else -			{ -				$pcre = true; -				$regex = '[-\]_+ [a-zA-Z0-9]+'; -			} +			$regex = '[-\]_+ [\p{Lu}\p{Ll}\p{N}]+';  		break;  		case 'USERNAME_ASCII':  		default: -			$pcre = true;  			$regex = '[\x01-\x7F]+';  		break;  	} -	if ($pcre) -	{ -		if (!preg_match('#^' . $regex . '$#u', $username)) -		{ -			return 'INVALID_CHARS'; -		} -	} -	else if ($mbstring) +	if (!preg_match('#^' . $regex . '$#u', $username))  	{ -		mb_ereg_search_init($username, '^' . $regex . '$'); -		if (!mb_ereg_search()) -		{ -			return 'INVALID_CHARS'; -		} +		return 'INVALID_CHARS';  	}  	$sql = 'SELECT username @@ -1801,35 +1764,10 @@ function validate_password($password)  		return false;  	} -	$pcre = $mbstring = false; - -	// generic UTF-8 character types supported? -	if (phpbb_pcre_utf8_support()) -	{ -		$upp = '\p{Lu}'; -		$low = '\p{Ll}'; -		$num = '\p{N}'; -		$sym = '[^\p{Lu}\p{Ll}\p{N}]'; -		$pcre = true; -	} -	else if (function_exists('mb_ereg_match')) -	{ -		mb_regex_encoding('UTF-8'); -		$upp = '[[:upper:]]'; -		$low = '[[:lower:]]'; -		$num = '[[:digit:]]'; -		$sym = '[^[:upper:][:lower:][:digit:]]'; -		$mbstring = true; -	} -	else -	{ -		$upp = '[A-Z]'; -		$low = '[a-z]'; -		$num = '[0-9]'; -		$sym = '[^A-Za-z0-9]'; -		$pcre = true; -	} - +	$upp = '\p{Lu}'; +	$low = '\p{Ll}'; +	$num = '\p{N}'; +	$sym = '[^\p{Lu}\p{Ll}\p{N}]';  	$chars = array();  	switch ($config['pass_complex']) @@ -1852,24 +1790,11 @@ function validate_password($password)  			$chars[] = $upp;  	} -	if ($pcre) +	foreach ($chars as $char)  	{ -		foreach ($chars as $char) +		if (!preg_match('#' . $char . '#u', $password))  		{ -			if (!preg_match('#' . $char . '#u', $password)) -			{ -				return 'INVALID_CHARS'; -			} -		} -	} -	else if ($mbstring) -	{ -		foreach ($chars as $char) -		{ -			if (mb_ereg($char, $password) === false) -			{ -				return 'INVALID_CHARS'; -			} +			return 'INVALID_CHARS';  		}  	} @@ -2213,7 +2138,7 @@ function phpbb_style_is_active($style_id)  */  function avatar_delete($mode, $row, $clean_db = false)  { -	global $phpbb_root_path, $config, $db, $user; +	global $phpbb_root_path, $config;  	// Check if the users avatar is actually *not* a group avatar  	if ($mode == 'user') @@ -2285,7 +2210,10 @@ function phpbb_avatar_explanation_string()  */  function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow_desc_bbcode = false, $allow_desc_urls = false, $allow_desc_smilies = false)  { -	global $phpbb_root_path, $config, $db, $user, $file_upload, $phpbb_container; +	global $db, $user, $phpbb_container, $phpbb_log; + +	/** @var \phpbb\group\helper $group_helper */ +	$group_helper = $phpbb_container->get('group_helper');  	$error = array(); @@ -2317,8 +2245,12 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow  		$current_legend = \phpbb\groupposition\legend::GROUP_DISABLED;  		$current_teampage = \phpbb\groupposition\teampage::GROUP_DISABLED; +		/* @var $legend \phpbb\groupposition\legend */  		$legend = $phpbb_container->get('groupposition.legend'); + +		/* @var $teampage \phpbb\groupposition\teampage */  		$teampage = $phpbb_container->get('groupposition.teampage'); +  		if ($group_id)  		{  			try @@ -2390,8 +2322,6 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow  		// Setting the log message before we set the group id (if group gets added)  		$log = ($group_id) ? 'LOG_GROUP_UPDATED' : 'LOG_GROUP_CREATED'; -		$query = ''; -  		if ($group_id)  		{  			$sql = 'SELECT user_id @@ -2534,8 +2464,8 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow  			group_set_user_default($group_id, $user_ary, $sql_ary);  		} -		$name = ($type == GROUP_SPECIAL) ? $user->lang['G_' . $name] : $name; -		add_log('admin', $log, $name); +		$name = $group_helper->get_name($name); +		$phpbb_log->add('admin', $user->data['user_id'], $user->ip, $log, false, array($name));  		group_update_listings($group_id);  	} @@ -2573,7 +2503,7 @@ function group_correct_avatar($group_id, $old_entry)  */  function avatar_remove_db($avatar_name)  { -	global $config, $db; +	global $db;  	$sql = 'UPDATE ' . USERS_TABLE . "  		SET user_avatar = '', @@ -2588,7 +2518,7 @@ function avatar_remove_db($avatar_name)  */  function group_delete($group_id, $group_name = false)  { -	global $db, $cache, $auth, $user, $phpbb_root_path, $phpEx, $phpbb_dispatcher, $phpbb_container; +	global $db, $cache, $auth, $user, $phpbb_root_path, $phpEx, $phpbb_dispatcher, $phpbb_container, $phpbb_log;  	if (!$group_name)  	{ @@ -2632,6 +2562,7 @@ function group_delete($group_id, $group_name = false)  	// Delete group from legend and teampage  	try  	{ +		/* @var $legend \phpbb\groupposition\legend */  		$legend = $phpbb_container->get('groupposition.legend');  		$legend->delete_group($group_id);  		unset($legend); @@ -2645,6 +2576,7 @@ function group_delete($group_id, $group_name = false)  	try  	{ +		/* @var $teampage \phpbb\groupposition\teampage */  		$teampage = $phpbb_container->get('groupposition.teampage');  		$teampage->delete_group($group_id);  		unset($teampage); @@ -2685,7 +2617,7 @@ function group_delete($group_id, $group_name = false)  	phpbb_cache_moderators($db, $cache, $auth); -	add_log('admin', 'LOG_GROUP_DELETE', $group_name); +	$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_GROUP_DELETE', false, array($group_name));  	// Return false - no error  	return false; @@ -2698,7 +2630,7 @@ function group_delete($group_id, $group_name = false)  */  function group_user_add($group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $default = false, $leader = 0, $pending = 0, $group_attributes = false)  { -	global $db, $auth, $phpbb_container, $phpbb_dispatcher; +	global $db, $auth, $user, $phpbb_container, $phpbb_log, $phpbb_dispatcher;  	// We need both username and user_id info  	$result = user_get_id_name($user_id_ary, $username_ary); @@ -2802,12 +2734,13 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false,  	$log = ($leader) ? 'LOG_MODS_ADDED' : (($pending) ? 'LOG_USERS_PENDING' : 'LOG_USERS_ADDED'); -	add_log('admin', $log, $group_name, implode(', ', $username_ary)); +	$phpbb_log->add('admin', $user->data['user_id'], $user->ip, $log, false, array($group_name, implode(', ', $username_ary)));  	group_update_listings($group_id);  	if ($pending)  	{ +		/* @var $phpbb_notifications \phpbb\notification\manager */  		$phpbb_notifications = $phpbb_container->get('notification_manager');  		foreach ($add_id_ary as $user_id) @@ -2833,7 +2766,7 @@ function group_user_add($group_id, $user_id_ary = false, $username_ary = false,  */  function group_user_del($group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $log_action = true)  { -	global $db, $auth, $config, $phpbb_dispatcher, $phpbb_container; +	global $db, $auth, $config, $user, $phpbb_dispatcher, $phpbb_container, $phpbb_log;  	if ($config['coppa_enable'])  	{ @@ -2977,12 +2910,13 @@ function group_user_del($group_id, $user_id_ary = false, $username_ary = false,  		if ($group_name)  		{ -			add_log('admin', $log, $group_name, implode(', ', $username_ary)); +			$phpbb_log->add('admin', $user->data['user_id'], $user->ip, $log, false, array($group_name, implode(', ', $username_ary)));  		}  	}  	group_update_listings($group_id); +	/* @var $phpbb_notifications \phpbb\notification\manager */  	$phpbb_notifications = $phpbb_container->get('notification_manager');  	$phpbb_notifications->delete_notifications('notification.type.group_request', $user_id_ary, $group_id); @@ -3076,7 +3010,7 @@ function remove_default_rank($group_id, $user_ids)  */  function group_user_attributes($action, $group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $group_attributes = false)  { -	global $db, $auth, $phpbb_root_path, $phpEx, $config, $phpbb_container; +	global $db, $auth, $user, $phpbb_container, $phpbb_log;  	// We need both username and user_id info  	$result = user_get_id_name($user_id_ary, $username_ary); @@ -3147,6 +3081,7 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna  					AND " . $db->sql_in_set('user_id', $user_id_ary);  			$db->sql_query($sql); +			/* @var $phpbb_notifications \phpbb\notification\manager */  			$phpbb_notifications = $phpbb_container->get('notification_manager');  			$phpbb_notifications->add_notifications('notification.type.group_request_approved', array( @@ -3210,7 +3145,7 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna  	// Clear permissions cache of relevant users  	$auth->acl_clear_prefetch($user_id_ary); -	add_log('admin', $log, $group_name, implode(', ', $username_ary)); +	$phpbb_log->add('admin', $user->data['user_id'], $user->ip, $log, false, array($group_name, implode(', ', $username_ary)));  	group_update_listings($group_id); @@ -3222,7 +3157,7 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna  */  function group_validate_groupname($group_id, $group_name)  { -	global $config, $db; +	global $db;  	$group_name =  utf8_clean_string($group_name); @@ -3270,7 +3205,7 @@ function group_validate_groupname($group_id, $group_name)  */  function group_set_user_default($group_id, $user_id_ary, $group_attributes = false, $update_listing = false)  { -	global $phpbb_container, $db, $phpbb_dispatcher; +	global $config, $phpbb_container, $db, $phpbb_dispatcher;  	if (empty($user_id_ary))  	{ @@ -3340,8 +3275,8 @@ function group_set_user_default($group_id, $user_id_ary, $group_attributes = fal  			if (isset($sql_ary[$avatar_option]))  			{  				$avatar_sql_ary[$avatar_option] = $sql_ary[$avatar_option]; -				}  			} +		}  		$sql = 'UPDATE ' . USERS_TABLE . '  			SET ' . $db->sql_build_array('UPDATE', $avatar_sql_ary) . " @@ -3382,11 +3317,9 @@ function group_set_user_default($group_id, $user_id_ary, $group_attributes = fal  			WHERE " . $db->sql_in_set('topic_last_poster_id', $user_id_ary);  		$db->sql_query($sql); -		global $config; -  		if (in_array($config['newest_user_id'], $user_id_ary))  		{ -			set_config('newest_user_colour', $sql_ary['user_colour'], true); +			$config->set('newest_user_colour', $sql_ary['user_colour'], false);  		}  	} @@ -3421,7 +3354,7 @@ function group_set_user_default($group_id, $user_id_ary, $group_attributes = fal  */  function get_group_name($group_id)  { -	global $db, $user; +	global $db, $phpbb_container;  	$sql = 'SELECT group_name, group_type  		FROM ' . GROUPS_TABLE . ' @@ -3430,12 +3363,15 @@ function get_group_name($group_id)  	$row = $db->sql_fetchrow($result);  	$db->sql_freeresult($result); -	if (!$row || ($row['group_type'] == GROUP_SPECIAL && empty($user->lang))) +	if (!$row)  	{  		return '';  	} -	return ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']; +	/** @var \phpbb\group\helper $group_helper */ +	$group_helper = $phpbb_container->get('group_helper'); + +	return $group_helper->get_name($row['group_name']);  }  /** | 
