From d69d7e82b8bbb567668c935ace848c7dcf750b08 Mon Sep 17 00:00:00 2001 From: Thomas Lange Date: Thu, 24 Jun 2021 21:09:24 +0200 Subject: Implement database schema Migrator This commit implements the new database schema Migrator which keeps track of the on-disk schema and the schema used by the codebase. It tries to makes future database schema upgrades user-friendlier. --- core/migrations.php | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 core/migrations.php (limited to 'core/migrations.php') diff --git a/core/migrations.php b/core/migrations.php new file mode 100644 index 0000000..f2c9714 --- /dev/null +++ b/core/migrations.php @@ -0,0 +1,43 @@ +isMigrationNeeded()) { + @session_start(); + + Application::set('TEMPLATE.NAME', Application::get('ADMIN.TEMPLATE')); + Application::set('TEMPLATE.LANG', Application::get('ADMIN.LANGUAGE')); + Application::getLanguage(TRUE); // Force recreation of Language object + + if(HTTP::issetPOST(['token' => Application::getSecurityToken()], 'run')) { + if(!$migrated = $Migrator->runMigrations()) { + Application::exit('CONFUSED: No migrations were performed?!'); + } + } + + $Template = Template\Factory::build('migration'); + $Template->set('MIGRATION', [ + 'LIST' => $Migrator->getMigrations(), + 'SUCCESSFUL' => $migrated ?? [], + 'SCHEMA_VERSION' => [ + 'DATABASE' => $Migrator->getVersionFromTable(), + 'CODEBASE' => $Migrator::CURRENT_SCHEMA_VERSION + ], + ]); + + Application::exit($Template); +} + +#=============================================================================== +# Check for an unsupported downgrade attempt +#=============================================================================== +else if($Migrator->isDowngradeAttempt()) { + throw new Exception('MIGRATOR: The schema version used by *your* database is + higher than the schema version defined in the codebase. It is officially + not supported to automatically downgrade the database schema version!'); +} -- cgit v1.2.3