diff options
Diffstat (limited to 'phpBB/includes/acp/acp_users.php')
| -rw-r--r-- | phpBB/includes/acp/acp_users.php | 57 | 
1 files changed, 36 insertions, 21 deletions
diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 4f58434a43..363c900edc 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -2339,47 +2339,62 @@ class acp_users  	}  	/** -	* Optionset replacement for this module based on $user->optionset +	* Set option bit field for user options in a user row array. +	* +	* Optionset replacement for this module based on $user->optionset. +	* +	* @param array $user_row Row from the users table. +	* @param int $key Option key, as defined in $user->keyoptions property. +	* @param bool $value True to set the option, false to clear the option. +	* @param int $data Current bit field value, or false to use $user_row['user_options'] +	* @return int|bool If $data is false, the bit field is modified and +	*                  written back to $user_row['user_options'], and +	*                  return value is true if the bit field changed and +	*                  false otherwise. If $data is not false, the new +	*                  bitfield value is returned.  	*/  	function optionset(&$user_row, $key, $value, $data = false)  	{  		global $user; -		$var = ($data) ? $data : $user_row['user_options']; +		$var = ($data !== false) ? $data : $user_row['user_options']; -		if ($value && !($var & 1 << $user->keyoptions[$key])) -		{ -			$var += 1 << $user->keyoptions[$key]; -		} -		else if (!$value && ($var & 1 << $user->keyoptions[$key])) -		{ -			$var -= 1 << $user->keyoptions[$key]; -		} -		else -		{ -			return ($data) ? $var : false; -		} +		$new_var = phpbb_optionset($user->keyoptions[$key], $value, $var); -		if (!$data) +		if ($data === false)  		{ -			$user_row['user_options'] = $var; -			return true; +			if ($new_var != $var) +			{ +				$user_row['user_options'] = $new_var; +				return true; +			} +			else +			{ +				return false; +			}  		}  		else  		{ -			return $var; +			return $new_var;  		}  	}  	/** -	* Optionget replacement for this module based on $user->optionget +	* Get option bit field from user options in a user row array. +	* +	* Optionget replacement for this module based on $user->optionget. +	* +	* @param array $user_row Row from the users table. +	* @param int $key option key, as defined in $user->keyoptions property. +	* @param int $data bit field value to use, or false to use $user_row['user_options'] +	* @return bool true if the option is set in the bit field, false otherwise  	*/  	function optionget(&$user_row, $key, $data = false)  	{  		global $user; -		$var = ($data) ? $data : $user_row['user_options']; -		return ($var & 1 << $user->keyoptions[$key]) ? true : false; +		$var = ($data !== false) ? $data : $user_row['user_options']; +		return phpbb_optionget($user->keyoptions[$key], $var);  	}  }  | 
