diff options
Diffstat (limited to 'phpBB/phpbb/captcha/plugins/qa.php')
| -rw-r--r-- | phpBB/phpbb/captcha/plugins/qa.php | 34 | 
1 files changed, 30 insertions, 4 deletions
| diff --git a/phpBB/phpbb/captcha/plugins/qa.php b/phpBB/phpbb/captcha/plugins/qa.php index 2771369e57..8f2da838c5 100644 --- a/phpBB/phpbb/captcha/plugins/qa.php +++ b/phpBB/phpbb/captcha/plugins/qa.php @@ -100,6 +100,28 @@ class qa  			$db->sql_freeresult($result);  		} +		// final fallback to any language +		if (!sizeof($this->question_ids)) +		{ +			$this->question_lang = ''; + +			$sql = 'SELECT q.question_id, q.lang_iso +				FROM ' . $this->table_captcha_questions . ' q, ' . $this->table_captcha_answers . ' a +				WHERE q.question_id = a.question_id +				GROUP BY lang_iso'; +			$result = $db->sql_query($sql, 7200); + +			while ($row = $db->sql_fetchrow($result)) +			{ +				if (empty($this->question_lang)) +				{ +					$this->question_lang = $row['lang_iso']; +				} +				$this->question_ids[$row['question_id']] = $row['question_id']; +			} +			$db->sql_freeresult($result); +		} +  		// okay, if there is a confirm_id, we try to load that confirm's state. If not, we try to find one  		if (!$this->load_answer() && (!$this->load_confirm_id() || !$this->load_answer()))  		{ @@ -198,10 +220,12 @@ class qa  	*/  	function get_template()  	{ -		global $template; +		global $phpbb_log, $template, $user; -		if ($this->is_solved()) +		if ($this->is_solved() || empty($this->question_text) || !count($this->question_ids))  		{ +			/** @var \phpbb\log\log_interface $phpbb_log */ +			$phpbb_log->add('critical', $user->data['user_id'], $user->ip, 'LOG_ERROR_CAPTCHA', time(), array($user->lang('CONFIRM_QUESTION_MISSING')));  			return false;  		}  		else @@ -364,13 +388,15 @@ class qa  	*/  	function validate()  	{ -		global $user; +		global $phpbb_log, $user;  		$error = '';  		if (!sizeof($this->question_ids))  		{ -			return false; +			/** @var \phpbb\log\log_interface $phpbb_log */ +			$phpbb_log->add('critical', $user->data['user_id'], $user->ip, 'LOG_ERROR_CAPTCHA', time(), array($user->lang('CONFIRM_QUESTION_MISSING'))); +			return $user->lang('CONFIRM_QUESTION_MISSING');  		}  		if (!$this->confirm_id) | 
