Update from Git Manager GUI
This commit is contained in:
@@ -367,6 +367,11 @@ function wbf_admin_page() {
|
||||
$existing = $wpdb->get_col("SHOW TABLES LIKE '{$wpdb->prefix}forum_%'");
|
||||
$missing = array_filter($exp_tables, fn($t) => !in_array($wpdb->prefix.$t, $existing));
|
||||
|
||||
// ── MC Bridge StatusAPI ───────────────────────────────────────────────────
|
||||
$mc_s = wbf_get_settings();
|
||||
$mc_enabled = ! empty( $mc_s['mc_bridge_enabled'] );
|
||||
$mc_api_url = trim( $mc_s['mc_bridge_api_url'] ?? '' );
|
||||
|
||||
// ── Trends ────────────────────────────────────────────────────────────────
|
||||
$pt = (int)$wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}forum_posts WHERE deleted_at IS NULL AND created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)");
|
||||
$pl = (int)$wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}forum_posts WHERE deleted_at IS NULL AND created_at BETWEEN DATE_SUB(NOW(), INTERVAL 14 DAY) AND DATE_SUB(NOW(), INTERVAL 7 DAY)");
|
||||
@@ -482,6 +487,11 @@ function wbf_admin_page() {
|
||||
</div>
|
||||
|
||||
<!-- ═══════════ SYSTEM BAR ════════════════════════════════════════════════ -->
|
||||
<?php
|
||||
// Plugin-Status prüfen
|
||||
$gallery_active = class_exists('MC_Gallery_Core');
|
||||
$shop_active = class_exists('WIS_DB');
|
||||
?>
|
||||
<div class="wbf-sysbar">
|
||||
<span class="wbf-sysbar__label">System</span>
|
||||
<span class="wbf-sbadge <?php echo $php_rec?'wbf-sbadge--ok':($php_ok?'wbf-sbadge--warn':'wbf-sbadge--err'); ?>">
|
||||
@@ -494,11 +504,57 @@ function wbf_admin_page() {
|
||||
<i class="fas fa-<?php echo $mail_ok?'envelope-circle-check':'xmark'; ?>"></i> wp_mail
|
||||
</span>
|
||||
<div class="wbf-sdivider"></div>
|
||||
<span class="wbf-sbadge <?php echo $gallery_active?'wbf-sbadge--ok':'wbf-sbadge--err'; ?>">
|
||||
<i class="fas fa-images"></i> Galerie: <?php echo $gallery_active?'Aktiv':'Nicht aktiv'; ?>
|
||||
</span>
|
||||
<span class="wbf-sbadge <?php echo $shop_active?'wbf-sbadge--ok':'wbf-sbadge--err'; ?>">
|
||||
<i class="fas fa-shopping-cart"></i> Shop: <?php echo $shop_active?'Aktiv':'Nicht aktiv'; ?>
|
||||
</span>
|
||||
<div class="wbf-sdivider"></div>
|
||||
<?php if (empty($missing)): ?>
|
||||
<span class="wbf-sbadge wbf-sbadge--ok"><i class="fas fa-table-columns"></i> <?php echo count($exp_tables); ?> Tabellen OK</span>
|
||||
<?php else: ?>
|
||||
<span class="wbf-sbadge wbf-sbadge--err"><i class="fas fa-triangle-exclamation"></i> Fehlende Tabellen: <?php echo esc_html(implode(', ',$missing)); ?></span>
|
||||
<?php endif; ?>
|
||||
<div class="wbf-sdivider"></div>
|
||||
<?php if ( ! $mc_enabled ) : ?>
|
||||
<span class="wbf-sbadge" style="color:#94a3b8;border-color:#e2e8f0;background:#f8fafc" title="MC Bridge in den Einstellungen aktivieren">
|
||||
<i class="fas fa-cubes"></i> MC Bridge: Aus
|
||||
</span>
|
||||
<?php elseif ( empty( $mc_api_url ) ) : ?>
|
||||
<span class="wbf-sbadge wbf-sbadge--warn" title="Keine API-URL konfiguriert">
|
||||
<i class="fas fa-cubes"></i> StatusAPI: Nicht konfiguriert
|
||||
</span>
|
||||
<?php else : ?>
|
||||
<span id="wbf-mc-status-badge" class="wbf-sbadge wbf-sbadge--err" title="Verbindung wird geprüft...">
|
||||
<i class="fas fa-spinner fa-spin"></i> StatusAPI: Prüfe...
|
||||
</span>
|
||||
<script>
|
||||
(function() {
|
||||
var badge = document.getElementById('wbf-mc-status-badge');
|
||||
if (!badge) return;
|
||||
var url = <?php echo json_encode( rest_url( 'mc-bridge/v1/status' ) ); ?>;
|
||||
fetch(url, { cache: 'no-store' })
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(d) {
|
||||
if (d && d.success && d.enabled) {
|
||||
badge.className = 'wbf-sbadge wbf-sbadge--ok';
|
||||
badge.title = 'MC Bridge aktiv — Verbindung hergestellt';
|
||||
badge.innerHTML = '<i class="fas fa-cubes"></i> StatusAPI: Verbunden';
|
||||
} else {
|
||||
badge.className = 'wbf-sbadge wbf-sbadge--err';
|
||||
badge.title = 'MC Bridge deaktiviert oder Fehler';
|
||||
badge.innerHTML = '<i class="fas fa-cubes"></i> StatusAPI: Nicht verbunden';
|
||||
}
|
||||
})
|
||||
.catch(function() {
|
||||
badge.className = 'wbf-sbadge wbf-sbadge--err';
|
||||
badge.title = 'WordPress REST-Endpoint nicht erreichbar';
|
||||
badge.innerHTML = '<i class="fas fa-cubes"></i> StatusAPI: Nicht verbunden';
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
<span style="margin-left:auto;font-size:.7rem;color:#94a3b8"><?php echo $online_count; ?> gerade online</span>
|
||||
</div>
|
||||
|
||||
@@ -1346,6 +1402,20 @@ function wbf_admin_members() {
|
||||
}
|
||||
}
|
||||
}
|
||||
// ── Admin: 2FA eines Users zurücksetzen ──────────────────────────────────
|
||||
if ( isset( $_POST['wbf_admin_reset_2fa'] ) && check_admin_referer( 'wbf_admin_2fa_nonce' ) ) {
|
||||
if ( current_user_can('manage_options') && class_exists('WBF_TOTP') ) {
|
||||
$uid = (int) ( $_POST['user_id'] ?? 0 );
|
||||
if ( $uid ) {
|
||||
$target = WBF_DB::get_user( $uid );
|
||||
if ( $target && $target->role !== WBF_Roles::SUPERADMIN ) {
|
||||
WBF_TOTP::disable_for( $uid );
|
||||
echo '<div class="notice notice-success is-dismissible"><p>2FA für <strong>'
|
||||
. esc_html($target->display_name) . '</strong> zurückgesetzt.</p></div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$members = WBF_DB::get_all_users( 200 );
|
||||
$s_discord = wbf_get_settings();
|
||||
@@ -1546,6 +1616,30 @@ function wbf_admin_members() {
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- 2FA Admin-Panel -->
|
||||
<?php if ( class_exists('WBF_TOTP') && ! $is_sa ) : ?>
|
||||
<div id="wbf-2fa-admin-<?php echo (int)$m->id; ?>"
|
||||
style="margin-top:6px;padding:8px 10px;background:#fefce8;border:1px solid #fde68a;border-radius:4px;font-size:12px">
|
||||
<strong style="color:#92400e"><i class="fas fa-shield-halved"></i> 2FA-Status:</strong>
|
||||
<?php if ( WBF_TOTP::is_enabled_for($m->id) ) : ?>
|
||||
<span style="color:#16a34a;font-weight:600"> ✔ Aktiv</span>
|
||||
<form method="post" style="display:inline;margin-left:10px">
|
||||
<?php wp_nonce_field( 'wbf_admin_2fa_nonce' ); ?>
|
||||
<input type="hidden" name="user_id" value="<?php echo (int)$m->id; ?>">
|
||||
<button type="submit" name="wbf_admin_reset_2fa"
|
||||
class="button button-small"
|
||||
style="color:#dc2626;border-color:rgba(220,38,38,.4);font-size:11px"
|
||||
onclick="return confirm('2FA für <?php echo esc_js($m->display_name); ?> zurücksetzen?')">
|
||||
<span class="dashicons dashicons-unlock" style="font-size:13px;width:13px;height:13px;vertical-align:-2px"></span>
|
||||
2FA zurücksetzen
|
||||
</button>
|
||||
</form>
|
||||
<?php else : ?>
|
||||
<span style="color:#9ca3af"> — Nicht aktiv</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Inline Profil-Editor -->
|
||||
<div id="wbf-edit-user-<?php echo (int)$m->id; ?>" style="display:none;margin-top:8px;padding:12px;background:#f9f9f9;border:1px solid #ddd;border-radius:4px;max-width:480px">
|
||||
<strong style="font-size:13px">Profil bearbeiten: <?php echo esc_html($m->display_name); ?></strong>
|
||||
|
||||
Reference in New Issue
Block a user