* [task#132436,done,2h,0h] Adjust backup settings.

This commit is contained in:
zhaixiaojian
2024-11-16 14:37:45 +08:00
committed by 翟晓剑
parent 3bf51f7590
commit 0dbaa29bc0
4 changed files with 75 additions and 95 deletions
+2 -37
View File
@@ -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();
}
+32 -45
View File
@@ -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;
}
+40 -1
View File
@@ -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)
)
)
);
+1 -12
View File
@@ -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
(