diff options
37 files changed, 440 insertions, 297 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-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/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/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/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/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 c6974aab21..a3ffd923a1 100644 --- a/phpBB/install/schemas/schema.json +++ b/phpBB/install/schemas/schema.json @@ -2104,6 +2104,10 @@                  "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 1087ba1851..9b9b7f77f1 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -810,6 +810,7 @@ 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_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 fe3ad814cb..67813bcba4 100644 --- a/phpBB/language/en/acp/profile.php +++ b/phpBB/language/en/acp/profile.php @@ -93,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 46f19359cd..757b9d7251 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -284,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', diff --git a/phpBB/language/en/memberlist.php b/phpBB/language/en/memberlist.php index b5fd21e5e3..e02f9ff525 100644 --- a/phpBB/language/en/memberlist.php +++ b/phpBB/language/en/memberlist.php @@ -148,4 +148,5 @@ $lang = array_merge($lang, array(  	'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/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/console/command/cron/run.php b/phpBB/phpbb/console/command/cron/run.php index 32774bebe4..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 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/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/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 7ba2b2f32d..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  { 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/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/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/theme/bidi.css b/phpBB/styles/prosilver/theme/bidi.css index f1a6f8ebe0..bf108fd9c8 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;  } 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 aa28cd6962..7e0e2cdea4 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/responsive.css b/phpBB/styles/prosilver/theme/responsive.css index da0499e60e..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; diff --git a/tests/functional/ucp_profile_test.php b/tests/functional/ucp_profile_test.php index 2d68704162..e7abba9255 100644 --- a/tests/functional/ucp_profile_test.php +++ b/tests/functional/ucp_profile_test.php @@ -26,6 +26,7 @@ class phpbb_functional_ucp_profile_test extends phpbb_functional_test_case  		$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', @@ -39,6 +40,7 @@ class phpbb_functional_ucp_profile_test extends phpbb_functional_test_case  		$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()); 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); +	} +}  | 
