diff options
| author | Joas Schilling <nickvergessen@gmx.de> | 2015-04-06 11:09:20 +0200 | 
|---|---|---|
| committer | Joas Schilling <nickvergessen@gmx.de> | 2015-04-06 11:09:20 +0200 | 
| commit | 3af61075a8f7a82d00bd98b508a48d1396ab76de (patch) | |
| tree | 1600ebb5bb037d2bc49f8e5fb99deb80ea6dc6f8 | |
| parent | 197369e3f9c5d8468add1e8f22a53c1976dac61e (diff) | |
| parent | 009a8cb2d594f170a46cba1a1937c2da20e1825e (diff) | |
| download | forums-3af61075a8f7a82d00bd98b508a48d1396ab76de.tar forums-3af61075a8f7a82d00bd98b508a48d1396ab76de.tar.gz forums-3af61075a8f7a82d00bd98b508a48d1396ab76de.tar.bz2 forums-3af61075a8f7a82d00bd98b508a48d1396ab76de.tar.xz forums-3af61075a8f7a82d00bd98b508a48d1396ab76de.zip  | |
Merge branch '3.1.x'
Conflicts:
	phpBB/phpbb/captcha/plugins/qa.php
| -rw-r--r-- | phpBB/phpbb/captcha/plugins/qa.php | 60 | ||||
| -rw-r--r-- | tests/captcha/qa_test.php | 94 | 
2 files changed, 124 insertions, 30 deletions
diff --git a/phpBB/phpbb/captcha/plugins/qa.php b/phpBB/phpbb/captcha/plugins/qa.php index cf03f92e96..4df8a86432 100644 --- a/phpBB/phpbb/captcha/plugins/qa.php +++ b/phpBB/phpbb/captcha/plugins/qa.php @@ -125,7 +125,7 @@ class qa  	*/  	public function is_available()  	{ -		global $config, $db, $phpbb_root_path, $phpEx, $user; +		global $config, $db, $user;  		// load language file for pretty display in the ACP dropdown  		$user->add_lang('captcha_qa'); @@ -263,7 +263,7 @@ class qa  	*/  	function garbage_collect($type = 0)  	{ -		global $db, $config; +		global $db;  		$sql = 'SELECT c.confirm_id  			FROM ' . $this->table_qa_confirm . ' c @@ -309,7 +309,6 @@ class qa  		global $phpbb_container;  		$db_tool = $phpbb_container->get('dbal.tools'); -  		$schemas = array(  				$this->table_captcha_questions		=> array (  					'COLUMNS' => array( @@ -364,7 +363,7 @@ class qa  	*/  	function validate()  	{ -		global $config, $db, $user; +		global $user;  		$error = ''; @@ -412,7 +411,7 @@ class qa  		if (!sizeof($this->question_ids))  		{ -			return false; +			return;  		}  		$this->confirm_id = md5(unique_id($user->ip));  		$this->question = (int) array_rand($this->question_ids); @@ -438,7 +437,7 @@ class qa  		if (!sizeof($this->question_ids))  		{ -			return false; +			return;  		}  		$this->question = (int) array_rand($this->question_ids); @@ -611,8 +610,7 @@ class qa  	*/  	function acp_page($id, &$module)  	{ -		global $db, $user, $auth, $template, $phpbb_log, $request; -		global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; +		global $config, $request, $phpbb_log, $template, $user;  		$user->add_lang('acp/board');  		$user->add_lang('captcha_qa'); @@ -674,11 +672,7 @@ class qa  		else  		{  			// okay, show the editor -			$error = false; -			$input_question = $request->variable('question_text', '', true); -			$input_answers = $request->variable('answers', '', true); -			$input_lang = $request->variable('lang_iso', '', true); -			$input_strict = $request->variable('strict', false); +			$question_input = $this->acp_get_question_input();  			$langs = $this->get_languages();  			foreach ($langs as $lang => $entry) @@ -697,13 +691,11 @@ class qa  			{  				if ($question = $this->acp_get_question_data($question_id))  				{ -					$answers = (isset($input_answers[$lang])) ? $input_answers[$lang] : implode("\n", $question['answers']); -  					$template->assign_vars(array( -						'QUESTION_TEXT'		=> ($input_question) ? $input_question : $question['question_text'], -						'LANG_ISO'			=> ($input_lang) ? $input_lang : $question['lang_iso'], -						'STRICT'			=> (isset($_REQUEST['strict'])) ? $input_strict : $question['strict'], -						'ANSWERS'			=> $answers, +						'QUESTION_TEXT'		=> ($question_input['question_text']) ? $question_input['question_text'] : $question['question_text'], +						'LANG_ISO'			=> ($question_input['lang_iso']) ? $question_input['lang_iso'] : $question['lang_iso'], +						'STRICT'			=> (isset($_REQUEST['strict'])) ? $question_input['strict'] : $question['strict'], +						'ANSWERS'			=> implode("\n", $question['answers']),  					));  				}  				else @@ -714,18 +706,16 @@ class qa  			else  			{  				$template->assign_vars(array( -					'QUESTION_TEXT'		=> $input_question, -					'LANG_ISO'			=> $input_lang, -					'STRICT'			=> $input_strict, -					'ANSWERS'			=> $input_answers, +					'QUESTION_TEXT'		=> $question_input['question_text'], +					'LANG_ISO'			=> $question_input['lang_iso'], +					'STRICT'			=> $question_input['strict'], +					'ANSWERS'			=> (is_array($question_input['answers'])) ? implode("\n", $question_input['answers']) : '',  				));  			}  			if ($submit && check_form_key($form_key))  			{ -				$data = $this->acp_get_question_input(); - -				if (!$this->validate_input($data)) +				if (!$this->validate_input($question_input))  				{  					$template->assign_vars(array(  						'S_ERROR'			=> true, @@ -735,11 +725,11 @@ class qa  				{  					if ($question_id)  					{ -						$this->acp_update_question($data, $question_id); +						$this->acp_update_question($question_input, $question_id);  					}  					else  					{ -						$this->acp_add_question($data); +						$this->acp_add_question($question_input);  					}  					$phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_VISUAL'); @@ -819,6 +809,8 @@ class qa  			return $question;  		} + +		return false;  	}  	/** @@ -829,13 +821,21 @@ class qa  		global $request;  		$answers = $request->variable('answers', '', true); + +		// Convert answers into array and filter if answers are set +		if (strlen($answers)) +		{ +			$answers = array_filter(array_map('trim', explode("\n", $answers)), function ($value) { +				return $value !== ''; +			}); +		} +  		$question = array(  			'question_text'	=> $request->variable('question_text', '', true),  			'strict'		=> $request->variable('strict', false),  			'lang_iso'		=> $request->variable('lang_iso', ''), -			'answers'		=> (strlen($answers)) ? explode("\n", $answers) : '', +			'answers'		=> $answers,  		); -  		return $question;  	} diff --git a/tests/captcha/qa_test.php b/tests/captcha/qa_test.php new file mode 100644 index 0000000000..1f2f9f3070 --- /dev/null +++ b/tests/captcha/qa_test.php @@ -0,0 +1,94 @@ +<?php +/** + * + * This file is part of the phpBB Forum Software package. + * + * @copyright (c) phpBB Limited <https://www.phpbb.com> + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php'; + +class phpbb_captcha_qa_test extends \phpbb_database_test_case +{ +	protected $request; + +	/** @var \phpbb\captcha\plugins\qa */ +	protected $qa; + +	public function getDataSet() +	{ +		return $this->createXMLDataSet(dirname(__FILE__) . '/../fixtures/empty.xml'); +	} + +	public function setUp() +	{ +		global $db; + +		$db = $this->new_dbal(); + +		parent::setUp(); + +		$this->request = new \phpbb_mock_request(); +		request_var(false, false, false, false, $this->request); +		$this->qa = new \phpbb\captcha\plugins\qa('phpbb_captcha_questions', 'phpbb_captcha_answers', 'phpbb_qa_confirm'); +	} + +	public function test_is_installed() +	{ +		$this->assertFalse($this->qa->is_installed()); + +		$this->qa->install(); + +		$this->assertTrue($this->qa->is_installed()); +	} + +	public function test_set_get_name() +	{ +		$this->assertNull($this->qa->get_service_name()); +		$this->qa->set_name('foobar'); +		$this->assertSame('foobar', $this->qa->get_service_name()); +	} + +	public function data_acp_get_question_input() +	{ +		return array( +			array("foobar\ntest\nyes", array( +				'question_text'	=> '', +				'strict'	=> false, +				'lang_iso'	=> '', +				'answers'	=> array('foobar', 'test', 'yes') +			)), +			array("foobar\ntest\n \nyes", array( +				'question_text'	=> '', +				'strict'	=> false, +				'lang_iso'	=> '', +				'answers'	=> array( +					0 => 'foobar', +					1 => 'test', +					3 => 'yes', +				) +			)), +			array('', array( +				'question_text'	=> '', +				'strict'	=> false, +				'lang_iso'	=> '', +				'answers'	=> '', +			)), +		); +	} + +	/** +	 * @dataProvider data_acp_get_question_input +	 */ +	public function test_acp_get_question_input($value, $expected) +	{ +		$this->request->overwrite('answers', $value); + +		$this->assertEquals($expected, $this->qa->acp_get_question_input()); +	} +}  | 
