diff --git a/import/import_items.php b/import/import_items.php index 28165c7..f7eb1e5 100644 --- a/import/import_items.php +++ b/import/import_items.php @@ -2,12 +2,16 @@ show($gL10n->get('SYS_NO_RIGHTS')); } +/** + * Compares two arrays to determine if they are different based on specific criteria. + * + * This function filters out certain keys ('KEEPER', 'LAST_RECEIVER', 'CATEGORY') from the first array, + * converts date fields ('RECEIVED_ON', 'RECEIVED_BACK_ON') from 'd.m.Y' format to 'Y-m-d' format, + * and then checks if any value in the filtered and transformed first array is not present in the second array. + * + * @param array $array1 The first array to compare. + * @param array $array2 The second array to compare. + * @return bool Returns true if the arrays are different based on the criteria, otherwise false. + */ +function compareArrays(array $array1, array $array2): bool { + $array1 = array_filter($array1, function($key) { + return $key !== 'KEEPER' && $key !== 'LAST_RECEIVER' && $key !== 'CATEGORY'; + }, ARRAY_FILTER_USE_KEY); + + foreach (['RECEIVED_ON', 'RECEIVED_BACK_ON'] as $dateField) { + if (isset($array1[$dateField])) { + $date = DateTime::createFromFormat('d.m.Y', $array1[$dateField]); + if ($date) { + $array1[$dateField] = $date->format('Y-m-d'); + } + } + } + + foreach ($array1 as $value) { + if (!in_array($value, $array2, true)) { + return true; + } + } + return false; +} + $_SESSION['import_csv_request'] = $_POST; // check the CSRF token of the form against the session token @@ -38,6 +75,8 @@ $pPreferences = new CConfigTablePIM(); $pPreferences->read(); +$user = new User($gDb, $gProfileFields); + // create array with all profile fields that where assigned to columns of the import file foreach ($_POST as $formFieldId => $importFileColumn) { if ($importFileColumn !== '' && $formFieldId !== 'admidio-csrf-token' && $formFieldId !== 'first_row') { @@ -74,16 +113,30 @@ $items->readItems($gCurrentOrgId); $importSuccess = false; +// check if the item already exists foreach ($items->items as $fieldId => $value) { $items->readItemData($value['imi_id'], $gCurrentOrgId); - $i = 0; + $itemValues = array(); + foreach ($items->mItemData as $key => $itemData) { + $itemValue = $itemData->getValue('imd_value'); + if ($itemData->getValue('imf_name_intern') === 'KEEPER' || $itemData->getValue('imf_name_intern') === 'LAST_RECEIVER' || $itemData->getValue('imf_name_intern') === 'CATEGORY') + { + continue; + } + + $itemValues[] = array($itemData->getValue('imf_name_intern') => $itemValue); + } + $itemValues = array_merge_recursive(...$itemValues); - foreach ($items->mItemData as $itemData) { - foreach ($assignedFieldColumn as $row => $values) { - if ($itemData->getValue('imd_value') == $values['ITEMNAME']) { - unset($assignedFieldColumn[$row]); - continue; - } + if (count($assignedFieldColumn) === 0) { + break; + } + + foreach($assignedFieldColumn as $key => $value) { + $ret = compareArrays($value, $itemValues); + if (!$ret) { + unset($assignedFieldColumn[$key]); + continue; } } } @@ -282,6 +335,6 @@ $gMessage->show($gL10n->get('SYS_SAVE_DATA')); } else { - $gMessage->setForwardUrl($gNavigation->getUrl(), 1000); - $gMessage->show($gL10n->get('SYS_REDIRECT')); + $gMessage->setForwardUrl($gNavigation->getUrl()); + $gMessage->show($gL10n->get('PLG_INVENTORY_MANAGER_NO_NEW_IMPORT_DATA')); } \ No newline at end of file diff --git a/languages/de-DE.xml b/languages/de-DE.xml index 5e0f6ff..689213c 100644 --- a/languages/de-DE.xml +++ b/languages/de-DE.xml @@ -72,6 +72,7 @@ Die Authorisierungsprüfung des Plugins ist fehlgeschlagen. Es ist mehr als ein Menüpunkt mit derselben URL definiert.\n\n=> #VAR1_BOLD# InventoryManager Neu + In der Importdatei waren keine neuen Daten vorhanden! Der Gegenstand #VAR1_BOLD# wurde von #VAR2_BOLD# geändert: Der Gegenstand #VAR1_BOLD# wurde von #VAR2_BOLD# angelegt: Ein Gegenstand im Inventar wurde gelöscht: diff --git a/languages/de.xml b/languages/de.xml index 3f597de..25d6112 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -72,6 +72,7 @@ Die Authorisierungsprüfung des Plugins ist fehlgeschlagen. Es ist mehr als ein Menüpunkt mit derselben URL definiert.\n\n=> #VAR1_BOLD# InventoryManager Neu + In der Importdatei waren keine neuen Daten vorhanden! Der Gegenstand #VAR1_BOLD# wurde von #VAR2_BOLD# geändert: Der Gegenstand #VAR1_BOLD# wurde von #VAR2_BOLD# angelegt: Ein Gegenstand im Inventar wurde gelöscht: diff --git a/languages/en.xml b/languages/en.xml index 88eb0ce..398be90 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -72,6 +72,7 @@ The authorization check of the plugin failed. There is more than one menu item with the same URL defined.\n\n=> #VAR1_BOLD# InventoryManager New + There was no new data in the import file! The item #VAR1_BOLD# was changed by #VAR2_BOLD#: The item #VAR1_BOLD# was created by #VAR2_BOLD#: An item was deleted: diff --git a/languages/fr.xml b/languages/fr.xml index 1a956d6..0f5452a 100644 --- a/languages/fr.xml +++ b/languages/fr.xml @@ -72,6 +72,7 @@ Le contrôle d\'autorisation du plug-in a échoué. Plus d\'un élément de menu est défini avec la même URL.\n\n=> #VAR1_BOLD# InventoryManager Nouveau + Aucune nouvelle donnée n'était présente dans le fichier d'importation! L'objet #VAR1_BOLD# a été modifié par #VAR2_BOLD#: L'objet #VAR1_BOLD# a été créé par #VAR2_BOLD#: Un objet dans l'inventaire a été supprimé: