From 50b5483ee1ae7882a4cc5ff4c0098eb4169f4b91 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 13 Sep 2020 15:57:24 +0000 Subject: [PATCH] Ability to set the database version --- src/Console/DatabaseStructure.php | 11 ++++++++++- src/Database/DBStructure.php | 16 ++++++++++++++++ src/Module/Friendica.php | 2 +- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Console/DatabaseStructure.php b/src/Console/DatabaseStructure.php index 6b1fa8d4d6..a1b4fdbfe8 100644 --- a/src/Console/DatabaseStructure.php +++ b/src/Console/DatabaseStructure.php @@ -55,6 +55,7 @@ Commands update Update database schema dumpsql Dump database schema toinnodb Convert all tables from MyISAM or InnoDB in the Antelope file format to InnoDB in the Barracuda file format + version Set the database to a given number Options -h|--help|-? Show help information @@ -86,8 +87,10 @@ HELP; return 0; } - if (count($this->args) > 1) { + if ((count($this->args) > 1) && ($this->getArgument(0) != 'version')) { throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments'); + } elseif ((count($this->args) != 2) && ($this->getArgument(0) == 'version')) { + throw new \Asika\SimpleConsole\CommandArgsException('This command needs two arguments'); } if (!$this->dba->isConnected()) { @@ -115,6 +118,12 @@ HELP; DBStructure::convertToInnoDB(); $output = ob_get_clean(); break; + case "version": + ob_start(); + DBStructure::setDatabaseVersion($this->getArgument(1)); + $output = ob_get_clean(); + break; + default: $output = 'Unknown command: ' . $this->getArgument(0); } diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index bf76eccacb..bdd8cc208e 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -48,6 +48,22 @@ class DBStructure */ private static $definition = []; + /** + * Set a database version to trigger update functions + * + * @param string $version + * @return void + */ + public static function setDatabaseVersion(string $version) + { + if (!is_numeric($version)) { + throw new \Asika\SimpleConsole\CommandArgsException('The version number must be numeric'); + } + + DI::config()->set('system', 'build', $version); + echo DI::l10n()->t('The database version had been set to %s.', $version); + } + /** * Converts all tables from MyISAM/InnoDB Antelope to InnoDB Barracuda */ diff --git a/src/Module/Friendica.php b/src/Module/Friendica.php index 2d76f80d04..f02cc2610b 100644 --- a/src/Module/Friendica.php +++ b/src/Module/Friendica.php @@ -95,7 +95,7 @@ class Friendica extends BaseModule 'about' => DI::l10n()->t('This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.', '' . FRIENDICA_VERSION . '', DI::baseUrl()->get(), - '' . DB_UPDATE_VERSION . '', + '' . DB_UPDATE_VERSION . '/' . $config->get('system', 'build') .'', '' . $config->get('system', 'post_update_version') . ''), 'friendica' => DI::l10n()->t('Please visit Friendi.ca to learn more about the Friendica project.'), 'bugs' => DI::l10n()->t('Bug reports and issues: please visit') . ' ' . '' . DI::l10n()->t('the bugtracker at github') . '',