diff options
234 files changed, 2917 insertions, 2303 deletions
| diff --git a/build/build.xml b/build/build.xml index 510e7d0955..d3489ab607 100644 --- a/build/build.xml +++ b/build/build.xml @@ -77,16 +77,17 @@  		<exec command="phpBB/vendor/bin/phpcs  				-s  				--extensions=php -				--standard=build/code_sniffer/ruleset-php-strict.xml +				--standard=build/code_sniffer/ruleset-php-strict-core.xml  				--ignore=${project.basedir}/phpBB/phpbb/db/migration/data/v30x/*  				phpBB/phpbb"  			dir="." returnProperty="retval-php-strict" passthru="true" />  		<exec command="phpBB/vendor/bin/phpcs  				-s  				--extensions=php -				--standard=build/code_sniffer/ruleset-php-legacy.xml +				--standard=build/code_sniffer/ruleset-php-legacy-core.xml  				--ignore=${project.basedir}/phpBB/cache/*  				--ignore=${project.basedir}/phpBB/develop/* +				--ignore=${project.basedir}/phpBB/ext/*  				--ignore=${project.basedir}/phpBB/includes/diff/*.php  				--ignore=${project.basedir}/phpBB/includes/sphinxapi.php  				--ignore=${project.basedir}/phpBB/includes/utf/data/* @@ -96,10 +97,18 @@  				--ignore=${project.basedir}/phpBB/vendor/*  				phpBB"  			dir="." returnProperty="retval-php-legacy" passthru="true" /> +		<exec command="phpBB/vendor/bin/phpcs +				-s +				--extensions=php +				--standard=build/code_sniffer/ruleset-php-extensions.xml +				--ignore=${project.basedir}/phpBB/ext/*/tests/* +				phpBB/ext" +			dir="." returnProperty="retval-php-ext" passthru="true" />  		<if>  			<or>  				<not><equals arg1="${retval-php-strict}" arg2="0" /></not>  				<not><equals arg1="${retval-php-legacy}" arg2="0" /></not> +				<not><equals arg1="${retval-php-ext}" arg2="0" /></not>  			</or>  			<then>  				<fail message="PHP Code Sniffer failed." /> diff --git a/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php b/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php index fcf53b5061..fa7d3b40c1 100644 --- a/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php +++ b/build/code_sniffer/phpbb/Sniffs/Commenting/FileCommentSniff.php @@ -12,9 +12,8 @@  */  /** -* Checks that each source file contains the standard header. -*  -* Based on Coding Guidelines 1.ii File Header. +* Checks that each PHP source file contains a valid header as defined by the +* phpBB Coding Guidelines.  *  * @package code_sniffer  * @author Manuel Pichler <mapi@phpundercontrol.org> @@ -47,10 +46,10 @@ class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff  		{  			if ($phpcsFile->findPrevious(T_OPEN_TAG, $stackPtr - 1) !== false)  			{ -                return; +				return;  			}  		} -		 +  		// Fetch next non whitespace token  		$tokens = $phpcsFile->getTokens();  		$start  = $phpcsFile->findNext(T_WHITESPACE, $stackPtr + 1, null, true); @@ -66,65 +65,68 @@ class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff  			$phpcsFile->addError('Missing required file doc comment.', $stackPtr);  			return;  		} -		 +  		// Find comment end token  		$end = $phpcsFile->findNext(T_DOC_COMMENT, $start + 1, null, true) - 1; -		 +  		// If there is no end, skip processing here  		if ($end === false)  		{  			return;  		} -		 +  		// List of found comment tags  		$tags = array(); -		 +  		// check comment lines without the first(/**) an last(*/) line -		for ($i = $start + 1, $c = ($end - $start); $i <= $c; ++$i) +		for ($i = $start + 1, $c = $end - 1; $i <= $c; ++$i)  		{  			$line = $tokens[$i]['content'];  			// Check that each line starts with a '*'  			if (substr($line, 0, 1) !== '*')  			{ -                $message = 'The file doc comment should not be idented.'; +				$message = 'The file doc comment should not be idented.';  				$phpcsFile->addWarning($message, $i);  			}  			else if (preg_match('/^\*\s+@([\w]+)\s+(.*)$/', $line, $match) !== 0)  			{ -				$tags[$match[1]] = array($match[2], $i); +				if (!isset($tags[$match[1]])) +				{ +					$tags[$match[1]] = array(); +				} + +				$tags[$match[1]][] = array($match[2], $i);  			}  		} -		 +  		// Check that the first and last line is empty  		if (trim($tokens[$start + 1]['content']) !== '*')  		{  			$message = 'The first file comment line should be empty.'; -            $phpcsFile->addWarning($message, ($start + 1));			 -		} -        if (trim($tokens[$end - $start]['content']) !== '*') -        { -        	$message = 'The last file comment line should be empty.'; -            $phpcsFile->addWarning($message, ($end - $start));          -        } -         -        $this->processPackage($phpcsFile, $start, $tags); -        $this->processVersion($phpcsFile, $start, $tags); -        $this->processCopyright($phpcsFile, $start, $tags); -        $this->processLicense($phpcsFile, $start, $tags); -		 -        //print_r($tags); +			$phpcsFile->addWarning($message, ($start + 1)); +		} +		if (trim($tokens[$end - 1]['content']) !== '*') +		{ +			$message = 'The last file comment line should be empty.'; +			$phpcsFile->addWarning($message, $end - 1); +		} + +		//$this->processPackage($phpcsFile, $start, $tags); +		//$this->processVersion($phpcsFile, $start, $tags); +		$this->processCopyright($phpcsFile, $start, $tags); +		$this->processLicense($phpcsFile, $start, $tags);  	} -	 +  	/** -	 * Checks that the tags array contains a valid package tag -	 * -	 * @param PHP_CodeSniffer_File $phpcsFile The context source file instance. -	 * @param integer The stack pointer for the first comment token. -	 * @param array(string=>array) $tags The found file doc comment tags. -	 *  -	 * @return null -	 */ +	* Checks that the tags array contains a valid package tag +	* +	* @param PHP_CodeSniffer_File $phpcsFile The context source file instance. +	* @param integer The stack pointer for the first comment token. +	* @param array(string=>array) $tags The found file doc comment tags. +	* +	* @return null +	*/  	protected function processPackage(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags)  	{  		if (!isset($tags['package'])) @@ -134,80 +136,87 @@ class phpbb_Sniffs_Commenting_FileCommentSniff implements PHP_CodeSniffer_Sniff  		}  		else if (preg_match('/^([\w]+)$/', $tags['package'][0]) === 0)  		{ -            $message = 'Invalid content found for @package tag.'; -            $phpcsFile->addWarning($message, $tags['package'][1]);			 +			$message = 'Invalid content found for @package tag.'; +			$phpcsFile->addWarning($message, $tags['package'][1]);  		}  	} -	 +  	/** -     * Checks that the tags array contains a valid version tag -     * -     * @param PHP_CodeSniffer_File $phpcsFile The context source file instance. -     * @param integer The stack pointer for the first comment token. -     * @param array(string=>array) $tags The found file doc comment tags. -     *  -     * @return null -	 */ +	* Checks that the tags array contains a valid version tag +	* +	* @param PHP_CodeSniffer_File $phpcsFile The context source file instance. +	* @param integer The stack pointer for the first comment token. +	* @param array(string=>array) $tags The found file doc comment tags. +	* +	* @return null +	*/  	protected function processVersion(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags) -    { -        if (!isset($tags['version'])) -        { -            $message = 'Missing require @version tag in file doc comment.'; -            $phpcsFile->addError($message, $ptr); -        } -        else if (preg_match('/^\$Id:[^\$]+\$$/', $tags['version'][0]) === 0) -        { -            $message = 'Invalid content found for @version tag, use "$Id: $".'; -            $phpcsFile->addError($message, $tags['version'][1]);             -        } -    } -     -    /** -     * Checks that the tags array contains a valid copyright tag -     * -     * @param PHP_CodeSniffer_File $phpcsFile The context source file instance. -     * @param integer The stack pointer for the first comment token. -     * @param array(string=>array) $tags The found file doc comment tags. -     *  -     * @return null -     */ -    protected function processCopyright(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags) -    { -        if (!isset($tags['copyright'])) -        { -            $message = 'Missing require @copyright tag in file doc comment.'; -            $phpcsFile->addError($message, $ptr); -        } -        else if (preg_match('/^\(c\) 2[0-9]{3} phpBB Group\s*$/', $tags['copyright'][0]) === 0) -        { -            $message = 'Invalid content found for @copyright tag, use "(c) <year> phpBB Group".'; -            $phpcsFile->addError($message, $tags['copyright'][1]);             -        } -    } -     -    /** -     * Checks that the tags array contains a valid license tag -     * -     * @param PHP_CodeSniffer_File $phpcsFile The context source file instance. -     * @param integer The stack pointer for the first comment token. -     * @param array(string=>array) $tags The found file doc comment tags. -     *  -     * @return null -     */ -    protected function processLicense(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags) -    { -		$license = 'http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2'; -    	 -        if (!isset($tags['license'])) -        { -            $message = 'Missing require @license tag in file doc comment.'; -            $phpcsFile->addError($message, $ptr); -        } -        else if (trim($tags['license'][0]) !== $license) -        { -            $message = 'Invalid content found for @license tag, use '  -                     . '"' . $license . '".'; -            $phpcsFile->addError($message, $tags['license'][1]);             -        } -    } +	{ +		if (!isset($tags['version'])) +		{ +			$message = 'Missing require @version tag in file doc comment.'; +			$phpcsFile->addError($message, $ptr); +		} +		else if (preg_match('/^\$Id:[^\$]+\$$/', $tags['version'][0]) === 0) +		{ +			$message = 'Invalid content found for @version tag, use "$Id: $".'; +			$phpcsFile->addError($message, $tags['version'][1]); +		} +	} + +	/** +	* Checks that the tags array contains a valid copyright tag +	* +	* @param PHP_CodeSniffer_File $phpcsFile The context source file instance. +	* @param integer The stack pointer for the first comment token. +	* @param array(string=>array) $tags The found file doc comment tags. +	* +	* @return null +	*/ +	protected function processCopyright(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags) +	{ +		$copyright = '(c) phpBB Limited <https://www.phpbb.com>'; + +		if (!isset($tags['copyright'])) +		{ +			$message = 'Missing require @copyright tag in file doc comment.'; +			$phpcsFile->addError($message, $ptr); +		} +		else if ($tags['copyright'][0][0] !== $copyright) +		{ +			$message = 'Invalid content found for the first @copyright tag, use "' . $copyright . '".'; +			$phpcsFile->addError($message, $tags['copyright'][0][1]); +		} +	} + +	/** +	* Checks that the tags array contains a valid license tag +	* +	* @param PHP_CodeSniffer_File $phpcsFile The context source file instance. +	* @param integer The stack pointer for the first comment token. +	* @param array(string=>array) $tags The found file doc comment tags. +	* +	* @return null +	*/ +	protected function processLicense(PHP_CodeSniffer_File $phpcsFile, $ptr, $tags) +	{ +		$license = 'GNU General Public License, version 2 (GPL-2.0)'; + +		if (!isset($tags['license'])) +		{ +			$message = 'Missing require @license tag in file doc comment.'; +			$phpcsFile->addError($message, $ptr); +		} +		else if (sizeof($tags['license']) !== 1) +		{ +			$message = 'It must be only one @license tag in file doc comment.'; +			$phpcsFile->addError($message, $ptr); +		} +		else if (trim($tags['license'][0][0]) !== $license) +		{ +			$message = 'Invalid content found for @license tag, use ' +				. '"' . $license . '".'; +			$phpcsFile->addError($message, $tags['license'][0][1]); +		} +	}  } diff --git a/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc deleted file mode 100644 index 0ace1c1bda..0000000000 --- a/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.inc +++ /dev/null @@ -1,19 +0,0 @@ -<?php -/**  -* -* @package code_sniffer³ -* @version $Id: $ -* @copyright (c) 2008 phpBB Group  -* @license http://opensource.org/licenses/gpl-license.php BSD License - * -*/ -?> -<?php -/**  -* Broken but not first file doc comment. -*  -* @version @package_version@ -* @license   http://www.opensource.org/licenses/bsd-license.php  BSD License -* @copyright (c) 2007 phpBB Group   -* -*/ diff --git a/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php b/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php deleted file mode 100644 index 23aaa45bd3..0000000000 --- a/build/code_sniffer/phpbb/Tests/Commenting/FileCommentUnitTest.php +++ /dev/null @@ -1,54 +0,0 @@ -<?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. -* -*/ - -/** -* Unit test class for the EmptyStatement sniff. -* -* @package code_sniffer -* @author Manuel Pichler <mapi@phpundercontrol.org> -*/ -class phpbb_Tests_Commenting_FileCommentUnitTest extends AbstractSniffUnitTest -{ -	 -	/** -	* Returns the lines where errors should occur. -	* -	* The key of the array should represent the line number and the value -	* should represent the number of errors that should occur on that line. -	* -	* @return array(int => int) -	*/ -	public function getErrorList() -	{ -		return array( -            7  =>  1 // BSD License error :) -		); -	}//end getErrorList() - - -	/** -	* Returns the lines where warnings should occur. -	* -	* The key of the array should represent the line number and the value -	* should represent the number of warnings that should occur on that line. -	* -	* @return array(int => int) -	*/ -	public function getWarningList() -	{ -		return array( -		    4  =>  1, -            8  =>  1 -        ); -	}//end getWarningList() -} diff --git a/build/code_sniffer/phpbb/build.xml b/build/code_sniffer/phpbb/build.xml deleted file mode 100644 index b6d3bf6451..0000000000 --- a/build/code_sniffer/phpbb/build.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project name="code_sniffer" basedir="." default="install"> - -  <property name="working.dir" value="${basedir}" /> -  <property name="target.dir" value="/usr/share/php/PHP/CodeSniffer/Standards" /> - -  <!-- -  Install phpbb sniff -  --> -  <target name="install"> -    <delete dir="${target.dir}/phpbb" /> -    <mkdir dir="${target.dir}/phpbb"/> - -    <copy todir="${target.dir}/phpbb"> -	<fileset file="${working.dir}/phpbbCodingStandard.php" /> -    </copy> -    <copy todir="${target.dir}/phpbb/Sniffs"> -	<fileset dir="${working.dir}/Sniffs" /> -    </copy> - -  </target> - -</project> diff --git a/build/code_sniffer/phpbb/phpbbCodingStandard.php b/build/code_sniffer/phpbb/phpbbCodingStandard.php deleted file mode 100644 index b94186ab6c..0000000000 --- a/build/code_sniffer/phpbb/phpbbCodingStandard.php +++ /dev/null @@ -1,46 +0,0 @@ -<?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. -* -*/ - -/** - * @ignore - */ -if (class_exists('PHP_CodeSniffer_Standards_CodingStandard', true) === false) { -    throw new PHP_CodeSniffer_Exception( -        'Class PHP_CodeSniffer_Standards_CodingStandard not found' -    ); -} - -/** - * Primary class for the phpbb coding standard. - * - * @package code_sniffer - */ -class PHP_CodeSniffer_Standards_phpbb_phpbbCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard -{ -	/** -    * Return a list of external sniffs to include with this standard. -    * -    * External locations can be single sniffs, a whole directory of sniffs, or -    * an entire coding standard. Locations start with the standard name. For -    * example: -    *  PEAR                              => include all sniffs in this standard -    *  PEAR/Sniffs/Files                 => include all sniffs in this dir -    *  PEAR/Sniffs/Files/LineLengthSniff => include this single sniff -    * -    * @return array -    */ -    public function getIncludedSniffs() -    { -        return array(); -    } -} diff --git a/build/code_sniffer/ruleset-php-extensions.xml b/build/code_sniffer/ruleset-php-extensions.xml new file mode 100644 index 0000000000..2d388103c3 --- /dev/null +++ b/build/code_sniffer/ruleset-php-extensions.xml @@ -0,0 +1,8 @@ +<?xml version="1.0"?> +<ruleset name="phpBB PHP Strict Standard Extensions"> + + <description>phpBB coding standard for PHP files of phpBB extensions</description> + + <rule ref="./ruleset-php-strict.xml" /> + +</ruleset> diff --git a/build/code_sniffer/ruleset-php-legacy-core.xml b/build/code_sniffer/ruleset-php-legacy-core.xml new file mode 100644 index 0000000000..55f2461a04 --- /dev/null +++ b/build/code_sniffer/ruleset-php-legacy-core.xml @@ -0,0 +1,11 @@ +<?xml version="1.0"?> +<ruleset name="phpBB PHP Legacy Standard Core"> + + <description>phpBB legacy coding standard for PHP files of phpBB core</description> + + <rule ref="./ruleset-php-legacy.xml" /> + + <!-- Each file MUST start with a valid header as defined by the Coding Guidelines --> + <rule ref="./phpbb/Sniffs/Commenting/FileCommentSniff.php" /> + +</ruleset> diff --git a/build/code_sniffer/ruleset-php-legacy.xml b/build/code_sniffer/ruleset-php-legacy.xml index 65eb0a8622..b0110e8b12 100644 --- a/build/code_sniffer/ruleset-php-legacy.xml +++ b/build/code_sniffer/ruleset-php-legacy.xml @@ -20,6 +20,16 @@   <!-- Call-time pass-by-reference MUST not be used. -->   <rule ref="Generic.Functions.CallTimePassByReference.NotAllowed" /> + <!-- Filenames MUST be lowercase. --> + <rule ref="Generic.Files.LowercasedFilename" /> + + <!-- The function brace MUST be on the line following the function declaration +      and MUST be indented to the same column as the start of the function declaration. --> + <rule ref="Generic.Functions.OpeningFunctionBraceBsdAllman" /> + + <!-- There MUST be exactly one space after a cast. --> + <rule ref="Generic.Formatting.SpaceAfterCast" /> +   <!-- Class constants MUST be declared in all upper case with underscore separators. -->   <rule ref="Generic.NamingConventions.UpperCaseConstantName" /> @@ -32,6 +42,20 @@   <!-- Each file MUST end with exactly one newline character -->   <rule ref="PSR2.Files.EndFileNewline" /> + <!-- When referencing arrays there MUST NOT be any whitespace around the opening bracket +      or before the closing bracket. --> + <rule ref="Squiz.Arrays.ArrayBracketSpacing" /> + + <!-- The "else if" statement MUST be written with a space between the words else and if. --> + <rule ref="Squiz.ControlStructures.ElseIfDeclaration" /> + + <!-- There MUST be a space between each element of a foreach loop. --> + <rule ref="Squiz.ControlStructures.ForEachLoopDeclaration" /> + + <!-- In a for loop declaration, there MUST be no space inside the brackets +      and there MUST be 0 spaces before and 1 space after semicolons. --> + <rule ref="Squiz.ControlStructures.ForLoopDeclaration" /> +   <!-- In the argument list, there MUST NOT be a space before each comma,        and there MUST be one space after each comma. -->   <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing"> @@ -41,6 +65,12 @@   </rule>   <rule ref="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterHint" /> + <!-- All built-in PHP functions MUST be called lowercased. --> + <rule ref="Squiz.Functions.LowercaseFunctionKeywords" /> + + <!-- The eval() function MUST NOT be used. --> + <rule ref="Squiz.PHP.Eval" /> +   <!-- There MUST NOT be trailing whitespace at the end of lines. -->   <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace" /> diff --git a/build/code_sniffer/ruleset-php-strict-core.xml b/build/code_sniffer/ruleset-php-strict-core.xml new file mode 100644 index 0000000000..5ca4d0cf1e --- /dev/null +++ b/build/code_sniffer/ruleset-php-strict-core.xml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<ruleset name="phpBB PHP Strict Standard Core"> + + <description>phpBB coding standard for PHP files of phpBB core</description> + + <rule ref="./ruleset-php-legacy-core.xml" /> + <rule ref="./ruleset-php-strict.xml" /> + +</ruleset> diff --git a/build/code_sniffer/ruleset-php-strict.xml b/build/code_sniffer/ruleset-php-strict.xml index f2d5b86dd1..c722f7851c 100644 --- a/build/code_sniffer/ruleset-php-strict.xml +++ b/build/code_sniffer/ruleset-php-strict.xml @@ -22,6 +22,9 @@   <!-- PHP keywords MUST be in lower case. -->   <rule ref="Generic.PHP.LowerCaseKeyword" /> + <!-- Constructors MUST be called __construct() instead of after the class. --> + <rule ref="Generic.NamingConventions.ConstructorName" /> +   <!-- Classes etc. MUST be namespaced -->   <rule ref="PSR1.Classes.ClassDeclaration.MissingNamespace" /> diff --git a/git-tools/hooks/commit-msg b/git-tools/hooks/commit-msg index b156d276df..136606252c 100755 --- a/git-tools/hooks/commit-msg +++ b/git-tools/hooks/commit-msg @@ -191,12 +191,12 @@ do  				err=$ERR_HEADER;  				echo "$line" | grep -Eq "^\[(ticket/[0-9]+|feature/$branch_regex|task/$branch_regex)\] .+$"  				result=$? -				if ! echo "$line" | grep -Eq "^\[(ticket/[0-9]+|feature/$branch_regex|task/$branch_regex)\] [A-Z].+$" +				if ! echo "$line" | grep -Eq "^\[(ticket/[0-9]+|feature/$branch_regex|task/$branch_regex)\] [a-zA-Z].+$"  				then  					# Don't be too strict.  					# Commits may be temporary, intended to be squashed later.  					# Just issue a warning here. -					complain "$severity: heading should be a sentence beginning with a capital letter." 1>&2 +					complain "$severity: heading should be a sentence beginning with a letter." 1>&2  					complain "You entered:" 1>&2  					complain "$line" 1>&2  				fi diff --git a/phpBB/adm/style/acp_attachments.html b/phpBB/adm/style/acp_attachments.html index 0e3b5ff3b2..59b10f597e 100644 --- a/phpBB/adm/style/acp_attachments.html +++ b/phpBB/adm/style/acp_attachments.html @@ -205,8 +205,8 @@  		</dl>  		<dl>  			<dt><label for="allowed_forums">{L_ALLOWED_FORUMS}{L_COLON}</label><br /><span>{L_ALLOWED_FORUMS_EXPLAIN}</span></dt> -			<dd><label><input type="radio" id="allowed_forums" class="radio" name="forum_select" value="0"<!-- IF not S_FORUM_IDS --> checked="checked"<!-- ENDIF --> /> {L_ALLOW_ALL_FORUMS}</label> -				<label><input type="radio" class="radio" name="forum_select" value="1"<!-- IF S_FORUM_IDS --> checked="checked"<!-- ENDIF --> /> {L_ALLOW_SELECTED_FORUMS}</label></dd> +			<dd><label><input type="radio" id="allowed_forums" class="radio" name="forum_select" value="0"<!-- IF not S_FORUM_IDS --> checked="checked"<!-- ENDIF --> /> {L_ALLOW_ALL_FORUMS}</label></dd> +			<dd><label><input type="radio" class="radio" name="forum_select" value="1"<!-- IF S_FORUM_IDS --> checked="checked"<!-- ENDIF --> /> {L_ALLOW_SELECTED_FORUMS}</label></dd>  			<dd><select name="allowed_forums[]" multiple="multiple" size="8">{S_FORUM_ID_OPTIONS}</select></dd>  		</dl> diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css index f23c720add..0f22bc100d 100644 --- a/phpBB/adm/style/admin.css +++ b/phpBB/adm/style/admin.css @@ -209,6 +209,9 @@ li {  #page-footer {  	clear: both; +} + +.copyright {  	font-size: 0.75em;  	text-align: center;  } @@ -984,6 +987,10 @@ table.fixed-width-table {  		margin-bottom: 1px;  	} +	.rtl table.responsive td { +		text-align: right !important; +	} +  	table.responsive td.empty {  		display: none !important;  	} @@ -1004,6 +1011,10 @@ table.fixed-width-table {  		box-sizing: border-box;  	} +	.rtl table.responsive.two-columns td { +		float: right; +	} +  	table.responsive.two-columns td:nth-child(2n+1) {  		clear: left;  	} @@ -1594,7 +1605,6 @@ input.button1:focus, input.button2:focus {  	z-index: 50;  	padding: 25px;  	padding: 0 25px 20px 25px; -	text-align: left;  }  .phpbb_alert .alert_close { diff --git a/phpBB/adm/style/overall_footer.html b/phpBB/adm/style/overall_footer.html index 0f4589f5d4..deb38c8691 100644 --- a/phpBB/adm/style/overall_footer.html +++ b/phpBB/adm/style/overall_footer.html @@ -5,15 +5,17 @@  	</div>  	<div id="page-footer"> -		<!-- IF S_COPYRIGHT_HTML --> -			{CREDIT_LINE} -			<!-- IF TRANSLATION_INFO --><br />{TRANSLATION_INFO}<!-- ENDIF --> -		<!-- ENDIF --> +		<div class="copyright"> +			<!-- IF S_COPYRIGHT_HTML --> +				{CREDIT_LINE} +				<!-- IF TRANSLATION_INFO --><br />{TRANSLATION_INFO}<!-- ENDIF --> +			<!-- ENDIF --> -		<!-- IF DEBUG_OUTPUT --> -			<!-- IF S_COPYRIGHT_HTML --><br /><!-- ENDIF --> -			{DEBUG_OUTPUT} -		<!-- ENDIF --> +			<!-- IF DEBUG_OUTPUT --> +				<!-- IF S_COPYRIGHT_HTML --><br /><!-- ENDIF --> +				{DEBUG_OUTPUT} +			<!-- ENDIF --> +		</div>  		<div id="darkenwrapper" data-ajax-error-title="{L_AJAX_ERROR_TITLE}" data-ajax-error-text="{L_AJAX_ERROR_TEXT}" data-ajax-error-text-abort="{L_AJAX_ERROR_TEXT_ABORT}" data-ajax-error-text-timeout="{L_AJAX_ERROR_TEXT_TIMEOUT}" data-ajax-error-text-parsererror="{L_AJAX_ERROR_TEXT_PARSERERROR}">  			<div id="darken"> </div> diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 37728864c4..785aa141f0 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -7,6 +7,7 @@ phpbb.alertTime = 100;  // define a couple constants for keydown functions.  var keymap = { +	TAB: 9,  	ENTER: 13,  	ESC: 27  }; @@ -873,19 +874,6 @@ phpbb.timezonePreselectSelect = function(forceSelector) {  	}  }; -// Toggle notification list -$('#notification_list_button').click(function(e) { -	$('#notification_list').toggle(); -	e.preventDefault(); -}); -$('#phpbb').click(function(e) { -	var target = $(e.target); - -	if (!target.is('#notification_list, #notification_list_button') && !target.parents().is('#notification_list, #notification_list_button')) { -		$('#notification_list').hide(); -	} -}); -  phpbb.ajaxCallbacks = {};  /** @@ -1201,10 +1189,10 @@ phpbb.applyCodeEditor = function(textarea) {  		var key = event.keyCode || event.which;  		// intercept tabs -		if (key == 9		&& -			!event.ctrlKey	&& -			!event.shiftKey	&& -			!event.altKey	&& +		if (key == keymap.TAB	&& +			!event.ctrlKey		&& +			!event.shiftKey		&& +			!event.altKey		&&  			!event.metaKey) {  			if (inTag()) {  				appendText("\t"); @@ -1214,7 +1202,7 @@ phpbb.applyCodeEditor = function(textarea) {  		}  		// intercept new line characters -		if (key == 13) { +		if (key == keymap.ENTER) {  			if (inTag()) {  				var lastLine = getLastLine(true),  					code = '' + /^\s*/g.exec(lastLine); @@ -1515,11 +1503,37 @@ phpbb.getFunctionByName = function (functionName) {  };  /** -* Apply code editor to all textarea elements with data-bbcode attribute +* Register page dropdowns.  */ -$(document).ready(function() { -	$('textarea[data-bbcode]').each(function() { -		phpbb.applyCodeEditor(this); +phpbb.registerPageDropdowns = function() { +	$('body').find('.dropdown-container').each(function() { +		var $this = $(this), +			trigger = $this.find('.dropdown-trigger:first'), +			contents = $this.find('.dropdown'), +			options = { +				direction: 'auto', +				verticalDirection: 'auto' +			}, +			data; + +		if (!trigger.length) { +			data = $this.attr('data-dropdown-trigger'); +			trigger = data ? $this.children(data) : $this.children('a:first'); +		} + +		if (!contents.length) { +			data = $this.attr('data-dropdown-contents'); +			contents = data ? $this.children(data) : $this.children('div:first'); +		} + +		if (!trigger.length || !contents.length) return; + +		if ($this.hasClass('dropdown-up')) options.verticalDirection = 'up'; +		if ($this.hasClass('dropdown-down')) options.verticalDirection = 'down'; +		if ($this.hasClass('dropdown-left')) options.direction = 'left'; +		if ($this.hasClass('dropdown-right')) options.direction = 'right'; + +		phpbb.registerDropdown(trigger, contents, options);  	});  	// Hide active dropdowns when click event happens outside @@ -1529,6 +1543,17 @@ $(document).ready(function() {  			$(phpbb.dropdownHandles).each(phpbb.toggleDropdown);  		}  	}); +} + +/** +* Apply code editor to all textarea elements with data-bbcode attribute +*/ +$(document).ready(function() { +	$('textarea[data-bbcode]').each(function() { +		phpbb.applyCodeEditor(this); +	}); + +	phpbb.registerPageDropdowns();  	$('#color_palette_placeholder').each(function() {  		phpbb.registerPalette($(this)); diff --git a/phpBB/config/profilefields.yml b/phpBB/config/profilefields.yml index 00f025e141..ce2a84b12b 100644 --- a/phpBB/config/profilefields.yml +++ b/phpBB/config/profilefields.yml @@ -55,6 +55,15 @@ services:          tags:              - { name: profilefield.type } +    profilefields.type.googleplus: +        class: phpbb\profilefields\type\type_googleplus +        arguments: +            - @request +            - @template +            - @user +        tags: +            - { name: profilefield.type } +      profilefields.type.int:          class: phpbb\profilefields\type\type_int          arguments: diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php index 05085d39ab..f9d2e2e0de 100644 --- a/phpBB/develop/create_schema_files.php +++ b/phpBB/develop/create_schema_files.php @@ -20,7 +20,6 @@  $schema_path = dirname(__FILE__) . '/../install/schemas/';  $supported_dbms = array( -	'firebird',  	'mssql',  	'mysql_40',  	'mysql_41', @@ -67,7 +66,6 @@ foreach ($supported_dbms as $dbms)  	{  		case 'mysql_40':  		case 'mysql_41': -		case 'firebird':  		case 'sqlite':  		case 'sqlite3':  			fwrite($fp, "# DO NOT EDIT THIS FILE, IT IS GENERATED\n"); diff --git a/phpBB/docs/INSTALL.html b/phpBB/docs/INSTALL.html index 0fce349974..a46cea47b1 100644 --- a/phpBB/docs/INSTALL.html +++ b/phpBB/docs/INSTALL.html @@ -136,7 +136,6 @@  			<li>PostgreSQL 8.3+</li>  			<li>SQLite 2.8.2+</li>  			<li>SQLite 3.6.15+</li> -			<li>Firebird 2.1+</li>  			<li>MS SQL Server 2000 or above (directly or via ODBC or the native adapter)</li>  			<li>Oracle</li>  		</ul> diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html index b0fd86f959..e64d3dd8f2 100644 --- a/phpBB/docs/README.html +++ b/phpBB/docs/README.html @@ -323,7 +323,7 @@  	<p>Please remember that running any application on a development (unstable, e.g. a beta release) version of PHP can lead to strange/unexpected results which may appear to be bugs in the application. Therefore, we recommend you upgrade to the newest stable version of PHP before running phpBB3. If you are running a development version of PHP please check any bugs you find on a system running a stable release before submitting.</p> -	<p>This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MariaDB 5.x, MSSQL Server 2000, PostgreSQL 8.x, Oracle 8, SQLite 2 and Firebird. Versions of PHP used range from 5.3.x to 5.4.x without problem.</p> +	<p>This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MariaDB 5.x, MSSQL Server 2000, PostgreSQL 8.x, Oracle 8, SQLite 2 and SQLite 3. Versions of PHP used range from 5.3.x to 5.4.x without problem.</p>  <a name="phpsec"></a><h3>7.i. Notice on PHP security issues</h3> diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html index 173c7e5441..98cfe0e717 100644 --- a/phpBB/docs/coding-guidelines.html +++ b/phpBB/docs/coding-guidelines.html @@ -736,7 +736,7 @@ static private function f()  	<a name="sql"></a><h3>2.iii. SQL/SQL Layout</h3>  	<h4>Common SQL Guidelines: </h4> -	<p>All SQL should be cross-DB compatible, if DB specific SQL is used alternatives must be provided which work on all supported DB's (MySQL3/4/5, MSSQL (7.0 and 2000), PostgreSQL (8.3+), Firebird, SQLite, Oracle8, ODBC (generalised if possible)).</p> +	<p>All SQL should be cross-DB compatible, if DB specific SQL is used alternatives must be provided which work on all supported DB's (MySQL3/4/5, MSSQL (7.0 and 2000), PostgreSQL (8.3+), SQLite, Oracle8, ODBC (generalised if possible)).</p>  	<p>All SQL commands should utilise the DataBase Abstraction Layer (DBAL)</p>  	<h4>SQL code layout:</h4> diff --git a/phpBB/includes/acp/acp_contact.php b/phpBB/includes/acp/acp_contact.php index 13d38d9f29..4e46df21e0 100644 --- a/phpBB/includes/acp/acp_contact.php +++ b/phpBB/includes/acp/acp_contact.php @@ -1,9 +1,14 @@  <?php  /**  * -* @package acp -* @copyright (c) 2014 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* 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. +*  */  /** diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php index 3ba1210b5c..76da43341d 100644 --- a/phpBB/includes/acp/acp_database.php +++ b/phpBB/includes/acp/acp_database.php @@ -119,10 +119,6 @@ class acp_database  							case 'mssqlnative':  								$extractor = new mssql_extractor($format, $filename, $time, $download, $store);  							break; - -							case 'firebird': -								$extractor = new firebird_extractor($format, $filename, $time, $download, $store); -							break;  						}  						$extractor->write_start($table_prefix); @@ -141,7 +137,6 @@ class acp_database  								{  									case 'sqlite':  									case 'sqlite3': -									case 'firebird':  										$extractor->flush('DELETE FROM ' . $table_name . ";\n");  									break; @@ -338,20 +333,6 @@ class acp_database  									}  								break; -								case 'firebird': -									$delim = ";\n"; -									while (($sql = $fgetd($fp, $delim, $read, $seek, $eof)) !== false) -									{ -										$query = trim($sql); -										if (substr($query, 0, 8) === 'SET TERM') -										{ -											$delim = $query[9] . "\n"; -											continue; -										} -										$db->sql_query($query); -									} -								break; -  								case 'postgres':  									$delim = ";\n";  									while (($sql = $fgetd($fp, $delim, $read, $seek, $eof)) !== false) @@ -2110,235 +2091,6 @@ class oracle_extractor extends base_extractor  	}  } -class firebird_extractor extends base_extractor -{ -	function write_start($prefix) -	{ -		$sql_data = "--\n"; -		$sql_data .= "-- phpBB Backup Script\n"; -		$sql_data .= "-- Dump of tables for $prefix\n"; -		$sql_data .= "-- DATE : " . gmdate("d-m-Y H:i:s", $this->time) . " GMT\n"; -		$sql_data .= "--\n"; -		$this->flush($sql_data); -	} - -	function write_data($table_name) -	{ -		global $db; -		$ary_type = $ary_name = array(); - -		// Grab all of the data from current table. -		$sql = "SELECT * -			FROM $table_name"; -		$result = $db->sql_query($sql); - -		$i_num_fields = ibase_num_fields($result); - -		for ($i = 0; $i < $i_num_fields; $i++) -		{ -			$info = ibase_field_info($result, $i); -			$ary_type[$i] = $info['type']; -			$ary_name[$i] = $info['name']; -		} - -		while ($row = $db->sql_fetchrow($result)) -		{ -			$schema_vals = $schema_fields = array(); - -			// Build the SQL statement to recreate the data. -			for ($i = 0; $i < $i_num_fields; $i++) -			{ -				$str_val = $row[strtolower($ary_name[$i])]; - -				if (preg_match('#char|text|bool|varbinary|blob#i', $ary_type[$i])) -				{ -					$str_quote = ''; -					$str_empty = "''"; -					$str_val = sanitize_data_generic(str_replace("'", "''", $str_val)); -				} -				else if (preg_match('#date|timestamp#i', $ary_type[$i])) -				{ -					if (empty($str_val)) -					{ -						$str_quote = ''; -					} -					else -					{ -						$str_quote = "'"; -					} -				} -				else -				{ -					$str_quote = ''; -					$str_empty = 'NULL'; -				} - -				if (empty($str_val) && $str_val !== '0') -				{ -					$str_val = $str_empty; -				} - -				$schema_vals[$i] = $str_quote . $str_val . $str_quote; -				$schema_fields[$i] = '"' . $ary_name[$i] . '"'; -			} - -			// Take the ordered fields and their associated data and build it -			// into a valid sql statement to recreate that field in the data. -			$sql_data = "INSERT INTO $table_name (" . implode(', ', $schema_fields) . ') VALUES (' . implode(', ', $schema_vals) . ");\n"; - -			$this->flush($sql_data); -		} -		$db->sql_freeresult($result); -	} - -	function write_table($table_name) -	{ -		global $db; - -		$sql_data = '-- Table: ' . $table_name . "\n"; -		$sql_data .= "DROP TABLE $table_name;\n"; - -		$data_types = array(7 => 'SMALLINT', 8 => 'INTEGER', 10 => 'FLOAT', 12 => 'DATE', 13 => 'TIME', 14 => 'CHARACTER', 27 => 'DOUBLE PRECISION', 35 => 'TIMESTAMP', 37 => 'VARCHAR', 40 => 'CSTRING', 261 => 'BLOB', 701 => 'DECIMAL', 702 => 'NUMERIC'); - -		$sql_data .= "\nCREATE TABLE $table_name (\n"; - -		$sql = 'SELECT DISTINCT R.RDB$FIELD_NAME as FNAME, R.RDB$NULL_FLAG as NFLAG, R.RDB$DEFAULT_SOURCE as DSOURCE, F.RDB$FIELD_TYPE as FTYPE, F.RDB$FIELD_SUB_TYPE as STYPE, F.RDB$FIELD_LENGTH as FLEN -			FROM RDB$RELATION_FIELDS R -			JOIN RDB$FIELDS F ON R.RDB$FIELD_SOURCE=F.RDB$FIELD_NAME -			LEFT JOIN RDB$FIELD_DIMENSIONS D ON R.RDB$FIELD_SOURCE = D.RDB$FIELD_NAME -			WHERE F.RDB$SYSTEM_FLAG = 0 -				AND R.RDB$RELATION_NAME = \''. $table_name . '\' -			ORDER BY R.RDB$FIELD_POSITION'; -		$result = $db->sql_query($sql); - -		$rows = array(); -		while ($row = $db->sql_fetchrow($result)) -		{ -			$line = "\t" . '"' . $row['fname'] . '" ' . $data_types[$row['ftype']]; - -			if ($row['ftype'] == 261 && $row['stype'] == 1) -			{ -				$line .= ' SUB_TYPE TEXT'; -			} - -			if ($row['ftype'] == 37 || $row['ftype'] == 14) -			{ -				$line .= ' (' . $row['flen'] . ')'; -			} - -			if (!empty($row['dsource'])) -			{ -				$line .= ' ' . $row['dsource']; -			} - -			if (!empty($row['nflag'])) -			{ -				$line .= ' NOT NULL'; -			} -			$rows[] = $line; -		} -		$db->sql_freeresult($result); - -		$sql_data .= implode(",\n", $rows); -		$sql_data .= "\n);\n"; -		$keys = array(); - -		$sql = 'SELECT I.RDB$FIELD_NAME as NAME -			FROM RDB$RELATION_CONSTRAINTS RC, RDB$INDEX_SEGMENTS I, RDB$INDICES IDX -			WHERE (I.RDB$INDEX_NAME = RC.RDB$INDEX_NAME) -				AND (IDX.RDB$INDEX_NAME = RC.RDB$INDEX_NAME) -				AND (RC.RDB$RELATION_NAME = \''. $table_name . '\') -			ORDER BY I.RDB$FIELD_POSITION'; -		$result = $db->sql_query($sql); - -		while ($row = $db->sql_fetchrow($result)) -		{ -			$keys[] = $row['name']; -		} - -		if (sizeof($keys)) -		{ -			$sql_data .= "\nALTER TABLE $table_name ADD PRIMARY KEY (" . implode(', ', $keys) . ');'; -		} - -		$db->sql_freeresult($result); - -		$sql = 'SELECT I.RDB$INDEX_NAME as INAME, I.RDB$UNIQUE_FLAG as UFLAG, S.RDB$FIELD_NAME as FNAME -			FROM RDB$INDICES I JOIN RDB$INDEX_SEGMENTS S ON S.RDB$INDEX_NAME=I.RDB$INDEX_NAME -			WHERE (I.RDB$SYSTEM_FLAG IS NULL  OR  I.RDB$SYSTEM_FLAG=0) -				AND I.RDB$FOREIGN_KEY IS NULL -				AND I.RDB$RELATION_NAME = \''. $table_name . '\' -				AND I.RDB$INDEX_NAME NOT STARTING WITH \'RDB$\' -			ORDER BY S.RDB$FIELD_POSITION'; -		$result = $db->sql_query($sql); - -		$index = array(); -		while ($row = $db->sql_fetchrow($result)) -		{ -			$index[$row['iname']]['unique'] = !empty($row['uflag']); -			$index[$row['iname']]['values'][] = $row['fname']; -		} - -		foreach ($index as $index_name => $data) -		{ -			$sql_data .= "\nCREATE "; -			if ($data['unique']) -			{ -				$sql_data .= 'UNIQUE '; -			} -			$sql_data .= "INDEX $index_name ON $table_name(" . implode(', ', $data['values']) . ");"; -		} -		$sql_data .= "\n"; - -		$db->sql_freeresult($result); - -		$sql = 'SELECT D1.RDB$DEPENDENT_NAME as DNAME, D1.RDB$FIELD_NAME as FNAME, D1.RDB$DEPENDENT_TYPE, R1.RDB$RELATION_NAME -			FROM RDB$DEPENDENCIES D1 -			LEFT JOIN RDB$RELATIONS R1 ON ((D1.RDB$DEPENDENT_NAME = R1.RDB$RELATION_NAME) AND (NOT (R1.RDB$VIEW_BLR IS NULL))) -			WHERE (D1.RDB$DEPENDED_ON_TYPE = 0) -				AND (D1.RDB$DEPENDENT_TYPE <> 3) -				AND (D1.RDB$DEPENDED_ON_NAME = \'' . $table_name . '\') -			UNION SELECT DISTINCT F2.RDB$RELATION_NAME, D2.RDB$FIELD_NAME, D2.RDB$DEPENDENT_TYPE, R2.RDB$RELATION_NAME FROM RDB$DEPENDENCIES D2, RDB$RELATION_FIELDS F2 -			LEFT JOIN RDB$RELATIONS R2 ON ((F2.RDB$RELATION_NAME = R2.RDB$RELATION_NAME) AND (NOT (R2.RDB$VIEW_BLR IS NULL))) -			WHERE (D2.RDB$DEPENDENT_TYPE = 3) -				AND (D2.RDB$DEPENDENT_NAME = F2.RDB$FIELD_SOURCE) -				AND (D2.RDB$DEPENDED_ON_NAME = \'' . $table_name . '\') -			ORDER BY 1, 2'; -		$result = $db->sql_query($sql); -		while ($row = $db->sql_fetchrow($result)) -		{ -			$sql = 'SELECT T1.RDB$DEPENDED_ON_NAME as GEN, T1.RDB$FIELD_NAME, T1.RDB$DEPENDED_ON_TYPE -				FROM RDB$DEPENDENCIES T1 -				WHERE (T1.RDB$DEPENDENT_NAME = \'' . $row['dname'] . '\') -					AND (T1.RDB$DEPENDENT_TYPE = 2 AND T1.RDB$DEPENDED_ON_TYPE = 14) -				UNION ALL SELECT DISTINCT D.RDB$DEPENDED_ON_NAME, D.RDB$FIELD_NAME, D.RDB$DEPENDED_ON_TYPE -				FROM RDB$DEPENDENCIES D, RDB$RELATION_FIELDS F -				WHERE (D.RDB$DEPENDENT_TYPE = 3) -					AND (D.RDB$DEPENDENT_NAME = F.RDB$FIELD_SOURCE) -					AND (F.RDB$RELATION_NAME = \'' . $row['dname'] . '\') -				ORDER BY 1,2'; -			$result2 = $db->sql_query($sql); -			$row2 = $db->sql_fetchrow($result2); -			$db->sql_freeresult($result2); -			$gen_name = $row2['gen']; - -			$sql_data .= "\nDROP GENERATOR " . $gen_name . ";"; -			$sql_data .= "\nSET TERM ^ ;"; -			$sql_data .= "\nCREATE GENERATOR " . $gen_name . "^"; -			$sql_data .= "\nSET GENERATOR  " . $gen_name . " TO 0^\n"; -			$sql_data .= "\nCREATE TRIGGER {$row['dname']} FOR $table_name"; -			$sql_data .= "\nBEFORE INSERT\nAS\nBEGIN"; -			$sql_data .= "\n  NEW.{$row['fname']} = GEN_ID(" . $gen_name . ", 1);"; -			$sql_data .= "\nEND^\n"; -			$sql_data .= "\nSET TERM ; ^\n"; -		} - -		$this->flush($sql_data); - -		$db->sql_freeresult($result); -	} -} -  // get how much space we allow for a chunk of data, very similar to phpMyAdmin's way of doing things ;-) (hey, we only do this for MySQL anyway :P)  function get_usable_memory()  { diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 3d3cfb7f16..b2a6820461 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -527,7 +527,7 @@ class acp_extensions  		$version_helper = new \phpbb\version_helper($this->cache, $this->config, $this->user);  		$version_helper->set_current_version($meta['version']); -		$version_helper->set_file_location($version_check ['host'], $version_check ['directory'], $version_check ['filename']); +		$version_helper->set_file_location($version_check['host'], $version_check['directory'], $version_check['filename']);  		$version_helper->force_stability($this->config['extension_force_unstable'] ? 'unstable' : null);  		return $updates = $version_helper->get_suggested_updates($force_update, $force_cache); diff --git a/phpBB/includes/acp/acp_icons.php b/phpBB/includes/acp/acp_icons.php index 259b9845a3..b9a6ef17ce 100644 --- a/phpBB/includes/acp/acp_icons.php +++ b/phpBB/includes/acp/acp_icons.php @@ -542,7 +542,6 @@ class acp_icons  						{  							case 'sqlite':  							case 'sqlite3': -							case 'firebird':  								$db->sql_query('DELETE FROM ' . $table);  							break; diff --git a/phpBB/includes/acp/acp_jabber.php b/phpBB/includes/acp/acp_jabber.php index 5b88035fa4..8d2e9d41a3 100644 --- a/phpBB/includes/acp/acp_jabber.php +++ b/phpBB/includes/acp/acp_jabber.php @@ -47,13 +47,13 @@ class acp_jabber  		$this->tpl_name = 'acp_jabber';  		$this->page_title = 'ACP_JABBER_SETTINGS'; -		$jab_enable			= request_var('jab_enable',			(bool)		$config['jab_enable']); -		$jab_host			= request_var('jab_host',			(string)	$config['jab_host']); -		$jab_port			= request_var('jab_port',			(int)		$config['jab_port']); -		$jab_username		= request_var('jab_username',		(string)	$config['jab_username']); -		$jab_password		= request_var('jab_password',		(string)	$config['jab_password']); -		$jab_package_size	= request_var('jab_package_size',	(int)		$config['jab_package_size']); -		$jab_use_ssl		= request_var('jab_use_ssl',		(bool)		$config['jab_use_ssl']); +		$jab_enable			= request_var('jab_enable',			(bool) $config['jab_enable']); +		$jab_host			= request_var('jab_host',			(string) $config['jab_host']); +		$jab_port			= request_var('jab_port',			(int) $config['jab_port']); +		$jab_username		= request_var('jab_username',		(string) $config['jab_username']); +		$jab_password		= request_var('jab_password',		(string) $config['jab_password']); +		$jab_package_size	= request_var('jab_package_size',	(int) $config['jab_package_size']); +		$jab_use_ssl		= request_var('jab_use_ssl',		(bool) $config['jab_use_ssl']);  		$form_name = 'acp_jabber';  		add_form_key($form_name); diff --git a/phpBB/includes/acp/acp_main.php b/phpBB/includes/acp/acp_main.php index 3acefebedc..247460ec8e 100644 --- a/phpBB/includes/acp/acp_main.php +++ b/phpBB/includes/acp/acp_main.php @@ -273,7 +273,6 @@ class acp_main  						{  							case 'sqlite':  							case 'sqlite3': -							case 'firebird':  								$db->sql_query('DELETE FROM ' . TOPICS_POSTED_TABLE);  							break; @@ -379,7 +378,6 @@ class acp_main  							{  								case 'sqlite':  								case 'sqlite3': -								case 'firebird':  									$db->sql_query("DELETE FROM $table");  								break; diff --git a/phpBB/includes/acp/acp_profile.php b/phpBB/includes/acp/acp_profile.php index b7f0df4614..c291ee43c8 100644 --- a/phpBB/includes/acp/acp_profile.php +++ b/phpBB/includes/acp/acp_profile.php @@ -1267,11 +1267,6 @@ class acp_profile  			break; -			case 'firebird': -				$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' ADD "' . strtoupper($field_ident) . '" ' . $sql_type; - -			break; -  			case 'oracle':  				$sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD $field_ident " . $sql_type; diff --git a/phpBB/includes/acp/acp_reasons.php b/phpBB/includes/acp/acp_reasons.php index c5e8f1e2d0..9cb5efdbe0 100644 --- a/phpBB/includes/acp/acp_reasons.php +++ b/phpBB/includes/acp/acp_reasons.php @@ -252,7 +252,6 @@ class acp_reasons  						// Teh standard  						case 'postgres':  						case 'oracle': -						case 'firebird':  						case 'sqlite':  						case 'sqlite3':  							// Change the reports using this reason to 'other' diff --git a/phpBB/includes/acp/auth.php b/phpBB/includes/acp/auth.php index 8fa9dba57b..7bb8e824d6 100644 --- a/phpBB/includes/acp/auth.php +++ b/phpBB/includes/acp/auth.php @@ -835,7 +835,7 @@ class auth_admin extends \phpbb\auth\auth  		}  		// Remove current auth options... -		$auth_option_ids = array((int)$any_option_id); +		$auth_option_ids = array((int) $any_option_id);  		foreach ($auth as $auth_option => $auth_setting)  		{  			$auth_option_ids[] = (int) $this->acl_options['id'][$auth_option]; diff --git a/phpBB/includes/acp/info/acp_contact.php b/phpBB/includes/acp/info/acp_contact.php index b8326f34ea..548eb52816 100644 --- a/phpBB/includes/acp/info/acp_contact.php +++ b/phpBB/includes/acp/info/acp_contact.php @@ -1,9 +1,13 @@  <?php  /**  * -* @package acp -* @copyright (c) 2014 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* 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.  *  */ diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 3d0a4761f3..32acb0c9ff 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -5064,10 +5064,10 @@ function phpbb_generate_debug_output(phpbb\db\driver\driver_interface $db, \phpb  		if (isset($GLOBALS['starttime']))  		{  			$totaltime = microtime(true) - $GLOBALS['starttime']; -			$debug_info[] = sprintf('Time: %.3fs', $totaltime); +			$debug_info[] = sprintf('<abbr title="SQL time: %.3fs / PHP time: %.3fs">Time: %.3fs</abbr>', $db->sql_time, ($totaltime - $db->sql_time), $totaltime);  		} -		$debug_info[] = $db->sql_num_queries() . ' Queries (' . $db->sql_num_queries(true) . ' cached)'; +		$debug_info[] = sprintf('<abbr title="Cached: %d">Queries: %d</abbr>', $db->sql_num_queries(true), $db->sql_num_queries());  		$memory_usage = memory_get_peak_usage();  		if ($memory_usage) diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 2d3ac62f86..6bf8ce2c81 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -2445,7 +2445,6 @@ function phpbb_cache_moderators($db, $cache, $auth)  	{  		case 'sqlite':  		case 'sqlite3': -		case 'firebird':  			$db->sql_query('DELETE FROM ' . MODERATOR_CACHE_TABLE);  		break; @@ -2900,17 +2899,6 @@ function get_database_size()  			}  		break; -		case 'firebird': -			global $dbname; - -			// if it on the local machine, we can get lucky -			if (file_exists($dbname)) -			{ -				$database_size = filesize($dbname); -			} - -		break; -  		case 'sqlite':  		case 'sqlite3':  			global $dbhost; diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php index 72fca905e0..74b3e0c70f 100644 --- a/phpBB/includes/functions_content.php +++ b/phpBB/includes/functions_content.php @@ -773,44 +773,47 @@ function make_clickable($text, $server_url = false, $class = 'postlink')  	static $static_class;  	static $magic_url_match_args; -	if (!is_array($magic_url_match_args) || $static_class != $class) +	if (!isset($magic_url_match_args[$server_url]) || $static_class != $class)  	{  		$static_class = $class;  		$class = ($static_class) ? ' class="' . $static_class . '"' : '';  		$local_class = ($static_class) ? ' class="' . $static_class . '-local"' : ''; -		$magic_url_match_args = array(); +		if (!is_array($magic_url_match_args)) +		{ +			$magic_url_match_args = array(); +		}  		// relative urls for this board -		$magic_url_match_args[] = array( +		$magic_url_match_args[$server_url][] = array(  			'#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#i',  			MAGIC_URL_LOCAL,  			$local_class,  		);  		// matches a xxxx://aaaaa.bbb.cccc. ... -		$magic_url_match_args[] = array( +		$magic_url_match_args[$server_url][] = array(  			'#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#i',  			MAGIC_URL_FULL,  			$class,  		);  		// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing -		$magic_url_match_args[] = array( +		$magic_url_match_args[$server_url][] = array(  			'#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#i',  			MAGIC_URL_WWW,  			$class,  		);  		// matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode. -		$magic_url_match_args[] = array( +		$magic_url_match_args[$server_url][] = array(  			'/(^|[\n\t (>])(' . get_preg_expression('email') . ')/i',  			MAGIC_URL_EMAIL,  			'',  		);  	} -	foreach ($magic_url_match_args as $magic_args) +	foreach ($magic_url_match_args[$server_url] as $magic_args)  	{  		if (preg_match($magic_args[0], $text, $matches))  		{ diff --git a/phpBB/includes/functions_convert.php b/phpBB/includes/functions_convert.php index e68e770b3a..864a43c6e7 100644 --- a/phpBB/includes/functions_convert.php +++ b/phpBB/includes/functions_convert.php @@ -1007,8 +1007,8 @@ function get_remote_avatar_dim($src, $axis)  		{  			$bigger = ($remote_avatar_cache[$src][0] > $remote_avatar_cache[$src][1]) ? 0 : 1;  			$ratio = $default[$bigger] / $remote_avatar_cache[$src][$bigger]; -			$remote_avatar_cache[$src][0] = (int)($remote_avatar_cache[$src][0] * $ratio); -			$remote_avatar_cache[$src][1] = (int)($remote_avatar_cache[$src][1] * $ratio); +			$remote_avatar_cache[$src][0] = (int) ($remote_avatar_cache[$src][0] * $ratio); +			$remote_avatar_cache[$src][1] = (int) ($remote_avatar_cache[$src][1] * $ratio);  		}  	} @@ -1287,7 +1287,9 @@ function restore_config($schema)  		{  			$var = (empty($m[2]) || empty($convert_config[$m[2]])) ? "''" : "'" . addslashes($convert_config[$m[2]]) . "'";  			$exec = '$config_value = ' . $m[1] . '(' . $var . ');'; +			// @codingStandardsIgnoreStart  			eval($exec); +			// @codingStandardsIgnoreEnd  		}  		else  		{ @@ -2043,7 +2045,6 @@ function update_topics_posted()  	{  		case 'sqlite':  		case 'sqlite3': -		case 'firebird':  			$db->sql_query('DELETE FROM ' . TOPICS_POSTED_TABLE);  		break; @@ -2295,7 +2296,7 @@ function convert_bbcode($message, $convert_size = true, $extended_bbcodes = fals  		$message = preg_replace('#\[size=([0-9]+)\](.*?)\[/size\]#i', '[size=\1]\2[/size]', $message);  		$message = preg_replace('#\[size=[0-9]{2,}\](.*?)\[/size\]#i', '[size=29]\1[/size]', $message); -		for ($i = sizeof($size); $i; ) +		for ($i = sizeof($size); $i;)  		{  			$i--;  			$message = str_replace('[size=' . $i . ']', '[size=' . $size[$i] . ']', $message); diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 4606a9f7ca..23c6a15ca4 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -674,6 +674,8 @@ function generate_forum_nav(&$forum_data)  	// Get forum parents  	$forum_parents = get_forum_parents($forum_data); +	$microdata_attr = 'data-forum-id'; +  	// Build navigation links  	if (!empty($forum_parents))  	{ @@ -693,6 +695,7 @@ function generate_forum_nav(&$forum_data)  				'S_IS_POST'		=> ($parent_type == FORUM_POST) ? true : false,  				'FORUM_NAME'	=> $parent_name,  				'FORUM_ID'		=> $parent_forum_id, +				'MICRODATA'		=> $microdata_attr . '="' . $parent_forum_id . '"',  				'U_VIEW_FORUM'	=> append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $parent_forum_id))  			);  		} @@ -704,6 +707,7 @@ function generate_forum_nav(&$forum_data)  		'S_IS_POST'		=> ($forum_data['forum_type'] == FORUM_POST) ? true : false,  		'FORUM_NAME'	=> $forum_data['forum_name'],  		'FORUM_ID'		=> $forum_data['forum_id'], +		'MICRODATA'		=> $microdata_attr . '="' . $forum_data['forum_id'] . '"',  		'U_VIEW_FORUM'	=> append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_data['forum_id']))  	); diff --git a/phpBB/includes/functions_install.php b/phpBB/includes/functions_install.php index 1c66489c31..b5d1573d12 100644 --- a/phpBB/includes/functions_install.php +++ b/phpBB/includes/functions_install.php @@ -27,15 +27,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20  {  	global $lang;  	$available_dbms = array( -		'firebird'	=> array( -			'LABEL'			=> 'FireBird', -			'SCHEMA'		=> 'firebird', -			'MODULE'		=> 'interbase', -			'DELIM'			=> ';;', -			'DRIVER'		=> 'phpbb\db\driver\firebird', -			'AVAILABLE'		=> true, -			'2.0.x'			=> false, -		),  		// Note: php 5.5 alpha 2 deprecated mysql.  		// Keep mysqli before mysql in this list.  		'mysqli'	=> array( @@ -260,7 +251,6 @@ function connect_check_db($error_connect, &$error, $dbms_details, $table_prefix,  			$prefix_length = 200;  		break; -		case 'phpbb\db\driver\firebird':  		case 'phpbb\db\driver\oracle':  			$prefix_length = 6;  		break; @@ -321,87 +311,6 @@ function connect_check_db($error_connect, &$error, $dbms_details, $table_prefix,  				}  			break; -			case 'phpbb\db\driver\firebird': -				// check the version of FB, use some hackery if we can't get access to the server info -				if ($db->service_handle !== false && function_exists('ibase_server_info')) -				{ -					$val = @ibase_server_info($db->service_handle, IBASE_SVC_SERVER_VERSION); -					preg_match('#V([\d.]+)#', $val, $match); -					if ($match[1] < 2) -					{ -						$error[] = $lang['INST_ERR_DB_NO_FIREBIRD']; -					} -					$db_info = @ibase_db_info($db->service_handle, $dbname, IBASE_STS_HDR_PAGES); - -					preg_match('/^\\s*Page size\\s*(\\d+)/m', $db_info, $regs); -					$page_size = intval($regs[1]); -					if ($page_size < 8192) -					{ -						$error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS']; -					} -				} -				else -				{ -					$sql = "SELECT * -						FROM RDB$FUNCTIONS -						WHERE RDB$SYSTEM_FLAG IS NULL -							AND RDB$FUNCTION_NAME = 'CHAR_LENGTH'"; -					$result = $db->sql_query($sql); -					$row = $db->sql_fetchrow($result); -					$db->sql_freeresult($result); - -					// if its a UDF, its too old -					if ($row) -					{ -						$error[] = $lang['INST_ERR_DB_NO_FIREBIRD']; -					} -					else -					{ -						$sql = 'SELECT 1 FROM RDB$DATABASE -							WHERE BIN_AND(10, 1) = 0'; -						$result = $db->sql_query($sql); -						if (!$result) // This can only fail if BIN_AND is not defined -						{ -							$error[] = $lang['INST_ERR_DB_NO_FIREBIRD']; -						} -						$db->sql_freeresult($result); -					} - -					// Setup the stuff for our random table -					$char_array = array_merge(range('A', 'Z'), range('0', '9')); -					$char_len = mt_rand(7, 9); -					$char_array_len = sizeof($char_array) - 1; - -					$final = ''; - -					for ($i = 0; $i < $char_len; $i++) -					{ -						$final .= $char_array[mt_rand(0, $char_array_len)]; -					} - -					// Create some random table -					$sql = 'CREATE TABLE ' . $final . " ( -						FIELD1 VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE, -						FIELD2 INTEGER DEFAULT 0 NOT NULL);"; -					$db->sql_query($sql); - -					// Create an index that should fail if the page size is less than 8192 -					$sql = 'CREATE INDEX ' . $final . ' ON ' . $final . '(FIELD1, FIELD2);'; -					$db->sql_query($sql); - -					if (ibase_errmsg() !== false) -					{ -						$error[] = $lang['INST_ERR_DB_NO_FIREBIRD_PS']; -					} -					else -					{ -						// Kill the old table -						$db->sql_query('DROP TABLE ' . $final . ';'); -					} -					unset($final); -				} -			break; -  			case 'phpbb\db\driver\oracle':  				if ($unicode_check)  				{ diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php index 51284af233..b7615e923b 100644 --- a/phpBB/includes/functions_module.php +++ b/phpBB/includes/functions_module.php @@ -456,7 +456,9 @@ class p_master  		);  		$is_auth = false; +		// @codingStandardsIgnoreStart  		eval('$is_auth = (int) (' .	$module_auth . ');'); +		// @codingStandardsIgnoreEnd  		return $is_auth;  	} diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index 92655cd035..f9e80d5df1 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -988,7 +988,7 @@ function handle_mark_actions($user_id, $mark_action)  */  function delete_pm($user_id, $msg_ids, $folder_id)  { -	global $db, $user, $phpbb_root_path, $phpEx, $phpbb_container; +	global $db, $user, $phpbb_root_path, $phpEx, $phpbb_container, $phpbb_dispatcher;  	$user_id	= (int) $user_id;  	$folder_id	= (int) $folder_id; @@ -1012,6 +1012,18 @@ function delete_pm($user_id, $msg_ids, $folder_id)  		return false;  	} +	/** +	* Get all info for PM(s) before they are deleted +	* +	* @event core.delete_pm_before +	* @var	int	user_id	 ID of the user requested the message delete +	* @var	array	msg_ids	array of all messages to be deleted +	* @var	int	folder_id	ID of the user folder where the messages are stored +	* @since 3.1.0-b5 +	*/ +	$vars = array('user_id', 'msg_ids', 'folder_id'); +	extract($phpbb_dispatcher->trigger_event('core.delete_pm_before', compact($vars))); +  	// Get PM Information for later deleting  	$sql = 'SELECT msg_id, pm_unread, pm_new  		FROM ' . PRIVMSGS_TO_TABLE . ' diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index d728ed7d78..f22f84ee97 100644..100755 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -261,10 +261,13 @@ function user_add($user_row, $cp_data = false)  	* Use this event to modify the values to be inserted when a user is added  	*  	* @event core.user_add_modify_data +	* @var array	user_row		Array of user details submited to user_add +	* @var array	cp_data			Array of Custom profile fields submited to user_add  	* @var array	sql_ary		Array of data to be inserted when a user is added  	* @since 3.1.0-a1 +	* @change 3.1.0-b5  	*/ -	$vars = array('sql_ary'); +	$vars = array('user_row', 'cp_data', 'sql_ary');  	extract($phpbb_dispatcher->trigger_event('core.user_add_modify_data', compact($vars)));  	$sql = 'INSERT INTO ' . USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary); @@ -344,6 +347,18 @@ function user_add($user_row, $cp_data = false)  		set_config('newest_user_colour', $row['group_colour'], true);  	} +	/** +	* Event that returns user id, user detals and user CPF of newly registared user +	* +	* @event core.user_add_after +	* @var int		user_id			User id of newly registared user +	* @var array	user_row		Array of user details submited to user_add +	* @var array	cp_data			Array of Custom profile fields submited to user_add +	* @since 3.1.0-b5 +	*/ +	$vars = array('user_id', 'user_row', 'cp_data'); +	extract($phpbb_dispatcher->trigger_event('core.user_add_after', compact($vars))); +  	return $user_id;  } @@ -755,7 +770,7 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas  		else  		{  			$ban_other = explode('-', $ban_len_other); -			if (sizeof($ban_other) == 3 && ((int)$ban_other[0] < 9999) && +			if (sizeof($ban_other) == 3 && ((int) $ban_other[0] < 9999) &&  				(strlen($ban_other[0]) == 4) && (strlen($ban_other[1]) == 2) && (strlen($ban_other[2]) == 2))  			{  				$ban_end = max($current_time, $user->create_datetime() @@ -2086,7 +2101,7 @@ function avatar_delete($mode, $row, $clean_db = false)  	// Check if the users avatar is actually *not* a group avatar  	if ($mode == 'user')  	{ -		if (strpos($row['user_avatar'], 'g') === 0 || (((int)$row['user_avatar'] !== 0) && ((int)$row['user_avatar'] !== (int)$row['user_id']))) +		if (strpos($row['user_avatar'], 'g') === 0 || (((int) $row['user_avatar'] !== 0) && ((int) $row['user_avatar'] !== (int) $row['user_id'])))  		{  			return false;  		} @@ -2419,7 +2434,7 @@ function group_correct_avatar($group_id, $old_entry)  {  	global $config, $db, $phpbb_root_path; -	$group_id		= (int)$group_id; +	$group_id		= (int) $group_id;  	$ext 			= substr(strrchr($old_entry, '.'), 1);  	$old_filename 	= get_avatar_filename($old_entry);  	$new_filename 	= $config['avatar_salt'] . "_g$group_id.$ext"; @@ -2844,7 +2859,7 @@ function remove_default_avatar($group_id, $user_ids)  	$sql = 'SELECT *  		FROM ' . GROUPS_TABLE . ' -		WHERE group_id = ' . (int)$group_id; +		WHERE group_id = ' . (int) $group_id;  	$result = $db->sql_query($sql);  	if (!$row = $db->sql_fetchrow($result))  	{ @@ -2885,7 +2900,7 @@ function remove_default_rank($group_id, $user_ids)  	$sql = 'SELECT *  		FROM ' . GROUPS_TABLE . ' -		WHERE group_id = ' . (int)$group_id; +		WHERE group_id = ' . (int) $group_id;  	$result = $db->sql_query($sql);  	if (!$row = $db->sql_fetchrow($result))  	{ @@ -2896,9 +2911,9 @@ function remove_default_rank($group_id, $user_ids)  	$sql = 'UPDATE ' . USERS_TABLE . '  		SET user_rank = 0 -		WHERE group_id = ' . (int)$group_id . ' +		WHERE group_id = ' . (int) $group_id . '  			AND user_rank <> 0 -			AND user_rank = ' . (int)$row['group_rank'] . ' +			AND user_rank = ' . (int) $row['group_rank'] . '  			AND ' . $db->sql_in_set('user_id', $user_ids);  	$db->sql_query($sql);  } diff --git a/phpBB/includes/mcp/mcp_main.php b/phpBB/includes/mcp/mcp_main.php index 9d1afb7dc5..84097327bd 100644 --- a/phpBB/includes/mcp/mcp_main.php +++ b/phpBB/includes/mcp/mcp_main.php @@ -496,11 +496,11 @@ function mcp_move_topic($topic_ids)  			{  				$topics_moved++;  			} -			elseif ($topic_info['topic_visibility'] == ITEM_UNAPPROVED || $topic_info['topic_visibility'] == ITEM_REAPPROVE) +			else if ($topic_info['topic_visibility'] == ITEM_UNAPPROVED || $topic_info['topic_visibility'] == ITEM_REAPPROVE)  			{  				$topics_moved_unapproved++;  			} -			elseif ($topic_info['topic_visibility'] == ITEM_DELETED) +			else if ($topic_info['topic_visibility'] == ITEM_DELETED)  			{  				$topics_moved_softdeleted++;  			} @@ -567,7 +567,7 @@ function mcp_move_topic($topic_ids)  					'topic_last_poster_id'	=>	(int) $row['topic_last_poster_id'],  					'topic_last_poster_colour'=>(string) $row['topic_last_poster_colour'],  					'topic_last_poster_name'=>	(string) $row['topic_last_poster_name'], -					'topic_last_post_subject'=>	(string)  $row['topic_last_post_subject'], +					'topic_last_post_subject'=>	(string) $row['topic_last_post_subject'],  					'topic_last_post_time'	=>	(int) $row['topic_last_post_time'],  					'topic_last_view_time'	=>	(int) $row['topic_last_view_time'],  					'topic_moved_id'		=>	(int) $row['topic_id'], diff --git a/phpBB/includes/mcp/mcp_reports.php b/phpBB/includes/mcp/mcp_reports.php index f045fd018f..b0148356ce 100644 --- a/phpBB/includes/mcp/mcp_reports.php +++ b/phpBB/includes/mcp/mcp_reports.php @@ -489,7 +489,7 @@ function close_report($report_id_list, $mode, $action, $pm = false)  	{  		$redirect = request_var('redirect', build_url(array('mode', 'r', 'quickmod')) . '&mode=reports');  	} -	elseif ($action == 'delete' && strpos($user->data['session_page'], 'mode=pm_report_details') !== false) +	else if ($action == 'delete' && strpos($user->data['session_page'], 'mode=pm_report_details') !== false)  	{  		$redirect = request_var('redirect', build_url(array('mode', 'r', 'quickmod')) . '&mode=pm_reports');  	} diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index 6d3907880e..8d926ec70a 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -1194,6 +1194,15 @@ class parse_message extends bbcode_firstpass  			}  		} +		// Check for out-of-bounds characters that are currently +		// not supported by utf8_bin in MySQL +		if (preg_match_all('/[\x{10000}-\x{10FFFF}]/u', $this->message, $matches)) +		{ +			$character_list = implode('<br />', $matches[0]); +			$this->warn_msg[] = $user->lang('UNSUPPORTED_CHARACTERS_MESSAGE', $character_list); +			return $update_this_message ? $this->warn_msg : $return_message; +		} +  		// Check for "empty" message. We do not check here for maximum length, because bbcode, smilies, etc. can add to the length.  		// The maximum length check happened before any parsings.  		if ($mode === 'post' && utf8_clean_string($this->message) === '') @@ -1351,12 +1360,6 @@ class parse_message extends bbcode_firstpass  						ORDER BY LEN(code) DESC';  				break; -				case 'firebird': -					$sql = 'SELECT * -						FROM ' . SMILIES_TABLE . ' -						ORDER BY CHAR_LENGTH(code) DESC'; -				break; -  				// LENGTH supported by MySQL, IBM DB2, Oracle and Access for sure...  				default:  					$sql = 'SELECT * diff --git a/phpBB/includes/utf/utf_tools.php b/phpBB/includes/utf/utf_tools.php index 958291fa06..e60a40a195 100644 --- a/phpBB/includes/utf/utf_tools.php +++ b/phpBB/includes/utf/utf_tools.php @@ -534,7 +534,7 @@ else  					return '';  				} -				$lx = (int)((-$length) / 65535); +				$lx = (int) ((-$length) / 65535);  				$ly = (-$length) % 65535;  				// negative length requires ... capture everything diff --git a/phpBB/install/convertors/functions_phpbb20.php b/phpBB/install/convertors/functions_phpbb20.php index ff20154d03..84e9e8c462 100644 --- a/phpBB/install/convertors/functions_phpbb20.php +++ b/phpBB/install/convertors/functions_phpbb20.php @@ -223,7 +223,7 @@ function phpbb_insert_forums()  			'forum_desc'		=> htmlspecialchars(phpbb_set_default_encoding($row['forum_desc']), ENT_COMPAT, 'UTF-8'),  			'forum_type'		=> FORUM_POST,  			'forum_status'		=> is_item_locked($row['forum_status']), -			'enable_prune'		=> ($prune_enabled) ? (int)$row['prune_enable'] : 0, +			'enable_prune'		=> ($prune_enabled) ? (int) $row['prune_enable'] : 0,  			'prune_next'		=> (int) null_to_zero($row['prune_next']),  			'prune_days'		=> (int) null_to_zero($row['prune_days']),  			'prune_viewed'		=> 0, @@ -1804,13 +1804,6 @@ function phpbb_create_userconv_table()  	$drop_sql = 'DROP TABLE ' . USERCONV_TABLE;  	switch ($map_dbms)  	{ -		case 'firebird': -			$create_sql = 'CREATE TABLE ' . USERCONV_TABLE . ' ( -				user_id INTEGER NOT NULL, -				username_clean VARCHAR(255) CHARACTER SET UTF8 DEFAULT \'\' NOT NULL COLLATE UNICODE -			)'; -		break; -  		case 'mssql':  			$create_sql = 'CREATE TABLE [' . USERCONV_TABLE . '] (  				[user_id] [int] NOT NULL , diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 44dbe43cf8..72073be880 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -182,7 +182,7 @@ header('Content-type: text/html; charset=UTF-8');  define('IN_DB_UPDATE', true);  /** -* @todo firebird/mysql update? +* @todo mysql update?  */  // End startup code diff --git a/phpBB/install/index.php b/phpBB/install/index.php index 43970029cb..bff7b75b18 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -752,12 +752,16 @@ class module  			break;  			case 'select': +				// @codingStandardsIgnoreStart  				eval('$s_options = ' . str_replace('{VALUE}', $value, $options) . ';'); +				// @codingStandardsIgnoreEnd  				$tpl = '<select id="' . $name . '" name="' . $name . '">' . $s_options . '</select>';  			break;  			case 'custom': +				// @codingStandardsIgnoreStart  				eval('$tpl = ' . str_replace('{VALUE}', $value, $options) . ';'); +				// @codingStandardsIgnoreEnd  			break;  			default: diff --git a/phpBB/install/install_convert.php b/phpBB/install/install_convert.php index 674a1f7dd3..a0d5e802e6 100644 --- a/phpBB/install/install_convert.php +++ b/phpBB/install/install_convert.php @@ -252,7 +252,6 @@ class install_convert extends module  				{  					case 'sqlite':  					case 'sqlite3': -					case 'firebird':  						$db->sql_query('DELETE FROM ' . SESSIONS_KEYS_TABLE);  						$db->sql_query('DELETE FROM ' . SESSIONS_TABLE);  					break; @@ -700,7 +699,6 @@ class install_convert extends module  		{  			case 'sqlite':  			case 'sqlite3': -			case 'firebird':  				$convert->src_truncate_statement = 'DELETE FROM ';  			break; @@ -733,7 +731,6 @@ class install_convert extends module  		{  			case 'sqlite':  			case 'sqlite3': -			case 'firebird':  				$convert->truncate_statement = 'DELETE FROM ';  			break; @@ -1021,7 +1018,9 @@ class install_convert extends module  			// Now process queries and execute functions that have to be executed prior to the conversion  			if (!empty($convert->convertor['execute_first']))  			{ +				// @codingStandardsIgnoreStart  				eval($convert->convertor['execute_first']); +				// @codingStandardsIgnoreEnd  			}  			if (!empty($convert->convertor['query_first'])) @@ -1091,7 +1090,9 @@ class install_convert extends module  				// process execute_first and query_first for this table...  				if (!empty($schema['execute_first']))  				{ +					// @codingStandardsIgnoreStart  					eval($schema['execute_first']); +					// @codingStandardsIgnoreEnd  				}  				if (!empty($schema['query_first'])) @@ -1156,7 +1157,9 @@ class install_convert extends module  			// it gets split because of time restrictions  			if (!empty($schema['execute_always']))  			{ +				// @codingStandardsIgnoreStart  				eval($schema['execute_always']); +				// @codingStandardsIgnoreEnd  			}  			// @@ -1667,13 +1670,17 @@ class install_convert extends module  			{  				if (!is_array($convert->convertor['execute_last']))  				{ +					// @codingStandardsIgnoreStart  					eval($convert->convertor['execute_last']); +					// @codingStandardsIgnoreEnd  				}  				else  				{  					while ($last_statement < sizeof($convert->convertor['execute_last']))  					{ +						// @codingStandardsIgnoreStart  						eval($convert->convertor['execute_last'][$last_statement]); +						// @codingStandardsIgnoreEnd  						$template->assign_block_vars('checks', array(  							'TITLE'		=> $convert->convertor['execute_last'][$last_statement], @@ -2035,7 +2042,9 @@ class install_convert extends module  								$execution = str_replace('{RESULT}', '$value', $execution);  								$execution = str_replace('{VALUE}', '$value', $execution); +								// @codingStandardsIgnoreStart  								eval($execution); +								// @codingStandardsIgnoreEnd  							}  						}  					} @@ -2082,7 +2091,9 @@ class install_convert extends module  								$execution = str_replace('{RESULT}', '$value', $execution);  								$execution = str_replace('{VALUE}', '$value', $execution); +								// @codingStandardsIgnoreStart  								eval($execution); +								// @codingStandardsIgnoreEnd  							}  						}  					} diff --git a/phpBB/install/phpinfo.php b/phpBB/install/phpinfo.php index 83f154933a..1512b00563 100644 --- a/phpBB/install/phpinfo.php +++ b/phpBB/install/phpinfo.php @@ -1,3 +1,14 @@  <?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. +* +*/  phpinfo(); diff --git a/phpBB/install/schemas/schema.json b/phpBB/install/schemas/schema.json index 79f06693a6..a3ffd923a1 100644 --- a/phpBB/install/schemas/schema.json +++ b/phpBB/install/schemas/schema.json @@ -2088,6 +2088,26 @@                  "UINT",                  0              ], +            "pf_phpbb_skype": [ +                "VCHAR", +                "" +            ], +            "pf_phpbb_twitter": [ +                "VCHAR", +                "" +            ], +            "pf_phpbb_youtube": [ +                "VCHAR", +                "" +            ], +            "pf_phpbb_facebook": [ +                "VCHAR", +                "" +            ], +            "pf_phpbb_googleplus": [ +                "VCHAR", +                "" +            ],              "pf_phpbb_interests": [                  "MTEXT",                  "" diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 15cd9595c6..9b9b7f77f1 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -806,6 +806,11 @@ INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_len  INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_icq', 'profilefields.type.string', 'phpbb_icq', '20', '3', '15', '', '', '[0-9]+', 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 6, 1, 'SEND_ICQ_MESSAGE', 'https://www.icq.com/people/%s/');  INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_wlm', 'profilefields.type.string', 'phpbb_wlm', '40', '5', '255', '', '', '.*', 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 7, 1, '', '');  INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_yahoo', 'profilefields.type.string', 'phpbb_yahoo', '40', '5', '255', '', '', '.*', 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 8, 1, 'SEND_YIM_MESSAGE', 'http://edit.yahoo.com/config/send_webmesg?.target=%s&.src=pg'); +INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_facebook', 'profilefields.type.string', 'phpbb_facebook', '20', '5', '50', '', '', '[\w.]+', 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 9, 1, 'VIEW_FACEBOOK_PROFILE', 'http://facebook.com/%s/'); +INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_twitter', 'profilefields.type.string', 'phpbb_twitter', '20', '1', '15', '', '', '[\w_]+', 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 10, 1, 'VIEW_TWITTER_PROFILE', 'http://twitter.com/%s'); +INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_skype', 'profilefields.type.string', 'phpbb_skype', '20', '6', '32', '', '', '[a-zA-Z][\w\.,\-_]+', 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 11, 1, 'VIEW_SKYPE_PROFILE', 'skype:%s?userinfo'); +INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_youtube', 'profilefields.type.string', 'phpbb_youtube', '20', '3', '60', '', '', '[a-zA-Z][\w\.,\-_]+', 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 12, 1, 'VIEW_YOUTUBE_CHANNEL', 'http://youtube.com/user/%s'); +INSERT INTO phpbb_profile_fields (field_name, field_type, field_ident, field_length, field_minlen, field_maxlen, field_novalue, field_default_value, field_validation, field_required, field_show_novalue, field_show_on_reg, field_show_on_pm, field_show_on_vt, field_show_on_ml, field_show_profile, field_hide, field_no_view, field_active, field_order, field_is_contact, field_contact_desc, field_contact_url) VALUES ('phpbb_googleplus', 'profilefields.type.googleplus', 'phpbb_googleplus', '20', '3', '255', '', '', '[\w]+', 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 13, 1, 'VIEW_GOOGLEPLUS_PROFILE', 'http://plus.google.com/%s');  # User Notification Options (for first user)  INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('post', 0, 2, ''); diff --git a/phpBB/language/en/acp/profile.php b/phpBB/language/en/acp/profile.php index 7336031218..67813bcba4 100644 --- a/phpBB/language/en/acp/profile.php +++ b/phpBB/language/en/acp/profile.php @@ -39,9 +39,11 @@ if (empty($lang) || !is_array($lang))  // Custom profile fields  $lang = array_merge($lang, array(  	'ADDED_PROFILE_FIELD'	=> 'Successfully added custom profile field.', +	'ALPHA_DOTS'			=> 'Alphanumeric and dots (periods)',  	'ALPHA_ONLY'			=> 'Alphanumeric only',  	'ALPHA_SPACERS'			=> 'Alphanumeric and spacers',  	'ALPHA_UNDERSCORE'		=> 'Alphanumeric and underscores', +	'ALPHA_PUNCTUATION'		=> 'Alphanumeric with comma, dots, underscore and dashes beginning with a letter',  	'ALWAYS_TODAY'			=> 'Always the current date',  	'BOOL_ENTRIES_EXPLAIN'	=> 'Enter your options now', @@ -91,6 +93,7 @@ $lang = array_merge($lang, array(  	'FIELD_DESCRIPTION'			=> 'Field description',  	'FIELD_DESCRIPTION_EXPLAIN'	=> 'The explanation for this field presented to the user.',  	'FIELD_DROPDOWN'			=> 'Dropdown box', +	'FIELD_GOOGLEPLUS'			=> 'Google+',  	'FIELD_IDENT'				=> 'Field identification',  	'FIELD_IDENT_ALREADY_EXIST'	=> 'The chosen field identification already exist. Please choose another name.',  	'FIELD_IDENT_EXPLAIN'		=> 'The field identification is a name to identify the profile field within the database and the templates.', diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index e8169fc41a..68b8b594c4 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -226,6 +226,7 @@ $lang = array_merge($lang, array(  	'EXTENSION_DISABLED_AFTER_POSTING'	=> 'The extension <strong>%s</strong> has been deactivated and can no longer be displayed.',  	'EXTENSION_DOES_NOT_EXIST'			=> 'The extension <strong>%s</strong> does not exist.', +	'FACEBOOK'				=> 'Facebook',  	'FAQ'					=> 'FAQ',  	'FAQ_EXPLAIN'			=> 'Frequently Asked Questions',  	'FILENAME'				=> 'Filename', @@ -283,6 +284,7 @@ $lang = array_merge($lang, array(  	'GB'						=> 'GB',  	'GIB'						=> 'GiB',  	'GO'						=> 'Go', +	'GOOGLEPLUS'				=> 'Google+',  	'GOTO_FIRST_POST'			=> 'Go to first post',  	'GOTO_LAST_POST'			=> 'Go to last post',  	'GOTO_PAGE'					=> 'Go to page', @@ -679,6 +681,7 @@ $lang = array_merge($lang, array(  	'SETTINGS'					=> 'Settings',  	'SIGNATURE'					=> 'Signature',  	'SKIP'						=> 'Skip to content', +	'SKYPE'						=> 'Skype',  	'SMTP_NO_AUTH_SUPPORT'		=> 'SMTP server does not support authentication.',  	'SORRY_AUTH_READ'			=> 'You are not authorised to read this forum.',  	'SORRY_AUTH_VIEW_ATTACH'	=> 'You are not authorised to download this attachment.', @@ -774,6 +777,7 @@ $lang = array_merge($lang, array(  		2	=> 'Total members <strong>%d</strong>',  	),  	'TRACKED_PHP_ERROR'	=> 'Tracked PHP errors: %s', +	'TWITTER'			=> 'Twitter',  	'UNABLE_GET_IMAGE_SIZE'	=> 'It was not possible to determine the dimensions of the image. Please verify that the URL you entered is correct.',  	'UNABLE_TO_DELIVER_FILE'=> 'Unable to deliver file.', @@ -860,6 +864,7 @@ $lang = array_merge($lang, array(  	'WROTE'						=> 'wrote',  	'YAHOO'				=> 'Yahoo Messenger', +	'YOUTUBE'			=> 'YouTube',  	'YEAR'				=> 'Year',  	'YEAR_MONTH_DAY'	=> '(YYYY-MM-DD)',  	'YES'				=> 'Yes', diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index 7235e51a94..2b7f377f5b 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -142,7 +142,6 @@ $lang = array_merge($lang, array(  	'DEV_NO_TEST_FILE'			=> 'No value has been specified for the test_file variable in the convertor. If you are a user of this convertor, you should not be seeing this error, please report this message to the convertor author. If you are a convertor author, you must specify the name of a file which exists in the source board to allow the path to it to be verified.',  	'DIRECTORIES_AND_FILES'		=> 'Directory and file setup',  	'DISABLE_KEYS'				=> 'Disabling keys', -	'DLL_FIREBIRD'				=> 'Firebird',  	'DLL_FTP'					=> 'Remote FTP support [ Installation ]',  	'DLL_GD'					=> 'GD graphics support [ Visual Confirmation ]',  	'DLL_MBSTRING'				=> 'Multi-byte character support', @@ -171,8 +170,6 @@ $lang = array_merge($lang, array(  	'FILLING_TABLE'				=> 'Filling table <strong>%s</strong>',  	'FILLING_TABLES'			=> 'Filling tables', -	'FIREBIRD_DBMS_UPDATE_REQUIRED'		=> 'phpBB no longer supports Firebird/Interbase prior to Version 2.1. Please update your Firebird installation to at least 2.1.0 before proceeding with the update.', -  	'FINAL_STEP'				=> 'Process final step',  	'FORUM_ADDRESS'				=> 'Board address',  	'FORUM_ADDRESS_EXPLAIN'		=> 'This is the URL of your former board, for example <samp>http://www.example.com/phpBB2/</samp>. If an address is entered here and not left empty every instance of this address will be replaced by your new board address within messages, private messages and signatures.', @@ -216,7 +213,6 @@ $lang = array_merge($lang, array(  		<li>PostgreSQL 8.3+</li>  		<li>SQLite 2.8.2+</li>  		<li>SQLite 3.6.15+</li> -		<li>Firebird 2.1+</li>  		<li>MS SQL Server 2000 or above (directly or via ODBC)</li>  		<li>MS SQL Server 2005 or above (native)</li>  		<li>Oracle</li> @@ -241,8 +237,6 @@ $lang = array_merge($lang, array(  	'INST_ERR_DB_NO_SQLITE'		=> 'The version of the SQLite extension you have installed is too old, it must be upgraded to at least 2.8.2.',  	'INST_ERR_DB_NO_SQLITE3'	=> 'The version of the SQLite extension you have installed is too old, it must be upgraded to at least 3.6.15.',  	'INST_ERR_DB_NO_ORACLE'		=> 'The version of Oracle installed on this machine requires you to set the <var>NLS_CHARACTERSET</var> parameter to <var>UTF8</var>. Either upgrade your installation to 9.2+ or change the parameter.', -	'INST_ERR_DB_NO_FIREBIRD'	=> 'The version of Firebird installed on this machine is older than 2.1, please upgrade to a newer version.', -	'INST_ERR_DB_NO_FIREBIRD_PS'=> 'The database you selected for Firebird has a page size less than 8192, it must be at least 8192.',  	'INST_ERR_DB_NO_POSTGRES'	=> 'The database you have selected was not created in <var>UNICODE</var> or <var>UTF8</var> encoding. Try installing with a database in <var>UNICODE</var> or <var>UTF8</var> encoding.',  	'INST_ERR_DB_NO_NAME'		=> 'No database name specified.',  	'INST_ERR_EMAIL_INVALID'	=> 'The email address you entered is invalid.', diff --git a/phpBB/language/en/memberlist.php b/phpBB/language/en/memberlist.php index d900ababd1..e02f9ff525 100644 --- a/phpBB/language/en/memberlist.php +++ b/phpBB/language/en/memberlist.php @@ -144,4 +144,9 @@ $lang = array_merge($lang, array(  	'USERS_PER_PAGE'		=> 'Users per page',  	'VIEWING_PROFILE'		=> 'Viewing profile - %s', +	'VIEW_FACEBOOK_PROFILE'	=> 'View Facebook Profile', +	'VIEW_SKYPE_PROFILE'	=> 'View Skype Profile', +	'VIEW_TWITTER_PROFILE'	=> 'View Twitter Profile', +	'VIEW_YOUTUBE_CHANNEL'  => 'View YouTube Channel', +	'VIEW_GOOGLEPLUS_PROFILE' => 'View Google+ Profile',  )); diff --git a/phpBB/language/en/plupload.php b/phpBB/language/en/plupload.php index c4a8d770a0..15c3955a1a 100644 --- a/phpBB/language/en/plupload.php +++ b/phpBB/language/en/plupload.php @@ -3,8 +3,8 @@  *  * This file is part of the phpBB Forum Software package.  * -* @copyright (c) 2010-2013 Moxiecode Systems AB  * @copyright (c) phpBB Limited <https://www.phpbb.com> +* @copyright (c) 2010-2013 Moxiecode Systems AB  * @license GNU General Public License, version 2 (GPL-2.0)  *  * For full copyright and license information, please see diff --git a/phpBB/language/en/posting.php b/phpBB/language/en/posting.php index 20377287fd..e8a8643cfd 100644 --- a/phpBB/language/en/posting.php +++ b/phpBB/language/en/posting.php @@ -256,6 +256,8 @@ $lang = array_merge($lang, array(  	'UNAUTHORISED_BBCODE'		=> 'You cannot use certain BBCodes: %s.',  	'UNGLOBALISE_EXPLAIN'		=> 'To switch this topic back from being global to a normal topic, you need to select the forum you wish this topic to be displayed.', +	'UNSUPPORTED_CHARACTERS_MESSAGE'	=> 'Your message contains the following unsupported characters:<br />%s', +	'UNSUPPORTED_CHARACTERS_SUBJECT'	=> 'Your subject contains the following unsupported characters:<br />%s',  	'UPDATE_COMMENT'			=> 'Update comment',  	'URL_INVALID'				=> 'The URL you specified is invalid.',  	'URL_NOT_FOUND'				=> 'The file specified could not be found.', diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index c3ace160e9..d4e1915076 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -209,7 +209,9 @@ $lang = array_merge($lang, array(  	'FIELD_TOO_LARGE'					=> 'The value of “%2$s” is too large, a maximum value of %1$d is allowed.',  	'FIELD_INVALID_CHARS_INVALID'		=> 'The field “%s” has invalid characters.',  	'FIELD_INVALID_CHARS_NUMBERS_ONLY'	=> 'The field “%s” has invalid characters, only numbers are allowed.', +	'FIELD_INVALID_CHARS_ALPHA_DOTS'	=> 'The field “%s” has invalid characters, only alphanumeric or . characters are allowed.',  	'FIELD_INVALID_CHARS_ALPHA_ONLY'	=> 'The field “%s” has invalid characters, only alphanumeric characters are allowed.', +	'FIELD_INVALID_CHARS_ALPHA_PUNCTUATION'	=> 'The field “%s” has invalid characters, only alphanumeric or _,-. characters are allowed and the first character must be alphabetic.',  	'FIELD_INVALID_CHARS_ALPHA_SPACERS'	=> 'The field “%s” has invalid characters, only alphanumeric, space or -+_[] characters are allowed.',  	'FIELD_INVALID_CHARS_ALPHA_UNDERSCORE'	=> 'The field “%s” has invalid characters, only alphanumeric or _ characters are allowed.',  	'FIELD_INVALID_DATE'				=> 'The field “%s” has an invalid date.', diff --git a/phpBB/phpbb/auth/provider/oauth/oauth.php b/phpBB/phpbb/auth/provider/oauth/oauth.php index 07430bb42a..7b71e3c844 100644 --- a/phpBB/phpbb/auth/provider/oauth/oauth.php +++ b/phpBB/phpbb/auth/provider/oauth/oauth.php @@ -14,7 +14,6 @@  namespace phpbb\auth\provider\oauth;  use OAuth\Common\Consumer\Credentials; -use OAuth\Common\Http\Uri\Uri;  /**  * OAuth authentication provider for phpBB3 @@ -224,7 +223,7 @@ class oauth extends \phpbb\auth\provider\base  			if (!$row)  			{ -				throw new Exception('AUTH_PROVIDER_OAUTH_ERROR_INVALID_ENTRY'); +				throw new \Exception('AUTH_PROVIDER_OAUTH_ERROR_INVALID_ENTRY');  			}  			// Update token storage to store the user_id @@ -278,9 +277,10 @@ class oauth extends \phpbb\auth\provider\base  	* @param	array	$service_credentials	{@see \phpbb\auth\provider\oauth\oauth::get_service_credentials}  	* @param	string	$query					The query string of the  	*											current_uri used in redirection -	* @param	array	$scope					The scope of the request against +	* @param	array	$scopes					The scope of the request against  	*											the api.  	* @return	\OAuth\Common\Service\ServiceInterface +	* @throws	\Exception  	*/  	protected function get_service($service_name, \phpbb\auth\provider\oauth\token_storage $storage, array $service_credentials, $query, array $scopes = array())  	{ @@ -298,7 +298,7 @@ class oauth extends \phpbb\auth\provider\base  		if (!$service)  		{ -			throw new Exception('AUTH_PROVIDER_OAUTH_ERROR_SERVICE_NOT_CREATED'); +			throw new \Exception('AUTH_PROVIDER_OAUTH_ERROR_SERVICE_NOT_CREATED');  		}  		return $service; @@ -617,7 +617,5 @@ class oauth extends \phpbb\auth\provider\base  		$service_name = 'auth.provider.oauth.service.' . strtolower($link_data['oauth_service']);  		$storage = new \phpbb\auth\provider\oauth\token_storage($this->db, $this->user, $this->auth_provider_oauth_token_storage_table);  		$storage->clearToken($service_name); - -		return;  	}  } diff --git a/phpBB/phpbb/auth/provider/oauth/service/facebook.php b/phpBB/phpbb/auth/provider/oauth/service/facebook.php index 31060c4ac4..bb98835e07 100644 --- a/phpBB/phpbb/auth/provider/oauth/service/facebook.php +++ b/phpBB/phpbb/auth/provider/oauth/service/facebook.php @@ -21,22 +21,22 @@ class facebook extends base  	/**  	* phpBB config  	* -	* @var phpbb\config\config +	* @var \phpbb\config\config  	*/  	protected $config;  	/**  	* phpBB request  	* -	* @var phpbb\request\request_interface +	* @var \phpbb\request\request_interface  	*/  	protected $request;  	/**  	* Constructor  	* -	* @param	phpbb\config\config					$config -	* @param	phpbb\request\request_interface 	$request +	* @param	\phpbb\config\config				$config +	* @param	\phpbb\request\request_interface 	$request  	*/  	public function __construct(\phpbb\config\config $config, \phpbb\request\request_interface $request)  	{ diff --git a/phpBB/phpbb/auth/provider/oauth/service/google.php b/phpBB/phpbb/auth/provider/oauth/service/google.php index c2d9e1f798..cb9f83a94f 100644 --- a/phpBB/phpbb/auth/provider/oauth/service/google.php +++ b/phpBB/phpbb/auth/provider/oauth/service/google.php @@ -21,22 +21,22 @@ class google extends base  	/**  	* phpBB config  	* -	* @var phpbb\config\config +	* @var \phpbb\config\config  	*/  	protected $config;  	/**  	* phpBB request  	* -	* @var phpbb\request\request_interface +	* @var \phpbb\request\request_interface  	*/  	protected $request;  	/**  	* Constructor  	* -	* @param	phpbb\config\config					$config -	* @param	phpbb\request\request_interface 	$request +	* @param	\phpbb\config\config				$config +	* @param	\phpbb\request\request_interface 	$request  	*/  	public function __construct(\phpbb\config\config $config, \phpbb\request\request_interface $request)  	{ diff --git a/phpBB/phpbb/auth/provider/oauth/service/service_interface.php b/phpBB/phpbb/auth/provider/oauth/service/service_interface.php index 3744582b95..e84eb247b6 100644 --- a/phpBB/phpbb/auth/provider/oauth/service/service_interface.php +++ b/phpBB/phpbb/auth/provider/oauth/service/service_interface.php @@ -67,7 +67,7 @@ interface service_interface  	/**  	* Sets the external library service provider  	* -	* @param	\OAuth\Common\Service\ServiceInterface	$service +	* @param	\OAuth\Common\Service\ServiceInterface	$service_provider  	*/  	public function set_external_service_provider(\OAuth\Common\Service\ServiceInterface $service_provider);  } diff --git a/phpBB/phpbb/auth/provider/oauth/token_storage.php b/phpBB/phpbb/auth/provider/oauth/token_storage.php index b7d32bf246..fe1a376cfe 100644 --- a/phpBB/phpbb/auth/provider/oauth/token_storage.php +++ b/phpBB/phpbb/auth/provider/oauth/token_storage.php @@ -17,7 +17,6 @@ namespace phpbb\auth\provider\oauth;  use OAuth\OAuth1\Token\StdOAuth1Token;  use OAuth\Common\Token\TokenInterface;  use OAuth\Common\Storage\TokenStorageInterface; -use OAuth\Common\Storage\Exception\StorageException;  use OAuth\Common\Storage\Exception\TokenNotFoundException;  /** @@ -198,6 +197,7 @@ class token_storage implements TokenStorageInterface  	/**  	* Checks to see if an access token exists solely by the session_id of the user  	* +	* @param	string	$service	The name of the OAuth service  	* @return	bool	true if they have token, false if they don't  	*/  	public function has_access_token_by_session($service) @@ -250,6 +250,7 @@ class token_storage implements TokenStorageInterface  	*  	* @param	array	$data  	* @return	mixed +	* @throws \OAuth\Common\Storage\Exception\TokenNotFoundException  	*/  	protected function _retrieve_access_token($data)  	{ diff --git a/phpBB/phpbb/auth/provider/provider_interface.php b/phpBB/phpbb/auth/provider/provider_interface.php index 140353c88b..613297cefc 100644 --- a/phpBB/phpbb/auth/provider/provider_interface.php +++ b/phpBB/phpbb/auth/provider/provider_interface.php @@ -148,7 +148,7 @@ interface provider_interface  	* user_id of an account needed to successfully link an external account to  	* a forum account.  	* -	* @param	array	$link_data	Any data needed to link a phpBB account to +	* @param	array	$login_link_data	Any data needed to link a phpBB account to  	*								an external account.  	* @return	string|null	Returns a string with a language constant if there  	*						is data missing or null if there is no error. diff --git a/phpBB/phpbb/auth/provider_collection.php b/phpBB/phpbb/auth/provider_collection.php index 27a3f24564..fe32a34e12 100644 --- a/phpBB/phpbb/auth/provider_collection.php +++ b/phpBB/phpbb/auth/provider_collection.php @@ -53,7 +53,7 @@ class provider_collection extends \phpbb\di\service_collection  			return $this->offsetGet('auth.provider.' . basename(trim($this->config['auth_method'])));  		}  		// Revert to db auth provider if selected method does not exist -		elseif ($this->offsetExists('auth.provider.db')) +		else if ($this->offsetExists('auth.provider.db'))  		{  			return $this->offsetGet('auth.provider.db');  		} diff --git a/phpBB/phpbb/avatar/driver/driver.php b/phpBB/phpbb/avatar/driver/driver.php index 9c769071d4..b3ced7edf7 100644 --- a/phpBB/phpbb/avatar/driver/driver.php +++ b/phpBB/phpbb/avatar/driver/driver.php @@ -73,10 +73,9 @@ abstract class driver implements \phpbb\avatar\driver\driver_interface  	* Construct a driver object  	*  	* @param \phpbb\config\config $config phpBB configuration -	* @param \phpbb\request\request $request Request object  	* @param string $phpbb_root_path Path to the phpBB root  	* @param string $php_ext PHP file extension -	* @param \phpbb_path_helper $path_helper phpBB path helper +	* @param \phpbb\path_helper $path_helper phpBB path helper  	* @param \phpbb\cache\driver\driver_interface $cache Cache driver  	*/  	public function __construct(\phpbb\config\config $config, $phpbb_root_path, $php_ext, \phpbb\path_helper $path_helper, \phpbb\cache\driver\driver_interface $cache = null) @@ -89,7 +88,7 @@ abstract class driver implements \phpbb\avatar\driver\driver_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_custom_html($user, $row, $alt = '')  	{ @@ -97,7 +96,7 @@ abstract class driver implements \phpbb\avatar\driver\driver_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function prepare_form_acp($user)  	{ @@ -105,7 +104,7 @@ abstract class driver implements \phpbb\avatar\driver\driver_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function delete($row)  	{ @@ -113,7 +112,7 @@ abstract class driver implements \phpbb\avatar\driver\driver_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_name()  	{ diff --git a/phpBB/phpbb/avatar/driver/gravatar.php b/phpBB/phpbb/avatar/driver/gravatar.php index c4344ee6e8..4aa7445d20 100644 --- a/phpBB/phpbb/avatar/driver/gravatar.php +++ b/phpBB/phpbb/avatar/driver/gravatar.php @@ -24,7 +24,7 @@ class gravatar extends \phpbb\avatar\driver\driver  	const GRAVATAR_URL = '//secure.gravatar.com/avatar/';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_data($row)  	{ @@ -36,7 +36,7 @@ class gravatar extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_custom_html($user, $row, $alt = '')  	{ @@ -47,7 +47,7 @@ class gravatar extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function prepare_form($request, $template, $user, $row, &$error)  	{ @@ -61,7 +61,7 @@ class gravatar extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function process_form($request, $template, $user, $row, &$error)  	{ @@ -151,7 +151,7 @@ class gravatar extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_template_name()  	{ @@ -161,6 +161,8 @@ class gravatar extends \phpbb\avatar\driver\driver  	/**  	* Build gravatar URL for output on page  	* +	* @param array $row User data or group data that has been cleaned with +	*        \phpbb\avatar\manager::clean_row  	* @return string Gravatar URL  	*/  	protected function get_gravatar_url($row) diff --git a/phpBB/phpbb/avatar/driver/local.php b/phpBB/phpbb/avatar/driver/local.php index f3acf7cb2c..ff1996854b 100644 --- a/phpBB/phpbb/avatar/driver/local.php +++ b/phpBB/phpbb/avatar/driver/local.php @@ -19,7 +19,7 @@ namespace phpbb\avatar\driver;  class local extends \phpbb\avatar\driver\driver  {  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_data($row)  	{ @@ -31,7 +31,7 @@ class local extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function prepare_form($request, $template, $user, $row, &$error)  	{ @@ -99,7 +99,7 @@ class local extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function prepare_form_acp($user)  	{ @@ -109,7 +109,7 @@ class local extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function process_form($request, $template, $user, $row, &$error)  	{ @@ -138,7 +138,7 @@ class local extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_template_name()  	{ diff --git a/phpBB/phpbb/avatar/driver/remote.php b/phpBB/phpbb/avatar/driver/remote.php index d97093ae24..455ddebf62 100644 --- a/phpBB/phpbb/avatar/driver/remote.php +++ b/phpBB/phpbb/avatar/driver/remote.php @@ -19,7 +19,7 @@ namespace phpbb\avatar\driver;  class remote extends \phpbb\avatar\driver\driver  {  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_data($row)  	{ @@ -31,7 +31,7 @@ class remote extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function prepare_form($request, $template, $user, $row, &$error)  	{ @@ -45,7 +45,7 @@ class remote extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function process_form($request, $template, $user, $row, &$error)  	{ @@ -191,7 +191,7 @@ class remote extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_template_name()  	{ diff --git a/phpBB/phpbb/avatar/driver/upload.php b/phpBB/phpbb/avatar/driver/upload.php index bef75d61c1..c43004f340 100644 --- a/phpBB/phpbb/avatar/driver/upload.php +++ b/phpBB/phpbb/avatar/driver/upload.php @@ -19,7 +19,7 @@ namespace phpbb\avatar\driver;  class upload extends \phpbb\avatar\driver\driver  {  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_data($row, $ignore_config = false)  	{ @@ -31,7 +31,7 @@ class upload extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function prepare_form($request, $template, $user, $row, &$error)  	{ @@ -49,7 +49,7 @@ class upload extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function process_form($request, $template, $user, $row, &$error)  	{ @@ -72,7 +72,7 @@ class upload extends \phpbb\avatar\driver\driver  		{  			$file = $upload->form_upload('avatar_upload_file');  		} -		elseif (!empty($this->config['allow_avatar_remote_upload']) && !empty($url)) +		else if (!empty($this->config['allow_avatar_remote_upload']) && !empty($url))  		{  			if (!preg_match('#^(http|https|ftp)://#i', $url))  			{ @@ -143,7 +143,7 @@ class upload extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function prepare_form_acp($user)  	{ @@ -155,7 +155,7 @@ class upload extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function delete($row)  	{ @@ -171,7 +171,7 @@ class upload extends \phpbb\avatar\driver\driver  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_template_name()  	{ diff --git a/phpBB/phpbb/cache/driver/driver_interface.php b/phpBB/phpbb/cache/driver/driver_interface.php index 7d08362ed8..9ac9ca0c59 100644 --- a/phpBB/phpbb/cache/driver/driver_interface.php +++ b/phpBB/phpbb/cache/driver/driver_interface.php @@ -142,7 +142,7 @@ interface driver_interface  	* Fetch a field from the current row of a cached database result (database)  	*  	* @param int $query_id -	* @param $field 				The name of the column. +	* @param string $field 			The name of the column.  	* @return string|bool 			The field of the query result if found in the cache,  	* 								otherwise false.  	*/ diff --git a/phpBB/phpbb/cache/driver/file.php b/phpBB/phpbb/cache/driver/file.php index 57890cc3a2..b32af32d25 100644 --- a/phpBB/phpbb/cache/driver/file.php +++ b/phpBB/phpbb/cache/driver/file.php @@ -28,6 +28,8 @@ class file extends \phpbb\cache\driver\base  	/**  	* Set cache path +	* +	* @param string $cache_dir Define the path to the cache directory (default: $phpbb_root_path . 'cache/')  	*/  	function __construct($cache_dir = null)  	{ @@ -222,7 +224,7 @@ class file extends \phpbb\cache\driver\base  			{  				$this->remove_dir($fileInfo->getPathname());  			} -			elseif (strpos($filename, 'container_') === 0 || +			else if (strpos($filename, 'container_') === 0 ||  				strpos($filename, 'url_matcher') === 0 ||  				strpos($filename, 'sql_') === 0 ||  				strpos($filename, 'data_') === 0) diff --git a/phpBB/phpbb/cache/service.php b/phpBB/phpbb/cache/service.php index c9aa6525c0..e47177758a 100644 --- a/phpBB/phpbb/cache/service.php +++ b/phpBB/phpbb/cache/service.php @@ -316,13 +316,6 @@ class service  					ORDER BY LEN(bot_agent) DESC';  				break; -				case 'firebird': -					$sql = 'SELECT user_id, bot_agent, bot_ip -						FROM ' . BOTS_TABLE . ' -						WHERE bot_active = 1 -					ORDER BY CHAR_LENGTH(bot_agent) DESC'; -				break; -  				// LENGTH supported by MySQL, IBM DB2 and Oracle for sure...  				default:  					$sql = 'SELECT user_id, bot_agent, bot_ip diff --git a/phpBB/phpbb/console/command/cache/purge.php b/phpBB/phpbb/console/command/cache/purge.php index 50953185a4..379d2aa1ca 100644 --- a/phpBB/phpbb/console/command/cache/purge.php +++ b/phpBB/phpbb/console/command/cache/purge.php @@ -35,6 +35,16 @@ class purge extends \phpbb\console\command\command  	/** @var \phpbb\config\config */  	protected $config; +	/** +	* Constructor +	* +	* @param \phpbb\cache\driver\driver_interface	$cache	Cache instance +	* @param \phpbb\db\driver\driver_interface		$db		Database connection +	* @param \phpbb\auth\auth						$auth	Auth instance +	* @param \phpbb\log\log							$log	Logger instance +	* @param \phpbb\user							$user	User instance +	* @param \phpbb\config\config					$config	Config instance +	*/  	public function __construct(\phpbb\cache\driver\driver_interface $cache, \phpbb\db\driver\driver_interface $db, \phpbb\auth\auth $auth, \phpbb\log\log $log, \phpbb\user $user, \phpbb\config\config $config)  	{  		$this->cache = $cache; @@ -46,6 +56,9 @@ class purge extends \phpbb\console\command\command  		parent::__construct();  	} +	/** +	* {@inheritdoc} +	*/  	protected function configure()  	{  		$this @@ -54,6 +67,16 @@ class purge extends \phpbb\console\command\command  		;  	} +	/** +	* Executes the command cache:purge. +	* +	* Purge the cache (including permissions) and increment the asset_version number +	* +	* @param InputInterface  $input  An InputInterface instance +	* @param OutputInterface $output An OutputInterface instance +	* +	* @return null +	*/  	protected function execute(InputInterface $input, OutputInterface $output)  	{  		$this->config->increment('assets_version', 1); diff --git a/phpBB/phpbb/console/command/config/delete.php b/phpBB/phpbb/console/command/config/delete.php index e29afdbf82..1310bb18b4 100644 --- a/phpBB/phpbb/console/command/config/delete.php +++ b/phpBB/phpbb/console/command/config/delete.php @@ -14,11 +14,13 @@ namespace phpbb\console\command\config;  use Symfony\Component\Console\Input\InputArgument;  use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption;  use Symfony\Component\Console\Output\OutputInterface;  class delete extends command  { +	/** +	* {@inheritdoc} +	*/  	protected function configure()  	{  		$this @@ -32,6 +34,17 @@ class delete extends command  		;  	} +	/** +	* Executes the command config:delete. +	* +	* Removes a configuration option +	* +	* @param InputInterface  $input  An InputInterface instance +	* @param OutputInterface $output An OutputInterface instance +	* +	* @return null +	* @see \phpbb\config\config::delete() +	*/  	protected function execute(InputInterface $input, OutputInterface $output)  	{  		$key = $input->getArgument('key'); diff --git a/phpBB/phpbb/console/command/config/get.php b/phpBB/phpbb/console/command/config/get.php index 0ed2a12608..ee8c65110e 100644 --- a/phpBB/phpbb/console/command/config/get.php +++ b/phpBB/phpbb/console/command/config/get.php @@ -19,6 +19,9 @@ use Symfony\Component\Console\Output\OutputInterface;  class get extends command  { +	/** +	* {@inheritdoc} +	*/  	protected function configure()  	{  		$this @@ -38,6 +41,17 @@ class get extends command  		;  	} +	/** +	* Executes the command config:get. +	* +	* Retrieves a configuration value. +	* +	* @param InputInterface  $input  An InputInterface instance +	* @param OutputInterface $output An OutputInterface instance +	* +	* @return null +	* @see \phpbb\config\config::offsetGet() +	*/  	protected function execute(InputInterface $input, OutputInterface $output)  	{  		$key = $input->getArgument('key'); @@ -46,7 +60,7 @@ class get extends command  		{  			$output->write($this->config[$key]);  		} -		elseif (isset($this->config[$key])) +		else if (isset($this->config[$key]))  		{  			$output->writeln($this->config[$key]);  		} diff --git a/phpBB/phpbb/console/command/config/increment.php b/phpBB/phpbb/console/command/config/increment.php index 64b5d42b9d..21f0660e61 100644 --- a/phpBB/phpbb/console/command/config/increment.php +++ b/phpBB/phpbb/console/command/config/increment.php @@ -19,6 +19,9 @@ use Symfony\Component\Console\Output\OutputInterface;  class increment extends command  { +	/** +	* {@inheritdoc} +	*/  	protected function configure()  	{  		$this @@ -43,6 +46,17 @@ class increment extends command  		;  	} +	/** +	* Executes the command config:increment. +	* +	* Increments an integer configuration value. +	* +	* @param InputInterface  $input  An InputInterface instance +	* @param OutputInterface $output An OutputInterface instance +	* +	* @return null +	* @see \phpbb\config\config::increment() +	*/  	protected function execute(InputInterface $input, OutputInterface $output)  	{  		$key = $input->getArgument('key'); diff --git a/phpBB/phpbb/console/command/config/set.php b/phpBB/phpbb/console/command/config/set.php index fce1edb93e..587b7fb0de 100644 --- a/phpBB/phpbb/console/command/config/set.php +++ b/phpBB/phpbb/console/command/config/set.php @@ -19,6 +19,9 @@ use Symfony\Component\Console\Output\OutputInterface;  class set extends command  { +	/** +	* {@inheritdoc} +	*/  	protected function configure()  	{  		$this @@ -43,6 +46,17 @@ class set extends command  		;  	} +	/** +	* Executes the command config:set. +	* +	* Sets a configuration option's value. +	* +	* @param InputInterface  $input  An InputInterface instance +	* @param OutputInterface $output An OutputInterface instance +	* +	* @return null +	* @see \phpbb\config\config::set() +	*/  	protected function execute(InputInterface $input, OutputInterface $output)  	{  		$key = $input->getArgument('key'); diff --git a/phpBB/phpbb/console/command/config/set_atomic.php b/phpBB/phpbb/console/command/config/set_atomic.php index 4df2d90722..a7a52155f9 100644 --- a/phpBB/phpbb/console/command/config/set_atomic.php +++ b/phpBB/phpbb/console/command/config/set_atomic.php @@ -19,6 +19,9 @@ use Symfony\Component\Console\Output\OutputInterface;  class set_atomic extends command  { +	/** +	* {@inheritdoc} +	*/  	protected function configure()  	{  		$this @@ -48,6 +51,18 @@ class set_atomic extends command  		;  	} +	/** +	* Executes the command config:set-atomic. +	* +	* Sets a configuration option's value only if the old_value matches the +	* current configuration value or the configuration value does not exist yet. +	* +	* @param InputInterface  $input  An InputInterface instance +	* @param OutputInterface $output An OutputInterface instance +	* +	* @return bool True if the value was changed, false otherwise. +	* @see \phpbb\config\config::set_atomic() +	*/  	protected function execute(InputInterface $input, OutputInterface $output)  	{  		$key = $input->getArgument('key'); diff --git a/phpBB/phpbb/console/command/cron/cron_list.php b/phpBB/phpbb/console/command/cron/cron_list.php index 9db6a23947..4f4228d9b3 100644 --- a/phpBB/phpbb/console/command/cron/cron_list.php +++ b/phpBB/phpbb/console/command/cron/cron_list.php @@ -23,6 +23,12 @@ class cron_list extends \phpbb\console\command\command  	/** @var \phpbb\user */  	protected $user; +	/** +	* Constructor +	* +	* @param \phpbb\cron\manager	$cron_manager	Cron manager +	* @param \phpbb\user			$user			User instance +	*/  	public function __construct(\phpbb\cron\manager $cron_manager, \phpbb\user $user)  	{  		$this->cron_manager = $cron_manager; @@ -30,6 +36,9 @@ class cron_list extends \phpbb\console\command\command  		parent::__construct();  	} +	/** +	* {@inheritdoc} +	*/  	protected function configure()  	{  		$this @@ -38,6 +47,16 @@ class cron_list extends \phpbb\console\command\command  		;  	} +	/** +	* Executes the command cron:list. +	* +	* Prints a list of ready and unready cron jobs. +	* +	* @param InputInterface  $input  An InputInterface instance +	* @param OutputInterface $output An OutputInterface instance +	* +	* @return null +	*/  	protected function execute(InputInterface $input, OutputInterface $output)  	{  		$tasks = $this->cron_manager->get_tasks(); @@ -80,6 +99,12 @@ class cron_list extends \phpbb\console\command\command  		}  	} +	/** +	* Print a list of cron jobs +	* +	* @param array				$tasks A list of task to display +	* @param OutputInterface	$output An OutputInterface instance +	*/  	protected function print_tasks_names(array $tasks, OutputInterface $output)  	{  		foreach ($tasks as $task) diff --git a/phpBB/phpbb/console/command/cron/run.php b/phpBB/phpbb/console/command/cron/run.php index 1029a2e085..0b365ece67 100644 --- a/phpBB/phpbb/console/command/cron/run.php +++ b/phpBB/phpbb/console/command/cron/run.php @@ -3,7 +3,7 @@  *  * This file is part of the phpBB Forum Software package.  * -* @copyright (c) phpBB Limited +* @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 @@ -15,7 +15,6 @@ namespace phpbb\console\command\cron;  use Symfony\Component\Console\Input\InputInterface;  use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputOption;  use Symfony\Component\Console\Output\OutputInterface;  class run extends \phpbb\console\command\command @@ -35,7 +34,7 @@ class run extends \phpbb\console\command\command  	* @param \phpbb\cron\manager $cron_manager The cron manager containing  	*		the cron tasks to be executed.  	* @param \phpbb\lock\db $lock_db The lock for accessing database. -	* @param \phobb\user $user The user object (used to get language information) +	* @param \phpbb\user $user The user object (used to get language information)  	*/  	public function __construct(\phpbb\cron\manager $cron_manager, \phpbb\lock\db $lock_db, \phpbb\user $user)  	{ @@ -102,7 +101,7 @@ class run extends \phpbb\console\command\command  		}  	} -	/* +	/**  	* Executes all ready cron tasks.  	*  	* If verbose mode is set, an info message will be printed if there is no task to @@ -140,7 +139,7 @@ class run extends \phpbb\console\command\command  		return 0;  	} -	/* +	/**  	* Executes a given cron task, if it is ready.  	*  	* If there is a task whose name matches $task_name, it is run and 0 is returned. diff --git a/phpBB/phpbb/content_visibility.php b/phpBB/phpbb/content_visibility.php index 380a479e4a..1f50032f26 100644 --- a/phpBB/phpbb/content_visibility.php +++ b/phpBB/phpbb/content_visibility.php @@ -54,10 +54,13 @@ class content_visibility  	*  	* @param	\phpbb\auth\auth		$auth	Auth object  	* @param	\phpbb\db\driver\driver_interface	$db		Database object -	* @param	\phpbb\user		$user	User object +	* @param	\phpbb\user		$user			User object  	* @param	string		$phpbb_root_path	Root path  	* @param	string		$php_ext			PHP Extension -	* @return	null +	* @param	string		$forums_table		Forums table name +	* @param	string		$posts_table		Posts table name +	* @param	string		$topics_table		Topics table name +	* @param	string		$users_table		Users table name  	*/  	public function __construct(\phpbb\auth\auth $auth, \phpbb\db\driver\driver_interface $db, \phpbb\user $user, $phpbb_root_path, $php_ext, $forums_table, $posts_table, $topics_table, $users_table)  	{ diff --git a/phpBB/phpbb/controller/helper.php b/phpBB/phpbb/controller/helper.php index 7b232294f0..930bc42a98 100644 --- a/phpBB/phpbb/controller/helper.php +++ b/phpBB/phpbb/controller/helper.php @@ -101,7 +101,7 @@ class helper  	* @param string	$route		Name of the route to travel  	* @param array	$params		String or array of additional url parameters  	* @param bool	$is_amp		Is url using & (true) or & (false) -	* @param string	$session_id	Possibility to use a custom session id instead of the global one +	* @param string|bool	$session_id	Possibility to use a custom session id instead of the global one  	* @return string The URL already passed through append_sid()  	*/  	public function route($route, array $params = array(), $is_amp = true, $session_id = false) @@ -139,8 +139,8 @@ class helper  	* Output an error, effectively the same thing as trigger_error  	*  	* @param string $message The error message -	* @param string $code The error code (e.g. 404, 500, 503, etc.) -	* @return Response A Reponse instance +	* @param int $code The error code (e.g. 404, 500, 503, etc.) +	* @return Response A Response instance  	*/  	public function error($message, $code = 500)  	{ diff --git a/phpBB/phpbb/controller/provider.php b/phpBB/phpbb/controller/provider.php index bd85385a41..fffd4f0428 100644 --- a/phpBB/phpbb/controller/provider.php +++ b/phpBB/phpbb/controller/provider.php @@ -37,7 +37,7 @@ class provider  	/**  	* Construct method  	* -	* @param array() $routing_files Array of strings containing paths +	* @param array $routing_files Array of strings containing paths  	*							to YAML files holding route information  	*/  	public function __construct($routing_files = array()) @@ -46,6 +46,8 @@ class provider  	}  	/** +	* Find the list of routing files +	*  	* @param \phpbb\finder $finder  	* @return null  	*/ @@ -61,10 +63,10 @@ class provider  	}  	/** -	* Find a list of controllers and return it +	* Find a list of controllers  	*  	* @param string $base_path Base path to prepend to file paths -	* @return null +	* @return provider  	*/  	public function find($base_path = '')  	{ diff --git a/phpBB/phpbb/controller/resolver.php b/phpBB/phpbb/controller/resolver.php index 77532767fc..efab34b701 100644 --- a/phpBB/phpbb/controller/resolver.php +++ b/phpBB/phpbb/controller/resolver.php @@ -122,7 +122,7 @@ class resolver implements ControllerResolverInterface  	*  	* @param \Symfony\Component\HttpFoundation\Request $request Symfony Request object  	* @param mixed $controller A callable (controller class, method) -	* @return bool False +	* @return array An array of arguments to pass to the controller  	* @throws \phpbb\controller\exception  	*/  	public function getArguments(Request $request, $controller) diff --git a/phpBB/phpbb/cron/manager.php b/phpBB/phpbb/cron/manager.php index f04f063228..b0601e641a 100644 --- a/phpBB/phpbb/cron/manager.php +++ b/phpBB/phpbb/cron/manager.php @@ -34,7 +34,7 @@ class manager  	/**  	* Constructor. Loads all available tasks.  	* -	* @param array|Traversable $tasks Provides an iterable set of task names +	* @param array|\Traversable $tasks Provides an iterable set of task names  	*/  	public function __construct($tasks, $phpbb_root_path, $php_ext)  	{ @@ -48,7 +48,7 @@ class manager  	* Loads tasks given by name, wraps them  	* and puts them into $this->tasks.  	* -	* @param array|Traversable $tasks		Array of instances of \phpbb\cron\task\task +	* @param array|\Traversable $tasks		Array of instances of \phpbb\cron\task\task  	*  	* @return null  	*/ diff --git a/phpBB/phpbb/cron/task/core/prune_shadow_topics.php b/phpBB/phpbb/cron/task/core/prune_shadow_topics.php index ca5044343f..381483c798 100644 --- a/phpBB/phpbb/cron/task/core/prune_shadow_topics.php +++ b/phpBB/phpbb/cron/task/core/prune_shadow_topics.php @@ -164,6 +164,7 @@ class prune_shadow_topics extends \phpbb\cron\task\base implements \phpbb\cron\t  	* @param int $forum_id Forum ID of forum that should be pruned  	* @param string $prune_mode Prune mode  	* @param int $prune_flags Prune flags +	* @param int $prune_days Prune date in days  	* @param int $prune_freq Prune frequency  	* @return null  	*/ diff --git a/phpBB/phpbb/datetime.php b/phpBB/phpbb/datetime.php index 47f742f802..9c9292a8e4 100644 --- a/phpBB/phpbb/datetime.php +++ b/phpBB/phpbb/datetime.php @@ -39,8 +39,8 @@ class datetime extends \DateTime  	* the user context and modify the timezone to the users selected timezone if one is not set.  	*  	* @param string $time String in a format accepted by strtotime(). -	* @param DateTimeZone $timezone Time zone of the time. -	* @param user User object for context. +	* @param \DateTimeZone $timezone Time zone of the time. +	* @param user $user object for context.  	*/  	public function __construct($user, $time = 'now', \DateTimeZone $timezone = null)  	{ @@ -120,7 +120,7 @@ class datetime extends \DateTime  	/**  	* Magic method to convert DateTime object to string  	* -	* @return Formatted date time, according to the users default settings. +	* @return string Formatted date time, according to the users default settings.  	*/  	public function __toString()  	{ diff --git a/phpBB/phpbb/db/driver/firebird.php b/phpBB/phpbb/db/driver/firebird.php deleted file mode 100644 index c7b185a577..0000000000 --- a/phpBB/phpbb/db/driver/firebird.php +++ /dev/null @@ -1,526 +0,0 @@ -<?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. -* -*/ - -namespace phpbb\db\driver; - -/** -* Firebird/Interbase Database Abstraction Layer -* Minimum Requirement is Firebird 2.1 -*/ -class firebird extends \phpbb\db\driver\driver -{ -	var $last_query_text = ''; -	var $service_handle = false; -	var $affected_rows = 0; -	var $connect_error = ''; - -	/** -	* {@inheritDoc} -	*/ -	function sql_connect($sqlserver, $sqluser, $sqlpassword, $database, $port = false, $persistency = false, $new_link = false) -	{ -		$this->persistency = $persistency; -		$this->user = $sqluser; -		$this->server = $sqlserver . (($port) ? ':' . $port : ''); -		$this->dbname = str_replace('\\', '/', $database); - -		// There are three possibilities to connect to an interbase db -		if (!$this->server) -		{ -			$use_database = $this->dbname; -		} -		else if (strpos($this->server, '//') === 0) -		{ -			$use_database = $this->server . $this->dbname; -		} -		else -		{ -			$use_database = $this->server . ':' . $this->dbname; -		} - -		if ($this->persistency) -		{ -			if (!function_exists('ibase_pconnect')) -			{ -				$this->connect_error = 'ibase_pconnect function does not exist, is interbase extension installed?'; -				return $this->sql_error(''); -			} -			$this->db_connect_id = @ibase_pconnect($use_database, $this->user, $sqlpassword, false, false, 3); -		} -		else -		{ -			if (!function_exists('ibase_connect')) -			{ -				$this->connect_error = 'ibase_connect function does not exist, is interbase extension installed?'; -				return $this->sql_error(''); -			} -			$this->db_connect_id = @ibase_connect($use_database, $this->user, $sqlpassword, false, false, 3); -		} - -		// Do not call ibase_service_attach if connection failed, -		// otherwise error message from ibase_(p)connect call will be clobbered. -		if ($this->db_connect_id && function_exists('ibase_service_attach') && $this->server) -		{ -			$this->service_handle = @ibase_service_attach($this->server, $this->user, $sqlpassword); -		} -		else -		{ -			$this->service_handle = false; -		} - -		return ($this->db_connect_id) ? $this->db_connect_id : $this->sql_error(''); -	} - -	/** -	* {@inheritDoc} -	*/ -	function sql_server_info($raw = false, $use_cache = true) -	{ -		/** -		* force $use_cache false.  I didn't research why the caching code there is no caching code -		* but I assume its because the IB extension provides a direct method to access it -		* without a query. -		*/ - -		$use_cache = false; - -		if ($this->service_handle !== false && function_exists('ibase_server_info')) -		{ -			return @ibase_server_info($this->service_handle, IBASE_SVC_SERVER_VERSION); -		} - -		return ($raw) ? '2.1' : 'Firebird/Interbase'; -	} - -	/** -	* SQL Transaction -	* @access private -	*/ -	function _sql_transaction($status = 'begin') -	{ -		switch ($status) -		{ -			case 'begin': -				return true; -			break; - -			case 'commit': -				return @ibase_commit(); -			break; - -			case 'rollback': -				return @ibase_rollback(); -			break; -		} - -		return true; -	} - -	/** -	* {@inheritDoc} -	*/ -	function sql_query($query = '', $cache_ttl = 0) -	{ -		if ($query != '') -		{ -			global $cache; - -			// EXPLAIN only in extra debug mode -			if (defined('DEBUG')) -			{ -				$this->sql_report('start', $query); -			} - -			$this->last_query_text = $query; -			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false; -			$this->sql_add_num_queries($this->query_result); - -			if ($this->query_result === false) -			{ -				$array = array(); -				// We overcome Firebird's 32767 char limit by binding vars -				if (strlen($query) > 32767) -				{ -					if (preg_match('/^(INSERT INTO[^(]++)\\(([^()]+)\\) VALUES[^(]++\\((.*?)\\)$/s', $query, $regs)) -					{ -						if (strlen($regs[3]) > 32767) -						{ -							preg_match_all('/\'(?:[^\']++|\'\')*+\'|[\d-.]+/', $regs[3], $vals, PREG_PATTERN_ORDER); - -							$inserts = $vals[0]; -							unset($vals); - -							foreach ($inserts as $key => $value) -							{ -								if (!empty($value) && $value[0] === "'" && strlen($value) > 32769) // check to see if this thing is greater than the max + 'x2 -								{ -									$inserts[$key] = '?'; -									$array[] = str_replace("''", "'", substr($value, 1, -1)); -								} -							} - -							$query = $regs[1] . '(' . $regs[2] . ') VALUES (' . implode(', ', $inserts) . ')'; -						} -					} -					else if (preg_match('/^(UPDATE ([\\w_]++)\\s+SET )([\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|\\d+)(?:,\\s*[\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+))*+)\\s+(WHERE.*)$/s', $query, $data)) -					{ -						if (strlen($data[3]) > 32767) -						{ -							$update = $data[1]; -							$where = $data[4]; -							preg_match_all('/(\\w++)\\s*=\\s*(\'(?:[^\']++|\'\')*+\'|[\d-.]++)/', $data[3], $temp, PREG_SET_ORDER); -							unset($data); - -							$cols = array(); -							foreach ($temp as $value) -							{ -								if (!empty($value[2]) && $value[2][0] === "'" && strlen($value[2]) > 32769) // check to see if this thing is greater than the max + 'x2 -								{ -									$array[] = str_replace("''", "'", substr($value[2], 1, -1)); -									$cols[] = $value[1] . '=?'; -								} -								else -								{ -									$cols[] = $value[1] . '=' . $value[2]; -								} -							} - -							$query = $update . implode(', ', $cols) . ' ' . $where; -							unset($cols); -						} -					} -				} - -				if (!function_exists('ibase_affected_rows') && (preg_match('/^UPDATE ([\w_]++)\s+SET [\w_]++\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+)(?:,\s*[\w_]++\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+))*+\s+(WHERE.*)?$/s', $query, $regs) || preg_match('/^DELETE FROM ([\w_]++)\s*(WHERE\s*.*)?$/s', $query, $regs))) -				{ -					$affected_sql = 'SELECT COUNT(*) as num_rows_affected FROM ' . $regs[1]; -					if (!empty($regs[2])) -					{ -						$affected_sql .= ' ' . $regs[2]; -					} - -					if (!($temp_q_id = @ibase_query($this->db_connect_id, $affected_sql))) -					{ -						return false; -					} - -					$temp_result = @ibase_fetch_assoc($temp_q_id); -					@ibase_free_result($temp_q_id); - -					$this->affected_rows = ($temp_result) ? $temp_result['NUM_ROWS_AFFECTED'] : false; -				} - -				if (sizeof($array)) -				{ -					$p_query = @ibase_prepare($this->db_connect_id, $query); -					array_unshift($array, $p_query); -					$this->query_result = call_user_func_array('ibase_execute', $array); -					unset($array); - -					if ($this->query_result === false) -					{ -						$this->sql_error($query); -					} -				} -				else if (($this->query_result = @ibase_query($this->db_connect_id, $query)) === false) -				{ -					$this->sql_error($query); -				} - -				if (defined('DEBUG')) -				{ -					$this->sql_report('stop', $query); -				} - -				if (!$this->transaction) -				{ -					if (function_exists('ibase_commit_ret')) -					{ -						@ibase_commit_ret(); -					} -					else -					{ -						// way cooler than ibase_commit_ret :D -						@ibase_query('COMMIT RETAIN;'); -					} -				} - -				if ($cache && $cache_ttl) -				{ -					$this->open_queries[(int) $this->query_result] = $this->query_result; -					$this->query_result = $cache->sql_save($this, $query, $this->query_result, $cache_ttl); -				} -				else if (strpos($query, 'SELECT') === 0 && $this->query_result) -				{ -					$this->open_queries[(int) $this->query_result] = $this->query_result; -				} -			} -			else if (defined('DEBUG')) -			{ -				$this->sql_report('fromcache', $query); -			} -		} -		else -		{ -			return false; -		} - -		return $this->query_result; -	} - -	/** -	* Build LIMIT query -	*/ -	function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0) -	{ -		$this->query_result = false; - -		$query = 'SELECT FIRST ' . $total . ((!empty($offset)) ? ' SKIP ' . $offset : '') . substr($query, 6); - -		return $this->sql_query($query, $cache_ttl); -	} - -	/** -	* {@inheritDoc} -	*/ -	function sql_affectedrows() -	{ -		// PHP 5+ function -		if (function_exists('ibase_affected_rows')) -		{ -			return ($this->db_connect_id) ? @ibase_affected_rows($this->db_connect_id) : false; -		} -		else -		{ -			return $this->affected_rows; -		} -	} - -	/** -	* {@inheritDoc} -	*/ -	function sql_fetchrow($query_id = false) -	{ -		global $cache; - -		if ($query_id === false) -		{ -			$query_id = $this->query_result; -		} - -		if ($cache && $cache->sql_exists($query_id)) -		{ -			return $cache->sql_fetchrow($query_id); -		} - -		if ($query_id === false) -		{ -			return false; -		} - -		$row = array(); -		$cur_row = @ibase_fetch_object($query_id, IBASE_TEXT); - -		if (!$cur_row) -		{ -			return false; -		} - -		foreach (get_object_vars($cur_row) as $key => $value) -		{ -			$row[strtolower($key)] = (is_string($value)) ? trim(str_replace(array("\\0", "\\n"), array("\0", "\n"), $value)) : $value; -		} - -		return (sizeof($row)) ? $row : false; -	} - -	/** -	* {@inheritDoc} -	*/ -	function sql_nextid() -	{ -		$query_id = $this->query_result; - -		if ($query_id !== false && $this->last_query_text != '') -		{ -			if ($this->query_result && preg_match('#^INSERT[\t\n ]+INTO[\t\n ]+([a-z0-9\_\-]+)#i', $this->last_query_text, $tablename)) -			{ -				$sql = 'SELECT GEN_ID(' . $tablename[1] . '_gen, 0) AS new_id FROM RDB$DATABASE'; - -				if (!($temp_q_id = @ibase_query($this->db_connect_id, $sql))) -				{ -					return false; -				} - -				$temp_result = @ibase_fetch_assoc($temp_q_id); -				@ibase_free_result($temp_q_id); - -				return ($temp_result) ? $temp_result['NEW_ID'] : false; -			} -		} - -		return false; -	} - -	/** -	* {@inheritDoc} -	*/ -	function sql_freeresult($query_id = false) -	{ -		global $cache; - -		if ($query_id === false) -		{ -			$query_id = $this->query_result; -		} - -		if ($cache && !is_object($query_id) && $cache->sql_exists($query_id)) -		{ -			return $cache->sql_freeresult($query_id); -		} - -		if (isset($this->open_queries[(int) $query_id])) -		{ -			unset($this->open_queries[(int) $query_id]); -			return @ibase_free_result($query_id); -		} - -		return false; -	} - -	/** -	* {@inheritDoc} -	*/ -	function sql_escape($msg) -	{ -		return str_replace(array("'", "\0"), array("''", ''), $msg); -	} - -	/** -	* Build LIKE expression -	* @access private -	*/ -	function _sql_like_expression($expression) -	{ -		return $expression . " ESCAPE '\\'"; -	} - -	/** -	* Build db-specific query data -	* @access private -	*/ -	function _sql_custom_build($stage, $data) -	{ -		return $data; -	} - -	function _sql_bit_and($column_name, $bit, $compare = '') -	{ -		return 'BIN_AND(' . $column_name . ', ' . (1 << $bit) . ')' . (($compare) ? ' ' . $compare : ''); -	} - -	function _sql_bit_or($column_name, $bit, $compare = '') -	{ -		return 'BIN_OR(' . $column_name . ', ' . (1 << $bit) . ')' . (($compare) ? ' ' . $compare : ''); -	} - -	/** -	* {@inheritDoc} -	*/ -	function cast_expr_to_bigint($expression) -	{ -		// Precision must be from 1 to 18 -		return 'CAST(' . $expression . ' as DECIMAL(18, 0))'; -	} - -	/** -	* {@inheritDoc} -	*/ -	function cast_expr_to_string($expression) -	{ -		return 'CAST(' . $expression . ' as VARCHAR(255))'; -	} - -	/** -	* return sql error array -	* @access private -	*/ -	function _sql_error() -	{ -		// Need special handling here because ibase_errmsg returns -		// connection errors, however if the interbase extension -		// is not installed then ibase_errmsg does not exist and -		// we cannot call it. -		if (function_exists('ibase_errmsg')) -		{ -			$msg = @ibase_errmsg(); -			if (!$msg) -			{ -				$msg = $this->connect_error; -			} -		} -		else -		{ -			$msg = $this->connect_error; -		} -		return array( -			'message'	=> $msg, -			'code'		=> (@function_exists('ibase_errcode') ? @ibase_errcode() : '') -		); -	} - -	/** -	* Close sql connection -	* @access private -	*/ -	function _sql_close() -	{ -		if ($this->service_handle !== false) -		{ -			@ibase_service_detach($this->service_handle); -		} - -		return @ibase_close($this->db_connect_id); -	} - -	/** -	* Build db-specific report -	* @access private -	*/ -	function _sql_report($mode, $query = '') -	{ -		switch ($mode) -		{ -			case 'start': -			break; - -			case 'fromcache': -				$endtime = explode(' ', microtime()); -				$endtime = $endtime[0] + $endtime[1]; - -				$result = @ibase_query($this->db_connect_id, $query); -				while ($void = @ibase_fetch_object($result, IBASE_TEXT)) -				{ -					// Take the time spent on parsing rows into account -				} -				@ibase_free_result($result); - -				$splittime = explode(' ', microtime()); -				$splittime = $splittime[0] + $splittime[1]; - -				$this->sql_report('record_fromcache', $query, $endtime, $splittime); - -			break; -		} -	} -} diff --git a/phpBB/phpbb/db/driver/mssql.php b/phpBB/phpbb/db/driver/mssql.php index 2e56638617..268463a151 100644 --- a/phpBB/phpbb/db/driver/mssql.php +++ b/phpBB/phpbb/db/driver/mssql.php @@ -137,6 +137,10 @@ class mssql extends \phpbb\db\driver\driver  			{  				$this->sql_report('start', $query);  			} +			else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +			{ +				$this->curtime = microtime(true); +			}  			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false;  			$this->sql_add_num_queries($this->query_result); @@ -152,6 +156,10 @@ class mssql extends \phpbb\db\driver\driver  				{  					$this->sql_report('stop', $query);  				} +				else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +				{ +					$this->sql_time += microtime(true) - $this->curtime; +				}  				if ($cache && $cache_ttl)  				{ diff --git a/phpBB/phpbb/db/driver/mssql_odbc.php b/phpBB/phpbb/db/driver/mssql_odbc.php index de90d878e7..8e5d4c7a4c 100644 --- a/phpBB/phpbb/db/driver/mssql_odbc.php +++ b/phpBB/phpbb/db/driver/mssql_odbc.php @@ -156,6 +156,10 @@ class mssql_odbc extends \phpbb\db\driver\mssql_base  			{  				$this->sql_report('start', $query);  			} +			else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +			{ +				$this->curtime = microtime(true); +			}  			$this->last_query_text = $query;  			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false; @@ -172,6 +176,10 @@ class mssql_odbc extends \phpbb\db\driver\mssql_base  				{  					$this->sql_report('stop', $query);  				} +				else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +				{ +					$this->sql_time += microtime(true) - $this->curtime; +				}  				if ($cache && $cache_ttl)  				{ diff --git a/phpBB/phpbb/db/driver/mssqlnative.php b/phpBB/phpbb/db/driver/mssqlnative.php index 9639bfa988..46a9b3a477 100644 --- a/phpBB/phpbb/db/driver/mssqlnative.php +++ b/phpBB/phpbb/db/driver/mssqlnative.php @@ -127,6 +127,10 @@ class mssqlnative extends \phpbb\db\driver\mssql_base  			{  				$this->sql_report('start', $query);  			} +			else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +			{ +				$this->curtime = microtime(true); +			}  			$this->last_query_text = $query;  			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false; @@ -145,6 +149,10 @@ class mssqlnative extends \phpbb\db\driver\mssql_base  				{  					$this->sql_report('stop', $query);  				} +				else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +				{ +					$this->sql_time += microtime(true) - $this->curtime; +				}  				if ($cache && $cache_ttl)  				{ @@ -319,10 +327,10 @@ class mssqlnative extends \phpbb\db\driver\mssql_base  			{  				foreach ($errors as $error)  				{ -					$error_message .= "SQLSTATE: " . $error[ 'SQLSTATE'] . "\n"; -					$error_message .= "code: " . $error[ 'code'] . "\n"; +					$error_message .= "SQLSTATE: " . $error['SQLSTATE'] . "\n"; +					$error_message .= "code: " . $error['code'] . "\n";  					$code = $error['code']; -					$error_message .= "message: " . $error[ 'message'] . "\n"; +					$error_message .= "message: " . $error['message'] . "\n";  				}  				$this->last_error_result = $error_message;  				$error = $this->last_error_result; diff --git a/phpBB/phpbb/db/driver/mysql.php b/phpBB/phpbb/db/driver/mysql.php index 569bd4f10a..e93c7239e8 100644 --- a/phpBB/phpbb/db/driver/mysql.php +++ b/phpBB/phpbb/db/driver/mysql.php @@ -166,6 +166,10 @@ class mysql extends \phpbb\db\driver\mysql_base  			{  				$this->sql_report('start', $query);  			} +			else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +			{ +				$this->curtime = microtime(true); +			}  			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false;  			$this->sql_add_num_queries($this->query_result); @@ -181,6 +185,10 @@ class mysql extends \phpbb\db\driver\mysql_base  				{  					$this->sql_report('stop', $query);  				} +				else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +				{ +					$this->sql_time += microtime(true) - $this->curtime; +				}  				if ($cache && $cache_ttl)  				{ diff --git a/phpBB/phpbb/db/driver/mysqli.php b/phpBB/phpbb/db/driver/mysqli.php index 58361ff0f8..8fc306b2cc 100644 --- a/phpBB/phpbb/db/driver/mysqli.php +++ b/phpBB/phpbb/db/driver/mysqli.php @@ -71,10 +71,17 @@ class mysqli extends \phpbb\db\driver\mysql_base  			if (version_compare($this->sql_server_info(true), '5.0.2', '>='))  			{  				$result = @mysqli_query($this->db_connect_id, 'SELECT @@session.sql_mode AS sql_mode'); -				$row = @mysqli_fetch_assoc($result); -				@mysqli_free_result($result); +				if ($result !== null) +				{ +					$row = @mysqli_fetch_assoc($result); -				$modes = array_map('trim', explode(',', $row['sql_mode'])); +					$modes = array_map('trim', explode(',', $row['sql_mode'])); +				} +				else +				{ +					$modes = array(); +				} +				@mysqli_free_result($result);  				// TRADITIONAL includes STRICT_ALL_TABLES and STRICT_TRANS_TABLES  				if (!in_array('TRADITIONAL', $modes)) @@ -109,15 +116,18 @@ class mysqli extends \phpbb\db\driver\mysql_base  		if (!$use_cache || empty($cache) || ($this->sql_server_version = $cache->get('mysqli_version')) === false)  		{  			$result = @mysqli_query($this->db_connect_id, 'SELECT VERSION() AS version'); -			$row = @mysqli_fetch_assoc($result); -			@mysqli_free_result($result); +			if ($result !== null) +			{ +				$row = @mysqli_fetch_assoc($result); -			$this->sql_server_version = $row['version']; +				$this->sql_server_version = $row['version']; -			if (!empty($cache) && $use_cache) -			{ -				$cache->put('mysqli_version', $this->sql_server_version); +				if (!empty($cache) && $use_cache) +				{ +					$cache->put('mysqli_version', $this->sql_server_version); +				}  			} +			@mysqli_free_result($result);  		}  		return ($raw) ? $this->sql_server_version : 'MySQL(i) ' . $this->sql_server_version; @@ -165,6 +175,10 @@ class mysqli extends \phpbb\db\driver\mysql_base  			{  				$this->sql_report('start', $query);  			} +			else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +			{ +				$this->curtime = microtime(true); +			}  			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false;  			$this->sql_add_num_queries($this->query_result); @@ -180,6 +194,10 @@ class mysqli extends \phpbb\db\driver\mysql_base  				{  					$this->sql_report('stop', $query);  				} +				else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +				{ +					$this->sql_time += microtime(true) - $this->curtime; +				}  				if ($cache && $cache_ttl)  				{ @@ -224,7 +242,7 @@ class mysqli extends \phpbb\db\driver\mysql_base  			return $cache->sql_fetchrow($query_id);  		} -		if ($query_id !== false) +		if ($query_id !== false && $query_id !== null)  		{  			$result = @mysqli_fetch_assoc($query_id);  			return $result !== null ? $result : false; @@ -434,9 +452,12 @@ class mysqli extends \phpbb\db\driver\mysql_base  				$endtime = $endtime[0] + $endtime[1];  				$result = @mysqli_query($this->db_connect_id, $query); -				while ($void = @mysqli_fetch_assoc($result)) +				if ($result !== null)  				{ -					// Take the time spent on parsing rows into account +					while ($void = @mysqli_fetch_assoc($result)) +					{ +						// Take the time spent on parsing rows into account +					}  				}  				@mysqli_free_result($result); diff --git a/phpBB/phpbb/db/driver/oracle.php b/phpBB/phpbb/db/driver/oracle.php index bfc5373e35..d1a186f1ba 100644 --- a/phpBB/phpbb/db/driver/oracle.php +++ b/phpBB/phpbb/db/driver/oracle.php @@ -253,6 +253,10 @@ class oracle extends \phpbb\db\driver\driver  			{  				$this->sql_report('start', $query);  			} +			else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +			{ +				$this->curtime = microtime(true); +			}  			$this->last_query_text = $query;  			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false; @@ -430,6 +434,10 @@ class oracle extends \phpbb\db\driver\driver  				{  					$this->sql_report('stop', $query);  				} +				else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +				{ +					$this->sql_time += microtime(true) - $this->curtime; +				}  				if ($cache && $cache_ttl)  				{ diff --git a/phpBB/phpbb/db/driver/postgres.php b/phpBB/phpbb/db/driver/postgres.php index a4aa9497ed..a67cd9f7c2 100644 --- a/phpBB/phpbb/db/driver/postgres.php +++ b/phpBB/phpbb/db/driver/postgres.php @@ -179,6 +179,10 @@ class postgres extends \phpbb\db\driver\driver  			{  				$this->sql_report('start', $query);  			} +			else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +			{ +				$this->curtime = microtime(true); +			}  			$this->last_query_text = $query;  			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false; @@ -195,6 +199,10 @@ class postgres extends \phpbb\db\driver\driver  				{  					$this->sql_report('stop', $query);  				} +				else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +				{ +					$this->sql_time += microtime(true) - $this->curtime; +				}  				if ($cache && $cache_ttl)  				{ diff --git a/phpBB/phpbb/db/driver/sqlite.php b/phpBB/phpbb/db/driver/sqlite.php index f4c5e240fc..2112e5ba2f 100644 --- a/phpBB/phpbb/db/driver/sqlite.php +++ b/phpBB/phpbb/db/driver/sqlite.php @@ -121,6 +121,10 @@ class sqlite extends \phpbb\db\driver\driver  			{  				$this->sql_report('start', $query);  			} +			else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +			{ +				$this->curtime = microtime(true); +			}  			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false;  			$this->sql_add_num_queries($this->query_result); @@ -136,6 +140,10 @@ class sqlite extends \phpbb\db\driver\driver  				{  					$this->sql_report('stop', $query);  				} +				else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +				{ +					$this->sql_time += microtime(true) - $this->curtime; +				}  				if ($cache && $cache_ttl)  				{ diff --git a/phpBB/phpbb/db/driver/sqlite3.php b/phpBB/phpbb/db/driver/sqlite3.php index 2c6bf99497..6511c755a0 100644 --- a/phpBB/phpbb/db/driver/sqlite3.php +++ b/phpBB/phpbb/db/driver/sqlite3.php @@ -121,6 +121,10 @@ class sqlite3 extends \phpbb\db\driver\driver  			{  				$this->sql_report('start', $query);  			} +			else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +			{ +				$this->curtime = microtime(true); +			}  			$this->last_query_text = $query;  			$this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false; @@ -137,6 +141,10 @@ class sqlite3 extends \phpbb\db\driver\driver  				{  					$this->sql_report('stop', $query);  				} +				else if (defined('PHPBB_DISPLAY_LOAD_TIME')) +				{ +					$this->sql_time += microtime(true) - $this->curtime; +				}  				if ($cache && $cache_ttl)  				{ diff --git a/phpBB/phpbb/db/migration/data/v30x/local_url_bbcode.php b/phpBB/phpbb/db/migration/data/v30x/local_url_bbcode.php index 139dc95b28..edcc69e1bf 100644 --- a/phpBB/phpbb/db/migration/data/v30x/local_url_bbcode.php +++ b/phpBB/phpbb/db/migration/data/v30x/local_url_bbcode.php @@ -44,9 +44,16 @@ class local_url_bbcode extends \phpbb\db\migration\migration  		{  			if (!class_exists('acp_bbcodes'))  			{ -				global $phpEx; -				phpbb_require_updated('includes/acp/acp_bbcodes.' . $phpEx); +				if (function_exists('phpbb_require_updated')) +				{ +					phpbb_require_updated('includes/acp/acp_bbcodes.' . $this->php_ext); +				} +				else +				{ +					require($this->phpbb_root_path . 'includes/acp/acp_bbcodes.' . $this->php_ext); +				}  			} +  			$bbcode_match = $row['bbcode_match'];  			$bbcode_tpl = $row['bbcode_tpl']; diff --git a/phpBB/phpbb/db/migration/data/v310/contact_admin_acp_module.php b/phpBB/phpbb/db/migration/data/v310/contact_admin_acp_module.php index bd682e2f7c..20bd547ac3 100644 --- a/phpBB/phpbb/db/migration/data/v310/contact_admin_acp_module.php +++ b/phpBB/phpbb/db/migration/data/v310/contact_admin_acp_module.php @@ -1,9 +1,13 @@  <?php  /**  * -* @package migration -* @copyright (c) 2014 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* 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.  *  */ diff --git a/phpBB/phpbb/db/migration/data/v310/contact_admin_form.php b/phpBB/phpbb/db/migration/data/v310/contact_admin_form.php index e255efb99d..c2dd09ddf6 100644 --- a/phpBB/phpbb/db/migration/data/v310/contact_admin_form.php +++ b/phpBB/phpbb/db/migration/data/v310/contact_admin_form.php @@ -1,9 +1,13 @@  <?php  /**  * -* @package migration -* @copyright (c) 2014 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* 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.  *  */ diff --git a/phpBB/phpbb/db/migration/data/v310/passwords_convert_p1.php b/phpBB/phpbb/db/migration/data/v310/passwords_convert_p1.php index 004d94d8bd..aad8e44681 100644 --- a/phpBB/phpbb/db/migration/data/v310/passwords_convert_p1.php +++ b/phpBB/phpbb/db/migration/data/v310/passwords_convert_p1.php @@ -42,7 +42,6 @@ class passwords_convert_p1 extends \phpbb\db\migration\migration  		$sql = 'SELECT user_password, user_id  			FROM ' . $this->table_prefix . 'users  			WHERE user_pass_convert = 1 -			GROUP BY user_id  			ORDER BY user_id';  		$result = $this->db->sql_query_limit($sql, $limit, $start); diff --git a/phpBB/phpbb/db/migration/data/v310/profilefield_facebook.php b/phpBB/phpbb/db/migration/data/v310/profilefield_facebook.php new file mode 100644 index 0000000000..5964e7a997 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v310/profilefield_facebook.php @@ -0,0 +1,60 @@ +<?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. +* +*/ + +namespace phpbb\db\migration\data\v310; + +class profilefield_facebook extends \phpbb\db\migration\profilefield_base_migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v310\profilefield_types', +			'\phpbb\db\migration\data\v310\profilefield_show_novalue', +		); +	} + +	public function update_data() +	{ +		return array( +			array('custom', array(array($this, 'create_custom_field'))), +		); +	} + +	protected $profilefield_name = 'phpbb_facebook'; + +	protected $profilefield_database_type = array('VCHAR', ''); + +	protected $profilefield_data = array( +		'field_name'			=> 'phpbb_facebook', +		'field_type'			=> 'profilefields.type.string', +		'field_ident'			=> 'phpbb_facebook', +		'field_length'			=> '20', +		'field_minlen'			=> '5', +		'field_maxlen'			=> '50', +		'field_novalue'			=> '', +		'field_default_value'	=> '', +		'field_validation'		=> '[\w.]+', +		'field_required'		=> 0, +		'field_show_novalue'	=> 0, +		'field_show_on_reg'		=> 0, +		'field_show_on_pm'		=> 1, +		'field_show_on_vt'		=> 1, +		'field_show_profile'	=> 1, +		'field_hide'			=> 0, +		'field_no_view'			=> 0, +		'field_active'			=> 1, +		'field_is_contact'		=> 1, +		'field_contact_desc'	=> 'VIEW_FACEBOOK_PROFILE', +		'field_contact_url'		=> 'http://facebook.com/%s/', +	); +} diff --git a/phpBB/phpbb/db/migration/data/v310/profilefield_googleplus.php b/phpBB/phpbb/db/migration/data/v310/profilefield_googleplus.php new file mode 100644 index 0000000000..9bef0a4c0b --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v310/profilefield_googleplus.php @@ -0,0 +1,60 @@ +<?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. +* +*/ + +namespace phpbb\db\migration\data\v310; + +class profilefield_googleplus extends \phpbb\db\migration\profilefield_base_migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v310\profilefield_types', +			'\phpbb\db\migration\data\v310\profilefield_show_novalue', +		); +	} + +	public function update_data() +	{ +		return array( +			array('custom', array(array($this, 'create_custom_field'))), +		); +	} + +	protected $profilefield_name = 'phpbb_googleplus'; + +	protected $profilefield_database_type = array('VCHAR', ''); + +	protected $profilefield_data = array( +		'field_name'			=> 'phpbb_googleplus', +		'field_type'			=> 'profilefields.type.googleplus', +		'field_ident'			=> 'phpbb_googleplus', +		'field_length'			=> '20', +		'field_minlen'			=> '3', +		'field_maxlen'			=> '255', +		'field_novalue'			=> '', +		'field_default_value'	=> '', +		'field_validation'		=> '[\w]+', +		'field_required'		=> 0, +		'field_show_novalue'	=> 0, +		'field_show_on_reg'		=> 0, +		'field_show_on_pm'		=> 1, +		'field_show_on_vt'		=> 1, +		'field_show_profile'	=> 1, +		'field_hide'			=> 0, +		'field_no_view'			=> 0, +		'field_active'			=> 1, +		'field_is_contact'		=> 1, +		'field_contact_desc'	=> 'VIEW_GOOGLEPLUS_PROFILE', +		'field_contact_url'		=> 'http://plus.google.com/%s', +	); +} diff --git a/phpBB/phpbb/db/migration/data/v310/profilefield_skype.php b/phpBB/phpbb/db/migration/data/v310/profilefield_skype.php new file mode 100644 index 0000000000..9a5de9d0eb --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v310/profilefield_skype.php @@ -0,0 +1,60 @@ +<?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. +* +*/ + +namespace phpbb\db\migration\data\v310; + +class profilefield_skype extends \phpbb\db\migration\profilefield_base_migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v310\profilefield_types', +			'\phpbb\db\migration\data\v310\profilefield_show_novalue', +		); +	} + +	public function update_data() +	{ +		return array( +			array('custom', array(array($this, 'create_custom_field'))), +		); +	} + +	protected $profilefield_name = 'phpbb_skype'; + +	protected $profilefield_database_type = array('VCHAR', ''); + +	protected $profilefield_data = array( +		'field_name'			=> 'phpbb_skype', +		'field_type'			=> 'profilefields.type.string', +		'field_ident'			=> 'phpbb_skype', +		'field_length'			=> '20', +		'field_minlen'			=> '6', +		'field_maxlen'			=> '32', +		'field_novalue'			=> '', +		'field_default_value'	=> '', +		'field_validation'		=> '[a-zA-Z][\w\.,\-_]+', +		'field_required'		=> 0, +		'field_show_novalue'	=> 0, +		'field_show_on_reg'		=> 0, +		'field_show_on_pm'		=> 1, +		'field_show_on_vt'		=> 1, +		'field_show_profile'	=> 1, +		'field_hide'			=> 0, +		'field_no_view'			=> 0, +		'field_active'			=> 1, +		'field_is_contact'		=> 1, +		'field_contact_desc'	=> 'VIEW_SKYPE_PROFILE', +		'field_contact_url'		=> 'skype:%s?userinfo', +	); +} diff --git a/phpBB/phpbb/db/migration/data/v310/profilefield_twitter.php b/phpBB/phpbb/db/migration/data/v310/profilefield_twitter.php new file mode 100644 index 0000000000..68d038f609 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v310/profilefield_twitter.php @@ -0,0 +1,60 @@ +<?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. +* +*/ + +namespace phpbb\db\migration\data\v310; + +class profilefield_twitter extends \phpbb\db\migration\profilefield_base_migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v310\profilefield_types', +			'\phpbb\db\migration\data\v310\profilefield_show_novalue', +		); +	} + +	public function update_data() +	{ +		return array( +			array('custom', array(array($this, 'create_custom_field'))), +		); +	} + +	protected $profilefield_name = 'phpbb_twitter'; + +	protected $profilefield_database_type = array('VCHAR', ''); + +	protected $profilefield_data = array( +		'field_name'			=> 'phpbb_twitter', +		'field_type'			=> 'profilefields.type.string', +		'field_ident'			=> 'phpbb_twitter', +		'field_length'			=> '20', +		'field_minlen'			=> '1', +		'field_maxlen'			=> '15', +		'field_novalue'			=> '', +		'field_default_value'	=> '', +		'field_validation'		=> '[\w_]+', +		'field_required'		=> 0, +		'field_show_novalue'	=> 0, +		'field_show_on_reg'		=> 0, +		'field_show_on_pm'		=> 1, +		'field_show_on_vt'		=> 1, +		'field_show_profile'	=> 1, +		'field_hide'			=> 0, +		'field_no_view'			=> 0, +		'field_active'			=> 1, +		'field_is_contact'		=> 1, +		'field_contact_desc'	=> 'VIEW_TWITTER_PROFILE', +		'field_contact_url'		=> 'http://twitter.com/%s', +	); +} diff --git a/phpBB/phpbb/db/migration/data/v310/profilefield_youtube.php b/phpBB/phpbb/db/migration/data/v310/profilefield_youtube.php new file mode 100644 index 0000000000..bb90c0aa5c --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v310/profilefield_youtube.php @@ -0,0 +1,60 @@ +<?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. +* +*/ + +namespace phpbb\db\migration\data\v310; + +class profilefield_youtube extends \phpbb\db\migration\profilefield_base_migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v310\profilefield_types', +			'\phpbb\db\migration\data\v310\profilefield_show_novalue', +		); +	} + +	public function update_data() +	{ +		return array( +			array('custom', array(array($this, 'create_custom_field'))), +		); +	} + +	protected $profilefield_name = 'phpbb_youtube'; + +	protected $profilefield_database_type = array('VCHAR', ''); + +	protected $profilefield_data = array( +		'field_name'			=> 'phpbb_youtube', +		'field_type'			=> 'profilefields.type.string', +		'field_ident'			=> 'phpbb_youtube', +		'field_length'			=> '20', +		'field_minlen'			=> '3', +		'field_maxlen'			=> '60', +		'field_novalue'			=> '', +		'field_default_value'	=> '', +		'field_validation'		=> '[a-zA-Z][\w\.,\-_]+', +		'field_required'		=> 0, +		'field_show_novalue'	=> 0, +		'field_show_on_reg'		=> 0, +		'field_show_on_pm'		=> 1, +		'field_show_on_vt'		=> 1, +		'field_show_profile'	=> 1, +		'field_hide'			=> 0, +		'field_no_view'			=> 0, +		'field_active'			=> 1, +		'field_is_contact'		=> 1, +		'field_contact_desc'	=> 'VIEW_YOUTUBE_CHANNEL', +		'field_contact_url'		=> 'http://youtube.com/user/%s', +	); +} diff --git a/phpBB/phpbb/db/migration/schema_generator.php b/phpBB/phpbb/db/migration/schema_generator.php index 818e27a362..91d8307d91 100644 --- a/phpBB/phpbb/db/migration/schema_generator.php +++ b/phpBB/phpbb/db/migration/schema_generator.php @@ -217,7 +217,7 @@ class schema_generator  	* Check if one of the migrations files' dependencies can't be resolved  	* by the supplied list of migrations  	* -	* @throws UnexpectedValueException If a dependency can't be resolved +	* @throws \UnexpectedValueException If a dependency can't be resolved  	*/  	protected function check_dependencies()  	{ diff --git a/phpBB/phpbb/db/migration/tool/config.php b/phpBB/phpbb/db/migration/tool/config.php index 1027b425ff..f93e7118c4 100644 --- a/phpBB/phpbb/db/migration/tool/config.php +++ b/phpBB/phpbb/db/migration/tool/config.php @@ -66,6 +66,7 @@ class config implements \phpbb\db\migration\tool\tool_interface  	* 	like to update  	* @param mixed $config_value The value of the config setting  	* @return null +	* @throws \phpbb\db\migration\exception  	*/  	public function update($config_name, $config_value)  	{ @@ -87,6 +88,7 @@ class config implements \phpbb\db\migration\tool\tool_interface  	* 	like to update  	* @param mixed $config_value The value of the config setting  	* @return null +	* @throws \phpbb\db\migration\exception  	*/  	public function update_if_equals($compare, $config_name, $config_value)  	{ diff --git a/phpBB/phpbb/db/migration/tool/module.php b/phpBB/phpbb/db/migration/tool/module.php index 17deb1b19c..db43046a95 100644 --- a/phpBB/phpbb/db/migration/tool/module.php +++ b/phpBB/phpbb/db/migration/tool/module.php @@ -167,6 +167,7 @@ class module implements \phpbb\db\migration\tool\tool_interface  	* 			modules in that info file.  	* 	path, specify that here  	* @return null +	* @throws \phpbb\db\migration\exception  	*/  	public function add($class, $parent = 0, $data = array())  	{ @@ -331,6 +332,7 @@ class module implements \phpbb\db\migration\tool\tool_interface  	* @param int|string $module The module id|module_langname  	* 	specify that here  	* @return null +	* @throws \phpbb\db\migration\exception  	*/  	public function remove($class, $parent = 0, $module = '')  	{ @@ -466,6 +468,7 @@ class module implements \phpbb\db\migration\tool\tool_interface  	* @param string $class Module Class  	* @param string $basename Module Basename  	* @return array Module Information +	* @throws \phpbb\db\migration\exception  	*/  	protected function get_module_info($class, $basename)  	{ diff --git a/phpBB/phpbb/db/migration/tool/permission.php b/phpBB/phpbb/db/migration/tool/permission.php index ba856fbeda..d2df27613a 100644 --- a/phpBB/phpbb/db/migration/tool/permission.php +++ b/phpBB/phpbb/db/migration/tool/permission.php @@ -283,6 +283,7 @@ class permission implements \phpbb\db\migration\tool\tool_interface  	* @param string $old_role_name The old role name  	* @param string $new_role_name The new role name  	* @return null +	* @throws \phpbb\db\migration\exception  	*/  	public function role_update($old_role_name, $new_role_name)  	{ @@ -345,6 +346,7 @@ class permission implements \phpbb\db\migration\tool\tool_interface  	* @param bool $has_permission True if you want to give them permission,  	* 	false if you want to deny them permission  	* @return null +	* @throws \phpbb\db\migration\exception  	*/  	public function permission_set($name, $auth_option, $type = 'role', $has_permission = true)  	{ @@ -490,6 +492,7 @@ class permission implements \phpbb\db\migration\tool\tool_interface  	* 	auth_options you would like to set  	* @param string $type The type (role|group)  	* @return null +	* @throws \phpbb\db\migration\exception  	*/  	public function permission_unset($name, $auth_option, $type = 'role')  	{ diff --git a/phpBB/phpbb/db/migrator.php b/phpBB/phpbb/db/migrator.php index 5255c73c1c..c2f7b5ab23 100644 --- a/phpBB/phpbb/db/migrator.php +++ b/phpBB/phpbb/db/migrator.php @@ -167,8 +167,9 @@ class migrator  	/**  	* Attempts to apply a step of the given migration or one of its dependencies  	* -	* @param	string	The class name of the migration +	* @param	string	$name The class name of the migration  	* @return	bool	Whether any update step was successfully run +	* @throws \phpbb\db\migration\exception  	*/  	protected function try_apply($name)  	{ @@ -302,7 +303,7 @@ class migrator  	/**  	* Attempts to revert a step of the given migration or one of its dependencies  	* -	* @param	string	The class name of the migration +	* @param	string	$name The class name of the migration  	* @return	bool	Whether any update step was successfully run  	*/  	protected function try_revert($name) @@ -368,6 +369,7 @@ class migrator  	* @param bool|string $state Current state of the migration  	* @param bool $revert true to revert a data step  	* @return bool|string migration state. True if completed, serialized array if not finished +	* @throws \phpbb\db\migration\exception  	*/  	protected function process_data_step($steps, $state, $revert = false)  	{ @@ -464,6 +466,7 @@ class migrator  	* @param mixed $last_result Result to pass to the callable (only for 'custom' method)  	* @param bool $reverse False to install, True to attempt uninstallation by reversing the call  	* @return array Array with parameters for call_user_func_array(), 0 is the callable, 1 is parameters +	* @throws \phpbb\db\migration\exception  	*/  	protected function get_callable_from_step(array $step, $last_result = 0, $reverse = false)  	{ @@ -722,6 +725,7 @@ class migrator  	* 	to prevent errors (if including multiple directories, check  	* 	with the last call to prevent throwing errors unnecessarily).  	* @return array Array of migration names +	* @throws \phpbb\db\migration\exception  	*/  	public function load_migrations(\phpbb\finder $finder, $path, $check_fulfillable = true)  	{ diff --git a/phpBB/phpbb/db/tools.php b/phpBB/phpbb/db/tools.php index 3d065ede8e..2ec46ed239 100644 --- a/phpBB/phpbb/db/tools.php +++ b/phpBB/phpbb/db/tools.php @@ -109,36 +109,6 @@ class tools  				'VARBINARY'	=> 'varbinary(255)',  			), -			'firebird'	=> array( -				'INT:'		=> 'INTEGER', -				'BINT'		=> 'DOUBLE PRECISION', -				'UINT'		=> 'INTEGER', -				'UINT:'		=> 'INTEGER', -				'TINT:'		=> 'INTEGER', -				'USINT'		=> 'INTEGER', -				'BOOL'		=> 'INTEGER', -				'VCHAR'		=> 'VARCHAR(255) CHARACTER SET NONE', -				'VCHAR:'	=> 'VARCHAR(%d) CHARACTER SET NONE', -				'CHAR:'		=> 'CHAR(%d) CHARACTER SET NONE', -				'XSTEXT'	=> 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', -				'STEXT'		=> 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', -				'TEXT'		=> 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', -				'MTEXT'		=> 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', -				'XSTEXT_UNI'=> 'VARCHAR(100) CHARACTER SET UTF8', -				'STEXT_UNI'	=> 'VARCHAR(255) CHARACTER SET UTF8', -				'TEXT_UNI'	=> 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8', -				'MTEXT_UNI'	=> 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8', -				'TIMESTAMP'	=> 'INTEGER', -				'DECIMAL'	=> 'DOUBLE PRECISION', -				'DECIMAL:'	=> 'DOUBLE PRECISION', -				'PDECIMAL'	=> 'DOUBLE PRECISION', -				'PDECIMAL:'	=> 'DOUBLE PRECISION', -				'VCHAR_UNI'	=> 'VARCHAR(255) CHARACTER SET UTF8', -				'VCHAR_UNI:'=> 'VARCHAR(%d) CHARACTER SET UTF8', -				'VCHAR_CI'	=> 'VARCHAR(255) CHARACTER SET UTF8', -				'VARBINARY'	=> 'CHAR(255) CHARACTER SET NONE', -			), -  			'mssql'		=> array(  				'INT:'		=> '[int]',  				'BINT'		=> '[float]', @@ -331,7 +301,7 @@ class tools  	* A list of supported DBMS. We change this class to support more DBMS, the DBMS itself only need to follow some rules.  	* @var array  	*/ -	var $supported_dbms = array('firebird', 'mssql', 'mssqlnative', 'mysql_40', 'mysql_41', 'oracle', 'postgres', 'sqlite', 'sqlite3'); +	var $supported_dbms = array('mssql', 'mssqlnative', 'mysql_40', 'mysql_41', 'oracle', 'postgres', 'sqlite', 'sqlite3');  	/**  	* This is set to true if user only wants to return the 'to-be-executed' SQL statement(s) (as an array). @@ -441,13 +411,6 @@ class tools  					FROM pg_stat_user_tables';  			break; -			case 'firebird': -				$sql = 'SELECT rdb$relation_name -					FROM rdb$relations -					WHERE rdb$view_source is null -						AND rdb$system_flag = 0'; -			break; -  			case 'oracle':  				$sql = 'SELECT table_name  					FROM USER_TABLES'; @@ -580,7 +543,6 @@ class tools  		// Close the table for two DBMS and add to the statements  		switch ($this->sql_layer)  		{ -			case 'firebird':  			case 'mssql':  			case 'mssqlnative':  				$table_sql .= "\n);"; @@ -610,7 +572,6 @@ class tools  						$table_sql .= ",\n\t PRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . ')';  					break; -					case 'firebird':  					case 'mssql':  					case 'mssqlnative':  						// We need the data here @@ -685,19 +646,6 @@ class tools  					$statements[] = $trigger;  				}  			break; - -			case 'firebird': -				if ($create_sequence) -				{ -					$statements[] = "CREATE GENERATOR {$table_name}_gen;"; -					$statements[] = "SET GENERATOR {$table_name}_gen TO 0;"; - -					$trigger = "CREATE TRIGGER t_$table_name FOR $table_name\n"; -					$trigger .= "BEFORE INSERT\nAS\nBEGIN\n"; -					$trigger .= "\tNEW.{$create_sequence} = GEN_ID({$table_name}_gen, 1);\nEND;"; -					$statements[] = $trigger; -				} -			break;  		}  		// Write Keys @@ -1174,12 +1122,6 @@ class tools  					WHERE LOWER(table_name) = '" . strtolower($table) . "'";  			break; -			case 'firebird': -				$sql = "SELECT RDB\$FIELD_NAME as FNAME -					FROM RDB\$RELATION_FIELDS -					WHERE RDB\$RELATION_NAME = '" . strtoupper($table) . "'"; -			break; -  			case 'sqlite':  			case 'sqlite3':  				$sql = "SELECT sql @@ -1278,15 +1220,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird': -				$sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name -					FROM RDB\$INDICES -					WHERE RDB\$RELATION_NAME = '" . strtoupper($table_name) . "' -						AND RDB\$UNIQUE_FLAG IS NULL -						AND RDB\$FOREIGN_KEY IS NULL"; -				$col = 'index_name'; -			break; -  			case 'postgres':  				$sql = "SELECT ic.relname as index_name  					FROM pg_class bc, pg_class ic, pg_index i @@ -1332,7 +1265,6 @@ class tools  			// These DBMS prefix index name with the table name  			switch ($this->sql_layer)  			{ -				case 'firebird':  				case 'oracle':  				case 'postgres':  				case 'sqlite': @@ -1385,15 +1317,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird': -				$sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name -					FROM RDB\$INDICES -					WHERE RDB\$RELATION_NAME = '" . strtoupper($table_name) . "' -						AND RDB\$UNIQUE_FLAG IS NOT NULL -						AND RDB\$FOREIGN_KEY IS NULL"; -				$col = 'index_name'; -			break; -  			case 'postgres':  				$sql = "SELECT ic.relname as index_name, i.indisunique  					FROM pg_class bc, pg_class ic, pg_index i @@ -1460,7 +1383,6 @@ class tools  					}  				break; -				case 'firebird':  				case 'postgres':  				case 'sqlite':  				case 'sqlite3': @@ -1536,32 +1458,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird': -				$sql .= " {$column_type} "; -				$return_array['column_type_sql_type'] = " {$column_type} "; - -				if (!is_null($column_data[1])) -				{ -					$sql .= 'DEFAULT ' . ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ' '; -					$return_array['column_type_sql_default'] = ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ' '; -				} - -				$sql .= 'NOT NULL'; - -				// This is a UNICODE column and thus should be given it's fair share -				if (preg_match('/^X?STEXT_UNI|VCHAR_(CI|UNI:?)/', $column_data[0])) -				{ -					$sql .= ' COLLATE UNICODE'; -				} - -				$return_array['auto_increment'] = false; -				if (isset($column_data[2]) && $column_data[2] == 'auto_increment') -				{ -					$return_array['auto_increment'] = true; -				} - -			break; -  			case 'mssql':  			case 'mssqlnative':  				$sql .= " {$column_type} "; @@ -1772,11 +1668,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird': -				// Does not support AFTER statement, only POSITION (and there you need the column position) -				$statements[] = 'ALTER TABLE ' . $table_name . ' ADD "' . strtoupper($column_name) . '" ' . $column_data['column_type_sql']; -			break; -  			case 'mssql':  			case 'mssqlnative':  				// Does not support AFTER, only through temporary table @@ -1894,10 +1785,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird': -				$statements[] = 'ALTER TABLE ' . $table_name . ' DROP "' . strtoupper($column_name) . '"'; -			break; -  			case 'mssql':  			case 'mssqlnative':  				// We need the data here @@ -1996,7 +1883,7 @@ class tools  				$columns = implode(',', $column_list); -				$new_table_cols = trim(preg_replace('/' . $column_name . '[^,]+(?:,|$)/m', '', $new_table_cols)); +				$new_table_cols = trim(preg_replace('/' . $column_name . '\b[^,]+(?:,|$)/m', '', $new_table_cols));  				if (substr($new_table_cols, -1) === ',')  				{  					// Remove the comma from the last entry again @@ -2036,7 +1923,6 @@ class tools  				$statements[] = 'DROP INDEX ' . $index_name . ' ON ' . $table_name;  			break; -			case 'firebird':  			case 'oracle':  			case 'postgres':  			case 'sqlite': @@ -2065,21 +1951,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird': -				$sql = 'SELECT RDB$GENERATOR_NAME as gen -					FROM RDB$GENERATORS -					WHERE RDB$SYSTEM_FLAG = 0 -						AND RDB$GENERATOR_NAME = \'' . strtoupper($table_name) . "_GEN'"; -				$result = $this->db->sql_query($sql); - -				// does a generator exist? -				if ($row = $this->db->sql_fetchrow($result)) -				{ -					$statements[] = "DROP GENERATOR {$row['gen']};"; -				} -				$this->db->sql_freeresult($result); -			break; -  			case 'oracle':  				$sql = 'SELECT A.REFERENCED_NAME  					FROM USER_DEPENDENCIES A, USER_TRIGGERS B @@ -2125,7 +1996,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird':  			case 'postgres':  			case 'mysql_40':  			case 'mysql_41': @@ -2217,7 +2087,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird':  			case 'postgres':  			case 'oracle':  			case 'sqlite': @@ -2261,7 +2130,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird':  			case 'postgres':  			case 'oracle':  			case 'sqlite': @@ -2320,15 +2188,6 @@ class tools  		{  			switch ($this->sql_layer)  			{ -				case 'firebird': -					$sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name -						FROM RDB\$INDICES -						WHERE RDB\$RELATION_NAME = '" . strtoupper($table_name) . "' -							AND RDB\$UNIQUE_FLAG IS NULL -							AND RDB\$FOREIGN_KEY IS NULL"; -					$col = 'index_name'; -				break; -  				case 'postgres':  					$sql = "SELECT ic.relname as index_name  						FROM pg_class bc, pg_class ic, pg_index i @@ -2373,7 +2232,6 @@ class tools  				switch ($this->sql_layer)  				{ -					case 'firebird':  					case 'oracle':  					case 'postgres':  					case 'sqlite': @@ -2400,20 +2258,6 @@ class tools  		switch ($this->sql_layer)  		{ -			case 'firebird': -				// Change type... -				if (!empty($column_data['column_type_sql_default'])) -				{ -					$statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN "' . strtoupper($column_name) . '" TYPE ' . ' ' . $column_data['column_type_sql_type']; -					$statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN "' . strtoupper($column_name) . '" SET DEFAULT ' . ' ' . $column_data['column_type_sql_default']; -				} -				else -				{ -					// TODO: try to change pkey without removing trigger, generator or constraints. ATM this query may fail. -					$statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN "' . strtoupper($column_name) . '" TYPE ' . ' ' . $column_data['column_type_sql_type']; -				} -			break; -  			case 'mssql':  			case 'mssqlnative':  				// We need the data here @@ -2561,7 +2405,18 @@ class tools  				foreach ($old_table_cols as $key => $declaration)  				{ -					$entities = preg_split('#\s+#', trim($declaration)); +					$declaration = trim($declaration); + +					// Check for the beginning of the constraint section and stop +					if (preg_match('/[^\(]*\s*PRIMARY KEY\s+\(/', $declaration) || +						preg_match('/[^\(]*\s*UNIQUE\s+\(/', $declaration) || +						preg_match('/[^\(]*\s*FOREIGN KEY\s+\(/', $declaration) || +						preg_match('/[^\(]*\s*CHECK\s+\(/', $declaration)) +					{ +						break; +					} + +					$entities = preg_split('#\s+#', $declaration);  					$column_list[] = $entities[0];  					if ($entities[0] == $column_name)  					{ diff --git a/phpBB/phpbb/di/extension/config.php b/phpBB/phpbb/di/extension/config.php index 403c9d50e7..a7d7284f85 100644 --- a/phpBB/phpbb/di/extension/config.php +++ b/phpBB/phpbb/di/extension/config.php @@ -15,8 +15,6 @@ namespace phpbb\di\extension;  use Symfony\Component\DependencyInjection\ContainerBuilder;  use Symfony\Component\HttpKernel\DependencyInjection\Extension; -use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; -use Symfony\Component\Config\FileLocator;  /**  * Container config extension @@ -34,7 +32,7 @@ class config extends Extension  	* @param array            $config    An array of configuration values  	* @param ContainerBuilder $container A ContainerBuilder instance  	* -	* @throws InvalidArgumentException When provided tag is not defined in this extension +	* @throws \InvalidArgumentException When provided tag is not defined in this extension  	*/  	public function load(array $config, ContainerBuilder $container)  	{ @@ -68,7 +66,7 @@ class config extends Extension  	* Convert 3.0 ACM type to 3.1 cache driver class name  	*  	* @param string $acm_type ACM type -	* @return cache driver class +	* @return string cache driver class  	*/  	protected function convert_30_acm_type($acm_type)  	{ diff --git a/phpBB/phpbb/di/extension/core.php b/phpBB/phpbb/di/extension/core.php index 72026f3b54..ca4fa5c082 100644 --- a/phpBB/phpbb/di/extension/core.php +++ b/phpBB/phpbb/di/extension/core.php @@ -45,7 +45,7 @@ class core extends Extension  	* @param array            $config    An array of configuration values  	* @param ContainerBuilder $container A ContainerBuilder instance  	* -	* @throws InvalidArgumentException When provided tag is not defined in this extension +	* @throws \InvalidArgumentException When provided tag is not defined in this extension  	*/  	public function load(array $config, ContainerBuilder $container)  	{ diff --git a/phpBB/phpbb/di/extension/ext.php b/phpBB/phpbb/di/extension/ext.php index 1205dffb53..718c992d2e 100644 --- a/phpBB/phpbb/di/extension/ext.php +++ b/phpBB/phpbb/di/extension/ext.php @@ -39,7 +39,7 @@ class ext extends Extension  	* @param array            $config    An array of configuration values  	* @param ContainerBuilder $container A ContainerBuilder instance  	* -	* @throws InvalidArgumentException When provided tag is not defined in this extension +	* @throws \InvalidArgumentException When provided tag is not defined in this extension  	*/  	public function load(array $config, ContainerBuilder $container)  	{ diff --git a/phpBB/phpbb/di/pass/kernel_pass.php b/phpBB/phpbb/di/pass/kernel_pass.php index 44d4fcd07f..c154c7532d 100644 --- a/phpBB/phpbb/di/pass/kernel_pass.php +++ b/phpBB/phpbb/di/pass/kernel_pass.php @@ -23,6 +23,7 @@ class kernel_pass implements CompilerPassInterface  	*  	* @param ContainerBuilder $container ContainerBuilder object  	* @return null +	* @throws \InvalidArgumentException  	*/  	public function process(ContainerBuilder $container)  	{ diff --git a/phpBB/phpbb/event/recursive_event_filter_iterator.php b/phpBB/phpbb/event/recursive_event_filter_iterator.php index f65feff448..64e2e56f6a 100644 --- a/phpBB/phpbb/event/recursive_event_filter_iterator.php +++ b/phpBB/phpbb/event/recursive_event_filter_iterator.php @@ -39,7 +39,8 @@ class recursive_event_filter_iterator extends \RecursiveFilterIterator  	*  	* @return recursive_event_filter_iterator  	*/ -	public function getChildren() { +	public function getChildren() +	{  		return new self($this->getInnerIterator()->getChildren(), $this->root_path);  	} diff --git a/phpBB/phpbb/extension/manager.php b/phpBB/phpbb/extension/manager.php index b83bb1b189..52d9395c82 100644 --- a/phpBB/phpbb/extension/manager.php +++ b/phpBB/phpbb/extension/manager.php @@ -148,7 +148,7 @@ class manager  	* Instantiates the metadata manager for the extension with the given name  	*  	* @param string $name The extension name -	* @param string $template The template manager +	* @param \phpbb\template\template $template The template manager  	* @return \phpbb\extension\metadata_manager Instance of the metadata manager  	*/  	public function create_extension_metadata_manager($name, \phpbb\template\template $template) diff --git a/phpBB/phpbb/extension/metadata_manager.php b/phpBB/phpbb/extension/metadata_manager.php index 5c4e8fbf00..014d8c79c7 100644 --- a/phpBB/phpbb/extension/metadata_manager.php +++ b/phpBB/phpbb/extension/metadata_manager.php @@ -90,11 +90,11 @@ class metadata_manager  	}  	/** -	 * Processes and gets the metadata requested -	 * -	 * @param  string $element			All for all metadata that it has and is valid, otherwise specify which section you want by its shorthand term. -	 * @return array					Contains all of the requested metadata, throws an exception on failure -	 */ +	* Processes and gets the metadata requested +	* +	* @param  string $element			All for all metadata that it has and is valid, otherwise specify which section you want by its shorthand term. +	* @return array					Contains all of the requested metadata, throws an exception on failure +	*/  	public function get_metadata($element = 'all')  	{  		$this->set_metadata_file(); @@ -136,10 +136,10 @@ class metadata_manager  	}  	/** -	 * Sets the filepath of the metadata file -	 * -	 * @return boolean  Set to true if it exists, throws an exception on failure -	 */ +	* Sets the filepath of the metadata file +	* +	* @throws \phpbb\extension\exception +	*/  	private function set_metadata_file()  	{  		$ext_filepath = $this->extension_manager->get_extension_path($this->ext_name); @@ -154,10 +154,11 @@ class metadata_manager  	}  	/** -	 * Gets the contents of the composer.json file -	 * -	 * @return bool True if success, throws an exception on failure -	 */ +	* Gets the contents of the composer.json file +	* +	* @return bool True if success, throws an exception on failure +	* @throws \phpbb\extension\exception +	*/  	private function fetch_metadata()  	{  		if (!file_exists($this->metadata_file)) @@ -183,10 +184,10 @@ class metadata_manager  	}  	/** -	 * This array handles the cleaning of the array -	 * -	 * @return array Contains the cleaned metadata array -	 */ +	* This array handles the cleaning of the array +	* +	* @return array Contains the cleaned metadata array +	*/  	private function clean_metadata_array()  	{  		return $this->metadata; @@ -199,6 +200,7 @@ class metadata_manager  	* 						"display" for name, type, and authors  	* 						"name", "type")  	* @return Bool True if valid, throws an exception if invalid +	* @throws \phpbb\extension\exception  	*/  	public function validate($name = 'display')  	{ @@ -247,10 +249,11 @@ class metadata_manager  	}  	/** -	 * Validates the contents of the authors field -	 * -	 * @return boolean True when passes validation, throws exception if invalid -	 */ +	* Validates the contents of the authors field +	* +	* @return boolean True when passes validation, throws exception if invalid +	* @throws \phpbb\extension\exception +	*/  	public function validate_authors()  	{  		if (empty($this->metadata['authors'])) @@ -270,10 +273,10 @@ class metadata_manager  	}  	/** -	 * This array handles the verification that this extension can be enabled on this board -	 * -	 * @return bool True if validation succeeded, False if failed -	 */ +	* This array handles the verification that this extension can be enabled on this board +	* +	* @return bool True if validation succeeded, False if failed +	*/  	public function validate_enable()  	{  		// Check for valid directory & phpBB, PHP versions @@ -286,10 +289,10 @@ class metadata_manager  	}  	/** -	 * Validates the most basic directory structure to ensure it follows <vendor>/<ext> convention. -	 * -	 * @return boolean True when passes validation -	 */ +	* Validates the most basic directory structure to ensure it follows <vendor>/<ext> convention. +	* +	* @return boolean True when passes validation +	*/  	public function validate_dir()  	{  		return (substr_count($this->ext_name, '/') === 1 && $this->ext_name == $this->get_metadata('name')); @@ -297,10 +300,10 @@ class metadata_manager  	/** -	 * Validates the contents of the phpbb requirement field -	 * -	 * @return boolean True when passes validation -	 */ +	* Validates the contents of the phpbb requirement field +	* +	* @return boolean True when passes validation +	*/  	public function validate_require_phpbb()  	{  		if (!isset($this->metadata['require']['phpbb/phpbb'])) @@ -312,10 +315,10 @@ class metadata_manager  	}  	/** -	 * Validates the contents of the php requirement field -	 * -	 * @return boolean True when passes validation -	 */ +	* Validates the contents of the php requirement field +	* +	* @return boolean True when passes validation +	*/  	public function validate_require_php()  	{  		if (!isset($this->metadata['require']['php'])) @@ -348,10 +351,10 @@ class metadata_manager  	}  	/** -	 * Outputs the metadata into the template -	 * -	 * @return null -	 */ +	* Outputs the metadata into the template +	* +	* @return null +	*/  	public function output_template_data()  	{  		$this->template->assign_vars(array( diff --git a/phpBB/phpbb/extension/provider.php b/phpBB/phpbb/extension/provider.php index e1d854df64..1c42cf7b5e 100644 --- a/phpBB/phpbb/extension/provider.php +++ b/phpBB/phpbb/extension/provider.php @@ -58,7 +58,7 @@ abstract class provider implements \IteratorAggregate  	/**  	* Retrieve an iterator over all items  	* -	* @return ArrayIterator An iterator for the array of template paths +	* @return \ArrayIterator An iterator for the array of template paths  	*/  	public function getIterator()  	{ diff --git a/phpBB/phpbb/feed/base.php b/phpBB/phpbb/feed/base.php index 36ecbbcc2e..e31854160a 100644 --- a/phpBB/phpbb/feed/base.php +++ b/phpBB/phpbb/feed/base.php @@ -70,15 +70,14 @@ abstract class base  	/**  	* Constructor  	* -	* @param \phpbb\feed\helper $helper Feed helper -	* @param \phpbb\config\config		$config		Config object +	* @param \phpbb\feed\helper					$helper		Feed helper +	* @param \phpbb\config\config				$config		Config object  	* @param \phpbb\db\driver\driver_interface	$db			Database connection -	* @param \phpbb\cache\driver\driver_interface	$cache			Cache object -	* @param \phpbb\user			$user		User object -	* @param \phpbb\auth\auth			$auth		Auth object -	* @param \phpbb\content_visibility	$content_visibility		Auth object -	* @param string				$phpEx		php file extension -	* @return	null +	* @param \phpbb\cache\driver\driver_interface	$cache	Cache object +	* @param \phpbb\user						$user		User object +	* @param \phpbb\auth\auth					$auth		Auth object +	* @param \phpbb\content_visibility			$content_visibility		Auth object +	* @param string								$phpEx		php file extension  	*/  	function __construct(\phpbb\feed\helper $helper, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\cache\driver\driver_interface $cache, \phpbb\user $user, \phpbb\auth\auth $auth, \phpbb\content_visibility $content_visibility, $phpEx)  	{ @@ -133,6 +132,9 @@ abstract class base  	/**  	* Set key +	* +	* @param string $key Key +	* @param mixed $value Value  	*/  	function set($key, $value)  	{ @@ -141,6 +143,9 @@ abstract class base  	/**  	* Get key +	* +	* @param string $key Key +	* @return mixed  	*/  	function get($key)  	{ diff --git a/phpBB/phpbb/feed/factory.php b/phpBB/phpbb/feed/factory.php index 84b4d5d560..f364f06d03 100644 --- a/phpBB/phpbb/feed/factory.php +++ b/phpBB/phpbb/feed/factory.php @@ -13,6 +13,8 @@  namespace phpbb\feed; +use Symfony\Component\DependencyInjection\ContainerInterface; +  /**  * Factory class to return correct object  */ @@ -20,7 +22,7 @@ class factory  {  	/**  	* Service container object -	* @var object +	* @var ContainerInterface  	*/  	protected $container; @@ -33,12 +35,11 @@ class factory  	/**  	* Constructor  	* -	* @param objec				$container	Container object -	* @param \phpbb\config\config		$config		Config object +	* @param ContainerInterface					$container	Container object +	* @param \phpbb\config\config				$config		Config object  	* @param \phpbb\db\driver\driver_interface	$db			Database connection -	* @return	null  	*/ -	public function __construct($container, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db) +	public function __construct(ContainerInterface $container, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db)  	{  		$this->container = $container;  		$this->config = $config; diff --git a/phpBB/phpbb/feed/helper.php b/phpBB/phpbb/feed/helper.php index ed78f4893e..9741b752af 100644 --- a/phpBB/phpbb/feed/helper.php +++ b/phpBB/phpbb/feed/helper.php @@ -36,7 +36,7 @@ class helper  	* @param	\phpbb\config\config	$config		Config object  	* @param	\phpbb\user		$user		User object  	* @param	string	$phpbb_root_path	Root path -	* @return	null +	* @param	string	$phpEx				PHP extension  	*/  	public function __construct(\phpbb\config\config $config, \phpbb\user $user, $phpbb_root_path, $phpEx)  	{ diff --git a/phpBB/phpbb/feed/post_base.php b/phpBB/phpbb/feed/post_base.php index fe11fd2a79..011775b6af 100644 --- a/phpBB/phpbb/feed/post_base.php +++ b/phpBB/phpbb/feed/post_base.php @@ -48,8 +48,8 @@ abstract class post_base extends \phpbb\feed\attachments_base  		{  			$item_row['statistics'] = $this->user->lang['POSTED'] . ' ' . $this->user->lang['POST_BY_AUTHOR'] . ' ' . $this->user_viewprofile($row)  				. ' ' . $this->separator_stats . ' ' . $this->user->format_date($row[$this->get('published')]) -				. (($this->is_moderator_approve_forum($row['forum_id']) && (int)$row['post_visibility'] === ITEM_UNAPPROVED) ? ' ' . $this->separator_stats . ' ' . $this->user->lang['POST_UNAPPROVED'] : '') -				. (($this->is_moderator_approve_forum($row['forum_id']) && (int)$row['post_visibility'] === ITEM_DELETED) ? ' ' . $this->separator_stats . ' ' . $this->user->lang['POST_DELETED'] : ''); +				. (($this->is_moderator_approve_forum($row['forum_id']) && (int) $row['post_visibility'] === ITEM_UNAPPROVED) ? ' ' . $this->separator_stats . ' ' . $this->user->lang['POST_UNAPPROVED'] : '') +				. (($this->is_moderator_approve_forum($row['forum_id']) && (int) $row['post_visibility'] === ITEM_DELETED) ? ' ' . $this->separator_stats . ' ' . $this->user->lang['POST_DELETED'] : '');  		}  	}  } diff --git a/phpBB/phpbb/feed/topic_base.php b/phpBB/phpbb/feed/topic_base.php index 4fbb498272..f9ff368cba 100644 --- a/phpBB/phpbb/feed/topic_base.php +++ b/phpBB/phpbb/feed/topic_base.php @@ -52,11 +52,11 @@ abstract class topic_base extends \phpbb\feed\attachments_base  			if ($this->is_moderator_approve_forum($row['forum_id']))  			{ -				if ( (int)$row['topic_visibility'] === ITEM_DELETED) +				if ((int) $row['topic_visibility'] === ITEM_DELETED)  				{  					$item_row['statistics'] .= ' ' . $this->separator_stats . ' ' . $this->user->lang['TOPIC_DELETED'];  				} -				else if ((int)$row['topic_visibility'] === ITEM_UNAPPROVED) +				else if ((int) $row['topic_visibility'] === ITEM_UNAPPROVED)  				{  					$item_row['statistics'] .= ' ' . $this->separator_stats . ' ' . $this->user->lang['TOPIC_UNAPPROVED'];  				} diff --git a/phpBB/phpbb/groupposition/legend.php b/phpBB/phpbb/groupposition/legend.php index af903e363e..efea3389d4 100644 --- a/phpBB/phpbb/groupposition/legend.php +++ b/phpBB/phpbb/groupposition/legend.php @@ -53,7 +53,9 @@ class legend implements \phpbb\groupposition\groupposition_interface  	/**  	* Returns the group_legend for a given group, if the group exists.  	* -	* {@inheritDoc} +	* @param	int		$group_id	group_id of the group to be selected +	* @return	int			position of the group +	* @throws \phpbb\groupposition\exception  	*/  	public function get_group_value($group_id)  	{ @@ -76,7 +78,7 @@ class legend implements \phpbb\groupposition\groupposition_interface  	/**  	* Get number of groups, displayed on the legend  	* -	* {@inheritDoc} +	* @return	int		value of the last item displayed  	*/  	public function get_group_count()  	{ @@ -91,8 +93,6 @@ class legend implements \phpbb\groupposition\groupposition_interface  	}  	/** -	* Adds a group by group_id -	*  	* {@inheritDoc}  	*/  	public function add_group($group_id) @@ -118,7 +118,9 @@ class legend implements \phpbb\groupposition\groupposition_interface  	/**  	* Deletes a group by setting the field to self::GROUP_DISABLED and closing the gap in the list.  	* -	* {@inheritDoc} +	* @param	int		$group_id		group_id of the group to be deleted +	* @param	bool	$skip_group		Skip setting the value for this group, to save the query, when you need to update it anyway. +	* @return	bool		True if the group was deleted successfully  	*/  	public function delete_group($group_id, $skip_group = false)  	{ @@ -150,8 +152,6 @@ class legend implements \phpbb\groupposition\groupposition_interface  	}  	/** -	* Moves a group up by group_id -	*  	* {@inheritDoc}  	*/  	public function move_up($group_id) @@ -160,8 +160,6 @@ class legend implements \phpbb\groupposition\groupposition_interface  	}  	/** -	* Moves a group down by group_id -	*  	* {@inheritDoc}  	*/  	public function move_down($group_id) @@ -170,8 +168,6 @@ class legend implements \phpbb\groupposition\groupposition_interface  	}  	/** -	* Moves a group up/down -	*  	* {@inheritDoc}  	*/  	public function move($group_id, $delta) diff --git a/phpBB/phpbb/groupposition/teampage.php b/phpBB/phpbb/groupposition/teampage.php index 3e675549bf..2985c51525 100644 --- a/phpBB/phpbb/groupposition/teampage.php +++ b/phpBB/phpbb/groupposition/teampage.php @@ -65,7 +65,9 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	/**  	* Returns the teampage position for a given group, if the group exists.  	* -	* {@inheritDoc} +	* @param	int		$group_id	group_id of the group to be selected +	* @return	int			position of the group +	* @throws \phpbb\groupposition\exception  	*/  	public function get_group_value($group_id)  	{ @@ -93,6 +95,7 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	*  	* @param	int		$group_id	group_id of the group to be selected  	* @return	array			Data row of the group +	* @throws \phpbb\groupposition\exception  	*/  	public function get_group_values($group_id)  	{ @@ -120,6 +123,7 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	*  	* @param	int		$teampage_id	Teampage_id of the selected item  	* @return	int			Teampage position of the item +	* @throws \phpbb\groupposition\exception  	*/  	public function get_teampage_value($teampage_id)  	{ @@ -144,6 +148,7 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	*  	* @param	int		$teampage_id	Teampage_id of the selected item  	* @return	array			Teampage row of the item +	* @throws \phpbb\groupposition\exception  	*/  	public function get_teampage_values($teampage_id)  	{ @@ -165,8 +170,6 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	/** -	* Get number of items displayed -	*  	* {@inheritDoc}  	*/  	public function get_group_count() @@ -182,8 +185,6 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	}  	/** -	* Adds a group by group_id -	*  	* {@inheritDoc}  	*/  	public function add_group($group_id) @@ -288,7 +289,9 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	/**  	* Deletes a group from the list and closes the gap in the position list.  	* -	* {@inheritDoc} +	* @param	int		$group_id		group_id of the group to be deleted +	* @param	bool	$skip_group		Skip setting the value for this group, to save the query, when you need to update it anyway. +	* @return	bool		True if the group was deleted successfully  	*/  	public function delete_group($group_id, $skip_group = false)  	{ @@ -347,8 +350,6 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	}  	/** -	* Moves a group up by group_id -	*  	* {@inheritDoc}  	*/  	public function move_up($group_id) @@ -359,7 +360,7 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	/**  	* Moves an item up by teampage_id  	* -	* @param	int		$group_id	group_id of the group to be moved +	* @param	int		$teampage_id	teampage_id of the item to be move  	* @return	bool		True if the group was moved successfully  	*/  	public function move_up_teampage($teampage_id) @@ -368,8 +369,6 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	}  	/** -	* Moves a group down by group_id -	*  	* {@inheritDoc}  	*/  	public function move_down($group_id) @@ -378,9 +377,9 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	}  	/** -	* Movesan item down by teampage_id +	* Moves an item down by teampage_id  	* -	* @param	int		$group_id	group_id of the group to be moved +	* @param	int		$teampage_id	teampage_id of the item to be moved  	* @return	bool		True if the group was moved successfully  	*/  	public function move_down_teampage($teampage_id) @@ -389,8 +388,6 @@ class teampage implements \phpbb\groupposition\groupposition_interface  	}  	/** -	* Moves a group up/down -	*  	* {@inheritDoc}  	*/  	public function move($group_id, $delta) diff --git a/phpBB/phpbb/lock/db.php b/phpBB/phpbb/lock/db.php index e3c7e97792..85ba9a7aa3 100644 --- a/phpBB/phpbb/lock/db.php +++ b/phpBB/phpbb/lock/db.php @@ -54,8 +54,8 @@ class db  	*  	* You have to call acquire() to actually create the lock.  	* -	* @param	string	$config_name	A config variable to be used for locking -	* @param	array	$config			The phpBB configuration +	* @param	string								$config_name	A config variable to be used for locking +	* @param	\phpbb\config\config				$config			The phpBB configuration  	* @param	\phpbb\db\driver\driver_interface	$db				A database connection  	*/  	public function __construct($config_name, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db) diff --git a/phpBB/phpbb/log/log.php b/phpBB/phpbb/log/log.php index 10efe5fd1c..bf0bfe0ae1 100644 --- a/phpBB/phpbb/log/log.php +++ b/phpBB/phpbb/log/log.php @@ -70,7 +70,7 @@ class log implements \phpbb\log\log_interface  	/**  	* Event dispatcher object -	* @var phpbb_dispatcher +	* @var \phpbb\event\dispatcher  	*/  	protected $dispatcher; @@ -103,7 +103,6 @@ class log implements \phpbb\log\log_interface  	* @param	string		$relative_admin_path	Relative admin root path  	* @param	string		$php_ext			PHP Extension  	* @param	string		$log_table		Name of the table we use to store our logs -	* @return	null  	*/  	public function __construct($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, $relative_admin_path, $php_ext, $log_table)  	{ @@ -159,8 +158,6 @@ class log implements \phpbb\log\log_interface  	}  	/** -	* This function returns the state of the log system. -	*  	* {@inheritDoc}  	*/  	public function is_enabled($type = '') @@ -173,12 +170,6 @@ class log implements \phpbb\log\log_interface  	}  	/** -	* Disable log -	* -	* This function allows disabling the log system or parts of it, for this -	* page call. When add_log is called and the type is disabled, -	* the log will not be added to the database. -	*  	* {@inheritDoc}  	*/  	public function disable($type = '') @@ -201,10 +192,6 @@ class log implements \phpbb\log\log_interface  	}  	/** -	* Enable log -	* -	* This function allows re-enabling the log system. -	*  	* {@inheritDoc}  	*/  	public function enable($type = '') @@ -227,8 +214,6 @@ class log implements \phpbb\log\log_interface  	}  	/** -	* Adds a log to the database -	*  	* {@inheritDoc}  	*/  	public function add($mode, $user_id, $log_ip, $log_operation, $log_time = false, $additional_data = array()) @@ -425,8 +410,6 @@ class log implements \phpbb\log\log_interface  	}  	/** -	* Grab the logs from the database -	*  	* {@inheritDoc}  	*/  	public function get_logs($mode, $count_logs = true, $limit = 0, $offset = 0, $forum_id = 0, $topic_id = 0, $user_id = 0, $log_time = 0, $sort_by = 'l.log_time DESC', $keywords = '') @@ -863,8 +846,6 @@ class log implements \phpbb\log\log_interface  	}  	/** -	* Get total log count -	*  	* {@inheritDoc}  	*/  	public function get_log_count() @@ -873,8 +854,6 @@ class log implements \phpbb\log\log_interface  	}  	/** -	* Get offset of the last valid log page -	*  	* {@inheritDoc}  	*/  	public function get_valid_offset() diff --git a/phpBB/phpbb/message/admin_form.php b/phpBB/phpbb/message/admin_form.php index b71b3fc535..93db59880c 100644 --- a/phpBB/phpbb/message/admin_form.php +++ b/phpBB/phpbb/message/admin_form.php @@ -1,9 +1,13 @@  <?php  /**  * -* @package message -* @copyright (c) 2014 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* 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.  *  */ @@ -12,8 +16,6 @@ namespace phpbb\message;  /**  * Class admin_form  * Displays a message to the user and allows him to send an email -* -* @package phpbb\message  */  class admin_form extends form  { diff --git a/phpBB/phpbb/message/form.php b/phpBB/phpbb/message/form.php index d7a42c4080..076b41dc07 100644 --- a/phpBB/phpbb/message/form.php +++ b/phpBB/phpbb/message/form.php @@ -1,9 +1,13 @@  <?php  /**  * -* @package message -* @copyright (c) 2014 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* 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.  *  */ @@ -11,8 +15,6 @@ namespace phpbb\message;  /**  * Abstract class form -* -* @package phpbb\message  */  abstract class form  { diff --git a/phpBB/phpbb/message/message.php b/phpBB/phpbb/message/message.php index 182995ba21..5fd24b542e 100644 --- a/phpBB/phpbb/message/message.php +++ b/phpBB/phpbb/message/message.php @@ -1,9 +1,13 @@  <?php  /**  * -* @package message -* @copyright (c) 2014 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* 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.  *  */ @@ -12,8 +16,6 @@ namespace phpbb\message;  /**  * Class message  * Holds all information for an email and sends it in the end -* -* @package phpbb\message  */  class message  { @@ -106,7 +108,7 @@ class message  	/**  	* Add a recipient from \phpbb\user  	* -	* @param \phpbb\user $user +	* @param array $user  	* @return null  	*/  	public function add_recipient_from_user_row(array $user) @@ -231,7 +233,7 @@ class message  	* Send the email  	*  	* @param \messenger $messenger -	* @param string $phpEx +	* @param string $contact  	* @return null  	*/  	public function send(\messenger $messenger, $contact) diff --git a/phpBB/phpbb/message/topic_form.php b/phpBB/phpbb/message/topic_form.php index 3a35c35d21..1e0f2a1945 100644 --- a/phpBB/phpbb/message/topic_form.php +++ b/phpBB/phpbb/message/topic_form.php @@ -1,9 +1,13 @@  <?php  /**  * -* @package message -* @copyright (c) 2014 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* 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.  *  */ @@ -12,8 +16,6 @@ namespace phpbb\message;  /**  * Class topic_form  * Form used to send topics as notification emails -* -* @package phpbb\message  */  class topic_form extends form  { diff --git a/phpBB/phpbb/message/user_form.php b/phpBB/phpbb/message/user_form.php index 7aa4b94def..007e575407 100644 --- a/phpBB/phpbb/message/user_form.php +++ b/phpBB/phpbb/message/user_form.php @@ -1,9 +1,13 @@  <?php  /**  * -* @package message -* @copyright (c) 2014 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* 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.  *  */ @@ -12,8 +16,6 @@ namespace phpbb\message;  /**  * Class user_form  * Allows users to send emails to other users -* -* @package phpbb\message  */  class user_form extends form  { diff --git a/phpBB/phpbb/mimetype/content_guesser.php b/phpBB/phpbb/mimetype/content_guesser.php index 7c0177b57b..9c83e8dd73 100644 --- a/phpBB/phpbb/mimetype/content_guesser.php +++ b/phpBB/phpbb/mimetype/content_guesser.php @@ -16,7 +16,7 @@ namespace phpbb\mimetype;  class content_guesser extends guesser_base  {  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_supported()  	{ @@ -24,7 +24,7 @@ class content_guesser extends guesser_base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function guess($file, $file_name = '')  	{ diff --git a/phpBB/phpbb/mimetype/extension_guesser.php b/phpBB/phpbb/mimetype/extension_guesser.php index 74bfeb97b6..9e36c07f91 100644 --- a/phpBB/phpbb/mimetype/extension_guesser.php +++ b/phpBB/phpbb/mimetype/extension_guesser.php @@ -470,7 +470,7 @@ class extension_guesser extends guesser_base  	);  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_supported()  	{ @@ -478,7 +478,7 @@ class extension_guesser extends guesser_base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function guess($file, $file_name = '')  	{ diff --git a/phpBB/phpbb/mimetype/guesser.php b/phpBB/phpbb/mimetype/guesser.php index 6eb924b584..87b164b561 100644 --- a/phpBB/phpbb/mimetype/guesser.php +++ b/phpBB/phpbb/mimetype/guesser.php @@ -21,7 +21,7 @@ class guesser  	const PRIORITY_DEFAULT = 0;  	/** -	* @var mimetype guessers +	* @var array guessers  	*/  	protected $guessers; diff --git a/phpBB/phpbb/mimetype/guesser_base.php b/phpBB/phpbb/mimetype/guesser_base.php index f26f207aff..225dfd57dc 100644 --- a/phpBB/phpbb/mimetype/guesser_base.php +++ b/phpBB/phpbb/mimetype/guesser_base.php @@ -21,7 +21,7 @@ abstract class guesser_base implements guesser_interface  	protected $priority;  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_priority()  	{ @@ -29,7 +29,7 @@ abstract class guesser_base implements guesser_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function set_priority($priority)  	{ diff --git a/phpBB/phpbb/notification/manager.php b/phpBB/phpbb/notification/manager.php index b787b624f6..74ef980445 100644 --- a/phpBB/phpbb/notification/manager.php +++ b/phpBB/phpbb/notification/manager.php @@ -13,6 +13,8 @@  namespace phpbb\notification; +use Symfony\Component\DependencyInjection\ContainerInterface; +  /**  * Notifications service class  */ @@ -24,7 +26,7 @@ class manager  	/** @var array */  	protected $notification_methods; -	/** @var ContainerBuilder */ +	/** @var ContainerInterface */  	protected $phpbb_container;  	/** @var \phpbb\user_loader */ @@ -62,7 +64,7 @@ class manager  	*  	* @param array $notification_types  	* @param array $notification_methods -	* @param ContainerBuilder $phpbb_container +	* @param ContainerInterface $phpbb_container  	* @param \phpbb\user_loader $user_loader  	* @param \phpbb\config\config $config  	* @param \phpbb\db\driver\driver_interface $db @@ -74,7 +76,7 @@ class manager  	* @param string $user_notifications_table  	* @return \phpbb\notification\manager  	*/ -	public function __construct($notification_types, $notification_methods, $phpbb_container, \phpbb\user_loader $user_loader, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\cache\service $cache, $user, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table) +	public function __construct($notification_types, $notification_methods, ContainerInterface $phpbb_container, \phpbb\user_loader $user_loader, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\cache\service $cache, $user, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)  	{  		$this->notification_types = $notification_types;  		$this->notification_methods = $notification_methods; @@ -886,6 +888,7 @@ class manager  	*  	* @param string $notification_type_name The name  	* @return int the notification_type_id +	* @throws \phpbb\notification\exception  	*/  	public function get_notification_type_id($notification_type_name)  	{ diff --git a/phpBB/phpbb/pagination.php b/phpBB/phpbb/pagination.php index 1d20b7f81c..8aba41d651 100644 --- a/phpBB/phpbb/pagination.php +++ b/phpBB/phpbb/pagination.php @@ -46,7 +46,7 @@ class pagination  	*							If you use page numbers inside your controller route, start name should be the string  	*							that should be removed for the first page (example: /page/%d)  	* @param int $per_page the number of items, posts, etc. to display per page, used to determine the number of pages to produce -	* @return URL for the requested page +	* @return string URL for the requested page  	*/  	protected function generate_page_link($base_url, $on_page, $start_name, $per_page)  	{ diff --git a/phpBB/phpbb/passwords/driver/base.php b/phpBB/phpbb/passwords/driver/base.php index 1d47180e55..fd07a61bf4 100644 --- a/phpBB/phpbb/passwords/driver/base.php +++ b/phpBB/phpbb/passwords/driver/base.php @@ -15,10 +15,10 @@ namespace phpbb\passwords\driver;  abstract class base implements driver_interface  { -	/** @var phpbb\config\config */ +	/** @var \phpbb\config\config */  	protected $config; -	/** @var phpbb\passwords\driver\helper */ +	/** @var \phpbb\passwords\driver\helper */  	protected $helper;  	/** @var driver name */ @@ -37,7 +37,7 @@ abstract class base implements driver_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_supported()  	{ @@ -45,7 +45,7 @@ abstract class base implements driver_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -53,7 +53,7 @@ abstract class base implements driver_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_settings_only($hash, $full = false)  	{ diff --git a/phpBB/phpbb/passwords/driver/bcrypt.php b/phpBB/phpbb/passwords/driver/bcrypt.php index de5840c7cf..23add37a56 100644 --- a/phpBB/phpbb/passwords/driver/bcrypt.php +++ b/phpBB/phpbb/passwords/driver/bcrypt.php @@ -18,7 +18,7 @@ class bcrypt extends base  	const PREFIX = '$2a$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -26,7 +26,7 @@ class bcrypt extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $salt = '')  	{ @@ -58,7 +58,7 @@ class bcrypt extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ @@ -86,7 +86,7 @@ class bcrypt extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_settings_only($hash, $full = false)  	{ diff --git a/phpBB/phpbb/passwords/driver/bcrypt_2y.php b/phpBB/phpbb/passwords/driver/bcrypt_2y.php index 8b59037fca..c710e0d04a 100644 --- a/phpBB/phpbb/passwords/driver/bcrypt_2y.php +++ b/phpBB/phpbb/passwords/driver/bcrypt_2y.php @@ -18,7 +18,7 @@ class bcrypt_2y extends bcrypt  	const PREFIX = '$2y$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -26,7 +26,7 @@ class bcrypt_2y extends bcrypt  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_supported()  	{ diff --git a/phpBB/phpbb/passwords/driver/bcrypt_wcf2.php b/phpBB/phpbb/passwords/driver/bcrypt_wcf2.php index f706c7af69..2d6f897a7b 100644 --- a/phpBB/phpbb/passwords/driver/bcrypt_wcf2.php +++ b/phpBB/phpbb/passwords/driver/bcrypt_wcf2.php @@ -20,7 +20,7 @@ class bcrypt_wcf2 extends base  	/** @var \phpbb\passwords\driver\bcrypt */  	protected $bcrypt; -	/** @var phpbb\passwords\driver\helper */ +	/** @var \phpbb\passwords\driver\helper */  	protected $helper;  	/** @@ -36,7 +36,7 @@ class bcrypt_wcf2 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -44,7 +44,7 @@ class bcrypt_wcf2 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -52,7 +52,7 @@ class bcrypt_wcf2 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $user_row = '')  	{ @@ -61,7 +61,7 @@ class bcrypt_wcf2 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ diff --git a/phpBB/phpbb/passwords/driver/convert_password.php b/phpBB/phpbb/passwords/driver/convert_password.php index 45d84f45c0..eb70434df2 100644 --- a/phpBB/phpbb/passwords/driver/convert_password.php +++ b/phpBB/phpbb/passwords/driver/convert_password.php @@ -18,7 +18,7 @@ class convert_password extends base  	const PREFIX = '$CP$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -26,7 +26,7 @@ class convert_password extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $user_row = '')  	{ @@ -34,7 +34,7 @@ class convert_password extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ diff --git a/phpBB/phpbb/passwords/driver/driver_interface.php b/phpBB/phpbb/passwords/driver/driver_interface.php index a257e71f23..3974484f13 100644 --- a/phpBB/phpbb/passwords/driver/driver_interface.php +++ b/phpBB/phpbb/passwords/driver/driver_interface.php @@ -51,7 +51,7 @@ interface driver_interface  	*  	* @param string		$password The password to check  	* @param string		$hash The password hash to check against -	* @param string		$user_row User's row in users table +	* @param array		$user_row User's row in users table  	*  	* @return bool		True if password is correct, else false  	*/ diff --git a/phpBB/phpbb/passwords/driver/helper.php b/phpBB/phpbb/passwords/driver/helper.php index 85019bd5c9..2b3ebce53a 100644 --- a/phpBB/phpbb/passwords/driver/helper.php +++ b/phpBB/phpbb/passwords/driver/helper.php @@ -16,7 +16,7 @@ namespace phpbb\passwords\driver;  class helper  {  	/** -	* @var phpbb\config\config +	* @var \phpbb\config\config  	*/  	protected $config; @@ -29,7 +29,7 @@ class helper  	/**  	* Construct a driver helper object  	* -	* @param phpbb\config\config $config phpBB configuration +	* @param \phpbb\config\config $config phpBB configuration  	*/  	public function __construct(\phpbb\config\config $config)  	{ diff --git a/phpBB/phpbb/passwords/driver/md5_mybb.php b/phpBB/phpbb/passwords/driver/md5_mybb.php index 0745bceb5e..61ea8dafd8 100644 --- a/phpBB/phpbb/passwords/driver/md5_mybb.php +++ b/phpBB/phpbb/passwords/driver/md5_mybb.php @@ -18,7 +18,7 @@ class md5_mybb extends base  	const PREFIX = '$md5_mybb$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -26,7 +26,7 @@ class md5_mybb extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -34,7 +34,7 @@ class md5_mybb extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $user_row = '')  	{ @@ -43,7 +43,7 @@ class md5_mybb extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ diff --git a/phpBB/phpbb/passwords/driver/md5_phpbb2.php b/phpBB/phpbb/passwords/driver/md5_phpbb2.php index de1993e8a1..86a4b62ea5 100644 --- a/phpBB/phpbb/passwords/driver/md5_phpbb2.php +++ b/phpBB/phpbb/passwords/driver/md5_phpbb2.php @@ -23,10 +23,10 @@ class md5_phpbb2 extends base  	/** @var \phpbb\passwords\driver\salted_md5 */  	protected $salted_md5; -	/** @var phpBB root path */ +	/** @var string phpBB root path */  	protected $phpbb_root_path; -	/** @var php file extension */ +	/** @var string php file extension */  	protected $php_ext;  	/** @@ -46,7 +46,7 @@ class md5_phpbb2 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -54,7 +54,7 @@ class md5_phpbb2 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -62,7 +62,7 @@ class md5_phpbb2 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $user_row = '')  	{ @@ -71,7 +71,7 @@ class md5_phpbb2 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ diff --git a/phpBB/phpbb/passwords/driver/md5_vb.php b/phpBB/phpbb/passwords/driver/md5_vb.php index 440b9e39e9..c83c32a596 100644 --- a/phpBB/phpbb/passwords/driver/md5_vb.php +++ b/phpBB/phpbb/passwords/driver/md5_vb.php @@ -18,7 +18,7 @@ class md5_vb extends base  	const PREFIX = '$md5_vb$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -26,7 +26,7 @@ class md5_vb extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -34,7 +34,7 @@ class md5_vb extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $user_row = '')  	{ @@ -43,7 +43,7 @@ class md5_vb extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ diff --git a/phpBB/phpbb/passwords/driver/phpass.php b/phpBB/phpbb/passwords/driver/phpass.php index 44d9dc8fab..bef8355276 100644 --- a/phpBB/phpbb/passwords/driver/phpass.php +++ b/phpBB/phpbb/passwords/driver/phpass.php @@ -18,7 +18,7 @@ class phpass extends salted_md5  	const PREFIX = '$P$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ diff --git a/phpBB/phpbb/passwords/driver/salted_md5.php b/phpBB/phpbb/passwords/driver/salted_md5.php index b5f59754e1..97a2b9154b 100644 --- a/phpBB/phpbb/passwords/driver/salted_md5.php +++ b/phpBB/phpbb/passwords/driver/salted_md5.php @@ -46,7 +46,7 @@ class salted_md5 extends base  	const PREFIX = '$H$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -54,7 +54,7 @@ class salted_md5 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -62,7 +62,7 @@ class salted_md5 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $setting = '')  	{ @@ -98,7 +98,7 @@ class salted_md5 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ @@ -160,7 +160,7 @@ class salted_md5 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_settings_only($hash, $full = false)  	{ diff --git a/phpBB/phpbb/passwords/driver/sha1.php b/phpBB/phpbb/passwords/driver/sha1.php index 5d6c93f6a8..0852fd32fc 100644 --- a/phpBB/phpbb/passwords/driver/sha1.php +++ b/phpBB/phpbb/passwords/driver/sha1.php @@ -18,7 +18,7 @@ class sha1 extends base  	const PREFIX = '$sha1$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -26,7 +26,7 @@ class sha1 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -34,7 +34,7 @@ class sha1 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $user_row = '')  	{ @@ -43,7 +43,7 @@ class sha1 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ diff --git a/phpBB/phpbb/passwords/driver/sha1_smf.php b/phpBB/phpbb/passwords/driver/sha1_smf.php index 3e3322d77f..ec64bd6afb 100644 --- a/phpBB/phpbb/passwords/driver/sha1_smf.php +++ b/phpBB/phpbb/passwords/driver/sha1_smf.php @@ -18,7 +18,7 @@ class sha1_smf extends base  	const PREFIX = '$smf$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -26,7 +26,7 @@ class sha1_smf extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -34,7 +34,7 @@ class sha1_smf extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $user_row = '')  	{ @@ -42,7 +42,7 @@ class sha1_smf extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ diff --git a/phpBB/phpbb/passwords/driver/sha1_wcf1.php b/phpBB/phpbb/passwords/driver/sha1_wcf1.php index 04a69705e9..919fa2bb71 100644 --- a/phpBB/phpbb/passwords/driver/sha1_wcf1.php +++ b/phpBB/phpbb/passwords/driver/sha1_wcf1.php @@ -18,7 +18,7 @@ class sha1_wcf1 extends base  	const PREFIX = '$wcf1$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -26,7 +26,7 @@ class sha1_wcf1 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -34,7 +34,7 @@ class sha1_wcf1 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $user_row = '')  	{ @@ -43,7 +43,7 @@ class sha1_wcf1 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ diff --git a/phpBB/phpbb/passwords/driver/sha_xf1.php b/phpBB/phpbb/passwords/driver/sha_xf1.php index 7ae0b90f51..7a1ea1450a 100644 --- a/phpBB/phpbb/passwords/driver/sha_xf1.php +++ b/phpBB/phpbb/passwords/driver/sha_xf1.php @@ -18,7 +18,7 @@ class sha_xf1 extends base  	const PREFIX = '$xf1$';  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_prefix()  	{ @@ -26,7 +26,7 @@ class sha_xf1 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function is_legacy()  	{ @@ -34,7 +34,7 @@ class sha_xf1 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function hash($password, $user_row = '')  	{ @@ -43,7 +43,7 @@ class sha_xf1 extends base  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function check($password, $hash, $user_row = array())  	{ diff --git a/phpBB/phpbb/passwords/helper.php b/phpBB/phpbb/passwords/helper.php index c6c5fb6d02..c2a49202cd 100644 --- a/phpBB/phpbb/passwords/helper.php +++ b/phpBB/phpbb/passwords/helper.php @@ -60,7 +60,7 @@ class helper  			$data[$type] .= ($data[$type] !== '$') ? '\\' : '';  			$data[$type] .= str_replace('$', '', $value);  		} -		elseif ($type == 'settings') +		else if ($type == 'settings')  		{  			$data[$type] .= ($data[$type] !== '$') ? '$' : '';  			$data[$type] .= $value; diff --git a/phpBB/phpbb/passwords/manager.php b/phpBB/phpbb/passwords/manager.php index 0a349c4a14..fbb49d86a0 100644 --- a/phpBB/phpbb/passwords/manager.php +++ b/phpBB/phpbb/passwords/manager.php @@ -39,23 +39,23 @@ class manager  	/**  	* Passwords helper -	* @var phpbb\passwords\helper +	* @var \phpbb\passwords\helper  	*/  	protected $helper;  	/**  	* phpBB configuration -	* @var phpbb\config\config +	* @var \phpbb\config\config  	*/  	protected $config;  	/**  	* Construct a passwords object  	* -	* @param phpbb\config\config $config phpBB configuration +	* @param \phpbb\config\config $config phpBB configuration  	* @param array $hashing_algorithms Hashing driver  	*			service collection -	* @param phpbb\passwords\helper $helper Passwords helper object +	* @param \phpbb\passwords\helper $helper Passwords helper object  	* @param string $defaults List of default driver types  	*/  	public function __construct(\phpbb\config\config $config, $hashing_algorithms, helper $helper, $defaults) @@ -89,7 +89,7 @@ class manager  	/**  	* Fill algorithm type map  	* -	* @param phpbb\di\service_collection $hashing_algorithms +	* @param \phpbb\di\service_collection $hashing_algorithms  	*/  	protected function fill_type_map($hashing_algorithms)  	{ diff --git a/phpBB/phpbb/path_helper.php b/phpBB/phpbb/path_helper.php index 0d83e7447e..a5314d2ce1 100644 --- a/phpBB/phpbb/path_helper.php +++ b/phpBB/phpbb/path_helper.php @@ -317,7 +317,7 @@ class path_helper  	*  	* @param string $url URL to append parameters to  	* @param array $new_params Parameters to add in the form of array(name => value) -	* @param string $is_amp Is the parameter separator &. Defaults to true. +	* @param bool $is_amp Is the parameter separator &. Defaults to true.  	* @return string Returns the new URL.  	*/  	public function append_url_params($url, $new_params, $is_amp = true) diff --git a/phpBB/phpbb/permissions.php b/phpBB/phpbb/permissions.php index 72d85cb094..3f51016c93 100644 --- a/phpBB/phpbb/permissions.php +++ b/phpBB/phpbb/permissions.php @@ -32,7 +32,6 @@ class permissions  	*  	* @param	\phpbb\event\dispatcher	$phpbb_dispatcher	Event dispatcher  	* @param	\phpbb\user				$user				User Object -	* @return	null  	*/  	public function __construct(\phpbb\event\dispatcher $phpbb_dispatcher, \phpbb\user $user)  	{ diff --git a/phpBB/phpbb/plupload/plupload.php b/phpBB/phpbb/plupload/plupload.php index 99278d40df..c610d49a63 100644 --- a/phpBB/phpbb/plupload/plupload.php +++ b/phpBB/phpbb/plupload/plupload.php @@ -69,8 +69,6 @@ class plupload  	* @param \phpbb\user $user  	* @param \phpbb\php\ini $php_ini  	* @param \phpbb\mimetype\guesser $mimetype_guesser -	* -	* @return null  	*/  	public function __construct($phpbb_root_path, \phpbb\config\config $config, \phpbb\request\request_interface $request, \phpbb\user $user, \phpbb\php\ini $php_ini, \phpbb\mimetype\guesser $mimetype_guesser)  	{ diff --git a/phpBB/phpbb/profilefields/type/type_base.php b/phpBB/phpbb/profilefields/type/type_base.php index 3ca1274458..c770a0d93c 100644 --- a/phpBB/phpbb/profilefields/type/type_base.php +++ b/phpBB/phpbb/profilefields/type/type_base.php @@ -39,7 +39,6 @@ abstract class type_base implements type_interface  	* @param	\phpbb\request\request		$request	Request object  	* @param	\phpbb\template\template	$template	Template object  	* @param	\phpbb\user					$user		User object -	* @param	string		$language_table		Table where the language strings are stored  	*/  	public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)  	{ diff --git a/phpBB/phpbb/profilefields/type/type_bool.php b/phpBB/phpbb/profilefields/type/type_bool.php index 8d3c0cad93..eb8d3e47d6 100644 --- a/phpBB/phpbb/profilefields/type/type_bool.php +++ b/phpBB/phpbb/profilefields/type/type_bool.php @@ -46,7 +46,6 @@ class type_bool extends type_base  	* @param	\phpbb\request\request		$request	Request object  	* @param	\phpbb\template\template	$template	Template object  	* @param	\phpbb\user					$user		User object -	* @param	string		$language_table		Table where the language strings are stored  	*/  	public function __construct(\phpbb\profilefields\lang_helper $lang_helper, \phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)  	{ diff --git a/phpBB/phpbb/profilefields/type/type_date.php b/phpBB/phpbb/profilefields/type/type_date.php index aedd6a56d6..158eec6a0c 100644 --- a/phpBB/phpbb/profilefields/type/type_date.php +++ b/phpBB/phpbb/profilefields/type/type_date.php @@ -39,7 +39,6 @@ class type_date extends type_base  	* @param	\phpbb\request\request		$request	Request object  	* @param	\phpbb\template\template	$template	Template object  	* @param	\phpbb\user					$user		User object -	* @param	string		$language_table		Table where the language strings are stored  	*/  	public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)  	{ diff --git a/phpBB/phpbb/profilefields/type/type_dropdown.php b/phpBB/phpbb/profilefields/type/type_dropdown.php index 053a02d593..52c9fcf86a 100644 --- a/phpBB/phpbb/profilefields/type/type_dropdown.php +++ b/phpBB/phpbb/profilefields/type/type_dropdown.php @@ -46,7 +46,6 @@ class type_dropdown extends type_base  	* @param	\phpbb\request\request		$request	Request object  	* @param	\phpbb\template\template	$template	Template object  	* @param	\phpbb\user					$user		User object -	* @param	string		$language_table		Table where the language strings are stored  	*/  	public function __construct(\phpbb\profilefields\lang_helper $lang_helper, \phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)  	{ diff --git a/phpBB/phpbb/profilefields/type/type_googleplus.php b/phpBB/phpbb/profilefields/type/type_googleplus.php new file mode 100644 index 0000000000..df1bcc7f4b --- /dev/null +++ b/phpBB/phpbb/profilefields/type/type_googleplus.php @@ -0,0 +1,58 @@ +<?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. +* +*/ + +namespace phpbb\profilefields\type; + +class type_googleplus extends type_string +{ +	/** +	* {@inheritDoc} +	*/ +	public function get_service_name() +	{ +		return 'profilefields.type.googleplus'; +	} + +	/** +	* {@inheritDoc} +	*/ +	public function get_default_option_values() +	{ +		return array( +			'field_length'			=> 20, +			'field_minlen'			=> 3, +			'field_maxlen'			=> 255, +			'field_validation'		=> '[\w]+', +			'field_novalue'			=> '', +			'field_default_value'	=> '', +		); +	} + +	/** +	* {@inheritDoc} +	*/ +	public function get_profile_contact_value($field_value, $field_data) +	{ +		if (!$field_value && !$field_data['field_show_novalue']) +		{ +			return null; +		} + +		if (!is_numeric($field_value)) +		{ +			$field_value = '+' . $field_value; +		} + +		return $field_value; +	} +} diff --git a/phpBB/phpbb/profilefields/type/type_int.php b/phpBB/phpbb/profilefields/type/type_int.php index 8cbcf62b8c..78f1c7d2c9 100644 --- a/phpBB/phpbb/profilefields/type/type_int.php +++ b/phpBB/phpbb/profilefields/type/type_int.php @@ -39,7 +39,6 @@ class type_int extends type_base  	* @param	\phpbb\request\request		$request	Request object  	* @param	\phpbb\template\template	$template	Template object  	* @param	\phpbb\user					$user		User object -	* @param	string		$language_table		Table where the language strings are stored  	*/  	public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)  	{ diff --git a/phpBB/phpbb/profilefields/type/type_string.php b/phpBB/phpbb/profilefields/type/type_string.php index 7e994d700b..67befc457d 100644 --- a/phpBB/phpbb/profilefields/type/type_string.php +++ b/phpBB/phpbb/profilefields/type/type_string.php @@ -39,7 +39,6 @@ class type_string extends type_string_common  	* @param	\phpbb\request\request		$request	Request object  	* @param	\phpbb\template\template	$template	Template object  	* @param	\phpbb\user					$user		User object -	* @param	string		$language_table		Table where the language strings are stored  	*/  	public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)  	{ diff --git a/phpBB/phpbb/profilefields/type/type_string_common.php b/phpBB/phpbb/profilefields/type/type_string_common.php index 7d0cb04d7c..b48e3c5add 100644 --- a/phpBB/phpbb/profilefields/type/type_string_common.php +++ b/phpBB/phpbb/profilefields/type/type_string_common.php @@ -20,7 +20,9 @@ abstract class type_string_common extends type_base  		'NUMBERS_ONLY'		=> '[0-9]+',  		'ALPHA_ONLY'		=> '[\w]+',  		'ALPHA_UNDERSCORE'	=> '[\w_]+', +		'ALPHA_DOTS'        => '[\w.]+',  		'ALPHA_SPACERS'		=> '[\w_\+\. \-\[\]]+', +		'ALPHA_PUNCTUATION' => '[a-zA-Z][\w\.,\-_]+',  	);  	/** diff --git a/phpBB/phpbb/profilefields/type/type_text.php b/phpBB/phpbb/profilefields/type/type_text.php index 856573292f..bacf60a213 100644 --- a/phpBB/phpbb/profilefields/type/type_text.php +++ b/phpBB/phpbb/profilefields/type/type_text.php @@ -39,7 +39,6 @@ class type_text extends type_string_common  	* @param	\phpbb\request\request		$request	Request object  	* @param	\phpbb\template\template	$template	Template object  	* @param	\phpbb\user					$user		User object -	* @param	string		$language_table		Table where the language strings are stored  	*/  	public function __construct(\phpbb\request\request $request, \phpbb\template\template $template, \phpbb\user $user)  	{ diff --git a/phpBB/phpbb/search/fulltext_native.php b/phpBB/phpbb/search/fulltext_native.php index f7b1751a51..2fbff57990 100644 --- a/phpBB/phpbb/search/fulltext_native.php +++ b/phpBB/phpbb/search/fulltext_native.php @@ -1485,7 +1485,6 @@ class fulltext_native extends \phpbb\search\base  		{  			case 'sqlite':  			case 'sqlite3': -			case 'firebird':  				$this->db->sql_query('DELETE FROM ' . SEARCH_WORDLIST_TABLE);  				$this->db->sql_query('DELETE FROM ' . SEARCH_WORDMATCH_TABLE);  				$this->db->sql_query('DELETE FROM ' . SEARCH_RESULTS_TABLE); diff --git a/phpBB/phpbb/search/fulltext_postgres.php b/phpBB/phpbb/search/fulltext_postgres.php index 49d528c8ba..bdb5a86009 100644 --- a/phpBB/phpbb/search/fulltext_postgres.php +++ b/phpBB/phpbb/search/fulltext_postgres.php @@ -263,12 +263,12 @@ class fulltext_postgres extends \phpbb\search\base  					$this->search_query .= $word . ' ';  					$this->tsearch_query .= '&' . substr($word, 1) . ' ';  				} -				elseif (strpos($word, '-') === 0) +				else if (strpos($word, '-') === 0)  				{  					$this->search_query .= $word . ' ';  					$this->tsearch_query .= '&!' . substr($word, 1) . ' ';  				} -				elseif (strpos($word, '|') === 0) +				else if (strpos($word, '|') === 0)  				{  					$this->search_query .= $word . ' ';  					$this->tsearch_query .= '|' . substr($word, 1) . ' '; diff --git a/phpBB/phpbb/search/fulltext_sphinx.php b/phpBB/phpbb/search/fulltext_sphinx.php index c6c636562e..9008af338b 100644 --- a/phpBB/phpbb/search/fulltext_sphinx.php +++ b/phpBB/phpbb/search/fulltext_sphinx.php @@ -693,7 +693,7 @@ class fulltext_sphinx  	{  		if ($mode == 'edit')  		{ -			$this->sphinx->UpdateAttributes($this->indexes, array('forum_id', 'poster_id'), array((int)$post_id => array((int)$forum_id, (int)$poster_id))); +			$this->sphinx->UpdateAttributes($this->indexes, array('forum_id', 'poster_id'), array((int) $post_id => array((int) $forum_id, (int) $poster_id)));  		}  		else if ($mode != 'post' && $post_id)  		{ @@ -718,7 +718,7 @@ class fulltext_sphinx  			$post_time = time();  			while ($row = $this->db->sql_fetchrow($result))  			{ -				$post_updates[(int)$row['post_id']] = array($post_time); +				$post_updates[(int) $row['post_id']] = array($post_time);  			}  			$this->db->sql_freeresult($result); diff --git a/phpBB/phpbb/symfony_request.php b/phpBB/phpbb/symfony_request.php index 62e155aa23..bf9ddec493 100644 --- a/phpBB/phpbb/symfony_request.php +++ b/phpBB/phpbb/symfony_request.php @@ -20,7 +20,7 @@ class symfony_request extends Request  	/**  	* Constructor  	* -	* @param phpbb\request\request_interface $phpbb_request +	* @param \phpbb\request\request_interface $phpbb_request  	*/  	public function __construct(\phpbb\request\request_interface $phpbb_request)  	{ diff --git a/phpBB/phpbb/template/context.php b/phpBB/phpbb/template/context.php index 8df6c8b492..0a32879943 100644 --- a/phpBB/phpbb/template/context.php +++ b/phpBB/phpbb/template/context.php @@ -55,6 +55,7 @@ class context  	*  	* @param string $varname Variable name  	* @param string $varval Value to assign to variable +	* @return true  	*/  	public function assign_var($varname, $varval)  	{ @@ -70,6 +71,7 @@ class context  	*  	* @param string $varname Variable name  	* @param string $varval Value to append to variable +	* @return true  	*/  	public function append_var($varname, $varval)  	{ @@ -117,6 +119,7 @@ class context  	*  	* @param string $blockname Name of block to assign $vararray to  	* @param array $vararray A hash of variable name => value pairs +	* @return true  	*/  	public function assign_block_vars($blockname, array $vararray)  	{ @@ -206,6 +209,7 @@ class context  	*  	* @param string $blockname Name of block to assign $block_vars_array to  	* @param array $block_vars_array An array of hashes of variable name => value pairs +	* @return true  	*/  	public function assign_block_vars_array($blockname, array $block_vars_array)  	{ @@ -374,6 +378,7 @@ class context  	* Reset/empty complete block  	*  	* @param string $blockname Name of block to destroy +	* @return true  	*/  	public function destroy_block_vars($blockname)  	{ diff --git a/phpBB/phpbb/template/template.php b/phpBB/phpbb/template/template.php index 374f9e9359..041ecb12e4 100644 --- a/phpBB/phpbb/template/template.php +++ b/phpBB/phpbb/template/template.php @@ -175,6 +175,7 @@ interface template  	/**  	* Get path to template for handle (required for BBCode parser)  	* +	* @param string $handle Handle to retrieve the source file  	* @return string  	*/  	public function get_source_file_for_handle($handle); diff --git a/phpBB/phpbb/template/twig/environment.php b/phpBB/phpbb/template/twig/environment.php index d71c02967c..8d25153e14 100644 --- a/phpBB/phpbb/template/twig/environment.php +++ b/phpBB/phpbb/template/twig/environment.php @@ -40,7 +40,7 @@ class environment extends \Twig_Environment  	* @param \phpbb\path_helper  	* @param \phpbb\extension\manager  	* @param string $phpbb_root_path -	* @param Twig_LoaderInterface $loader +	* @param \Twig_LoaderInterface $loader  	* @param array $options Array of options to pass to Twig  	*/  	public function __construct($phpbb_config, \phpbb\path_helper $path_helper, \phpbb\extension\manager $extension_manager = null, \Twig_LoaderInterface $loader = null, $options = array()) @@ -122,7 +122,7 @@ class environment extends \Twig_Environment  	* Set the namespace look up order to load templates from  	*  	* @param array $namespace -	* @return Twig_Environment +	* @return \Twig_Environment  	*/  	public function setNamespaceLookUpOrder($namespace)  	{ @@ -132,12 +132,13 @@ class environment extends \Twig_Environment  	}  	/** -	 * Loads a template by name. -	 * -	 * @param string  $name  The template name -	 * @param integer $index The index if it is an embedded template -	 * @return Twig_TemplateInterface A template instance representing the given template name -	 */ +	* Loads a template by name. +	* +	* @param string  $name  The template name +	* @param integer $index The index if it is an embedded template +	* @return \Twig_TemplateInterface A template instance representing the given template name +	* @throws \Twig_Error_Loader +	*/  	public function loadTemplate($name, $index = null)  	{  		if (strpos($name, '@') === false) @@ -168,11 +169,12 @@ class environment extends \Twig_Environment  	}  	/** -	 * Finds a template by name. -	 * -	 * @param string  $name  The template name -	 * @return string -	 */ +	* Finds a template by name. +	* +	* @param string  $name  The template name +	* @return string +	* @throws \Twig_Error_Loader +	*/  	public function findTemplate($name)  	{  		if (strpos($name, '@') === false) @@ -188,7 +190,7 @@ class environment extends \Twig_Environment  					return parent::getLoader()->getCacheKey('@' . $namespace . '/' . $name);  				} -				catch (Twig_Error_Loader $e) +				catch (\Twig_Error_Loader $e)  				{  				}  			} diff --git a/phpBB/phpbb/template/twig/extension.php b/phpBB/phpbb/template/twig/extension.php index a357db30a5..8f523684dd 100644 --- a/phpBB/phpbb/template/twig/extension.php +++ b/phpBB/phpbb/template/twig/extension.php @@ -127,7 +127,7 @@ class extension extends \Twig_Extension  	/**  	* Grabs a subset of a loop  	* -	* @param Twig_Environment $env          A Twig_Environment instance +	* @param \Twig_Environment $env          A Twig_Environment instance  	* @param mixed            $item         A variable  	* @param integer          $start        Start of the subset  	* @param integer          $end   	     End of the subset diff --git a/phpBB/phpbb/template/twig/loader.php b/phpBB/phpbb/template/twig/loader.php index 851eb9ddd0..2f8ffaa776 100644 --- a/phpBB/phpbb/template/twig/loader.php +++ b/phpBB/phpbb/template/twig/loader.php @@ -24,7 +24,7 @@ class loader extends \Twig_Loader_Filesystem  	* Set safe directories  	*  	* @param array $directories Array of directories that are safe (empty to clear) -	* @return Twig_Loader_Filesystem +	* @return \Twig_Loader_Filesystem  	*/  	public function setSafeDirectories($directories = array())  	{ @@ -45,7 +45,7 @@ class loader extends \Twig_Loader_Filesystem  	* Add safe directory  	*  	* @param string $directory Directory that should be added -	* @return Twig_Loader_Filesystem +	* @return \Twig_Loader_Filesystem  	*/  	public function addSafeDirectory($directory)  	{ @@ -110,7 +110,7 @@ class loader extends \Twig_Loader_Filesystem  			// Try validating the name (which may throw an exception)  			parent::validateName($name);  		} -		catch (Twig_Error_Loader $e) +		catch (\Twig_Error_Loader $e)  		{  			if (strpos($e->getRawMessage(), 'Looks like you try to load a template outside configured directories') === 0)  			{ diff --git a/phpBB/phpbb/template/twig/node/definenode.php b/phpBB/phpbb/template/twig/node/definenode.php index fe336d4129..695ec4281f 100644 --- a/phpBB/phpbb/template/twig/node/definenode.php +++ b/phpBB/phpbb/template/twig/node/definenode.php @@ -23,10 +23,10 @@ class definenode extends \Twig_Node  	}  	/** -	 * Compiles the node to PHP. -	 * -	 * @param Twig_Compiler A Twig_Compiler instance -	 */ +	* Compiles the node to PHP. +	* +	* @param \Twig_Compiler A Twig_Compiler instance +	*/  	public function compile(\Twig_Compiler $compiler)  	{  		$compiler->addDebugInfo($this); diff --git a/phpBB/phpbb/template/twig/node/event.php b/phpBB/phpbb/template/twig/node/event.php index b551d7a75e..8fc4ba4775 100644 --- a/phpBB/phpbb/template/twig/node/event.php +++ b/phpBB/phpbb/template/twig/node/event.php @@ -17,12 +17,12 @@ namespace phpbb\template\twig\node;  class event extends \Twig_Node  {  	/** -	 * The subdirectory in which all template listener files must be placed -	 * @var string -	 */ +	* The subdirectory in which all template listener files must be placed +	* @var string +	*/  	protected $listener_directory = 'event/'; -	/** @var Twig_Environment */ +	/** @var \Twig_Environment */  	protected $environment;  	public function __construct(\Twig_Node_Expression $expr, \phpbb\template\twig\environment $environment, $lineno, $tag = null) @@ -33,10 +33,10 @@ class event extends \Twig_Node  	}  	/** -	 * Compiles the node to PHP. -	 * -	 * @param Twig_Compiler A Twig_Compiler instance -	 */ +	* Compiles the node to PHP. +	* +	* @param \Twig_Compiler A Twig_Compiler instance +	*/  	public function compile(\Twig_Compiler $compiler)  	{  		$compiler->addDebugInfo($this); diff --git a/phpBB/phpbb/template/twig/node/includeasset.php b/phpBB/phpbb/template/twig/node/includeasset.php index c41d4d03f3..15195a226b 100644 --- a/phpBB/phpbb/template/twig/node/includeasset.php +++ b/phpBB/phpbb/template/twig/node/includeasset.php @@ -15,7 +15,7 @@ namespace phpbb\template\twig\node;  abstract class includeasset extends \Twig_Node  { -	/** @var Twig_Environment */ +	/** @var \Twig_Environment */  	protected $environment;  	public function __construct(\Twig_Node_Expression $expr, \phpbb\template\twig\environment $environment, $lineno, $tag = null) @@ -25,10 +25,10 @@ abstract class includeasset extends \Twig_Node  		parent::__construct(array('expr' => $expr), array(), $lineno, $tag);  	}  	/** -	 * Compiles the node to PHP. -	 * -	 * @param Twig_Compiler A Twig_Compiler instance -	 */ +	* Compiles the node to PHP. +	* +	* @param \Twig_Compiler A Twig_Compiler instance +	*/  	public function compile(\Twig_Compiler $compiler)  	{  		$compiler->addDebugInfo($this); @@ -74,7 +74,7 @@ abstract class includeasset extends \Twig_Node  	/**  	* Append the output code for the asset  	* -	* @param Twig_Compiler A Twig_Compiler instance +	* @param \Twig_Compiler A Twig_Compiler instance  	* @return null  	*/  	abstract protected function append_asset(\Twig_Compiler $compiler); diff --git a/phpBB/phpbb/template/twig/node/includenode.php b/phpBB/phpbb/template/twig/node/includenode.php index 141c9ffe66..42428b6106 100644 --- a/phpBB/phpbb/template/twig/node/includenode.php +++ b/phpBB/phpbb/template/twig/node/includenode.php @@ -17,10 +17,10 @@ namespace phpbb\template\twig\node;  class includenode extends \Twig_Node_Include  {  	/** -	 * Compiles the node to PHP. -	 * -	 * @param Twig_Compiler A Twig_Compiler instance -	 */ +	* Compiles the node to PHP. +	* +	* @param \Twig_Compiler A Twig_Compiler instance +	*/  	public function compile(\Twig_Compiler $compiler)  	{  		$compiler->addDebugInfo($this); diff --git a/phpBB/phpbb/template/twig/node/includephp.php b/phpBB/phpbb/template/twig/node/includephp.php index e7df11c74e..826617e8e8 100644 --- a/phpBB/phpbb/template/twig/node/includephp.php +++ b/phpBB/phpbb/template/twig/node/includephp.php @@ -17,7 +17,7 @@ namespace phpbb\template\twig\node;  class includephp extends \Twig_Node  { -	/** @var Twig_Environment */ +	/** @var \Twig_Environment */  	protected $environment;  	public function __construct(\Twig_Node_Expression $expr, \phpbb\template\twig\environment $environment, $lineno, $ignoreMissing = false, $tag = null) @@ -28,10 +28,10 @@ class includephp extends \Twig_Node  	}  	/** -	 * Compiles the node to PHP. -	 * -	 * @param Twig_Compiler A Twig_Compiler instance -	 */ +	* Compiles the node to PHP. +	* +	* @param \Twig_Compiler A Twig_Compiler instance +	*/  	public function compile(\Twig_Compiler $compiler)  	{  		$compiler->addDebugInfo($this); diff --git a/phpBB/phpbb/template/twig/node/php.php b/phpBB/phpbb/template/twig/node/php.php index de3a8a4af1..3a24513dca 100644 --- a/phpBB/phpbb/template/twig/node/php.php +++ b/phpBB/phpbb/template/twig/node/php.php @@ -16,7 +16,7 @@ namespace phpbb\template\twig\node;  class php extends \Twig_Node  { -	/** @var Twig_Environment */ +	/** @var \Twig_Environment */  	protected $environment;  	public function __construct(\Twig_Node_Text $text, \phpbb\template\twig\environment $environment, $lineno, $tag = null) @@ -27,10 +27,10 @@ class php extends \Twig_Node  	}  	/** -	 * Compiles the node to PHP. -	 * -	 * @param Twig_Compiler A Twig_Compiler instance -	 */ +	* Compiles the node to PHP. +	* +	* @param \Twig_Compiler A Twig_Compiler instance +	*/  	public function compile(\Twig_Compiler $compiler)  	{  		$compiler->addDebugInfo($this); diff --git a/phpBB/phpbb/template/twig/tokenparser/defineparser.php b/phpBB/phpbb/template/twig/tokenparser/defineparser.php index 48c4853fe8..cfee84a363 100644 --- a/phpBB/phpbb/template/twig/tokenparser/defineparser.php +++ b/phpBB/phpbb/template/twig/tokenparser/defineparser.php @@ -18,12 +18,14 @@ namespace phpbb\template\twig\tokenparser;  class defineparser extends \Twig_TokenParser  {  	/** -	 * Parses a token and returns a node. -	 * -	 * @param Twig_Token $token A Twig_Token instance -	 * -	 * @return Twig_NodeInterface A Twig_NodeInterface instance -	 */ +	* Parses a token and returns a node. +	* +	* @param \Twig_Token $token A Twig_Token instance +	* +	* @return \Twig_NodeInterface A Twig_NodeInterface instance +	* @throws \Twig_Error_Syntax +	* @throws \phpbb\template\twig\node\definenode +	*/  	public function parse(\Twig_Token $token)  	{  		$lineno = $token->getLine(); @@ -61,10 +63,10 @@ class defineparser extends \Twig_TokenParser  	}  	/** -	 * Gets the tag name associated with this token parser. -	 * -	 * @return string The tag name -	 */ +	* Gets the tag name associated with this token parser. +	* +	* @return string The tag name +	*/  	public function getTag()  	{  		return 'DEFINE'; diff --git a/phpBB/phpbb/template/twig/tokenparser/event.php b/phpBB/phpbb/template/twig/tokenparser/event.php index 05b963f3e8..4c7c8e07d9 100644 --- a/phpBB/phpbb/template/twig/tokenparser/event.php +++ b/phpBB/phpbb/template/twig/tokenparser/event.php @@ -17,12 +17,12 @@ namespace phpbb\template\twig\tokenparser;  class event extends \Twig_TokenParser  {  	/** -	 * Parses a token and returns a node. -	 * -	 * @param Twig_Token $token A Twig_Token instance -	 * -	 * @return Twig_NodeInterface A Twig_NodeInterface instance -	 */ +	* Parses a token and returns a node. +	* +	* @param \Twig_Token $token A Twig_Token instance +	* +	* @return \Twig_NodeInterface A Twig_NodeInterface instance +	*/  	public function parse(\Twig_Token $token)  	{  		$expr = $this->parser->getExpressionParser()->parseExpression(); @@ -34,10 +34,10 @@ class event extends \Twig_TokenParser  	}  	/** -	 * Gets the tag name associated with this token parser. -	 * -	 * @return string The tag name -	 */ +	* Gets the tag name associated with this token parser. +	* +	* @return string The tag name +	*/  	public function getTag()  	{  		return 'EVENT'; diff --git a/phpBB/phpbb/template/twig/tokenparser/includecss.php b/phpBB/phpbb/template/twig/tokenparser/includecss.php index c7d2bb712e..1f30811754 100644 --- a/phpBB/phpbb/template/twig/tokenparser/includecss.php +++ b/phpBB/phpbb/template/twig/tokenparser/includecss.php @@ -16,12 +16,12 @@ namespace phpbb\template\twig\tokenparser;  class includecss extends \Twig_TokenParser  {  	/** -	 * Parses a token and returns a node. -	 * -	 * @param Twig_Token $token A Twig_Token instance -	 * -	 * @return Twig_NodeInterface A Twig_NodeInterface instance -	 */ +	* Parses a token and returns a node. +	* +	* @param \Twig_Token $token A Twig_Token instance +	* +	* @return \Twig_NodeInterface A Twig_NodeInterface instance +	*/  	public function parse(\Twig_Token $token)  	{  		$expr = $this->parser->getExpressionParser()->parseExpression(); @@ -33,10 +33,10 @@ class includecss extends \Twig_TokenParser  	}  	/** -	 * Gets the tag name associated with this token parser. -	 * -	 * @return string The tag name -	 */ +	* Gets the tag name associated with this token parser. +	* +	* @return string The tag name +	*/  	public function getTag()  	{  		return 'INCLUDECSS'; diff --git a/phpBB/phpbb/template/twig/tokenparser/includejs.php b/phpBB/phpbb/template/twig/tokenparser/includejs.php index 0c32692209..4156048e42 100644 --- a/phpBB/phpbb/template/twig/tokenparser/includejs.php +++ b/phpBB/phpbb/template/twig/tokenparser/includejs.php @@ -17,12 +17,12 @@ namespace phpbb\template\twig\tokenparser;  class includejs extends \Twig_TokenParser  {  	/** -	 * Parses a token and returns a node. -	 * -	 * @param Twig_Token $token A Twig_Token instance -	 * -	 * @return Twig_NodeInterface A Twig_NodeInterface instance -	 */ +	* Parses a token and returns a node. +	* +	* @param \Twig_Token $token A Twig_Token instance +	* +	* @return \Twig_NodeInterface A Twig_NodeInterface instance +	*/  	public function parse(\Twig_Token $token)  	{  		$expr = $this->parser->getExpressionParser()->parseExpression(); @@ -34,10 +34,10 @@ class includejs extends \Twig_TokenParser  	}  	/** -	 * Gets the tag name associated with this token parser. -	 * -	 * @return string The tag name -	 */ +	* Gets the tag name associated with this token parser. +	* +	* @return string The tag name +	*/  	public function getTag()  	{  		return 'INCLUDEJS'; diff --git a/phpBB/phpbb/template/twig/tokenparser/includeparser.php b/phpBB/phpbb/template/twig/tokenparser/includeparser.php index e9f4db0890..6ee78e5562 100644 --- a/phpBB/phpbb/template/twig/tokenparser/includeparser.php +++ b/phpBB/phpbb/template/twig/tokenparser/includeparser.php @@ -18,12 +18,12 @@ namespace phpbb\template\twig\tokenparser;  class includeparser extends \Twig_TokenParser_Include  {  	/** -	 * Parses a token and returns a node. -	 * -	 * @param Twig_Token $token A Twig_Token instance -	 * -	 * @return Twig_NodeInterface A Twig_NodeInterface instance -	 */ +	* Parses a token and returns a node. +	* +	* @param \Twig_Token $token A Twig_Token instance +	* +	* @return \Twig_NodeInterface A Twig_NodeInterface instance +	*/  	public function parse(\Twig_Token $token)  	{  		$expr = $this->parser->getExpressionParser()->parseExpression(); @@ -34,10 +34,10 @@ class includeparser extends \Twig_TokenParser_Include  	}  	/** -	 * Gets the tag name associated with this token parser. -	 * -	 * @return string The tag name -	 */ +	* Gets the tag name associated with this token parser. +	* +	* @return string The tag name +	*/  	public function getTag()  	{  		return 'INCLUDE'; diff --git a/phpBB/phpbb/template/twig/tokenparser/includephp.php b/phpBB/phpbb/template/twig/tokenparser/includephp.php index f745c320c2..38196c5290 100644 --- a/phpBB/phpbb/template/twig/tokenparser/includephp.php +++ b/phpBB/phpbb/template/twig/tokenparser/includephp.php @@ -18,12 +18,12 @@ namespace phpbb\template\twig\tokenparser;  class includephp extends \Twig_TokenParser  {  	/** -	 * Parses a token and returns a node. -	 * -	 * @param Twig_Token $token A Twig_Token instance -	 * -	 * @return Twig_NodeInterface A Twig_NodeInterface instance -	 */ +	* Parses a token and returns a node. +	* +	* @param \Twig_Token $token A Twig_Token instance +	* +	* @return \Twig_NodeInterface A Twig_NodeInterface instance +	*/  	public function parse(\Twig_Token $token)  	{  		$expr = $this->parser->getExpressionParser()->parseExpression(); @@ -44,10 +44,10 @@ class includephp extends \Twig_TokenParser  	}  	/** -	 * Gets the tag name associated with this token parser. -	 * -	 * @return string The tag name -	 */ +	* Gets the tag name associated with this token parser. +	* +	* @return string The tag name +	*/  	public function getTag()  	{  		return 'INCLUDEPHP'; diff --git a/phpBB/phpbb/template/twig/tokenparser/php.php b/phpBB/phpbb/template/twig/tokenparser/php.php index 0546a2d93f..557a70cca1 100644 --- a/phpBB/phpbb/template/twig/tokenparser/php.php +++ b/phpBB/phpbb/template/twig/tokenparser/php.php @@ -17,12 +17,12 @@ namespace phpbb\template\twig\tokenparser;  class php extends \Twig_TokenParser  {  	/** -	 * Parses a token and returns a node. -	 * -	 * @param Twig_Token $token A Twig_Token instance -	 * -	 * @return Twig_NodeInterface A Twig_NodeInterface instance -	 */ +	* Parses a token and returns a node. +	* +	* @param \Twig_Token $token A Twig_Token instance +	* +	* @return \Twig_NodeInterface A Twig_NodeInterface instance +	*/  	public function parse(\Twig_Token $token)  	{  		$stream = $this->parser->getStream(); @@ -42,10 +42,10 @@ class php extends \Twig_TokenParser  	}  	/** -	 * Gets the tag name associated with this token parser. -	 * -	 * @return string The tag name -	 */ +	* Gets the tag name associated with this token parser. +	* +	* @return string The tag name +	*/  	public function getTag()  	{  		return 'PHP'; diff --git a/phpBB/phpbb/template/twig/twig.php b/phpBB/phpbb/template/twig/twig.php index bf27dd5f20..5e2057f818 100644 --- a/phpBB/phpbb/template/twig/twig.php +++ b/phpBB/phpbb/template/twig/twig.php @@ -67,7 +67,7 @@ class twig extends \phpbb\template\base  	/**  	* Twig Environment  	* -	* @var Twig_Environment +	* @var \Twig_Environment  	*/  	protected $twig; @@ -347,9 +347,7 @@ class twig extends \phpbb\template\base  	}  	/** -	* Get path to template for handle (required for BBCode parser) -	* -	* @return string +	* {@inheritdoc}  	*/  	public function get_source_file_for_handle($handle)  	{ diff --git a/phpBB/phpbb/tree/nestedset.php b/phpBB/phpbb/tree/nestedset.php index 7a26c81b0e..57d109652e 100644 --- a/phpBB/phpbb/tree/nestedset.php +++ b/phpBB/phpbb/tree/nestedset.php @@ -103,7 +103,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	*  	* @return bool	True if the lock was acquired, false if it has been acquired previously  	* -	* @throws RuntimeException If the lock could not be acquired +	* @throws \RuntimeException If the lock could not be acquired  	*/  	protected function acquire_lock()  	{ @@ -121,7 +121,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function insert(array $additional_data)  	{ @@ -176,6 +176,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	*  	* @param int	$item_id	The item to be deleted  	* @return array		Item ids that have been removed +	* @throws \OutOfBoundsException  	*/  	protected function remove_item_from_nestedset($item_id)  	{ @@ -199,7 +200,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function delete($item_id)  	{ @@ -214,7 +215,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function move($item_id, $delta)  	{ @@ -332,7 +333,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function move_down($item_id)  	{ @@ -340,7 +341,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function move_up($item_id)  	{ @@ -348,7 +349,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function move_children($current_parent_id, $new_parent_id)  	{ @@ -454,7 +455,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function change_parent($item_id, $new_parent_id)  	{ @@ -553,7 +554,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_path_and_subtree_data($item_id, $order_asc = true, $include_item = true)  	{ @@ -564,7 +565,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_path_data($item_id, $order_asc = true, $include_item = true)  	{ @@ -574,7 +575,7 @@ abstract class nestedset implements \phpbb\tree\tree_interface  	}  	/** -	* @inheritdoc +	* {@inheritdoc}  	*/  	public function get_subtree_data($item_id, $order_asc = true, $include_item = true)  	{ diff --git a/phpBB/posting.php b/phpBB/posting.php index 60bb595da6..17eac71bd3 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -1028,6 +1028,14 @@ if ($submit || $preview || $refresh)  		$error[] = $user->lang['EMPTY_SUBJECT'];  	} +	// Check for out-of-bounds characters that are currently +	// not supported by utf8_bin in MySQL +	if (preg_match_all('/[\x{10000}-\x{10FFFF}]/u', $post_data['post_subject'], $matches)) +	{ +		$character_list = implode('<br />', $matches[0]); +		$error[] = $user->lang('UNSUPPORTED_CHARACTERS_SUBJECT', $character_list); +	} +  	$post_data['poll_last_vote'] = (isset($post_data['poll_last_vote'])) ? $post_data['poll_last_vote'] : 0;  	if ($post_data['poll_option_text'] && diff --git a/phpBB/search.php b/phpBB/search.php index 91ea21909d..c01fcfede7 100644 --- a/phpBB/search.php +++ b/phpBB/search.php @@ -923,16 +923,19 @@ if ($keywords || $author || $author_id || $search_id || $submit)  		* @var	array	attachments				Array with posts attachments data  		* @var	string	hilit					String to highlight  		* @var	array	rowset					Array with the search results data +		* @var	string	show_results			String indicating the show results mode  		* @var	array	topic_tracking_info		Array with the topics tracking data  		* @var	string	u_hilit					Highlight string to be injected into URL  		* @var	string	view					Search results view mode  		* @var	array	zebra					Array with zebra data for the current user  		* @since 3.1.0-b4 +		* @changed 3.1.0-b5 Added var show_results  		*/  		$vars = array(  			'attachments',  			'hilit',  			'rowset', +			'show_results',  			'topic_tracking_info',  			'u_hilit',  			'view', @@ -1256,7 +1259,7 @@ $s_characters .= '<option value="0">0</option>';  $s_characters .= '<option value="25">25</option>';  $s_characters .= '<option value="50">50</option>'; -for ($i = 100; $i <= 1000 ; $i += 100) +for ($i = 100; $i <= 1000; $i += 100)  {  	$selected = ($i == 300) ? ' selected="selected"' : '';  	$s_characters .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>'; diff --git a/phpBB/styles/prosilver/template/forum_fn.js b/phpBB/styles/prosilver/template/forum_fn.js index 3d42439c1d..7e4875d7bc 100644 --- a/phpBB/styles/prosilver/template/forum_fn.js +++ b/phpBB/styles/prosilver/template/forum_fn.js @@ -378,39 +378,6 @@ function parse_document(container)  	});  	/** -	* Dropdowns -	*/ -	container.find('.dropdown-container').each(function() { -		var $this = $(this), -			trigger = $this.find('.dropdown-trigger:first'), -			contents = $this.find('.dropdown'), -			options = { -				direction: 'auto', -				verticalDirection: 'auto' -			}, -			data; - -		if (!trigger.length) { -			data = $this.attr('data-dropdown-trigger'); -			trigger = data ? $this.children(data) : $this.children('a:first'); -		} - -		if (!contents.length) { -			data = $this.attr('data-dropdown-contents'); -			contents = data ? $this.children(data) : $this.children('div:first'); -		} - -		if (!trigger.length || !contents.length) return; - -		if ($this.hasClass('dropdown-up')) options.verticalDirection = 'up'; -		if ($this.hasClass('dropdown-down')) options.verticalDirection = 'down'; -		if ($this.hasClass('dropdown-left')) options.direction = 'left'; -		if ($this.hasClass('dropdown-right')) options.direction = 'right'; - -		phpbb.registerDropdown(trigger, contents, options); -	}); - -	/**  	* Adjust HTML code for IE8 and older versions		  	*/  	if (oldBrowser) { diff --git a/phpBB/styles/prosilver/template/memberlist_search.html b/phpBB/styles/prosilver/template/memberlist_search.html index f4439b6934..4c14baf2b6 100644 --- a/phpBB/styles/prosilver/template/memberlist_search.html +++ b/phpBB/styles/prosilver/template/memberlist_search.html @@ -10,9 +10,9 @@  	<dl style="overflow: visible;">  		<dt><label for="username">{L_USERNAME}{L_COLON}</label></dt>  		<dd> +			<!-- IF U_LIVE_SEARCH --><div class="dropdown-container dropdown-{S_CONTENT_FLOW_END}"><!-- ENDIF -->  			<input type="text" name="username" id="username" value="{USERNAME}" class="inputbox"<!-- IF U_LIVE_SEARCH --> autocomplete="off" data-filter="phpbb.search.filter" data-ajax="member_search" data-min-length="3" data-url="{U_LIVE_SEARCH}" data-results="#user-search" data-overlay="false"<!-- ENDIF --> />  			<!-- IF U_LIVE_SEARCH --> -			<div class="dropdown-container">  				<div class="dropdown live-search hidden" id="user-search">  					<div class="pointer"><div class="pointer-inner"></div></div>  					<ul class="dropdown-contents search-results"> diff --git a/phpBB/styles/prosilver/template/navbar_footer.html b/phpBB/styles/prosilver/template/navbar_footer.html index 6912ee242e..e2259e8712 100644 --- a/phpBB/styles/prosilver/template/navbar_footer.html +++ b/phpBB/styles/prosilver/template/navbar_footer.html @@ -3,8 +3,8 @@  	<ul class="linklist bulletin">  		<li class="small-icon icon-home breadcrumbs"> -			<!-- IF U_SITE_HOME --><span class="crumb"><a href="{U_SITE_HOME}">{L_SITE_HOME}</a></span><!-- ENDIF --> -			<span class="crumb"><a href="{U_INDEX}">{L_INDEX}</a></span> +			<!-- IF U_SITE_HOME --><span class="crumb"><a href="{U_SITE_HOME}" data-navbar-reference="home">{L_SITE_HOME}</a></span><!-- ENDIF --> +			<span class="crumb"><a href="{U_INDEX}" data-navbar-reference="index">{L_INDEX}</a></span>  			<!-- EVENT overall_footer_breadcrumb_append -->  		</li>  		<!-- IF not S_IS_BOT --> diff --git a/phpBB/styles/prosilver/template/navbar_header.html b/phpBB/styles/prosilver/template/navbar_header.html index 804fa5b2aa..83fa0727ec 100644 --- a/phpBB/styles/prosilver/template/navbar_header.html +++ b/phpBB/styles/prosilver/template/navbar_header.html @@ -4,9 +4,13 @@  	<ul class="linklist navlinks">  		<!-- DEFINE $MICRODATA = ' itemtype="http://data-vocabulary.org/Breadcrumb" itemscope=""' -->  		<li class="small-icon icon-home breadcrumbs"> -			<!-- IF U_SITE_HOME --><span class="crumb"><a href="{U_SITE_HOME}"{$MICRODATA}>{L_SITE_HOME}</a></span><!-- ENDIF --> -			<span class="crumb"><a href="{U_INDEX}" accesskey="h"{$MICRODATA}>{L_INDEX}</a></span> -			<!-- BEGIN navlinks --><!-- EVENT overall_header_navlink_prepend --><span class="crumb"><a href="{navlinks.U_VIEW_FORUM}"{$MICRODATA}>{navlinks.FORUM_NAME}</a></span><!-- EVENT overall_header_navlink_append --><!-- END navlinks --> +			<!-- IF U_SITE_HOME --><span class="crumb"><a href="{U_SITE_HOME}"{$MICRODATA} data-navbar-reference="home">{L_SITE_HOME}</a></span><!-- ENDIF --> +			<span class="crumb"><a href="{U_INDEX}" accesskey="h"{$MICRODATA} data-navbar-reference="index">{L_INDEX}</a></span> +			<!-- BEGIN navlinks --> +				<!-- EVENT overall_header_navlink_prepend --> +				<span class="crumb"><a href="{navlinks.U_VIEW_FORUM}"{$MICRODATA}<!-- IF navlinks.MICRODATA --> {navlinks.MICRODATA}<!-- ENDIF -->>{navlinks.FORUM_NAME}</a></span> +				<!-- EVENT overall_header_navlink_append --> +			<!-- END navlinks -->  			<!-- EVENT overall_header_breadcrumb_append -->  		</li> @@ -17,8 +21,8 @@  	<ul class="linklist bulletin">  	<!-- IF not S_IS_BOT and S_USER_LOGGED_IN -->  		<!-- IF S_NOTIFICATIONS_DISPLAY --> -		<li class="small-icon icon-notification" data-skip-responsive="true"> -			<a href="{U_VIEW_ALL_NOTIFICATIONS}" id="notification_list_button"><span>{L_NOTIFICATIONS} [</span><strong>{NOTIFICATIONS_COUNT}</strong><span>]</span></a> +		<li class="small-icon icon-notification dropdown-container dropdown-{S_CONTENT_FLOW_END}" data-skip-responsive="true"> +			<a href="{U_VIEW_ALL_NOTIFICATIONS}" id="notification_list_button" class="dropdown-trigger"><span>{L_NOTIFICATIONS} [</span><strong>{NOTIFICATIONS_COUNT}</strong><span>]</span></a>  			<!-- INCLUDE notification_dropdown.html -->  		</li>  		<!-- ENDIF --> diff --git a/phpBB/styles/prosilver/template/overall_header.html b/phpBB/styles/prosilver/template/overall_header.html index e5371e792e..df09fc6a30 100644 --- a/phpBB/styles/prosilver/template/overall_header.html +++ b/phpBB/styles/prosilver/template/overall_header.html @@ -63,7 +63,7 @@  			<div class="inner">  			<div id="site-description"> -				<a href="<!-- IF U_SITE_HOME -->{U_SITE_HOME}<!-- ELSE -->{U_INDEX}<!-- ENDIF -->" title="<!-- IF U_SITE_HOME -->{L_SITE_HOME}<!-- ELSE -->{L_INDEX}<!-- ENDIF -->" id="logo">{SITE_LOGO_IMG}</a> +				<a id="logo" class="logo" href="<!-- IF U_SITE_HOME -->{U_SITE_HOME}<!-- ELSE -->{U_INDEX}<!-- ENDIF -->" title="<!-- IF U_SITE_HOME -->{L_SITE_HOME}<!-- ELSE -->{L_INDEX}<!-- ENDIF -->">{SITE_LOGO_IMG}</a>  				<h1>{SITENAME}</h1>  				<p>{SITE_DESCRIPTION}</p>  				<p class="skiplink"><a href="#start_here">{L_SKIP}</a></p> diff --git a/phpBB/styles/prosilver/template/posting_attach_body.html b/phpBB/styles/prosilver/template/posting_attach_body.html index 4ad66656b2..81b2c2bf41 100644 --- a/phpBB/styles/prosilver/template/posting_attach_body.html +++ b/phpBB/styles/prosilver/template/posting_attach_body.html @@ -23,7 +23,7 @@  	<div class="panel<!-- IF not .attach_row --> hidden<!-- ENDIF -->" id="file-list-container">  		<div class="inner"> -			<table class="table1 zebra-list"> +			<table class="table1 zebra-list fixed-width-table">  				<thead>  					<tr>  						<th class="attach-name">{L_PLUPLOAD_FILENAME}</th> diff --git a/phpBB/styles/prosilver/theme/bidi.css b/phpBB/styles/prosilver/theme/bidi.css index 2e563a1edf..d8d568c7a5 100644 --- a/phpBB/styles/prosilver/theme/bidi.css +++ b/phpBB/styles/prosilver/theme/bidi.css @@ -20,7 +20,7 @@  /* Main blocks  ---------------------------------------- */ -.rtl #logo { +.rtl .logo {  	float: right;  	padding: 10px 10px 0 13px;  } @@ -343,7 +343,7 @@ ul.linklist li.small-icon > a, ul.linklist li.breadcrumbs span:first-child > a {  .rtl ul.topiclist.missing-column dt {  	margin-right: 0; -	margin-left: -330px; +	margin-left: -345px;  }  .rtl ul.topiclist.two-long-columns dt { @@ -376,10 +376,6 @@ ul.linklist li.small-icon > a, ul.linklist li.breadcrumbs span:first-child > a {  	margin-left: 80px;  } -.rtl ul.topiclist dl { -	position: static;	/* fix for IE6 */ -} -  .rtl ul.topiclist dd {  	float: right;  	border-right-width: 1px; @@ -432,10 +428,6 @@ ul.linklist li.small-icon > a, ul.linklist li.breadcrumbs span:first-child > a {  	padding-right: 45px;					/* Space for folder icon */  } -.rtl dl.icon dt {							/* fix for topic row icon links */ -	position: relative; -} -  .rtl dl a.icon-link {						/* topic row icon links */  	display: inline-block;  	left: auto; @@ -645,6 +637,19 @@ ul.linklist li.small-icon > a, ul.linklist li.breadcrumbs span:first-child > a {  	margin-right: 0;  } +/* Poster contact icons + ----------------------------------------*/ +.rtl .contact-icons a { +	border-left-width: 1px; +	border-left-style: dotted; +	border-right: none; +	float: right; +} + +.rtl .contact-icons .last-cell { +	border-left: none; +} +  /**  * cp.css  */ @@ -757,6 +762,15 @@ ul.linklist li.small-icon > a, ul.linklist li.breadcrumbs span:first-child > a {  	float: right;  } +/* Responsive *CP navigation +----------------------------------------*/ +@media only screen and (max-width: 900px), only screen and (max-device-width: 900px) +{ +	.rtl #cp-menu, .rtl #navigation, .rtl #cp-main { +		float: none; +	} +} +  /**  * forms.css  */ @@ -904,10 +918,6 @@ ul.linklist li.small-icon > a, ul.linklist li.breadcrumbs span:first-child > a {  }  /* Former imageset */ -.rtl .imageset.site_logo { -	padding-right: 139px; -	padding-left: 0; -}  .rtl .imageset.forum_link, .rtl .imageset.forum_read, .rtl .imageset.forum_read_locked, .rtl .imageset.forum_read_subforum, .rtl .imageset.forum_unread, .rtl .imageset.forum_unread_locked, .rtl .imageset.forum_unread_subforum, .rtl .imageset.topic_moved, .rtl .imageset.topic_read, .rtl .imageset.topic_read_mine, .rtl .imageset.topic_read_hot, .rtl .imageset.topic_read_hot_mine, .rtl .imageset.topic_read_locked, .rtl .imageset.topic_read_locked_mine, .rtl .imageset.topic_unread, .rtl .imageset.topic_unread_mine, .rtl .imageset.topic_unread_hot, .rtl .imageset.topic_unread_hot_mine, .rtl .imageset.topic_unread_locked, .rtl .imageset.topic_unread_locked_mine, .rtl .imageset.sticky_read, .rtl .imageset.sticky_read_mine, .rtl .imageset.sticky_read_locked, .rtl .imageset.sticky_read_locked_mine, .rtl .imageset.sticky_unread, .rtl .imageset.sticky_unread_mine, .rtl .imageset.sticky_unread_locked, .rtl .imageset.sticky_unread_locked_mine, .rtl .imageset.announce_read, .rtl .imageset.announce_read_mine, .rtl .imageset.announce_read_locked, .rtl .imageset.announce_read_locked_mine, .rtl .imageset.announce_unread, .rtl .imageset.announce_unread_mine, .rtl .imageset.announce_unread_locked, .rtl .imageset.announce_unread_locked_mine, .rtl .imageset.global_read, .rtl .imageset.global_read_mine, .rtl .imageset.global_read_locked, .rtl .imageset.global_read_locked_mine, .rtl .imageset.global_unread, .rtl .imageset.global_unread_mine, .rtl .imageset.global_unread_locked, .rtl .imageset.global_unread_locked_mine, .rtl .imageset.pm_read, .rtl .imageset.pm_unread {  	padding-right: 27px;  	padding-left: 0; @@ -932,3 +942,104 @@ ul.linklist li.small-icon > a, ul.linklist li.breadcrumbs span:first-child > a {  	padding-right: 16px;  	padding-left: 0;  } + +/** +* plupload.css +*/ + +.rtl .attach-controls { +	float: left; +} + +/** +* responsive.css +*/ +@media only screen and (max-width: 700px), only screen and (max-device-width: 700px) +{ +	/* .topiclist lists +	----------------------------------------*/ +	.rtl ul.topiclist li.header dt, .rtl ul.topiclist li.header dt .list-inner { +		margin-left: 0 !important; +		padding-left: 0; +	} + +	.rtl ul.topiclist dt, .rtl ul.topiclist dt .list-inner, +	.rtl ul.topiclist.missing-column dt, .rtl ul.topiclist.missing-column dt .list-inner, +	.rtl ul.topiclist.two-long-columns dt, .rtl ul.topiclist.two-long-columns dt .list-inner, +	.rtl ul.topiclist.two-columns dt, .rtl ul.topiclist.two-columns dt .list-inner { +		margin-left: 0; +	} + +	.rtl ul.topiclist dt .list-inner.with-mark { +		padding-left: 34px; +	} + +	/* Forums and topics lists +	----------------------------------------*/ +	.rtl ul.topiclist.forums dt, .rtl ul.topiclist.topics dt { +		margin-left: -250px; +	} +	.rtl ul.topiclist.forums dt .list-inner, .rtl ul.topiclist.topics dt .list-inner { +		margin-left: 250px; +	} + +	.rtl ul.topiclist dd.mark { +		left: 5px; +		right: auto; +		text-align: right; +	} + +	@media only screen and (max-width: 550px), only screen and (max-device-width: 550px) +	{ +		.rtl ul.topiclist.forums dt, .rtl ul.topiclist.topics dt { +			margin-left: 0; +		} + +		.rtl ul.topiclist.forums dt .list-inner, .rtl ul.topiclist.topics dt .list-inner { +			margin-left: 0; +		} +	} + +	.rtl table.responsive.show-header thead, .rtl table.responsive.show-header th:first-child { +		text-align: right !important; +	} + +	.rtl table.responsive td { +		text-align: right !important; +	} + +	/* User profile +	----------------------------------------*/ +	.rtl .column1, .rtl .column2, .rtl .left-box.profile-details { +		float: none; +	} + +	@media only screen and (max-width: 500px), only screen and (max-device-width: 500px) +	{ +		.rtl dl.details dt, .rtl dl.details dd { +			float: none; +			text-align: right;	 +		} + +		.rtl dl.details dd { +			margin-left: 0; +			margin-right: 20px; +		} +	} + +	/* Post +	----------------------------------------*/ +	.rtl .postprofile, .rtl .postbody, .rtl .search .postbody { +		float: none; +	} + +	.rtl .post .postprofile { +		border-width: 0 0 1px 0; +	} + +	.rtl .postprofile .avatar { +		float: right; +		margin-left: 5px; +		margin-right: 0; +	} +} diff --git a/phpBB/styles/prosilver/theme/buttons.css b/phpBB/styles/prosilver/theme/buttons.css index 19cb547bd4..c5e97d03c4 100644 --- a/phpBB/styles/prosilver/theme/buttons.css +++ b/phpBB/styles/prosilver/theme/buttons.css @@ -143,7 +143,7 @@ ul.linklist.bulletin li.small-icon:before {  .phpbb_website-icon		{ background-position: -40px 0; }  .phpbb_youtube-icon		{ background-position: -98px 0; }  .phpbb_facebook-icon	{ background-position: -119px 0; } -.phpbb_google_plus-icon	{ background-position: -140px 0; } +.phpbb_googleplus-icon	{ background-position: -140px 0; }  .phpbb_skype-icon		{ background-position: -161px 0; }  .phpbb_twitter-icon		{ background-position: -203px 0; }  .phpbb_yahoo-icon		{ background-position: -224px 0; } diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 05eeee8849..a52f5e494d 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -196,13 +196,13 @@ ol ol ul, ol ul ul, ul ol ul, ul ul ul {  	margin-top: 20px;  } -#logo { +.logo {  	float: left;  	width: auto;  	padding: 10px 13px 0 10px;  } -a#logo:hover { +.logo:hover {  	text-decoration: none;  } diff --git a/phpBB/styles/prosilver/theme/content.css b/phpBB/styles/prosilver/theme/content.css index 9d87d3217f..0a0e853db2 100644 --- a/phpBB/styles/prosilver/theme/content.css +++ b/phpBB/styles/prosilver/theme/content.css @@ -734,14 +734,16 @@ dd.profile-contact {  .profile-contact .dropdown-container {  	display: inline-block; -	text-align: left; -	width: 30px;  }  .profile-contact .icon_contact {  	vertical-align: middle;  } +.profile-contact .dropdown { +	margin-right: -14px; +} +  .online {  	background-image: none;  	background-position: 100% 0; @@ -801,6 +803,10 @@ div.dl_links {  	white-space: nowrap;  } +table.fixed-width-table { +	table-layout: fixed; +} +  /* Show scrollbars for items with overflow on iOS devices  ----------------------------------------*/  .postbody .content::-webkit-scrollbar, #topicreview::-webkit-scrollbar, #post_details::-webkit-scrollbar, .codebox code::-webkit-scrollbar, .attachbox dd::-webkit-scrollbar, .attach-image::-webkit-scrollbar, .dropdown-extended ul::-webkit-scrollbar { diff --git a/phpBB/styles/prosilver/theme/responsive.css b/phpBB/styles/prosilver/theme/responsive.css index 7117e2c435..e27a2292b3 100644 --- a/phpBB/styles/prosilver/theme/responsive.css +++ b/phpBB/styles/prosilver/theme/responsive.css @@ -41,7 +41,7 @@ body {  	text-align: center;  } -#logo { +.logo {  	/* change display value to inline-block to show logo */  	display: none;  	float: none; @@ -457,11 +457,6 @@ p.rightside {  	margin-bottom: 0;  } -.column1, .column2 { -	width: auto; -	float: none; -} -  fieldset.quickmod {  	width: auto;  	float: none; diff --git a/phpBB/styles/subsilver2/template/breadcrumbs.html b/phpBB/styles/subsilver2/template/breadcrumbs.html index 646525c206..3aa05bc0eb 100644 --- a/phpBB/styles/subsilver2/template/breadcrumbs.html +++ b/phpBB/styles/subsilver2/template/breadcrumbs.html @@ -2,7 +2,7 @@  	<table class="tablebg" width="100%" cellspacing="1" cellpadding="0" style="margin-top: 5px;">  	<tr>  		<td class="row1"> -			<p class="breadcrumbs"><!-- IF U_SITE_HOME --><a href="{U_SITE_HOME}"{$MICRODATA}>{L_SITE_HOME}</a> <strong>»</strong> <!-- ENDIF --><a href="{U_INDEX}"{$MICRODATA}>{L_INDEX}</a><!-- BEGIN navlinks --><!-- EVENT overall_header_navlink_prepend --> » <a href="{navlinks.U_VIEW_FORUM}"{$MICRODATA}>{navlinks.FORUM_NAME}</a><!-- EVENT overall_header_navlink_append --><!-- END navlinks --> +			<p class="breadcrumbs"><!-- IF U_SITE_HOME --><a href="{U_SITE_HOME}"{$MICRODATA} data-navbar-reference="home">{L_SITE_HOME}</a> <strong>»</strong> <!-- ENDIF --><a href="{U_INDEX}"{$MICRODATA} data-navbar-reference="index">{L_INDEX}</a><!-- BEGIN navlinks --><!-- EVENT overall_header_navlink_prepend --> » <a href="{navlinks.U_VIEW_FORUM}"{$MICRODATA}<!-- IF navlinks.MICRODATA --> {navlinks.MICRODATA}<!-- ENDIF -->>{navlinks.FORUM_NAME}</a><!-- EVENT overall_header_navlink_append --><!-- END navlinks -->  			<!-- EVENT overall_header_breadcrumb_append --></p>  			<!-- EVENT overall_footer_timezone_before -->  			<p class="datetime">{S_TIMEZONE}</p> diff --git a/phpBB/styles/subsilver2/template/overall_header.html b/phpBB/styles/subsilver2/template/overall_header.html index 42f29b2445..711ce66362 100644 --- a/phpBB/styles/subsilver2/template/overall_header.html +++ b/phpBB/styles/subsilver2/template/overall_header.html @@ -156,10 +156,13 @@ function marklist(id, name, state)  	<div id="menubar">  		<table width="100%" cellspacing="0">  		<tr> -			<td class="genmed"> +			<td class="genmed dropdown-container">  				<!-- IF S_NOTIFICATIONS_DISPLAY and not S_IS_BOT and S_USER_LOGGED_IN --> -					<a href="{U_VIEW_ALL_NOTIFICATIONS}" id="notification_list_button"><img src="{T_THEME_PATH}/images/icon_mini_notification.gif" width="12" height="13" alt="*" /> {L_NOTIFICATIONS} [<strong>{NOTIFICATIONS_COUNT}</strong>]</a>  -					<div id="notification_list" class="notification_list"> +					<a href="{U_VIEW_ALL_NOTIFICATIONS}" id="notification_list_button" class="dropdown-trigger"> +						<img src="{T_THEME_PATH}/images/icon_mini_notification.gif" width="12" height="13" alt="*" /> +						{L_NOTIFICATIONS} [<strong>{NOTIFICATIONS_COUNT}</strong>] +					</a>  +					<div id="notification_list" class="notification_list dropdown">  						<div class="row1 header">  							{L_NOTIFICATIONS}  							<span class="header_settings"><a href="{U_NOTIFICATION_SETTINGS}">{L_SETTINGS}</a></span> diff --git a/tests/RUNNING_TESTS.md b/tests/RUNNING_TESTS.md index d638c86859..afd7caa709 100644 --- a/tests/RUNNING_TESTS.md +++ b/tests/RUNNING_TESTS.md @@ -32,7 +32,6 @@ will be skipped:  - apc (APC cache driver)  - bz2 (compress tests) -- interbase, pdo_firebird (Firebird database driver)  - mysql, pdo_mysql (MySQL database driver)  - mysqli, pdo_mysql (MySQLi database driver)  - pcntl (flock class) @@ -82,16 +81,10 @@ Special Database Cases  ----------------------  In order to run tests on some of the databases that we support, it will be  necessary to provide a custom DSN string in test_config.php. This is only -needed for MSSQL 2000+ (PHP module), MSSQL via ODBC, and Firebird when -PDO_Firebird does not work on your system -(https://bugs.php.net/bug.php?id=61183). The variable must be named `$custom_dsn`. +needed for MSSQL 2000+ (PHP module) and MSSQL via ODBC. The variable must be +named `$custom_dsn`. -Examples: -Firebird using http://www.firebirdsql.org/en/odbc-driver/ - -    $custom_dsn = "Driver={Firebird/InterBase(r) driver};dbname=$dbhost:$dbname"; - -MSSQL +Example MSSQL:      $custom_dsn = "Driver={SQL Server Native Client 10.0};Server=$dbhost;Database=$dbname"; diff --git a/tests/console/cron/cron_list_test.php b/tests/console/cron/cron_list_test.php index 46705a585f..f04c14e847 100644 --- a/tests/console/cron/cron_list_test.php +++ b/tests/console/cron/cron_list_test.php @@ -98,6 +98,6 @@ class phpbb_console_command_cron_list_test extends phpbb_test_case  		$this->get_cron_manager($tasks);  		$this->command_tester = $this->get_command_tester(); -		$this->command_tester->execute(array('command' => $this->command_name, '--no-ansi' => true)); +		$this->command_tester->execute(array('command' => $this->command_name), array('decorated' => false));  	}  } diff --git a/tests/content_visibility/delete_post_test.php b/tests/content_visibility/delete_post_test.php index e0a2a3d402..99068729df 100644 --- a/tests/content_visibility/delete_post_test.php +++ b/tests/content_visibility/delete_post_test.php @@ -266,7 +266,7 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case  	*/  	public function test_delete_post($forum_id, $topic_id, $post_id, $data, $is_soft, $reason, $expected_posts, $expected_topic, $expected_forum)  	{ -		global $auth, $cache, $config, $db, $phpbb_container, $phpbb_root_path, $phpEx; +		global $auth, $cache, $config, $db, $phpbb_container, $phpbb_dispatcher, $phpbb_root_path, $phpEx;  		$config['search_type'] = 'phpbb_mock_search';  		$cache = new phpbb_mock_cache; @@ -283,6 +283,8 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case  			)));  		$user = $this->getMock('\phpbb\user'); +		$phpbb_dispatcher = new phpbb_mock_event_dispatcher(); +  		$phpbb_container = new phpbb_mock_container_builder();  		$phpbb_container->set('notification_manager', new phpbb_mock_notification_manager());  		$phpbb_container->set('content.visibility', new \phpbb\content_visibility($auth, $db, $user, $phpbb_root_path, $phpEx, FORUMS_TABLE, POSTS_TABLE, TOPICS_TABLE, USERS_TABLE)); diff --git a/tests/dbal/db_tools_test.php b/tests/dbal/db_tools_test.php index 320eac3bf3..f3c6888c8d 100644 --- a/tests/dbal/db_tools_test.php +++ b/tests/dbal/db_tools_test.php @@ -239,6 +239,24 @@ class phpbb_dbal_db_tools_test extends phpbb_database_test_case  		$this->assertFalse($this->tools->sql_column_exists('prefix_table_name', 'c_bug_12012'));  	} +	public function test_column_change_with_composite_primary() +	{ +		// Remove the old primary key +		$this->assertTrue($this->tools->sql_column_remove('prefix_table_name', 'c_id')); +		$this->assertTrue($this->tools->sql_column_add('prefix_table_name', 'c_id', array('UINT', 0))); + +		// Create a composite key +		$this->assertTrue($this->tools->sql_create_primary_key('prefix_table_name', array('c_id', 'c_uint'))); + +		// Create column +		$this->assertFalse($this->tools->sql_column_exists('prefix_table_name', 'c_bug_12643')); +		$this->assertTrue($this->tools->sql_column_add('prefix_table_name', 'c_bug_12643', array('DECIMAL', 0))); +		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_bug_12643')); + +		// Change type from int to string +		$this->assertTrue($this->tools->sql_column_change('prefix_table_name', 'c_bug_12643', array('VCHAR:100', ''))); +	} +  	public function test_column_remove()  	{  		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_int_size')); @@ -248,6 +266,17 @@ class phpbb_dbal_db_tools_test extends phpbb_database_test_case  		$this->assertFalse($this->tools->sql_column_exists('prefix_table_name', 'c_int_size'));  	} +	public function test_column_remove_similar_name() +	{ +		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_vchar')); +		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_vchar_size')); + +		$this->assertTrue($this->tools->sql_column_remove('prefix_table_name', 'c_vchar')); + +		$this->assertFalse($this->tools->sql_column_exists('prefix_table_name', 'c_vchar')); +		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_vchar_size')); +	} +  	public function test_column_remove_with_index()  	{  		// Create column diff --git a/tests/functional/posting_test.php b/tests/functional/posting_test.php index 2611ef7bf1..fd802eed45 100644 --- a/tests/functional/posting_test.php +++ b/tests/functional/posting_test.php @@ -36,4 +36,27 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case  		$crawler = self::request('GET', "posting.php?mode=quote&f=2&t={$post2['topic_id']}&p={$post2['post_id']}&sid={$this->sid}");  		$this->assertContains('This is a test post posted by the testing framework.', $crawler->filter('html')->text());  	} + +	public function test_unsupported_characters() +	{ +		$this->login(); + +		$this->add_lang('posting'); + +		self::create_post(2, +			1, +			'Unsupported characters', +			"This is a test with these weird characters: \xF0\x9F\x88\xB3 \xF0\x9F\x9A\xB6", +			array(), +			'Your message contains the following unsupported characters' +		); + +		self::create_post(2, +			1, +			"Unsupported: \xF0\x9F\x88\xB3 \xF0\x9F\x9A\xB6", +			'This is a test with emoji characters in the topic title.', +			array(), +			'Your subject contains the following unsupported characters' +		); +	}  } diff --git a/tests/functional/ucp_profile_test.php b/tests/functional/ucp_profile_test.php index ea08eece78..e7abba9255 100644 --- a/tests/functional/ucp_profile_test.php +++ b/tests/functional/ucp_profile_test.php @@ -25,13 +25,25 @@ class phpbb_functional_ucp_profile_test extends phpbb_functional_test_case  		$this->assertContainsLang('UCP_PROFILE_PROFILE_INFO', $crawler->filter('#cp-main h2')->text());  		$form = $crawler->selectButton('Submit')->form(array( +			'pf_phpbb_facebook'	=> 'phpbb', +			'pf_phpbb_googleplus' => 'phpbb',  			'pf_phpbb_location'	=> 'Bertie´s Empire', +			'pf_phpbb_skype'	=> 'phpbb.skype.account', +			'pf_phpbb_twitter'	=> 'phpbb_twitter', +			'pf_phpbb_youtube' => 'phpbb.youtube',  		)); +  		$crawler = self::submit($form);  		$this->assertContainsLang('PROFILE_UPDATED', $crawler->filter('#message')->text());  		$crawler = self::request('GET', 'ucp.php?i=ucp_profile&mode=profile_info');  		$form = $crawler->selectButton('Submit')->form(); + +		$this->assertEquals('phpbb', $form->get('pf_phpbb_facebook')->getValue()); +		$this->assertEquals('phpbb', $form->get('pf_phpbb_googleplus')->getValue());  		$this->assertEquals('Bertie´s Empire', $form->get('pf_phpbb_location')->getValue()); +		$this->assertEquals('phpbb.skype.account', $form->get('pf_phpbb_skype')->getValue()); +		$this->assertEquals('phpbb_twitter', $form->get('pf_phpbb_twitter')->getValue()); +		$this->assertEquals('phpbb.youtube', $form->get('pf_phpbb_youtube')->getValue());  	}  } diff --git a/tests/functions/convert_30_dbms_to_31_test.php b/tests/functions/convert_30_dbms_to_31_test.php index 9647eb341c..a3992aef5c 100644 --- a/tests/functions/convert_30_dbms_to_31_test.php +++ b/tests/functions/convert_30_dbms_to_31_test.php @@ -18,7 +18,6 @@ class phpbb_convert_30_dbms_to_31_test extends phpbb_test_case  	public function convert_30_dbms_to_31_data()  	{  		return array( -			array('firebird'),  			array('mssql'),  			array('mssql_odbc'),  			array('mssqlnative'), diff --git a/tests/profile/custom_string_test.php b/tests/profile/custom_string_test.php deleted file mode 100644 index 9e45d05ae3..0000000000 --- a/tests/profile/custom_string_test.php +++ /dev/null @@ -1,120 +0,0 @@ -<?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/utf/utf_tools.php'; - -class phpbb_profile_custom_string_test extends phpbb_database_test_case -{ -	public function getDataSet() -	{ -		return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/profile_fields.xml'); -	} - -	static public function string_fields() -	{ -		return array( -			// note, there is an offset of 1 between option_id (0-indexed) -			// in the database and values (1-indexed) to avoid problems with -			// transmitting 0 in an HTML form -			//    required, value, validation, expected, description -			array( -					1, -					'H3110', -					'[0-9]+', -					'FIELD_INVALID_CHARS_NUMBERS_ONLY-field', -					'Required field should reject characters in a numbers-only field', -			), -			array( -					1, -					'This string is too long', -					'.*', -					'FIELD_TOO_LONG-10-field', -					'Required field should reject a field too long', -			), -			array( -					0, -					'<>"&%&><>', -					'.*', -					false, -					'Optional field should accept html entities', -			), -			array( -					1, -					'ö ä ü ß', -					'.*', -					false, -					'Required field should accept UTF-8 string', -			), -			array( -					1, -					'This ö ä string has to b', -					'.*', -					'FIELD_TOO_LONG-10-field', -					'Required field should reject an UTF-8 string which is too long', -			), -			array( -					1, -					'ö äö äö ä', -					'[\w]+', -					'FIELD_INVALID_CHARS_ALPHA_ONLY-field', -					'Required field should reject UTF-8 in alpha only field', -			), -			array( -					1, -					'Hello', -					'[\w]+', -					false, -					'Required field should accept a characters only field', -			), -		); -	} - -	/** -	* @dataProvider string_fields -	*/ -	public function test_string_validate($field_required, $field_value, $field_validation, $expected, $description) -	{ -		$db = $this->new_dbal(); - -		$field_data = array( -			'field_id'          => 1, -			'lang_id'			=> 1, -			'lang_name'			=> 'field', -			'field_novalue'		=> 1, -			'field_required'    => $field_required, -			'field_maxlen'      => 10, -			'field_validation'  => $field_validation, -		); -		$user = $this->getMock('\phpbb\user'); -		$user->expects($this->any()) -			->method('lang') -			->will($this->returnCallback(array($this, 'return_callback_implode'))); - -		$request = $this->getMock('\phpbb\request\request'); -		$template = $this->getMock('\phpbb\template\template'); - -		$cp = new \phpbb\profilefields\type\type_string( -			$request, -			$template, -			$user -		); -		$result = $cp->validate_profile_field($field_value, $field_data); - -		$this->assertEquals($expected, $result, $description); -	} - -	public function return_callback_implode() -	{ -		return implode('-', func_get_args()); -	} -} diff --git a/tests/profile/custom_test.php b/tests/profile/custom_test.php deleted file mode 100644 index 8570e8e6ee..0000000000 --- a/tests/profile/custom_test.php +++ /dev/null @@ -1,75 +0,0 @@ -<?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. -* -*/ - -class phpbb_profile_custom_test extends phpbb_database_test_case -{ -	public function getDataSet() -	{ -		return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/profile_fields.xml'); -	} - -	static public function dropdown_fields() -	{ -		return array( -			// note, there is an offset of 1 between option_id (0-indexed) -			// in the database and values (1-indexed) to avoid problems with -			// transmitting 0 in an HTML form -			//    required, value, expected -			array(1,        '0',   'FIELD_INVALID_VALUE-field',	'Required field should throw error for out-of-range value'), -			array(1,        '1',   'FIELD_REQUIRED-field',		'Required field should throw error for default value'), -			array(1,        '2',   false,						'Required field should accept non-default value'), -			array(0,        '0',   'FIELD_INVALID_VALUE-field', 'Optional field should throw error for out-of-range value'), -			array(0,        '1',   false,						'Optional field should accept default value'), -			array(0,        '2',   false,						'Optional field should accept non-default value'), -		); -	} - -	/** -	* @dataProvider dropdown_fields -	*/ -	public function test_dropdown_validate($field_required, $field_value, $expected, $description) -	{ -		global $db, $table_prefix; -		$db = $this->new_dbal(); - -		$field_data = array( -			'field_id'			=> 1, -			'lang_id'			=> 1, -			'lang_name'			=> 'field', -			'field_novalue'		=> 1, -			'field_required'	=> $field_required, -		); -		$user = $this->getMock('\phpbb\user'); -		$user->expects($this->any()) -			->method('lang') -			->will($this->returnCallback(array($this, 'return_callback_implode'))); - -		$request = $this->getMock('\phpbb\request\request'); -		$template = $this->getMock('\phpbb\template\template'); - -		$cp = new \phpbb\profilefields\type\type_dropdown( -			new \phpbb\profilefields\lang_helper($db, $table_prefix . 'profile_fields_lang'), -			$request, -			$template, -			$user -		); -		$result = $cp->validate_profile_field($field_value, $field_data); - -		$this->assertEquals($expected, $result, $description); -	} - -	public function return_callback_implode() -	{ -		return implode('-', func_get_args()); -	} -} diff --git a/tests/profile/fixtures/profile_fields.xml b/tests/profile/fixtures/profile_fields.xml deleted file mode 100644 index e0c260bbf5..0000000000 --- a/tests/profile/fixtures/profile_fields.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<dataset> -	<table name="phpbb_profile_fields_lang"> -		<column>field_id</column> -		<column>lang_id</column> -		<column>option_id</column> -		<column>field_type</column> -		<column>lang_value</column> -		<row> -			<value>1</value> -			<value>1</value> -			<value>0</value> -			<value>profilefields.type.dropdown</value> -			<value>Default Option</value> -		</row> -		<row> -			<value>1</value> -			<value>1</value> -			<value>1</value> -			<value>profilefields.type.dropdown</value> -			<value>First Alternative</value> -		</row> -		<row> -			<value>1</value> -			<value>1</value> -			<value>2</value> -			<value>profilefields.type.dropdown</value> -			<value>Third Alternative</value> -		</row> -	</table> -</dataset> diff --git a/tests/profile/get_profile_value_test.php b/tests/profile/get_profile_value_test.php deleted file mode 100644 index 7a4a4ab5c2..0000000000 --- a/tests/profile/get_profile_value_test.php +++ /dev/null @@ -1,46 +0,0 @@ -<?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. -* -*/ - -class phpbb_profile_get_profile_value_test extends phpbb_test_case -{ -	static public function get_profile_value_int_data() -	{ -		return array( -			array('\phpbb\profilefields\type\type_int',	'10',	true,	10), -			array('\phpbb\profilefields\type\type_int',	'0',	true,	0), -			array('\phpbb\profilefields\type\type_int',	'',		true,	0), -			array('\phpbb\profilefields\type\type_int',	null,	true,	0), -			array('\phpbb\profilefields\type\type_int',	'10',	false,	10), -			array('\phpbb\profilefields\type\type_int',	'0',	false,	0), -			array('\phpbb\profilefields\type\type_int',	'',		false,	null), -			array('\phpbb\profilefields\type\type_int',	null,	false,	null), -		); -	} - -	/** -	* @dataProvider get_profile_value_int_data -	*/ -	public function test_get_profile_value_int($type, $value, $show_novalue, $expected) -	{ -		$cp = new $type( -			$this->getMock('\phpbb\request\request'), -			$this->getMock('\phpbb\template\template'), -			$this->getMock('\phpbb\user') -		); - -		$this->assertSame($expected, $cp->get_profile_value($value, array( -			'field_type'			=> $type, -			'field_show_novalue'	=> $show_novalue, -		))); -	} -} diff --git a/tests/profilefields/type_bool_test.php b/tests/profilefields/type_bool_test.php new file mode 100644 index 0000000000..29c118d57d --- /dev/null +++ b/tests/profilefields/type_bool_test.php @@ -0,0 +1,147 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_bool_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options = array(); +	protected $options = array(); + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return void +	*/ +	public function setUp() +	{ +		$user = $this->getMock('\phpbb\user'); +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$lang = $this->getMock('\phpbb\profilefields\lang_helper', array(), array(null, null)); + +		$lang->expects($this->any()) +			->method('get_options_lang'); + +		$lang->expects($this->any()) +			->method('is_set') +			->will($this->returnCallback(array($this, 'is_set_callback'))); + +		$lang->expects($this->any()) +			->method('get') +			->will($this->returnCallback(array($this, 'get'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_bool( +			$lang, +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'       => '\phpbb\profilefields\type\type_bool', +			'field_name' 	   => 'field', +			'field_id'	 	   => 1, +			'lang_id'	 	   => 1, +			'lang_name'        => 'field', +			'field_required'   => false, +			'field_default_value' => 1, +			'field_length' => 1, +		); + +		$this->options = array( +			0 => 'Yes', +			1 => 'No', +		); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +					false, +					array('field_required' => true), +					'FIELD_REQUIRED-field', +					'Field should not accept empty values for required fields', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				false, +				array('field_show_novalue' => true), +				'No', +				'Field should output the default value', +			), +			array( +				false, +				array('field_show_novalue' => false, 'field_length' => 2), +				null, +				'Field should not show anything for empty value', +			), +			array( +				0, +				array(), +				'Yes', +				'Field should show the set value', +			), +		); +	} + +	/** +	 * @dataProvider profile_value_data +	 */ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function is_set_callback($field_id, $lang_id, $field_value) +	{ +		return isset($this->options[$field_value]); +	} + +	public function get($field_id, $lang_id, $field_value) +	{ +		return $this->options[$field_value]; +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/profilefields/type_date_test.php b/tests/profilefields/type_date_test.php new file mode 100644 index 0000000000..39fe95b97f --- /dev/null +++ b/tests/profilefields/type_date_test.php @@ -0,0 +1,192 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_date_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options; +	protected $user; + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		$this->user = $this->getMock('\phpbb\user'); +		$this->user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$this->user->expects($this->any()) +			->method('create_datetime') +			->will($this->returnCallback(array($this, 'create_datetime_callback'))); + +		$this->user->timezone = new DateTimeZone('UTC'); +		$this->user->lang = array( +			'datetime' => array(), +			'DATE_FORMAT' => 'm/d/Y', +		); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_date( +			$request, +			$template, +			$this->user +		); + +		$this->field_options = array( +			'field_type'     => '\phpbb\profilefields\type\type_date', +			'field_name' 	 => 'field', +			'field_id'	 	 => 1, +			'lang_id'	 	 => 1, +			'lang_name'      => 'field', +			'field_required' => false, +		); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				'01-01-2009', +				array('field_show_novalue' => true), +				'01/01/2009', +				'Field should output the correctly formatted date', +			), +			array( +				null, +				array('field_show_novalue' => false), +				null, +				'Field should leave empty value as is', +			), +			array( +				'None', +				array('field_show_novalue' => true), +				'None', +				'Field should leave invalid value as is', +			), +		); +	} + +	/** +	* @dataProvider profile_value_data +	*/ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				'', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being empty', +			), +			array( +				'0125', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being invalid', +			), +			array( +				'01-01-2012', +				array(), +				false, +				'Field should accept a valid value', +			), +			array( +				'40-05-2009', +				array(), +				'FIELD_INVALID_DATE-field', +				'Field should reject value for being invalid', +			), +			array( +				'12-30-2012', +				array(), +				'FIELD_INVALID_DATE-field', +				'Field should reject value for being invalid', +			), +			array( +				'string', +				array(), +				false, +				'Field should reject value for being invalid', +			), +			array( +				'string', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being invalid', +			), +			array( +				100, +				array(), +				false, +				'Field should reject value for being invalid', +			), +			array( +				100, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being invalid', +			), +			array( +				null, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being empty', +			), +			array( +				true, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being empty', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} + +	public function create_datetime_callback($time = 'now', \DateTimeZone $timezone = null) +	{ +		$timezone = $timezone ?: $this->user->timezone; +		return new \phpbb\datetime($this->user, $time, $timezone); +	} +} diff --git a/tests/profilefields/type_dropdown_test.php b/tests/profilefields/type_dropdown_test.php new file mode 100644 index 0000000000..0e92afd504 --- /dev/null +++ b/tests/profilefields/type_dropdown_test.php @@ -0,0 +1,187 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_dropdown_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options = array(); +	protected $dropdown_options = array(); + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		$user = $this->getMock('\phpbb\user'); +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$lang = $this->getMock('\phpbb\profilefields\lang_helper', array(), array(null, null)); + +		$lang->expects($this->any()) +			 ->method('get_options_lang'); + +		$lang->expects($this->any()) +			 ->method('is_set') +			 ->will($this->returnCallback(array($this, 'is_set_callback'))); + +		$lang->expects($this->any()) +			 ->method('get') +			 ->will($this->returnCallback(array($this, 'get'))); + +		$this->cp = new \phpbb\profilefields\type\type_dropdown( +			$lang, +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'       => '\phpbb\profilefields\type\type_dropdown', +			'field_name' 	   => 'field', +			'field_id'	 	   => 1, +			'lang_id'	 	   => 1, +			'lang_name'        => 'field', +			'field_required'   => false, +			'field_validation' => '.*', +			'field_novalue'    => 0, +		); + +		$this->dropdown_options = array( +			0 => '<No Value>', +			1 => 'Option 1', +			2 => 'Option 2', +			3 => 'Option 3', +			4 => 'Option 4', +		); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				7, +				array(), +				'FIELD_INVALID_VALUE-field', +				'Invalid value should throw error', +			), +			array( +				true, +				array('field_required' => true), +				false, +				'Boolean would evaluate to 1 and hence correct value', +			), +			array( +				'string', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'String should be rejected for value', +			), +			array( +				2, +				array(), +				false, +				'Valid value should not throw error' +			), +			array( +				0, +				array(), +				false, +				'Empty value should be acceptible', +			), +			array( +				0, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Required field should not accept empty value', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				1, +				array('field_show_novalue' => true), +				'Option 1', +				'Field should output the given value', +			), +			array( +				4, +				array('field_show_novalue' => false), +				'Option 4', +				'Field should output the given value', +			), +			array( +				'', +				array('field_show_novalue' => true), +				'<No Value>', +				'Field should output nothing for empty value', +			), +			array( +				'', +				array('field_show_novalue' => false), +				null, +				'Field should simply output null for empty value', +			), +		); +	} + + +	/** +	* @dataProvider profile_value_data +	*/ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function is_set_callback($field_id, $lang_id, $field_value) +	{ +		return isset($this->dropdown_options[$field_value]); +	} + +	public function get($field_id, $lang_id, $field_value) +	{ +		return $this->dropdown_options[$field_value]; +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/profilefields/type_googleplus_test.php b/tests/profilefields/type_googleplus_test.php new file mode 100644 index 0000000000..fdbdd86553 --- /dev/null +++ b/tests/profilefields/type_googleplus_test.php @@ -0,0 +1,62 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_googleplus_test extends phpbb_test_case +{ +	public function get_profile_contact_value_data() +	{ +		return array( +			array( +				'112010191010100', +				array(), +				'112010191010100', +				'Field should return a numerical Google+ ID as is', +			), +			array( +				'TestUsername', +				array(), +				'+TestUsername', +				'Field should return a string Google+ ID with a + prefixed', +			), +		); +	} + +	/** +	* @dataProvider get_profile_contact_value_data +	*/ +	public function test_get_profile_contact_value($value, $field_options, $expected, $description) +	{ +		$user = $this->getMock('\phpbb\user'); +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$field = new \phpbb\profilefields\type\type_googleplus( +			$request, +			$template, +			$user +		); + +		$default_field_options = array( +			'field_type'       => '\phpbb\profilefields\type\type_googleplus', +			'field_name' 	   => 'field', +			'field_id'	 	   => 1, +			'lang_id'	 	   => 1, +			'lang_name'        => 'field', +			'field_required'   => false, +			'field_validation' => '[\w]+', +		); +		$field_options = array_merge($default_field_options, $field_options); + +		$this->assertSame($expected, $field->get_profile_contact_value($value, $field_options), $description); +	} +} diff --git a/tests/profilefields/type_int_test.php b/tests/profilefields/type_int_test.php new file mode 100644 index 0000000000..611edd32b9 --- /dev/null +++ b/tests/profilefields/type_int_test.php @@ -0,0 +1,176 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_int_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options; + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		$user = $this->getMock('\phpbb\user'); +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_int( +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'     => '\phpbb\profilefields\type\type_int', +			'field_name' 	 => 'field', +			'field_id'	 	 => 1, +			'lang_id'	 	 => 1, +			'lang_name'      => 'field', +			'field_required' => false, +		); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				'10', +				array('field_show_novalue' => true), +				10, +				'Field should output integer value of given input', +			), +			array( +				'0', +				array('field_show_novalue' => true), +				0, +				'Field should output integer value of given input', +			), +			array( +				'', +				array('field_show_novalue' => true), +				0, +				'Field should translate empty value to 0 as integer', +				false, +			), +			array( +				null, +				array('field_show_novalue' => true), +				0, +				'Field should translate null value to 0 as integer', +			), +			array( +				'10', +				array('field_show_novalue' => false), +				10, +				'Field should output integer value of given input', +			), +			array( +				'0', +				array('field_show_novalue' => false), +				0, +				'Field should output integer value of given input', +			), +			array( +				'', +				array('field_show_novalue' => false), +				null, +				'Field should leave empty value as is', +			), +			array( +				null, +				array('field_show_novalue' => false), +				null, +				'Field should leave empty value as is', +			), +		); +	} + +	/** +	* @dataProvider profile_value_data +	*/ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				'15', +				array('field_minlen' => 10, 'field_maxlen' => 20, 'field_required' => true), +				false, +				'Field should accept input of correct boundaries', +			), +			array( +				'556476', +				array('field_maxlen' => 50000, 'field_required' => true), +				'FIELD_TOO_LARGE-50000-field', +				'Field should reject value of greater value than max', +			), +			array( +				'9', +				array('field_minlen' => 10, 'field_required' => true), +				'FIELD_TOO_SMALL-10-field', +				'Field should reject value which is less than defined minimum', +			), +			array( +				true, +				array('field_maxlen' => 20), +				false, +				'Field should accept correct boolean value', +			), +			array( +				'string', +				array('field_maxlen' => 10, 'field_required' => true), +				false, +				'Field should accept correct string value', +			), +			array( +				null, +				array('field_minlen' => 1, 'field_maxlen' => 10, 'field_required' => true), +				'FIELD_TOO_SMALL-1-field', +				'Field should not accept an empty value', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/profilefields/type_string_test.php b/tests/profilefields/type_string_test.php new file mode 100644 index 0000000000..cee8a1d863 --- /dev/null +++ b/tests/profilefields/type_string_test.php @@ -0,0 +1,232 @@ +<?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'; +require_once dirname(__FILE__) . '/../../phpBB/includes/functions_content.php'; +require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php'; + +class phpbb_profilefield_type_string_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options; + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		global $request, $user, $cache; + +		$user = $this->getMock('\phpbb\user'); +		$cache = new phpbb_mock_cache; +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_string( +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'       => '\phpbb\profilefields\type\type_string', +			'field_name' 	   => 'field', +			'field_id'	 	   => 1, +			'lang_id'	 	   => 1, +			'lang_name'        => 'field', +			'field_required'   => false, +			'field_validation' => '.*', +		); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				'', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should not accept empty values for required fields', +			), +			array( +				null, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should not accept empty values for required field', +			), +			array( +				0, +				array('field_required' => true), +				false, +				'Field should accept a non-empty input', +			), +			array( +				'false', +				array('field_required' => true), +				false, +				'Field should accept a non-empty input', +			), +			array( +				10, +				array('field_required' => true), +				false, +				'Field should accept a non-empty input', +			), +			array( +				'tas', +				array('field_minlen' => 2, 'field_maxlen' => 5), +				false, +				'Field should accept value of correct length', +			), +			array( +				't', +				array('field_minlen' => 2, 'field_maxlen' => 5), +				'FIELD_TOO_SHORT-2-field', +				'Field should reject value of incorrect length', +			), +			array( +				'this is a long string', +				array('field_minlen' => 2, 'field_maxlen' => 5), +				'FIELD_TOO_LONG-5-field', +				'Field should reject value of incorrect length', +			), +			array( +				'H3110', +				array('field_validation' => '[0-9]+'), +				'FIELD_INVALID_CHARS_NUMBERS_ONLY-field', +				'Required field should reject characters in a numbers-only field', +			), +			array( +				'<>"&%&><>', +				array('field_maxlen' => 10, 'field_minlen' => 2), +				false, +				'Optional field should accept html entities', +			), +			array( +				'ö ä ü ß', +				array(), +				false, +				'Required field should accept UTF-8 string', +			), +			array( +				'This ö ä string has to b', +				array('field_maxlen' => 10), +				'FIELD_TOO_LONG-10-field', +				'Required field should reject an UTF-8 string which is too long', +			), +			array( +				'ö äö äö ä', +				array('field_validation' => '[\w]+'), +				'FIELD_INVALID_CHARS_ALPHA_ONLY-field', +				'Required field should reject UTF-8 in alpha only field', +			), +			array( +				'Hello', +				array('field_validation' => '[\w]+'), +				false, +				'Required field should accept a characters only field', +			), +			array( +				'Valid.Username123', +				array('field_validation' => '[\w.]+'), +				false, +				'Required field should accept a alphanumeric field with dots', +			), +			array( +				'Invalid.,username123', +				array('field_validation' => '[\w.]+'), +				'FIELD_INVALID_CHARS_ALPHA_DOTS-field', +				'Required field should reject field with comma', +			), +			array( +				'skype.test.name,_this', +				array('field_validation' => '[a-zA-Z][\w\.,\-_]+'), +				false, +				'Required field should accept alphanumeric field with punctuations', +			), +			array( +				'1skype.this.should.faila', +				array('field_validation' => '[a-zA-Z][\w\.,\-_]+'), +				'FIELD_INVALID_CHARS_ALPHA_PUNCTUATION-field', +				'Required field should reject field having invalid input for the given validation', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				'test', +				array('field_show_novalue' => true), +				'test', +				'Field should output the given value', +			), +			array( +				'test', +				array('field_show_novalue' => false), +				'test', +				'Field should output the given value', +			), +			array( +				'', +				array('field_show_novalue' => true), +				'', +				'Field should output nothing for empty value', +			), +			array( +				'', +				array('field_show_novalue' => false), +				null, +				'Field should simply output null for empty vlaue', +			), +		); +	} + + +	/** +	* @dataProvider profile_value_data +	*/ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/profilefields/type_url_test.php b/tests/profilefields/type_url_test.php new file mode 100644 index 0000000000..9957510d90 --- /dev/null +++ b/tests/profilefields/type_url_test.php @@ -0,0 +1,111 @@ +<?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_profilefield_type_url_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options; + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		$user = $this->getMock('\phpbb\user'); +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_url( +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'     => '\phpbb\profilefields\type\type_url', +			'field_name' 	 => 'field', +			'field_id'	 	 => 1, +			'lang_id'	 	 => 1, +			'lang_name'      => 'field', +			'field_required' => false, +		); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				'', +				array('field_required' => true), +				'FIELD_INVALID_URL-field', +				'Field should reject empty field that is required', +			), +			array( +				'invalidURL', +				array(), +				'FIELD_INVALID_URL-field', +				'Field should reject invalid input', +			), +			array( +				'http://onetwothree.example.io', +				array(), +				false, +				'Field should accept valid URL', +			), +			array( +				'http://example.com/index.html?param1=test¶m2=awesome', +				array(), +				false, +				'Field should accept valid URL', +			), +			array( +				'http://example.com/index.html/test/path?document=get', +				array(), +				false, +				'Field should accept valid URL', +			), +			array( +				'http://example.com/index.html/test/path?document[]=DocType%20test&document[]=AnotherDoc', +				array(), +				'FIELD_INVALID_URL-field', +				'Field should reject invalid URL having multi value parameters', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/test_framework/phpbb_database_connection_odbc_pdo_wrapper.php b/tests/test_framework/phpbb_database_connection_odbc_pdo_wrapper.php index 22d55b4ed5..db31edc984 100644 --- a/tests/test_framework/phpbb_database_connection_odbc_pdo_wrapper.php +++ b/tests/test_framework/phpbb_database_connection_odbc_pdo_wrapper.php @@ -25,7 +25,7 @@ if (!class_exists('PDO'))  */  class phpbb_database_connection_odbc_pdo_wrapper extends PDO  { -	// Name of the driver being used (i.e. mssql, firebird) +	// Name of the driver being used (i.e. mssql)  	public $driver = '';  	// Version number of driver since PDO::getAttribute(PDO::ATTR_CLIENT_VERSION) is pretty useless for this diff --git a/tests/test_framework/phpbb_database_test_case.php b/tests/test_framework/phpbb_database_test_case.php index 1f3a564205..46276bcfcb 100644 --- a/tests/test_framework/phpbb_database_test_case.php +++ b/tests/test_framework/phpbb_database_test_case.php @@ -145,25 +145,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test  	public function createXMLDataSet($path)  	{ -		$db_config = $this->get_database_config(); - -		// Firebird requires table and column names to be uppercase -		if ($db_config['dbms'] == 'phpbb\db\driver\firebird') -		{ -			$xml_data = file_get_contents($path); -			$xml_data = preg_replace_callback('/(?:(<table name="))([a-z_]+)(?:(">))/', 'phpbb_database_test_case::to_upper', $xml_data); -			$xml_data = preg_replace_callback('/(?:(<column>))([a-z_]+)(?:(<\/column>))/', 'phpbb_database_test_case::to_upper', $xml_data); - -			$new_fixture = tmpfile(); -			fwrite($new_fixture, $xml_data); -			fseek($new_fixture, 0); - -			$meta_data = stream_get_meta_data($new_fixture); -			$path = $meta_data['uri']; -		} -  		$this->fixture_xml_data = parent::createXMLDataSet($path); -  		return $this->fixture_xml_data;  	} @@ -244,19 +226,6 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test  		return new phpbb_database_test_connection_manager($config);  	} -	/** -	* Converts a match in the middle of a string to uppercase. -	* This is necessary for transforming the fixture information for Firebird tests -	* -	* @param $matches The array of matches from a regular expression -	* -	* @return string The string with the specified match converted to uppercase -	*/ -	static public function to_upper($matches) -	{ -		return $matches[1] . strtoupper($matches[2]) . $matches[3]; -	} -  	public function assert_array_content_equals($one, $two)  	{  		// http://stackoverflow.com/questions/3838288/phpunit-assert-two-arrays-are-equal-but-order-of-elements-not-important diff --git a/tests/test_framework/phpbb_database_test_connection_manager.php b/tests/test_framework/phpbb_database_test_connection_manager.php index b73b05025e..0d0f08f1f5 100644 --- a/tests/test_framework/phpbb_database_test_connection_manager.php +++ b/tests/test_framework/phpbb_database_test_connection_manager.php @@ -116,7 +116,7 @@ class phpbb_database_test_connection_manager  		// These require different connection strings on the phpBB side than they do in PDO  		// so you must provide a DSN string for ODBC separately -		if (!empty($this->config['custom_dsn']) && ($this->config['dbms'] == 'phpbb\db\driver\mssql' || $this->config['dbms'] == 'phpbb\db\driver\firebird')) +		if (!empty($this->config['custom_dsn']) && $this->config['dbms'] == 'phpbb\db\driver\mssql')  		{  			$dsn = 'odbc:' . $this->config['custom_dsn'];  		} @@ -130,14 +130,6 @@ class phpbb_database_test_connection_manager  					$this->pdo = new phpbb_database_connection_odbc_pdo_wrapper('mssql', 0, $dsn, $this->config['dbuser'], $this->config['dbpasswd']);  				break; -				case 'phpbb\db\driver\firebird': -					if (!empty($this->config['custom_dsn'])) -					{ -						$this->pdo = new phpbb_database_connection_odbc_pdo_wrapper('firebird', 0, $dsn, $this->config['dbuser'], $this->config['dbpasswd']); -						break; -					} -					// Fall through if they're using the firebird PDO driver and not the generic ODBC driver -  				default:  					$this->pdo = new PDO($dsn, $this->config['dbuser'], $this->config['dbpasswd']);  				break; @@ -197,7 +189,6 @@ class phpbb_database_test_connection_manager  		{  			case 'phpbb\db\driver\sqlite':  			case 'phpbb\db\driver\sqlite3': -			case 'phpbb\db\driver\firebird':  				$this->connect();  				// Drop all of the tables  				foreach ($this->get_tables() as $table) @@ -298,13 +289,6 @@ class phpbb_database_test_connection_manager  					FROM pg_stat_user_tables';  			break; -			case 'phpbb\db\driver\firebird': -				$sql = 'SELECT rdb$relation_name -					FROM rdb$relations -					WHERE rdb$view_source is null -						AND rdb$system_flag = 0'; -			break; -  			case 'phpbb\db\driver\oracle':  				$sql = 'SELECT table_name  					FROM USER_TABLES'; @@ -404,11 +388,6 @@ class phpbb_database_test_connection_manager  	protected function get_dbms_data($dbms)  	{  		$available_dbms = array( -			'phpbb\db\driver\firebird'	=> array( -				'SCHEMA'		=> 'firebird', -				'DELIM'			=> ';;', -				'PDO'			=> 'firebird', -			),  			'phpbb\db\driver\mysqli'	=> array(  				'SCHEMA'		=> 'mysql_41',  				'DELIM'			=> ';', @@ -478,18 +457,6 @@ class phpbb_database_test_connection_manager  		switch ($this->config['dbms'])  		{ -			case 'phpbb\db\driver\firebird': -				$sql = 'SELECT RDB$GENERATOR_NAME -					FROM RDB$GENERATORS -					WHERE RDB$SYSTEM_FLAG = 0'; -				$result = $this->pdo->query($sql); - -				while ($row = $result->fetch(PDO::FETCH_NUM)) -				{ -					$queries[] = 'DROP GENERATOR ' . current($row); -				} -			break; -  			case 'phpbb\db\driver\oracle':  				$sql = 'SELECT sequence_name  					FROM USER_SEQUENCES'; diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php index e4504a5f8d..fde6a6a4ff 100644 --- a/tests/test_framework/phpbb_functional_test_case.php +++ b/tests/test_framework/phpbb_functional_test_case.php @@ -1076,9 +1076,17 @@ class phpbb_functional_test_case extends phpbb_test_case  		if ($expected !== '')  		{ -			$this->assertContainsLang($expected, $crawler->filter('html')->text()); +			if (isset($this->lang[$expected])) +			{ +				$this->assertContainsLang($expected, $crawler->filter('html')->text()); +			} +			else +			{ +				$this->assertContains($expected, $crawler->filter('html')->text()); +			}  			return null;  		} +  		$url = $crawler->selectLink($form_data['subject'])->link()->getUri();  		return array( diff --git a/tests/text_processing/make_clickable_test.php b/tests/text_processing/make_clickable_test.php index 2c78391453..95e304dd97 100644 --- a/tests/text_processing/make_clickable_test.php +++ b/tests/text_processing/make_clickable_test.php @@ -104,5 +104,50 @@ class phpbb_text_processing_make_clickable_test extends phpbb_test_case  		$this->assertEquals($expected, $result, $label);  	} +	public function make_clickable_mixed_serverurl_data() +	{ +		$urls = array( +			'http://thisdomain.org' => array('tag' => 'm', 'url' => false, 'text' => false), +			'http://thisdomain.org/' => array('tag' => 'm', 'url' => false, 'text' => false), +			'http://thisdomain.org/1' => array('tag' => 'm', 'url' => false, 'text' => false), +			'http://thisdomain.org/path/some?query=abc#test' => array('tag' => 'm', 'url' => false, 'text' => false), + +			'https://www.phpbb.com' => array('tag' => 'm', 'url' => false, 'text' => false), +			'https://www.phpbb.com/' => array('tag' => 'm', 'url' => false, 'text' => false), +			'https://www.phpbb.com/1' => array('tag' => 'l', 'url' => false, 'text' => '1'), +			'https://www.phpbb.com/path/some?query=abc#test' => array('tag' => 'l', 'url' => false, 'text' => 'path/some?query=abc#test'), +		); + +		$test_data = array(); + +		// run the test for each combination +		foreach ($urls as $url => $url_type) +		{ +			// false means it's the same as the url, less typing +			$url_type['url'] = ($url_type['url']) ? $url_type['url'] : $url; +			$url_type['text'] = ($url_type['text']) ? $url_type['text'] : $url; + +			$class = ($url_type['tag'] === 'l') ? 'postlink-local' : 'postlink'; + +			// replace the url with the desired output format +			$output = '<!-- ' . $url_type['tag'] . ' --><a class="' . $class . '" href="' . $url_type['url'] . '">' . $url_type['text'] . '</a><!-- ' . $url_type['tag'] . ' -->'; + +			$test_data[] = array($url, $output); +		} + +		return $test_data; +	} + +	/** +	* @dataProvider make_clickable_mixed_serverurl_data +	*/ +	public function test_make_clickable_mixed_serverurl($input, $expected) +	{ +		$result = make_clickable($input, 'https://www.phpbb.com'); + +		$label = 'Making text clickable: ' . $input; +		$this->assertEquals($expected, $result, $label); +	} +  } diff --git a/travis/setup-webserver.sh b/travis/setup-webserver.sh index a9941d4def..ea1929a5b0 100755 --- a/travis/setup-webserver.sh +++ b/travis/setup-webserver.sh @@ -53,6 +53,7 @@ else  		user = $USER  		group = $USER  		listen = $APP_SOCK +		listen.mode = 0666  		pm = static  		pm.max_children = 2 | 
