diff --git a/datamodels/2.x/itop-backup/status.php b/datamodels/2.x/itop-backup/status.php
index e9ae60bf2..7f030e927 100644
--- a/datamodels/2.x/itop-backup/status.php
+++ b/datamodels/2.x/itop-backup/status.php
@@ -23,6 +23,7 @@ use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableUIBlockFactory
use Combodo\iTop\Application\UI\Base\Component\FieldSet\FieldSet;
use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory;
+use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
use Combodo\iTop\Application\UI\Base\UIBlock;
use Combodo\iTop\Renderer\BlockRenderer;
@@ -39,27 +40,26 @@ require_once(APPROOT.'application/startup.inc.php');
require_once(APPROOT.'application/loginwebpage.class.inc.php');
-function GenerateBackupsList(string $sListTitleDictKey, string $sNoRecordDictKey, $aListConfig, $aListData): UIBlock
+function GenerateBackupsList(string $sListTitleDictKey, string $sNoRecordDictKey, $aListConfig, $aListData, $sTableId): UIBlock
{
- $oFieldsetForList = new FieldSet(Dict::S($sListTitleDictKey));
-
+ $oBlockForList = new UIContentBlock();
+ $oBlockForList->AddSubBlock(TitleUIBlockFactory::MakeNeutral(Dict::S($sListTitleDictKey), 2));
if (count($aListData) > 0) {
- $oTable = DataTableUIBlockFactory::MakeForStaticData('', $aListConfig, array_reverse($aListData), utils::Sanitize(uniqid('form_', true), '', utils::ENUM_SANITIZATION_FILTER_ELEMENT_IDENTIFIER));
+ $oTable = DataTableUIBlockFactory::MakeForStaticData('', $aListConfig, array_reverse($aListData), $sTableId);
$oTablePanel = PanelUIBlockFactory::MakeForInformation('');
$oTablePanel->AddSubBlock($oTable);
$oTablePanel->AddCSSClass('ibo-datatable-panel');
-
- $oFieldsetForList->AddSubBlock($oTablePanel);
+ $oBlockForList->AddSubBlock($oTablePanel);
} else {
- $oFieldsetForList->AddSubBlock(
+ $oBlockForList->AddSubBlock(
AlertUIBlockFactory::MakeNeutral('', Dict::S($sNoRecordDictKey))
->SetIsClosable(false)
->SetIsCollapsible(false)
);
}
- return $oFieldsetForList;
+ return $oBlockForList;
}
@@ -89,8 +89,10 @@ try {
}
//--- Settings and checks
- $oFieldsetChecks = new FieldSet(Dict::S('bkp-status-checks'));
- $oP->AddUiBlock($oFieldsetChecks);
+ $oBlockForChecks = new UIContentBlock();
+ $oBlockForChecks->AddSubBlock(TitleUIBlockFactory::MakeNeutral(Dict::S('bkp-status-checks'), 2));
+
+ $oP->AddUiBlock($oBlockForChecks);
// Availability of mysqldump
//
@@ -108,7 +110,7 @@ try {
$iRetCode = 0;
exec($sCommand, $aOutput, $iRetCode);
if ($iRetCode == 0) {
- $oFieldsetChecks->AddSubBlock(
+ $oBlockForChecks->AddSubBlock(
AlertUIBlockFactory::MakeForSuccess('', Dict::Format("bkp-mysqldump-ok", $aOutput[0]))
->SetIsClosable(false)
->SetIsCollapsible(false)
@@ -119,7 +121,7 @@ try {
} else {
$sMySqlDump = Dict::Format("bkp-mysqldump-issue", $iRetCode);
}
- $oFieldsetChecks->AddSubBlock(
+ $oBlockForChecks->AddSubBlock(
AlertUIBlockFactory::MakeForWarning($sMySqlDump)
->SetIsClosable(false)
->SetIsCollapsible(false)
@@ -135,7 +137,7 @@ try {
$sBackupDir = realpath(APPROOT.'data/backups/');
SetupUtils::builddir($sBackupDir);
if (!is_dir($sBackupDir)) {
- $oFieldsetChecks->AddSubBlock(
+ $oBlockForChecks->AddSubBlock(
AlertUIBlockFactory::MakeForWarning('', Dict::Format('bkp-missing-dir', $sBackupDir))
->SetIsClosable(false)
->SetIsCollapsible(false)
@@ -143,13 +145,13 @@ try {
} else {
$sBackupDir = realpath($sBackupDir); // just for cosmetic purpose (dir separator, as APPROOT contains a hardcoded '/')
$sDiskSpaceReadable = SetupUtils::HumanReadableSize(SetupUtils::CheckDiskSpace($sBackupDir));
- $oFieldsetChecks->AddSubBlock(
+ $oBlockForChecks->AddSubBlock(
AlertUIBlockFactory::MakeForInformation('', Dict::Format('bkp-free-disk-space', $sDiskSpaceReadable, $sBackupDir))
->SetIsClosable(false)
->SetIsCollapsible(false)
);
if (!is_writable($sBackupDir)) {
- $oFieldsetChecks->AddSubBlock(
+ $oBlockForChecks->AddSubBlock(
AlertUIBlockFactory::MakeForWarning(Dict::Format('bkp-dir-not-writeable', $sBackupDir))
->SetIsClosable(false)
->SetIsCollapsible(false)
@@ -168,7 +170,7 @@ try {
$sZipName = $oBackup->MakeName($sBackupFile);
$sZipNameInfo = '';
if ($sZipName == '') {
- $oFieldsetChecks->AddSubBlock(
+ $oBlockForChecks->AddSubBlock(
AlertUIBlockFactory::MakeForWarning(Dict::Format('bkp-wrong-format-spec', $sBackupFile, BACKUP_DEFAULT_FORMAT))
->SetIsClosable(false)
->SetIsCollapsible(false)
@@ -201,7 +203,7 @@ try {
$iRetention = MetaModel::GetConfig()->GetModuleSetting('itop-backup', 'retention_count', 5);
$sScheduleInfo .= '
'.Dict::Format('bkp-retention', $iRetention);
- $oFieldsetChecks->AddSubBlock(
+ $oBlockForChecks->AddSubBlock(
AlertUIBlockFactory::MakeForInformation('', $sScheduleInfo)
->SetIsClosable(false)
->SetIsCollapsible(false)
@@ -226,6 +228,7 @@ try {
//--- 1st table: list the backups made in the background
//
$aDetails = array();
+ $sButtonOnClickJS = '';
foreach ($oBackup->ListFiles($sBackupDirAuto) as $sBackupFile) {
$sFileName = basename($sBackupFile);
$sFilePath = 'auto/'.$sFileName;
@@ -252,7 +255,7 @@ try {
'size' => $sSize,
'actions' => BlockRenderer::RenderBlockTemplates($oButton),
);
- $oP->add_ready_script('$("#'.$oButton->GetId().'").on("click", function () {LaunchRestoreNow("'.$sFileEscaped.'", "'.$sConfirmRestore.'");});');
+ $sButtonOnClickJS .= '$("#'.$oButton->GetId().'").on("click", function () {LaunchRestoreNow("'.$sFileEscaped.'", "'.$sConfirmRestore.'");});';
} else {
$aDetails[] = array('file' => $sName, 'size' => $sSize, 'actions' => BlockRenderer::RenderBlockTemplates($oButton));
}
@@ -262,20 +265,29 @@ try {
'size' => array('label' => Dict::S('bkp-table-size'), 'description' => Dict::S('bkp-table-size+')),
'actions' => array('label' => Dict::S('bkp-table-actions'), 'description' => Dict::S('bkp-table-actions+')),
);
-
+ $sTableId = 'datatable_background_backups';
$oP->AddUiBlock(
GenerateBackupsList(
'bkp-status-backups-auto',
'bkp-status-backups-none',
$aConfig,
- $aDetails
+ $aDetails,
+ $sTableId
)
);
+ $oP->add_ready_script(
+ <<ListFiles($sBackupDirManual) as $sBackupFile) {
$sFileName = basename($sBackupFile);
$sFilePath = 'manual/'.$sFileName;
@@ -297,33 +309,44 @@ try {
$oButton = ButtonUIBlockFactory::MakeNeutral("$sRestore");
$oButton->SetIsDisabled($oRestoreMutex->IsLocked());
$aDetails[] = array('file' => $sName, 'size' => $sSize, 'actions' => BlockRenderer::RenderBlockTemplates($oButton));
- $oP->add_ready_script('$("#'.$oButton->GetId().'").on("click", function () {LaunchRestoreNow("'.$sFileEscaped.'", "'.$sConfirmRestore.'");});');
+ $sButtonOnClickJS .= '$("#'.$oButton->GetId().'").on("click", function () {LaunchRestoreNow("'.$sFileEscaped.'", "'.$sConfirmRestore.'");});';
}
$aConfig = array(
'file' => array('label' => Dict::S('bkp-table-file'), 'description' => Dict::S('bkp-table-file+')),
'size' => array('label' => Dict::S('bkp-table-size'), 'description' => Dict::S('bkp-table-size+')),
'actions' => array('label' => Dict::S('bkp-table-actions'), 'description' => Dict::S('bkp-table-actions+')),
);
-
+ $sTableId = 'datatable_manual_backups';
$oP->AddUiBlock(
GenerateBackupsList(
'bkp-status-backups-manual',
'bkp-status-backups-none',
$aConfig,
- $aDetails
+ $aDetails,
+ $sTableId
)
);
+ $oP->add_ready_script(
+ <<AddSubBlock($oFieldsetBackupNow);
+ $oBlockForBackupNow = new UIContentBlock();
+ $oBlockForBackupNow->AddSubBlock(TitleUIBlockFactory::MakeNeutral(Dict::S('bkp-button-backup-now'), 2));
+
+ $oP->AddUiBlock($oBlockForBackupNow);
+
// Ongoing operation ?
//
$oBackupMutex = new iTopMutex('backup.'.utils::GetCurrentEnvironment());
if ($oBackupMutex->IsLocked()) {
- $oFieldsetBackupNow->AddSubBlock(
+ $oBlockForBackupNow->AddSubBlock(
AlertUIBlockFactory::MakeForFailure(Dict::S('bkp-backup-running'))
->SetIsClosable(false)
->SetIsCollapsible(false)
@@ -331,7 +354,7 @@ try {
}
$oRestoreMutex = new iTopMutex('restore.'.utils::GetCurrentEnvironment());
if ($oRestoreMutex->IsLocked()) {
- $oFieldsetBackupNow->AddSubBlock(
+ $oBlockForBackupNow->AddSubBlock(
AlertUIBlockFactory::MakeForFailure(Dict::S('bkp-restore-running'))
->SetIsClosable(false)
->SetIsCollapsible(false)
@@ -353,7 +376,7 @@ try {
{
$sNextOccurrence = Dict::S('bkp-next-backup-unknown');
}
- $oFieldsetBackupNow->AddSubBlock(
+ $oBlockForBackupNow->AddSubBlock(
AlertUIBlockFactory::MakeForInformation('', $sNextOccurrence)
->SetIsClosable(false)
->SetIsCollapsible(false)
@@ -364,20 +387,20 @@ try {
$sBackUpNow= Dict::S('bkp-button-backup-now');
$oLaunchBackupButton = ButtonUIBlockFactory::MakeForPrimaryAction($sBackUpNow);
$oLaunchBackupButton->SetOnClickJsCode('LaunchBackupNow();');
- $oFieldsetBackupNow->AddSubBlock($oLaunchBackupButton);
+ $oBlockForBackupNow->AddSubBlock($oLaunchBackupButton);
// restoration panels / hidden info
$oRestoreSuccess = AlertUIBlockFactory::MakeForSuccess('', '', 'backup_success')
->AddCSSClass('ibo-is-hidden')
->SetIsCollapsible(false)
->SetIsClosable(true);
- $oFieldsetBackupNow->AddSubBlock($oRestoreSuccess);
+ $oBlockForBackupNow->AddSubBlock($oRestoreSuccess);
$oRestoreFailure = AlertUIBlockFactory::MakeForFailure('', '', 'backup_errors')
->AddCSSClass('ibo-is-hidden')
->SetIsCollapsible(false)
->SetIsClosable(true);
- $oFieldsetBackupNow->AddSubBlock($oRestoreFailure);
- $oFieldsetBackupNow->AddHtml('');
+ $oBlockForBackupNow->AddSubBlock($oRestoreFailure);
+ $oBlockForBackupNow->AddHtml('');
$sConfirmBackup = addslashes(Dict::S('bkp-confirm-backup'));
$sPleaseWaitBackup = addslashes(Dict::S('bkp-wait-backup'));