diff --git a/css/backoffice/pages/_audit.scss b/css/backoffice/pages/_audit.scss index 078f4f0e1..5961b0451 100644 --- a/css/backoffice/pages/_audit.scss +++ b/css/backoffice/pages/_audit.scss @@ -7,6 +7,8 @@ $ibo-audit--audit-category--panel--body--padding-x: $ibo-panel--body--padding-x $ibo-audit--dashboard--padding-y: 18px !default; $ibo-audit--dashboard--padding-x: 0 !default; +$ibo-audit--first-error-alert--margin-top: 24px !default; + $ibo-audit--audit-line--csv-download--height: 2.5em !default; $ibo-audit--audit-line--status-indicator--diameter: 12px !default; @@ -58,6 +60,9 @@ $ibo-audit--status--color: ( .ibo-audit--dashboard{ padding: $ibo-audit--dashboard--padding-y $ibo-audit--dashboard--padding-x; } +.ibo-dashboard--grid-row + .ibo-audit--error-alert{ + margin-top: $ibo-audit--first-error-alert--margin-top; +} .ibo-audit--audit-line--csv-download{ height: $ibo-audit--audit-line--csv-download--height; vertical-align: middle; diff --git a/dictionaries/en.dictionary.itop.ui.php b/dictionaries/en.dictionary.itop.ui.php index 5551df50e..b0b094564 100644 --- a/dictionaries/en.dictionary.itop.ui.php +++ b/dictionaries/en.dictionary.itop.ui.php @@ -696,7 +696,11 @@ Dict::Add('EN US', 'English', 'English', array( 'UI:Audit:HeaderNbObjects' => '# Objects', 'UI:Audit:HeaderNbErrors' => '# Errors', 'UI:Audit:PercentageOk' => '% Ok', + 'UI:Audit:OqlError' => 'OQL Error', + 'UI:Audit:Error:ValueNA' => 'n/a', + 'UI:Audit:ErrorIn_Rule' => 'Error in Rule', 'UI:Audit:ErrorIn_Rule_Reason' => 'OQL Error in the Rule %1$s: %2$s.', + 'UI:Audit:ErrorIn_Category' => 'Error in Category', 'UI:Audit:ErrorIn_Category_Reason' => 'OQL Error in the Category %1$s: %2$s.', 'UI:Audit:AuditErrors' => 'Audit Errors', 'UI:Audit:Dashboard:ObjectsAudited' => 'Objects audited', diff --git a/pages/audit.php b/pages/audit.php index c72896a17..449f5cd41 100644 --- a/pages/audit.php +++ b/pages/audit.php @@ -17,6 +17,7 @@ * You should have received a copy of the GNU Affero General Public License */ +use Combodo\iTop\Application\UI\Base\Component\Alert\AlertUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Dashlet\DashletContainer; use Combodo\iTop\Application\UI\Base\Component\Dashlet\DashletFactory; @@ -321,9 +322,13 @@ try $oAuditFilter = new DBObjectSearch('AuditCategory'); $oCategoriesSet = new DBObjectSet($oAuditFilter); - + + $aAuditCategoryPanels = []; while($oAuditCategory = $oCategoriesSet->fetch()) { + $oAuditCategoryPanelBlock = new Panel($oAuditCategory->GetName()); + $oAuditCategoryPanelBlock->SetIsCollapsible(true); + $aResults = array(); try { $iCount = 0; @@ -339,7 +344,6 @@ try $oDefinitionFilter->AddCondition('org_id', $currentOrganization, '='); } } - $aResults = array(); $oDefinitionSet = new CMDBObjectSet($oDefinitionFilter); $iCount = $oDefinitionSet->Count(); $oRulesFilter = new DBObjectSearch('AuditRule'); @@ -373,11 +377,14 @@ try } catch(Exception $e) { - $aRow['nb_errors'] = "OQL Error"; - $aRow['percent_ok'] = 'n/a'; + $aRow['nb_errors'] = Dict::S('UI:Audit:OqlError'); + $aRow['percent_ok'] = Dict::S('UI:Audit:Error:ValueNA'); $aRow['class'] = 'red'; $sMessage = Dict::Format('UI:Audit:ErrorIn_Rule_Reason', $oAuditRule->GetHyperlink(), $e->getMessage()); - $oP->p(" ".$sMessage); + + $oErrorAlert = AlertUIBlockFactory::MakeForFailure(Dict::S('UI:Audit:ErrorIn_Rule'), $sMessage); + $oErrorAlert->AddCSSClass('ibo-audit--error-alert'); + $oP->AddUiBlock($oErrorAlert); } } $aResults[] = $aRow; @@ -385,30 +392,22 @@ try $iTotalErrors = count($aObjectsWithErrors); $sOverallPercentOk = ($iCount == 0) ? '100.00' : sprintf('%.2f', 100.0 * (($iCount - $iTotalErrors) / $iCount)); $sClass = GetReportColor($iCount, $iTotalErrors); + + $oTotalBlock->SetCount((int)$oTotalBlock->GetCount() + ($iCount)); + $oErrorBlock->SetCount((int)$oErrorBlock->GetCount() + $iTotalErrors); + $oWorkingBlock->SetCount((int)$oWorkingBlock->GetCount() + ($iCount - $iTotalErrors)); + $oAuditCategoryPanelBlock->SetSubTitle(Dict::Format('UI:Audit:AuditCategory:Subtitle', $iTotalErrors, $iCount, $sOverallPercentOk)); + } catch(Exception $e) { - $aRow = array(); - $aRow['description'] = "OQL error"; - $aRow['nb_errors'] = "n/a"; - $aRow['percent_ok'] = ''; - $aRow['class'] = 'red'; $sMessage = Dict::Format('UI:Audit:ErrorIn_Category_Reason', $oAuditCategory->GetHyperlink(), utils::HtmlEntities($e->getMessage())); - $oP->p(" ".$sMessage); - $aResults[] = $aRow; - - $sClass = 'red'; - $iTotalErrors = 'n/a'; - $sOverallPercentOk = ''; + $oErrorAlert = AlertUIBlockFactory::MakeForFailure(Dict::S('UI:Audit:ErrorIn_Category'), $sMessage); + $oErrorAlert->AddCSSClass('ibo-audit--error-alert'); + $oP->AddUiBlock($oErrorAlert); + continue; } - - $oTotalBlock->SetCount((int)$oTotalBlock->GetCount() + ($iCount)); - $oErrorBlock->SetCount((int)$oErrorBlock->GetCount() + $iTotalErrors); - $oWorkingBlock->SetCount((int)$oWorkingBlock->GetCount() + ($iCount - $iTotalErrors)); - $oAuditCategoryPanelBlock = new Panel($oAuditCategory->GetName()); - $oAuditCategoryPanelBlock->SetIsCollapsible(true); - $oAuditCategoryPanelBlock->SetSubTitle(Dict::Format('UI:Audit:AuditCategory:Subtitle', $iTotalErrors, $iCount, $sOverallPercentOk)); $oAuditCategoryPanelBlock->SetColor($sClass); $oAuditCategoryPanelBlock->AddCSSClass('ibo-audit--audit-category--panel'); $aData = []; @@ -430,9 +429,11 @@ try $oAttachmentTableBlock = DataTableUIBlockFactory::MakeForStaticData('', $aAttribs, $aData); $oAuditCategoryPanelBlock->AddSubBlock($oAttachmentTableBlock); - $oP->AddUiBlock($oAuditCategoryPanelBlock); + $aAuditCategoryPanels[] = $oAuditCategoryPanelBlock; + } + foreach ($aAuditCategoryPanels as $oAuditCategoryPanel) { + $oP->AddUiBlock($oAuditCategoryPanel); } - } $oP->output(); }