From ab4f38a360a22263f5035f7fa909adbc51aabf29 Mon Sep 17 00:00:00 2001 From: Moritz Weinmann Date: Mon, 29 Jun 2026 08:46:11 +0200 Subject: [PATCH] =?UTF-8?q?feat(einricht):=20Einrichtungen=20miteinander?= =?UTF-8?q?=20verkn=C3=BCpfen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue Tabelle organigramm_einricht_link für n:m-Beziehungen zwischen Einrichtungen. In der Bearbeitungskarte gibt es jetzt ein Mehrfachauswahlfeld (Semantic UI Dropdown) um verwandte Einrichtungen zu verknüpfen (z.B. alle HzE-Einrichtungen unter der Gruppe HzE). - Neue Funktion saveLinkedEinrichts() speichert die Verknüpfungen - Cardform lädt bestehende Links als Vorauswahl (Strings, kein int-Cast damit Semantic UI den data-value-Vergleich korrekt auflöst) - onChange-Handler + explizite hidden-input-Befüllung sichern zuverlässige Übergabe beim Formular-Submit Co-Authored-By: Claude Sonnet 4.6 --- mysyde/intranet/admin/edit_facility.inc.php | 25 ++- .../admin/edit_facility_cardform.inc.php | 149 ++++++++++++------ 2 files changed, 125 insertions(+), 49 deletions(-) diff --git a/mysyde/intranet/admin/edit_facility.inc.php b/mysyde/intranet/admin/edit_facility.inc.php index d47e054..6b8d3f8 100644 --- a/mysyde/intranet/admin/edit_facility.inc.php +++ b/mysyde/intranet/admin/edit_facility.inc.php @@ -99,7 +99,8 @@ function save_facility() { $messages[] = '
' . $translation->get("role_msg_success2") . '
'; } saveMandantLink($input_id); - edit_role($input_id, $messages); + saveLinkedEinrichts($input_id); + edit_facility($input_id, $messages); } else { header('EDIT_ERROR: 1'); // $input_role["id"] = $_POST["input_id"]; @@ -110,6 +111,28 @@ function save_facility() { } } +function saveLinkedEinrichts($einricht_id) { + $einricht_id = (int)$einricht_id; + if ($einricht_id <= 0) return; + + // Alle alten Verknüpfungen löschen + mysqli_query($GLOBALS['mysql_con'], + "DELETE FROM organigramm_einricht_link WHERE einricht_id = $einricht_id"); + + // Neue Verknüpfungen speichern + $raw = trim($_POST['linked_einrichts'] ?? ''); + if ($raw === '') return; + + foreach (explode(',', $raw) as $linkedId) { + $linkedId = (int)trim($linkedId); + if ($linkedId > 0 && $linkedId !== $einricht_id) { + mysqli_query($GLOBALS['mysql_con'], + "INSERT IGNORE INTO organigramm_einricht_link (einricht_id, linked_einricht_id) + VALUES ($einricht_id, $linkedId)"); + } + } +} + function saveMandantLink($role_id){ $mandant_id = $_POST['select_mandant']; $mandante = explode(',', $mandant_id); diff --git a/mysyde/intranet/admin/edit_facility_cardform.inc.php b/mysyde/intranet/admin/edit_facility_cardform.inc.php index 43ff729..b076c69 100644 --- a/mysyde/intranet/admin/edit_facility_cardform.inc.php +++ b/mysyde/intranet/admin/edit_facility_cardform.inc.php @@ -1,48 +1,101 @@ - - -
- get("new_facility"); - } else { - echo $translation->get("edit_facility"); - } - ?> -
-
- - -' . join("\r\n", $messages) . ''; - } -} - - -?> - -
- "> - - -
- get("description"), "input_description", "text", $input_role["description"], 100) ?> -
-
-
\ No newline at end of file + 0) { + $qLinked = mysqli_query($GLOBALS['mysql_con'], + "SELECT linked_einricht_id FROM organigramm_einricht_link WHERE einricht_id = $currentId"); + while ($row = mysqli_fetch_assoc($qLinked)) { + $preselect[] = $row['linked_einricht_id']; + } +} +?> + +
+ get("new_facility"); + } else { + echo $translation->get("edit_facility"); + } ?> +
+
+ + + + +
+ + +
+ "> + + +
+ get("description"), "input_description", "text", $input_role["description"], 100) ?> +
+ +
Verknüpfte Einrichtungen
+ + +
+
+ + + + +