예제 #1
0
 /**
  *  Funkce pro načtení uživatelských mapování
  */
 public static function loadFMLUserFields($fml, $returnRichArray)
 {
     $dictionary1 = $fml->Dictionary[0];
     $dictionary2 = $fml->Dictionary[1];
     $dict1 = array('id' => (string) $dictionary1['id'], 'sourceFormat' => (string) $dictionary1['sourceFormat']);
     $dict2 = array('id' => (string) $dictionary2['id'], 'sourceFormat' => (string) $dictionary2['sourceFormat']);
     $mappingArr = array();
     if ($dict1['sourceFormat'] == 'BKEF') {
         //pokud bychom měli chybně uložené pořadí sloupců, tak je pro zpracování prohodíme...
         $dictX = $dict2;
         $dict2 = $dict1;
         $dict1 = $dictX;
     } else {
         //TODO meli bychom vyresit to, jak při mapování PMML-PMML rozhodnout, který soubor je který!
     }
     //připravíme si pole s mapováními pro dictionary 1
     $fieldNames1 = array();
     if (count($dictionary1->Field) > 0) {
         foreach ($dictionary1->Field as $field) {
             //potrebujeme vyhodnotit název položky
             $fieldId = (string) $field['id'];
             $fieldName = XmlConnectorFDML::getFieldName($field, $dict1['sourceFormat']);
             $fieldNames1[$fieldId] = $fieldName;
         }
     }
     //připravíme si pole s mapováními pro dictionary 2
     $fieldNames2 = array();
     if (count($dictionary2->Field) > 0) {
         foreach ($dictionary2->Field as $field) {
             //potrebujeme vyhodnotit název položky
             $fieldId = (string) $field['id'];
             $fieldName = XmlConnectorFDML::getFieldName($field, $dict2['sourceFormat']);
             $fieldNames2[$fieldId] = $fieldName;
         }
     }
     //projdeme jednotliva mapovani
     $fieldMappingId = 0;
     if (count($fml->DictionaryMapping[0]->FieldMapping) > 0) {
         foreach ($fml->DictionaryMapping[0]->FieldMapping as $fieldMapping) {
             if (@(string) $fieldMapping->MappingInfo[0]->Type == "user") {
                 //jde o uzivatelske mapovani...
                 $appliesTo1Name = '';
                 $appliesTo2Name = '';
                 foreach ($fieldMapping->AppliesTo[0]->FieldRef as $fieldRef) {
                     $dictID = (string) $fieldRef['dictID'];
                     $id = (string) $fieldRef['id'];
                     if ($dictID == $dict1['id']) {
                         if (isset($fieldNames1[$id])) {
                             $appliesTo1Name = $fieldNames1[$id];
                         }
                     } elseif ($dictID == $dict2['id']) {
                         if (isset($fieldNames2[$id])) {
                             $appliesTo2Name = $fieldNames2[$id];
                         }
                     }
                 }
                 if ($appliesTo1Name != '' && $appliesTo2Name != '') {
                     $mappingArr[] = array('0' => $appliesTo1Name, '1' => $appliesTo2Name, 'fmId' => $fieldMappingId);
                 }
             }
             $fieldMappingId++;
         }
     }
     if ($returnRichArray) {
         //vratime mapovaci pole a informace o prubehu popis mapovani...
         return array('mappingArr' => $mappingArr, 'dict1id' => $dict1['id'], 'dict2id' => $dict2['id']);
     } else {
         //vratime jenom zakladni mapovaci pole
         return $mappingArr;
     }
 }