From 43e3b3e328d8a989a3e2fef2b7e3a73ed4e684d8 Mon Sep 17 00:00:00 2001
From: Alfredo Ramos <alfredo.ramos.sanchez@gmail.com>
Date: Tue, 24 Mar 2020 22:16:51 -0600
Subject: [PATCH] [ticket/16315] Remove Google+ profile field

PHPBB3-16315
---
 .../container/services_profilefield.yml       |  9 --
 phpBB/install/schemas/schema_data.sql         |  1 -
 phpBB/language/en/acp/profile.php             |  1 -
 phpBB/language/en/common.php                  |  1 -
 phpBB/language/en/memberlist.php              |  1 -
 .../data/v33x/profilefield_cleanup.php        | 82 ++++++++++++++++
 .../profilefields/type/type_googleplus.php    | 66 -------------
 phpBB/styles/prosilver/theme/colours.css      |  1 -
 tests/functional/ucp_profile_test.php         |  2 -
 tests/profilefields/type_googleplus_test.php  | 96 -------------------
 10 files changed, 82 insertions(+), 178 deletions(-)
 create mode 100644 phpBB/phpbb/db/migration/data/v33x/profilefield_cleanup.php
 delete mode 100644 phpBB/phpbb/profilefields/type/type_googleplus.php
 delete mode 100644 tests/profilefields/type_googleplus_test.php

diff --git a/phpBB/config/default/container/services_profilefield.yml b/phpBB/config/default/container/services_profilefield.yml
index 90b22836e5..157538bc5d 100644
--- a/phpBB/config/default/container/services_profilefield.yml
+++ b/phpBB/config/default/container/services_profilefield.yml
@@ -56,15 +56,6 @@ 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/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql
index 1cc17f29b5..ef61bb4daf 100644
--- a/phpBB/install/schemas/schema_data.sql
+++ b/phpBB/install/schemas/schema_data.sql
@@ -800,7 +800,6 @@ 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('notification.type.post', 0, 2, 'notification.method.board');
diff --git a/phpBB/language/en/acp/profile.php b/phpBB/language/en/acp/profile.php
index 87c950581e..579235c912 100644
--- a/phpBB/language/en/acp/profile.php
+++ b/phpBB/language/en/acp/profile.php
@@ -93,7 +93,6 @@ $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 80fda1b3a2..44c37c26fb 100644
--- a/phpBB/language/en/common.php
+++ b/phpBB/language/en/common.php
@@ -311,7 +311,6 @@ $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 c7b2bf55d1..cb48184e55 100644
--- a/phpBB/language/en/memberlist.php
+++ b/phpBB/language/en/memberlist.php
@@ -150,5 +150,4 @@ $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/phpbb/db/migration/data/v33x/profilefield_cleanup.php b/phpBB/phpbb/db/migration/data/v33x/profilefield_cleanup.php
new file mode 100644
index 0000000000..0e580fbbef
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/v33x/profilefield_cleanup.php
@@ -0,0 +1,82 @@
+<?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\v33x;
+
+class profilefield_cleanup extends \phpbb\db\migration\profilefield_base_migration
+{
+	protected $profilefield_name = 'phpbb_googleplus';
+	protected $profilefield_database_type = ['VCHAR', ''];
+	protected $profilefield_data = [
+		'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'		=> '(?:(?!\.{2,})([^<>=+]))+',
+		'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'
+	];
+
+	static public function depends_on()
+	{
+		return ['\phpbb\db\migration\data\v330\v330'];
+	}
+
+	public function effectively_installed()
+	{
+		$sql = 'SELECT field_id
+			FROM ' . $this->table_prefix . 'profile_fields
+			WHERE ' . $this->db->sql_build_array('SELECT', ['field_name' => $this->profilefield_name]);
+		$result = $this->db->sql_query($sql);
+		$profile_field = (bool) $this->db->sql_fetchfield('field_id');
+		$this->db->sql_freeresult($result);
+
+		$profile_field_data = $this->db_tools->sql_column_exists($this->table_prefix . 'profile_fields_data', 'pf_' . $this->profilefield_name);
+
+		return (!$profile_field && !$profile_field_data);
+	}
+
+	public function update_schema()
+	{
+		return parent::revert_schema();
+	}
+
+	public function revert_schema()
+	{
+		return [];
+	}
+
+	public function update_data()
+	{
+		return parent::revert_data();
+	}
+
+	public function revert_data()
+	{
+		return [];
+	}
+}
diff --git a/phpBB/phpbb/profilefields/type/type_googleplus.php b/phpBB/phpbb/profilefields/type/type_googleplus.php
deleted file mode 100644
index e6729b1935..0000000000
--- a/phpBB/phpbb/profilefields/type/type_googleplus.php
+++ /dev/null
@@ -1,66 +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\profilefields\type;
-
-class type_googleplus extends type_string
-{
-	/**
-	* {@inheritDoc}
-	*/
-	public function get_name()
-	{
-		return $this->user->lang('FIELD_GOOGLEPLUS');
-	}
-
-	/**
-	* {@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'		=> '(?:(?!\.{2,})([^<>=+]))+',
-			'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/theme/colours.css b/phpBB/styles/prosilver/theme/colours.css
index 04a895873c..7b82239817 100644
--- a/phpBB/styles/prosilver/theme/colours.css
+++ b/phpBB/styles/prosilver/theme/colours.css
@@ -692,7 +692,6 @@ Colours and backgrounds for buttons.css
 .phpbb_website-icon					{ background-position: -40px 0; }
 .phpbb_youtube-icon					{ background-position: -98px 0; }
 .phpbb_facebook-icon				{ background-position: -119px 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/tests/functional/ucp_profile_test.php b/tests/functional/ucp_profile_test.php
index e7abba9255..2d68704162 100644
--- a/tests/functional/ucp_profile_test.php
+++ b/tests/functional/ucp_profile_test.php
@@ -26,7 +26,6 @@ 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',
@@ -40,7 +39,6 @@ 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
deleted file mode 100644
index a5f934ea17..0000000000
--- a/tests/profilefields/type_googleplus_test.php
+++ /dev/null
@@ -1,96 +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_profilefield_type_googleplus_test extends phpbb_test_case
-{
-	protected  $field;
-
-	public function setUp(): void
-	{
-		parent::setUp();
-
-		global $phpbb_root_path, $phpEx;
-
-		$lang_loader = new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx);
-		$lang = new \phpbb\language\language($lang_loader);
-		$user = new \phpbb\user($lang, '\phpbb\datetime');
-		$user->add_lang('ucp');
-		$request = $this->createMock('\phpbb\request\request');
-		$template = $this->createMock('\phpbb\template\template');
-
-		$this->field = new \phpbb\profilefields\type\type_googleplus(
-			$request,
-			$template,
-			$user
-		);
-	}
-	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)
-	{
-		$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, $this->field->get_profile_contact_value($value, $field_options), $description);
-	}
-
-	public function data_validate_googleplus()
-	{
-		return array(
-			array('foobar', false),
-			array('2342340929304', false),
-			array('foo<bar', 'The field “googleplus” has invalid characters.'),
-			array('klkd.klkl', false),
-			array('kl+', 'The field “googleplus” has invalid characters.'),
-			array('foo=bar', 'The field “googleplus” has invalid characters.'),
-			array('..foo', 'The field “googleplus” has invalid characters.'),
-			array('foo..bar', 'The field “googleplus” has invalid characters.'),
-		);
-	}
-
-	/**
-	* @dataProvider data_validate_googleplus
-	*/
-	public function test_validate_googleplus($input, $expected)
-	{
-		$field_data = array_merge(array('lang_name' => 'googleplus'), $this->field->get_default_option_values());
-		$this->assertSame($expected, $this->field->validate_string_profile_field('string', $input, $field_data));
-	}
-}