step 2: export + display errors

This commit is contained in:
Anne-Cath
2024-11-21 16:45:08 +01:00
parent 11775d9aa4
commit 2086f464de

View File

@@ -111,6 +111,7 @@ function GetRuleResultFilter($iRuleId, $oDefinitionFilter, $oAppContext, $aParam
$oRule = MetaModel::GetObject('AuditRule', $iRuleId); $oRule = MetaModel::GetObject('AuditRule', $iRuleId);
$sOql = $oRule->Get('query'); $sOql = $oRule->Get('query');
$oRuleFilter = DBObjectSearch::FromOQL($sOql, $aParams); $oRuleFilter = DBObjectSearch::FromOQL($sOql, $aParams);
$oRuleFilter->UpdateContextFromUser(); $oRuleFilter->UpdateContextFromUser();
FilterByContext($oRuleFilter, $oAppContext); // Not needed since this filter is a subset of the definition filter, but may speedup things FilterByContext($oRuleFilter, $oAppContext); // Not needed since this filter is a subset of the definition filter, but may speedup things
@@ -131,6 +132,7 @@ function GetRuleResultFilter($iRuleId, $oDefinitionFilter, $oAppContext, $aParam
} }
/** @var \DBObjectSearch $oFilter */ /** @var \DBObjectSearch $oFilter */
$oFilter = $oDefinitionFilter->DeepClone(); $oFilter = $oDefinitionFilter->DeepClone();
if (count($aValidIds) > 0) if (count($aValidIds) > 0)
{ {
$aInDefSet = array(); $aInDefSet = array();
@@ -499,19 +501,32 @@ try
// Therefore we don't use the standard "search_oql" operation of UI.php to display the CSV // Therefore we don't use the standard "search_oql" operation of UI.php to display the CSV
$iCategory = utils::ReadParam('category', ''); $iCategory = utils::ReadParam('category', '');
$iRuleIndex = utils::ReadParam('rule', 0); $iRuleIndex = utils::ReadParam('rule', 0);
$oAuditCategory = MetaModel::GetObject('AuditCategory', $iCategory); $aFilterParams = [];
$oDefinitionFilter = DBObjectSearch::FromOQL($oAuditCategory->Get('definition_set')); $sAddingParams = '';
if($aAuditFilter !=[] ){
foreach ($aAuditFilter as $sFieldName => $aFieldParam) {
$sCurrentValue = utils::ReadParam($sFieldName, '');
$sAddingParams .= "&$sFieldName=$sCurrentValue";
$aFilterParams[$sFieldName] = $sCurrentValue;
}
}
$oAuditCategory = MetaModel::GetObject('AuditCategory', $iCategory);
$oDefinitionFilter = DBObjectSearch::FromOQL($oAuditCategory->Get('definition_set'),$aFilterParams);
$oDefinitionFilter->UpdateContextFromUser(); $oDefinitionFilter->UpdateContextFromUser();
FilterByContext($oDefinitionFilter, $oAppContext); FilterByContext($oDefinitionFilter, $oAppContext);
$oDefinitionSet = new CMDBObjectSet($oDefinitionFilter); $oDefinitionSet = new CMDBObjectSet($oDefinitionFilter);
$oFilter = GetRuleResultFilter($iRuleIndex, $oDefinitionFilter, $oAppContext); $oFilter = GetRuleResultFilter($iRuleIndex, $oDefinitionFilter, $oAppContext, $aFilterParams);
$oErrorObjectSet = new CMDBObjectSet($oFilter); $oErrorObjectSet = new CMDBObjectSet($oFilter);
$oAuditRule = MetaModel::GetObject('AuditRule', $iRuleIndex); $oAuditRule = MetaModel::GetObject('AuditRule', $iRuleIndex);
$sFileName = utils::ReadParam('filename', null, true, 'string'); $sFileName = utils::ReadParam('filename', null, true, 'string');
$bAdvanced = utils::ReadParam('advanced', false); $bAdvanced = utils::ReadParam('advanced', false);
$sAdvanced = $bAdvanced ? '&advanced=1' : ''; $sAdvanced = $bAdvanced ? '&advanced=1' : '';
if ($sFileName != null) if ($sFileName != null)
{ {
$oP = new CSVPage("iTop - Export"); $oP = new CSVPage("iTop - Export");
@@ -556,7 +571,7 @@ try
$oP->p("</div>"); $oP->p("</div>");
// Adjust the size of the Textarea containing the CSV to fit almost all the remaining space // Adjust the size of the Textarea containing the CSV to fit almost all the remaining space
$oP->add_ready_script(" $('#1>textarea').height(400);"); // adjust the size of the block $oP->add_ready_script(" $('#1>textarea').height(400);"); // adjust the size of the block
$sExportUrl = utils::GetAbsoluteUrlAppRoot()."pages/audit.php?operation=csv&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey(); $sExportUrl = utils::GetAbsoluteUrlAppRoot()."pages/audit.php?operation=csv&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey().$sAddingParams;
$oDownloadButton = ButtonUIBlockFactory::MakeForAlternativePrimaryAction('fas fa-chevron-left', Dict::S('UI:Audit:InteractiveAudit:Back'), "./audit.php?".$oAppContext->GetForLink()); $oDownloadButton = ButtonUIBlockFactory::MakeForAlternativePrimaryAction('fas fa-chevron-left', Dict::S('UI:Audit:InteractiveAudit:Back'), "./audit.php?".$oAppContext->GetForLink());
$oP->add_ready_script("$('a[href*=\"webservices/export.php?expression=\"]').attr('href', '".$sExportUrl."&filename=audit.csv".$sAdvanced."');"); $oP->add_ready_script("$('a[href*=\"webservices/export.php?expression=\"]').attr('href', '".$sExportUrl."&filename=audit.csv".$sAdvanced."');");
@@ -569,12 +584,34 @@ try
$iCategory = utils::ReadParam('category', ''); $iCategory = utils::ReadParam('category', '');
$iRuleIndex = utils::ReadParam('rule', 0); $iRuleIndex = utils::ReadParam('rule', 0);
$aFilterParams = [];
$sAddingParams = '';
$oPanel = PanelUIBlockFactory::MakeNeutral('',Dict::S('UI:Audit:Interactive:FilterList'));
if($aAuditFilter !=[] ){
foreach ($aAuditFilter as $sFieldName => $aFieldParam) {
$sCurrentValue = utils::ReadParam($sFieldName, '');
$sAddingParams .= "&$sFieldName=$sCurrentValue";
$aFilterParams[$sFieldName] = $sCurrentValue;
$sName = '';
if (array_key_exists('oql', $aFieldParam) && utils::IsNotNullOrEmptyString($aFieldParam['oql'])) {
$oSearch = new DBObjectSet(DBObjectSearch::FromOQL($aFieldParam['oql']));
$sClass = $oSearch->GetClass();
$oObject = MetaModel::GetObject($sClass, $sCurrentValue);
$sName = $oObject->GetName();
} else {//this is a list of values
$sName = $aFieldParam['values'][$sCurrentValue];
}
$sFilterText .= '<li>'.$aFieldParam['label'].': '.$sName.'</li>';
}
$oPanel->AddSubBlock(new Html($sFilterText.'</ul>'));
}
$oAuditCategory = MetaModel::GetObject('AuditCategory', $iCategory); $oAuditCategory = MetaModel::GetObject('AuditCategory', $iCategory);
$oDefinitionFilter = DBObjectSearch::FromOQL($oAuditCategory->Get('definition_set')); $oDefinitionFilter = DBObjectSearch::FromOQL($oAuditCategory->Get('definition_set'), $aFilterParams);
$oDefinitionFilter->UpdateContextFromUser(); $oDefinitionFilter->UpdateContextFromUser();
FilterByContext($oDefinitionFilter, $oAppContext); FilterByContext($oDefinitionFilter, $oAppContext);
$oDefinitionSet = new CMDBObjectSet($oDefinitionFilter); $oDefinitionSet = new CMDBObjectSet($oDefinitionFilter);
$oFilter = GetRuleResultFilter($iRuleIndex, $oDefinitionFilter, $oAppContext); $oFilter = GetRuleResultFilter($iRuleIndex, $oDefinitionFilter, $oAppContext,$aFilterParams);
$oErrorObjectSet = new CMDBObjectSet($oFilter); $oErrorObjectSet = new CMDBObjectSet($oFilter);
$oAuditRule = MetaModel::GetObject('AuditRule', $iRuleIndex); $oAuditRule = MetaModel::GetObject('AuditRule', $iRuleIndex);
$sDescription = get_class($oAuditRule).": ".$oAuditRule->GetName(); $sDescription = get_class($oAuditRule).": ".$oAuditRule->GetName();
@@ -583,12 +620,16 @@ try
$oBackButton = ButtonUIBlockFactory::MakeIconLink('fas fa-chevron-left', Dict::S('UI:Audit:Interactive:Button:Back'), "./audit.php?".$oAppContext->GetForLink()); $oBackButton = ButtonUIBlockFactory::MakeIconLink('fas fa-chevron-left', Dict::S('UI:Audit:Interactive:Button:Back'), "./audit.php?".$oAppContext->GetForLink());
$oP->AddUiBlock($oBackButton); $oP->AddUiBlock($oBackButton);
$oP->AddUiBlock(TitleUIBlockFactory::MakeForPage($sTitle.$oAuditRule->Get('description'))); $oP->AddUiBlock(TitleUIBlockFactory::MakeForPage($sTitle.$oAuditRule->Get('description')));
if($aAuditFilter !=[] ){
$oP->AddUiBlock($oPanel);
$oP->AddUiBlock(new Html('<br>'));
}
$sBlockId = 'audit_errors'; $sBlockId = 'audit_errors';
$oP->p("<div id=\"$sBlockId\">"); $oP->p("<div id=\"$sBlockId\">");
$oBlock = DisplayBlock::FromObjectSet($oErrorObjectSet, 'list', array('show_obsolete_data' => true)); $oBlock = DisplayBlock::FromObjectSet($oErrorObjectSet, 'list', array('show_obsolete_data' => true));
$oBlock->Display($oP, 1); $oBlock->Display($oP, 1);
$oP->p("</div>"); $oP->p("</div>");
$sExportUrl = utils::GetAbsoluteUrlAppRoot()."pages/audit.php?operation=csv&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey(); $sExportUrl = utils::GetAbsoluteUrlAppRoot()."pages/audit.php?operation=csv&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey().$sAddingParams;
$oP->add_ready_script("$('a[href*=\"pages/UI.php?operation=search\"]').attr('href', '".$sExportUrl."')"); $oP->add_ready_script("$('a[href*=\"pages/UI.php?operation=search\"]').attr('href', '".$sExportUrl."')");
break; break;
@@ -703,7 +744,6 @@ try
$oDomainDashlet->AddSubBlock($oDomainBlock)->AddCSSClasses(['ibo-dashlet--is-inline', 'ibo-dashlet-badge']); $oDomainDashlet->AddSubBlock($oDomainBlock)->AddCSSClasses(['ibo-dashlet--is-inline', 'ibo-dashlet-badge']);
$oDashboardRow->GetSubBlocks()[$iDomainCnt % 3]->AddUIBlock($oDomainDashlet); // ; $oDashboardRow->GetSubBlocks()[$iDomainCnt % 3]->AddUIBlock($oDomainDashlet); // ;
$iDomainCnt++; $iDomainCnt++;
IssueLog::Error('domaine numero'.$iDomainCnt);
} }
$oP->AddUiBlock($oDashboardRow); $oP->AddUiBlock($oDashboardRow);
@@ -746,14 +786,15 @@ try
$aFilterParams = []; $aFilterParams = [];
$sAddingParams = '';
if($aAuditFilter !=[] ){ if($aAuditFilter !=[] ){
$oPanel = PanelUIBlockFactory::MakeNeutral('',Dict::S('UI:Audit:Interactive:FilterList')); $oPanel = PanelUIBlockFactory::MakeNeutral('',Dict::S('UI:Audit:Interactive:FilterList'));
$oP->AddUiBlock($oPanel); $oP->AddUiBlock($oPanel);
foreach ($aAuditFilter as $sFieldName => $aFieldParam) { foreach ($aAuditFilter as $sFieldName => $aFieldParam) {
$sCurrentValue = utils::ReadParam($sFieldName, ''); $sCurrentValue = utils::ReadParam($sFieldName, '');
$sAddingParams .= "&$sFieldName=$sCurrentValue";
$aFilterParams[$sFieldName] = $sCurrentValue; $aFilterParams[$sFieldName] = $sCurrentValue;
IssueLog::Error($sFieldName.':'.$sCurrentValue);
$sName = ''; $sName = '';
if (array_key_exists('oql', $aFieldParam) && utils::IsNotNullOrEmptyString($aFieldParam['oql'])) { if (array_key_exists('oql', $aFieldParam) && utils::IsNotNullOrEmptyString($aFieldParam['oql'])) {
$oSearch = new DBObjectSet(DBObjectSearch::FromOQL($aFieldParam['oql'])); $oSearch = new DBObjectSet(DBObjectSearch::FromOQL($aFieldParam['oql']));
@@ -763,12 +804,11 @@ try
} else {//this is a list of values } else {//this is a list of values
$sName = $aFieldParam['values'][$sCurrentValue]; $sName = $aFieldParam['values'][$sCurrentValue];
} }
$sFilterText .= '<li>'.$aFieldParam['label'].': '.$sName.'</li>'; $sFilterText .= '<li>'.$aFieldParam['label'].': '.$sName.'</li>';
} }
$oPanel->AddSubBlock(new Html($sFilterText.'</ul>')); $oPanel->AddSubBlock(new Html($sFilterText.'</ul>'));
} }
$oP->AddUiBlock(new Html('<br>')); $oP->AddUiBlock(new Html('<br>'));
$oP->AddUiBlock(new Text($sSubTitle)); $oP->AddUiBlock(new Text($sSubTitle));
@@ -815,12 +855,11 @@ try
// Add a button in the above toolbar // Add a button in the above toolbar
$sAuditCategoryClass = get_class($oAuditCategory); $sAuditCategoryClass = get_class($oAuditCategory);
if (UserRights::IsActionAllowed($sAuditCategoryClass, UR_ACTION_READ)) { if (UserRights::IsActionAllowed($sAuditCategoryClass, UR_ACTION_READ)) {
$oToolbar->AddSubBlock(ButtonUIBlockFactory::MakeIconLink('fas fa-wrench fa-lg', Dict::S('UI:Audit:ViewRules'), ApplicationContext::MakeObjectUrl($sAuditCategoryClass, $oAuditCategory->GetKey()).'&#ObjectProperties=tab_ClassAuditCategoryAttributerules_list'),); $oToolbar->AddSubBlock(ButtonUIBlockFactory::MakeIconLink('fas fa-wrench fa-lg', Dict::S('UI:Audit:ViewRules'), ApplicationContext::MakeObjectUrl($sAuditCategoryClass, $oAuditCategory->GetKey()).$sAddingParams.'&#ObjectProperties=tab_ClassAuditCategoryAttributerules_list'),);
} }
$aResults = array(); $aResults = array();
try { try {
$iCount = 0; $iCount = 0;
IssueLog::Error('$aFilterParams'.json_encode($aFilterParams));
$oDefinitionFilter = DBObjectSearch::FromOQL($oAuditCategory->Get('definition_set'),$aFilterParams); $oDefinitionFilter = DBObjectSearch::FromOQL($oAuditCategory->Get('definition_set'),$aFilterParams);
$oDefinitionFilter->UpdateContextFromUser(); $oDefinitionFilter->UpdateContextFromUser();
FilterByContext($oDefinitionFilter, $oAppContext); FilterByContext($oDefinitionFilter, $oAppContext);
@@ -831,7 +870,6 @@ try
$oDefinitionFilter->AddCondition('org_id', $currentOrganization, '='); $oDefinitionFilter->AddCondition('org_id', $currentOrganization, '=');
} }
} }
IssueLog::Error('Filtre: '.$oDefinitionFilter->ToOQL(true));
$oDefinitionSet = new CMDBObjectSet($oDefinitionFilter); $oDefinitionSet = new CMDBObjectSet($oDefinitionFilter);
$iCount = $oDefinitionSet->Count(); $iCount = $oDefinitionSet->Count();
$oRulesFilter = new DBObjectSearch('AuditRule'); $oRulesFilter = new DBObjectSearch('AuditRule');
@@ -840,26 +878,24 @@ try
$oRulesFilter->AddInternalParam($sFieldName, $sCurrentValue); $oRulesFilter->AddInternalParam($sFieldName, $sCurrentValue);
} }
IssueLog::Error('2Filtre: '.$oRulesFilter->ToOQL(true));
$oRulesSet = new DBObjectSet($oRulesFilter); $oRulesSet = new DBObjectSet($oRulesFilter);
while ($oAuditRule = $oRulesSet->fetch()) { while ($oAuditRule = $oRulesSet->fetch()) {
$aRow = array(); $aRow = array();
$aRow['description'] = $oAuditRule->GetName(); $aRow['description'] = $oAuditRule->GetName();
if ($iCount == 0) { if ($iCount == 0) {
// nothing to check, really ! // nothing to check, really !
$aRow['nb_errors'] = "<a href=\"audit.php?operation=errors&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey()."\">0</a>"; $aRow['nb_errors'] = "<a href=\"audit.php?operation=errors&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey().$sAddingParams."\">0</a>";
$aRow['percent_ok'] = '100.00'; $aRow['percent_ok'] = '100.00';
$aRow['class'] = $oAuditCategory->GetReportColor($iCount, 0); $aRow['class'] = $oAuditCategory->GetReportColor($iCount, 0);
} else { } else {
try { try {
$oFilter = GetRuleResultFilter($oAuditRule->GetKey(), $oDefinitionFilter, $oAppContext, $aFilterParams); $oFilter = GetRuleResultFilter($oAuditRule->GetKey(), $oDefinitionFilter, $oAppContext, $aFilterParams);
IssueLog::Error('3Filtre: '.$oFilter->ToOQL(true));
$aErrors = $oFilter->SelectAttributeToArray('id'); $aErrors = $oFilter->SelectAttributeToArray('id');
$iErrorsCount = count($aErrors); $iErrorsCount = count($aErrors);
foreach ($aErrors as $aErrorRow) { foreach ($aErrors as $aErrorRow) {
$aObjectsWithErrors[$aErrorRow['id']] = true; $aObjectsWithErrors[$aErrorRow['id']] = true;
} }
$aRow['nb_errors'] = ($iErrorsCount == 0) ? '0' : "<a href=\"?operation=errors&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey()."&".$oAppContext->GetForLink()."\">$iErrorsCount</a> <a href=\"?operation=csv&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey()."&".$oAppContext->GetForLink()."\"><img src=\"" . utils::GetAbsoluteUrlAppRoot() . "images/icons/icons8-export-csv.svg\" class=\"ibo-audit--audit-line--csv-download\"></a>"; $aRow['nb_errors'] = ($iErrorsCount == 0) ? '0' : "<a href=\"?operation=errors&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey().$sAddingParams."&".$oAppContext->GetForLink()."\">$iErrorsCount</a> <a href=\"?operation=csv&category=".$oAuditCategory->GetKey()."&rule=".$oAuditRule->GetKey().$sAddingParams."&".$oAppContext->GetForLink()."\"><img src=\"" . utils::GetAbsoluteUrlAppRoot() . "images/icons/icons8-export-csv.svg\" class=\"ibo-audit--audit-line--csv-download\"></a>";
$aRow['percent_ok'] = sprintf('%.2f', 100.0 * (($iCount - $iErrorsCount) / $iCount)); $aRow['percent_ok'] = sprintf('%.2f', 100.0 * (($iCount - $iErrorsCount) / $iCount));
$aRow['class'] = $oAuditCategory->GetReportColor($iCount, $iErrorsCount); $aRow['class'] = $oAuditCategory->GetReportColor($iCount, $iErrorsCount);
} }