+ /**
+ * 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);
+ }
+