Feature migrations up/down (#270)

* Migrations up down

* Add forum model

* Syntactic sugar for db structure changes

* Refactor migrations with $up & $down

* Fix migrations upgrade and downgrade

+ Add option to disable auto migrate

* Add migrate:to command

Usage: php aac migrate:to x (x - database version)

* Show error when mail is not enabled

* Fixes regarding to init.php

* Add migrate command to manually upgrade db, incase auto migrate is disabled

* Fixed rest of the migrations

* Limit max version of database

* Don't allow minus number

* Option to clear specified plugin settings by name

* Version is required

* Fix PHPStan errors

* Unset $up after migration, to prevent executing same migration twice

* Add database version to output

* This is not needed

* Update 5.php

* Set database_auto_migrate on install

* Set blank & color only if current db version supports it

* Fix duplicate function declaration
This commit is contained in:
Slawomir Boczek
2024-11-22 15:29:23 +01:00
committed by GitHub
parent 79636280a7
commit 3f6ff3a332
72 changed files with 1268 additions and 396 deletions

View File

@@ -1,31 +1,35 @@
<?php
/**
* @var OTS_DB_MySQL $db
*/
if(!$db->hasTable('z_polls'))
$db->query('
CREATE TABLE `z_polls` (
`id` int(11) NOT NULL auto_increment,
`question` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
`end` int(11) NOT NULL DEFAULT 0,
`start` int(11) NOT NULL DEFAULT 0,
`answers` int(11) NOT NULL DEFAULT 0,
`votes_all` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
');
$up = function () use ($db) {
if (!$db->hasTable('z_polls')) {
$db->exec(file_get_contents(__DIR__ . '/22-z_polls.sql'));
}
if(!$db->hasTable('z_polls_answers'))
$db->query('
CREATE TABLE `z_polls_answers` (
`poll_id` int(11) NOT NULL,
`answer_id` int(11) NOT NULL,
`answer` varchar(255) NOT NULL,
`votes` int(11) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
');
if (!$db->hasTable('z_polls_answers')) {
$db->exec(file_get_contents(__DIR__ . '/22-z_polls_answers.sql'));
}
if(!$db->hasColumn('accounts', 'vote'))
$db->query('ALTER TABLE `accounts` ADD `vote` INT( 11 ) DEFAULT 0 NOT NULL ;');
else {
$db->query('ALTER TABLE `accounts` MODIFY `vote` INT( 11 ) DEFAULT 0 NOT NULL ;');
}
if (!$db->hasColumn('accounts', 'vote')) {
$db->addColumn('accounts', 'vote', 'int(11) NOT NULL DEFAULT 0');
}
else {
$db->modifyColumn('accounts', 'vote', 'int(11) NOT NULL DEFAULT 0');
}
};
$down = function () use ($db) {
if ($db->hasTable('z_polls')) {
$db->dropTable('z_polls;');
}
if ($db->hasTable('z_polls_answers')) {
$db->dropTable('z_polls_answers');
}
if ($db->hasColumn('accounts', 'vote')) {
$db->dropColumn('accounts', 'vote');
}
};