From d0905ded3c9627193768df731abd17c04b7c33f7 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Sun, 3 Aug 2025 10:27:14 +0200 Subject: [PATCH 01/25] added field-type for maintenance scheuduling to field-editor --- fields/fields_edit_new.php | 4 ++-- languages/de.xml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fields/fields_edit_new.php b/fields/fields_edit_new.php index b75e7ad..0d749ce 100644 --- a/fields/fields_edit_new.php +++ b/fields/fields_edit_new.php @@ -67,7 +67,7 @@ $page->addJavascript(' function setValueList() { - if ($("#imf_type").val() === "DROPDOWN" || $("#imf_type").val() === "RADIO_BUTTON") { + if ($("#imf_type").val() === "DROPDOWN" || $("#imf_type").val() === "RADIO_BUTTON" || $("#imf_type").val() === "MAINTENANCE_SCHEDULE") { $("#imf_value_list_group").show("slow"); $("#imf_value_list").attr("required", "required"); } else { @@ -108,7 +108,7 @@ function setValueList() { 'RADIO_BUTTON' => $gL10n->get('SYS_RADIO_BUTTON'), 'TEXT' => $gL10n->get('SYS_TEXT') . ' (100 ' . $gL10n->get('SYS_CHARACTERS') . ')', 'TEXT_BIG' => $gL10n->get('SYS_TEXT') . ' (4000 ' . $gL10n->get('SYS_CHARACTERS') . ')', -); + 'MAINTENANCE_SCHEDULE' => $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE')); asort($itemFieldText); //bei Systemfeldern darf der Datentyp nicht mehr veraendert werden diff --git a/languages/de.xml b/languages/de.xml index 692b0b1..dc89904 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -105,6 +105,7 @@ Ausleih-Optionen deaktivieren Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. Allgemein + Prüfturnus Kategorie Die Kategorie des Gegenstandes From d7a130063268f3c88bb9a9bfeaca3e591aaafc24 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Sun, 3 Aug 2025 11:06:19 +0200 Subject: [PATCH 02/25] implemented maintenance scheuduling in item-editor --- classes/items.php | 14 +++++++++++++- items/items_edit_new.php | 5 ++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/classes/items.php b/classes/items.php index d463e10..76d73e9 100644 --- a/classes/items.php +++ b/classes/items.php @@ -146,10 +146,22 @@ public function getProperty($fieldNameIntern, $column, $format = '') $value = $this->mItemFields[$fieldNameIntern]->getValue($column, $format); - if ($column === 'imf_value_list' && in_array($this->mItemFields[$fieldNameIntern]->getValue('imf_type'), ['DROPDOWN', 'RADIO_BUTTON'])) { + if ($column === 'imf_value_list' && in_array($this->mItemFields[$fieldNameIntern]->getValue('imf_type'), ['DROPDOWN', 'RADIO_BUTTON', 'MAINTENANCE_SCHEDULE'])) { $value = $this->getListValue($fieldNameIntern, $value, $format); + + //Clean up control-chars from maintenance scheudule + if($this->mItemFields[$fieldNameIntern]->getValue('imf_type') == 'MAINTENANCE_SCHEDULE'){ + $cleanValue = array(); + foreach ($value as $line) { + if(substr($line,0,1) != '#'){ + array_push($cleanValue, explode('|', $line)[0]); + } + } + $value = $cleanValue; + } } + return $value; } diff --git a/items/items_edit_new.php b/items/items_edit_new.php index a59cc11..7e971af 100644 --- a/items/items_edit_new.php +++ b/items/items_edit_new.php @@ -262,6 +262,10 @@ function validateReceivedOnAndBackOn() { break; case 'DROPDOWN': + case'MAINTENANCE_SCHEDULE': + + error_log(serialize($items->getProperty($imfNameIntern, 'imf_value_list'))); + $form->addSelectBox( 'imf-' . $items->getProperty($imfNameIntern, 'imf_id'), convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')), @@ -304,7 +308,6 @@ function validateReceivedOnAndBackOn() { ) ); break; - default: $fieldType = 'text'; $maxlength = '50'; From d5ce5f24899000c2cee199d5259a661ff3010388 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Sun, 3 Aug 2025 13:21:49 +0200 Subject: [PATCH 03/25] removed debug log --- items/items_edit_new.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/items/items_edit_new.php b/items/items_edit_new.php index 7e971af..8a53e6a 100644 --- a/items/items_edit_new.php +++ b/items/items_edit_new.php @@ -264,8 +264,6 @@ function validateReceivedOnAndBackOn() { case 'DROPDOWN': case'MAINTENANCE_SCHEDULE': - error_log(serialize($items->getProperty($imfNameIntern, 'imf_value_list'))); - $form->addSelectBox( 'imf-' . $items->getProperty($imfNameIntern, 'imf_id'), convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')), From 9e28e19de39cb0c7e79b9d78859724dd80dd44ca Mon Sep 17 00:00:00 2001 From: Dekkia Date: Sun, 3 Aug 2025 13:25:41 +0200 Subject: [PATCH 04/25] displaying maintenance schedule in list --- classes/items.php | 12 ++++++++++++ inventory_manager.php | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/classes/items.php b/classes/items.php index 76d73e9..3f5547a 100644 --- a/classes/items.php +++ b/classes/items.php @@ -303,12 +303,24 @@ public function getHtmlValue($fieldNameIntern, $value): string case 'DROPDOWN': case 'RADIO_BUTTON': + case 'MAINTENANCE_SCHEDULE': $arrListValuesWithItems = array(); // array with list values and items that represents the internal value // first replace windows new line with unix new line and then create an array $valueFormatted = str_replace("\r\n", "\n", $this->mItemFields[$fieldNameIntern]->getValue('imf_value_list', 'database')); $arrListValues = explode("\n", $valueFormatted); + //Clean up control-chars from maintenance scheudule + if($imfType == 'MAINTENANCE_SCHEDULE'){ + $cleanArrListValues = array(); + foreach ($arrListValues as $line) { + if(substr($line,0,1) != '#'){ + array_push($cleanArrListValues, explode('|', $line)[0]); + } + } + $arrListValues = $cleanArrListValues; + } + foreach ($arrListValues as $index => $listValue) { // if value is imagefile or imageurl then show image if ($imfType === 'RADIO_BUTTON' && (Image::isFontAwesomeIcon($listValue) diff --git a/inventory_manager.php b/inventory_manager.php index 723635b..b115db6 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -626,7 +626,7 @@ elseif ($items->getProperty($imfNameIntern, 'imf_type') == 'DATE') { $content = $items->getHtmlValue($imfNameIntern, $content); } - elseif (in_array($items->getProperty($imfNameIntern, 'imf_type'), array('DROPDOWN', 'RADIO_BUTTON'))) { + elseif (in_array($items->getProperty($imfNameIntern, 'imf_type'), array('DROPDOWN', 'RADIO_BUTTON', 'MAINTENANCE_SCHEDULE'))) { $content = $items->getHtmlValue($imfNameIntern, $content); } From 57afd76839cfa074c0f213b979559ca1ba2ec6d3 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Mon, 4 Aug 2025 09:52:54 +0200 Subject: [PATCH 05/25] relocated the code that cleans up the MAINTENANCE_SCHEDULE dropdown to fix off-by-one error. --- classes/items.php | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/classes/items.php b/classes/items.php index 3f5547a..76f2b69 100644 --- a/classes/items.php +++ b/classes/items.php @@ -149,16 +149,6 @@ public function getProperty($fieldNameIntern, $column, $format = '') if ($column === 'imf_value_list' && in_array($this->mItemFields[$fieldNameIntern]->getValue('imf_type'), ['DROPDOWN', 'RADIO_BUTTON', 'MAINTENANCE_SCHEDULE'])) { $value = $this->getListValue($fieldNameIntern, $value, $format); - //Clean up control-chars from maintenance scheudule - if($this->mItemFields[$fieldNameIntern]->getValue('imf_type') == 'MAINTENANCE_SCHEDULE'){ - $cleanValue = array(); - foreach ($value as $line) { - if(substr($line,0,1) != '#'){ - array_push($cleanValue, explode('|', $line)[0]); - } - } - $value = $cleanValue; - } } @@ -200,6 +190,19 @@ protected function getListValue($fieldNameIntern, $value, $format): array $valueFormatted = str_replace("\r\n", "\n", $value); $arrListValues = explode("\n", $valueFormatted); + // remove lines starting with # from MAINTENANCE_SCHEDULE + // as they're used to select the name of the last inspection date field + // Also remove the | and anything that follows + if($this->mItemFields[$fieldNameIntern]->getValue('imf_type') == 'MAINTENANCE_SCHEDULE'){ + $cleanValue = array(); + foreach ($arrListValues as $line) { + if(substr($line,0,1) != '#'){ + array_push($cleanValue, explode('|', $line)[0]); + } + } + $arrListValues = $cleanValue; + } + foreach ($arrListValues as $item => &$listValue) { if ($this->mItemFields[$fieldNameIntern]->getValue('imf_type') === 'RADIO_BUTTON') { // if value is imagefile or imageurl then show image From e3f52aa2628e005a392ee340dfeab1631cfc1c9b Mon Sep 17 00:00:00 2001 From: Dekkia Date: Tue, 5 Aug 2025 09:41:31 +0200 Subject: [PATCH 06/25] added display for remaining days until next maintenance --- classes/items.php | 2 +- inventory_manager.php | 97 +++++++++++++++++++++++++++++++++++++++++++ languages/de.xml | 1 + 3 files changed, 99 insertions(+), 1 deletion(-) diff --git a/classes/items.php b/classes/items.php index 76f2b69..074e5f8 100644 --- a/classes/items.php +++ b/classes/items.php @@ -193,7 +193,7 @@ protected function getListValue($fieldNameIntern, $value, $format): array // remove lines starting with # from MAINTENANCE_SCHEDULE // as they're used to select the name of the last inspection date field // Also remove the | and anything that follows - if($this->mItemFields[$fieldNameIntern]->getValue('imf_type') == 'MAINTENANCE_SCHEDULE'){ + if($this->mItemFields[$fieldNameIntern]->getValue('imf_type') == 'MAINTENANCE_SCHEDULE' && $format != 'unfiltered'){ $cleanValue = array(); foreach ($arrListValues as $line) { if(substr($line,0,1) != '#'){ diff --git a/inventory_manager.php b/inventory_manager.php index b115db6..add61f8 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -517,6 +517,31 @@ } $columnNumber++; + + //Add additional column to header after each MAINTENANCE_SCHEDULE + if($items->getProperty($imfNameIntern, 'imf_type') === 'MAINTENANCE_SCHEDULE'){ + $columnAlign[] = 'left'; + $columnHeader2 = convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')) . ' ' . $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE_DAYS_REMAINING'); + + switch ($getMode) { + case 'csv': + case "ods": + case 'xlsx': + $header[$columnHeader2] = 'string'; + break; + + case 'pdf': + $arrValidColumns[] = $columnHeader2; + break; + + case 'html': + case 'print': + $columnValues[] = $columnHeader2; + break; + } + + $columnNumber++; + } } if ($getMode == 'html') { @@ -568,6 +593,7 @@ } $content = $items->getValue($imfNameIntern, 'database'); + $value = $content; // content gets overwritten in the next part of code but is still needed for MAINTENANCE_SCHEDULE stuff if ($imfNameIntern == 'KEEPER' && strlen($content) > 0) { $found = $user->readDataById($content); @@ -632,6 +658,77 @@ $columnValues[] = ($strikethrough && $getMode != 'csv' && $getMode != 'ods' && $getMode != 'xlsx') ? '' . $content . '' : $content; $columnNumber++; + + //Add additional column to header after each MAINTENANCE_SCHEDULE + if($items->getProperty($imfNameIntern, 'imf_type') === 'MAINTENANCE_SCHEDULE'){ + $columnAlign[] = 'left'; + + //get #-line from dropdown + $unfilteredSelectionItems = $items->getProperty($imfNameIntern, 'imf_value_list', 'unfiltered'); + $date_field_internal_name = null; + $filteredSelectionItems = array(); + + foreach ($arrListValues as $line) { + if(substr($line,0,1) === '#'){ + $date_field_internal_name = substr($line,1); + }else{ + array_push($filteredSelectionItems, explode('|', $line)[1]); + } + } + //use part after # as internal_name for last test date + $compDate1 = date_create($items->getValue($date_field_internal_name, 'database')); + $compDate2 = date_create(); + + //Calculate future test date + $dateAdditionSplit = array(); + preg_match("/^\s*(\d*)([wymd])\s*$/", $filteredSelectionItems[$value-1], $dateAdditionSplit); + error_log(implode("+",$dateAdditionSplit)); + + //TODO: better error-handling + if(intval($dateAdditionSplit[1]) && $dateAdditionSplit[2]){ + switch ($dateAdditionSplit[2]) { + case 'w': + date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'W')); + break; + case 'm': + date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'M')); + break; + case 'y': + date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'Y')); + break; + case 'd': + default: + date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'D')); + break; + } + } + + //error_log($filteredSelectionItems[$value-1]); + //error_log(implode($filteredSelectionItems)); + + //Compare last test date with future date and output days + $dateDiff = date_diff($compDate2, $compDate1); + $columnHeader2 = $dateDiff->format('%R%a Tage'); + + switch ($getMode) { + case 'csv': + case "ods": + case 'xlsx': + $header[$columnHeader2] = 'string'; + break; + + case 'pdf': + $arrValidColumns[] = $columnHeader2; + break; + + case 'html': + case 'print': + $columnValues[] = $columnHeader2; + break; + } + + $columnNumber++; + } } if ($getMode == 'html') { diff --git a/languages/de.xml b/languages/de.xml index dc89904..89be12f 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -106,6 +106,7 @@ Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. Allgemein Prüfturnus + Tage Übrig Kategorie Die Kategorie des Gegenstandes From d1c0a14fb3aff875f421bee37dd454722f0b8967 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Tue, 5 Aug 2025 18:10:14 +0200 Subject: [PATCH 07/25] fixed bug with displaying maintenance entries in print preview --- inventory_manager.php | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/inventory_manager.php b/inventory_manager.php index add61f8..eef3bfe 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -668,7 +668,7 @@ $date_field_internal_name = null; $filteredSelectionItems = array(); - foreach ($arrListValues as $line) { + foreach ($unfilteredSelectionItems as $line) { if(substr($line,0,1) === '#'){ $date_field_internal_name = substr($line,1); }else{ @@ -682,7 +682,6 @@ //Calculate future test date $dateAdditionSplit = array(); preg_match("/^\s*(\d*)([wymd])\s*$/", $filteredSelectionItems[$value-1], $dateAdditionSplit); - error_log(implode("+",$dateAdditionSplit)); //TODO: better error-handling if(intval($dateAdditionSplit[1]) && $dateAdditionSplit[2]){ @@ -702,13 +701,10 @@ break; } } - - //error_log($filteredSelectionItems[$value-1]); - //error_log(implode($filteredSelectionItems)); - + //Compare last test date with future date and output days $dateDiff = date_diff($compDate2, $compDate1); - $columnHeader2 = $dateDiff->format('%R%a Tage'); + $columnHeader2 = $dateDiff->format('%R%a Tage'); //TODO: translate Tage switch ($getMode) { case 'csv': From a625fba9aad2f25de277da395e29be7872045d31 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Tue, 5 Aug 2025 18:16:31 +0200 Subject: [PATCH 08/25] fixed bug with maintenance days in exports --- inventory_manager.php | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/inventory_manager.php b/inventory_manager.php index eef3bfe..b5807e2 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -704,25 +704,9 @@ //Compare last test date with future date and output days $dateDiff = date_diff($compDate2, $compDate1); - $columnHeader2 = $dateDiff->format('%R%a Tage'); //TODO: translate Tage - - switch ($getMode) { - case 'csv': - case "ods": - case 'xlsx': - $header[$columnHeader2] = 'string'; - break; - - case 'pdf': - $arrValidColumns[] = $columnHeader2; - break; - - case 'html': - case 'print': - $columnValues[] = $columnHeader2; - break; - } + $daysRemaining = $dateDiff->format('%R%a Tage'); //TODO: translate Tage + $columnValues[] = ($strikethrough && $getMode != 'csv' && $getMode != 'ods' && $getMode != 'xlsx') ? '' . $daysRemaining . '' : $daysRemaining; $columnNumber++; } } From cf6f10b9efedfb089e8d05288443b8e6fee34b50 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Tue, 5 Aug 2025 18:18:42 +0200 Subject: [PATCH 09/25] added translation --- inventory_manager.php | 2 +- languages/de.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/inventory_manager.php b/inventory_manager.php index b5807e2..1133def 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -704,7 +704,7 @@ //Compare last test date with future date and output days $dateDiff = date_diff($compDate2, $compDate1); - $daysRemaining = $dateDiff->format('%R%a Tage'); //TODO: translate Tage + $daysRemaining = $dateDiff->format('%R%a ' . $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE_DAYS')); $columnValues[] = ($strikethrough && $getMode != 'csv' && $getMode != 'ods' && $getMode != 'xlsx') ? '' . $daysRemaining . '' : $daysRemaining; $columnNumber++; diff --git a/languages/de.xml b/languages/de.xml index 89be12f..664e681 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -107,6 +107,7 @@ Allgemein Prüfturnus Tage Übrig + Tag(e) Kategorie Die Kategorie des Gegenstandes From b057708aa82106048a00146a0f57ec0d0fd65150 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Tue, 5 Aug 2025 18:21:37 +0200 Subject: [PATCH 10/25] updated other language files french is auto-translated --- languages/de-DE.xml | 3 +++ languages/en.xml | 3 +++ languages/fr.xml | 3 +++ 3 files changed, 9 insertions(+) diff --git a/languages/de-DE.xml b/languages/de-DE.xml index 560b4c6..62f3142 100644 --- a/languages/de-DE.xml +++ b/languages/de-DE.xml @@ -105,6 +105,9 @@ Ausleih-Optionen deaktivieren Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. Allgemein + Prüfturnus + Tage Übrig + Tag(e) Kategorie Die Kategorie des Gegenstandes diff --git a/languages/en.xml b/languages/en.xml index 7317fa2..268aba4 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -105,6 +105,9 @@ Current user as default selection If the current user is to be preset as the keeper when adding new items, the checkbox must be checked. You are using the current #VAR1# version of InventoryManager! + maintenance Schedule + Days Left + Day(s) Category Category of the item diff --git a/languages/fr.xml b/languages/fr.xml index fb729de..ec9095a 100644 --- a/languages/fr.xml +++ b/languages/fr.xml @@ -105,6 +105,9 @@ Désactiver les options d'emprunt Désactivez les champs et leurs fonctions qui représentent l'emprunt et le retour d'objets. Générale + Périodicité des contrôles + Jours restants + Jour(s) Catégorie La catégorie de l'objet From 2844a60e9112970022fc3e85348a92fd7cdc6c6f Mon Sep 17 00:00:00 2001 From: Dekkia Date: Tue, 5 Aug 2025 18:55:50 +0200 Subject: [PATCH 11/25] added tooltip for MAINTENANCE_SCHEDULE in fields_edit_new french is auto-translated --- fields/fields_edit_new.php | 7 +++++++ languages/de-DE.xml | 1 + languages/de.xml | 1 + languages/en.xml | 1 + languages/fr.xml | 1 + 5 files changed, 11 insertions(+) diff --git a/fields/fields_edit_new.php b/fields/fields_edit_new.php index 0d749ce..28fd400 100644 --- a/fields/fields_edit_new.php +++ b/fields/fields_edit_new.php @@ -74,6 +74,13 @@ function setValueList() { $("#imf_value_list").removeAttr("required"); $("#imf_value_list_group").hide(); } + + var valueListTooltipContainer = document.getElementById("imf_value_list_group").getElementsByTagName("label")[0].getElementsByTagName("i")[0]; + if($("#imf_type").val() === "MAINTENANCE_SCHEDULE"){ + valueListTooltipContainer.setAttribute("data-content","' . $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE_DESC') . '"); + }else{ + valueListTooltipContainer.setAttribute("data-content","' . $gL10n->get('ORG_VALUE_LIST_DESC') . '"); + } } setValueList(); diff --git a/languages/de-DE.xml b/languages/de-DE.xml index 62f3142..9af45a6 100644 --- a/languages/de-DE.xml +++ b/languages/de-DE.xml @@ -108,6 +108,7 @@ Prüfturnus Tage Übrig Tag(e) + In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie Die Kategorie des Gegenstandes diff --git a/languages/de.xml b/languages/de.xml index 664e681..3722579 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -108,6 +108,7 @@ Prüfturnus Tage Übrig Tag(e) + In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie Die Kategorie des Gegenstandes diff --git a/languages/en.xml b/languages/en.xml index 268aba4..3519426 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -108,6 +108,7 @@ maintenance Schedule Days Left Day(s) + In this field, you can enter the entries for maintenance schedules. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe internal name of the date field the current schedules applies to must be specified with a # symbol. e.g. #LAST_CHECK \n\nThe cycle interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years Category Category of the item diff --git a/languages/fr.xml b/languages/fr.xml index ec9095a..9953278 100644 --- a/languages/fr.xml +++ b/languages/fr.xml @@ -108,6 +108,7 @@ Périodicité des contrôles Jours restants Jour(s) + Dans ce champ, vous pouvez saisir les entrées pour les tournées de contrôle. Une entrée de la liste déroulante peut être saisie ici par ligne.\n\nPlus tard, ce n'est pas le texte qui sera enregistré dans l'inventaire, mais la position sélectionnée dans la liste. Si l'on modifie le texte d'une ligne, tous les utilisateurs voient immédiatement le nouveau texte. Si l'on déplace une entrée sur une autre ligne, les utilisateurs verront éventuellement une autre entrée.\n\n Le nom interne du champ de date auquel se réfère le tournus doit être indiqué avec un symbole #. p.ex. #DERNIER_PRUIT \n\n L'intervalle de tournus doit être écrit sur la même ligne après la désignation, séparé par le symbole |. p.ex. annuel | 1y \n\n Si aucune unité n'est indiquée, on part de jours. \nUnités possibles : d : jours, w : semaines, m : mois, y : années Catégorie La catégorie de l'objet From a56a5d22078568ef1322c91edd5fceee404450b1 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Tue, 5 Aug 2025 18:58:55 +0200 Subject: [PATCH 12/25] error-handling is pretty good already --- inventory_manager.php | 1 - 1 file changed, 1 deletion(-) diff --git a/inventory_manager.php b/inventory_manager.php index 1133def..3e970c1 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -683,7 +683,6 @@ $dateAdditionSplit = array(); preg_match("/^\s*(\d*)([wymd])\s*$/", $filteredSelectionItems[$value-1], $dateAdditionSplit); - //TODO: better error-handling if(intval($dateAdditionSplit[1]) && $dateAdditionSplit[2]){ switch ($dateAdditionSplit[2]) { case 'w': From a733a3cd2c2ba9d0c178c8861f699b09a94bfc9d Mon Sep 17 00:00:00 2001 From: Dekkia Date: Tue, 5 Aug 2025 19:01:35 +0200 Subject: [PATCH 13/25] remove "day(s)"-string at the end of schedule days remaining to improve sorting --- inventory_manager.php | 2 +- languages/de-DE.xml | 1 - languages/de.xml | 1 - languages/en.xml | 1 - languages/fr.xml | 3 +-- 5 files changed, 2 insertions(+), 6 deletions(-) diff --git a/inventory_manager.php b/inventory_manager.php index 3e970c1..8981a3c 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -703,7 +703,7 @@ //Compare last test date with future date and output days $dateDiff = date_diff($compDate2, $compDate1); - $daysRemaining = $dateDiff->format('%R%a ' . $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE_DAYS')); + $daysRemaining = $dateDiff->format('%R%a'); $columnValues[] = ($strikethrough && $getMode != 'csv' && $getMode != 'ods' && $getMode != 'xlsx') ? '' . $daysRemaining . '' : $daysRemaining; $columnNumber++; diff --git a/languages/de-DE.xml b/languages/de-DE.xml index 9af45a6..5c2c751 100644 --- a/languages/de-DE.xml +++ b/languages/de-DE.xml @@ -107,7 +107,6 @@ Allgemein Prüfturnus Tage Übrig - Tag(e) In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie diff --git a/languages/de.xml b/languages/de.xml index 3722579..6ee88b9 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -107,7 +107,6 @@ Allgemein Prüfturnus Tage Übrig - Tag(e) In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie diff --git a/languages/en.xml b/languages/en.xml index 3519426..e47ccee 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -107,7 +107,6 @@ You are using the current #VAR1# version of InventoryManager! maintenance Schedule Days Left - Day(s) In this field, you can enter the entries for maintenance schedules. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe internal name of the date field the current schedules applies to must be specified with a # symbol. e.g. #LAST_CHECK \n\nThe cycle interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years Category diff --git a/languages/fr.xml b/languages/fr.xml index 9953278..0c79f30 100644 --- a/languages/fr.xml +++ b/languages/fr.xml @@ -107,8 +107,7 @@ Générale Périodicité des contrôles Jours restants - Jour(s) - Dans ce champ, vous pouvez saisir les entrées pour les tournées de contrôle. Une entrée de la liste déroulante peut être saisie ici par ligne.\n\nPlus tard, ce n'est pas le texte qui sera enregistré dans l'inventaire, mais la position sélectionnée dans la liste. Si l'on modifie le texte d'une ligne, tous les utilisateurs voient immédiatement le nouveau texte. Si l'on déplace une entrée sur une autre ligne, les utilisateurs verront éventuellement une autre entrée.\n\n Le nom interne du champ de date auquel se réfère le tournus doit être indiqué avec un symbole #. p.ex. #DERNIER_PRUIT \n\n L'intervalle de tournus doit être écrit sur la même ligne après la désignation, séparé par le symbole |. p.ex. annuel | 1y \n\n Si aucune unité n'est indiquée, on part de jours. \nUnités possibles : d : jours, w : semaines, m : mois, y : années + Dans ce champ, vous pouvez saisir les entrées pour les tournées de contrôle. Une entrée de la liste déroulante peut être saisie ici par ligne.\n\nPlus tard, ce n'est pas le texte qui sera enregistré dans l'inventaire, mais la position sélectionnée dans la liste. Si l'on modifie le texte d'une ligne, tous les utilisateurs voient immédiatement le nouveau texte. Si l'on déplace une entrée sur une autre ligne, les utilisateurs verront éventuellement une autre entrée.\n\n Le nom interne du champ de date auquel se réfère le tournus doit être indiqué avec un symbole #. p.ex. #DERNIER_PRUIT \n\n L'intervalle de tournus doit être écrit sur la même ligne après la désignation, séparé par le symbole |. p.ex. annuel | 1y \n\n Si aucune unité n'est indiquée, on part de jours. \nUnités possibles : d : jours, w : semaines, m : mois, y : années Catégorie La catégorie de l'objet From 5516e14cfafd6a8eb87adbf36642a472bbe3c4f1 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 5 Aug 2025 17:02:01 +0000 Subject: [PATCH 14/25] chore: sort en.xml alphabetically --- languages/en.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/languages/en.xml b/languages/en.xml index e47ccee..db75f8e 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -76,6 +76,9 @@ Keeper You can reintegrate the item into the inventory management. This has the advantage that the data is preserved and you can later always see who has borrowed this item.\n\nIf you want to delete the item, please contact an administrator or the manager of the inventory management! You can reintegrate the item into the inventory management.\n\nIf you want to delete the item, please contact an administrator or the manager of the inventory management! + maintenance Schedule + Days Left + In this field, you can enter the entries for maintenance schedules. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe internal name of the date field the current schedules applies to must be specified with a # symbol. e.g. #LAST_CHECK \n\nThe cycle interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years The authorization check of the plugin failed. There is more than one menu item with the same URL defined.\n\n=> #VAR1_BOLD# InventoryManager The following items were imported by #VAR1_BOLD#: @@ -105,9 +108,6 @@ Current user as default selection If the current user is to be preset as the keeper when adding new items, the checkbox must be checked. You are using the current #VAR1# version of InventoryManager! - maintenance Schedule - Days Left - In this field, you can enter the entries for maintenance schedules. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe internal name of the date field the current schedules applies to must be specified with a # symbol. e.g. #LAST_CHECK \n\nThe cycle interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years Category Category of the item From 4c252b25a378a9d445f0c9104633c4c24fc56e2a Mon Sep 17 00:00:00 2001 From: Dekkia Date: Wed, 6 Aug 2025 16:12:00 +0200 Subject: [PATCH 15/25] fixed bug that stopped maintenance schedule field from being deleted --- fields/fields.php | 3 ++- fields/fields_delete.php | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/fields/fields.php b/fields/fields.php index d6d94dd..4336132 100644 --- a/fields/fields.php +++ b/fields/fields.php @@ -151,7 +151,8 @@ function moveCategory(direction, imfID) { 'TEXT' => $gL10n->get('SYS_TEXT') . ' (100)', 'TEXT_BIG' => $gL10n->get('SYS_TEXT') . ' (4000)', 'NUMBER' => $gL10n->get('SYS_NUMBER'), - 'DECIMAL' => $gL10n->get('SYS_DECIMAL_NUMBER') + 'DECIMAL' => $gL10n->get('SYS_DECIMAL_NUMBER'), + 'MAINTENANCE_SCHEDULE' => $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE') ); $imfSystem = $itemField->getValue('imf_system') == 1 diff --git a/fields/fields_delete.php b/fields/fields_delete.php index 965ab02..22c393b 100644 --- a/fields/fields_delete.php +++ b/fields/fields_delete.php @@ -68,6 +68,7 @@ function setValueList() { 'RADIO_BUTTON' => $gL10n->get('SYS_RADIO_BUTTON'), 'TEXT' => $gL10n->get('SYS_TEXT') . ' (100 ' . $gL10n->get('SYS_CHARACTERS') . ')', 'TEXT_BIG' => $gL10n->get('SYS_TEXT') . ' (4000 ' . $gL10n->get('SYS_CHARACTERS') . ')', + 'MAINTENANCE_SCHEDULE' => $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE') ); asort($itemFieldText); From 208528d7287170b4f87916e33696da64873d61d8 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Wed, 6 Aug 2025 16:54:32 +0200 Subject: [PATCH 16/25] reduce duplicated code by putting some of it into a function --- inventory_manager.php | 70 ++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/inventory_manager.php b/inventory_manager.php index 8981a3c..277c425 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -499,48 +499,13 @@ $header[$gL10n->get('SYS_ABR_NO')] = 'string'; } - switch ($getMode) { - case 'csv': - case "ods": - case 'xlsx': - $header[$columnHeader] = 'string'; - break; - - case 'pdf': - $arrValidColumns[] = $columnHeader; - break; - - case 'html': - case 'print': - $columnValues[] = $columnHeader; - break; - } - - $columnNumber++; + addColumnToHeader($getMode, $columnHeader, $header, $arrValidColumns, $columnValues, $columnNumber); //Add additional column to header after each MAINTENANCE_SCHEDULE if($items->getProperty($imfNameIntern, 'imf_type') === 'MAINTENANCE_SCHEDULE'){ $columnAlign[] = 'left'; $columnHeader2 = convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')) . ' ' . $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE_DAYS_REMAINING'); - - switch ($getMode) { - case 'csv': - case "ods": - case 'xlsx': - $header[$columnHeader2] = 'string'; - break; - - case 'pdf': - $arrValidColumns[] = $columnHeader2; - break; - - case 'html': - case 'print': - $columnValues[] = $columnHeader2; - break; - } - - $columnNumber++; + addColumnToHeader($getMode, $columnHeader2, $header, $arrValidColumns, $columnValues, $columnNumber); } } @@ -908,3 +873,34 @@ function formatSpreadsheet($spreadsheet, $data, $containsHeadline) : void } $spreadsheet->getDefaultStyle()->getAlignment()->setWrapText(true); } + +/** + * Adds a given string to a given header when generating the main overview-table + * + * @param string $getMode + * @param string $newHeaderText + * @param array $header + * @param array $arrValidColumns + * @param array $columnValues + * @param int $columnNumber + */ +function addColumnToHeader($getMode, $newHeaderText, &$header, &$arrValidColumns, &$columnValues, &$columnNumber){ + switch ($getMode) { + case 'csv': + case "ods": + case 'xlsx': + $header[$newHeaderText] = 'string'; + break; + + case 'pdf': + $arrValidColumns[] = $newHeaderText; + break; + + case 'html': + case 'print': + $columnValues[] = $newHeaderText; + break; + } + + $columnNumber++; +} \ No newline at end of file From ef0c982b4a2cf95e6d3c50796519f701ff33d958 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Wed, 6 Aug 2025 16:56:59 +0200 Subject: [PATCH 17/25] fixed code formatting --- classes/items.php | 4 ---- items/items_edit_new.php | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/classes/items.php b/classes/items.php index 074e5f8..d5a7185 100644 --- a/classes/items.php +++ b/classes/items.php @@ -145,13 +145,9 @@ public function getProperty($fieldNameIntern, $column, $format = '') } $value = $this->mItemFields[$fieldNameIntern]->getValue($column, $format); - if ($column === 'imf_value_list' && in_array($this->mItemFields[$fieldNameIntern]->getValue('imf_type'), ['DROPDOWN', 'RADIO_BUTTON', 'MAINTENANCE_SCHEDULE'])) { $value = $this->getListValue($fieldNameIntern, $value, $format); - } - - return $value; } diff --git a/items/items_edit_new.php b/items/items_edit_new.php index 8a53e6a..d8abad3 100644 --- a/items/items_edit_new.php +++ b/items/items_edit_new.php @@ -263,7 +263,6 @@ function validateReceivedOnAndBackOn() { case 'DROPDOWN': case'MAINTENANCE_SCHEDULE': - $form->addSelectBox( 'imf-' . $items->getProperty($imfNameIntern, 'imf_id'), convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')), @@ -306,6 +305,7 @@ function validateReceivedOnAndBackOn() { ) ); break; + default: $fieldType = 'text'; $maxlength = '50'; From 4da7ee7221b500e9b0a68852f4a899138c323097 Mon Sep 17 00:00:00 2001 From: Dekkia Date: Wed, 6 Aug 2025 16:59:14 +0200 Subject: [PATCH 18/25] renamed MAINTENANCE_SCHEDULE into DATE_INTERVAL --- classes/items.php | 10 +++++----- fields/fields.php | 2 +- fields/fields_delete.php | 2 +- fields/fields_edit_new.php | 8 ++++---- inventory_manager.php | 14 +++++++------- items/items_edit_new.php | 4 ++-- languages/de-DE.xml | 6 +++--- languages/de.xml | 6 +++--- languages/en.xml | 6 +++--- languages/fr.xml | 6 +++--- 10 files changed, 32 insertions(+), 32 deletions(-) diff --git a/classes/items.php b/classes/items.php index d5a7185..c455bc9 100644 --- a/classes/items.php +++ b/classes/items.php @@ -145,7 +145,7 @@ public function getProperty($fieldNameIntern, $column, $format = '') } $value = $this->mItemFields[$fieldNameIntern]->getValue($column, $format); - if ($column === 'imf_value_list' && in_array($this->mItemFields[$fieldNameIntern]->getValue('imf_type'), ['DROPDOWN', 'RADIO_BUTTON', 'MAINTENANCE_SCHEDULE'])) { + if ($column === 'imf_value_list' && in_array($this->mItemFields[$fieldNameIntern]->getValue('imf_type'), ['DROPDOWN', 'RADIO_BUTTON', 'DATE_INTERVAL'])) { $value = $this->getListValue($fieldNameIntern, $value, $format); } return $value; @@ -186,10 +186,10 @@ protected function getListValue($fieldNameIntern, $value, $format): array $valueFormatted = str_replace("\r\n", "\n", $value); $arrListValues = explode("\n", $valueFormatted); - // remove lines starting with # from MAINTENANCE_SCHEDULE + // remove lines starting with # from DATE_INTERVAL // as they're used to select the name of the last inspection date field // Also remove the | and anything that follows - if($this->mItemFields[$fieldNameIntern]->getValue('imf_type') == 'MAINTENANCE_SCHEDULE' && $format != 'unfiltered'){ + if($this->mItemFields[$fieldNameIntern]->getValue('imf_type') == 'DATE_INTERVAL' && $format != 'unfiltered'){ $cleanValue = array(); foreach ($arrListValues as $line) { if(substr($line,0,1) != '#'){ @@ -302,7 +302,7 @@ public function getHtmlValue($fieldNameIntern, $value): string case 'DROPDOWN': case 'RADIO_BUTTON': - case 'MAINTENANCE_SCHEDULE': + case 'DATE_INTERVAL': $arrListValuesWithItems = array(); // array with list values and items that represents the internal value // first replace windows new line with unix new line and then create an array @@ -310,7 +310,7 @@ public function getHtmlValue($fieldNameIntern, $value): string $arrListValues = explode("\n", $valueFormatted); //Clean up control-chars from maintenance scheudule - if($imfType == 'MAINTENANCE_SCHEDULE'){ + if($imfType == 'DATE_INTERVAL'){ $cleanArrListValues = array(); foreach ($arrListValues as $line) { if(substr($line,0,1) != '#'){ diff --git a/fields/fields.php b/fields/fields.php index 4336132..4a6132e 100644 --- a/fields/fields.php +++ b/fields/fields.php @@ -152,7 +152,7 @@ function moveCategory(direction, imfID) { 'TEXT_BIG' => $gL10n->get('SYS_TEXT') . ' (4000)', 'NUMBER' => $gL10n->get('SYS_NUMBER'), 'DECIMAL' => $gL10n->get('SYS_DECIMAL_NUMBER'), - 'MAINTENANCE_SCHEDULE' => $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE') + 'DATE_INTERVAL' => $gL10n->get('PLG_INVENTORY_MANAGER_DATE_INTERVAL') ); $imfSystem = $itemField->getValue('imf_system') == 1 diff --git a/fields/fields_delete.php b/fields/fields_delete.php index 22c393b..4978585 100644 --- a/fields/fields_delete.php +++ b/fields/fields_delete.php @@ -68,7 +68,7 @@ function setValueList() { 'RADIO_BUTTON' => $gL10n->get('SYS_RADIO_BUTTON'), 'TEXT' => $gL10n->get('SYS_TEXT') . ' (100 ' . $gL10n->get('SYS_CHARACTERS') . ')', 'TEXT_BIG' => $gL10n->get('SYS_TEXT') . ' (4000 ' . $gL10n->get('SYS_CHARACTERS') . ')', - 'MAINTENANCE_SCHEDULE' => $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE') + 'DATE_INTERVAL' => $gL10n->get('PLG_INVENTORY_MANAGER_DATE_INTERVAL') ); asort($itemFieldText); diff --git a/fields/fields_edit_new.php b/fields/fields_edit_new.php index 28fd400..c744c29 100644 --- a/fields/fields_edit_new.php +++ b/fields/fields_edit_new.php @@ -67,7 +67,7 @@ $page->addJavascript(' function setValueList() { - if ($("#imf_type").val() === "DROPDOWN" || $("#imf_type").val() === "RADIO_BUTTON" || $("#imf_type").val() === "MAINTENANCE_SCHEDULE") { + if ($("#imf_type").val() === "DROPDOWN" || $("#imf_type").val() === "RADIO_BUTTON" || $("#imf_type").val() === "DATE_INTERVAL") { $("#imf_value_list_group").show("slow"); $("#imf_value_list").attr("required", "required"); } else { @@ -76,8 +76,8 @@ function setValueList() { } var valueListTooltipContainer = document.getElementById("imf_value_list_group").getElementsByTagName("label")[0].getElementsByTagName("i")[0]; - if($("#imf_type").val() === "MAINTENANCE_SCHEDULE"){ - valueListTooltipContainer.setAttribute("data-content","' . $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE_DESC') . '"); + if($("#imf_type").val() === "DATE_INTERVAL"){ + valueListTooltipContainer.setAttribute("data-content","' . $gL10n->get('PLG_INVENTORY_MANAGER_DATE_INTERVAL_DESC') . '"); }else{ valueListTooltipContainer.setAttribute("data-content","' . $gL10n->get('ORG_VALUE_LIST_DESC') . '"); } @@ -115,7 +115,7 @@ function setValueList() { 'RADIO_BUTTON' => $gL10n->get('SYS_RADIO_BUTTON'), 'TEXT' => $gL10n->get('SYS_TEXT') . ' (100 ' . $gL10n->get('SYS_CHARACTERS') . ')', 'TEXT_BIG' => $gL10n->get('SYS_TEXT') . ' (4000 ' . $gL10n->get('SYS_CHARACTERS') . ')', - 'MAINTENANCE_SCHEDULE' => $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE')); + 'DATE_INTERVAL' => $gL10n->get('PLG_INVENTORY_MANAGER_DATE_INTERVAL')); asort($itemFieldText); //bei Systemfeldern darf der Datentyp nicht mehr veraendert werden diff --git a/inventory_manager.php b/inventory_manager.php index 277c425..3723d61 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -501,10 +501,10 @@ addColumnToHeader($getMode, $columnHeader, $header, $arrValidColumns, $columnValues, $columnNumber); - //Add additional column to header after each MAINTENANCE_SCHEDULE - if($items->getProperty($imfNameIntern, 'imf_type') === 'MAINTENANCE_SCHEDULE'){ + //Add additional column to header after each DATE_INTERVAL + if($items->getProperty($imfNameIntern, 'imf_type') === 'DATE_INTERVAL'){ $columnAlign[] = 'left'; - $columnHeader2 = convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')) . ' ' . $gL10n->get('PLG_INVENTORY_MANAGER_MAINTENANCE_SCHEDULE_DAYS_REMAINING'); + $columnHeader2 = convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')) . ' ' . $gL10n->get('PLG_INVENTORY_MANAGER_DATE_INTERVAL_DAYS_REMAINING'); addColumnToHeader($getMode, $columnHeader2, $header, $arrValidColumns, $columnValues, $columnNumber); } } @@ -558,7 +558,7 @@ } $content = $items->getValue($imfNameIntern, 'database'); - $value = $content; // content gets overwritten in the next part of code but is still needed for MAINTENANCE_SCHEDULE stuff + $value = $content; // content gets overwritten in the next part of code but is still needed for DATE_INTERVAL stuff if ($imfNameIntern == 'KEEPER' && strlen($content) > 0) { $found = $user->readDataById($content); @@ -617,15 +617,15 @@ elseif ($items->getProperty($imfNameIntern, 'imf_type') == 'DATE') { $content = $items->getHtmlValue($imfNameIntern, $content); } - elseif (in_array($items->getProperty($imfNameIntern, 'imf_type'), array('DROPDOWN', 'RADIO_BUTTON', 'MAINTENANCE_SCHEDULE'))) { + elseif (in_array($items->getProperty($imfNameIntern, 'imf_type'), array('DROPDOWN', 'RADIO_BUTTON', 'DATE_INTERVAL'))) { $content = $items->getHtmlValue($imfNameIntern, $content); } $columnValues[] = ($strikethrough && $getMode != 'csv' && $getMode != 'ods' && $getMode != 'xlsx') ? '' . $content . '' : $content; $columnNumber++; - //Add additional column to header after each MAINTENANCE_SCHEDULE - if($items->getProperty($imfNameIntern, 'imf_type') === 'MAINTENANCE_SCHEDULE'){ + //Add additional column to header after each DATE_INTERVAL + if($items->getProperty($imfNameIntern, 'imf_type') === 'DATE_INTERVAL'){ $columnAlign[] = 'left'; //get #-line from dropdown diff --git a/items/items_edit_new.php b/items/items_edit_new.php index d8abad3..63bf106 100644 --- a/items/items_edit_new.php +++ b/items/items_edit_new.php @@ -262,7 +262,7 @@ function validateReceivedOnAndBackOn() { break; case 'DROPDOWN': - case'MAINTENANCE_SCHEDULE': + case'DATE_INTERVAL': $form->addSelectBox( 'imf-' . $items->getProperty($imfNameIntern, 'imf_id'), convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')), @@ -305,7 +305,7 @@ function validateReceivedOnAndBackOn() { ) ); break; - + default: $fieldType = 'text'; $maxlength = '50'; diff --git a/languages/de-DE.xml b/languages/de-DE.xml index 5c2c751..7b50d8c 100644 --- a/languages/de-DE.xml +++ b/languages/de-DE.xml @@ -105,9 +105,9 @@ Ausleih-Optionen deaktivieren Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. Allgemein - Prüfturnus - Tage Übrig - In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre + Prüfturnus + Tage Übrig + In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie Die Kategorie des Gegenstandes diff --git a/languages/de.xml b/languages/de.xml index 6ee88b9..f785570 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -105,9 +105,9 @@ Ausleih-Optionen deaktivieren Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. Allgemein - Prüfturnus - Tage Übrig - In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre + Prüfturnus + Tage Übrig + In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie Die Kategorie des Gegenstandes diff --git a/languages/en.xml b/languages/en.xml index db75f8e..2030f5b 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -76,9 +76,9 @@ Keeper You can reintegrate the item into the inventory management. This has the advantage that the data is preserved and you can later always see who has borrowed this item.\n\nIf you want to delete the item, please contact an administrator or the manager of the inventory management! You can reintegrate the item into the inventory management.\n\nIf you want to delete the item, please contact an administrator or the manager of the inventory management! - maintenance Schedule - Days Left - In this field, you can enter the entries for maintenance schedules. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe internal name of the date field the current schedules applies to must be specified with a # symbol. e.g. #LAST_CHECK \n\nThe cycle interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years + maintenance Schedule + Days Left + In this field, you can enter the entries for maintenance schedules. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe internal name of the date field the current schedules applies to must be specified with a # symbol. e.g. #LAST_CHECK \n\nThe cycle interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years The authorization check of the plugin failed. There is more than one menu item with the same URL defined.\n\n=> #VAR1_BOLD# InventoryManager The following items were imported by #VAR1_BOLD#: diff --git a/languages/fr.xml b/languages/fr.xml index 0c79f30..901b433 100644 --- a/languages/fr.xml +++ b/languages/fr.xml @@ -105,9 +105,9 @@ Désactiver les options d'emprunt Désactivez les champs et leurs fonctions qui représentent l'emprunt et le retour d'objets. Générale - Périodicité des contrôles - Jours restants - Dans ce champ, vous pouvez saisir les entrées pour les tournées de contrôle. Une entrée de la liste déroulante peut être saisie ici par ligne.\n\nPlus tard, ce n'est pas le texte qui sera enregistré dans l'inventaire, mais la position sélectionnée dans la liste. Si l'on modifie le texte d'une ligne, tous les utilisateurs voient immédiatement le nouveau texte. Si l'on déplace une entrée sur une autre ligne, les utilisateurs verront éventuellement une autre entrée.\n\n Le nom interne du champ de date auquel se réfère le tournus doit être indiqué avec un symbole #. p.ex. #DERNIER_PRUIT \n\n L'intervalle de tournus doit être écrit sur la même ligne après la désignation, séparé par le symbole |. p.ex. annuel | 1y \n\n Si aucune unité n'est indiquée, on part de jours. \nUnités possibles : d : jours, w : semaines, m : mois, y : années + Périodicité des contrôles + Jours restants + Dans ce champ, vous pouvez saisir les entrées pour les tournées de contrôle. Une entrée de la liste déroulante peut être saisie ici par ligne.\n\nPlus tard, ce n'est pas le texte qui sera enregistré dans l'inventaire, mais la position sélectionnée dans la liste. Si l'on modifie le texte d'une ligne, tous les utilisateurs voient immédiatement le nouveau texte. Si l'on déplace une entrée sur une autre ligne, les utilisateurs verront éventuellement une autre entrée.\n\n Le nom interne du champ de date auquel se réfère le tournus doit être indiqué avec un symbole #. p.ex. #DERNIER_PRUIT \n\n L'intervalle de tournus doit être écrit sur la même ligne après la désignation, séparé par le symbole |. p.ex. annuel | 1y \n\n Si aucune unité n'est indiquée, on part de jours. \nUnités possibles : d : jours, w : semaines, m : mois, y : années Catégorie La catégorie de l'objet From 39764bacc779e8779bcb936db1a1608448514908 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 6 Aug 2025 14:59:27 +0000 Subject: [PATCH 19/25] chore: sort en.xml alphabetically --- languages/en.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/languages/en.xml b/languages/en.xml index 2030f5b..fcfc03f 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -18,6 +18,9 @@ Settings for copying a item: created with the Plugin InventoryManager of the online member administration Admidio Date representation + maintenance Schedule + Days Left + In this field, you can enter the entries for maintenance schedules. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe internal name of the date field the current schedules applies to must be specified with a # symbol. e.g. #LAST_CHECK \n\nThe cycle interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years Decimal steps The specification of the decimal steps for fields of type "Decimal number". General @@ -76,9 +79,6 @@ Keeper You can reintegrate the item into the inventory management. This has the advantage that the data is preserved and you can later always see who has borrowed this item.\n\nIf you want to delete the item, please contact an administrator or the manager of the inventory management! You can reintegrate the item into the inventory management.\n\nIf you want to delete the item, please contact an administrator or the manager of the inventory management! - maintenance Schedule - Days Left - In this field, you can enter the entries for maintenance schedules. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe internal name of the date field the current schedules applies to must be specified with a # symbol. e.g. #LAST_CHECK \n\nThe cycle interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years The authorization check of the plugin failed. There is more than one menu item with the same URL defined.\n\n=> #VAR1_BOLD# InventoryManager The following items were imported by #VAR1_BOLD#: From 0604f327a0e715dd62ea40dba92d95dcd42190a2 Mon Sep 17 00:00:00 2001 From: Mathias Huth Date: Fri, 8 Aug 2025 23:54:10 +0200 Subject: [PATCH 20/25] feat: implement imf_date_interval_field to avoid #-reference in value_list --- classes/items.php | 13 ------------- fields/fields_edit_new.php | 8 ++++++++ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/classes/items.php b/classes/items.php index c455bc9..97022fd 100644 --- a/classes/items.php +++ b/classes/items.php @@ -186,19 +186,6 @@ protected function getListValue($fieldNameIntern, $value, $format): array $valueFormatted = str_replace("\r\n", "\n", $value); $arrListValues = explode("\n", $valueFormatted); - // remove lines starting with # from DATE_INTERVAL - // as they're used to select the name of the last inspection date field - // Also remove the | and anything that follows - if($this->mItemFields[$fieldNameIntern]->getValue('imf_type') == 'DATE_INTERVAL' && $format != 'unfiltered'){ - $cleanValue = array(); - foreach ($arrListValues as $line) { - if(substr($line,0,1) != '#'){ - array_push($cleanValue, explode('|', $line)[0]); - } - } - $arrListValues = $cleanValue; - } - foreach ($arrListValues as $item => &$listValue) { if ($this->mItemFields[$fieldNameIntern]->getValue('imf_type') === 'RADIO_BUTTON') { // if value is imagefile or imageurl then show image diff --git a/fields/fields_edit_new.php b/fields/fields_edit_new.php index c744c29..c3a9461 100644 --- a/fields/fields_edit_new.php +++ b/fields/fields_edit_new.php @@ -125,6 +125,14 @@ function setValueList() { ) ); +$sql = "SELECT imf_id, imf_name FROM " . TBL_INVENTORY_MANAGER_FIELDS . " WHERE imf_type = 'DATE'"; +$form->addSelectBoxFromSql('imf_date_interval_field', $gL10n->get('PLG_INVENTORY_MANAGER_DATE_INTERVAL_FIELD'), $gDb, $sql, array( + 'property' => HtmlForm::FIELD_REQUIRED, + 'defaultValue' => $itemField->getValue('imf_date_interval_field'), + 'helpTextIdLabel' => 'PLG_INVENTORY_MANAGER_DATE_INTERVAL_FIELD_DESC' + ) +); + $form->addMultilineTextInput('imf_value_list', $gL10n->get('ORG_VALUE_LIST'), (string)$itemField->getValue('imf_value_list', 'database'), 6, array( 'property' => HtmlForm::FIELD_REQUIRED, 'helpTextIdLabel' => 'ORG_VALUE_LIST_DESC' From 795e9fea0fd9dcda9886f9b8211ce42de5b6c75c Mon Sep 17 00:00:00 2001 From: Mathias Huth Date: Fri, 8 Aug 2025 23:54:22 +0200 Subject: [PATCH 21/25] feat: enhance DATE_INTERVAL handling in inventory manager --- inventory_manager.php | 155 ++++++++++++++++++------------------------ 1 file changed, 67 insertions(+), 88 deletions(-) diff --git a/inventory_manager.php b/inventory_manager.php index 3723d61..85eda48 100644 --- a/inventory_manager.php +++ b/inventory_manager.php @@ -470,7 +470,12 @@ $imfNameIntern = $itemField->getValue('imf_name_intern'); $columnHeader = convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')); - if ($disableBorrowing == 1 && ($imfNameIntern === 'LAST_RECEIVER' || $imfNameIntern === 'RECEIVED_ON' || $imfNameIntern === 'RECEIVED_BACK_ON')) { + if($items->getProperty($imfNameIntern, 'imf_type') === 'DATE_INTERVAL'){ + // modify column Header for DATE_INTERVAL fields + $columnHeader .= ' ' . $gL10n->get('PLG_INVENTORY_MANAGER_DATE_INTERVAL_DAYS_REMAINING'); + } + + if ($disableBorrowing == 1 && ($imfNameIntern === 'LAST_RECEIVER' || $imfNameIntern === 'RECEIVED_ON' || $imfNameIntern === 'RECEIVED_BACK_ON')) { break; } @@ -499,14 +504,24 @@ $header[$gL10n->get('SYS_ABR_NO')] = 'string'; } - addColumnToHeader($getMode, $columnHeader, $header, $arrValidColumns, $columnValues, $columnNumber); + switch ($getMode) { + case 'csv': + case "ods": + case 'xlsx': + $header[$columnHeader] = 'string'; + break; - //Add additional column to header after each DATE_INTERVAL - if($items->getProperty($imfNameIntern, 'imf_type') === 'DATE_INTERVAL'){ - $columnAlign[] = 'left'; - $columnHeader2 = convlanguagePIM($items->getProperty($imfNameIntern, 'imf_name')) . ' ' . $gL10n->get('PLG_INVENTORY_MANAGER_DATE_INTERVAL_DAYS_REMAINING'); - addColumnToHeader($getMode, $columnHeader2, $header, $arrValidColumns, $columnValues, $columnNumber); + case 'pdf': + $arrValidColumns[] = $columnHeader; + break; + + case 'html': + case 'print': + $columnValues[] = $columnHeader; + break; } + + $columnNumber++; } if ($getMode == 'html') { @@ -558,7 +573,6 @@ } $content = $items->getValue($imfNameIntern, 'database'); - $value = $content; // content gets overwritten in the next part of code but is still needed for DATE_INTERVAL stuff if ($imfNameIntern == 'KEEPER' && strlen($content) > 0) { $found = $user->readDataById($content); @@ -617,62 +631,58 @@ elseif ($items->getProperty($imfNameIntern, 'imf_type') == 'DATE') { $content = $items->getHtmlValue($imfNameIntern, $content); } - elseif (in_array($items->getProperty($imfNameIntern, 'imf_type'), array('DROPDOWN', 'RADIO_BUTTON', 'DATE_INTERVAL'))) { + elseif (in_array($items->getProperty($imfNameIntern, 'imf_type'), array('DROPDOWN', 'RADIO_BUTTON'))) { $content = $items->getHtmlValue($imfNameIntern, $content); } + elseif ($items->getProperty($imfNameIntern, 'imf_type') == 'DATE_INTERVAL') { + $selectedInterval = $content; + $content = ''; + + $intervalValues = $items->getProperty($imfNameIntern, 'imf_value_list'); + $dateIntervalFieldId = $items->getProperty($imfNameIntern, 'imf_date_interval_field', 'database'); + if (isset($items->mItemData[$dateIntervalFieldId])) { + $dateInternalFieldName = $items->mItemData[$dateIntervalFieldId]->getValue('imf_name_intern'); + $filteredSelectionItems = array(); + + foreach ($intervalValues as $value) { + $filteredSelectionItems[] = trim(explode('|', $value)[1]); + } + //use part after # as internal_name for last test date + $compDate1 = date_create($items->getValue($dateInternalFieldName, 'database')); + $compDate2 = date_create(); + + //Calculate future test date + $dateAdditionSplit = array(); + if (isset($filteredSelectionItems[$selectedInterval-1])) { + preg_match("/^\s*(\d*)([wymd])\s*$/", $filteredSelectionItems[$selectedInterval-1], $dateAdditionSplit); + } - $columnValues[] = ($strikethrough && $getMode != 'csv' && $getMode != 'ods' && $getMode != 'xlsx') ? '' . $content . '' : $content; - $columnNumber++; - - //Add additional column to header after each DATE_INTERVAL - if($items->getProperty($imfNameIntern, 'imf_type') === 'DATE_INTERVAL'){ - $columnAlign[] = 'left'; - - //get #-line from dropdown - $unfilteredSelectionItems = $items->getProperty($imfNameIntern, 'imf_value_list', 'unfiltered'); - $date_field_internal_name = null; - $filteredSelectionItems = array(); + if(isset($dateAdditionSplit[1]) && isset($dateAdditionSplit[2]) && is_numeric($dateAdditionSplit[1])){ + switch ($dateAdditionSplit[2]) { + case 'w': + date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'W')); + break; + case 'm': + date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'M')); + break; + case 'y': + date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'Y')); + break; + case 'd': + default: + date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'D')); + break; + } - foreach ($unfilteredSelectionItems as $line) { - if(substr($line,0,1) === '#'){ - $date_field_internal_name = substr($line,1); - }else{ - array_push($filteredSelectionItems, explode('|', $line)[1]); + //Compare last test date with future date and output days + $dateDiff = date_diff($compDate2, $compDate1); + $content = $dateDiff->format('%R%a'); } } - //use part after # as internal_name for last test date - $compDate1 = date_create($items->getValue($date_field_internal_name, 'database')); - $compDate2 = date_create(); - - //Calculate future test date - $dateAdditionSplit = array(); - preg_match("/^\s*(\d*)([wymd])\s*$/", $filteredSelectionItems[$value-1], $dateAdditionSplit); - - if(intval($dateAdditionSplit[1]) && $dateAdditionSplit[2]){ - switch ($dateAdditionSplit[2]) { - case 'w': - date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'W')); - break; - case 'm': - date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'M')); - break; - case 'y': - date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'Y')); - break; - case 'd': - default: - date_add($compDate1, new DateInterval('P' . $dateAdditionSplit[1] . 'D')); - break; - } - } - - //Compare last test date with future date and output days - $dateDiff = date_diff($compDate2, $compDate1); - $daysRemaining = $dateDiff->format('%R%a'); - - $columnValues[] = ($strikethrough && $getMode != 'csv' && $getMode != 'ods' && $getMode != 'xlsx') ? '' . $daysRemaining . '' : $daysRemaining; - $columnNumber++; } + + $columnValues[] = ($strikethrough && $getMode != 'csv' && $getMode != 'ods' && $getMode != 'xlsx') ? '' . $content . '' : $content; + $columnNumber++; } if ($getMode == 'html') { @@ -873,34 +883,3 @@ function formatSpreadsheet($spreadsheet, $data, $containsHeadline) : void } $spreadsheet->getDefaultStyle()->getAlignment()->setWrapText(true); } - -/** - * Adds a given string to a given header when generating the main overview-table - * - * @param string $getMode - * @param string $newHeaderText - * @param array $header - * @param array $arrValidColumns - * @param array $columnValues - * @param int $columnNumber - */ -function addColumnToHeader($getMode, $newHeaderText, &$header, &$arrValidColumns, &$columnValues, &$columnNumber){ - switch ($getMode) { - case 'csv': - case "ods": - case 'xlsx': - $header[$newHeaderText] = 'string'; - break; - - case 'pdf': - $arrValidColumns[] = $newHeaderText; - break; - - case 'html': - case 'print': - $columnValues[] = $newHeaderText; - break; - } - - $columnNumber++; -} \ No newline at end of file From 06d2f5879dd8314d68fbe9eace5456338d5e43f1 Mon Sep 17 00:00:00 2001 From: Mathias Huth Date: Fri, 8 Aug 2025 23:54:41 +0200 Subject: [PATCH 22/25] fix: translations --- languages/de-DE.xml | 8 +++++--- languages/de.xml | 8 +++++--- languages/en.xml | 8 +++++--- languages/fr.xml | 6 ++++-- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/languages/de-DE.xml b/languages/de-DE.xml index 7b50d8c..2693dc7 100644 --- a/languages/de-DE.xml +++ b/languages/de-DE.xml @@ -105,9 +105,11 @@ Ausleih-Optionen deaktivieren Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. Allgemein - Prüfturnus - Tage Übrig - In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre + Datumsintervall + Datumsintervall-Feld + Hier kann ein Datum-Eigenschaftsfeld ausgewählt werden, auf das sich das Datumsintervall bezieht. + Tage übrig + In diesem Feld können Sie die Einträge für Datumsintervalle eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Das Datumsintervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie Die Kategorie des Gegenstandes diff --git a/languages/de.xml b/languages/de.xml index f785570..3b165e2 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -105,9 +105,11 @@ Ausleih-Optionen deaktivieren Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. Allgemein - Prüfturnus - Tage Übrig - In diesem Feld können Sie die Einträge für Prüfturnusse eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Der interne Name des Datums-Feldes auf das sich der Turnus bezieht, muss mit einem #-Symbol angegeben werden. z.B. #LETZTE_PRUEFUNG \n\n Der Turnus-Intervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre + Datumsintervall + Datumsintervall-Feld + Hier kann ein Datum-Eigenschaftsfeld ausgewählt werden, auf das sich das Datumsintervall bezieht. + Tage übrig + In diesem Feld kannst du die Einträge für Datumsintervalle eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Das Datumsintervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie Die Kategorie des Gegenstandes diff --git a/languages/en.xml b/languages/en.xml index fcfc03f..ce36265 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -18,9 +18,11 @@ Settings for copying a item: created with the Plugin InventoryManager of the online member administration Admidio Date representation - maintenance Schedule - Days Left - In this field, you can enter the entries for maintenance schedules. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe internal name of the date field the current schedules applies to must be specified with a # symbol. e.g. #LAST_CHECK \n\nThe cycle interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years + Date interval + Date interval field + Here you can select a date item field to which the date interval refers. + Days left + In this field, you can enter the entries for date intervals. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe date interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years Decimal steps The specification of the decimal steps for fields of type "Decimal number". General diff --git a/languages/fr.xml b/languages/fr.xml index 901b433..5242aed 100644 --- a/languages/fr.xml +++ b/languages/fr.xml @@ -105,9 +105,11 @@ Désactiver les options d'emprunt Désactivez les champs et leurs fonctions qui représentent l'emprunt et le retour d'objets. Générale - Périodicité des contrôles + Intervalle de dates + Champ d'intervalle de dates + Ici, vous pouvez sélectionner un champ d'objet de type date auquel se réfère l'intervalle de dates. Jours restants - Dans ce champ, vous pouvez saisir les entrées pour les tournées de contrôle. Une entrée de la liste déroulante peut être saisie ici par ligne.\n\nPlus tard, ce n'est pas le texte qui sera enregistré dans l'inventaire, mais la position sélectionnée dans la liste. Si l'on modifie le texte d'une ligne, tous les utilisateurs voient immédiatement le nouveau texte. Si l'on déplace une entrée sur une autre ligne, les utilisateurs verront éventuellement une autre entrée.\n\n Le nom interne du champ de date auquel se réfère le tournus doit être indiqué avec un symbole #. p.ex. #DERNIER_PRUIT \n\n L'intervalle de tournus doit être écrit sur la même ligne après la désignation, séparé par le symbole |. p.ex. annuel | 1y \n\n Si aucune unité n'est indiquée, on part de jours. \nUnités possibles : d : jours, w : semaines, m : mois, y : années + Dans ce champ, vous pouvez saisir les entrées pour les intervalles de dates. Pour chaque ligne, une entrée de la liste déroulante peut être saisie ici. \n\nL'élément de liste n'est pas enregistré ultérieurement en tant que texte, mais la position sélectionnée dans la liste. Si vous modifiez le texte d'une ligne, tous les utilisateurs verront immédiatement le nouveau texte. Cependant, si vous déplacez une entrée vers une autre ligne, les utilisateurs pourraient voir une entrée différente.\n\nL'intervalle de date doit être écrit sur la même ligne, séparé par le symbole | après le titre. Par exemple : Annuel | 1a \n\nSi aucune unité n'est spécifiée, des jours sont supposés. \nUnités possibles : d : jours, w : semaines, m : mois, y : années Catégorie La catégorie de l'objet From a90236f343ed5950720b39133753913cdc1d2fe6 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 8 Aug 2025 21:54:57 +0000 Subject: [PATCH 23/25] chore: sort en.xml alphabetically --- languages/en.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/languages/en.xml b/languages/en.xml index ce36265..ca0d470 100644 --- a/languages/en.xml +++ b/languages/en.xml @@ -19,10 +19,10 @@ created with the Plugin InventoryManager of the online member administration Admidio Date representation Date interval - Date interval field - Here you can select a date item field to which the date interval refers. Days left In this field, you can enter the entries for date intervals. For each line, an entry of the drop-down list field can be entered here. \n\nThe List-Item is not stored as text later, but the selected position from the list. If you change the text in a line, all users will immediately see the new text. However, if you move an entry into another line, users may see a different entry.\n\nThe date interval must be written in the same line separated by the |-symbol after the title. e.g. Yearly | 1y \n\nIf no unit is specified, days are assumed. \nPossible units: d: days, w: weeks, m: months, y: years + Date interval field + Here you can select a date item field to which the date interval refers. Decimal steps The specification of the decimal steps for fields of type "Decimal number". General From f2c71716b94dd70d92e6eb6f677d142b08bf4b97 Mon Sep 17 00:00:00 2001 From: Mathias Huth Date: Sat, 9 Aug 2025 00:05:29 +0200 Subject: [PATCH 24/25] chore: sort language files alphabetically --- languages/de-DE.xml | 68 ++++++++++++++++++++++----------------------- languages/de.xml | 68 ++++++++++++++++++++++----------------------- languages/fr.xml | 68 ++++++++++++++++++++++----------------------- 3 files changed, 102 insertions(+), 102 deletions(-) diff --git a/languages/de-DE.xml b/languages/de-DE.xml index 2693dc7..f112d3d 100644 --- a/languages/de-DE.xml +++ b/languages/de-DE.xml @@ -1,15 +1,15 @@ - + - Zugriffsberechtigung für Plugin-Einstellungen - Hier können Sie, zusätzlich zur Rolle "Administrator", weitere Rollen für den Zugriff auf auf die Plugin-Einstellungen berechtigen. Editierberechtigung für den Verwalter Hier können Sie die Bearbeitung von spezifischen Eigenschaftsfelden eines Gegenstandes durch den Verwalter zulassen. editierbare Felder durch den Verwalter Hier können Sie die spezifischen Eigenschaftsfelder festlegen, die durch den Verwalter des Gegenstandes editiert werden dürfen. - Datum anfügen - Soll an eine Exportdatei ein Datum im Format JJJJ-MM-TT angefügt werden, so ist der Haken zu setzen. + Zugriffsberechtigung für Plugin-Einstellungen + Hier können Sie, zusätzlich zur Rolle "Administrator", weitere Rollen für den Zugriff auf auf die Plugin-Einstellungen berechtigen. Die Tabelle zeigt die von Ihnen verwalteten Gegenstände: Die Tabelle zeigt die an Sie ausgeliehenen Gegenstände: + Datum anfügen + Soll an eine Exportdatei ein Datum im Format JJJJ-MM-TT angefügt werden, so ist der Haken zu setzen. Negative Zahlen erlauben Soll es möglich sein, negative Zahlen für Felder des Types "Zahl" oder "Dezimalzahl" einzugeben, so ist der Haken zu setzen. (basierend auf #VAR1#) @@ -18,8 +18,17 @@ Einstellungen für das Kopieren eines Gegenstandes: erstellt mit dem Plugin InventoryManager der Online-Mitgliederverwaltung Admidio Datumsdarstellung + Datumsintervall + Tage übrig + In diesem Feld können Sie die Einträge für Datumsintervalle eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Das Datumsintervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre + Datumsintervall-Feld + Hier kann ein Datum-Eigenschaftsfeld ausgewählt werden, auf das sich das Datumsintervall bezieht. Dezimalschritte Die Angabe der Dezimalschritte für Felder des Typs "Dezimalzahl". + Allgemein + Deinstallation + Über die Deinstallation können vom Plugin erzeugte Einträge in der Datenbank gelöscht werden. + Wählen Sie den Deinstallationsumfang aus.\n\n***ACHTUNG: Diese Routine löscht nur Einträge in der Admidio-Datenbank. Programmdateien und der Link im Menü werden nicht gelöscht! *** Nur Daten der aktuellen Organisation löschen. Daten in allen Organisationen löschen. - Die Tabelle #VAR1_BOLD# konnte nicht gelöscht werden, da sich darin noch Daten einer weiteren Organisation oder eines anderen Plugins befinden.\n @@ -27,12 +36,11 @@ - Beim Löschen der Daten in Tabelle #VAR1_BOLD# ist ein Fehler aufgetreten.\n \nUm das Plugin vollständig zu entfernen, müssen Sie noch die Programmdateien und den Menü-Eintrag löschen. Folgende Löschvorgänge wurden durchgeführt:\n\n + - Tabelle #VAR1_BOLD# gelöscht.\n - Beim Löschen der Tabelle #VAR1_BOLD# ist ein Fehler aufgetreten.\n - Die Tabelle #VAR1_BOLD# konnte nicht gelöscht werden, da sich darin noch Daten einer weiteren Organisation befinden.\n - - Tabelle #VAR1_BOLD# gelöscht.\n - Deinstallation - Über die Deinstallation können vom Plugin erzeugte Einträge in der Datenbank gelöscht werden. - Wählen Sie den Deinstallationsumfang aus.\n\n***ACHTUNG: Diese Routine löscht nur Einträge in der Admidio-Datenbank. Programmdateien und der Link im Menü werden nicht gelöscht! *** + Ausleih-Optionen deaktivieren + Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. Dokumentation Dokumentation öffnen Hiermit können Sie die Dokumentation zum Plugin öffnen (Eine bestehende Internetverbindung wird vorausgesetzt, da sich die Daten auf GitHub befinden). @@ -46,46 +54,46 @@ Sie können den Gegenstand als ausgesondert markieren. Dies hat den Vorteil, dass die Daten erhalten bleiben und Sie später immer wieder sehen können, wer diesen Gegenstand ausgeliehen hat.\n\nWenn Sie Löschen auswählen, wird der Datensatz unwiderruflich aus der Datenbank entfernt und es ist später nicht mehr möglich Daten dieses Gegenstandes einzusehen. Allgemeiner Filter - Mehrere Filterbegriffe sind durch Kommas zu trennen. Um Wörter auszuschließen muss ein - davorgesetzt werden. Beispiel: Meier, Huber, -Notenschrank Import - Hier können Sie Gegenstände aus einer vorherigen Exportdatei oder einer eigenen Datei importieren. In der linken Spalte der nachfolgenden Tabelle werden alle Eigenschaftsfelder angezeigt. In der rechten Spalte werden in einer Auswahlliste die Spalten aus der zu importierenden Datei angezeigt. Alle Spalten aus der Datei, die Sie importieren möchten, sollten Sie nun einem Eigenschaftsfeld zuordnen. + Hier können Sie Gegenstände aus einer vorherigen Exportdatei oder einer eigenen Datei importieren. Folgenden Spalten der Importdatei sind keine Felder im InventoryManager zugeordnet: Inventarverwaltung Gegenstand + Eigenschaftsfeld + Eigenschaftsfelder + Felder pflegen + In der Felderpflege können Sie Eigenschaftsfelder für Gegenstände anlegen und bearbeiten. + Eigenschaftsfeld erzeugen + Eigenschaftsfeld löschen + Eigenschaftsfeld gelöscht + Soll dieses Eigenschaftsfeld und die dazugehörigen Gegenstandsdaten gelöscht werden? + Eigenschaftsfeld ändern + Gegenstandsliste Gegenstand kopieren Neuen Gegenstand anlegen Gegenstand löschen - Soll dieser Gegenstand gelöscht werden? Gegenstand gelöscht + Soll dieser Gegenstand gelöscht werden? Gegenstand ändern Gegenstand ausgesondert Aussonderung des Gegenstandes rückgängig gemacht Sie könnent den Gegenstand wieder in die Inventarverwaltung aufnehmen.\n\nWenn Sie Löschen auswählen, wird der Datensatz unwiderruflich aus der Datenbank entfernt und es ist später nicht mehr möglich Daten dieses Gegenstandes einzusehen. - Eigenschaftsfeld - Eigenschaftsfeld erzeugen - Eigenschaftsfeld löschen - Soll dieses Eigenschaftsfeld und die dazugehörigen Gegenstandsdaten gelöscht werden? - Eigenschaftsfeld gelöscht - Eigenschaftsfeld ändern - Eigenschaftsfelder - Felder pflegen - In der Felderpflege können Sie Eigenschaftsfelder für Gegenstände anlegen und bearbeiten. - Gegenstandsliste Verwalter Sie können den Gegenstand als ausgesondert markieren. Dies hat den Vorteil, dass die Daten erhalten bleiben und Sie später immer wieder sehen können, wer diesen Gegenstand ausgeliehen hat.\n\nWenn Sie den Gegenstand löschen möchten, wenden Sie sich an einen Administrator oder den Verwalter der Inventarverwaltung! Sie können den Gegenstand wieder in die Inventarverwaltung aufnehmen.\n\nWenn Sie den Gegenstand löschen möchten, wenden Sie sich an einen Administrator oder den Verwalter der Inventarverwaltung! - Die Authorisierungsprüfung des Plugins ist fehlgeschlagen. Es ist mehr als ein Menüpunkt mit derselben URL definiert.\n\n=> #VAR1_BOLD# + Die Authorisierungsprüfung des Plugins ist fehlgeschlagen. Es ist mehr als ein Menüpunkt mit derselben URL definiert.\n\n=> #VAR1_BOLD# InventoryManager - In der Importdatei waren keine neuen Daten vorhanden! + Folgende Gegenstände wurden von #VAR1_BOLD# importiert: 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: Ein Gegenstand im Inventar wurde ausgesondert: - Folgende Gegenstände wurden von #VAR1_BOLD# importiert: + Im Inventar wurden Gegenstände importiert Ein Gegenstand im Inventar wurde geändert Ein Gegenstand im Inventar wurde hinzugefügt Ein Gegenstand im Inventar wurde gelöscht Ein Gegenstand im Inventar wurde ausgesondert - Im Inventar wurden Gegenstände importiert + In der Importdatei waren keine neuen Daten vorhanden! Anzahl Anzahl der anzufügenden Gegenstände Organisationswahl @@ -102,14 +110,6 @@ aktueller Benutzer als Standardauswahl Soll der aktuelle Benutzer beim Hinzufügen neuer Gegenstände standardmäßig als Verwalter voreingestellt werden, so ist der Haken zu setzen. Sie benutzten eine aktuelle #VAR1#Version von InventoryManager! - Ausleih-Optionen deaktivieren - Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. - Allgemein - Datumsintervall - Datumsintervall-Feld - Hier kann ein Datum-Eigenschaftsfeld ausgewählt werden, auf das sich das Datumsintervall bezieht. - Tage übrig - In diesem Feld können Sie die Einträge für Datumsintervalle eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Das Datumsintervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie Die Kategorie des Gegenstandes @@ -125,4 +125,4 @@ Das Datum, an dem der Gegenstand an den Verwalter zurückgegeben wurde verliehen am Das Verleihdatum des Gegenstandes an den letzten Empfänger - \ No newline at end of file + diff --git a/languages/de.xml b/languages/de.xml index 3b165e2..c334799 100644 --- a/languages/de.xml +++ b/languages/de.xml @@ -1,15 +1,15 @@ - + - Zugriffsberechtigung für Plugin-Einstellungen - Hier kannst du, zusätzlich zur Rolle "Administrator", weitere Rollen für den Zugriff auf die Plugin-Einstellungen berechtigen. Editierberechtigung für den Verwalter Hier kannst du die Bearbeitung von spezifischen Eigenschaftsfelden eines Gegenstandes durch den Verwalter zulassen. editierbare Felder durch den Verwalter Hier kannst du die spezifischen Eigenschaftsfelder festlegen, die durch den Verwalter des Gegenstandes editiert werden dürfen. - Datum anfügen - Soll an eine Exportdatei ein Datum im Format JJJJ-MM-TT angefügt werden, so ist der Haken zu setzen. + Zugriffsberechtigung für Plugin-Einstellungen + Hier kannst du, zusätzlich zur Rolle "Administrator", weitere Rollen für den Zugriff auf die Plugin-Einstellungen berechtigen. Die Tabelle zeigt die von dir verwalteten Gegenstände: Die Tabelle zeigt die an dich ausgeliehenen Gegenstände: + Datum anfügen + Soll an eine Exportdatei ein Datum im Format JJJJ-MM-TT angefügt werden, so ist der Haken zu setzen. Negative Zahlen erlauben Soll es möglich sein, negative Zahlen für Felder des Types "Zahl" oder "Dezimalzahl" einzugeben, so ist der Haken zu setzen. (basierend auf #VAR1#) @@ -18,8 +18,17 @@ Einstellungen für das Kopieren eines Gegenstandes: erstellt mit dem Plugin InventoryManager der Online-Mitgliederverwaltung Admidio Datumsdarstellung + Datumsintervall + Tage übrig + In diesem Feld kannst du die Einträge für Datumsintervalle eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Das Datumsintervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre + Datumsintervall-Feld + Hier kann ein Datum-Eigenschaftsfeld ausgewählt werden, auf das sich das Datumsintervall bezieht. Dezimalschritte Die Angabe der Dezimalschritte für Felder des Typs "Dezimalzahl". + Allgemein + Deinstallation + Über die Deinstallation können vom Plugin erzeugte Einträge in der Datenbank gelöscht werden. + Wähle den Deinstallationsumfang aus.\n\n***ACHTUNG: Diese Routine löscht nur Einträge in der Admidio-Datenbank. Programmdateien und der Link im Menü werden nicht gelöscht! *** Nur Daten der aktuellen Organisation löschen. Daten in allen Organisationen löschen. - Die Tabelle #VAR1_BOLD# konnte nicht gelöscht werden, da sich darin noch Daten einer weiteren Organisation oder eines anderen Plugins befinden.\n @@ -27,12 +36,11 @@ - Beim Löschen der Daten in Tabelle #VAR1_BOLD# ist ein Fehler aufgetreten.\n \nUm das Plugin vollständig zu entfernen, musst du noch die Programmdateien und den Menü-Eintrag löschen. Folgende Löschvorgänge wurden durchgeführt:\n\n + - Tabelle #VAR1_BOLD# gelöscht.\n - Beim Löschen der Tabelle #VAR1_BOLD# ist ein Fehler aufgetreten.\n - Die Tabelle #VAR1_BOLD# konnte nicht gelöscht werden, da sich darin noch Daten einer weiteren Organisation befinden.\n - - Tabelle #VAR1_BOLD# gelöscht.\n - Deinstallation - Über die Deinstallation können vom Plugin erzeugte Einträge in der Datenbank gelöscht werden. - Wähle den Deinstallationsumfang aus.\n\n***ACHTUNG: Diese Routine löscht nur Einträge in der Admidio-Datenbank. Programmdateien und der Link im Menü werden nicht gelöscht! *** + Ausleih-Optionen deaktivieren + Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. Dokumentation Dokumentation öffnen Hiermit kannst du die Dokumentation zum Plugin öffnen (Eine bestehende Internetverbindung wird vorausgesetzt, da sich die Daten auf GitHub befinden). @@ -46,46 +54,46 @@ Du kannst den Gegenstand als ausgesondert markieren. Dies hat den Vorteil, dass die Daten erhalten bleiben und du später immer wieder sehen kannst, wer diesen Gegenstand ausgeliehen hat.\n\nWenn du Löschen auswählst, wird der Datensatz unwiderruflich aus der Datenbank entfernt und es ist später nicht mehr möglich Daten dieses Gegenstandes einzusehen. Allgemeiner Filter - Mehrere Filterbegriffe sind durch Kommas zu trennen. Um Wörter auszuschließen muss ein - davorgesetzt werden. Beispiel: Meier, Huber, -Notenschrank Import - Hier kannst du Gegenstände aus einer vorherigen Exportdatei oder einer eigenen Datei importieren. In der linken Spalte der nachfolgenden Tabelle werden alle Eigenschaftsfelder angezeigt. In der rechten Spalte werden in einer Auswahlliste die Spalten aus der zu importierenden Datei angezeigt. Alle Spalten aus der Datei, die du importieren möchtest, solltest du nun einem Eigenschaftsfeld zuordnen. + Hier kannst du Gegenstände aus einer vorherigen Exportdatei oder einer eigenen Datei importieren. Folgenden Spalten der Importdatei sind keine Felder im InventoryManager zugeordnet: Inventarverwaltung Gegenstand + Eigenschaftsfeld + Eigenschaftsfelder + Felder pflegen + In der Felderpflege kannst du Eigenschaftsfelder für Gegenstände anlegen und bearbeiten. + Eigenschaftsfeld erzeugen + Eigenschaftsfeld löschen + Eigenschaftsfeld gelöscht + Soll dieses Eigenschaftsfeld und die dazugehörigen Gegenstandsdaten gelöscht werden? + Eigenschaftsfeld ändern + Gegenstandsliste Gegenstand kopieren Neuen Gegenstand anlegen Gegenstand löschen - Soll dieser Gegenstand gelöscht werden? Gegenstand gelöscht + Soll dieser Gegenstand gelöscht werden? Gegenstand ändern Gegenstand ausgesondert Aussonderung des Gegenstandes rückgängig gemacht Du kannst den Gegenstand wieder in die Inventarverwaltung aufnehmen.\n\nWenn du Löschen auswählst, wird der Datensatz unwiderruflich aus der Datenbank entfernt und es ist später nicht mehr möglich Daten dieses Gegenstandes einzusehen. - Eigenschaftsfeld - Eigenschaftsfeld erzeugen - Eigenschaftsfeld löschen - Soll dieses Eigenschaftsfeld und die dazugehörigen Gegenstandsdaten gelöscht werden? - Eigenschaftsfeld gelöscht - Eigenschaftsfeld ändern - Eigenschaftsfelder - Felder pflegen - In der Felderpflege kannst du Eigenschaftsfelder für Gegenstände anlegen und bearbeiten. - Gegenstandsliste Verwalter Du kannst den Gegenstand als ausgesondert markieren. Dies hat den Vorteil, dass die Daten erhalten bleiben und du später immer wieder sehen kannst, wer diesen Gegenstand ausgeliehen hat.\n\nWenn du den Gegenstand löschen möchtest, wende dich an einen Administrator oder den Verwalter der Inventarverwaltung! Du kannst den Gegenstand wieder in die Inventarverwaltung aufnehmen.\n\nWenn du den Gegenstand löschen möchtest, wende dich an einen Administrator oder den Verwalter der Inventarverwaltung! - Die Authorisierungsprüfung des Plugins ist fehlgeschlagen. Es ist mehr als ein Menüpunkt mit derselben URL definiert.\n\n=> #VAR1_BOLD# + Die Authorisierungsprüfung des Plugins ist fehlgeschlagen. Es ist mehr als ein Menüpunkt mit derselben URL definiert.\n\n=> #VAR1_BOLD# InventoryManager - In der Importdatei waren keine neuen Daten vorhanden! + Folgende Gegenstände wurden von #VAR1_BOLD# importiert: 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: Ein Gegenstand im Inventar wurde ausgesondert: - Folgende Gegenstände wurden von #VAR1_BOLD# importiert: + Im Inventar wurden Gegenstände importiert Ein Gegenstand im Inventar wurde geändert Ein Gegenstand im Inventar wurde hinzugefügt Ein Gegenstand im Inventar wurde gelöscht Ein Gegenstand im Inventar wurde ausgesondert - Im Inventar wurden Gegenstände importiert + In der Importdatei waren keine neuen Daten vorhanden! Anzahl Anzahl der anzufügenden Gegenstände Organisationswahl @@ -102,14 +110,6 @@ aktueller Benutzer als Standardauswahl Soll der aktuelle Benutzer beim Hinzufügen neuer Gegenstände standardmäßig als Verwalter voreingestellt werden, so ist der Haken zu setzen. Du benutzt eine aktuelle #VAR1#Version von InventoryManager! - Ausleih-Optionen deaktivieren - Deaktiviere die Felder und deren Funktionen, die das Ausleihen und Zurückgeben von Gegenständen abbilden. - Allgemein - Datumsintervall - Datumsintervall-Feld - Hier kann ein Datum-Eigenschaftsfeld ausgewählt werden, auf das sich das Datumsintervall bezieht. - Tage übrig - In diesem Feld kannst du die Einträge für Datumsintervalle eingeben. Pro Zeile kann hier ein Eintrag des Dropdown-Listenfeldes erfasst werden.\n\n Im Inventar wird später nicht der Text gespeichert, sondern die ausgewählte Position aus der Liste. Ändert man somit den Text in einer Zeile, so sehen alle Benutzer:innen sofort den neuen Text. Verschiebt man allerdings einen Eintrag in eine andere Zeile, so wird bei den Benutzerinnen bzw. Benutzern evtl. ein anderer Eintrag angezeigt.\n\n Das Datumsintervall muss durch das |-Symbol getrennt hinter die Bezeichnung in die selbe Zeile geschrieben werden. z.B. Jährlich | 1y \n\n Wenn keine Einheit angegeben wird, wird von Tagen ausgegangen. \nMögliche einheiten: d: Tage, w: Wochen, m: Monate, y: Jahre Kategorie Die Kategorie des Gegenstandes @@ -125,4 +125,4 @@ Das Datum, an dem der Gegenstand an den Verwalter zurückgegeben wurde verliehen am Das Verleihdatum des Gegenstandes an den letzten Empfänger - \ No newline at end of file + diff --git a/languages/fr.xml b/languages/fr.xml index 5242aed..338f35e 100644 --- a/languages/fr.xml +++ b/languages/fr.xml @@ -1,15 +1,15 @@ - + - Autorisation d'accès pour les plug-in paramétrages - Ici, en plus du rôle "Administrateur", vous pouvez autoriser d'autres rôles pour accéder aux préférences du plugin. Autorisation de modification pour le propriétaire Ici, vous pouvez autoriser la modification de champs de propriétés spécifiques d'un objet par le propriétaire. Champs modifiables par le propriétaire Ici, vous pouvez définir les champs de propriétés spécifiques qui peuvent être modifiés par le propriétaire de l'objet. - Ajouter la date - Si une date au format AAAA-MM-JJ doit être ajoutée à un fichier d'exportation, la coche doit être cochée. + Autorisation d'accès pour les plug-in paramétrages + Ici, en plus du rôle "Administrateur", vous pouvez autoriser d'autres rôles pour accéder aux préférences du plugin. Le tableau montre les objets que vous gérez: Le tableau montre les objets qui vous ont été prêtés: + Ajouter la date + Si une date au format AAAA-MM-JJ doit être ajoutée à un fichier d'exportation, la coche doit être cochée. Autoriser les nombres négatifs Si vous souhaitez autoriser les nombres négatifs pour les champs de type "Nombre" ou "Décimale", cochez cette case. (basé sur #VAR1#) @@ -18,8 +18,17 @@ Paramètres de copie d'une objet: créé avec le Plugin InventoryManager de l'administration des membres en ligne Admidio Représentation de la date + Intervalle de dates + Jours restants + Dans ce champ, vous pouvez saisir les entrées pour les intervalles de dates. Pour chaque ligne, une entrée de la liste déroulante peut être saisie ici. \n\nL'élément de liste n'est pas enregistré ultérieurement en tant que texte, mais la position sélectionnée dans la liste. Si vous modifiez le texte d'une ligne, tous les utilisateurs verront immédiatement le nouveau texte. Cependant, si vous déplacez une entrée vers une autre ligne, les utilisateurs pourraient voir une entrée différente.\n\nL'intervalle de date doit être écrit sur la même ligne, séparé par le symbole | après le titre. Par exemple : Annuel | 1a \n\nSi aucune unité n'est spécifiée, des jours sont supposés. \nUnités possibles : d : jours, w : semaines, m : mois, y : années + Champ d'intervalle de dates + Ici, vous pouvez sélectionner un champ d'objet de type date auquel se réfère l'intervalle de dates. Pas décimal La spécification des pas décimaux pour les champs de type "Décimale". + Générale + Désinstallation + En désinstallant le plug-in, les entrées créées par le plugin peuvent être supprimées de la base de données. + Sélectionne l\'étendue de l\'installation.\n\n***ATTENTION: Cette routine ne supprime que les entrées de la base de données Admidio. Les fichiers de programme et le lien dans le menu ne sont pas effacés ! *** Supprimer uniquement les données de l\'organisation actuelle. Supprimer les données de toutes les organisations. - La table #VAR1_BOLD# n\'a pas pu être supprimé parce qu\'il contient encore des données d\'une autre organisation ou d\'un autre plugin. \n @@ -27,12 +36,11 @@ - Une erreur s\'est produite lors de la suppression des données de la table #VAR1_BOLD#.\n \nPour supprimer complètement le plugin, les fichiers du programme et l\'entrée de menu doivent encore être supprimés. Les suppressions suivantes ont été effectuées:\n\n + - La table #VAR1_BOLD# supprimée.\n - Une erreur s\'est produite lors de la suppression de la table #VAR1_BOLD#.\n - La table #VAR1_BOLD# n\'a pas pu être supprimée parce qu\'elle contient encore des données d\'une autre organisation.\n - - La table #VAR1_BOLD# supprimée.\n - Désinstallation - En désinstallant le plug-in, les entrées créées par le plugin peuvent être supprimées de la base de données. - Sélectionne l\'étendue de l\'installation.\n\n***ATTENTION: Cette routine ne supprime que les entrées de la base de données Admidio. Les fichiers de programme et le lien dans le menu ne sont pas effacés ! *** + Désactiver les options d'emprunt + Désactivez les champs et leurs fonctions qui représentent l'emprunt et le retour d'objets. Documentation Ouvrir la documentation Cela ouvre la documentation pour le plugin (une connexion Internet existante est nécessaire, car les données se trouvent sur admidio.org). @@ -46,46 +54,46 @@ Vous pouvez marquer l'objet comme retiré. Cela a l'avantage de conserver les données et vous pouvez toujours voir plus tard qui a emprunté cet objet.\n\nSi vous sélectionnez Supprimer, l'enregistrement sera définitivement supprimé de la base de données et il ne sera plus possible de consulter les données de cet objet ultérieurement. Filtre général - Plusieurs termes de filtre doivent être séparés par des virgules. Pour exclure des mots, un - doit être placé devant eux. Exemple : Meier, Huber, -Porte-objets Importer - Ici, vous pouvez importer des objets à partir d'un fichier d'exportation précédent ou d'un fichier personnalisé. Dans la colonne de gauche du tableau suivant, tous les champs de propriétés sont affichés. Dans la colonne de droite, les colonnes du fichier à importer sont affichées dans une liste déroulante. Toutes les colonnes du fichier que vous souhaitez importer doivent maintenant être associées à un champ de propriété. + Ici, vous pouvez importer des objets à partir d'un fichier d'exportation précédent ou d'un fichier personnalisé. Les colonnes suivantes du fichier d'importation ne sont associées à aucun champ dans InventoryManager : InventoryManager Objet + Champ objet + Champ objets + Gérer les champs objets + Les champs objets peuvent être créées et traitées dans la gestion des champs objets. + Générer le champ objet + Supprimer le champ objet + Champ objet supprimé + Ce champ objet et les données objets correspondantes doivent-elles être supprimées ? + Modifier le champ objet + Liste des objets Copier l'objet Générer l'objet Supprimer l'objet - Cette objet doit-elle être effacée ? Objet effacée + Cette objet doit-elle être effacée ? Modifier l'objet Objet retirée Annuler le retrait de l'objet Vous pouvez réintégrer l'objet dans la gestion de l'inventaire.\n\nSi vous sélectionnez Supprimer, l'enregistrement sera définitivement supprimé de la base de données et il ne sera plus possible de consulter les données de cet objet ultérieurement. - Champ objet - Générer le champ objet - Supprimer le champ objet - Ce champ objet et les données objets correspondantes doivent-elles être supprimées ? - Champ objet supprimé - Modifier le champ objet - Champ objets - Gérer les champs objets - Les champs objets peuvent être créées et traitées dans la gestion des champs objets. - Liste des objets Propriétaire Vous pouvez marquer l'objet comme retiré. Cela a l'avantage de conserver les données et vous pouvez toujours voir plus tard qui a emprunté cet objet.\n\nSi vous souhaitez supprimer l'objet, veuillez contacter un administrateur ou le gestionnaire de l'inventaire! Vous pouvez réintégrer l'objet dans la gestion de l'inventaire.\n\nSi vous souhaitez supprimer l'objet, veuillez contacter un administrateur ou le gestionnaire de l'inventaire! - 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# + 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 - Aucune nouvelle donnée n'était présente dans le fichier d'importation! + Les objets suivants ont été importés par #VAR1_BOLD#: 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é: Un objet dans l'inventaire a été retiré: - Les objets suivants ont été importés par #VAR1_BOLD#: + Des objets ont été importés dans l'inventaire Un objet dans l'inventaire a été modifié Un objet a été ajouté à l'inventaire Un objet dans l'inventaire a été supprimé Un objet dans l'inventaire a été retiré - Des objets ont été importés dans l'inventaire + Aucune nouvelle donnée n'était présente dans le fichier d'importation! Nombre Nombre de objets à ajouter Choix de l\'organisation @@ -102,14 +110,6 @@ Utilisateur actuel comme sélection par défaut Si l'utilisateur actuel doit être défini par défaut comme gestionnaire lors de l'ajout de nouveaux objets, cochez cette case. Vous utilisez une #VAR1#version actuelle d'InventoryManager! - Désactiver les options d'emprunt - Désactivez les champs et leurs fonctions qui représentent l'emprunt et le retour d'objets. - Générale - Intervalle de dates - Champ d'intervalle de dates - Ici, vous pouvez sélectionner un champ d'objet de type date auquel se réfère l'intervalle de dates. - Jours restants - Dans ce champ, vous pouvez saisir les entrées pour les intervalles de dates. Pour chaque ligne, une entrée de la liste déroulante peut être saisie ici. \n\nL'élément de liste n'est pas enregistré ultérieurement en tant que texte, mais la position sélectionnée dans la liste. Si vous modifiez le texte d'une ligne, tous les utilisateurs verront immédiatement le nouveau texte. Cependant, si vous déplacez une entrée vers une autre ligne, les utilisateurs pourraient voir une entrée différente.\n\nL'intervalle de date doit être écrit sur la même ligne, séparé par le symbole | après le titre. Par exemple : Annuel | 1a \n\nSi aucune unité n'est spécifiée, des jours sont supposés. \nUnités possibles : d : jours, w : semaines, m : mois, y : années Catégorie La catégorie de l'objet @@ -125,4 +125,4 @@ La date à laquelle l'objet a été retourné au gestionnaire prêté le La date de prêt de l'objet au dernier destinataire - \ No newline at end of file + From 52d1fb5a3024e365e960aa824b0b809a256f636e Mon Sep 17 00:00:00 2001 From: Mathias Huth Date: Sat, 9 Aug 2025 00:13:57 +0200 Subject: [PATCH 25/25] feat: implement hide/show JS for imf_date_interval_field selection --- fields/fields_edit_new.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fields/fields_edit_new.php b/fields/fields_edit_new.php index c3a9461..c1a5516 100644 --- a/fields/fields_edit_new.php +++ b/fields/fields_edit_new.php @@ -70,9 +70,15 @@ function setValueList() { if ($("#imf_type").val() === "DROPDOWN" || $("#imf_type").val() === "RADIO_BUTTON" || $("#imf_type").val() === "DATE_INTERVAL") { $("#imf_value_list_group").show("slow"); $("#imf_value_list").attr("required", "required"); + if ($("#imf_type").val() === "DATE_INTERVAL") { + $("#imf_date_interval_field_group").show("slow"); + $("#imf_date_interval_field").attr("required", "required"); + } } else { $("#imf_value_list").removeAttr("required"); $("#imf_value_list_group").hide(); + $("#imf_date_interval_field").removeAttr("required"); + $("#imf_date_interval_field_group").hide(); } var valueListTooltipContainer = document.getElementById("imf_value_list_group").getElementsByTagName("label")[0].getElementsByTagName("i")[0];