From 0dbaa29bc05e092cd81fcf31f527fa5d9d4e8436 Mon Sep 17 00:00:00 2001 From: zhaixiaojian Date: Sat, 16 Nov 2024 14:16:29 +0800 Subject: [PATCH] * [task#132436,done,2h,0h] Adjust backup settings. --- module/instance/control.php | 39 +---------- module/instance/model.php | 77 +++++++++------------- module/instance/ui/backupsettings.html.php | 41 +++++++++++- module/instance/ui/view.html.php | 13 +--- 4 files changed, 75 insertions(+), 95 deletions(-) diff --git a/module/instance/control.php b/module/instance/control.php index 2ed5052276..db51cbd2cc 100644 --- a/module/instance/control.php +++ b/module/instance/control.php @@ -619,49 +619,14 @@ class instance extends control $instance = $this->instance->getByID($instanceID); if($_POST) { - $settings = fixer::input('post')->trim('backupKeepDays')->get(); - if(!validater::checkInt($settings->backupKeepDays, 1, 30)) return $this->send(array('result' => 'fail', 'message' => array('days' => $this->lang->instance->backup->keepDayRange))); - $this->instance->saveBackupSettings($instance); if(dao::isError()) return $this->send(array('result' => 'fail', 'load' => array('alert' => dao::getError()))); - return $this->send(array('result' => 'success', 'closeModal' => true)); - } - $this->view->instance = $instance; - $this->view->backupSettings = $this->instance->getAutoBackupSettings($instanceID); - $this->display(); - } - - /** - * Display or save auto backup. - * 自动备份设置。 - * - * @param int $id - * @access public - * @return void - */ - public function autoBackup(int $instanceID) - { - $instance = $this->instance->getByID($instanceID); - if($_POST) - { - $this->instance->saveAutoBackupSettings($instance); - if(dao::isError()) return $this->send(array('result' => 'fail', 'load' => array('alert' => dao::getError()))); - - $backupSettings = $this->instance->getAutoBackupSettings($instanceID); $locate = $this->createLink('instance', 'view', 'id=' . $instanceID); - $startTime = strtotime($backupSettings->backupTime); - if($startTime < time()) $startTime = strtotime("+1 day $backupSettings->backupTime"); - if($backupSettings->autoBackup) - { - $startRestoreMessage = sprintf($this->lang->instance->restore->firstStartTime, $instance->name, date('Y-m-d H:i:s', $startTime)); - return $this->send(array('result' => 'success', 'load' => array('alert' => $startRestoreMessage, 'locate' => $locate, 'closeModal' => true))); - } - - return $this->send(array('result' => 'success', 'load' => array('alert' => $this->lang->instance->backup->disableAutoBackup, 'locate' => $locate, 'closeModal' => true))); + return $this->send(array('result' => 'success', 'load' => array('alert' => $this->lang->saveSuccess, 'locate' => $locate, 'closeModal' => true))); } $this->view->instance = $instance; - $this->view->backupSettings = $this->instance->getAutoBackupSettings($instanceID); + $this->view->backupSettings = $this->instance->getBackupSettings($instanceID); $this->display(); } diff --git a/module/instance/model.php b/module/instance/model.php index fd8f4f5fcb..4fbf8fbc8d 100644 --- a/module/instance/model.php +++ b/module/instance/model.php @@ -1222,27 +1222,38 @@ class instanceModel extends model } /** - * Save auto backup settings. - * 保存自动备份配置。 - * @param object $instance - * @access public - * @return bool + * Save backup settings. + * 保存备份设置。 + * + * @param $instance + * @return void */ - public function saveAutoBackupSettings($instance) + public function saveBackupSettings($instance) { - /* Init Default backup properties. */ + /* Initialize properties and validate. */ $settings = fixer::input('post') - ->setDefault('autoBackup', '') + ->setDefault('autoBackup', '0') + ->setDefault('backupKeepDays', 14) ->setDefault('backupTime', '1:00') ->setDefault('backupCycle', '1') ->get(); - if(!preg_match("/^([0-2][0-9]):([0-5][0-9])$/", $settings->backupTime, $parts)) + $autoBackup = (int)$settings->autoBackup; + $command = 'moduleName=instance&methodName=cronBackup&instanceID=' . $instance->id; + if(!validater::checkInt($settings->backupKeepDays, 1, 30)) + { + dao::$errors[] = $this->lang->instance->backup->keepDayRange; + return false; + } + if($autoBackup == 1 && !preg_match("/^([0-2][0-9]):([0-5][0-9])$/", $settings->backupTime, $parts)) { dao::$errors[] = $this->lang->instance->backup->invalidTime; return false; } - $autoBackup = (int)$settings->autoBackup; - $command = 'moduleName=instance&methodName=cronBackup&instanceID=' . $instance->id; + if($instance->backupKeepDays != $settings->backupKeepDays) + { + $this->dao->update(TABLE_INSTANCE)->set('backupKeepDays')->eq($settings->backupKeepDays)->where('id')->eq($instance->id)->exec(); + if($this->dao->isError()) return false; + } /* Disable backup operation. */ if(!$autoBackup) @@ -1251,13 +1262,12 @@ class instanceModel extends model $this->dao->update(TABLE_INSTANCE)->set('autoBackup')->eq($autoBackup)->where('id')->eq($instance->id)->exec(); if($this->dao->isError()) return false; - $this->action->create('instance', $instance->id, 'closeautobackup', '', json_encode(array('result' => 'success', 'data' => $settings))); + $this->action->create('instance', $instance->id, 'savebackupsettings', '', json_encode(array('result' => 'success', 'data' => $settings))); return true; } /* Enable backup operation. */ $cron = $this->dao->select('*')->from(TABLE_CRON)->where('command')->eq($command)->fetch(); - list($hour, $minute) = explode(':', $settings->backupTime); $cronData = new stdclass; $cronData->m = intval($minute); @@ -1270,48 +1280,25 @@ class instanceModel extends model $cronData->command = $command; $cronData->remark = $this->lang->instance->backup->cronRemark; - /* Save cron task. */ + $this->dao->update(TABLE_INSTANCE)->set('autoBackup')->eq($autoBackup)->where('id')->eq($instance->id)->exec(); + if($this->dao->isError()) return false; + if($cron) $this->dao->update(TABLE_CRON)->autoCheck()->data($cronData)->where('id')->eq($cron->id)->exec(); else $this->dao->insert(TABLE_CRON)->data($cronData)->exec(); if($this->dao->isError()) return false; - - /* Save instance backup settings. */ - $this->dao->update(TABLE_INSTANCE)->set('autoBackup')->eq($settings->autoBackup)->where('id')->eq($instance->id)->exec(); - if($this->dao->isError()) return false; - - $this->action->create('instance', $instance->id, 'openautobackup', '', json_encode(array('result' => 'success', 'data' => $settings))); - return true; - } - - /** - * Save backup settings. - * 保存备份设置。 - * - * @param $instance - * @return void - */ - public function saveBackupSettings($instance) - { - $settings = fixer::input('post')->trim('backupKeepDays')->get(); - if($instance->backupKeepDays == $settings->backupKeepDays) return true; - - /* Save instance backup settings. */ - $this->dao->update(TABLE_INSTANCE)->set('backupKeepDays')->eq($settings->backupKeepDays)->where('id')->eq($instance->id)->exec(); - if($this->dao->isError()) return false; - $this->action->create('instance', $instance->id, 'savebackupsettings', '', json_encode(array('result' => 'success', 'data' => $settings))); return true; } /** - * Get auto backup settings. - * 获取自动备份设置。 + * Get backup settings. + * 获取备份设置。 * * @param int $instnaceID * @access public * @return object */ - public function getAutoBackupSettings($instanceID) + public function getBackupSettings($instanceID) { $instance = $this->getByID($instanceID); $cron = $this->dao->select('*')->from(TABLE_CRON)->where('command')->eq('moduleName=instance&methodName=cronBackup&instanceID=' . $instance->id)->limit(1)->fetch(); @@ -1321,9 +1308,9 @@ class instanceModel extends model $minute = substr('0' . zget($cron, 'm', '00'), -2, 2); $settings = new stdclass; - $settings->backupTime = "{$hour}:{$minute}"; - $settings->autoBackup = boolval(zget($instance, 'autoBackup', false)); - $settings->cycleDays = 1; // Cycle days is always is 1 at present. + $settings->backupTime = "{$hour}:{$minute}"; + $settings->autoBackup = boolval(zget($instance, 'autoBackup', false)); + $settings->cycleDays = 1; // Cycle days is always is 1 at present. return $settings; } diff --git a/module/instance/ui/backupsettings.html.php b/module/instance/ui/backupsettings.html.php index 9b5b0da5c4..50d5ab52e0 100644 --- a/module/instance/ui/backupsettings.html.php +++ b/module/instance/ui/backupsettings.html.php @@ -25,11 +25,50 @@ formPanel set::name('backupKeepDays'), set::width('20px'), set::required(true), - set::class('backup-settings'), set::label($this->lang->instance->backup->keepDays), set::control('input'), set::value((int)$instance->backupKeepDays), span($this->lang->instance->backup->backupSettingsTips, set::className('text-warning inline-block mt-2')) ), + ), + formRow + ( + formGroup + ( + set::width('20px'), + set::label($lang->instance->restore->enableAutoRestore), + radioList + ( + set::name('autoBackup'), + set::items($lang->instance->backup->autoRestoreOptions), + set::value($instance->autoBackup), + set::inline(true) + ) + ) + ), + formRow( + formGroup + ( + set::name('backupTime'), + set::width('20px'), + set::required(true), + set::class('backup-settings'), + set::label($lang->instance->backup->backupTime), + set::control(array('control' => 'time')), + set::value($backupSettings->backupTime) + ) + ), + formRow( + formGroup + ( + set::name('backupCycle'), + set::width('20px'), + set::required(true), + set::control('picker'), + set::class('backup-settings'), + set::label($lang->instance->backup->cycleDays), + set::items($lang->instance->backup->cycleList), + set::value($backupSettings->cycleDays) + ) ) ); diff --git a/module/instance/ui/view.html.php b/module/instance/ui/view.html.php index 14e9c52702..167d308aa1 100644 --- a/module/instance/ui/view.html.php +++ b/module/instance/ui/view.html.php @@ -284,24 +284,13 @@ div btn( set(array ( - 'icon' => 'backend', + 'icon' => 'refresh', 'class' => 'ghost btn', 'text' => $lang->instance->backup->operators['manual'] , 'data-size' => 'sm', 'onclick' => "onManualBackup({$instance->id})" )) ), - btn( - set(array - ( - 'icon' => 'backend', - 'class' => 'ghost btn', - 'text' => $lang->instance->backup->operators['auto'] , - 'url' => createLink('instance', 'autoBackup', "id={$instance->id}"), - 'data-size' => 'sm', - 'data-toggle' => 'modal' - )) - ), btn( set(array (