allTables(); $pdo = $connect->getPDO(); $prefixedMigrationTable = Utils::table(MIGRATION_TABLE); if (!in_array($prefixedMigrationTable, $tables)) { $pdo->exec(' CREATE TABLE IF NOT EXISTS `' . $prefixedMigrationTable . '` ( `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;'); } $selectStmt = $pdo->prepare('SELECT id FROM ' . $prefixedMigrationTable . ' WHERE name=?'); $insertStmt = $pdo->prepare('INSERT INTO ' . $prefixedMigrationTable . ' (name) VALUES (?)'); $countSucceeded = 0; $countFailed = 0; $countSkipped = 0; // Loop on every Migration sub classes $success = []; $fail = []; foreach ($migrations as $migration) { $className = get_class($migration); // Check if $className is a Migration sub class if (!$migration instanceof Migration) { $smarty->assign('error', 'The class ' . $className . ' is not a sub class of Framadate\\Migration\\Migration.'); $smarty->display('error.tpl'); exit; } // Check if the Migration is already executed $selectStmt->execute([$className]); $executed = $selectStmt->rowCount(); $selectStmt->closeCursor(); if (!$executed && $migration->preCondition($pdo)) { $migration->execute($pdo); if ($insertStmt->execute([$className])) { $countSucceeded++; $success[] = $migration->description(); } else { $countFailed++; $fail[] = $migration->description(); } } else { $countSkipped++; } } $countTotal = $countSucceeded + $countFailed + $countSkipped; $smarty->assign('success', $success); $smarty->assign('fail', $fail); $smarty->assign('countSucceeded', $countSucceeded); $smarty->assign('countFailed', $countFailed); $smarty->assign('countSkipped', $countSkipped); $smarty->assign('countTotal', $countTotal); $smarty->assign('time', $total_time = round((microtime(true)-$_SERVER['REQUEST_TIME_FLOAT']), 4)); $smarty->assign('title', _('Migration')); $smarty->display('admin/migration.tpl');