getFields(); $allowed = $eventpart = $eventpartsure = $fieldsWithDependency = $fieldsWithAllowedValueSet = []; foreach ($availableFields as $categoryName => $fieldCategory) { $allowed = array_merge($allowed, array_keys($fieldCategory)); // Extended operations for events if (strpos($categoryName, $tlLoader->tl("basis", "basis", 'event')) !== false) { foreach ($fieldCategory as $key => $value) { if (strpos($key, "_annotation") !== false or strpos($key, "_gnd") !== false) continue; if (strpos($key, "_sure") !== false) $eventpartsure[] = $key; else $eventpart[] = $key; } } foreach ($fieldCategory as $key => $value) { if (!empty($value["dependsOn"])) { $fieldsWithDependency[$key] = $value['dependsOn']; } if (!empty($value["allowedValues"])) { $fieldsWithAllowedValueSet[$key] = $value['allowedValues']; } } } $allowed_inclusion_kind_of = ['inclusion_kind_of', 'Schenkung', 'Kauf', 'Grabung', 'Notbergung', 'Erbschaft', 'Stiftung', 'Enteignung', 'Ursprungsbestand', 'Ajándékozás','Vétel','Feltárás','Hivatalos átadás','Csere','Gyűjtés','Saját előállítás','Törzsanyag','Letét', 'endowment', 'dispossession', 'old stock', '']; echo printHTMLHead(); echo '
'; echo 'Please wait ... (checking validity)'; echo '
'; echo ''; echo '
'; ///// Check #1 //echo '
';print_r($allowed);echo '
'; echo '1: Only allowed tags (column names) used?'; $fp = fopen ( $csv_datei, 'r' ); $y = 1; $error = 0; $zeile = fgetcsv( $fp, 100000, ';' ); $maxLoopLen = count($zeile); for ($x = 0; $x < $maxLoopLen; $x++) { $zeile[$x] = str_replace("\xEF\xBB\xBF", "", $zeile[$x]); $inhalt[$y][$x] = $zeile[$x]; if (!in_array($inhalt[1][$x], $allowed)) { echo '
ERROR in column ' . $x . ' created by value: ' . $inhalt[1][$x] . ''; $error = $error + 1; } //echo '
';var_dump($inhalt[1][$x]); } fclose($fp); $erstezeile = $zeile; if ($error != 0) echo '
Not allowed tags found !'; else echo '
Only allowed tags used !'; //// Check #2 echo '

2: Not allowed multiple use of tags (column names)?'; //TODO: only check if the sizes are the same $compare = array_unique($zeile); $result = identical_values($zeile, $compare); if ($result == false) { echo '
There are dublicate column names !'; $error = $error + 1; } else { echo '
No dublicate column names !'; } //// Get values into memory for following checks //TODO: Merge with loop on line 74 $fp = fopen($csv_datei, 'r'); $y = 0; while ($zeile = fgetcsv($fp, 100000, ';')) { $y++; $maxLoopLen = count($zeile); for ($x = 0; $x < $maxLoopLen; $x++) { $inhalt[$y][$x] = str_replace("'", "\'", $zeile[$x]); } } fclose($fp); ///// Check #3 echo '

3: Mandatory tags available and always filled in?'; unset($inv_array); $inv_error = 0; /** * Function for finding duplicates?. * * @param array $array Input array. * * @return array */ function get_duplicates(array $array):array { return array_unique(array_diff_assoc($array, array_unique($array))); } //TODO: function for returning the error strings & counting errors $mandatory = ['inventory_number','object_type','object_title','object_description']; foreach ($mandatory as $tMandatoryField) { if (!in_array($tMandatoryField, $erstezeile)) { echo '
Mandatory: Column ' . $tMandatoryField . ' missing'; $error = $error + 1; $inv_error = $inv_error + 1; } else { $spaltenr = array_search($tMandatoryField, $erstezeile); for ($j = 0; $j < $y; $j++) { if ($inhalt[$j + 1][$spaltenr] == '') { echo '
Missing value for ' . $tMandatoryField . ' in row ' . ($j + 1) . ''; $error = $error + 1; $inv_error = $inv_error + 1; } if ($tMandatoryField == 'inventory_number') { $inv_array[] = $inhalt[$j + 1][$spaltenr]; } } } } if ($inv_error == 0) { echo '
All mandatory tags available and with values !'; } ///// Check #4 echo '

4: Inventory_number unique ?'; if (in_array('inventory_number', $erstezeile)) { $doppelte_inv = get_duplicates($inv_array); $doppelte_inv = array_values($doppelte_inv); if (!empty($doppelte_inv)) { foreach ($doppelte_inv as $tDublicateInvNo) { echo '
Multiple use of inventory_number ' . $tDublicateInvNo . ''; $error = $error + 1; } } else { echo '
All inventory_numbers are unique !'; } } else { echo '
Aborted, column inventory_number is missing'; $error = $error + 1; } ///// Check #5 echo '

5: Dependent colums observed ?
'; // Check for correct handling of dependent fields foreach ($fieldsWithDependency as $tField => $tDependentFields) { //TODO: change order if (array_search($tField, $erstezeile) === false) { continue; } foreach ($tDependentFields as $tDependentField) { if (array_search($tDependentField, $erstezeile) === false) { $depencymessage[] = "Dependency issue at column $tField: Corresponding column $tDependentField is missing"; } } } if (!empty($depencymessage)) { echo 'Dependent columns were not observed !'; foreach ($depencymessage as $tDepMsg) { echo '
' . $tDepMsg; $error = $error + 1; } } else { echo 'Dependent columns were observed !'; } ///// Check #6 echo '

6: Dependency of content observed?'; //TODO: get the values for these arrays dynamically? $crosscheck1 = ['object_other_title','detailed_description','detailed_description','inscription','inscription','dimensions_separate_length_value', 'dimensions_separate_width_value', 'dimensions_separate_height_value', 'dimensions_separate_diameter_value', 'dimensions_separate_wall_thickness_value', 'dimensions_separate_weight_value','closer_location','bought_for','worth_value','worth_insurance_value']; $crosscheck2 = ['object_other_title_kind_of','detailed_description_md','detailed_description_extern','inscription_md','inscription_extern','dimensions_separate_length_unit', 'dimensions_separate_width_unit', 'dimensions_separate_height_unit', 'dimensions_separate_diameter_unit', 'dimensions_separate_wall_thickness_unit', 'dimensions_separate_weight_unit','closer_location_as','bought_for_currency','worth_unit','worth_insurance_unit']; $depcon_error = 0; foreach ($crosscheck1 as $l => $tCrossCheck) { if (in_array($tCrossCheck, $erstezeile)) { for ($j = 1; $j < ($y + 1); $j++) { if ($inhalt[$j][array_search($crosscheck2[$l], $erstezeile)] !== '' and $inhalt[$j][array_search($tCrossCheck, $erstezeile)] == '') { echo '
Tag ' . $crosscheck2[$l] . ' given but no entry for ' . $tCrossCheck . ' (row ' . $j . ')'; $depcon_error++; } } } } foreach ($eventpart as $l => $tEventPart) { if (in_array($tEventPart, $erstezeile)) { for ($j = 1; $j < ($y + 1); $j++) { if ($inhalt[$j][array_search($eventpartsure[$l], $erstezeile)] !== '' and $inhalt[$j][array_search($tEventPart, $erstezeile)] == '') { echo '
Tag ' . $eventpartsure[$l] . ' given but no entry for ' . $tEventPart . ' (row ' . $j . ')'; $depcon_error++; } } } } if (in_array('dimensions_separate_show_md', $erstezeile)) { for ($j = 1; $j < ($y + 1); $j++) { if ($inhalt[$j][array_search('dimensions_separate_show_md', $erstezeile)] !== '' and ($inhalt[$j][array_search('dimensions_separate_length_value', $erstezeile)] == '') and $inhalt[$j][array_search('dimensions_separate_width_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_heigt_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_weight_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_diameter_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_wall_thickness_value', $erstezeile)] == '') { echo '
Tag dimensions_separate_show_md given but no separate values available (row ' . $j . ')'; $depcon_error = $depcon_error + 1; } } } if (in_array('dimensions_separate_show_extern', $erstezeile)) { for ($j = 1; $j < ($y + 1); $j++) { if ($inhalt[$j][array_search('dimensions_separate_show_extern', $erstezeile)] !== '' and ($inhalt[$j][array_search('dimensions_separate_length_value', $erstezeile)] == '') and $inhalt[$j][array_search('dimensions_separate_width_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_heigt_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_weight_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_diameter_value', $erstezeile)] == '' and $inhalt[$j][array_search('dimensions_separate_wall_thickness_value', $erstezeile)] == '') { echo '
Tag dimensions_separate_show_extern given but no separate values available (row ' . $j . ')'; $depcon_error = $depcon_error + 1; } } } /* for ($im=1;$im<11;$im++) { if (in_array('image_name'.$im,$erstezeile)) { for ($j=1;$j<($y+1);$j++) { if ($inhalt[$j][array_search('image_rights'.$im,$erstezeile)]!=='') { echo '
TAG image_name'.$im.' given but no value available for image_rights'.$im.' (row '.$j.')'; $depcon_error=$depcon_error+1; } if ($inhalt[$j][array_search('image_visible'.$im,$erstezeile)]!=='') { echo '
TAG image_name'.$im.' given but no value available for image_visible'.$im.' (row '.$j.')'; $depcon_error=$depcon_error+1; } } } } */ if ($depcon_error == 0) echo '
Dependency of content was observed !'; ///// Check #7 echo '

7: Not allowed values in controlled lists?
'; for ($i = 2; $i <= $y; $i++) { foreach ($inhalt[$i] as $key => $value) { $columnName = $inhalt[1][$key]; // If the field is not restricted, then continue if (!isset($fieldsWithAllowedValueSet[$columnName])) continue; // For others: check if the value is from the list of allowed values. if (!in_array($value, $fieldsWithAllowedValueSet[$columnName])) { // It may be that the value is empty together with all dependent fields, // because it's in a repeat field that was needed earlier. if (empty($value) && !empty($fieldsWithDependency[$columnName])) { $allDependentsEmpty = true; foreach ($fieldsWithDependency[$columnName] as $depField) { // Find keys of dependent field $depFieldKey = array_search($depField, $inhalt[1]); if (!empty($inhalt[$i][$depFieldKey])) { $allDependentsEmpty = false; break; } } //TODO: reverse the IF and use it before the error message if ($allDependentsEmpty === true) continue; } $errormessage[] = "Disallowed value in column {$columnName} on row {$i}: " . $value . " (allowed values: " . implode(", ", $fieldsWithAllowedValueSet[$columnName]) . ")"; } } } if (isset($errormessage) and $errormessage != '') { echo 'Columns with controlled values contain invalid values !'; foreach ($errormessage as $tMsg) { echo '
' . $tMsg; $error++; } } else { echo 'Values in controlled fields are all valid !'; } ///// Check #8 unset($errormessage); echo '

8: Main image or main resource given?
'; $hasanyimage = 0; for ($im = 1; $im < 29; $im++) { if (array_search('image_name' . $im, $erstezeile) != '') { $imagemain[$im]['name'] = array_search('image_name' . $im, $erstezeile);$hasanyimage++; } if (array_search('image_visible' . $im, $erstezeile) != '') { $imagemain[$im]['visible'] = array_search('image_visible' . $im, $erstezeile); } if (array_search('image_main' . $im, $erstezeile) != '') { $imagemain[$im]['main'] = array_search('image_main' . $im, $erstezeile); } } if ($hasanyimage > 0) { $imagemain = array_values($imagemain); for ($i = 1; $i <= $y; $i++) { if ($i > 1) { //check if in a row any image_name is given $maimg = $hatimg = 0; foreach ($imagemain as $im => $tMainImage) { if ($inhalt[$i][$tMainImage["name"]] != '') $hatimg++; } if ($hatimg > 0) { // first check: how many main-images? foreach ($imagemain as $im => $tMainImage) { if ($inhalt[$i][$imagemain[$im]['main']] == 'y') { $maimg++; $merk = $im; } } // if there is exacly one main-image, is it visible? if ($maimg == 1) { if ($inhalt[$i][$imagemain[$merk]['visible']] == 'n') { $errormessage[] = 'Main image in row ' . $i . ' is not visible'; } } } if ($maimg == 0 and $hatimg > 0) { $errormessage[] = 'There is no visible main image given in row ' . $i . ''; } if ($maimg > 1 and $hatimg > 0) { $errormessage[] = 'There are ' . $maimg . ' main images given in row ' . $i . ''; } } } if (!empty($errormessage)) { echo 'There is not one main image for each object !'; foreach ($errormessage as $tMsg) { echo '
' . $tMsg; $error++; } } else { echo 'For each object that has images attached exactly one main image is given !'; } } else { echo 'No images to be imported !'; } echo '
'; if ($error + $depcon_error > 0) { echo '

Error(s) found: ' . ($error + $depcon_error) . '

'; echo 'Create XML for md:import (utf8)
'; } else { echo 'Create XML for md:import (utf8)
'; } echo '
'; echo ' ';