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é: