fix(wiki): Betriebsrat-UI vollständig korrigiert
- categories_posts_listform.php: brCategoryFilter entfernt, Betriebsrat sieht alle Kategorien (nur "Beitrag erstellen"-Button gefiltert) - post_cardform_article.php: Bearbeiten- und "Neue Version"-Button jetzt über \$canEditPost gesteuert statt hart auf r-wiki geprüft - post_cardform.php: Settings-Tab-Link und -Inhalt ebenfalls über \$canEditPost freigegeben - post_cardform_settings.php: Kategorie-Whitelist wird für Betriebsrat auf freigegebene Kategorien gefiltert (inkl. Vererbung); Speichern-Button und JS-Handler über \$canEditPost gesteuert Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -27,9 +27,7 @@ if (empty($GLOBALS['allowedRoles'])) {
|
||||
// Standard-Redirect-URL (zum Beispiel für Navigation)
|
||||
$redirectURL = isset($_GET['redirectURL']) ? $_GET['redirectURL'] : '?action=List';
|
||||
|
||||
// Betriebsrat sieht nur Kategorien, die für ihn freigegeben sind
|
||||
$_kcBrOnly = !is_wiki_redakteur() && is_wiki_betriebsrat();
|
||||
$brCategoryFilter = $_kcBrOnly ? 'AND c.betriebsrat_editable = 1' : '';
|
||||
?>
|
||||
<script>
|
||||
(function () {
|
||||
@@ -54,14 +52,12 @@ $brCategoryFilter = $_kcBrOnly ? 'AND c.betriebsrat_editable = 1' : '';
|
||||
<div class="titlebar-actions">
|
||||
<?php
|
||||
// "Beitrag erstellen" für Redakteur immer, für Betriebsrat nur in freigegebenen Kategorien
|
||||
// (inkl. Vererbung: Unterkategorien einer freigegebenen Kategorie gelten ebenfalls)
|
||||
$showCreateBtn = false;
|
||||
if (is_wiki_redakteur()) {
|
||||
$showCreateBtn = true;
|
||||
} elseif ($_kcBrOnly && isset($_GET['detail'])) {
|
||||
$brCatRes = mysqli_query($GLOBALS['mysql_con'],
|
||||
"SELECT betriebsrat_editable FROM knowledgecenter_categories_update WHERE id = " . (int)$_GET['detail'] . " LIMIT 1");
|
||||
$brCatRow = mysqli_fetch_assoc($brCatRes);
|
||||
$showCreateBtn = $brCatRow && (int)$brCatRow['betriebsrat_editable'];
|
||||
$showCreateBtn = is_category_betriebsrat_editable((int)$_GET['detail']);
|
||||
}
|
||||
if ($showCreateBtn) { ?>
|
||||
<a href="?action=NewPost&InitialCategory=<?= (int)($_GET["detail"] ?? 0) ?>"
|
||||
@@ -160,7 +156,6 @@ $brCategoryFilter = $_kcBrOnly ? 'AND c.betriebsrat_editable = 1' : '';
|
||||
AND ( cr.role_id IS NULL OR cr.role_id IN ($allowedRoles) )
|
||||
AND ( ce.einricht_id IS NULL OR ce.einricht_id IN ($allowedEinrichts) )
|
||||
AND ( cf.fachbereich_id IS NULL OR cf.fachbereich_id IN ($allowedFachbereiche) )
|
||||
$brCategoryFilter
|
||||
GROUP BY
|
||||
c.id
|
||||
ORDER BY
|
||||
@@ -314,7 +309,6 @@ $brCategoryFilter = $_kcBrOnly ? 'AND c.betriebsrat_editable = 1' : '';
|
||||
AND ( cr.role_id IS NULL OR cr.role_id IN ($allowedRoles) )
|
||||
AND ( ce.einricht_id IS NULL OR ce.einricht_id IN ($allowedEinrichts) )
|
||||
AND ( cf.fachbereich_id IS NULL OR cf.fachbereich_id IN ($allowedFachbereiche) )
|
||||
$brCategoryFilter
|
||||
GROUP BY
|
||||
c.id
|
||||
ORDER BY
|
||||
|
||||
@@ -150,12 +150,9 @@ $InitialProduct = isset($_GET['InitialProduct']) ? (int) $_GET['InitialProduct']
|
||||
if ($isNew) {
|
||||
require_wiki_edit_permission();
|
||||
|
||||
// Betriebsrat darf nur in Kategorien erstellen, die als betriebsrat_editable markiert sind
|
||||
// Betriebsrat darf nur in Kategorien erstellen, die für ihn freigegeben sind (inkl. Vererbung)
|
||||
if (!is_wiki_redakteur() && $initialCategoryId > 0) {
|
||||
$brCatRes = mysqli_query($GLOBALS['mysql_con'],
|
||||
"SELECT betriebsrat_editable FROM knowledgecenter_categories_update WHERE id = $initialCategoryId LIMIT 1");
|
||||
$brCatRow = mysqli_fetch_assoc($brCatRes);
|
||||
if (!$brCatRow || !(int)$brCatRow['betriebsrat_editable']) {
|
||||
if (!is_category_betriebsrat_editable($initialCategoryId)) {
|
||||
echo "<p>Sie haben nicht die Berechtigung, in dieser Kategorie zu erstellen.</p>";
|
||||
exit;
|
||||
}
|
||||
@@ -187,16 +184,18 @@ if ($isNew) {
|
||||
exit;
|
||||
}
|
||||
|
||||
// Schreibrechte: Redakteur darf alles; Betriebsrat nur in freigegebenen Kategorien
|
||||
// Schreibrechte: Redakteur darf alles; Betriebsrat nur in freigegebenen Kategorien (inkl. Vererbung)
|
||||
$canEditPost = is_wiki_redakteur();
|
||||
if (!$canEditPost && is_wiki_betriebsrat()) {
|
||||
$brEditRes = mysqli_query($GLOBALS['mysql_con'],
|
||||
"SELECT COUNT(*) AS cnt
|
||||
FROM knowledgecenter_category_post kcp
|
||||
JOIN knowledgecenter_categories_update kcu ON kcu.id = kcp.category_id
|
||||
WHERE kcp.post_id = $postId AND kcu.betriebsrat_editable = 1");
|
||||
$brEditRow = mysqli_fetch_assoc($brEditRes);
|
||||
$canEditPost = ($brEditRow && (int)$brEditRow['cnt'] > 0);
|
||||
$brCatRes = mysqli_query($GLOBALS['mysql_con'],
|
||||
"SELECT category_id FROM knowledgecenter_category_post WHERE post_id = $postId");
|
||||
$canEditPost = false;
|
||||
while ($brCatRow = mysqli_fetch_assoc($brCatRes)) {
|
||||
if (is_category_betriebsrat_editable((int)$brCatRow['category_id'])) {
|
||||
$canEditPost = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Beitrag aus der Haupttabelle abrufen
|
||||
$sqlPost = "SELECT * FROM knowledgecenter_posts WHERE id = $postId LIMIT 1";
|
||||
@@ -383,7 +382,7 @@ if ($resLinkedForm && mysqli_num_rows($resLinkedForm) > 0) {
|
||||
<a href="#tab-files"><?= $translation->get("files") ?> (<?php echo $fileCount; ?>)</a>
|
||||
<a href="#tab-contacts"><?= $translation->get("Ansprechpartner") ?> (<?php echo $contactCount; ?>)</a>
|
||||
<a href="#tab-versions"><?= $translation->get("version_history") ?> (<?php echo $versionCount; ?>)</a>
|
||||
<?php if (is_wiki_redakteur()) { ?>
|
||||
<?php if ($canEditPost ?? false) { ?>
|
||||
<a href="#tab-settings"><?= $translation->get("settings") ?></a>
|
||||
<?php } ?>
|
||||
</div>
|
||||
@@ -451,7 +450,7 @@ if ($resLinkedForm && mysqli_num_rows($resLinkedForm) > 0) {
|
||||
require_once 'post_cardform_version_history.php';
|
||||
?>
|
||||
</div>
|
||||
<?php if (is_wiki_redakteur()) { ?>
|
||||
<?php if ($canEditPost ?? false) { ?>
|
||||
<div id="tab-settings" class="tab-content">
|
||||
<?php
|
||||
require_once 'post_cardform_settings.php';
|
||||
|
||||
@@ -121,14 +121,9 @@
|
||||
<h1 id="displayTitle"><?php echo htmlspecialchars($currentVersion['title']); ?></h1>
|
||||
<?php endif; ?>
|
||||
<div>
|
||||
<?php if (!empty($postId) && $postId > 0): ?>
|
||||
<?php if (get_permission_state('r-wiki', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1): ?>
|
||||
<span id="editBtn" class="post-action-btn grey" title="Aktuelle Version bearbeiten">✎</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (get_permission_state('r-wiki', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1): ?>
|
||||
<span id="createBtn" class="green" title="Neue Version erstellen">Neue Version erstellen +</span>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($postId) && $postId > 0 && ($canEditPost ?? false)): ?>
|
||||
<span id="editBtn" class="post-action-btn grey" title="Aktuelle Version bearbeiten">✎</span>
|
||||
<span id="createBtn" class="green" title="Neue Version erstellen">Neue Version erstellen +</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -36,15 +36,19 @@ while ($row = mysqli_fetch_assoc($result)) {
|
||||
|
||||
// -------------------- Kategorien --------------------
|
||||
// Erzeuge die Whitelist für alle verfügbaren Kategorien (mit Übersetzung)
|
||||
// Betriebsrat sieht nur Kategorien, die für ihn freigegeben sind (direkt oder über Elternkategorie)
|
||||
$categoriesData = [];
|
||||
$query = "SELECT c.id, t.title, c.enable_post_color_pickers
|
||||
$query = "SELECT c.id, t.title, c.enable_post_color_pickers
|
||||
FROM knowledgecenter_categories_update AS c
|
||||
LEFT JOIN knowledgecenter_category_translations AS t
|
||||
ON c.id = t.category_id
|
||||
LEFT JOIN knowledgecenter_category_translations AS t
|
||||
ON c.id = t.category_id
|
||||
WHERE t.language_id = $languageId";
|
||||
$result = mysqli_query($GLOBALS['mysql_con'], $query);
|
||||
$isBrOnly = !is_wiki_redakteur() && is_wiki_betriebsrat();
|
||||
while ($row = mysqli_fetch_assoc($result)) {
|
||||
// Hier wird der in der Übersetzungstabelle gespeicherte Titel als 'name' verwendet.
|
||||
if ($isBrOnly && !is_category_betriebsrat_editable((int)$row['id'])) {
|
||||
continue;
|
||||
}
|
||||
$categoriesData[] = [
|
||||
'value' => $row['id'],
|
||||
'name' => $row['title'],
|
||||
@@ -185,7 +189,7 @@ if (!empty($post['text_color'])) {
|
||||
<button id="message" style="opacity:0; position: absolute;"></button>
|
||||
<div class="titlebar_small">
|
||||
<h2><?=$translation->get("settings")?></h2>
|
||||
<?php if (get_permission_state('r-wiki', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) { ?>
|
||||
<?php if ($canEditPost ?? false) { ?>
|
||||
<span id="saveAllBtn" class="post-action-btn-small green"><?= $saveIcon ?></span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
@@ -424,7 +428,7 @@ if (!empty($post['text_color'])) {
|
||||
tagifyPostFachbereiche.addTags(selectedPostFachbereiche);
|
||||
}
|
||||
|
||||
<?php if (get_permission_state('r-wiki', $GLOBALS['main_contact']['master_mandant_id'], $GLOBALS['main_contact']['id']) == 1) { ?>
|
||||
<?php if ($canEditPost ?? false) { ?>
|
||||
$("#saveAllBtn").on("click", function () {
|
||||
// Während des Speicherns blurren
|
||||
$("#tab-settings").addClass("blurred");
|
||||
|
||||
Reference in New Issue
Block a user