Exemple #1
0
 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;
         }
     }
 }