private static function DBCheckIntegrity_Check2Update($sSelWrongRecs, $sErrorDesc, $sColumn, $sNewValue, $sClass, &$aErrorsAndFixes, &$iNewDelCount, &$aPlannedDel) { $sRootClass = self::GetRootClass($sClass); $sTable = self::DBGetTable($sClass); $sKeyField = self::DBGetKey($sClass); if (array_key_exists($sTable, $aPlannedDel) && count($aPlannedDel[$sTable]) > 0) { $sSelWrongRecs .= " AND maintable.`{$sKeyField}` NOT IN ('" . implode("', '", $aPlannedDel[$sTable]) . "')"; } $aWrongRecords = CMDBSource::QueryToCol($sSelWrongRecs, "id"); if (count($aWrongRecords) == 0) { return; } if (!array_key_exists($sRootClass, $aErrorsAndFixes)) { $aErrorsAndFixes[$sRootClass] = array(); } if (!array_key_exists($sTable, $aErrorsAndFixes[$sRootClass])) { $aErrorsAndFixes[$sRootClass][$sTable] = array(); } foreach ($aWrongRecords as $iRecordId) { if (array_key_exists($iRecordId, $aErrorsAndFixes[$sRootClass][$sTable])) { switch ($aErrorsAndFixes[$sRootClass][$sTable][$iRecordId]['Action']) { case 'Delete': // No need to update, the record will be deleted! break; case 'Update': // Already planned for an update // Add this new update spec to the list $bFoundSameSpec = false; foreach ($aErrorsAndFixes[$sRootClass][$sTable][$iRecordId]['Action_Details'] as $aUpdateSpec) { if ($sColumn == $aUpdateSpec['column'] && $sNewValue == $aUpdateSpec['newvalue']) { $bFoundSameSpec = true; } } if (!$bFoundSameSpec) { $aErrorsAndFixes[$sRootClass][$sTable][$iRecordId]['Action_Details'][] = array('column' => $sColumn, 'newvalue' => $sNewValue); $aErrorsAndFixes[$sRootClass][$sTable][$iRecordId]['Reason'] .= ', ' . $sErrorDesc; } break; } } else { $aErrorsAndFixes[$sRootClass][$sTable][$iRecordId]['Reason'] = $sErrorDesc; $aErrorsAndFixes[$sRootClass][$sTable][$iRecordId]['Action'] = 'Update'; $aErrorsAndFixes[$sRootClass][$sTable][$iRecordId]['Action_Details'] = array(array('column' => $sColumn, 'newvalue' => $sNewValue)); $aErrorsAndFixes[$sRootClass][$sTable][$iRecordId]['Pass'] = 123; } } }