diff options
Diffstat (limited to 'phpBB/phpbb/db/migration')
30 files changed, 1491 insertions, 91 deletions
| diff --git a/phpBB/phpbb/db/migration/data/v30x/release_3_0_5_rc1.php b/phpBB/phpbb/db/migration/data/v30x/release_3_0_5_rc1.php index 003ccf8f18..084d00a13a 100644 --- a/phpBB/phpbb/db/migration/data/v30x/release_3_0_5_rc1.php +++ b/phpBB/phpbb/db/migration/data/v30x/release_3_0_5_rc1.php @@ -57,7 +57,9 @@ class release_3_0_5_rc1 extends container_aware_migration  	public function hash_old_passwords()  	{ +		/* @var $passwords_manager \phpbb\passwords\manager */  		$passwords_manager = $this->container->get('passwords.manager'); +  		$sql = 'SELECT user_id, user_password  				FROM ' . $this->table_prefix . 'users  				WHERE user_pass_convert = 1'; @@ -116,7 +118,7 @@ class release_3_0_5_rc1 extends container_aware_migration  				$result = $this->db->sql_query($sql);  				// Skip first row, this is our original auth option we want to preserve -				$row = $this->db->sql_fetchrow($result); +				$this->db->sql_fetchrow($result);  				while ($row = $this->db->sql_fetchrow($result))  				{ diff --git a/phpBB/phpbb/db/migration/data/v30x/release_3_0_9_rc1.php b/phpBB/phpbb/db/migration/data/v30x/release_3_0_9_rc1.php index 06e46d522f..5f928df47c 100644 --- a/phpBB/phpbb/db/migration/data/v30x/release_3_0_9_rc1.php +++ b/phpBB/phpbb/db/migration/data/v30x/release_3_0_9_rc1.php @@ -34,7 +34,7 @@ class release_3_0_9_rc1 extends \phpbb\db\migration\migration  						// this column was removed from the database updater  						// after 3.0.9-RC3 was released. It might still exist  						// in 3.0.9-RCX installations and has to be dropped as -						// soon as the db_tools class is capable of properly +						// soon as the \phpbb\db\tools\tools class is capable of properly  						// removing a primary key.  						// 'attempt_id'			=> array('UINT', NULL, 'auto_increment'),  						'attempt_ip'			=> array('VCHAR:40', ''), diff --git a/phpBB/phpbb/db/migration/data/v310/acp_prune_users_module.php b/phpBB/phpbb/db/migration/data/v310/acp_prune_users_module.php index 0ca4f2f19c..725c57ca86 100644 --- a/phpBB/phpbb/db/migration/data/v310/acp_prune_users_module.php +++ b/phpBB/phpbb/db/migration/data/v310/acp_prune_users_module.php @@ -13,7 +13,7 @@  namespace phpbb\db\migration\data\v310; -class acp_prune_users_module extends \phpbb\db\migration\migration +class acp_prune_users_module extends \phpbb\db\migration\container_aware_migration  {  	public function effectively_installed()  	{ @@ -70,12 +70,7 @@ class acp_prune_users_module extends \phpbb\db\migration\migration  		$acp_cat_users_id = (int) $this->db->sql_fetchfield('module_id');  		$this->db->sql_freeresult($result); -		if (!class_exists('\acp_modules')) -		{ -			include($this->phpbb_root_path . 'includes/acp/acp_modules.' . $this->php_ext); -		} -		$module_manager = new \acp_modules(); -		$module_manager->module_class = 'acp'; -		$module_manager->move_module($acp_prune_users_id, $acp_cat_users_id); +		$module_manager = $this->container->get('module.manager'); +		$module_manager->move_module($acp_prune_users_id, $acp_cat_users_id, 'acp');  	}  } diff --git a/phpBB/phpbb/db/migration/data/v310/dev.php b/phpBB/phpbb/db/migration/data/v310/dev.php index f037191c2a..250258eea7 100644 --- a/phpBB/phpbb/db/migration/data/v310/dev.php +++ b/phpBB/phpbb/db/migration/data/v310/dev.php @@ -13,7 +13,7 @@  namespace phpbb\db\migration\data\v310; -class dev extends \phpbb\db\migration\migration +class dev extends \phpbb\db\migration\container_aware_migration  {  	public function effectively_installed()  	{ @@ -204,18 +204,13 @@ class dev extends \phpbb\db\migration\migration  		$language_management_module_id = $this->db->sql_fetchfield('module_id');  		$this->db->sql_freeresult($result); -		if (!class_exists('acp_modules')) -		{ -			include($this->phpbb_root_path . 'includes/acp/acp_modules.' . $this->php_ext); -		}  		// acp_modules calls adm_back_link, which is undefined at this point  		if (!function_exists('adm_back_link'))  		{  			include($this->phpbb_root_path . 'includes/functions_acp.' . $this->php_ext);  		} -		$module_manager = new \acp_modules(); -		$module_manager->module_class = 'acp'; -		$module_manager->move_module($language_module_id, $language_management_module_id); +		$module_manager = $this->container->get('module.manager'); +		$module_manager->move_module($language_module_id, $language_management_module_id, 'acp');  	}  	public function update_ucp_pm_basename() diff --git a/phpBB/phpbb/db/migration/data/v310/timezone.php b/phpBB/phpbb/db/migration/data/v310/timezone.php index 1f6b47ad50..03a8d1ab34 100644 --- a/phpBB/phpbb/db/migration/data/v310/timezone.php +++ b/phpBB/phpbb/db/migration/data/v310/timezone.php @@ -103,7 +103,7 @@ class timezone extends \phpbb\db\migration\migration  	*/  	public function convert_phpbb30_timezone($timezone, $dst)  	{ -		$offset = $timezone + $dst; +		$offset = (float) $timezone + (int) $dst;  		switch ($timezone)  		{ diff --git a/phpBB/phpbb/db/migration/data/v31x/update_custom_bbcodes_with_idn.php b/phpBB/phpbb/db/migration/data/v31x/update_custom_bbcodes_with_idn.php index 854ed1f568..14b7b7b0f6 100644 --- a/phpBB/phpbb/db/migration/data/v31x/update_custom_bbcodes_with_idn.php +++ b/phpBB/phpbb/db/migration/data/v31x/update_custom_bbcodes_with_idn.php @@ -45,7 +45,6 @@ class update_custom_bbcodes_with_idn extends \phpbb\db\migration\migration  		$sql_ary = array();  		while ($row = $this->db->sql_fetchrow($result))  		{ -			$data = array();  			if (preg_match('/(URL|LOCAL_URL|RELATIVE_URL)/', $row['bbcode_match']))  			{  				$data = $bbcodes->build_regexp($row['bbcode_match'], $row['bbcode_tpl']); diff --git a/phpBB/phpbb/db/migration/data/v320/allowed_schemes_links.php b/phpBB/phpbb/db/migration/data/v320/allowed_schemes_links.php new file mode 100644 index 0000000000..726822bc71 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/allowed_schemes_links.php @@ -0,0 +1,31 @@ +<?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\v320; + +class allowed_schemes_links extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\dev', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.add', array('allowed_schemes_links', 'http,https,ftp')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/announce_global_permission.php b/phpBB/phpbb/db/migration/data/v320/announce_global_permission.php new file mode 100644 index 0000000000..7afecb884b --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/announce_global_permission.php @@ -0,0 +1,43 @@ +<?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\v320; + +class announce_global_permission extends \phpbb\db\migration\migration +{ +	public function effectively_installed() +	{ +		$sql = 'SELECT auth_option_id +			FROM ' . ACL_OPTIONS_TABLE . " +			WHERE auth_option = 'f_announce_global'"; +		$result = $this->db->sql_query($sql); +		$auth_option_id = $this->db->sql_fetchfield('auth_option_id'); +		$this->db->sql_freeresult($result); + +		return $auth_option_id !== false; +	} + +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\dev', +		); +	} + +	public function update_data() +	{ +		return array( +			array('permission.add', array('f_announce_global', false, 'f_announce')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/default_data_type_ids.php b/phpBB/phpbb/db/migration/data/v320/default_data_type_ids.php new file mode 100644 index 0000000000..65e5b3fa73 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/default_data_type_ids.php @@ -0,0 +1,361 @@ +<?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\v320; + +class default_data_type_ids extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\v320a2', +			'\phpbb\db\migration\data\v320\oauth_states', +		); +	} + +	public function update_schema() +	{ +		return array( +			'change_columns'	=> array( +				$this->table_prefix . 'acl_users'			=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'attachments'			=> array( +					'attach_id'		=> array('ULINT', null, 'auto_increment'), +					'post_msg_id'	=> array('ULINT', 0), +					'poster_id'		=> array('ULINT', 0), +					'topic_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'banlist'				=> array( +					'ban_id'		=> array('ULINT', null, 'auto_increment'), +					'ban_userid'	=> array('ULINT', 0), +				), +				$this->table_prefix . 'bookmarks'			=> array( +					'topic_id'		=> array('ULINT', 0), +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'bots'				=> array( +					'bot_id'		=> array('ULINT', null, 'auto_increment'), +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'drafts'				=> array( +					'draft_id'		=> array('ULINT', null, 'auto_increment'), +					'user_id'		=> array('ULINT', 0), +					'topic_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'forums'				=> array( +					'forum_last_post_id'	=> array('ULINT', 0), +					'forum_last_poster_id'	=> array('ULINT', 0), +				), +				$this->table_prefix . 'forums_access'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'forums_track'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'forums_watch'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'log'					=> array( +					'log_id'		=> array('ULINT', null, 'auto_increment'), +					'post_id'		=> array('ULINT', 0), +					'reportee_id'	=> array('ULINT', 0), +					'user_id'		=> array('ULINT', 0), +					'topic_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'login_attempts'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'moderator_cache'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'notifications'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'oauth_accounts'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'oauth_states'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'oauth_tokens'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'poll_options'		=> array( +					'topic_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'poll_votes'			=> array( +					'topic_id'		=> array('ULINT', 0), +					'vote_user_id'	=> array('ULINT', 0), +				), +				$this->table_prefix . 'posts'				=> array( +					'post_id'			=> array('ULINT', null, 'auto_increment'), +					'poster_id'			=> array('ULINT', 0), +					'post_delete_user'	=> array('ULINT', 0), +					'post_edit_user'	=> array('ULINT', 0), +					'topic_id'			=> array('ULINT', 0), +				), +				$this->table_prefix . 'privmsgs'			=> array( +					'author_id'			=> array('ULINT', 0), +					'message_edit_user'	=> array('ULINT', 0), +					'msg_id'			=> array('ULINT', null, 'auto_increment'), +				), +				$this->table_prefix . 'privmsgs_folder'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'privmsgs_rules'		=> array( +					'rule_user_id'	=> array('ULINT', 0), +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'privmsgs_to'			=> array( +					'author_id'		=> array('ULINT', 0), +					'msg_id'		=> array('ULINT', 0), +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'profile_fields_data'	=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'reports'				=> array( +					'report_id'		=> array('ULINT', 0), +					'pm_id'			=> array('ULINT', 0), +					'post_id'		=> array('ULINT', 0), +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'search_wordlist'		=> array( +					'word_id'		=> array('ULINT', null, 'auto_increment'), +				), +				$this->table_prefix . 'search_wordmatch'	=> array( +					'post_id'		=> array('ULINT', 0), +					'word_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'sessions'			=> array( +					'session_user_id'	=> array('ULINT', 0), +				), +				$this->table_prefix . 'sessions_keys'		=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'topics'				=> array( +					'topic_id'				=> array('ULINT', null, 'auto_increment'), +					'topic_poster'			=> array('ULINT', 0), +					'topic_first_post_id'	=> array('ULINT', 0), +					'topic_last_post_id'	=> array('ULINT', 0), +					'topic_last_poster_id'	=> array('ULINT', 0), +					'topic_moved_id'		=> array('ULINT', 0), +					'topic_delete_user'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'topics_track'		=> array( +					'user_id'		=> array('ULINT', 0), +					'topic_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'topics_posted'		=> array( +					'user_id'		=> array('ULINT', 0), +					'topic_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'topics_watch'		=> array( +					'user_id'		=> array('ULINT', 0), +					'topic_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'user_notifications'	=> array( +					'item_id'		=> array('ULINT', 0), +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'user_group'			=> array( +					'user_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'users'				=> array( +					'user_id'		=> array('ULINT', null, 'auto_increment'), +				), +				$this->table_prefix . 'warnings'			=> array( +					'log_id'		=> array('ULINT', 0), +					'user_id'		=> array('ULINT', 0), +					'post_id'		=> array('ULINT', 0), +				), +				$this->table_prefix . 'words'				=> array( +					'word_id'		=> array('ULINT', null, 'auto_increment'), +				), +				$this->table_prefix . 'zebra'			=> array( +					'user_id'		=> array('ULINT', 0), +					'zebra_id'		=> array('ULINT', 0), +				), +			), +		); +	} + +	public function revert_schema() +	{ +		return array( +			'change_columns'	=> array( +				$this->table_prefix . 'acl_users'			=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'attachments'			=> array( +					'attach_id'		=> array('UINT', null, 'auto_increment'), +					'post_msg_id'	=> array('UINT', 0), +					'poster_id'		=> array('UINT', 0), +					'topic_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'banlist'				=> array( +					'ban_id'		=> array('UINT', null, 'auto_increment'), +					'ban_userid'	=> array('UINT', 0), +				), +				$this->table_prefix . 'bookmarks'			=> array( +					'topic_id'		=> array('UINT', 0), +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'bots'				=> array( +					'bot_id'		=> array('UINT', null, 'auto_increment'), +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'drafts'				=> array( +					'draft_id'		=> array('UINT', null, 'auto_increment'), +					'user_id'		=> array('UINT', 0), +					'topic_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'forums'				=> array( +					'forum_last_post_id'	=> array('UINT', 0), +					'forum_last_poster_id'	=> array('UINT', 0), +				), +				$this->table_prefix . 'forums_access'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'forums_track'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'forums_watch'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'log'					=> array( +					'log_id'		=> array('UINT', null, 'auto_increment'), +					'post_id'		=> array('UINT', 0), +					'reportee_id'	=> array('UINT', 0), +					'user_id'		=> array('UINT', 0), +					'topic_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'login_attempts'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'moderator_cache'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'notifications'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'oauth_accounts'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'oauth_states'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'oauth_tokens'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'poll_options'		=> array( +					'topic_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'poll_votes'			=> array( +					'topic_id'		=> array('UINT', 0), +					'vote_user_id'	=> array('UINT', 0), +				), +				$this->table_prefix . 'posts'				=> array( +					'post_id'			=> array('UINT', null, 'auto_increment'), +					'poster_id'			=> array('UINT', 0), +					'post_delete_user'	=> array('UINT', 0), +					'post_edit_user'	=> array('UINT', 0), +					'topic_id'			=> array('UINT', 0), +				), +				$this->table_prefix . 'privmsgs'			=> array( +					'author_id'			=> array('UINT', 0), +					'message_edit_user'	=> array('UINT', 0), +					'msg_id'			=> array('UINT', null, 'auto_increment'), +				), +				$this->table_prefix . 'privmsgs_folder'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'privmsgs_rules'		=> array( +					'rule_user_id'	=> array('UINT', 0), +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'privmsgs_to'			=> array( +					'author_id'		=> array('UINT', 0), +					'msg_id'		=> array('UINT', 0), +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'profile_fields_data'	=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'reports'				=> array( +					'report_id'		=> array('UINT', 0), +					'pm_id'			=> array('UINT', 0), +					'post_id'		=> array('UINT', 0), +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'search_wordlist'		=> array( +					'word_id'		=> array('UINT', null, 'auto_increment'), +				), +				$this->table_prefix . 'search_wordmatch'	=> array( +					'post_id'		=> array('UINT', 0), +					'word_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'sessions'			=> array( +					'session_user_id'	=> array('UINT', 0), +				), +				$this->table_prefix . 'sessions_keys'		=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'topics'				=> array( +					'topic_id'				=> array('UINT', null, 'auto_increment'), +					'topic_poster'			=> array('UINT', 0), +					'topic_first_post_id'	=> array('UINT', 0), +					'topic_last_post_id'	=> array('UINT', 0), +					'topic_last_poster_id'	=> array('UINT', 0), +					'topic_moved_id'		=> array('UINT', 0), +					'topic_delete_user'		=> array('UINT', 0), +				), +				$this->table_prefix . 'topics_track'		=> array( +					'user_id'		=> array('UINT', 0), +					'topic_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'topics_posted'		=> array( +					'user_id'		=> array('UINT', 0), +					'topic_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'topics_watch'		=> array( +					'user_id'		=> array('UINT', 0), +					'topic_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'user_notifications'	=> array( +					'item_id'		=> array('UINT', 0), +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'user_group'			=> array( +					'user_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'users'				=> array( +					'user_id'		=> array('UINT', null, 'auto_increment'), +				), +				$this->table_prefix . 'warnings'			=> array( +					'log_id'		=> array('UINT', 0), +					'user_id'		=> array('UINT', 0), +					'post_id'		=> array('UINT', 0), +				), +				$this->table_prefix . 'words'				=> array( +					'word_id'		=> array('UINT', null, 'auto_increment'), +				), +				$this->table_prefix . 'zebra'			=> array( +					'user_id'		=> array('UINT', 0), +					'zebra_id'		=> array('UINT', 0), +				), +			), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/dev.php b/phpBB/phpbb/db/migration/data/v320/dev.php new file mode 100644 index 0000000000..ad2da3c1f4 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/dev.php @@ -0,0 +1,36 @@ +<?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\v320; + +class dev extends \phpbb\db\migration\container_aware_migration +{ +	public function effectively_installed() +	{ +		return version_compare($this->config['version'], '3.2.0-dev', '>='); +	} + +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v31x\v316', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.update', array('version', '3.2.0-dev')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/font_awesome_update.php b/phpBB/phpbb/db/migration/data/v320/font_awesome_update.php new file mode 100644 index 0000000000..817b638037 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/font_awesome_update.php @@ -0,0 +1,36 @@ +<?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\v320; + +class font_awesome_update extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\dev', +		); +	} + +	public function effectively_installed() +	{ +		return isset($this->config['load_font_awesome_url']); +	} + +	public function update_data() +	{ +		return array( +			array('config.add', array('load_font_awesome_url', 'https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/icons_alt.php b/phpBB/phpbb/db/migration/data/v320/icons_alt.php new file mode 100644 index 0000000000..80132e579e --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/icons_alt.php @@ -0,0 +1,46 @@ +<?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\v320; + +class icons_alt extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\dev', +		); +	} + +	public function update_schema() +	{ +		return array( +			'add_columns'        => array( +				$this->table_prefix . 'icons'        => array( +					'icons_alt'    => array('VCHAR', '', 'after' => 'icons_height'), +				), +			), +		); +	} + +	public function revert_schema() +	{ +		return array( +			'drop_columns'        => array( +				$this->table_prefix . 'icons'        => array( +					'icons_alt', +				), +			), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/log_post_id.php b/phpBB/phpbb/db/migration/data/v320/log_post_id.php new file mode 100644 index 0000000000..ead53c8138 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/log_post_id.php @@ -0,0 +1,46 @@ +<?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\v320; + +class log_post_id extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\dev', +		); +	} + +	public function update_schema() +	{ +		return array( +			'add_columns'        => array( +				$this->table_prefix . 'log'        => array( +					'post_id'    => array('UINT', 0, 'after' => 'topic_id'), +				), +			), +		); +	} + +	public function revert_schema() +	{ +		return array( +			'drop_columns'        => array( +				$this->table_prefix . 'log'        => array( +					'post_id', +				), +			), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/notifications_board.php b/phpBB/phpbb/db/migration/data/v320/notifications_board.php new file mode 100644 index 0000000000..ac1b3a0f2c --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/notifications_board.php @@ -0,0 +1,75 @@ +<?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\v320; + +class notifications_board extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\dev', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.add', array('allow_board_notifications', 1)), +			array('custom', array(array($this, 'update_user_subscriptions'))), +			array('custom', array(array($this, 'update_module'))), +		); +	} + +	public function update_module() +	{ +		$sql = 'UPDATE ' . MODULES_TABLE . " +			SET module_auth = 'cfg_allow_board_notifications' +			WHERE module_basename = 'ucp_notifications' +				AND module_mode = 'notification_list'"; +		$this->sql_query($sql); +	} + +	public function update_user_subscriptions() +	{ +		$sql = 'UPDATE ' . USER_NOTIFICATIONS_TABLE . " +			SET method = 'notification.method.board' +			WHERE method = ''"; +		$this->sql_query($sql); +	} + +	public function revert_data() +	{ +		return array( +			array('custom', array(array($this, 'revert_user_subscriptions'))), +			array('custom', array(array($this, 'revert_module'))), +		); +	} + +	public function revert_user_subscriptions() +	{ +		$sql = 'UPDATE ' . USER_NOTIFICATIONS_TABLE . " +			SET method = '' +			WHERE method = 'notification.method.board'"; +		$this->sql_query($sql); +	} + +	public function revert_module() +	{ +		$sql = 'UPDATE ' . MODULES_TABLE . " +			SET auth = '' +			WHERE module_basename = 'ucp_notifications' +				AND module_mode = 'notification_list'"; +		$this->sql_query($sql); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/oauth_states.php b/phpBB/phpbb/db/migration/data/v320/oauth_states.php new file mode 100644 index 0000000000..22ab2dabb3 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/oauth_states.php @@ -0,0 +1,56 @@ +<?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\v320; + +class oauth_states extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array('\phpbb\db\migration\data\v310\auth_provider_oauth'); +	} + +	public function effectively_installed() +	{ +		return $this->db_tools->sql_table_exists($this->table_prefix . 'oauth_states'); +	} + +	public function update_schema() +	{ +		return array( +			'add_tables'	=> array( +				$this->table_prefix . 'oauth_states'	=> array( +					'COLUMNS' => array( +						'user_id'			=> array('UINT', 0), +						'session_id'		=> array('CHAR:32', ''), +						'provider'			=> array('VCHAR', ''), +						'oauth_state'		=> array('VCHAR', ''), +					), +					'KEYS' => array( +						'user_id'			=> array('INDEX', 'user_id'), +						'provider'			=> array('INDEX', 'provider'), +					), +				), +			), +		); +	} + +	public function revert_schema() +	{ +		return array( +			'drop_tables'	=> array( +				$this->table_prefix . 'oauth_states', +			), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/remote_upload_validation.php b/phpBB/phpbb/db/migration/data/v320/remote_upload_validation.php new file mode 100644 index 0000000000..d61f6b96fd --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/remote_upload_validation.php @@ -0,0 +1,31 @@ +<?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\v320; + +class remote_upload_validation extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\v320a2', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.add', array('remote_upload_verify', '0')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/remove_outdated_media.php b/phpBB/phpbb/db/migration/data/v320/remove_outdated_media.php new file mode 100644 index 0000000000..c14d31f1c0 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/remove_outdated_media.php @@ -0,0 +1,90 @@ +<?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\v320; + +class remove_outdated_media extends \phpbb\db\migration\migration +{ +	protected $cat_id = array( +			ATTACHMENT_CATEGORY_WM, +			ATTACHMENT_CATEGORY_RM, +			ATTACHMENT_CATEGORY_QUICKTIME, +		); + +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\dev', +		); +	} + +	public function update_data() +	{ +		return array( +			array('custom', array(array($this, 'change_extension_group'))), +		); +	} + +	public function change_extension_group() +	{ +		// select group ids of outdated media +		$sql = 'SELECT group_id +			FROM ' . EXTENSION_GROUPS_TABLE . ' +			WHERE ' . $this->db->sql_in_set('cat_id', $this->cat_id); +		$result = $this->db->sql_query($sql); + +		$group_ids = array(); +		while ($group_id = (int) $this->db->sql_fetchfield('group_id')) +		{ +			$group_ids[] = $group_id; +		} +		$this->db->sql_freeresult($result); + +		// nothing to do, admin has removed all the outdated media extension groups +		if (empty($group_ids)) +		{ +			return true; +		} + +		// get the group id of downloadable files +		$sql = 'SELECT group_id +			FROM ' . EXTENSION_GROUPS_TABLE . " +			WHERE group_name = 'DOWNLOADABLE_FILES'"; +		$result = $this->db->sql_query($sql); +		$download_id = (int) $this->db->sql_fetchfield('group_id'); +		$this->db->sql_freeresult($result); + +		if (empty($download_id)) +		{ +			$sql = 'UPDATE ' . EXTENSIONS_TABLE . ' +				SET group_id = 0 +				WHERE ' . $this->db->sql_in_set('group_id', $group_ids); +		} +		else +		{ +			// move outdated media extensions to downloadable files +			$sql = 'UPDATE ' . EXTENSIONS_TABLE . " +				SET group_id = $download_id" . ' +				WHERE ' . $this->db->sql_in_set('group_id', $group_ids); +		} + +		$result = $this->db->sql_query($sql); +		$this->db->sql_freeresult($result); + +		// delete the now empty, outdated media extension groups +		$sql = 'DELETE FROM ' . EXTENSION_GROUPS_TABLE . ' +			WHERE ' . $this->db->sql_in_set('group_id', $group_ids); +		$result = $this->db->sql_query($sql); +		$this->db->sql_freeresult($result); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/remove_profilefield_wlm.php b/phpBB/phpbb/db/migration/data/v320/remove_profilefield_wlm.php new file mode 100644 index 0000000000..1cb9070bf9 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/remove_profilefield_wlm.php @@ -0,0 +1,152 @@ +<?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\v320; + +class remove_profilefield_wlm extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\dev', +		); +	} + +	public function update_schema() +	{ +		return array( +			'drop_columns'	=> array( +				$this->table_prefix . 'profile_fields_data'			=> array( +					'pf_phpbb_wlm', +				), +			), +		); +	} + +	public function revert_schema() +	{ +		return array( +			'add_columns'	=> array( +				$this->table_prefix . 'profile_fields_data'			=> array( +					'pf_phpbb_wlm'		=> array('VCHAR', ''), +				), +			), +		); +	} + +	public function update_data() +	{ +		return array( +			array('custom', array(array($this, 'delete_custom_profile_field_data'))), +		); +	} + +	public function revert_data() +	{ +		return array( +			array('custom', array(array($this, 'create_custom_field'))), +		); +	} + +	public function delete_custom_profile_field_data() +	{ +		$field_id = $this->get_custom_profile_field_id(); + +		$sql = 'DELETE FROM ' . PROFILE_FIELDS_TABLE . ' +			WHERE field_id = ' . (int) $field_id; +		$this->db->sql_query($sql); + +		$sql = 'DELETE FROM ' . PROFILE_LANG_TABLE . ' +			WHERE field_id = ' . (int) $field_id; +		$this->db->sql_query($sql); + +		$sql = 'DELETE FROM ' . PROFILE_FIELDS_LANG_TABLE . ' +			WHERE field_id = ' . (int) $field_id; +		$this->db->sql_query($sql); +	} + +	/** +	 * Get custom profile field id +	 * @return	int	custom profile filed id +	 */ +	public function get_custom_profile_field_id() +	{ +		$sql = 'SELECT field_id +			FROM ' . PROFILE_FIELDS_TABLE . " +			WHERE field_name = 'phpbb_wlm'"; +		$result = $this->db->sql_query($sql); +		$field_id = (int) $this->db->sql_fetchfield('field_id'); +		$this->db->sql_freeresult($result); + +		return $field_id; +	} + +	public function create_custom_field() +	{ +		$sql = 'SELECT MAX(field_order) as max_field_order +			FROM ' . PROFILE_FIELDS_TABLE; +		$result = $this->db->sql_query($sql); +		$max_field_order = (int) $this->db->sql_fetchfield('max_field_order'); +		$this->db->sql_freeresult($result); + +		$sql_ary = array( +			'field_name'			=> 'phpbb_wlm', +			'field_type'			=> 'profilefields.type.string', +			'field_ident'			=> 'phpbb_wlm', +			'field_length'			=> '40', +			'field_minlen'			=> '5', +			'field_maxlen'			=> '255', +			'field_novalue'			=> '', +			'field_default_value'	=> '', +			'field_validation'		=> '.*', +			'field_required'		=> 0, +			'field_show_novalue'	=> 0, +			'field_show_on_reg'		=> 0, +			'field_show_on_pm'		=> 1, +			'field_show_on_vt'		=> 1, +			'field_show_on_ml'		=> 0, +			'field_show_profile'	=> 1, +			'field_hide'			=> 0, +			'field_no_view'			=> 0, +			'field_active'			=> 1, +			'field_is_contact'		=> 1, +			'field_contact_desc'	=> '', +			'field_contact_url'		=> '', +			'field_order'			=> $max_field_order + 1, +		); + +		$sql = 'INSERT INTO ' . PROFILE_FIELDS_TABLE . ' ' . $this->db->sql_build_array('INSERT', $sql_ary); +		$this->db->sql_query($sql); +		$field_id = (int) $this->db->sql_nextid(); + +		$insert_buffer = new \phpbb\db\sql_insert_buffer($this->db, PROFILE_LANG_TABLE); + +		$sql = 'SELECT lang_id +			FROM ' . LANG_TABLE; +		$result = $this->db->sql_query($sql); +		$lang_name = 'WLM'; +		while ($lang_id = (int) $this->db->sql_fetchfield('lang_id')) +		{ +			$insert_buffer->insert(array( +				'field_id'				=> (int) $field_id, +				'lang_id'				=> (int) $lang_id, +				'lang_name'				=> $lang_name, +				'lang_explain'			=> '', +				'lang_default_value'	=> '', +			)); +		} +		$this->db->sql_freeresult($result); + +		$insert_buffer->flush(); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/report_id_auto_increment.php b/phpBB/phpbb/db/migration/data/v320/report_id_auto_increment.php new file mode 100644 index 0000000000..6e81baefb9 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/report_id_auto_increment.php @@ -0,0 +1,46 @@ +<?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\v320; + +class report_id_auto_increment extends \phpbb\db\migration\migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\default_data_type_ids', +		); +	} + +	public function update_schema() +	{ +		return array( +			'change_columns'	=> array( +				$this->table_prefix . 'reports'				=> array( +					'report_id'		=> array('ULINT', null, 'auto_increment'), +				), +			), +		); +	} + +	public function revert_schema() +	{ +		return array( +			'change_columns'	=> array( +				$this->table_prefix . 'reports'				=> array( +					'report_id'		=> array('ULINT', 0), +				), +			), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/text_reparser.php b/phpBB/phpbb/db/migration/data/v320/text_reparser.php new file mode 100644 index 0000000000..03c5d39fe4 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/text_reparser.php @@ -0,0 +1,118 @@ +<?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\v320; + +use phpbb\textreparser\manager; +use phpbb\textreparser\reparser_interface; + +class text_reparser extends \phpbb\db\migration\container_aware_migration +{ +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v310\contact_admin_form', +			'\phpbb\db\migration\data\v320\allowed_schemes_links', +		); +	} + +	public function effectively_installed() +	{ +		return isset($this->config['reparse_lock']); +	} + +	public function update_data() +	{ +		return array( +			array('config.add', array('reparse_lock', 0, true)), +			array('config.add', array('text_reparser.pm_text_cron_interval', 10)), +			array('config.add', array('text_reparser.pm_text_last_cron', 0)), +			array('config.add', array('text_reparser.poll_option_cron_interval', 10)), +			array('config.add', array('text_reparser.poll_option_last_cron', 0)), +			array('config.add', array('text_reparser.poll_title_cron_interval', 10)), +			array('config.add', array('text_reparser.poll_title_last_cron', 0)), +			array('config.add', array('text_reparser.post_text_cron_interval', 10)), +			array('config.add', array('text_reparser.post_text_last_cron', 0)), +			array('config.add', array('text_reparser.user_signature_cron_interval', 10)), +			array('config.add', array('text_reparser.user_signature_last_cron', 0)), +			array('custom', array(array($this, 'reparse'))), +		); +	} + +	public function reparse($resume_data) +	{ +		/** @var manager $reparser_manager */ +		$reparser_manager = $this->container->get('text_reparser.manager'); + +		/** @var reparser_interface[] $reparsers */ +		$reparsers = $this->container->get('text_reparser_collection'); + +		// Initialize all reparsers +		foreach ($reparsers as $name => $reparser) +		{ +			$reparser_manager->update_resume_data($name, 1, $reparser->get_max_id(), 100); +		} + +		// Sometimes a cron job is too much +		$limit = 100; +		$fast_reparsers = array( +			'text_reparser.contact_admin_info', +			'text_reparser.forum_description', +			'text_reparser.forum_rules', +			'text_reparser.group_description', +		); + +		if (!is_array($resume_data)) +		{ +			$resume_data = array( +				'reparser'	=> 0, +				'current'	=> $this->container->get($fast_reparsers[0])->get_max_id(), +			); +		} + +		$fast_reparsers_size = count($fast_reparsers); +		$processed_records = 0; +		while ($processed_records < $limit && $resume_data['reparser'] < $fast_reparsers_size) +		{ +			$reparser = $this->container->get($fast_reparsers[$resume_data['reparser']]); + +			// New reparser +			if ($resume_data['current'] === 0) +			{ +				$resume_data['current'] = $reparser->get_max_id(); +			} + +			$start = max(1, $resume_data['current'] + 1 - ($limit - $processed_records)); +			$end = max(1, $resume_data['current']); +			$reparser->reparse_range($start, $end); + +			$processed_records += $end - $start + 1; +			$resume_data['current'] = $start - 1; + +			if ($start === 1) +			{ +				// Prevent CLI command from running these reparsers again +				$reparser_manager->update_resume_data($fast_reparsers[$resume_data['reparser']], 1, 0, $limit); + +				$resume_data['reparser']++; +			} +		} + +		if ($resume_data['reparser'] === $fast_reparsers_size) +		{ +			return true; +		} + +		return $resume_data; +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/v320a1.php b/phpBB/phpbb/db/migration/data/v320/v320a1.php new file mode 100644 index 0000000000..d7ecb36f90 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/v320a1.php @@ -0,0 +1,44 @@ +<?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\v320; + +class v320a1 extends \phpbb\db\migration\container_aware_migration +{ +	public function effectively_installed() +	{ +		return version_compare($this->config['version'], '3.2.0-a1', '>='); +	} + +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v320\dev', +			'\phpbb\db\migration\data\v320\allowed_schemes_links', +			'\phpbb\db\migration\data\v320\announce_global_permission', +			'\phpbb\db\migration\data\v320\remove_profilefield_wlm', +			'\phpbb\db\migration\data\v320\font_awesome_update', +			'\phpbb\db\migration\data\v320\icons_alt', +			'\phpbb\db\migration\data\v320\log_post_id', +			'\phpbb\db\migration\data\v320\remove_outdated_media', +			'\phpbb\db\migration\data\v320\notifications_board', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.update', array('version', '3.2.0-dev')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/v320a2.php b/phpBB/phpbb/db/migration/data/v320/v320a2.php new file mode 100644 index 0000000000..ae53a73210 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/v320a2.php @@ -0,0 +1,38 @@ +<?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\v320; + +class v320a2 extends \phpbb\db\migration\container_aware_migration +{ +	public function effectively_installed() +	{ +		return version_compare($this->config['version'], '3.2.0-a2', '>='); +	} + +	static public function depends_on() +	{ +		return 		array( +			'\phpbb\db\migration\data\v31x\v317rc1', +			'\phpbb\db\migration\data\v320\text_reparser', +			'\phpbb\db\migration\data\v320\v320a1', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.update', array('version', '3.2.0-a2')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/v320b1.php b/phpBB/phpbb/db/migration/data/v320/v320b1.php new file mode 100644 index 0000000000..5c3a3797cd --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/v320b1.php @@ -0,0 +1,39 @@ +<?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\v320; + +class v320b1 extends \phpbb\db\migration\container_aware_migration +{ +	public function effectively_installed() +	{ +		return version_compare($this->config['version'], '3.2.0-b1', '>='); +	} + +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v31x\v317pl1', +			'\phpbb\db\migration\data\v320\v320a2', +			'\phpbb\db\migration\data\v31x\increase_size_of_dateformat', +			'\phpbb\db\migration\data\v320\default_data_type_ids', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.update', array('version', '3.2.0-b1')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/v320b2.php b/phpBB/phpbb/db/migration/data/v320/v320b2.php new file mode 100644 index 0000000000..007f7588e6 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/v320b2.php @@ -0,0 +1,40 @@ +<?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\v320; + +use phpbb\db\migration\migration; + +class v320b2 extends migration +{ +	public function effectively_installed() +	{ +		return version_compare($this->config['version'], '3.2.0-b2', '>='); +	} + +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v31x\v318', +			'\phpbb\db\migration\data\v320\v320b1', +			'\phpbb\db\migration\data\v320\remote_upload_validation', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.update', array('version', '3.2.0-b2')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/data/v320/v320rc1.php b/phpBB/phpbb/db/migration/data/v320/v320rc1.php new file mode 100644 index 0000000000..a04a2abb19 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v320/v320rc1.php @@ -0,0 +1,40 @@ +<?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\v320; + +use phpbb\db\migration\migration; + +class v320rc1 extends migration +{ +	public function effectively_installed() +	{ +		return version_compare($this->config['version'], '3.2.0-RC1', '>='); +	} + +	static public function depends_on() +	{ +		return array( +			'\phpbb\db\migration\data\v31x\v319', +			'\phpbb\db\migration\data\v320\report_id_auto_increment', +			'\phpbb\db\migration\data\v320\v320b2', +		); +	} + +	public function update_data() +	{ +		return array( +			array('config.update', array('version', '3.2.0-RC1')), +		); +	} +} diff --git a/phpBB/phpbb/db/migration/migration.php b/phpBB/phpbb/db/migration/migration.php index 5f120333e1..4e218344f4 100644 --- a/phpBB/phpbb/db/migration/migration.php +++ b/phpBB/phpbb/db/migration/migration.php @@ -20,7 +20,7 @@ namespace phpbb\db\migration;  * in a subclass. This class provides various utility methods to simplify editing  * a phpBB.  */ -abstract class migration +abstract class migration implements migration_interface  {  	/** @var \phpbb\config\config */  	protected $config; @@ -28,7 +28,7 @@ abstract class migration  	/** @var \phpbb\db\driver\driver_interface */  	protected $db; -	/** @var \phpbb\db\tools */ +	/** @var \phpbb\db\tools\tools_interface */  	protected $db_tools;  	/** @var string */ @@ -51,12 +51,12 @@ abstract class migration  	*  	* @param \phpbb\config\config $config  	* @param \phpbb\db\driver\driver_interface $db -	* @param \phpbb\db\tools $db_tools +	* @param \phpbb\db\tools\tools_interface $db_tools  	* @param string $phpbb_root_path  	* @param string $php_ext  	* @param string $table_prefix  	*/ -	public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\db\tools $db_tools, $phpbb_root_path, $php_ext, $table_prefix) +	public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\db\tools\tools_interface $db_tools, $phpbb_root_path, $php_ext, $table_prefix)  	{  		$this->config = $config;  		$this->db = $db; @@ -70,9 +70,7 @@ abstract class migration  	}  	/** -	* Defines other migrations to be applied first -	* -	* @return array An array of migration class names +	* {@inheritdoc}  	*/  	static public function depends_on()  	{ @@ -80,14 +78,7 @@ abstract class migration  	}  	/** -	* Allows you to check if the migration is effectively installed (entirely optional) -	* -	* This is checked when a migration is installed. If true is returned, the migration will be set as -	* installed without performing the database changes. -	* This function is intended to help moving to migrations from a previous database updater, where some -	* migrations may have been installed already even though they are not yet listed in the migrations table. -	* -	* @return bool True if this migration is installed, False if this migration is not installed (checked on install) +	* {@inheritdoc}  	*/  	public function effectively_installed()  	{ @@ -95,9 +86,7 @@ abstract class migration  	}  	/** -	* Updates the database schema by providing a set of change instructions -	* -	* @return array Array of schema changes (compatible with db_tools->perform_schema_changes()) +	* {@inheritdoc}  	*/  	public function update_schema()  	{ @@ -105,9 +94,7 @@ abstract class migration  	}  	/** -	* Reverts the database schema by providing a set of change instructions -	* -	* @return array Array of schema changes (compatible with db_tools->perform_schema_changes()) +	* {@inheritdoc}  	*/  	public function revert_schema()  	{ @@ -115,9 +102,7 @@ abstract class migration  	}  	/** -	* Updates data by returning a list of instructions to be executed -	* -	* @return array Array of data update instructions +	* {@inheritdoc}  	*/  	public function update_data()  	{ @@ -125,12 +110,7 @@ abstract class migration  	}  	/** -	* Reverts data by returning a list of instructions to be executed -	* -	* @return array Array of data instructions that will be performed on revert -	* 	NOTE: calls to tools (such as config.add) are automatically reverted when -	* 		possible, so you should not attempt to revert those, this is mostly for -	* 		otherwise unrevertable calls (custom functions for example) +	* {@inheritdoc}  	*/  	public function revert_data()  	{ diff --git a/phpBB/phpbb/db/migration/migration_interface.php b/phpBB/phpbb/db/migration/migration_interface.php new file mode 100644 index 0000000000..2aba5ec608 --- /dev/null +++ b/phpBB/phpbb/db/migration/migration_interface.php @@ -0,0 +1,70 @@ +<?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; + +/** + * Base class interface for database migrations + */ +interface migration_interface +{ +	/** +	 * Defines other migrations to be applied first +	 * +	 * @return array An array of migration class names +	 */ +	static public function depends_on(); + +	/** +	 * Allows you to check if the migration is effectively installed (entirely optional) +	 * +	 * This is checked when a migration is installed. If true is returned, the migration will be set as +	 * installed without performing the database changes. +	 * This function is intended to help moving to migrations from a previous database updater, where some +	 * migrations may have been installed already even though they are not yet listed in the migrations table. +	 * +	 * @return bool True if this migration is installed, False if this migration is not installed (checked on install) +	 */ +	public function effectively_installed(); + +	/** +	 * Updates the database schema by providing a set of change instructions +	 * +	 * @return array Array of schema changes (compatible with db_tools->perform_schema_changes()) +	 */ +	public function update_schema(); + +	/** +	 * Reverts the database schema by providing a set of change instructions +	 * +	 * @return array Array of schema changes (compatible with db_tools->perform_schema_changes()) +	 */ +	public function revert_schema(); + +	/** +	 * Updates data by returning a list of instructions to be executed +	 * +	 * @return array Array of data update instructions +	 */ +	public function update_data(); + +	/** +	 * Reverts data by returning a list of instructions to be executed +	 * +	 * @return array Array of data instructions that will be performed on revert +	 * 	NOTE: calls to tools (such as config.add) are automatically reverted when +	 * 		possible, so you should not attempt to revert those, this is mostly for +	 * 		otherwise unrevertable calls (custom functions for example) +	 */ +	public function revert_data(); +} diff --git a/phpBB/phpbb/db/migration/profilefield_base_migration.php b/phpBB/phpbb/db/migration/profilefield_base_migration.php index da1a38e2fa..3f26a4998c 100644 --- a/phpBB/phpbb/db/migration/profilefield_base_migration.php +++ b/phpBB/phpbb/db/migration/profilefield_base_migration.php @@ -237,6 +237,7 @@ abstract class profilefield_base_migration extends container_aware_migration  		if ($profile_row === null)  		{ +			/* @var $manager \phpbb\profilefields\manager */  			$manager = $this->container->get('profilefields.manager');  			$profile_row = $manager->build_insert_sql_array(array());  		} diff --git a/phpBB/phpbb/db/migration/schema_generator.php b/phpBB/phpbb/db/migration/schema_generator.php index 91d8307d91..c579e25824 100644 --- a/phpBB/phpbb/db/migration/schema_generator.php +++ b/phpBB/phpbb/db/migration/schema_generator.php @@ -24,7 +24,7 @@ class schema_generator  	/** @var \phpbb\db\driver\driver_interface */  	protected $db; -	/** @var \phpbb\db\tools */ +	/** @var \phpbb\db\tools\tools_interface */  	protected $db_tools;  	/** @var array */ @@ -48,7 +48,7 @@ class schema_generator  	/**  	* Constructor  	*/ -	public function __construct(array $class_names, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\db\tools $db_tools, $phpbb_root_path, $php_ext, $table_prefix) +	public function __construct(array $class_names, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\db\tools\tools_interface $db_tools, $phpbb_root_path, $php_ext, $table_prefix)  	{  		$this->config = $config;  		$this->db = $db; @@ -77,8 +77,15 @@ class schema_generator  		$check_dependencies = true;  		while (!empty($migrations))  		{ -			foreach ($migrations as $migration_class) +			foreach ($migrations as $key => $migration_class)  			{ +				// Unset classes that are not a valid migration +				if (\phpbb\db\migrator::is_migration($migration_class) === false) +				{ +					unset($migrations[$key]); +					continue; +				} +  				$open_dependencies = array_diff($migration_class::depends_on(), $tree);  				if (empty($open_dependencies)) diff --git a/phpBB/phpbb/db/migration/tool/module.php b/phpBB/phpbb/db/migration/tool/module.php index 7ea7d1dac1..b47c426110 100644 --- a/phpBB/phpbb/db/migration/tool/module.php +++ b/phpBB/phpbb/db/migration/tool/module.php @@ -13,6 +13,8 @@  namespace phpbb\db\migration\tool; +use phpbb\module\exception\module_exception; +  /**  * Migration module management tool  */ @@ -27,6 +29,9 @@ class module implements \phpbb\db\migration\tool\tool_interface  	/** @var \phpbb\user */  	protected $user; +	/** @var \phpbb\module\module_manager */ +	protected $module_manager; +  	/** @var string */  	protected $phpbb_root_path; @@ -45,15 +50,17 @@ class module implements \phpbb\db\migration\tool\tool_interface  	* @param \phpbb\db\driver\driver_interface $db  	* @param \phpbb\cache\service $cache  	* @param \phpbb\user $user +	* @param \phpbb\module\module_manager	$module_manager  	* @param string $phpbb_root_path  	* @param string $php_ext  	* @param string $modules_table  	*/ -	public function __construct(\phpbb\db\driver\driver_interface $db, \phpbb\cache\service $cache, \phpbb\user $user, $phpbb_root_path, $php_ext, $modules_table) +	public function __construct(\phpbb\db\driver\driver_interface $db, \phpbb\cache\service $cache, \phpbb\user $user, \phpbb\module\module_manager $module_manager, $phpbb_root_path, $php_ext, $modules_table)  	{  		$this->db = $db;  		$this->cache = $cache;  		$this->user = $user; +		$this->module_manager = $module_manager;  		$this->phpbb_root_path = $phpbb_root_path;  		$this->php_ext = $php_ext;  		$this->modules_table = $modules_table; @@ -157,6 +164,8 @@ class module implements \phpbb\db\migration\tool\tool_interface  	*/  	public function add($class, $parent = 0, $data = array())  	{ +		global $user, $phpbb_log; +  		// allow sending the name as a string in $data to create a category  		if (!is_array($data))  		{ @@ -171,7 +180,6 @@ class module implements \phpbb\db\migration\tool\tool_interface  			$basename = (isset($data['module_basename'])) ? $data['module_basename'] : '';  			$module = $this->get_module_info($class, $basename); -			$result = '';  			foreach ($module['modes'] as $mode => $module_info)  			{  				if (!isset($data['modes']) || in_array($mode, $data['modes'])) @@ -205,13 +213,6 @@ class module implements \phpbb\db\migration\tool\tool_interface  			throw new \phpbb\db\migration\exception('MODULE_EXISTS', $data['module_langname']);  		} -		if (!class_exists('acp_modules')) -		{ -			include($this->phpbb_root_path . 'includes/acp/acp_modules.' . $this->php_ext); -			$this->user->add_lang('acp/modules'); -		} -		$acp_modules = new \acp_modules(); -  		$module_data = array(  			'module_enabled'	=> (isset($data['module_enabled'])) ? $data['module_enabled'] : 1,  			'module_display'	=> (isset($data['module_display'])) ? $data['module_display'] : 1, @@ -222,19 +223,14 @@ class module implements \phpbb\db\migration\tool\tool_interface  			'module_mode'		=> (isset($data['module_mode'])) ? $data['module_mode'] : '',  			'module_auth'		=> (isset($data['module_auth'])) ? $data['module_auth'] : '',  		); -		$result = $acp_modules->update_module_data($module_data, true); -		// update_module_data can either return a string or an empty array... -		if (is_string($result)) -		{ -			// Error -			throw new \phpbb\db\migration\exception('MODULE_ERROR', $result); -		} -		else +		try  		{ +			$this->module_manager->update_module_data($module_data); +  			// Success  			$module_log_name = ((isset($this->user->lang[$data['module_langname']])) ? $this->user->lang[$data['module_langname']] : $data['module_langname']); -			add_log('admin', 'LOG_MODULE_ADD', $module_log_name); +			$phpbb_log->add('admin', (isset($user->data['user_id'])) ? $user->data['user_id'] : ANONYMOUS, $user->ip, 'LOG_MODULE_ADD', false, array($module_log_name));  			// Move the module if requested above/below an existing one  			if (isset($data['before']) && $data['before']) @@ -284,6 +280,11 @@ class module implements \phpbb\db\migration\tool\tool_interface  				$this->db->sql_query($sql);  			}  		} +		catch (module_exception $e) +		{ +			// Error +			throw new \phpbb\db\migration\exception('MODULE_ERROR', $e->getMessage()); +		}  		// Clear the Modules Cache  		$this->cache->destroy("_modules_$class"); @@ -365,21 +366,9 @@ class module implements \phpbb\db\migration\tool\tool_interface  				$module_ids[] = (int) $module;  			} -			if (!class_exists('acp_modules')) -			{ -				include($this->phpbb_root_path . 'includes/acp/acp_modules.' . $this->php_ext); -				$this->user->add_lang('acp/modules'); -			} -			$acp_modules = new \acp_modules(); -			$acp_modules->module_class = $class; -  			foreach ($module_ids as $module_id)  			{ -				$result = $acp_modules->delete_module($module_id); -				if (!empty($result)) -				{ -					return; -				} +				$this->module_manager->delete_module($module_id, $class);  			}  			$this->cache->destroy("_modules_$class"); @@ -427,13 +416,7 @@ class module implements \phpbb\db\migration\tool\tool_interface  	*/  	protected function get_module_info($class, $basename)  	{ -		if (!class_exists('acp_modules')) -		{ -			include($this->phpbb_root_path . 'includes/acp/acp_modules.' . $this->php_ext); -			$this->user->add_lang('acp/modules'); -		} -		$acp_modules = new \acp_modules(); -		$module = $acp_modules->get_module_infos($basename, $class, true); +		$module = $this->module_manager->get_module_infos($class, $basename, true);  		if (empty($module))  		{ | 
