Reduce the parameter chaos by splitting the update function

This commit is contained in:
Michael 2021-01-30 13:31:59 +00:00
parent 90f1175cf5
commit 8eb3bddc2a
6 changed files with 60 additions and 18 deletions

View file

@ -106,7 +106,7 @@ HELP;
switch ($this->getArgument(0)) { switch ($this->getArgument(0)) {
case "dryrun": case "dryrun":
$output = DBStructure::update($basePath, true, false); $output = DBStructure::dryRun();
break; break;
case "update": case "update":
$force = $this->getOption(['f', 'force'], false); $force = $this->getOption(['f', 'force'], false);

View file

@ -192,7 +192,7 @@ class Installer
*/ */
public function installDatabase($basePath) public function installDatabase($basePath)
{ {
$result = DBStructure::update($basePath, false, true, true); $result = DBStructure::install($basePath);
if ($result) { if ($result) {
$txt = DI::l10n()->t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL; $txt = DI::l10n()->t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL;

View file

@ -166,7 +166,7 @@ class Update
// update the structure in one call // update the structure in one call
Logger::notice('Execute structure update'); Logger::notice('Execute structure update');
$retval = DBStructure::update($basePath, $verbose, true); $retval = DBStructure::performUpdate(false, $verbose);
if (!empty($retval)) { if (!empty($retval)) {
if ($sendMail) { if ($sendMail) {
self::updateFailed( self::updateFailed(

View file

@ -361,6 +361,54 @@ class DBStructure
return ($sql); return ($sql);
} }
/**
* Perform a database structure dryrun (means: just simulating)
*
* @throws Exception
*/
public static function dryRun()
{
self::update(DI::app()->getBasePath(), true, false);
}
/**
* Updates DB structure and returns eventual errors messages
*
* @param bool $enable_maintenance_mode Set the maintenance mode
* @param bool $verbose Display the SQL commands
*
* @return string Empty string if the update is successful, error messages otherwise
* @throws Exception
*/
public static function performUpdate(bool $enable_maintenance_mode = true, bool $verbose = false)
{
if ($enable_maintenance_mode) {
DI::config()->set('system', 'maintenance', 1);
}
$status = self::update(DI::app()->getBasePath(), $verbose, true);
if ($enable_maintenance_mode) {
DI::config()->set('system', 'maintenance', 0);
DI::config()->set('system', 'maintenance_reason', '');
}
return $status;
}
/**
* Updates DB structure from the installation and returns eventual errors messages
*
* @param string $basePath The base path of this application
*
* @return string Empty string if the update is successful, error messages otherwise
* @throws Exception
*/
public static function install(string $basePath)
{
return self::update($basePath, false, true, true);
}
/** /**
* Updates DB structure and returns eventual errors messages * Updates DB structure and returns eventual errors messages
* *
@ -373,16 +421,15 @@ class DBStructure
* @return string Empty string if the update is successful, error messages otherwise * @return string Empty string if the update is successful, error messages otherwise
* @throws Exception * @throws Exception
*/ */
public static function update($basePath, $verbose, $action, $install = false, array $tables = null, array $definition = null) private static function update($basePath, $verbose, $action, $install = false, array $tables = null, array $definition = null)
{ {
$in_maintenance = DI::config()->get('system', 'maintenance'); $in_maintenance_mode = DI::config()->get('system', 'maintenance');
if ($action && !$install) { if ($action && !$install && self::isUpdating()) {
if (self::isUpdating()) { return DI::l10n()->t('Another database update is currently running.');
return DI::l10n()->t('Another database update is currently running.'); }
}
DI::config()->set('system', 'maintenance', 1); if ($in_maintenance_mode) {
DI::config()->set('system', 'maintenance_reason', DI::l10n()->t('%s: Database update', DateTimeFormat::utcNow() . ' ' . date('e'))); DI::config()->set('system', 'maintenance_reason', DI::l10n()->t('%s: Database update', DateTimeFormat::utcNow() . ' ' . date('e')));
} }
@ -682,7 +729,7 @@ class DBStructure
} }
if ($action) { if ($action) {
if (!$install) { if ($in_maintenance_mode) {
DI::config()->set('system', 'maintenance_reason', DI::l10n()->t('%s: updating %s table.', DateTimeFormat::utcNow() . ' ' . date('e'), $name)); DI::config()->set('system', 'maintenance_reason', DI::l10n()->t('%s: updating %s table.', DateTimeFormat::utcNow() . ' ' . date('e'), $name));
} }
@ -739,11 +786,6 @@ class DBStructure
self::checkInitialValues(); self::checkInitialValues();
if ($action && !$install) { if ($action && !$install) {
if (!$in_maintenance) {
DI::config()->set('system', 'maintenance', 0);
DI::config()->set('system', 'maintenance_reason', '');
}
if ($errors) { if ($errors) {
DI::config()->set('system', 'dbupdate', self::UPDATE_FAILED); DI::config()->set('system', 'dbupdate', self::UPDATE_FAILED);
} else { } else {

View file

@ -54,7 +54,7 @@ class DBSync extends BaseAdmin
break; break;
case 'check': case 'check':
// @TODO Seems like a similar logic like Update::check() // @TODO Seems like a similar logic like Update::check()
$retval = DBStructure::update($a->getBasePath(), false, true); $retval = DBStructure::performUpdate();
if ($retval === '') { if ($retval === '') {
$o = DI::l10n()->t("Database structure update %s was successfully applied.", DB_UPDATE_VERSION) . "<br />"; $o = DI::l10n()->t("Database structure update %s was successfully applied.", DB_UPDATE_VERSION) . "<br />";
} else { } else {

View file

@ -82,7 +82,7 @@ class Summary extends BaseAdmin
} }
if (DI::config()->get('system', 'dbupdate', DBStructure::UPDATE_NOT_CHECKED) == DBStructure::UPDATE_NOT_CHECKED) { if (DI::config()->get('system', 'dbupdate', DBStructure::UPDATE_NOT_CHECKED) == DBStructure::UPDATE_NOT_CHECKED) {
DBStructure::update($a->getBasePath(), false, true); DBStructure::performUpdate();
} }
if (DI::config()->get('system', 'dbupdate') == DBStructure::UPDATE_FAILED) { if (DI::config()->get('system', 'dbupdate') == DBStructure::UPDATE_FAILED) {