feat(wiki): Kategorienvererbung für betriebsrat_editable, Ajax-Absicherung
- is_category_betriebsrat_editable(): läuft den Kategoriebaum nach oben durch (via knowledgecenter_category_links), sodass Unterkategorien einer freigegebenen Kategorie automatisch ebenfalls als editierbar gelten - ajax_is_category_editable_for_br(): gleiche Logik für den Ajax-Kontext - ajax_can_edit_post(): nutzt jetzt Vererbung statt direkter Kategorienprüfung - create_post_draft(): ajax_has_wiki_edit()-Check hinzugefügt - update_post_version(): Permission-Check mit Sonderfall neue Drafts (noch keine Kategorien → Prüfung auf has_wiki_edit begrenzt) - update_post_categories(): Betriebsrat darf nur freigegebene Kategorien (inkl. Vererbung) zuweisen - upload_inline_image.php: Bild-Upload prüft ebenfalls den Kategoriebaum Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -867,6 +867,36 @@ function require_wiki_edit_permission(): void
|
||||
}
|
||||
}
|
||||
|
||||
// Prüft ob eine Kategorie (oder irgendein Vorfahre über knowledgecenter_category_links)
|
||||
// betriebsrat_editable=1 hat. Läuft den Baum nach oben durch.
|
||||
function is_category_betriebsrat_editable(int $categoryId): bool
|
||||
{
|
||||
$visited = [];
|
||||
$queue = [$categoryId];
|
||||
while (!empty($queue)) {
|
||||
$current = array_shift($queue);
|
||||
if (isset($visited[$current])) {
|
||||
continue;
|
||||
}
|
||||
$visited[$current] = true;
|
||||
$res = mysqli_query($GLOBALS['mysql_con'],
|
||||
"SELECT betriebsrat_editable FROM knowledgecenter_categories_update WHERE id = $current LIMIT 1");
|
||||
$row = mysqli_fetch_assoc($res);
|
||||
if ($row && (int)$row['betriebsrat_editable'] === 1) {
|
||||
return true;
|
||||
}
|
||||
$pRes = mysqli_query($GLOBALS['mysql_con'],
|
||||
"SELECT parent_category_id FROM knowledgecenter_category_links WHERE child_category_id = $current");
|
||||
while ($pRow = mysqli_fetch_assoc($pRes)) {
|
||||
$pid = (int)$pRow['parent_category_id'];
|
||||
if (!isset($visited[$pid])) {
|
||||
$queue[] = $pid;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Switch-Case für die verschiedenen Aktionen
|
||||
$action = $_GET["action"] ?? "List";
|
||||
switch ($action) {
|
||||
|
||||
Reference in New Issue
Block a user