GetObject('AuditRule', $iRuleId); $sOql = $oRule->Get('query'); $oRuleFilter = DBObjectSearch::FromOQL($sOql); if ($oRule->Get('valid_flag') == 'false') { // The query returns directly the invalid elements $oFilter = $oRuleFilter; $oFilter->MergeWith($oDefinitionFilter); $oErrorObjectSet = new CMDBObjectSet($oFilter); } else { // The query returns only the valid elements, all the others are invalid $oFilter = $oRuleFilter; $oErrorObjectSet = new CMDBObjectSet($oFilter); $aValidIds = array(0); // Make sure that we have at least one value in the list while($oObj = $oErrorObjectSet->Fetch()) { $aValidIds[] = $oObj->GetKey(); } $oFilter = $oDefinitionFilter; $oFilter->AddCondition('id', $aValidIds, 'NOTIN'); $oErrorObjectSet = new CMDBObjectSet($oFilter); } return $oErrorObjectSet; } function GetReportColor($iTotal, $iErrors) { $sResult = 'red'; if ( ($iTotal == 0) || ($iErrors / $iTotal) <= 0.05 ) { $sResult = 'green'; } else if ( ($iErrors / $iTotal) <= 0.25 ) { $sResult = 'orange'; } return $sResult; } switch($operation) { case 'errors': $iCategory = utils::ReadParam('category', ''); $iRuleIndex = utils::ReadParam('rule', 0); $oContext = new UserContext(); $oAuditCategory = $oContext->GetObject('AuditCategory', $iCategory); $oDefinitionFilter = DBObjectSearch::FromOQL($oAuditCategory->Get('definition_set')); if (!empty($currentOrganization)) { $oDefinitionFilter->AddCondition('org_id', $currentOrganization); } $oDefinitionSet = new CMDBObjectSet($oDefinitionFilter); $oErrorObjectSet = GetRuleResultSet($iRuleIndex, $oDefinitionFilter); $oAuditRule = $oContext->GetObject('AuditRule', $iRuleIndex); $oP->add(''); $oP->p('[Back to audit results]'); $sBlockId = 'audit_errors'; $oP->p("
\n"); cmdbAbstractObject::DisplaySet($oP, $oErrorObjectSet, array('block_id' => $sBlockId)); $oP->p("
\n"); break; case 'audit': default: $oP->add(''); $oAuditFilter = new CMDBSearchFilter('AuditCategory'); $oCategoriesSet = new DBObjectSet($oAuditFilter); $oP->add("\n"); $oP->add("\n"); $oP->add("
\n"); $oP->add("\n"); $oP->add("\n"); $oP->add("\n"); $oP->add("\n"); while($oAuditCategory = $oCategoriesSet->fetch()) { $oDefinitionFilter = DBObjectSearch::FromOQL($oAuditCategory->Get('definition_set')); $aObjectsWithErrors = array(); if (!empty($currentOrganization)) { if (MetaModel::IsValidFilterCode($oDefinitionFilter->GetClass(), 'org_id')) { $oDefinitionFilter->AddCondition('org_id', $currentOrganization); } } $aResults = array(); $oDefinitionSet = new CMDBObjectSet($oDefinitionFilter); $iCount = $oDefinitionSet->Count(); $oRulesFilter = new CMDBSearchFilter('AuditRule'); $oRulesFilter->AddCondition('category_id', $oAuditCategory->GetKey()); $oRulesSet = new DBObjectSet($oRulesFilter); while($oAuditRule = $oRulesSet->fetch() ) { $aRow = array(); $aRow['description'] = $oAuditRule->Get('name'); if ($iCount == 0) { // nothing to check, really ! $aRow['nb_errors'] = "GetKey()."&rule=".$oAuditRule->GetKey()."\">0"; $aRow['percent_ok'] = '100.00'; $aRow['class'] = GetReportColor($iCount, 0); } else { $oRuleFilter = DBObjectSearch::FromOQL($oAuditRule->Get('query')); $oErrorObjectSet = GetRuleResultSet($oAuditRule->GetKey(), $oDefinitionFilter); $iErrorsCount = $oErrorObjectSet->Count(); while($oObj = $oErrorObjectSet->Fetch()) { $aObjectsWithErrors[$oObj->GetKey()] = true; } $aRow['nb_errors'] = ($iErrorsCount == 0) ? '0' : "GetKey()."&rule=".$oAuditRule->GetKey()."&".$oAppContext->GetForLink()."\">$iErrorsCount"; $aRow['percent_ok'] = sprintf('%.2f', 100.0 * (($iCount - $iErrorsCount) / $iCount)); $aRow['class'] = GetReportColor($iCount, $iErrorsCount); } $aResults[] = $aRow; $iTotalErrors = count($aObjectsWithErrors); $sOverallPercentOk = ($iCount == 0) ? '100.00' : sprintf('%.2f', 100.0 * (($iCount - $iTotalErrors) / $iCount)); $sClass = GetReportColor($iCount, $iTotalErrors); } $oP->add("\n"); $oP->add("\n"); $oP->add("\n"); foreach($aResults as $aRow) { $oP->add("\n"); $oP->add("\n"); $oP->add("\n"); } } $oP->add("
".Dict::S('UI:Audit:HeaderAuditRule')."".Dict::S('UI:Audit:HeaderNbObjects')."".Dict::S('UI:Audit:HeaderNbErrors')."".Dict::S('UI:Audit:PercentageOk')."
".$oAuditCategory->GetName()."$iCount$iTotalErrors$sOverallPercentOk %
 ".$aRow['description']."".$aRow['nb_errors']."".$aRow['percent_ok']." %
\n"); $oP->add("
\n"); } $oP->output(); ?>