'; global $connect; - if ($connect->areTablesCreated()) { + $tables = $connect->allTables(); + $diff = array_diff($tables, ['comment', 'poll', 'slot', 'vote']); + if (0 != count($diff)) { echo '
'. _('Framadate is not properly installed, please check the "INSTALL" to setup the database before continuing.') .'
'; bandeau_pied(); die(); diff --git a/from_0-8_to_0-9.sql b/from_0-8_to_0-9.sql deleted file mode 100644 index 2b2ae23..0000000 --- a/from_0-8_to_0-9.sql +++ /dev/null @@ -1,136 +0,0 @@ --- -------------------------------------------------------- - --- --- Table structure `poll` --- - -CREATE TABLE IF NOT EXISTS `poll` ( - `id` CHAR(16) NOT NULL, - `admin_id` CHAR(24) NOT NULL, - `title` TEXT NOT NULL, - `description` TEXT, - `admin_name` VARCHAR(64) DEFAULT NULL, - `admin_mail` VARCHAR(128) DEFAULT NULL, - `creation_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - `end_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', - `format` VARCHAR(1) DEFAULT NULL, - `editable` TINYINT(1) DEFAULT '0', - `receiveNewVotes` TINYINT(1) DEFAULT '0', - `active` TINYINT(1) DEFAULT '1', - PRIMARY KEY (`id`) -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8; - --- -------------------------------------------------------- - --- --- Table structure `slot` --- - -CREATE TABLE IF NOT EXISTS `slot` ( - `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `poll_id` CHAR(16) NOT NULL, - `title` TEXT, - `moments` TEXT, - PRIMARY KEY (`id`), - KEY `poll_id` (`poll_id`) -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8; - --- -------------------------------------------------------- - --- --- Table structure `comment` --- - -CREATE TABLE IF NOT EXISTS `comment` ( - `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `poll_id` CHAR(16) NOT NULL, - `name` TEXT, - `comment` TEXT NOT NULL, - PRIMARY KEY (`id`), - KEY `poll_id` (`poll_id`) -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8; - --- -------------------------------------------------------- - --- --- Table structure `vote` --- - -CREATE TABLE IF NOT EXISTS `vote` ( - `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, - `poll_id` CHAR(16) NOT NULL, - `name` VARCHAR(64) NOT NULL, - `choices` TEXT NOT NULL, - PRIMARY KEY (`id`), - KEY `poll_id` (`poll_id`) -) - ENGINE = InnoDB - DEFAULT CHARSET = utf8; - --- -------------------------------------------------------- - --- --- Migrate data from `sondage` to `poll` --- - -INSERT INTO `poll` -(`id`, `admin_id`, `title`, `description`, `admin_name`, `admin_mail`, `creation_date`, `end_date`, `format`, `editable`, `receiveNewVotes`, `active`) - SELECT - `id_sondage`, - `id_sondage_admin`, - `titre`, - `commentaires`, - `nom_admin`, - `mail_admin`, - `titre`, - `date_creation`, - `date_fin`, - SUBSTR(`format`, 1, 1) AS `format`, - CASE SUBSTR(`format`, 2, 1) - WHEN '+' THEN 1 - ELSE 0 END AS `editable`, - `mailsonde`, - CASE SUBSTR(`format`, 2, 1) - WHEN '-' THEN 0 - ELSE 1 END AS `active` - FROM sondage; - --- -------------------------------------------------------- - --- --- Migrate data from `sujet_studs` to `slot` --- - --- TODO Migrate this, is not so simple -/*INSERT INTO `slot` -(`poll_id`, `title`, `moments`) - SELECT `id_sondage`, - FROM `user_studs`;*/ - --- -------------------------------------------------------- - --- --- Migrate data from `comments` to `comment` --- - -INSERT INTO `comment` -(`poll_id`, `name`, `comment`) - SELECT `id_sondage`, `usercomment`, `comment` - FROM `comments`; - --- -------------------------------------------------------- - --- --- Migrate data from `user_studs` to `vote` --- - -INSERT INTO `vote` -(`poll_id`, `name`, `choices`) - SELECT `id_sondage`, `nom`, REPLACE(REPLACE(REPLACE(`reponses`, '1', 'X'), '2', '1'), 'X', 2) - FROM `user_studs`; diff --git a/migration.php b/migration.php new file mode 100644 index 0000000..af64ef9 --- /dev/null +++ b/migration.php @@ -0,0 +1,60 @@ +'; +} + +// List a Migration sub classes to execute +$migrations = [ + new From_0_8_to_0_9_Migration(), + new From_0_8_to_0_9_Migration() +]; + +// Check if MIGRATION_TABLE already exists +$tables = $connect->allTables(); +$pdo = $connect->getPDO(); + +if (!in_array(MIGRATION_TABLE, $tables)) { + $pdo->exec(' +CREATE TABLE IF NOT EXISTS `' . MIGRATION_TABLE . '` ( + `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `name` TEXT NOT NULL, + `execute_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) + ENGINE = MyISAM + DEFAULT CHARSET = utf8;'); + + output('Table ' . MIGRATION_TABLE . ' created.'); +} + +$selectStmt = $pdo->prepare('SELECT id FROM ' . MIGRATION_TABLE . ' WHERE name=?'); +$insertStmt = $pdo->prepare('INSERT INTO ' . MIGRATION_TABLE . ' (name) VALUES (?)'); + +// Loop on every Migration sub classes +foreach ($migrations as $migration) { + $className = get_class($migration); + + // Check if $className is a Migration sub class + if (!$migration instanceof Migration) { + output('The class '. $className . ' is not a sub class of Framadate\\Migration\\Migration.'); + exit; + } + + // Check if the Migration is already executed + $selectStmt->execute([$className]); + $executed = $selectStmt->rowCount(); + $selectStmt->closeCursor(); + + if (!$executed) { + $migration->execute($pdo); + $insertStmt->execute([$className]); + output('Migration done: ' . $className); + } + +}