7 Commits
2.5.5 ... main

Author SHA1 Message Date
Git Manager GUI
596dc53c11 Upload via Git Manager GUI 2026-04-03 01:31:40 +02:00
Git Manager GUI
e40324daa8 Upload folder via GUI - includes 2026-04-03 01:31:38 +02:00
Git Manager GUI
8603da4ae1 Upload folder via GUI - assets 2026-04-03 01:31:36 +02:00
88d6ffcd6f mc-multiserver-gallery-pro.php aktualisiert 2026-04-02 19:35:03 +00:00
b889d4e168 mc-multiserver-gallery-pro.php aktualisiert 2026-04-02 19:34:16 +00:00
c3a1c06965 mc-multiserver-gallery-pro.php aktualisiert 2026-04-02 19:28:36 +00:00
779f548b39 Upload via Git Manager GUI - mc-multiserver-gallery-pro.php 2026-03-29 20:26:07 +00:00
4 changed files with 439 additions and 334 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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;