From fd74edbe16b4c60ed5cfd607230f43de47885005 Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Tue, 4 Aug 2026 08:53:55 +0200 Subject: [PATCH 1/7] Add old tempus stundenplan title as tag for new tempus kalendar event --- .../controllers/system/MigrateKalender.php | 265 ++++++++++++++++++ 1 file changed, 265 insertions(+) diff --git a/application/controllers/system/MigrateKalender.php b/application/controllers/system/MigrateKalender.php index 49e895dbc..abc701a3a 100644 --- a/application/controllers/system/MigrateKalender.php +++ b/application/controllers/system/MigrateKalender.php @@ -32,6 +32,36 @@ class MigrateKalender extends CLI_Controller /** * Everything has a beginning */ + public function refreshTablesAndFullMigrateOfStundenplanReservierung($von, $bis = null, $studiengang_kz = null, $ort_kurzbz = null) + { + echo "Refreshing calendar related tables...\n"; + $this->resetBeforeNewStundenplanReservierungImport(); + echo "Calendar related tables refreshed successfully.\n\n"; + + echo "Starting full migration of Stundenplan and Reservierung from $von to " . ($bis ?? '2100-12-31') . "...\n"; + $this->fullMigrateOfStundenplanReservierung($von, $bis, $studiengang_kz, $ort_kurzbz); + echo "Full migration of Stundenplan and Reservierung completed successfully.\n"; + } + + public function fullMigrateOfStundenplanReservierung($von, $bis = null, $studiengang_kz = null, $ort_kurzbz = null) + { + echo "Starting migration of Stundenplan from $von to " . ($bis ?? '2100-12-31') . "...\n"; + $this->migrateStundenplan($von, $bis, $studiengang_kz); + echo "Stundenplan migration completed successfully.\n\n"; + + echo "Starting migration of Reservierung from $von to " . ($bis ?? '2100-12-31') . "...\n"; + $this->migrateReservierung($von, $bis, $ort_kurzbz); + echo "Reservierung migration completed successfully.\n\n"; + + echo "Starting migration of Stundenplan Betriebsmittel entries...\n"; + $this->migrateStundenplanBetriebsmittelEntries(); + echo "Stundenplan Betriebsmittel entries migration completed successfully.\n\n"; + + echo "Starting to add title values as tags to calendar entries...\n"; + $this->addTitleValuesAsTagsToKalenderEntries(); + echo "Adding title values as tags to calendar entries completed successfully.\n\n"; + } + public function migrateStundenplan($von, $bis = null, $studiengang_kz = null) { if (is_null($von)) @@ -264,6 +294,77 @@ class MigrateKalender extends CLI_Controller } } + public function resetBeforeNewStundenplanReservierungImport() + { + + $db = new DB_Model(); + + $db->db->trans_start(); + + $db->db->query('DELETE FROM sync.tbl_stundenplandev_kalender'); + $db->db->query('DELETE FROM sync.tbl_reservierung_kalender'); + + $db->db->query("DELETE FROM lehre.tbl_kalender_event_teilnehmer + WHERE kalender_id IN ( + SELECT kalender_id + FROM lehre.tbl_kalender + WHERE typ = 'reservierung' + )"); + + $db->db->query("DELETE FROM lehre.tbl_kalender_event + WHERE kalender_id IN ( + SELECT kalender_id + FROM lehre.tbl_kalender + WHERE typ = 'reservierung' + )"); + + $db->db->query("DELETE FROM lehre.tbl_kalender_lehreinheit + WHERE kalender_id IN ( + SELECT kalender_id + FROM lehre.tbl_kalender + WHERE typ = 'lehreinheit' OR typ = 'reservierung' + )"); + + $db->db->query("DELETE FROM lehre.tbl_kalender_ort + WHERE kalender_id IN ( + SELECT kalender_id + FROM lehre.tbl_kalender + WHERE typ IN ('lehreinheit', 'reservierung') + )"); + + $db->db->query("DELETE FROM public.tbl_notiz + WHERE notiz_id IN ( + SELECT notiz_id + FROM public.tbl_notizzuordnung + WHERE eindeutige_kalender_gruppen_id IN ( + SELECT eindeutige_gruppen_id + FROM lehre.tbl_kalender + ) + )"); + + $db->db->query("DELETE FROM public.tbl_notizzuordnung + WHERE eindeutige_kalender_gruppen_id IN ( + SELECT eindeutige_gruppen_id + FROM lehre.tbl_kalender + )"); + + $db->db->query("DELETE FROM public.tbl_betriebsmittel_kalender + WHERE eindeutige_kalender_gruppen_id IN ( + SELECT eindeutige_gruppen_id + FROM lehre.tbl_kalender + )"); + + $db->db->query("DELETE FROM lehre.tbl_kalender + WHERE typ IN ('lehreinheit', 'reservierung')"); + + $db->db->trans_complete(); + + if ($db->db->trans_status() === false) + return error('Reset before new import failed'); + + return success('Migration data reset successfully'); + } + public function migrateStundenplanBetriebsmittelEntries() { $this->setKalendarEntriesGroupIDs(); $this->setKalendarEntriesGroupIDsForChildren(); @@ -319,6 +420,45 @@ class MigrateKalender extends CLI_Controller $dbModel->db->query($query); } + public function addTitleValuesAsTagsToKalenderEntries() { + $dbModel = new DB_Model(); + + + $query = "SELECT + k.eindeutige_gruppen_id, + ARRAY_AGG(DISTINCT(spd.titel) ORDER BY spd.titel) AS titel, + MAX(spd.updateamum) AS updateamum + FROM lehre.tbl_stundenplandev spd + JOIN sync.tbl_stundenplandev_kalender spdk ON spd.stundenplandev_id = spdk.stundenplandev_id + JOIN lehre.tbl_kalender k ON k.kalender_id = spdk.kalender_id + WHERE k.typ = 'lehreinheit' AND k.eindeutige_gruppen_id IS NOT NULL AND spd.titel IS NOT NULL + GROUP BY k.eindeutige_gruppen_id"; + + $result = $dbModel->execReadOnlyQuery($query); + + if (isError($result)) { + error("Error while fetching title values for adding as tags: " . getError($result)); + return; + } + if (!hasData($result)) { + error("No title values found for adding as tags."); + return; + } + + $data = getData($result); + + foreach($data as $block) { + $eindeutige_gruppen_id = $block->eindeutige_gruppen_id; + $notizText = implode(' - ', array_filter($block->titel, function($titel) { + return !empty(trim($titel)); + })); + + if (!empty($notizText)) { + $this->addTag($eindeutige_gruppen_id, $notizText, $block->updateamum); + } + } + } + private function setKalendarEntriesGroupIDs() { $dbModel = new DB_Model(); @@ -593,4 +733,129 @@ class MigrateKalender extends CLI_Controller ); } } + + private function addTag($eindeutige_kalender_gruppen_id, $notizText, $lastUpdatedInOldSystem): bool + { + $notizType = 'hinweis'; + $insertvonMockUser = 'oldToNewTempusMigration'; + + if (is_null($eindeutige_kalender_gruppen_id) || empty($eindeutige_kalender_gruppen_id)) { + var_dump("Error: eindeutige_kalender_gruppen_id is null or empty."); + return false; + } + + $this->load->model('person/Notiz_model', 'NotizModel'); + $this->load->model('system/Notiztyp_model', 'NotiztypModel'); + $this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel'); + + $checkTyp = $this->NotiztypModel->loadWhere(array('typ_kurzbz' => $notizType)); + + if (isError($checkTyp)) + { + error("Error occurred while checking Notiztyp: " . $checkTyp->message); + return false; + } + + if (!hasData($checkTyp)) + { + error("Notiztyp 'hinweis' does not exist. Please create it before adding tags."); + return false; + } + + + $this->NotizzuordnungModel->addJoin('tbl_notiz', 'tbl_notiz.notiz_id = tbl_notizzuordnung.notiz_id', 'LEFT'); + $this->NotizzuordnungModel->db->where('tbl_notiz.typ', $notizType); + $this->NotizzuordnungModel->db->where('tbl_notiz.insertvon', $insertvonMockUser); + $oldNotizZuordnung = $this->NotizzuordnungModel->loadWhere(array('eindeutige_kalender_gruppen_id' => $eindeutige_kalender_gruppen_id)); + if (isError($oldNotizZuordnung)) + { + error("Error occurred while checking Notizzuordnung: " . $oldNotizZuordnung->message); + return false; + } + if (hasData($oldNotizZuordnung)) + { + return $this->updateTag($eindeutige_kalender_gruppen_id, $notizText, $lastUpdatedInOldSystem); + } + + + $insertResult = $this->NotizModel->insert(array( + 'titel' => 'TAG', + 'text' => $notizText, + 'verfasser_uid' => null, + 'erledigt' => false, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => $insertvonMockUser, + 'typ' => $notizType + )); + + if (isError($insertResult)) + { + error("Error occurred while inserting Notiz: " . $insertResult->message); + return false; + } + + $insertZuordnung = $this->NotizzuordnungModel->insert(array( + 'notiz_id' => $insertResult->retval, + 'eindeutige_kalender_gruppen_id' => $eindeutige_kalender_gruppen_id + )); + + if (isError($insertZuordnung)) + { + error("Error occurred while inserting Notizzuordnung: " . $insertZuordnung->message); + return false; + } + + return true; + } + + private function updateTag($eindeutige_kalender_gruppen_id, $notizText, $lastUpdatedInOldSystem) + { + $notizType = 'hinweis'; + $insertvonMockUser = 'oldToNewTempusMigration'; + + $this->NotizzuordnungModel->addJoin('tbl_notiz', 'tbl_notiz.notiz_id = tbl_notizzuordnung.notiz_id', 'LEFT'); + $this->NotizzuordnungModel->db->where('tbl_notiz.typ', $notizType); + $this->NotizzuordnungModel->db->where('tbl_notiz.insertvon', $insertvonMockUser); + $notizZuordnungRes = $this->NotizzuordnungModel->loadWhere(array('eindeutige_kalender_gruppen_id' => $eindeutige_kalender_gruppen_id)); + if (isError($notizZuordnungRes)) + { + error("Error occurred while loading Notizzuordnung: " . $notizZuordnungRes->message); + return false; + } + + + $tag = $this->NotizModel->loadWhere(array('notiz_id' => $notizZuordnungRes->retval[0]->notiz_id)); + if (isError($tag)) + { + error("Error occurred while loading Notiz: " . $tag->message); + return false; + } + + if (!hasData($tag)) + { + error("Error occurred while loading Notiz: " . $tag->message); + return false; + } + + $adjustedLastUpdatedInOldSystem = date('Y-m-d H:i:s', strtotime($lastUpdatedInOldSystem) + 5); + if ($tag->retval[0]->updateamum >= $adjustedLastUpdatedInOldSystem) + { + return true; + } + + $updateData = $this->NotizModel->update(array('notiz_id' => $tag->retval[0]->notiz_id), + array('text' => $notizText, + 'updateamum' => date('Y-m-d H:i:s'), + 'updatevon' => $insertvonMockUser, + 'bearbeiter_uid' => null, + ) + ); + if (isError($updateData)) + { + error("Error occurred while updating Notiz: " . $updateData->message); + return false; + } + + return true; + } } From 5d284c28e3d047b26fb10442b6d32bf388b854b0 Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Thu, 6 Aug 2026 13:47:55 +0200 Subject: [PATCH 2/7] Add kalender column rename from eindeutige_gruppen_id to eindeutige_kalender_gruppen_id --- .../OperationalResourceToCalenderAPI.php | 4 +-- .../controllers/system/MigrateKalender.php | 36 +++++++++---------- application/libraries/KalenderLib.php | 22 ++++++------ .../checks/ResourcesCollisionCheck.php | 6 ++-- .../models/ressource/Betriebsmittel_model.php | 2 +- .../models/ressource/Kalender_model.php | 2 +- .../Calendar/Base/Grid/Line/Event.js | 2 +- .../components/Tempus/TagsAssignmentModal.js | 8 ++--- system/dbupdate_3.4.php | 1 + ...ge_kalender_gruppen_id_in_tbl_kalender.php | 16 +++++++++ system/seeders/015_kalender.sql | 4 +-- 11 files changed, 60 insertions(+), 43 deletions(-) create mode 100644 system/dbupdate_3.4/78318_rename_column_of_eindeutige_gruppen_id_to_eindeutige_kalender_gruppen_id_in_tbl_kalender.php diff --git a/application/controllers/api/frontend/v1/tempus/OperationalResourceToCalenderAPI.php b/application/controllers/api/frontend/v1/tempus/OperationalResourceToCalenderAPI.php index 376a0fedc..f5a09deff 100644 --- a/application/controllers/api/frontend/v1/tempus/OperationalResourceToCalenderAPI.php +++ b/application/controllers/api/frontend/v1/tempus/OperationalResourceToCalenderAPI.php @@ -45,7 +45,7 @@ class OperationalResourceToCalenderAPI extends FHCAPI_Controller $result = $this->KalenderModel->loadWhere(['kalender_id' => $calenderID]); if (empty($result)) $this->terminateWithError("Calendar with id '$calenderID' not found"); - $calenderGroupID = $this->getDataOrTerminateWithError($result)[0]->eindeutige_gruppen_id; + $calenderGroupID = $this->getDataOrTerminateWithError($result)[0]->eindeutige_kalender_gruppen_id; if (!isset($calenderGroupID)) $this->terminateWithError("Calendar with id '$calenderID' does not have a valid group id"); @@ -72,7 +72,7 @@ class OperationalResourceToCalenderAPI extends FHCAPI_Controller $calendar = $this->getDataOrTerminateWithError($result)[0]; - $calenderGroupID = $calendar->eindeutige_gruppen_id; + $calenderGroupID = $calendar->eindeutige_kalender_gruppen_id; if (!isset($calenderGroupID)) $this->terminateWithError("Calendar with id '$calenderID' does not have a valid group id"); $result = $this->kalenderlib->addOperationalResourcesToKalenderEvent($calendar, $assignedResources); diff --git a/application/controllers/system/MigrateKalender.php b/application/controllers/system/MigrateKalender.php index abc701a3a..1d1218818 100644 --- a/application/controllers/system/MigrateKalender.php +++ b/application/controllers/system/MigrateKalender.php @@ -337,20 +337,20 @@ class MigrateKalender extends CLI_Controller SELECT notiz_id FROM public.tbl_notizzuordnung WHERE eindeutige_kalender_gruppen_id IN ( - SELECT eindeutige_gruppen_id + SELECT eindeutige_kalender_gruppen_id FROM lehre.tbl_kalender ) )"); $db->db->query("DELETE FROM public.tbl_notizzuordnung WHERE eindeutige_kalender_gruppen_id IN ( - SELECT eindeutige_gruppen_id + SELECT eindeutige_kalender_gruppen_id FROM lehre.tbl_kalender )"); $db->db->query("DELETE FROM public.tbl_betriebsmittel_kalender WHERE eindeutige_kalender_gruppen_id IN ( - SELECT eindeutige_gruppen_id + SELECT eindeutige_kalender_gruppen_id FROM lehre.tbl_kalender )"); @@ -391,7 +391,7 @@ class MigrateKalender extends CLI_Controller $createHelperTypeQuery . "WITH test AS ( SELECT - tk.eindeutige_gruppen_id AS eindeutige_gruppen_id, + tk.eindeutige_kalender_gruppen_id AS eindeutige_kalender_gruppen_id, array_agg(tk.kalender_id), array_agg( ROW(tsb.betriebsmittel_id, tsb.insertamum, tsb.insertvon)::betriebsmittel_info @@ -399,7 +399,7 @@ class MigrateKalender extends CLI_Controller FROM sync.tbl_stundenplandev_kalender AS sk JOIN lehre.tbl_kalender tk ON tk.kalender_id = sk.kalender_id JOIN lehre.tbl_stundenplan_betriebsmittel tsb ON tsb.stundenplandev_id = sk.stundenplandev_id - GROUP BY tk.eindeutige_gruppen_id + GROUP BY tk.eindeutige_kalender_gruppen_id ) INSERT INTO lehre.tbl_betriebsmittel_kalender ( eindeutige_kalender_gruppen_id, @@ -408,7 +408,7 @@ class MigrateKalender extends CLI_Controller insertvon ) SELECT - t.eindeutige_gruppen_id, + t.eindeutige_kalender_gruppen_id, bm.betriebsmittel_id, bm.insertamum, bm.insertvon @@ -425,14 +425,14 @@ class MigrateKalender extends CLI_Controller $query = "SELECT - k.eindeutige_gruppen_id, + k.eindeutige_kalender_gruppen_id, ARRAY_AGG(DISTINCT(spd.titel) ORDER BY spd.titel) AS titel, MAX(spd.updateamum) AS updateamum FROM lehre.tbl_stundenplandev spd JOIN sync.tbl_stundenplandev_kalender spdk ON spd.stundenplandev_id = spdk.stundenplandev_id JOIN lehre.tbl_kalender k ON k.kalender_id = spdk.kalender_id - WHERE k.typ = 'lehreinheit' AND k.eindeutige_gruppen_id IS NOT NULL AND spd.titel IS NOT NULL - GROUP BY k.eindeutige_gruppen_id"; + WHERE k.typ = 'lehreinheit' AND k.eindeutige_kalender_gruppen_id IS NOT NULL AND spd.titel IS NOT NULL + GROUP BY k.eindeutige_kalender_gruppen_id"; $result = $dbModel->execReadOnlyQuery($query); @@ -448,13 +448,13 @@ class MigrateKalender extends CLI_Controller $data = getData($result); foreach($data as $block) { - $eindeutige_gruppen_id = $block->eindeutige_gruppen_id; + $eindeutige_kalender_gruppen_id = $block->eindeutige_kalender_gruppen_id; $notizText = implode(' - ', array_filter($block->titel, function($titel) { return !empty(trim($titel)); })); if (!empty($notizText)) { - $this->addTag($eindeutige_gruppen_id, $notizText, $block->updateamum); + $this->addTag($eindeutige_kalender_gruppen_id, $notizText, $block->updateamum); } } } @@ -463,9 +463,9 @@ class MigrateKalender extends CLI_Controller $dbModel = new DB_Model(); $query = "UPDATE lehre.tbl_kalender - SET eindeutige_gruppen_id = gen_random_uuid() + SET eindeutige_kalender_gruppen_id = gen_random_uuid() WHERE vorgaenger_kalender_id IS NULL - AND eindeutige_gruppen_id IS NULL;"; + AND eindeutige_kalender_gruppen_id IS NULL;"; $dbModel->db->query($query); @@ -480,7 +480,7 @@ class MigrateKalender extends CLI_Controller kalender_id, vorgaenger_kalender_id, kalender_id AS root_id, - eindeutige_gruppen_id as root_eindeutige_gruppen_id + eindeutige_kalender_gruppen_id as root_eindeutige_kalender_gruppen_id FROM lehre.tbl_kalender WHERE vorgaenger_kalender_id IS NULL @@ -490,18 +490,18 @@ class MigrateKalender extends CLI_Controller i.kalender_id, i.vorgaenger_kalender_id, t.root_id, - t.root_eindeutige_gruppen_id + t.root_eindeutige_kalender_gruppen_id FROM lehre.tbl_kalender i JOIN tree t ON i.vorgaenger_kalender_id = t.kalender_id - where i.eindeutige_gruppen_id is NULL + where i.eindeutige_kalender_gruppen_id is NULL ) UPDATE lehre.tbl_kalender k - SET eindeutige_gruppen_id = t.root_eindeutige_gruppen_id + SET eindeutige_kalender_gruppen_id = t.root_eindeutige_kalender_gruppen_id FROM tree t WHERE k.kalender_id = t.kalender_id - AND k.eindeutige_gruppen_id IS NULL;"; + AND k.eindeutige_kalender_gruppen_id IS NULL;"; $dbModel->db->query($query); } diff --git a/application/libraries/KalenderLib.php b/application/libraries/KalenderLib.php index 0c4fc236e..bc3534fbb 100644 --- a/application/libraries/KalenderLib.php +++ b/application/libraries/KalenderLib.php @@ -43,7 +43,7 @@ class KalenderLib $end_date = date('Y-m-d', strtotime($end_date . ' +1 day')); $this->_ci->KalenderModel->addSelect('tbl_kalender.kalender_id, - tbl_kalender.eindeutige_gruppen_id, + tbl_kalender.eindeutige_kalender_gruppen_id, tbl_kalender.status_kurzbz, tbl_kalender.typ, tbl_kalender.von, @@ -172,7 +172,7 @@ class KalenderLib GROUP BY tag.eindeutige_kalender_gruppen_id ) AS tag_data_agg"; - $this->_ci->KalenderModel->addJoin($subQueryTag, 'tag_data_agg.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_gruppen_id', 'LEFT'); + $this->_ci->KalenderModel->addJoin($subQueryTag, 'tag_data_agg.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_kalender_gruppen_id', 'LEFT'); // End of tags inclusion // Include assigned operational resources in the query @@ -195,7 +195,7 @@ class KalenderLib $this->_ci->KalenderModel->addJoin( $subQueryResource, - 'resource_data_agg.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_gruppen_id', + 'resource_data_agg.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_kalender_gruppen_id', 'LEFT' ); // End of operational resources inclusion @@ -204,7 +204,7 @@ class KalenderLib $this->_ci->KalenderModel->db->where('tbl_kalender.von >=', $start_date); $this->_ci->KalenderModel->db->where('tbl_kalender.bis <', $end_date); - $this->_ci->KalenderModel->addOrder('tbl_kalender.eindeutige_gruppen_id', 'DESC'); + $this->_ci->KalenderModel->addOrder('tbl_kalender.eindeutige_kalender_gruppen_id', 'DESC'); } private function _mapEvents($data, $collisionCheck = true) @@ -228,7 +228,7 @@ class KalenderLib $parsedResources = is_string($resources) ? json_decode($resources, true) : $resources; $events[$id] = (object) [ - 'eindeutige_gruppen_id' => $row->eindeutige_gruppen_id, + 'eindeutige_kalender_gruppen_id' => $row->eindeutige_kalender_gruppen_id, 'type' => $row->typ, 'beginn' => $von->format('H:i:s'), 'ende' => $bis->format('H:i:s'), @@ -711,7 +711,7 @@ class KalenderLib 'bis' => $end_date, 'typ' => 'lehreinheit', 'status_kurzbz' => 'planning', - 'eindeutige_gruppen_id' => $this->_ci->KalenderModel->generateUniqueGroupId(), + 'eindeutige_kalender_gruppen_id' => $this->_ci->KalenderModel->generateUniqueGroupId(), 'insertvon' => getAuthUID(), 'insertamum' => date('Y-m-d H:i:s') ) @@ -1101,19 +1101,19 @@ class KalenderLib "; $params = array_merge( - [$calendar->eindeutige_gruppen_id], + [$calendar->eindeutige_kalender_gruppen_id], $allowedResourceIDs ); $this->_ci->db->query($query, $params); } else { - $this->_ci->db->where('eindeutige_kalender_gruppen_id', $calendar->eindeutige_gruppen_id); + $this->_ci->db->where('eindeutige_kalender_gruppen_id', $calendar->eindeutige_kalender_gruppen_id); $this->_ci->db->delete('lehre.tbl_betriebsmittel_kalender'); } foreach ($assignedResources as $assignedResource) { $data = [ - 'eindeutige_kalender_gruppen_id' => $calendar->eindeutige_gruppen_id, + 'eindeutige_kalender_gruppen_id' => $calendar->eindeutige_kalender_gruppen_id, 'betriebsmittel_id' => $assignedResource['betriebsmittel_id'], 'anmerkung' => $assignedResource['anmerkung'] ?? null, 'quelle' => 'tempus_neu', @@ -1234,7 +1234,7 @@ class KalenderLib $kalender_entry = getData($entryResult); - $calendarResources = $this->_ci->BetriebsmittelKalenderModel->loadWhere(['eindeutige_kalender_gruppen_id' => $kalender_entry->eindeutige_gruppen_id]); + $calendarResources = $this->_ci->BetriebsmittelKalenderModel->loadWhere(['eindeutige_kalender_gruppen_id' => $kalender_entry->eindeutige_kalender_gruppen_id]); if (isError($calendarResources)) return $calendarResources; $calendarResourcesItems = getData($calendarResources); @@ -1393,7 +1393,7 @@ class KalenderLib 'typ' => 'lehreinheit', 'status_kurzbz' => 'planning', 'vorgaenger_kalender_id' => $old_id, - 'eindeutige_gruppen_id' => $kalender_entry->eindeutige_gruppen_id, + 'eindeutige_kalender_gruppen_id' => $kalender_entry->eindeutige_kalender_gruppen_id, 'insertvon' => getAuthUID(), 'insertamum' => date('Y-m-d H:i:s') ) diff --git a/application/libraries/collision/checks/ResourcesCollisionCheck.php b/application/libraries/collision/checks/ResourcesCollisionCheck.php index 0be789b7f..0c957965d 100644 --- a/application/libraries/collision/checks/ResourcesCollisionCheck.php +++ b/application/libraries/collision/checks/ResourcesCollisionCheck.php @@ -28,7 +28,7 @@ class ResourcesCollisionCheck implements ICollisionCheck if ($this->_ci->variablelib->getVar('ignore_resources_collisions') === 'true') return []; $this->_ci->KalenderModel->addSelect('kalender_id, von, bis, bm.beschreibung AS betriebsmittel_beschreibung'); - $this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender bk', 'bk.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_gruppen_id'); + $this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender bk', 'bk.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_kalender_gruppen_id'); $this->_ci->KalenderModel->addJoin('wawi.tbl_betriebsmittel bm', 'bm.betriebsmittel_id = bk.betriebsmittel_id'); $this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id !=', $data->kalender_id); @@ -59,9 +59,9 @@ class ResourcesCollisionCheck implements ICollisionCheck if (empty($kalender_ids)) return []; $this->_ci->KalenderModel->addSelect('DISTINCT ON (tbl_kalender.kalender_id) tbl_kalender.kalender_id'); - $this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender current_bk', 'current_bk.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_gruppen_id'); + $this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender current_bk', 'current_bk.eindeutige_kalender_gruppen_id = tbl_kalender.eindeutige_kalender_gruppen_id'); $this->_ci->KalenderModel->addJoin('lehre.tbl_betriebsmittel_kalender other_bk', 'other_bk.betriebsmittel_id = current_bk.betriebsmittel_id'); - $this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.eindeutige_gruppen_id = other_bk.eindeutige_kalender_gruppen_id'); + $this->_ci->KalenderModel->addJoin('lehre.tbl_kalender other_kalender', 'other_kalender.eindeutige_kalender_gruppen_id = other_bk.eindeutige_kalender_gruppen_id'); $this->_ci->KalenderModel->db->where('other_kalender.kalender_id != tbl_kalender.kalender_id', null, false); $this->_ci->KalenderModel->db->where('other_kalender.von < tbl_kalender.bis', null, false); diff --git a/application/models/ressource/Betriebsmittel_model.php b/application/models/ressource/Betriebsmittel_model.php index cf974086d..2d41754a7 100644 --- a/application/models/ressource/Betriebsmittel_model.php +++ b/application/models/ressource/Betriebsmittel_model.php @@ -43,7 +43,7 @@ class Betriebsmittel_model extends DB_Model AND NOT EXISTS( SELECT 1 FROM lehre.tbl_betriebsmittel_kalender - JOIN lehre.tbl_kalender ON tbl_kalender.eindeutige_gruppen_id = tbl_betriebsmittel_kalender.eindeutige_kalender_gruppen_id + JOIN lehre.tbl_kalender ON tbl_kalender.eindeutige_kalender_gruppen_id = tbl_betriebsmittel_kalender.eindeutige_kalender_gruppen_id WHERE betriebsmittel_id=tbl_betriebsmittel.betriebsmittel_id AND tbl_kalender.von < ? diff --git a/application/models/ressource/Kalender_model.php b/application/models/ressource/Kalender_model.php index d538b7313..e460beef0 100644 --- a/application/models/ressource/Kalender_model.php +++ b/application/models/ressource/Kalender_model.php @@ -16,7 +16,7 @@ class Kalender_model extends DB_Model { while (true) { $uniqueGroupId = generateUUID(); - $result = $this->loadWhere(['eindeutige_gruppen_id' => $uniqueGroupId]); + $result = $this->loadWhere(['eindeutige_kalender_gruppen_id' => $uniqueGroupId]); if (!hasData($result)) { return $uniqueGroupId; } diff --git a/public/js/components/Calendar/Base/Grid/Line/Event.js b/public/js/components/Calendar/Base/Grid/Line/Event.js index 98f241bed..771b89677 100644 --- a/public/js/components/Calendar/Base/Grid/Line/Event.js +++ b/public/js/components/Calendar/Base/Grid/Line/Event.js @@ -150,7 +150,7 @@ export default { v-cal-click:event="isHeaderOrFooter ? event : event.orig" @contextmenu.prevent="onRightClick" :data-id="'event-' + event.orig.kalender_id" - :data-group-id="'event-group-' + event.orig.eindeutige_gruppen_id" + :data-group-id="'event-group-' + event.orig.eindeutige_kalender_gruppen_id" data-cy="calendar-event" >
Pruefe Tabellen und Attribute!'; diff --git a/system/dbupdate_3.4/78318_rename_column_of_eindeutige_gruppen_id_to_eindeutige_kalender_gruppen_id_in_tbl_kalender.php b/system/dbupdate_3.4/78318_rename_column_of_eindeutige_gruppen_id_to_eindeutige_kalender_gruppen_id_in_tbl_kalender.php new file mode 100644 index 000000000..b45460f4e --- /dev/null +++ b/system/dbupdate_3.4/78318_rename_column_of_eindeutige_gruppen_id_to_eindeutige_kalender_gruppen_id_in_tbl_kalender.php @@ -0,0 +1,16 @@ +db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_kalender' AND column_name = 'eindeutige_gruppen_id'"); +if($db->db_num_rows($result) === 1) +{ + + $qry = "ALTER TABLE lehre.tbl_kalender + RENAME COLUMN eindeutige_gruppen_id TO eindeutige_kalender_gruppen_id"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_kalender: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_kalender column eindeutige_gruppen_id renamed to eindeutige_kalender_gruppen_id'; + +} \ No newline at end of file diff --git a/system/seeders/015_kalender.sql b/system/seeders/015_kalender.sql index 4aa274060..a4bbc6a41 100644 --- a/system/seeders/015_kalender.sql +++ b/system/seeders/015_kalender.sql @@ -161,7 +161,7 @@ VALUES -- Calendar setup for resources tests INSERT INTO lehre.tbl_kalender -(von, bis, typ, status_kurzbz, vorgaenger_kalender_id, eindeutige_gruppen_id, insertamum, insertvon, updateamum, updatevon) +(von, bis, typ, status_kurzbz, vorgaenger_kalender_id, eindeutige_kalender_gruppen_id, insertamum, insertvon, updateamum, updatevon) VALUES (date_trunc('week', CURRENT_DATE) + INTERVAL '6 day' + TIME '19:30:00', date_trunc('week', CURRENT_DATE) + INTERVAL '6 day' + TIME '20:15:00', 'lehreinheit', 'live', NULL, 'ec1bd001-facf-4b21-a671-bcb2d4f037fd', now(), 'demoadmin', NULL, 'demoadmin'), (date_trunc('week', CURRENT_DATE) + INTERVAL '6 day' + TIME '20:15:00', date_trunc('week', CURRENT_DATE) + INTERVAL '6 day' + TIME '21:00:00', 'lehreinheit', 'live', NULL, 'ec2bd001-facf-4b21-a671-bcb2d4f037fd', now(), 'demoadmin', NULL, 'demoadmin'), @@ -179,7 +179,7 @@ VALUES -- Calendar setup for tags tests INSERT INTO lehre.tbl_kalender -(von, bis, typ, status_kurzbz, vorgaenger_kalender_id, eindeutige_gruppen_id, insertamum, insertvon, updateamum, updatevon) +(von, bis, typ, status_kurzbz, vorgaenger_kalender_id, eindeutige_kalender_gruppen_id, insertamum, insertvon, updateamum, updatevon) VALUES (date_trunc('week', CURRENT_DATE) + INTERVAL '6 day' + TIME '16:55:00', date_trunc('week', CURRENT_DATE) + INTERVAL '6 day' + TIME '17:40:00', 'lehreinheit', 'live', NULL, 'ec1bd001-facf-4b21-a671-bcb2d4f037fd', now(), 'demoadmin', NULL, 'demoadmin'); From 175b077d874c83fbbfaa3dda58634f6e28db01fa Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Mon, 7 Sep 2026 17:50:09 +0200 Subject: [PATCH 3/7] Added mod --- application/libraries/KalenderLib.php | 57 ++++++++++++++++++--------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/application/libraries/KalenderLib.php b/application/libraries/KalenderLib.php index 623784c9d..6afd07349 100644 --- a/application/libraries/KalenderLib.php +++ b/application/libraries/KalenderLib.php @@ -34,13 +34,28 @@ class KalenderLib } - private function _getBasePlan($start_date, $end_date) + private function _buildFilteredKalenderCte($start_date, $end_date) + { + $end_date = date('Y-m-d', strtotime($end_date . ' +1 day')); + + return sprintf( + 'WITH filtered_kalender AS MATERIALIZED ( + SELECT * + FROM lehre.tbl_kalender + WHERE von >= timestamp %s + AND bis < timestamp %s + AND status_kurzbz <> \'deleted\' + )', + $this->_ci->KalenderModel->db->escape(date('Y-m-d H:i:s', strtotime($start_date))), + $this->_ci->KalenderModel->db->escape(date('Y-m-d H:i:s', strtotime($end_date))) + ); + } + + private function _buildBasePlanQuery() { $language = $this->getLanguageIndex(); $index_bezeichnung_mehrsprachig = $language - 1; - $end_date = date('Y-m-d', strtotime($end_date . ' +1 day')); - $this->_ci->KalenderModel->addSelect('tbl_kalender.kalender_id, tbl_kalender.eindeutige_kalender_gruppen_id, tbl_kalender.status_kurzbz, @@ -139,6 +154,7 @@ class KalenderLib $this->_ci->KalenderModel->addJoin('public.tbl_benutzer resevierung_benutzer', 'reservierung_ma.mitarbeiter_uid = resevierung_benutzer.uid', 'LEFT'); $this->_ci->KalenderModel->addJoin('public.tbl_person reservierung_person', 'reservierung_person.person_id = resevierung_benutzer.person_id', 'LEFT'); + $this->_ci->KalenderModel->addJoin('lehre.tbl_lehreinheitgruppe', 'tbl_lehreinheit.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id', 'LEFT'); $this->_ci->KalenderModel->addJoin('public.tbl_gruppe le_gruppe', 'tbl_lehreinheitgruppe.gruppe_kurzbz = le_gruppe.gruppe_kurzbz', 'LEFT'); $this->_ci->KalenderModel->addJoin('public.tbl_lehrverband le_lehrverband', @@ -216,12 +232,17 @@ class KalenderLib $this->_ci->KalenderModel->db->join('lehre.tbl_stunde vonstunde', 'tbl_kalender.von::time = vonstunde.beginn', 'LEFT', FALSE); $this->_ci->KalenderModel->db->join('lehre.tbl_stunde bisstunde', 'tbl_kalender.bis::time = bisstunde.ende', 'LEFT', FALSE); - $this->_ci->KalenderModel->db->where('tbl_kalender.von >=', $start_date); - $this->_ci->KalenderModel->db->where('tbl_kalender.bis <', $end_date); - $this->_ci->KalenderModel->addOrder('tbl_kalender.eindeutige_kalender_gruppen_id', 'DESC'); } + private function _loadFilteredBasePlan($start_date, $end_date) + { + $query = $this->_buildFilteredKalenderCte($start_date, $end_date) . "\n" . + $this->_ci->KalenderModel->db->get_compiled_select('filtered_kalender AS tbl_kalender'); + + return $this->_ci->KalenderModel->execReadOnlyQuery($query); + } + private function _mapEvents($data, $collisionCheck = true) { $stundenplan_data = []; @@ -369,10 +390,10 @@ class KalenderLib } public function getPlanByOrt($start_date, $end_date, $ort) { - $this->_getBasePlan($start_date, $end_date); + $this->_buildBasePlanQuery(); $this->_ci->KalenderModel->db->where('tbl_kalender_ort.ort_kurzbz', $ort); - $data = $this->_ci->KalenderModel->load(); + $data = $this->_loadFilteredBasePlan($start_date, $end_date); return $this->_mapEvents($data); } @@ -382,7 +403,7 @@ class KalenderLib $start_date = date('Y-m-d', strtotime($start_date)); $end_date = date('Y-m-d', strtotime($end_date . ' +1 day')); - $this->_getBasePlan($start_date, $end_date); + $this->_buildBasePlanQuery(); $this->_ci->KalenderModel->db->where('NOT EXISTS ( SELECT 1 FROM lehre.tbl_kalender nachfolger @@ -414,7 +435,7 @@ class KalenderLib $this->_ci->KalenderModel->db->group_end(); } - $data = $this->_ci->KalenderModel->load(); + $data = $this->_loadFilteredBasePlan($start_date, $end_date); return $this->_mapEvents($data, false); } @@ -430,14 +451,14 @@ class KalenderLib $kalender_entry = getData($kalender_entry)[0]; - $this->_getBasePlan($kalender_entry->von, $kalender_entry->bis); + $this->_buildBasePlanQuery(); $this->_ci->KalenderModel->db->where('tbl_kalender.kalender_id', $kalender_entry->kalender_id); - $data = $this->_ci->KalenderModel->load(); + $data = $this->_loadFilteredBasePlan($kalender_entry->von, $kalender_entry->bis); return $this->_mapEvents($data); } public function getPlanForPlanner($start_date, $end_date, $ort = null, $uids = null, $studiengaenge = null) { - $this->_getBasePlan($start_date, $end_date); + $this->_buildBasePlanQuery(); if (!is_null($ort)) { @@ -540,18 +561,18 @@ class KalenderLib ) AS has_assigned_resources" ]); - $data = $this->_ci->KalenderModel->load(); + $data = $this->_loadFilteredBasePlan($start_date, $end_date); return $this->_mapEvents($data); } public function getPlanForStudent($start_date, $end_date) { - $this->_getBasePlan($start_date, $end_date); + $this->_buildBasePlanQuery(); $this->_ci->KalenderModel->db->where_in('status_kurzbz', array('live', 'to_delete_live')); - $data = $this->_ci->KalenderModel->load(); + $data = $this->_loadFilteredBasePlan($start_date, $end_date); return $this->_mapEvents($data); } @@ -559,7 +580,7 @@ class KalenderLib public function getPlanForLecturer($start_date, $end_date) { - $this->_getBasePlan($start_date, $end_date); + $this->_buildBasePlanQuery(); $this->_ci->KalenderModel->addJoin( 'lehre.tbl_kalender neuerer', @@ -571,7 +592,7 @@ class KalenderLib OR (tbl_kalender.status_kurzbz = 'preview' AND neuerer.kalender_id IS NULL) OR (tbl_kalender.status_kurzbz = 'live' AND neuerer.kalender_id IS NULL) )", NULL, FALSE); - $data = $this->_ci->KalenderModel->load(); + $data = $this->_loadFilteredBasePlan($start_date, $end_date); return $this->_mapEvents($data); } From 9f4ca01068450c29d7a9d91bf224785fe4fdddad Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Wed, 9 Sep 2026 09:34:15 +0200 Subject: [PATCH 4/7] BUG: Fixed issue with refreshing and importing kalender events --- application/controllers/system/MigrateKalender.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/system/MigrateKalender.php b/application/controllers/system/MigrateKalender.php index a57e8fa0b..1b9a1a8bf 100644 --- a/application/controllers/system/MigrateKalender.php +++ b/application/controllers/system/MigrateKalender.php @@ -362,7 +362,7 @@ class MigrateKalender extends CLI_Controller FROM lehre.tbl_kalender )"); - $db->db->query("DELETE FROM public.tbl_betriebsmittel_kalender + $db->db->query("DELETE FROM lehre.tbl_betriebsmittel_kalender WHERE eindeutige_kalender_gruppen_id IN ( SELECT eindeutige_kalender_gruppen_id FROM lehre.tbl_kalender From 3dd46fa99752742bf1f7ed8018d6842aa4674507 Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Wed, 9 Sep 2026 14:05:57 +0200 Subject: [PATCH 5/7] Minor mod --- application/libraries/KalenderLib.php | 1 - 1 file changed, 1 deletion(-) diff --git a/application/libraries/KalenderLib.php b/application/libraries/KalenderLib.php index 6afd07349..1c8674cdd 100644 --- a/application/libraries/KalenderLib.php +++ b/application/libraries/KalenderLib.php @@ -44,7 +44,6 @@ class KalenderLib FROM lehre.tbl_kalender WHERE von >= timestamp %s AND bis < timestamp %s - AND status_kurzbz <> \'deleted\' )', $this->_ci->KalenderModel->db->escape(date('Y-m-d H:i:s', strtotime($start_date))), $this->_ci->KalenderModel->db->escape(date('Y-m-d H:i:s', strtotime($end_date))) From 21c8bbbf90493ead61545f58ff318d4ab624987e Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Wed, 9 Sep 2026 14:21:17 +0200 Subject: [PATCH 6/7] Added check before droping all imported kalender events --- .../controllers/system/MigrateKalender.php | 153 ++++++++++-------- 1 file changed, 82 insertions(+), 71 deletions(-) diff --git a/application/controllers/system/MigrateKalender.php b/application/controllers/system/MigrateKalender.php index 1b9a1a8bf..71a7d189f 100644 --- a/application/controllers/system/MigrateKalender.php +++ b/application/controllers/system/MigrateKalender.php @@ -34,6 +34,12 @@ class MigrateKalender extends CLI_Controller */ public function refreshTablesAndFullMigrateOfStundenplanReservierung($von, $bis = null, $studiengang_kz = null, $ort_kurzbz = null) { + if (defined('CI_ENVIRONMENT') && CI_ENVIRONMENT === 'production') + { + echo "This script is not allowed to run in production environment.\n"; + return; + } + echo "Refreshing calendar related tables...\n"; $this->resetBeforeNewStundenplanReservierungImport(); echo "Calendar related tables refreshed successfully.\n\n"; @@ -308,77 +314,6 @@ class MigrateKalender extends CLI_Controller } } - public function resetBeforeNewStundenplanReservierungImport() - { - - $db = new DB_Model(); - - $db->db->trans_start(); - - $db->db->query('DELETE FROM sync.tbl_stundenplandev_kalender'); - $db->db->query('DELETE FROM sync.tbl_reservierung_kalender'); - - $db->db->query("DELETE FROM lehre.tbl_kalender_event_teilnehmer - WHERE kalender_id IN ( - SELECT kalender_id - FROM lehre.tbl_kalender - WHERE typ = 'reservierung' - )"); - - $db->db->query("DELETE FROM lehre.tbl_kalender_event - WHERE kalender_id IN ( - SELECT kalender_id - FROM lehre.tbl_kalender - WHERE typ = 'reservierung' - )"); - - $db->db->query("DELETE FROM lehre.tbl_kalender_lehreinheit - WHERE kalender_id IN ( - SELECT kalender_id - FROM lehre.tbl_kalender - WHERE typ = 'lehreinheit' OR typ = 'reservierung' - )"); - - $db->db->query("DELETE FROM lehre.tbl_kalender_ort - WHERE kalender_id IN ( - SELECT kalender_id - FROM lehre.tbl_kalender - WHERE typ IN ('lehreinheit', 'reservierung') - )"); - - $db->db->query("DELETE FROM public.tbl_notiz - WHERE notiz_id IN ( - SELECT notiz_id - FROM public.tbl_notizzuordnung - WHERE eindeutige_kalender_gruppen_id IN ( - SELECT eindeutige_kalender_gruppen_id - FROM lehre.tbl_kalender - ) - )"); - - $db->db->query("DELETE FROM public.tbl_notizzuordnung - WHERE eindeutige_kalender_gruppen_id IN ( - SELECT eindeutige_kalender_gruppen_id - FROM lehre.tbl_kalender - )"); - - $db->db->query("DELETE FROM lehre.tbl_betriebsmittel_kalender - WHERE eindeutige_kalender_gruppen_id IN ( - SELECT eindeutige_kalender_gruppen_id - FROM lehre.tbl_kalender - )"); - - $db->db->query("DELETE FROM lehre.tbl_kalender - WHERE typ IN ('lehreinheit', 'reservierung')"); - - $db->db->trans_complete(); - - if ($db->db->trans_status() === false) - return error('Reset before new import failed'); - - return success('Migration data reset successfully'); - } - public function migrateStundenplanBetriebsmittelEntries() { $this->setKalendarEntriesGroupIDs(); $this->setKalendarEntriesGroupIDsForChildren(); @@ -473,6 +408,82 @@ class MigrateKalender extends CLI_Controller } } + private function resetBeforeNewStundenplanReservierungImport() + { + if (defined('CI_ENVIRONMENT') && CI_ENVIRONMENT === 'production') + { + echo "This script is not allowed to run in production environment.\n"; + return; + } + + $db = new DB_Model(); + + $db->db->trans_start(); + + $db->db->query('DELETE FROM sync.tbl_stundenplandev_kalender'); + $db->db->query('DELETE FROM sync.tbl_reservierung_kalender'); + + $db->db->query("DELETE FROM lehre.tbl_kalender_event_teilnehmer + WHERE kalender_id IN ( + SELECT kalender_id + FROM lehre.tbl_kalender + WHERE typ = 'reservierung' + )"); + + $db->db->query("DELETE FROM lehre.tbl_kalender_event + WHERE kalender_id IN ( + SELECT kalender_id + FROM lehre.tbl_kalender + WHERE typ = 'reservierung' + )"); + + $db->db->query("DELETE FROM lehre.tbl_kalender_lehreinheit + WHERE kalender_id IN ( + SELECT kalender_id + FROM lehre.tbl_kalender + WHERE typ = 'lehreinheit' OR typ = 'reservierung' + )"); + + $db->db->query("DELETE FROM lehre.tbl_kalender_ort + WHERE kalender_id IN ( + SELECT kalender_id + FROM lehre.tbl_kalender + WHERE typ IN ('lehreinheit', 'reservierung') + )"); + + $db->db->query("DELETE FROM public.tbl_notiz + WHERE notiz_id IN ( + SELECT notiz_id + FROM public.tbl_notizzuordnung + WHERE eindeutige_kalender_gruppen_id IN ( + SELECT eindeutige_kalender_gruppen_id + FROM lehre.tbl_kalender + ) + )"); + + $db->db->query("DELETE FROM public.tbl_notizzuordnung + WHERE eindeutige_kalender_gruppen_id IN ( + SELECT eindeutige_kalender_gruppen_id + FROM lehre.tbl_kalender + )"); + + $db->db->query("DELETE FROM lehre.tbl_betriebsmittel_kalender + WHERE eindeutige_kalender_gruppen_id IN ( + SELECT eindeutige_kalender_gruppen_id + FROM lehre.tbl_kalender + )"); + + $db->db->query("DELETE FROM lehre.tbl_kalender + WHERE typ IN ('lehreinheit', 'reservierung')"); + + $db->db->trans_complete(); + + if ($db->db->trans_status() === false) + return error('Reset before new import failed'); + + return success('Migration data reset successfully'); + } + private function setKalendarEntriesGroupIDs() { $dbModel = new DB_Model(); From 606c5143de4c176f53219d436534cbf27d200de5 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Thu, 10 Sep 2026 13:15:00 +0200 Subject: [PATCH 7/7] fix: deleting calendar events that have a location but no room --- application/libraries/KalenderLib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/libraries/KalenderLib.php b/application/libraries/KalenderLib.php index 1c8674cdd..935dfebb6 100644 --- a/application/libraries/KalenderLib.php +++ b/application/libraries/KalenderLib.php @@ -1860,7 +1860,7 @@ class KalenderLib else { - if (!isEmptyArray($kalender_entry->ort_kurzbz)) + if (!isEmptyArray($kalender_entry->ort_kurzbz) || !isEmptyString($kalender_entry->location)) { $result = $this->_deleteOrtEntry($kalender_entry); if (isError($result))