mirror of
				https://github.com/phpbb/phpbb.git
				synced 2025-10-26 21:21:32 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			412 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			412 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
| *
 | |
| * @package migration
 | |
| * @copyright (c) 2012 phpBB Group
 | |
| * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
 | |
| *
 | |
| */
 | |
| 
 | |
| namespace phpbb\db\migration\data\v310;
 | |
| 
 | |
| class dev extends \phpbb\db\migration\migration
 | |
| {
 | |
| 	public function effectively_installed()
 | |
| 	{
 | |
| 		return version_compare($this->config['version'], '3.1.0-dev', '>=');
 | |
| 	}
 | |
| 
 | |
| 	static public function depends_on()
 | |
| 	{
 | |
| 		return array(
 | |
| 			'\phpbb\db\migration\data\v310\extensions',
 | |
| 			'\phpbb\db\migration\data\v310\style_update_p2',
 | |
| 			'\phpbb\db\migration\data\v310\timezone_p2',
 | |
| 			'\phpbb\db\migration\data\v310\reported_posts_display',
 | |
| 			'\phpbb\db\migration\data\v310\migrations_table',
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	public function update_schema()
 | |
| 	{
 | |
| 		return array(
 | |
| 			'add_columns'		=> array(
 | |
| 				$this->table_prefix . 'groups'		=> array(
 | |
| 					'group_teampage'	=> array('UINT', 0, 'after' => 'group_legend'),
 | |
| 				),
 | |
| 				$this->table_prefix . 'profile_fields'	=> array(
 | |
| 					'field_show_on_pm'		=> array('BOOL', 0),
 | |
| 				),
 | |
| 				$this->table_prefix . 'styles'		=> array(
 | |
| 					'style_path'			=> array('VCHAR:100', ''),
 | |
| 					'bbcode_bitfield'		=> array('VCHAR:255', 'kNg='),
 | |
| 					'style_parent_id'		=> array('UINT:4', 0),
 | |
| 					'style_parent_tree'		=> array('TEXT', ''),
 | |
| 				),
 | |
| 				$this->table_prefix . 'reports'		=> array(
 | |
| 					'reported_post_text'		=> array('MTEXT_UNI', ''),
 | |
| 					'reported_post_uid'			=> array('VCHAR:8', ''),
 | |
| 					'reported_post_bitfield'	=> array('VCHAR:255', ''),
 | |
| 				),
 | |
| 			),
 | |
| 			'change_columns'	=> array(
 | |
| 				$this->table_prefix . 'groups'		=> array(
 | |
| 					'group_legend'		=> array('UINT', 0),
 | |
| 				),
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	public function revert_schema()
 | |
| 	{
 | |
| 		return array(
 | |
| 			'drop_columns'		=> array(
 | |
| 				$this->table_prefix . 'groups'		=> array(
 | |
| 					'group_teampage',
 | |
| 				),
 | |
| 				$this->table_prefix . 'profile_fields'	=> array(
 | |
| 					'field_show_on_pm',
 | |
| 				),
 | |
| 				$this->table_prefix . 'styles'		=> array(
 | |
| 					'style_path',
 | |
| 					'bbcode_bitfield',
 | |
| 					'style_parent_id',
 | |
| 					'style_parent_tree',
 | |
| 				),
 | |
| 				$this->table_prefix . 'reports'		=> array(
 | |
| 					'reported_post_text',
 | |
| 					'reported_post_uid',
 | |
| 					'reported_post_bitfield',
 | |
| 				),
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	public function update_data()
 | |
| 	{
 | |
| 		return array(
 | |
| 			array('if', array(
 | |
| 				(strpos('phpbb_search_', $this->config['search_type']) !== 0),
 | |
| 				array('config.update', array('search_type', 'phpbb_search_' . $this->config['search_type'])),
 | |
| 			)),
 | |
| 
 | |
| 			array('config.add', array('fulltext_postgres_ts_name', 'simple')),
 | |
| 			array('config.add', array('fulltext_postgres_min_word_len', 4)),
 | |
| 			array('config.add', array('fulltext_postgres_max_word_len', 254)),
 | |
| 			array('config.add', array('fulltext_sphinx_stopwords', 0)),
 | |
| 			array('config.add', array('fulltext_sphinx_indexer_mem_limit', 512)),
 | |
| 
 | |
| 			array('config.add', array('load_jquery_cdn', 0)),
 | |
| 			array('config.add', array('load_jquery_url', '//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js')),
 | |
| 
 | |
| 			array('config.add', array('use_system_cron', 0)),
 | |
| 
 | |
| 			array('config.add', array('legend_sort_groupname', 0)),
 | |
| 			array('config.add', array('teampage_forums', 1)),
 | |
| 			array('config.add', array('teampage_memberships', 1)),
 | |
| 
 | |
| 			array('config.add', array('load_cpf_pm', 0)),
 | |
| 
 | |
| 			array('config.add', array('display_last_subject', 1)),
 | |
| 
 | |
| 			array('config.add', array('assets_version', 1)),
 | |
| 
 | |
| 			array('config.add', array('site_home_url', '')),
 | |
| 			array('config.add', array('site_home_text', '')),
 | |
| 
 | |
| 			array('permission.add', array('u_chgprofileinfo', true, 'u_sig')),
 | |
| 
 | |
| 			array('module.add', array(
 | |
| 				'acp',
 | |
| 				'ACP_GROUPS',
 | |
| 				array(
 | |
| 					'module_basename'	=> 'acp_groups',
 | |
| 					'modes'				=> array('position'),
 | |
| 				),
 | |
| 			)),
 | |
| 			array('module.add', array(
 | |
| 				'acp',
 | |
| 				'ACP_ATTACHMENTS',
 | |
| 				array(
 | |
| 					'module_basename'	=> 'acp_attachments',
 | |
| 					'modes'				=> array('manage'),
 | |
| 				),
 | |
| 			)),
 | |
| 			array('module.add', array(
 | |
| 				'acp',
 | |
| 				'ACP_STYLE_MANAGEMENT',
 | |
| 				array(
 | |
| 					'module_basename'	=> 'acp_styles',
 | |
| 					'modes'				=> array('install', 'cache'),
 | |
| 				),
 | |
| 			)),
 | |
| 			array('module.add', array(
 | |
| 				'ucp',
 | |
| 				'UCP_PROFILE',
 | |
| 				array(
 | |
| 					'module_basename'	=> 'ucp_profile',
 | |
| 					'modes'				=> array('autologin_keys'),
 | |
| 				),
 | |
| 			)),
 | |
| 			// Module will be renamed later
 | |
| 			array('module.add', array(
 | |
| 				'acp',
 | |
| 				'ACP_CAT_STYLES',
 | |
| 				'ACP_LANGUAGE'
 | |
| 			)),
 | |
| 
 | |
| 			array('module.remove', array(
 | |
| 				'acp',
 | |
| 				false,
 | |
| 				'ACP_TEMPLATES',
 | |
| 			)),
 | |
| 			array('module.remove', array(
 | |
| 				'acp',
 | |
| 				false,
 | |
| 				'ACP_THEMES',
 | |
| 			)),
 | |
| 			array('module.remove', array(
 | |
| 				'acp',
 | |
| 				false,
 | |
| 				'ACP_IMAGESETS',
 | |
| 			)),
 | |
| 
 | |
| 			array('custom', array(array($this, 'rename_module_basenames'))),
 | |
| 			array('custom', array(array($this, 'rename_styles_module'))),
 | |
| 			array('custom', array(array($this, 'add_group_teampage'))),
 | |
| 			array('custom', array(array($this, 'update_group_legend'))),
 | |
| 			array('custom', array(array($this, 'localise_global_announcements'))),
 | |
| 			array('custom', array(array($this, 'update_ucp_pm_basename'))),
 | |
| 			array('custom', array(array($this, 'update_ucp_profile_auth'))),
 | |
| 			array('custom', array(array($this, 'move_customise_modules'))),
 | |
| 
 | |
| 			array('config.update', array('version', '3.1.0-dev')),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	public function move_customise_modules()
 | |
| 	{
 | |
| 		// Move language management to new location in the Customise tab
 | |
| 		// First get language module id
 | |
| 		$sql = 'SELECT module_id FROM ' . MODULES_TABLE . "
 | |
| 			WHERE module_basename = 'acp_language'";
 | |
| 		$result = $this->db->sql_query($sql);
 | |
| 		$language_module_id = $this->db->sql_fetchfield('module_id');
 | |
| 		$this->db->sql_freeresult($result);
 | |
| 		// Next get language management module id of the one just created
 | |
| 		$sql = 'SELECT module_id FROM ' . MODULES_TABLE . "
 | |
| 			WHERE module_langname = 'ACP_LANGUAGE'";
 | |
| 		$result = $this->db->sql_query($sql);
 | |
| 		$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);
 | |
| 	}
 | |
| 
 | |
| 	public function update_ucp_pm_basename()
 | |
| 	{
 | |
| 		$sql = 'SELECT module_id, module_basename
 | |
| 			FROM ' . MODULES_TABLE . "
 | |
| 			WHERE module_basename <> 'ucp_pm' AND
 | |
| 				module_langname='UCP_PM'";
 | |
| 		$result = $this->db->sql_query_limit($sql, 1);
 | |
| 
 | |
| 		if ($row = $this->db->sql_fetchrow($result))
 | |
| 		{
 | |
| 			// This update is still not applied. Applying it
 | |
| 
 | |
| 			$sql = 'UPDATE ' . MODULES_TABLE . "
 | |
| 				SET module_basename = 'ucp_pm'
 | |
| 				WHERE  module_id = " . (int) $row['module_id'];
 | |
| 
 | |
| 			$this->sql_query($sql);
 | |
| 		}
 | |
| 		$this->db->sql_freeresult($result);
 | |
| 	}
 | |
| 
 | |
| 	public function update_ucp_profile_auth()
 | |
| 	{
 | |
| 		// Update the auth setting for the module
 | |
| 		$sql = 'UPDATE ' . MODULES_TABLE . "
 | |
| 			SET module_auth = 'acl_u_chgprofileinfo'
 | |
| 			WHERE module_class = 'ucp'
 | |
| 				AND module_basename = 'ucp_profile'
 | |
| 				AND module_mode = 'profile_info'";
 | |
| 		$this->sql_query($sql);
 | |
| 	}
 | |
| 
 | |
| 	public function rename_styles_module()
 | |
| 	{
 | |
| 		// Rename styles module to Customise
 | |
| 		$sql = 'UPDATE ' . MODULES_TABLE . "
 | |
| 			SET module_langname = 'ACP_CAT_CUSTOMISE'
 | |
| 			WHERE module_langname = 'ACP_CAT_STYLES'";
 | |
| 		$this->sql_query($sql);
 | |
| 	}
 | |
| 
 | |
| 	public function rename_module_basenames()
 | |
| 	{
 | |
| 		// rename all module basenames to full classname
 | |
| 		$sql = 'SELECT module_id, module_basename, module_class
 | |
| 			FROM ' . MODULES_TABLE;
 | |
| 		$result = $this->db->sql_query($sql);
 | |
| 
 | |
| 		while ($row = $this->db->sql_fetchrow($result))
 | |
| 		{
 | |
| 			$module_id = (int) $row['module_id'];
 | |
| 			unset($row['module_id']);
 | |
| 
 | |
| 			if (!empty($row['module_basename']) && !empty($row['module_class']))
 | |
| 			{
 | |
| 				// all the class names start with class name or with phpbb_ for auto loading
 | |
| 				if (strpos($row['module_basename'], $row['module_class'] . '_') !== 0 &&
 | |
| 					strpos($row['module_basename'], 'phpbb_') !== 0)
 | |
| 				{
 | |
| 					$row['module_basename'] = $row['module_class'] . '_' . $row['module_basename'];
 | |
| 
 | |
| 					$sql_update = $this->db->sql_build_array('UPDATE', $row);
 | |
| 
 | |
| 					$sql = 'UPDATE ' . MODULES_TABLE . '
 | |
| 						SET ' . $sql_update . '
 | |
| 						WHERE module_id = ' . $module_id;
 | |
| 					$this->sql_query($sql);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		$this->db->sql_freeresult($result);
 | |
| 	}
 | |
| 
 | |
| 	public function add_group_teampage()
 | |
| 	{
 | |
| 		$sql = 'UPDATE ' . GROUPS_TABLE . '
 | |
| 			SET group_teampage = 1
 | |
| 			WHERE group_type = ' . GROUP_SPECIAL . "
 | |
| 				AND group_name = 'ADMINISTRATORS'";
 | |
| 		$this->sql_query($sql);
 | |
| 
 | |
| 		$sql = 'UPDATE ' . GROUPS_TABLE . '
 | |
| 			SET group_teampage = 2
 | |
| 			WHERE group_type = ' . GROUP_SPECIAL . "
 | |
| 				AND group_name = 'GLOBAL_MODERATORS'";
 | |
| 		$this->sql_query($sql);
 | |
| 	}
 | |
| 
 | |
| 	public function update_group_legend()
 | |
| 	{
 | |
| 		$sql = 'SELECT group_id
 | |
| 			FROM ' . GROUPS_TABLE . '
 | |
| 			WHERE group_legend = 1
 | |
| 			ORDER BY group_name ASC';
 | |
| 		$result = $this->db->sql_query($sql);
 | |
| 
 | |
| 		$next_legend = 1;
 | |
| 		while ($row = $this->db->sql_fetchrow($result))
 | |
| 		{
 | |
| 			$sql = 'UPDATE ' . GROUPS_TABLE . '
 | |
| 				SET group_legend = ' . $next_legend . '
 | |
| 				WHERE group_id = ' . (int) $row['group_id'];
 | |
| 			$this->sql_query($sql);
 | |
| 
 | |
| 			$next_legend++;
 | |
| 		}
 | |
| 		$this->db->sql_freeresult($result);
 | |
| 	}
 | |
| 
 | |
| 	public function localise_global_announcements()
 | |
| 	{
 | |
| 		// Localise Global Announcements
 | |
| 		$sql = 'SELECT topic_id, topic_approved, (topic_replies + 1) AS topic_posts, topic_last_post_id, topic_last_post_subject, topic_last_post_time, topic_last_poster_id, topic_last_poster_name, topic_last_poster_colour
 | |
| 			FROM ' . TOPICS_TABLE . '
 | |
| 			WHERE forum_id = 0
 | |
| 				AND topic_type = ' . POST_GLOBAL;
 | |
| 		$result = $this->db->sql_query($sql);
 | |
| 
 | |
| 		$global_announcements = $update_lastpost_data = array();
 | |
| 		$update_lastpost_data['forum_last_post_time'] = 0;
 | |
| 		$update_forum_data = array(
 | |
| 			'forum_posts'		=> 0,
 | |
| 			'forum_topics'		=> 0,
 | |
| 			'forum_topics_real'	=> 0,
 | |
| 		);
 | |
| 
 | |
| 		while ($row = $this->db->sql_fetchrow($result))
 | |
| 		{
 | |
| 			$global_announcements[] = (int) $row['topic_id'];
 | |
| 
 | |
| 			$update_forum_data['forum_posts'] += (int) $row['topic_posts'];
 | |
| 			$update_forum_data['forum_topics_real']++;
 | |
| 			if ($row['topic_approved'])
 | |
| 			{
 | |
| 				$update_forum_data['forum_topics']++;
 | |
| 			}
 | |
| 
 | |
| 			if ($update_lastpost_data['forum_last_post_time'] < $row['topic_last_post_time'])
 | |
| 			{
 | |
| 				$update_lastpost_data = array(
 | |
| 					'forum_last_post_id'		=> (int) $row['topic_last_post_id'],
 | |
| 					'forum_last_post_subject'	=> $row['topic_last_post_subject'],
 | |
| 					'forum_last_post_time'		=> (int) $row['topic_last_post_time'],
 | |
| 					'forum_last_poster_id'		=> (int) $row['topic_last_poster_id'],
 | |
| 					'forum_last_poster_name'	=> $row['topic_last_poster_name'],
 | |
| 					'forum_last_poster_colour'	=> $row['topic_last_poster_colour'],
 | |
| 				);
 | |
| 			}
 | |
| 		}
 | |
| 		$this->db->sql_freeresult($result);
 | |
| 
 | |
| 		if (!empty($global_announcements))
 | |
| 		{
 | |
| 			// Update the post/topic-count for the forum and the last-post if needed
 | |
| 			$sql = 'SELECT forum_id
 | |
| 				FROM ' . FORUMS_TABLE . '
 | |
| 				WHERE forum_type = ' . FORUM_POST;
 | |
| 			$result = $this->db->sql_query_limit($sql, 1);
 | |
| 			$ga_forum_id = $this->db->sql_fetchfield('forum_id');
 | |
| 			$this->db->sql_freeresult($result);
 | |
| 
 | |
| 			$sql = 'SELECT forum_last_post_time
 | |
| 				FROM ' . FORUMS_TABLE . '
 | |
| 				WHERE forum_id = ' . $ga_forum_id;
 | |
| 			$result = $this->db->sql_query($sql);
 | |
| 			$lastpost = (int) $this->db->sql_fetchfield('forum_last_post_time');
 | |
| 			$this->db->sql_freeresult($result);
 | |
| 
 | |
| 			$sql_update = 'forum_posts = forum_posts + ' . $update_forum_data['forum_posts'] . ', ';
 | |
| 			$sql_update .= 'forum_topics_real = forum_topics_real + ' . $update_forum_data['forum_topics_real'] . ', ';
 | |
| 			$sql_update .= 'forum_topics = forum_topics + ' . $update_forum_data['forum_topics'];
 | |
| 			if ($lastpost < $update_lastpost_data['forum_last_post_time'])
 | |
| 			{
 | |
| 				$sql_update .= ', ' . $this->db->sql_build_array('UPDATE', $update_lastpost_data);
 | |
| 			}
 | |
| 
 | |
| 			$sql = 'UPDATE ' . FORUMS_TABLE . '
 | |
| 				SET ' . $sql_update . '
 | |
| 				WHERE forum_id = ' . $ga_forum_id;
 | |
| 			$this->sql_query($sql);
 | |
| 
 | |
| 			// Update some forum_ids
 | |
| 			$table_ary = array(TOPICS_TABLE, POSTS_TABLE, LOG_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE);
 | |
| 			foreach ($table_ary as $table)
 | |
| 			{
 | |
| 				$sql = "UPDATE $table
 | |
| 					SET forum_id = $ga_forum_id
 | |
| 					WHERE " . $this->db->sql_in_set('topic_id', $global_announcements);
 | |
| 				$this->sql_query($sql);
 | |
| 			}
 | |
| 			unset($table_ary);
 | |
| 		}
 | |
| 	}
 | |
| }
 |