Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
596dc53c11 | ||
|
|
e40324daa8 | ||
|
|
8603da4ae1 | ||
| 88d6ffcd6f | |||
| b889d4e168 | |||
| c3a1c06965 | |||
| 779f548b39 |
@@ -263,6 +263,10 @@
|
||||
|
||||
// Forum-Login: Auf globales Event reagieren
|
||||
$(document).on('mc_gallery_forum_verified', function(e, data) {
|
||||
var fallbackServerId = $('#mc-upload-server').val() || '';
|
||||
if (data && !data.server_id) {
|
||||
data.server_id = fallbackServerId;
|
||||
}
|
||||
if (!data || !data.mc_username || !data.server_id) {
|
||||
showFeedback('Forum-Login: Ungültige Antwort vom Server.', 'error');
|
||||
return;
|
||||
@@ -327,6 +331,13 @@
|
||||
success: function (data) {
|
||||
$btn.prop('disabled', false).html(originalText);
|
||||
if (data.success && data.data && data.data.mc_username) {
|
||||
if (!data.data.server_id) {
|
||||
data.data.server_id = serverId || ($('#mc-upload-server').val() || '');
|
||||
}
|
||||
if (!data.data.server_id) {
|
||||
showFeedback('Forum-Login erfolgreich, aber keine Server-ID gefunden. Bitte Server wählen und erneut versuchen.', 'error');
|
||||
return;
|
||||
}
|
||||
sessionData.verified = true;
|
||||
sessionData.username = data.data.mc_username;
|
||||
sessionData.serverId = data.data.server_id;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -115,6 +115,13 @@ class MC_Gallery_Forum_Bridge {
|
||||
</div>
|
||||
<?php if ( $is_own || $is_mod ) : ?>
|
||||
<div class="mc-bridge-actions">
|
||||
<?php if ( ! $verified && $is_own ) : ?>
|
||||
<button type="button" class="mc-bridge-btn mc-bridge-btn--self-verify"
|
||||
data-server="<?php echo esc_attr( $sv ); ?>"
|
||||
data-nonce="<?php echo wp_create_nonce( self::NONCE_ACTION ); ?>">
|
||||
<i class="fas fa-shield-check"></i> Jetzt verifizieren
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
<?php if ( ! $verified && $is_mod ) : ?>
|
||||
<button type="button" class="mc-bridge-btn mc-bridge-btn--approve"
|
||||
data-uid="<?php echo (int) $profile_user->id; ?>"
|
||||
@@ -214,6 +221,34 @@ class MC_Gallery_Forum_Bridge {
|
||||
});
|
||||
});
|
||||
|
||||
// Eigene Verknüpfung verifizieren (ohne Admin-Button)
|
||||
$('.mc-bridge-btn--self-verify').on('click', function(){
|
||||
var $btn = $(this).prop('disabled', true);
|
||||
var nonce = $btn.data('nonce');
|
||||
var sv = $btn.data('server') || '';
|
||||
var old = $btn.html();
|
||||
|
||||
$btn.html('<i class="fas fa-spinner fa-spin"></i> Prüfe...');
|
||||
|
||||
$.post(<?php echo json_encode( admin_url('admin-ajax.php') ); ?>, {
|
||||
action: 'mc_forum_verify_upload',
|
||||
nonce: nonce,
|
||||
server_id: sv
|
||||
})
|
||||
.done(function(r){
|
||||
if ( r && r.success ) {
|
||||
location.reload();
|
||||
} else {
|
||||
alert((r && r.data && r.data.message) ? r.data.message : 'Verifizierung nicht möglich.');
|
||||
$btn.prop('disabled', false).html(old);
|
||||
}
|
||||
})
|
||||
.fail(function(){
|
||||
alert('Netzwerkfehler. Bitte erneut versuchen.');
|
||||
$btn.prop('disabled', false).html(old);
|
||||
});
|
||||
});
|
||||
|
||||
// Admin: Bestätigen
|
||||
$('.mc-bridge-btn--approve').on('click', function(){
|
||||
var uid = $(this).data('uid');
|
||||
@@ -344,6 +379,16 @@ class MC_Gallery_Forum_Bridge {
|
||||
$server_id = self::get_mc_server( $forum_user->id )
|
||||
?: sanitize_text_field( $_POST['server_id'] ?? '' );
|
||||
|
||||
if ( empty( $server_id ) ) {
|
||||
$servers = self::get_server_list();
|
||||
if ( ! empty( $servers ) ) {
|
||||
$first = array_key_first( $servers );
|
||||
if ( $first !== null ) {
|
||||
$server_id = (string) $first;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wp_send_json_success( [
|
||||
'mc_username' => $mc_user,
|
||||
'server_id' => $server_id,
|
||||
@@ -512,6 +557,10 @@ class MC_Gallery_Forum_Bridge {
|
||||
})
|
||||
.done(function(r){
|
||||
if ( r.success ) {
|
||||
if (!r.data.server_id) {
|
||||
r.data.server_id = server || '';
|
||||
}
|
||||
|
||||
// Galerie-JS über erfolgreiche Verify informieren
|
||||
// Standard-Event — Gallery-JS kann darauf lauschen
|
||||
$(document).trigger('mc_gallery_forum_verified', [ r.data ]);
|
||||
@@ -529,9 +578,9 @@ class MC_Gallery_Forum_Bridge {
|
||||
+ '</strong></div>');
|
||||
} 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('<p class="mc-bridge-error"><i class="fas fa-times-circle"></i> ' + msg + '</p>');
|
||||
var $wrap = $btn.closest('.mc-bridge-verify-wrap');
|
||||
$wrap.find('.mc-bridge-error').remove();
|
||||
$wrap.append('<p class="mc-bridge-error"><i class="fas fa-times-circle"></i> ' + msg + '</p>');
|
||||
$btn.prop('disabled', false).html('<i class="fas fa-sign-in-alt"></i> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
<?php
|
||||
/*
|
||||
Plugin Name: MC MultiServer Gallery PRO
|
||||
Plugin URI:https://git.viper.ipv64.net/M_Viper/Wordpress-MC-Gallery
|
||||
Description: Professionelle Minecraft-Galerie mit Ingame-Verification, modernem UI, Lightbox und AJAX-Upload (multi-server fähig).
|
||||
Version: 2.5.5
|
||||
Version: 2.5.6
|
||||
Author: M_Viper
|
||||
Plugin URI: https://git.viper.ipv64.net/M_Viper/Wordpress-MC-Gallery/releases
|
||||
Author URI: https://m-viper.de
|
||||
Author URI: https://m-viper.de
|
||||
Requires at least: 6.8
|
||||
Tested up to: 6.8
|
||||
PHP Version: 7.4
|
||||
License: GPL2
|
||||
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||
Text Domain: mc-multiserver-gallery-pro
|
||||
Domain Path: /languages
|
||||
Tags: Gallery, Minecraft, MultiServer, Ingame-Verification, AJAX-Upload, Lightbox, Shortcode, Widget
|
||||
Support: [Discord Support](https://discord.com/invite/FdRs4BRd8D)
|
||||
Support: [Telegram Support](https://t.me/M_Viper04)
|
||||
*/
|
||||
|
||||
if (!defined('ABSPATH')) exit;
|
||||
|
||||
Reference in New Issue
Block a user