aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/db/migration/install.php
blob: af2ba392b1dbf5395a0bd4bd33c9d4986736c13c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
/**
*
* @package migration
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License v2
*
*/

class phpbb_db_migration_install
{
	/**
	* List of phpBB versions/what migration identifier
	* 	contains the updates that should have been installed already
	*
	* @var array
	*/
	protected $version_to_migration = array(
		'3.0.1-rc1'		=> 'phpbb_db_migration_data_3_0_1_rc1',
		'3.0.1'	   		=> 'phpbb_db_migration_data_3_0_1',
		'3.0.2-rc1'		=> 'phpbb_db_migration_data_3_0_2_rc1',
		'3.0.2-rc2'		=> 'phpbb_db_migration_data_3_0_2_rc2',
		'3.0.2'	   		=> 'phpbb_db_migration_data_3_0_2',
		'3.0.3-rc1'		=> 'phpbb_db_migration_data_3_0_3_rc1',
		'3.0.3'	   		=> 'phpbb_db_migration_data_3_0_3',
		'3.0.4-rc1'		=> 'phpbb_db_migration_data_3_0_4_rc1',
		'3.0.4'	   		=> 'phpbb_db_migration_data_3_0_4',
		'3.0.5-rc1'		=> array(
			'phpbb_db_migration_data_3_0_5_rc1',
			'phpbb_db_migration_data_3_0_5_rc1part2',
		),
		'3.0.5'	   		=> 'phpbb_db_migration_data_3_0_5',
		'3.0.6-rc1'		=> 'phpbb_db_migration_data_3_0_6_rc1',
		'3.0.6-rc2'		=> 'phpbb_db_migration_data_3_0_6_rc2',
		'3.0.6-rc3'		=> 'phpbb_db_migration_data_3_0_6_rc3',
		'3.0.6-rc4'		=> 'phpbb_db_migration_data_3_0_6_rc4',
		'3.0.6'	   		=> 'phpbb_db_migration_data_3_0_6',
		'3.0.7-rc1'		=> 'phpbb_db_migration_data_3_0_7_rc1',
		'3.0.7-rc2'		=> 'phpbb_db_migration_data_3_0_7_rc2',
		'3.0.7'	   		=> 'phpbb_db_migration_data_3_0_7',
		'3.0.7-pl1'		=> 'phpbb_db_migration_data_3_0_7_pl1',
		'3.0.8-rc1'		=> 'phpbb_db_migration_data_3_0_8_rc1',
		'3.0.8'			=> 'phpbb_db_migration_data_3_0_8',
		'3.0.9-rc1'     => 'phpbb_db_migration_data_3_0_9_rc1',
		'3.0.9-rc2'     => 'phpbb_db_migration_data_3_0_9_rc2',
		'3.0.9-rc3'     => 'phpbb_db_migration_data_3_0_9_rc3',
		'3.0.9-rc4'     => 'phpbb_db_migration_data_3_0_9_rc4',
		'3.0.9'			=> 'phpbb_db_migration_data_3_0_9',
		'3.0.10-rc1'    => 'phpbb_db_migration_data_3_0_10_rc1',
		'3.0.10-rc2'    => 'phpbb_db_migration_data_3_0_10_rc2',
		'3.0.10-rc3'    => 'phpbb_db_migration_data_3_0_10_rc3',
		'3.0.10'		=> 'phpbb_db_migration_data_3_0_10',
		'3.0.11-rc1'	=> 'phpbb_db_migration_data_3_0_11_rc1',
		'3.0.11-rc2'	=> 'phpbb_db_migration_data_3_0_11_rc2',
		'3.0.11'		=> 'phpbb_db_migration_data_3_0_11',
		'3.0.12-rc1'	=> 'phpbb_db_migration_data_3_0_12_rc1',
		'3.1.0-dev'		=> array(
			'phpbb_db_migration_data_style_update_p1',
			'phpbb_db_migration_data_style_update_p2',
			'phpbb_db_migration_data_timezone',
			'phpbb_db_migration_data_timezone_p2',
			'phpbb_db_migration_data_extensions',
			'phpbb_db_migration_data_3_1_0_dev',
		),
	);

	public function install(phpbb_db_driver $db, phpbb_db_tools $db_tools, $table_prefix, $version)
	{
		$this->create_table($db_tools);

		$this->guess_installed_migrations($db, $table_prefix, $version);
	}

	protected function create_table(phpbb_db_tools $db_tools)
	{
		if (!$db_tools->sql_table_exists(MIGRATIONS_TABLE))
		{
			$db_tools->sql_create_table(MIGRATIONS_TABLE, array(
				'COLUMNS'		=> array(
					'migration_name'			=> array('VCHAR', ''),
					'migration_depends_on'		=> array('TEXT', ''),
					'migration_schema_done'		=> array('BOOL', 0),
					'migration_data_done'		=> array('BOOL', 0),
					'migration_data_state'		=> array('TEXT', ''),
					'migration_start_time'		=> array('TIMESTAMP', 0),
					'migration_end_time'		=> array('TIMESTAMP', 0),
				),
				'PRIMARY_KEY'	=> 'migration_name',
			));
		}
	}

	/**
	* Guess what migrations have been installed based on phpBB version
	*
	* @param mixed $version
	*/
	protected function guess_installed_migrations(phpbb_db_driver $db, $table_prefix, $version)
	{
		$installed = array();
		foreach ($this->version_to_migration as $compare => $migration_list)
		{
			if (version_compare($version, $compare, '<='))
			{
				// The migration should have effectively been installed already
				if (!is_array($migration_list))
				{
					$migration_list = array($migration_list);
				}

				foreach ($migration_list as $migration_name)
				{
					$sql_ary = array(
						'migration_name'			=> $migration_name,
						'migration_depends_on'		=> $migration_name::depends_on(),
						'migration_schema_done'		=> 1,
						'migration_data_done'		=> 1,
						'migration_data_state'		=> '',
						'migration_start_time'		=> 0,
						'migration_end_time'		=> 0,
					);
					$sql = 'INSERT INTO ' . $table_prefix . 'migrations ' .
						$db->sql_build_array('INSERT', $sql_ary);
					$db->sql_query($sql);
				}
			}
		}
	}
}