'Community Forum', 'hero_subtitle' => 'Diskutiere, teile Ideen und bleib immer informiert.', // Topbar 'topbar_brand' => 'Community', // Statistik-Labels 'stat_threads' => 'Threads', 'stat_posts' => 'Beiträge', 'stat_members' => 'Mitglieder', // Abschnitt-Überschriften 'section_cats' => 'Kategorien', 'section_recent' => 'Neue Threads', // Buttons 'btn_new_thread' => 'Neuer Thread', 'btn_login' => 'Einloggen', 'btn_register' => 'Registrieren', 'btn_logout' => 'Logout', // Sidebar 'sidebar_profile' => 'Mein Profil', 'sidebar_login' => 'Login / Registrieren', // Sicherheit 'auto_logout_minutes' => '30', // Wartungsmodus 'maintenance_mode' => '0', 'maintenance_title' => 'Wartungsarbeiten', 'maintenance_message' => 'Das Forum wird gerade gewartet. Bitte versuche es später erneut.', 'registration_enabled' => '1', 'registration_mode' => 'open', 'post_edit_limit' => '30', 'profile_public_default' => '1', 'spam_min_seconds' => '30', // open | invite | disabled 'flood_interval' => '30', // Flood Control: Sekunden zwischen Posts 'invite_message' => 'Registrierung ist aktuell nur auf Einladung möglich.', // Forum-Regeln / Nutzungsbedingungen 'rules_enabled' => '1', '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', [] ); // Fehlende Keys mit Defaults auffüllen, leere Strings ignorieren return array_merge( $defaults, array_filter( (array) $saved, 'strlen' ) ); } } // ── 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() { // Speichern if ( isset( $_POST['wbf_save_settings'] ) && check_admin_referer( 'wbf_settings_nonce' ) ) { $fields = [ 'hero_title', 'hero_subtitle', 'topbar_brand', 'stat_threads', 'stat_posts', 'stat_members', 'section_cats', 'section_recent', 'btn_new_thread', 'btn_login', 'btn_register', 'btn_logout', 'sidebar_profile', 'sidebar_login', 'auto_logout_minutes', 'post_edit_limit', 'spam_min_seconds', 'flood_interval', 'profile_public_default', 'registration_enabled', 'registration_mode', 'invite_message', 'maintenance_mode', 'maintenance_title', 'maintenance_message', 'post_edit_limit', 'profile_public_default', 'spam_min_seconds', 'rules_enabled', 'rules_accept_required', 'rules_title', ]; $settings = []; foreach ( $fields as $key ) { if ( in_array( $key, ['maintenance_message', 'rules_content'] ) ) { $settings[$key] = sanitize_textarea_field($_POST[$key] ?? ''); } else { $settings[ $key ] = sanitize_text_field( $_POST[ $key ] ?? '' ); } } // 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 '

✅ Einstellungen gespeichert!

'; } $s = wbf_get_settings(); // Inline-Hilfsfunktion für eine Tabellenzeile $row = function( $label, $name, $placeholder, $desc = '' ) use ( $s ) { $val = esc_attr( $s[ $name ] ?? '' ); echo " " . ( $desc ? "

{$desc}

" : '' ) . " "; }; ?>

⚙️ Forum-Einstellungen

Alle sichtbaren Texte des Forums — kein Code nötig.

🏠 Hero-Bereich (Startseite)

🔝 Topbar (Navigationsleiste)

📊 Statistik-Labels

📂 Abschnitt-Überschriften

👤 Sidebar

🔒 Sicherheit

✏️ Beiträge & Spam-Schutz

🔧 Wartungsmodus

📝 Registrierung

📜 Forum-Regeln / Nutzungsbedingungen

🚫 Ignore / Block-System

'margin-top:1rem' ] ); ?>

📋 Aktuelle Werte

$val ): ?>
SchlüsselAktueller Wert