Update from Git Manager GUI

This commit is contained in:
2026-03-22 00:40:15 +01:00
parent 44672a61aa
commit dfdc74bcf9
2 changed files with 566 additions and 7 deletions

View File

@@ -52,6 +52,8 @@ if ( ! function_exists('wbf_get_settings') ) {
'rules_accept_required' => '1',
'rules_title' => 'Forum-Regeln & Nutzungsbedingungen',
'rules_content' => "**1. Respektvoller Umgang**\nBehandle alle Mitglieder freundlich und respektvoll. Beleidigungen, Mobbing und Diskriminierung sind nicht toleriert.\n\n**2. Keine Spam-Inhalte**\nWerbung, Spam und irrelevante Links sind verboten.\n\n**3. Keine illegalen Inhalte**\nJegliche Inhalte, die gegen geltendes Recht verstoßen, sind streng verboten.\n\n**4. Themenrelevanz**\nBeiträge sollten zur jeweiligen Kategorie passen.\n\n**5. Urheberrecht**\nVeröffentliche keine Inhalte, an denen du keine Rechte besitzt.\n\n**6. Datenschutz**\nTeile keine persönlichen Daten anderer Personen ohne deren Zustimmung.\n\n**7. Moderations-Entscheidungen**\nEntscheidungen der Moderatoren sind zu respektieren. Bei Fragen wende dich direkt ans Team.\n\nVerstöße können zur Verwarnung oder dauerhaften Sperrung führen.",
// Ignore/Block-System: Rollen die nicht geblockt werden können (kommagetrennte Schlüssel)
'ignore_blocked_roles' => 'superadmin,admin,moderator',
];
$saved = get_option( 'wbf_settings', [] );
@@ -63,6 +65,38 @@ if ( ! function_exists('wbf_get_settings') ) {
// ── Admin-Seite ───────────────────────────────────────────────────────────────
/**
* Gibt ein Array der Rollen-Keys zurück die nicht geblockt/ignoriert werden können.
* Superadmin ist immer enthalten — unabhängig von der Einstellung.
*
* @return string[] z.B. ['superadmin', 'admin', 'moderator']
*/
if ( ! function_exists('wbf_get_ignore_blocked_roles') ) {
function wbf_get_ignore_blocked_roles() {
$raw = wbf_get_settings()['ignore_blocked_roles'] ?? 'superadmin,admin,moderator';
$keys = array_filter( array_map( 'trim', explode( ',', $raw ) ) );
// superadmin immer schützen
if ( ! in_array('superadmin', $keys, true) ) {
$keys[] = 'superadmin';
}
return array_values( $keys );
}
}
/**
* Prüft ob ein User ignoriert/geblockt werden darf.
*
* @param object $target Forum-User-Objekt
* @return bool true = darf ignoriert werden, false = nicht erlaubt
*/
if ( ! function_exists('wbf_can_be_ignored') ) {
function wbf_can_be_ignored( $target ) {
if ( ! $target ) return false;
$blocked_roles = wbf_get_ignore_blocked_roles();
return ! in_array( $target->role, $blocked_roles, true );
}
}
if ( ! function_exists('wbf_admin_settings') ) {
function wbf_admin_settings() {
@@ -96,6 +130,18 @@ function wbf_admin_settings() {
// rules_content separat (nicht in $fields, da textarea mit eigener Behandlung)
$settings['rules_content'] = sanitize_textarea_field( $_POST['rules_content'] ?? '' );
// ignore_blocked_roles: kommagetrennte Liste der gewählten Rollen-Keys
$all_role_keys = array_keys( WBF_Roles::get_all() );
$checked_roles = array_intersect(
array_map( 'sanitize_key', (array)( $_POST['ignore_blocked_roles'] ?? [] ) ),
$all_role_keys
);
// superadmin ist immer blockiert — kann nicht entfernt werden
if ( ! in_array('superadmin', $checked_roles, true) ) {
$checked_roles[] = 'superadmin';
}
$settings['ignore_blocked_roles'] = implode( ',', $checked_roles );
update_option( 'wbf_settings', $settings );
echo '<div class="notice notice-success is-dismissible"><p>✅ Einstellungen gespeichert!</p></div>';
}
@@ -401,6 +447,51 @@ function wbf_admin_settings() {
</tr>
</table>
<!-- ── Ignore / Block-System ────────────────────────── -->
<h2 style="border-bottom:1px solid #ddd;padding-bottom:.4rem;margin-top:1.5rem">
🚫 Ignore / Block-System
</h2>
<table class="form-table" role="presentation">
<tr>
<th scope="row"><label>Nicht blockierbare Rollen</label></th>
<td>
<?php
$blocked_roles = array_filter( array_map('trim', explode(',', $s['ignore_blocked_roles'] ?? 'superadmin,admin,moderator')) );
$all_roles = WBF_Roles::get_sorted();
foreach ( $all_roles as $key => $role ):
$is_superadmin = ($key === 'superadmin');
$is_checked = in_array($key, $blocked_roles, true);
$rc = esc_attr($role['color']);
$rb = esc_attr($role['bg_color']);
?>
<label style="display:flex;align-items:center;gap:8px;margin-bottom:7px;cursor:<?php echo $is_superadmin?'not-allowed':'pointer'; ?>">
<input type="checkbox"
name="ignore_blocked_roles[]"
value="<?php echo esc_attr($key); ?>"
<?php checked($is_checked, true); ?>
<?php echo $is_superadmin ? 'disabled' : ''; ?>
style="width:16px;height:16px;accent-color:<?php echo $rc; ?>">
<?php if ($is_superadmin): ?>
<!-- superadmin immer als hidden mitschicken da disabled nicht übermittelt wird -->
<input type="hidden" name="ignore_blocked_roles[]" value="superadmin">
<?php endif; ?>
<span style="display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:20px;font-size:.78rem;font-weight:700;color:<?php echo $rc; ?>;background:<?php echo $rb; ?>;border:1px solid <?php echo $rc; ?>">
<i class="<?php echo esc_attr($role['icon'] ?? 'fas fa-user'); ?>"></i>
<?php echo esc_html($role['label']); ?>
</span>
<?php if ($is_superadmin): ?>
<span style="font-size:.72rem;color:#999">(immer geschützt)</span>
<?php endif; ?>
</label>
<?php endforeach; ?>
<p class="description" style="margin-top:8px">
Nutzer mit diesen Rollen können von anderen Mitgliedern <strong>nicht</strong> geblockt oder ignoriert werden.
Superadmin ist permanent geschützt und kann nicht abgewählt werden.
</p>
</td>
</tr>
</table>
<?php submit_button(
'💾 Einstellungen speichern',
'primary',