aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/db/migration/install.php
diff options
context:
space:
mode:
authorNathan Guse <nathaniel.guse@gmail.com>2013-01-10 22:28:48 -0600
committerNathan Guse <nathaniel.guse@gmail.com>2013-02-06 11:35:53 -0600
commit74f4397451dae0ab83d977d97d96ed9549bf3ab9 (patch)
tree60b34dedec55aff177655925b5656258db298d74 /phpBB/includes/db/migration/install.php
parentbabdb92aa998728b58eec1e3f2c036b5f2342492 (diff)
downloadforums-74f4397451dae0ab83d977d97d96ed9549bf3ab9.tar
forums-74f4397451dae0ab83d977d97d96ed9549bf3ab9.tar.gz
forums-74f4397451dae0ab83d977d97d96ed9549bf3ab9.tar.bz2
forums-74f4397451dae0ab83d977d97d96ed9549bf3ab9.tar.xz
forums-74f4397451dae0ab83d977d97d96ed9549bf3ab9.zip
[feature/migrations] Make depends_on static to call it without dependencies
Move installing migrations to migration/install.php and handle figuring out what migrations have been installed based on phpBB version. PHPBB3-11318
Diffstat (limited to 'phpBB/includes/db/migration/install.php')
-rw-r--r--phpBB/includes/db/migration/install.php129
1 files changed, 129 insertions, 0 deletions
diff --git a/phpBB/includes/db/migration/install.php b/phpBB/includes/db/migration/install.php
new file mode 100644
index 0000000000..af2ba392b1
--- /dev/null
+++ b/phpBB/includes/db/migration/install.php
@@ -0,0 +1,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);
+ }
+ }
+ }
+ }
+}