diff options
Diffstat (limited to 'phpBB/includes/user.php')
| -rw-r--r-- | phpBB/includes/user.php | 857 | 
1 files changed, 0 insertions, 857 deletions
| diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php deleted file mode 100644 index 5530fe3f03..0000000000 --- a/phpBB/includes/user.php +++ /dev/null @@ -1,857 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ -	exit; -} - -/** -* Base user class -* -* This is the overarching class which contains (through session extend) -* all methods utilised for user functionality during a session. -* -* @package phpBB3 -*/ -class phpbb_user extends phpbb_session -{ -	var $lang = array(); -	var $help = array(); -	var $style = array(); -	var $date_format; - -	/** -	* DateTimeZone object holding the timezone of the user -	*/ -	public $timezone; - -	var $lang_name = false; -	var $lang_id = false; -	var $lang_path; -	var $img_lang; -	var $img_array = array(); - -	// Able to add new options (up to id 31) -	var $keyoptions = array('viewimg' => 0, 'viewflash' => 1, 'viewsmilies' => 2, 'viewsigs' => 3, 'viewavatars' => 4, 'viewcensors' => 5, 'attachsig' => 6, 'bbcode' => 8, 'smilies' => 9, 'popuppm' => 10, 'sig_bbcode' => 15, 'sig_smilies' => 16, 'sig_links' => 17); - -	/** -	* Constructor to set the lang path -	*/ -	function __construct() -	{ -		global $phpbb_root_path; - -		$this->lang_path = $phpbb_root_path . 'language/'; -	} - -	/** -	* Function to set custom language path (able to use directory outside of phpBB) -	* -	* @param string $lang_path New language path used. -	* @access public -	*/ -	function set_custom_lang_path($lang_path) -	{ -		$this->lang_path = $lang_path; - -		if (substr($this->lang_path, -1) != '/') -		{ -			$this->lang_path .= '/'; -		} -	} - -	/** -	* Setup basic user-specific items (style, language, ...) -	*/ -	function setup($lang_set = false, $style_id = false) -	{ -		global $db, $phpbb_style, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache; -		global $phpbb_dispatcher; - -		if ($this->data['user_id'] != ANONYMOUS) -		{ -			$user_lang_name = (file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']); -			$user_date_format = $this->data['user_dateformat']; -			$user_timezone = $this->data['user_timezone']; -		} -		else -		{ -			$user_lang_name = basename($config['default_lang']); -			$user_date_format = $config['default_dateformat']; -			$user_timezone = $config['board_timezone']; - -			/** -			* If a guest user is surfing, we try to guess his/her language first by obtaining the browser language -			* If re-enabled we need to make sure only those languages installed are checked -			* Commented out so we do not loose the code. - -			if ($request->header('Accept-Language')) -			{ -				$accept_lang_ary = explode(',', $request->header('Accept-Language')); - -				foreach ($accept_lang_ary as $accept_lang) -				{ -					// Set correct format ... guess full xx_YY form -					$accept_lang = substr($accept_lang, 0, 2) . '_' . strtoupper(substr($accept_lang, 3, 2)); -					$accept_lang = basename($accept_lang); - -					if (file_exists($this->lang_path . $accept_lang . "/common.$phpEx")) -					{ -						$user_lang_name = $config['default_lang'] = $accept_lang; -						break; -					} -					else -					{ -						// No match on xx_YY so try xx -						$accept_lang = substr($accept_lang, 0, 2); -						$accept_lang = basename($accept_lang); - -						if (file_exists($this->lang_path . $accept_lang . "/common.$phpEx")) -						{ -							$user_lang_name = $config['default_lang'] = $accept_lang; -							break; -						} -					} -				} -			} -			*/ -		} - -		$user_data = $this->data; - -		/** -		* Event to load language files and modify user data on every page -		* -		* @event core.user_setup -		* @var	array	user_data			Array with user's data row -		* @var	string	user_lang_name		Basename of the user's langauge -		* @var	string	user_date_format	User's date/time format -		* @var	string	user_timezone		User's timezone, should be one of -		*							http://www.php.net/manual/en/timezones.php -		* @var	mixed	lang_set			String or array of language files -		* @var	mixed	style_id			Style we are going to display -		* @since 3.1-A1 -		*/ -		$vars = array('user_data', 'user_lang_name', 'user_date_format', 'user_timezone', 'lang_set', 'style_id'); -		extract($phpbb_dispatcher->trigger_event('core.user_setup', compact($vars))); - -		$this->data = $user_data; -		$this->lang_name = $user_lang_name; -		$this->date_format = $user_date_format; - -		try -		{ -			$this->timezone = new DateTimeZone($user_timezone); -		} -		catch (Exception $e) -		{ -			// If the timezone the user has selected is invalid, we fall back to UTC. -			$this->timezone = new DateTimeZone('UTC'); -		} - -		// We include common language file here to not load it every time a custom language file is included -		$lang = &$this->lang; - -		// Do not suppress error if in DEBUG mode -		$include_result = (defined('DEBUG')) ? (include $this->lang_path . $this->lang_name . "/common.$phpEx") : (@include $this->lang_path . $this->lang_name . "/common.$phpEx"); - -		if ($include_result === false) -		{ -			die('Language file ' . $this->lang_path . $this->lang_name . "/common.$phpEx" . " couldn't be opened."); -		} - -		$this->add_lang($lang_set); -		unset($lang_set); - -		$style_request = request_var('style', 0); -		if ($style_request && $auth->acl_get('a_styles') && !defined('ADMIN_START')) -		{ -			global $SID, $_EXTRA_URL; - -			$style_id = $style_request; -			$SID .= '&style=' . $style_id; -			$_EXTRA_URL = array('style=' . $style_id); -		} -		else -		{ -			// Set up style -			$style_id = ($style_id) ? $style_id : ((!$config['override_user_style']) ? $this->data['user_style'] : $config['default_style']); -		} - -		$sql = 'SELECT * -			FROM ' . STYLES_TABLE . " s -			WHERE s.style_id = $style_id"; -		$result = $db->sql_query($sql, 3600); -		$this->style = $db->sql_fetchrow($result); -		$db->sql_freeresult($result); - -		// User has wrong style -		if (!$this->style && $style_id == $this->data['user_style']) -		{ -			$style_id = $this->data['user_style'] = $config['default_style']; - -			$sql = 'UPDATE ' . USERS_TABLE . " -				SET user_style = $style_id -				WHERE user_id = {$this->data['user_id']}"; -			$db->sql_query($sql); - -			$sql = 'SELECT * -				FROM ' . STYLES_TABLE . " s -				WHERE s.style_id = $style_id"; -			$result = $db->sql_query($sql, 3600); -			$this->style = $db->sql_fetchrow($result); -			$db->sql_freeresult($result); -		} - -		if (!$this->style) -		{ -			trigger_error('NO_STYLE_DATA', E_USER_ERROR); -		} - -		// Now parse the cfg file and cache it -		$parsed_items = $cache->obtain_cfg_items($this->style); - -		$check_for = array( -			'pagination_sep'    => (string) ', ' -		); - -		foreach ($check_for as $key => $default_value) -		{ -			$this->style[$key] = (isset($parsed_items[$key])) ? $parsed_items[$key] : $default_value; -			settype($this->style[$key], gettype($default_value)); - -			if (is_string($default_value)) -			{ -				$this->style[$key] = htmlspecialchars($this->style[$key]); -			} -		} - -		$phpbb_style->set_style(); - -		$this->img_lang = $this->lang_name; - -		// Call phpbb_user_session_handler() in case external application want to "bend" some variables or replace classes... -		// After calling it we continue script execution... -		phpbb_user_session_handler(); - -		// If this function got called from the error handler we are finished here. -		if (defined('IN_ERROR_HANDLER')) -		{ -			return; -		} - -		// Disable board if the install/ directory is still present -		// For the brave development army we do not care about this, else we need to comment out this everytime we develop locally -		if (!defined('DEBUG') && !defined('ADMIN_START') && !defined('IN_INSTALL') && !defined('IN_LOGIN') && file_exists($phpbb_root_path . 'install') && !is_file($phpbb_root_path . 'install')) -		{ -			// Adjust the message slightly according to the permissions -			if ($auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_')) -			{ -				$message = 'REMOVE_INSTALL'; -			} -			else -			{ -				$message = (!empty($config['board_disable_msg'])) ? $config['board_disable_msg'] : 'BOARD_DISABLE'; -			} -			trigger_error($message); -		} - -		// Is board disabled and user not an admin or moderator? -		if ($config['board_disable'] && !defined('IN_LOGIN') && !$auth->acl_gets('a_', 'm_') && !$auth->acl_getf_global('m_')) -		{ -			if ($this->data['is_bot']) -			{ -				send_status_line(503, 'Service Unavailable'); -			} - -			$message = (!empty($config['board_disable_msg'])) ? $config['board_disable_msg'] : 'BOARD_DISABLE'; -			trigger_error($message); -		} - -		// Is load exceeded? -		if ($config['limit_load'] && $this->load !== false) -		{ -			if ($this->load > floatval($config['limit_load']) && !defined('IN_LOGIN') && !defined('IN_ADMIN')) -			{ -				// Set board disabled to true to let the admins/mods get the proper notification -				$config['board_disable'] = '1'; - -				if (!$auth->acl_gets('a_', 'm_') && !$auth->acl_getf_global('m_')) -				{ -					if ($this->data['is_bot']) -					{ -						send_status_line(503, 'Service Unavailable'); -					} -					trigger_error('BOARD_UNAVAILABLE'); -				} -			} -		} - -		if (isset($this->data['session_viewonline'])) -		{ -			// Make sure the user is able to hide his session -			if (!$this->data['session_viewonline']) -			{ -				// Reset online status if not allowed to hide the session... -				if (!$auth->acl_get('u_hideonline')) -				{ -					$sql = 'UPDATE ' . SESSIONS_TABLE . ' -						SET session_viewonline = 1 -						WHERE session_user_id = ' . $this->data['user_id']; -					$db->sql_query($sql); -					$this->data['session_viewonline'] = 1; -				} -			} -			else if (!$this->data['user_allow_viewonline']) -			{ -				// the user wants to hide and is allowed to  -> cloaking device on. -				if ($auth->acl_get('u_hideonline')) -				{ -					$sql = 'UPDATE ' . SESSIONS_TABLE . ' -						SET session_viewonline = 0 -						WHERE session_user_id = ' . $this->data['user_id']; -					$db->sql_query($sql); -					$this->data['session_viewonline'] = 0; -				} -			} -		} - - -		// Does the user need to change their password? If so, redirect to the -		// ucp profile reg_details page ... of course do not redirect if we're already in the ucp -		if (!defined('IN_ADMIN') && !defined('ADMIN_START') && $config['chg_passforce'] && !empty($this->data['is_registered']) && $auth->acl_get('u_chgpasswd') && $this->data['user_passchg'] < time() - ($config['chg_passforce'] * 86400)) -		{ -			if (strpos($this->page['query_string'], 'mode=reg_details') === false && $this->page['page_name'] != "ucp.$phpEx") -			{ -				redirect(append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=profile&mode=reg_details')); -			} -		} - -		return; -	} - -	/** -	* More advanced language substitution -	* Function to mimic sprintf() with the possibility of using phpBB's language system to substitute nullar/singular/plural forms. -	* Params are the language key and the parameters to be substituted. -	* This function/functionality is inspired by SHS` and Ashe. -	* -	* Example call: <samp>$user->lang('NUM_POSTS_IN_QUEUE', 1);</samp> -	* -	* If the first parameter is an array, the elements are used as keys and subkeys to get the language entry: -	* Example: <samp>$user->lang(array('datetime', 'AGO'), 1)</samp> uses $user->lang['datetime']['AGO'] as language entry. -	*/ -	function lang() -	{ -		$args = func_get_args(); -		$key = $args[0]; - -		if (is_array($key)) -		{ -			$lang = &$this->lang[array_shift($key)]; - -			foreach ($key as $_key) -			{ -				$lang = &$lang[$_key]; -			} -		} -		else -		{ -			$lang = &$this->lang[$key]; -		} - -		// Return if language string does not exist -		if (!isset($lang) || (!is_string($lang) && !is_array($lang))) -		{ -			return $key; -		} - -		// If the language entry is a string, we simply mimic sprintf() behaviour -		if (is_string($lang)) -		{ -			if (sizeof($args) == 1) -			{ -				return $lang; -			} - -			// Replace key with language entry and simply pass along... -			$args[0] = $lang; -			return call_user_func_array('sprintf', $args); -		} -		else if (sizeof($lang) == 0) -		{ -			// If the language entry is an empty array, we just return the language key -			return $args[0]; -		} - -		// It is an array... now handle different nullar/singular/plural forms -		$key_found = false; - -		// We now get the first number passed and will select the key based upon this number -		for ($i = 1, $num_args = sizeof($args); $i < $num_args; $i++) -		{ -			if (is_int($args[$i]) || is_float($args[$i])) -			{ -				if ($args[$i] == 0 && isset($lang[0])) -				{ -					// We allow each translation using plural forms to specify a version for the case of 0 things, -					// so that "0 users" may be displayed as "No users". -					$key_found = 0; -					break; -				} -				else -				{ -					$use_plural_form = $this->get_plural_form($args[$i]); -					if (isset($lang[$use_plural_form])) -					{ -						// The key we should use exists, so we use it. -						$key_found = $use_plural_form; -					} -					else -					{ -						// If the key we need to use does not exist, we fall back to the previous one. -						$numbers = array_keys($lang); - -						foreach ($numbers as $num) -						{ -							if ($num > $use_plural_form) -							{ -								break; -							} - -							$key_found = $num; -						} -					} -					break; -				} -			} -		} - -		// Ok, let's check if the key was found, else use the last entry (because it is mostly the plural form) -		if ($key_found === false) -		{ -			$numbers = array_keys($lang); -			$key_found = end($numbers); -		} - -		// Use the language string we determined and pass it to sprintf() -		$args[0] = $lang[$key_found]; -		return call_user_func_array('sprintf', $args); -	} - -	/** -	* Determine which plural form we should use. -	* For some languages this is not as simple as for English. -	* -	* @param $number        int|float   The number we want to get the plural case for. Float numbers are floored. -	* @param $force_rule    mixed   False to use the plural rule of the language package -	*                               or an integer to force a certain plural rule -	* @return   int     The plural-case we need to use for the number plural-rule combination -	*/ -	function get_plural_form($number, $force_rule = false) -	{ -		$number = (int) $number; - -		// Default to English system -		$plural_rule = ($force_rule !== false) ? $force_rule : ((isset($this->lang['PLURAL_RULE'])) ? $this->lang['PLURAL_RULE'] : 1); - -		return phpbb_get_plural_form($plural_rule, $number); -	} - -	/** -	* Add Language Items - use_db and use_help are assigned where needed (only use them to force inclusion) -	* -	* @param mixed $lang_set specifies the language entries to include -	* @param bool $use_db internal variable for recursion, do not use -	* @param bool $use_help internal variable for recursion, do not use -	* @param string $ext_name The extension to load language from, or empty for core files -	* -	* Examples: -	* <code> -	* $lang_set = array('posting', 'help' => 'faq'); -	* $lang_set = array('posting', 'viewtopic', 'help' => array('bbcode', 'faq')) -	* $lang_set = array(array('posting', 'viewtopic'), 'help' => array('bbcode', 'faq')) -	* $lang_set = 'posting' -	* $lang_set = array('help' => 'faq', 'db' => array('help:faq', 'posting')) -	* </code> -	*/ -	function add_lang($lang_set, $use_db = false, $use_help = false, $ext_name = '') -	{ -		global $phpEx; - -		if (is_array($lang_set)) -		{ -			foreach ($lang_set as $key => $lang_file) -			{ -				// Please do not delete this line. -				// We have to force the type here, else [array] language inclusion will not work -				$key = (string) $key; - -				if ($key == 'db') -				{ -					$this->add_lang($lang_file, true, $use_help, $ext_name); -				} -				else if ($key == 'help') -				{ -					$this->add_lang($lang_file, $use_db, true, $ext_name); -				} -				else if (!is_array($lang_file)) -				{ -					$this->set_lang($this->lang, $this->help, $lang_file, $use_db, $use_help, $ext_name); -				} -				else -				{ -					$this->add_lang($lang_file, $use_db, $use_help, $ext_name); -				} -			} -			unset($lang_set); -		} -		else if ($lang_set) -		{ -			$this->set_lang($this->lang, $this->help, $lang_set, $use_db, $use_help, $ext_name); -		} -	} - -	/** -	* Add Language Items from an extension - use_db and use_help are assigned where needed (only use them to force inclusion) -	* -	* @param string $ext_name The extension to load language from, or empty for core files -	* @param mixed $lang_set specifies the language entries to include -	* @param bool $use_db internal variable for recursion, do not use -	* @param bool $use_help internal variable for recursion, do not use -	*/ -	function add_lang_ext($ext_name, $lang_set, $use_db = false, $use_help = false) -	{ -		if ($ext_name === '/') -		{ -			$ext_name = ''; -		} - -		$this->add_lang($lang_set, $use_db, $use_help, $ext_name); -	} - -	/** -	* Set language entry (called by add_lang) -	* @access private -	*/ -	function set_lang(&$lang, &$help, $lang_file, $use_db = false, $use_help = false, $ext_name = '') -	{ -		global $phpbb_root_path, $phpEx; - -		// Make sure the language name is set (if the user setup did not happen it is not set) -		if (!$this->lang_name) -		{ -			global $config; -			$this->lang_name = basename($config['default_lang']); -		} - -		// $lang == $this->lang -		// $help == $this->help -		// - add appropriate variables here, name them as they are used within the language file... -		if (!$use_db) -		{ -			if ($use_help && strpos($lang_file, '/') !== false) -			{ -				$filename = dirname($lang_file) . '/help_' . basename($lang_file); -			} -			else -			{ -				$filename = (($use_help) ? 'help_' : '') . $lang_file; -			} - -			if ($ext_name) -			{ -				global $phpbb_extension_manager; -				$ext_path = $phpbb_extension_manager->get_extension_path($ext_name, true); - -				$lang_path = $ext_path . 'language/'; -			} -			else -			{ -				$lang_path = $this->lang_path; -			} - -			if (strpos($phpbb_root_path . $filename, $lang_path . $this->lang_name . '/') === 0) -			{ -				$language_filename = $phpbb_root_path . $filename; -			} -			else -			{ -				$language_filename = $lang_path . $this->lang_name . '/' . $filename . '.' . $phpEx; -			} - -			if (!file_exists($language_filename)) -			{ -				global $config; - -				if ($this->lang_name == 'en') -				{ -					// The user's selected language is missing the file, the board default's language is missing the file, and the file doesn't exist in /en. -					$language_filename = str_replace($lang_path . 'en', $lang_path . $this->data['user_lang'], $language_filename); -					trigger_error('Language file ' . $language_filename . ' couldn\'t be opened.', E_USER_ERROR); -				} -				else if ($this->lang_name == basename($config['default_lang'])) -				{ -					// Fall back to the English Language -					$this->lang_name = 'en'; -					$this->set_lang($lang, $help, $lang_file, $use_db, $use_help, $ext_name); -				} -				else if ($this->lang_name == $this->data['user_lang']) -				{ -					// Fall back to the board default language -					$this->lang_name = basename($config['default_lang']); -					$this->set_lang($lang, $help, $lang_file, $use_db, $use_help, $ext_name); -				} - -				// Reset the lang name -				$this->lang_name = (file_exists($lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']); -				return; -			} - -			// Do not suppress error if in DEBUG mode -			$include_result = (defined('DEBUG')) ? (include $language_filename) : (@include $language_filename); - -			if ($include_result === false) -			{ -				trigger_error('Language file ' . $language_filename . ' couldn\'t be opened.', E_USER_ERROR); -			} -		} -		else if ($use_db) -		{ -			// Get Database Language Strings -			// Put them into $lang if nothing is prefixed, put them into $help if help: is prefixed -			// For example: help:faq, posting -		} -	} - -	/** -	* Format user date -	* -	* @param int $gmepoch unix timestamp -	* @param string $format date format in date() notation. | used to indicate relative dates, for example |d m Y|, h:i is translated to Today, h:i. -	* @param bool $forcedate force non-relative date format. -	* -	* @return mixed translated date -	*/ -	function format_date($gmepoch, $format = false, $forcedate = false) -	{ -		static $utc; - -		if (!isset($utc)) -		{ -			$utc = new DateTimeZone('UTC'); -		} - -		$time = new phpbb_datetime($this, "@$gmepoch", $utc); -		$time->setTimezone($this->timezone); - -		return $time->format($format, $forcedate); -	} - -	/** -	* Create a phpbb_datetime object in the context of the current user -	* -	* @since 3.1 -	* @param string $time String in a format accepted by strtotime(). -	* @param DateTimeZone $timezone Time zone of the time. -	* @return phpbb_datetime Date time object linked to the current users locale -	*/ -	public function create_datetime($time = 'now', DateTimeZone $timezone = null) -	{ -		$timezone = $timezone ?: $this->timezone; -		return new phpbb_datetime($this, $time, $timezone); -	} - -	/** -	* Get the UNIX timestamp for a datetime in the users timezone, so we can store it in the database. -	* -	* @param	string			$format		Format of the entered date/time -	* @param	string			$time		Date/time with the timezone applied -	* @param	DateTimeZone	$timezone	Timezone of the date/time, falls back to timezone of current user -	* @return	int			Returns the unix timestamp -	*/ -	public function get_timestamp_from_format($format, $time, DateTimeZone $timezone = null) -	{ -		$timezone = $timezone ?: $this->timezone; -		$date = DateTime::createFromFormat($format, $time, $timezone); -		return ($date !== false) ? $date->format('U') : false; -	} - -	/** -	* Get language id currently used by the user -	*/ -	function get_iso_lang_id() -	{ -		global $config, $db; - -		if (!empty($this->lang_id)) -		{ -			return $this->lang_id; -		} - -		if (!$this->lang_name) -		{ -			$this->lang_name = $config['default_lang']; -		} - -		$sql = 'SELECT lang_id -			FROM ' . LANG_TABLE . " -			WHERE lang_iso = '" . $db->sql_escape($this->lang_name) . "'"; -		$result = $db->sql_query($sql); -		$this->lang_id = (int) $db->sql_fetchfield('lang_id'); -		$db->sql_freeresult($result); - -		return $this->lang_id; -	} - -	/** -	* Get users profile fields -	*/ -	function get_profile_fields($user_id) -	{ -		global $db; - -		if (isset($this->profile_fields)) -		{ -			return; -		} - -		$sql = 'SELECT * -			FROM ' . PROFILE_FIELDS_DATA_TABLE . " -			WHERE user_id = $user_id"; -		$result = $db->sql_query_limit($sql, 1); -		$this->profile_fields = (!($row = $db->sql_fetchrow($result))) ? array() : $row; -		$db->sql_freeresult($result); -	} - -	/** -	* Specify/Get image -	*/ -	function img($img, $alt = '') -	{ -		$alt = (!empty($this->lang[$alt])) ? $this->lang[$alt] : $alt; -		return '<span class="imageset ' . $img . '">' . $alt . '</span>'; -	} - -	/** -	* Get option bit field from user options. -	* -	* @param int $key option key, as defined in $keyoptions property. -	* @param int $data bit field value to use, or false to use $this->data['user_options'] -	* @return bool true if the option is set in the bit field, false otherwise -	*/ -	function optionget($key, $data = false) -	{ -		$var = ($data !== false) ? $data : $this->data['user_options']; -		return phpbb_optionget($this->keyoptions[$key], $var); -	} - -	/** -	* Set option bit field for user options. -	* -	* @param int $key Option key, as defined in $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 $this->data['user_options'] -	* @return int|bool If $data is false, the bit field is modified and -	*                  written back to $this->data['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($key, $value, $data = false) -	{ -		$var = ($data !== false) ? $data : $this->data['user_options']; - -		$new_var = phpbb_optionset($this->keyoptions[$key], $value, $var); - -		if ($data === false) -		{ -			if ($new_var != $var) -			{ -				$this->data['user_options'] = $new_var; -				return true; -			} -			else -			{ -				return false; -			} -		} -		else -		{ -			return $new_var; -		} -	} - -	/** -	* Funtion to make the user leave the NEWLY_REGISTERED system group. -	* @access public -	*/ -	function leave_newly_registered() -	{ -		global $db; - -		if (empty($this->data['user_new'])) -		{ -			return false; -		} - -		if (!function_exists('remove_newly_registered')) -		{ -			global $phpbb_root_path, $phpEx; - -			include($phpbb_root_path . 'includes/functions_user.' . $phpEx); -		} -		if ($group = remove_newly_registered($this->data['user_id'], $this->data)) -		{ -			$this->data['group_id'] = $group; - -		} -		$this->data['user_permissions'] = ''; -		$this->data['user_new'] = 0; - -		return true; -	} - -	/** -	* Returns all password protected forum ids the user is currently NOT authenticated for. -	* -	* @return array     Array of forum ids -	* @access public -	*/ -	function get_passworded_forums() -	{ -		global $db; - -		$sql = 'SELECT f.forum_id, fa.user_id -			FROM ' . FORUMS_TABLE . ' f -			LEFT JOIN ' . FORUMS_ACCESS_TABLE . " fa -				ON (fa.forum_id = f.forum_id -					AND fa.session_id = '" . $db->sql_escape($this->session_id) . "') -			WHERE f.forum_password <> ''"; -		$result = $db->sql_query($sql); - -		$forum_ids = array(); -		while ($row = $db->sql_fetchrow($result)) -		{ -			$forum_id = (int) $row['forum_id']; - -			if ($row['user_id'] != $this->data['user_id']) -			{ -				$forum_ids[$forum_id] = $forum_id; -			} -		} -		$db->sql_freeresult($result); - -		return $forum_ids; -	} -} | 
