feat(wiki): Beitragsliste für Betriebsrat-Nutzer auf zugängliche Kategorien filtern
BR-Nutzer (r-wiki-br ohne r-wiki) sehen in der Beitragsliste und im Kategorie-Dropdown nur Beiträge und Kategorien, die ihren freigegebenen Kategorien (betriebsrat_editable=1 + alle Nachfahren per BFS) zugeordnet sind. Der Filter wird server-seitig in post_listform.php berechnet und als Parameter an den Ajax-Endpunkt übergeben, da get_permission_state() im Ajax-Kontext nicht verfügbar ist. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -867,6 +867,39 @@ function require_wiki_edit_permission(): void
|
||||
}
|
||||
}
|
||||
|
||||
// Gibt alle Kategorie-IDs zurück, auf die Betriebsrat Zugriff hat:
|
||||
// direkt betriebsrat_editable=1 sowie alle ihre Nachfahren im Baum (BFS nach unten).
|
||||
function get_all_betriebsrat_accessible_category_ids(): array
|
||||
{
|
||||
$seeds = [];
|
||||
$res = mysqli_query($GLOBALS['mysql_con'],
|
||||
"SELECT id FROM knowledgecenter_categories_update WHERE betriebsrat_editable = 1");
|
||||
while ($row = mysqli_fetch_assoc($res)) {
|
||||
$seeds[] = (int)$row['id'];
|
||||
}
|
||||
if (empty($seeds)) {
|
||||
return [];
|
||||
}
|
||||
$visited = [];
|
||||
$queue = $seeds;
|
||||
while (!empty($queue)) {
|
||||
$current = array_shift($queue);
|
||||
if (isset($visited[$current])) {
|
||||
continue;
|
||||
}
|
||||
$visited[$current] = true;
|
||||
$cRes = mysqli_query($GLOBALS['mysql_con'],
|
||||
"SELECT child_category_id FROM knowledgecenter_category_links WHERE parent_category_id = $current");
|
||||
while ($cRow = mysqli_fetch_assoc($cRes)) {
|
||||
$cid = (int)$cRow['child_category_id'];
|
||||
if (!isset($visited[$cid])) {
|
||||
$queue[] = $cid;
|
||||
}
|
||||
}
|
||||
}
|
||||
return array_keys($visited);
|
||||
}
|
||||
|
||||
// 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
|
||||
|
||||
Reference in New Issue
Block a user