knowledgecenter: add Einrichtung/Fachbereich to category permission form
categories_cardform.php now loads and displays tagify pickers for Einrichtungen and Fachbereiche alongside the existing Mandant/Abteilung/Rolle pickers. The saveTagifyData() function passes all 5 types to update_category_links. Also ran DB migration: all permission data from the 5 old _link tables has been copied into the new permission tables (mandant: 178, department: 1108, role: 2159, einricht: 10023, fachbereich: 2722 rows). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,52 @@ foreach ($roles as $role) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Einrichtungen abrufen
|
||||||
|
$einrichts = [];
|
||||||
|
$resultEinrichts = mysqli_query($GLOBALS['mysql_con'], "SELECT id, description FROM organigramm_einricht ORDER BY description ASC");
|
||||||
|
while ($row = mysqli_fetch_assoc($resultEinrichts)) {
|
||||||
|
$einrichts[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fachbereiche abrufen
|
||||||
|
$fachbereiche = [];
|
||||||
|
$resultFachbereiche = mysqli_query($GLOBALS['mysql_con'], "SELECT id, description FROM organogramm_space ORDER BY description ASC");
|
||||||
|
while ($row = mysqli_fetch_assoc($resultFachbereiche)) {
|
||||||
|
$fachbereiche[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gespeicherte Einrichtungen abrufen
|
||||||
|
$savedEinrichts = [];
|
||||||
|
$querySavedEinrichts = "SELECT einricht_id FROM knowledgecenter_category_einricht WHERE category_id = $categoryId";
|
||||||
|
$resultSavedEinrichts = mysqli_query($GLOBALS['mysql_con'], $querySavedEinrichts);
|
||||||
|
while ($row = mysqli_fetch_assoc($resultSavedEinrichts)) {
|
||||||
|
$savedEinrichts[] = $row['einricht_id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Array mit Daten für Tagify (Einrichtungen)
|
||||||
|
$savedEinrichtsData = [];
|
||||||
|
foreach ($einrichts as $einricht) {
|
||||||
|
if (in_array($einricht['id'], $savedEinrichts)) {
|
||||||
|
$savedEinrichtsData[] = ['value' => $einricht['id'], 'name' => $einricht['description']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gespeicherte Fachbereiche abrufen
|
||||||
|
$savedFachbereiche = [];
|
||||||
|
$querySavedFachbereiche = "SELECT fachbereich_id FROM knowledgecenter_category_fachbereich WHERE category_id = $categoryId";
|
||||||
|
$resultSavedFachbereiche = mysqli_query($GLOBALS['mysql_con'], $querySavedFachbereiche);
|
||||||
|
while ($row = mysqli_fetch_assoc($resultSavedFachbereiche)) {
|
||||||
|
$savedFachbereiche[] = $row['fachbereich_id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Array mit Daten für Tagify (Fachbereiche)
|
||||||
|
$savedFachbereicheData = [];
|
||||||
|
foreach ($fachbereiche as $fachbereich) {
|
||||||
|
if (in_array($fachbereich['id'], $savedFachbereiche)) {
|
||||||
|
$savedFachbereicheData[] = ['value' => $fachbereich['id'], 'name' => $fachbereich['description']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Kategorie auslesen
|
// Kategorie auslesen
|
||||||
$query = "SELECT c.* FROM knowledgecenter_categories_update AS c WHERE c.id = $categoryId LIMIT 1";
|
$query = "SELECT c.* FROM knowledgecenter_categories_update AS c WHERE c.id = $categoryId LIMIT 1";
|
||||||
$result = mysqli_query($GLOBALS['mysql_con'], $query);
|
$result = mysqli_query($GLOBALS['mysql_con'], $query);
|
||||||
@@ -383,6 +429,16 @@ $parentCount = count($parentCategories);
|
|||||||
<input type="text" id="selected_roles" name="selected_roles"
|
<input type="text" id="selected_roles" name="selected_roles"
|
||||||
value='<?= htmlspecialchars(json_encode($savedRolesData)); ?>'>
|
value='<?= htmlspecialchars(json_encode($savedRolesData)); ?>'>
|
||||||
</label>
|
</label>
|
||||||
|
<label for="selected_einrichts">
|
||||||
|
Einrichtungen
|
||||||
|
<input type="text" id="selected_einrichts" name="selected_einrichts"
|
||||||
|
value='<?= htmlspecialchars(json_encode($savedEinrichtsData)); ?>'>
|
||||||
|
</label>
|
||||||
|
<label for="selected_fachbereiche">
|
||||||
|
Fachbereiche
|
||||||
|
<input type="text" id="selected_fachbereiche" name="selected_fachbereiche"
|
||||||
|
value='<?= htmlspecialchars(json_encode($savedFachbereicheData)); ?>'>
|
||||||
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
@@ -486,11 +542,13 @@ $parentCount = count($parentCategories);
|
|||||||
processNextForm();
|
processNextForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Funktion zum Speichern der Tagify-Daten (Mandanten, Departments, Rollen)
|
// Funktion zum Speichern der Tagify-Daten (Mandanten, Departments, Rollen, Einrichtungen, Fachbereiche)
|
||||||
function saveTagifyData() {
|
function saveTagifyData() {
|
||||||
var mandants = JSON.stringify(tagifyMandants.value.map(function (t) { return t.value; }));
|
var mandants = JSON.stringify(tagifyMandants.value.map(function (t) { return t.value; }));
|
||||||
var departments = JSON.stringify(tagifyDepartments.value.map(function (t) { return t.value; }));
|
var departments = JSON.stringify(tagifyDepartments.value.map(function (t) { return t.value; }));
|
||||||
var roles = JSON.stringify(tagifyRoles.value.map(function (t) { return t.value; }));
|
var roles = JSON.stringify(tagifyRoles.value.map(function (t) { return t.value; }));
|
||||||
|
var einrichts = JSON.stringify(tagifyEinrichts.value.map(function (t) { return t.value; }));
|
||||||
|
var fachbereiche = JSON.stringify(tagifyFachbereiche.value.map(function (t) { return t.value; }));
|
||||||
|
|
||||||
$.post("/module/knowledgecenter_update/Ajax/Ajax.php", {
|
$.post("/module/knowledgecenter_update/Ajax/Ajax.php", {
|
||||||
action: "update_category_links",
|
action: "update_category_links",
|
||||||
@@ -498,6 +556,8 @@ $parentCount = count($parentCategories);
|
|||||||
mandants: mandants,
|
mandants: mandants,
|
||||||
departments: departments,
|
departments: departments,
|
||||||
roles: roles,
|
roles: roles,
|
||||||
|
einrichts: einrichts,
|
||||||
|
fachbereiche: fachbereiche,
|
||||||
modified_by: $("#modified_by").val()
|
modified_by: $("#modified_by").val()
|
||||||
}, function (response) {
|
}, function (response) {
|
||||||
if (!response.success) {
|
if (!response.success) {
|
||||||
@@ -511,6 +571,12 @@ $parentCount = count($parentCategories);
|
|||||||
|
|
||||||
tagifyRoles.removeAllTags();
|
tagifyRoles.removeAllTags();
|
||||||
tagifyRoles.addTags(response.roles);
|
tagifyRoles.addTags(response.roles);
|
||||||
|
|
||||||
|
tagifyEinrichts.removeAllTags();
|
||||||
|
tagifyEinrichts.addTags(response.einrichts);
|
||||||
|
|
||||||
|
tagifyFachbereiche.removeAllTags();
|
||||||
|
tagifyFachbereiche.addTags(response.fachbereiche);
|
||||||
}
|
}
|
||||||
}, "json");
|
}, "json");
|
||||||
}
|
}
|
||||||
@@ -738,6 +804,52 @@ $parentCount = count($parentCategories);
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var einrichtsData = <?php echo json_encode(array_map(function ($item) {
|
||||||
|
return ['value' => $item['id'], 'name' => $item['description']];
|
||||||
|
}, $einrichts)); ?>;
|
||||||
|
|
||||||
|
var fachbereicheData = <?php echo json_encode(array_map(function ($item) {
|
||||||
|
return ['value' => $item['id'], 'name' => $item['description']];
|
||||||
|
}, $fachbereiche)); ?>;
|
||||||
|
|
||||||
|
var tagifyEinrichts = new Tagify(document.getElementById('selected_einrichts'), {
|
||||||
|
whitelist: einrichtsData,
|
||||||
|
tagTextProp: 'name',
|
||||||
|
enforceWhitelist: true,
|
||||||
|
dropdown: {
|
||||||
|
enabled: 0,
|
||||||
|
maxItems: Infinity,
|
||||||
|
searchKeys: ["name"]
|
||||||
|
},
|
||||||
|
templates: {
|
||||||
|
dropdownItem: function (tagData) {
|
||||||
|
return `<div ${this.getAttributes(tagData)}
|
||||||
|
class="tagify__dropdown__item">
|
||||||
|
<span>${tagData.name}</span>
|
||||||
|
</div>`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var tagifyFachbereiche = new Tagify(document.getElementById('selected_fachbereiche'), {
|
||||||
|
whitelist: fachbereicheData,
|
||||||
|
tagTextProp: 'name',
|
||||||
|
enforceWhitelist: true,
|
||||||
|
dropdown: {
|
||||||
|
enabled: 0,
|
||||||
|
maxItems: Infinity,
|
||||||
|
searchKeys: ["name"]
|
||||||
|
},
|
||||||
|
templates: {
|
||||||
|
dropdownItem: function (tagData) {
|
||||||
|
return `<div ${this.getAttributes(tagData)}
|
||||||
|
class="tagify__dropdown__item">
|
||||||
|
<span>${tagData.name}</span>
|
||||||
|
</div>`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Handler für das Löschen einer Kategorie
|
// Handler für das Löschen einer Kategorie
|
||||||
$("#deleteCategory").on("click", function () {
|
$("#deleteCategory").on("click", function () {
|
||||||
if (confirm("Möchten Sie diese Kategorie wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.")) {
|
if (confirm("Möchten Sie diese Kategorie wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user