From e40324daa838a3d4d09768b079d88f6a95d21909 Mon Sep 17 00:00:00 2001 From: Git Manager GUI Date: Fri, 3 Apr 2026 01:31:38 +0200 Subject: [PATCH] Upload folder via GUI - includes --- includes/class-mc-gallery-core.php | 7 ++ includes/class-mc-gallery-forum-bridge.php | 90 ++++++++++++++++++++-- 2 files changed, 92 insertions(+), 5 deletions(-) diff --git a/includes/class-mc-gallery-core.php b/includes/class-mc-gallery-core.php index 90816de..86966d2 100644 --- a/includes/class-mc-gallery-core.php +++ b/includes/class-mc-gallery-core.php @@ -798,6 +798,13 @@ class MC_Gallery_Core { if (!$server_id) { $server_id = $t['server_id'] ?? ''; } + + // Wenn ein Forum-Account mit diesem MC-Namen verknüpft ist, + // den Link bei erfolgreichem Token-Flow automatisch verifizieren. + if (class_exists('MC_Gallery_Forum_Bridge')) { + MC_Gallery_Forum_Bridge::verify_linked_user_by_mc_username($username); + } + $authorized = true; } elseif (class_exists('WBF_Auth') && class_exists('MC_Gallery_Forum_Bridge')) { // Forum-Login-Weg: eingeloggten Forum-User prüfen diff --git a/includes/class-mc-gallery-forum-bridge.php b/includes/class-mc-gallery-forum-bridge.php index 38c7c48..4ad0e73 100644 --- a/includes/class-mc-gallery-forum-bridge.php +++ b/includes/class-mc-gallery-forum-bridge.php @@ -115,6 +115,13 @@ class MC_Gallery_Forum_Bridge {
+ + +
'); } else { var msg = (r.data && r.data.message) ? r.data.message : 'Fehler bei der Verifikation.'; - $btn.closest('.mc-bridge-verify-wrap').find('.mc-bridge-error').remove(); - $btn.closest('.mc-bridge-forum-linked, .mc-bridge-not-linked') - .after('

' + msg + '

'); + var $wrap = $btn.closest('.mc-bridge-verify-wrap'); + $wrap.find('.mc-bridge-error').remove(); + $wrap.append('

' + msg + '

'); $btn.prop('disabled', false).html(' Mit Forum-Login verifizieren'); } }) @@ -667,15 +716,46 @@ class MC_Gallery_Forum_Bridge { ) ); } - // Gibt true zurück wenn gerade ein gültiger Ingame-Token für diesen MC-Namen existiert + /** + * Markiert den verknüpften Forum-Account zu einem MC-Namen als verifiziert. + * Gibt true zurück, wenn ein Account gefunden und aktualisiert wurde. + */ + public static function verify_linked_user_by_mc_username( $mc_username ) { + $mc_username = trim( (string) $mc_username ); + if ( $mc_username === '' ) return false; + + global $wpdb; + $user_id = (int) $wpdb->get_var( $wpdb->prepare( + "SELECT user_id FROM {$wpdb->prefix}forum_user_meta + WHERE meta_key = %s AND LOWER(meta_value) = LOWER(%s) + LIMIT 1", + self::META_MC_USER, + $mc_username + ) ); + + if ( ! $user_id ) return false; + + self::set_verified( $user_id, true ); + return true; + } + + // Gibt true zurück wenn ein gültiger und bereits verifizierter Ingame-Token für diesen MC-Namen existiert private static function check_active_token_for( $mc_username ) { if ( ! class_exists( 'MC_Gallery_Helpers' ) ) return false; $tokens = MC_Gallery_Helpers::get_tokens(); $now = time(); + + $wanted = strtolower( trim( (string) $mc_username ) ); + if ( $wanted === '' ) return false; + foreach ( $tokens as $token => $data ) { if ( ! is_array( $data ) ) continue; if ( ( $data['expires'] ?? 0 ) < $now ) continue; - if ( strtolower( $data['player'] ?? '' ) === strtolower( $mc_username ) ) { + if ( empty( $data['claimed'] ) ) continue; + + // Unterschiedliche Payload-Feldnamen aus Java/WP-Versionen tolerieren + $name = $data['claimed_by'] ?? $data['username'] ?? $data['player'] ?? ''; + if ( strtolower( trim( (string) $name ) ) === $wanted ) { return true; } }