From e3ebfbe3fbd4e9489a0f46f70667d8620390b110 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Wed, 11 Feb 2026 19:50:12 +0000 Subject: [PATCH] wp-multi-ticket.php aktualisiert --- wp-multi-ticket.php | 68 +++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/wp-multi-ticket.php b/wp-multi-ticket.php index dbf5f74..eaf5e1b 100644 --- a/wp-multi-ticket.php +++ b/wp-multi-ticket.php @@ -235,11 +235,11 @@ class WP_Multi_Ticket_Pro { return $result; } - /** - * Prüft auf Updates von der Git-URL und zeigt eine Admin-Notice an - */ - public function check_plugin_updates() { - +/** + * Prüft auf Updates von der Git-URL und zeigt eine Admin-Notice an + * (Ersetze die vorhandene check_plugin_updates() Methode in WP_Multi_Ticket_Pro mit dieser) + */ +public function check_plugin_updates() { if ( ! current_user_can( 'update_plugins' ) ) { return; } @@ -249,10 +249,17 @@ class WP_Multi_Ticket_Pro { } $plugin_data = get_plugin_data( __FILE__ ); - $current_version = $plugin_data['Version']; + $current_version = isset( $plugin_data['Version'] ) ? $plugin_data['Version'] : '0.0.0'; $cache_key = 'wmt_ticket_update_check'; - $cached = get_transient( $cache_key ); + // Manuelles Neuladen erlauben: ?wmt_check_update=1 (nur für Admins mit Nonce) + if ( isset( $_GET['wmt_check_update'] ) && current_user_can( 'update_plugins' ) ) { + if ( isset( $_GET['_wpnonce'] ) && wp_verify_nonce( wp_unslash( $_GET['_wpnonce'] ), 'wmt_check_update_action' ) ) { + delete_transient( $cache_key ); + } + } + + $cached = get_transient( $cache_key ); if ( false === $cached ) { @@ -261,7 +268,7 @@ class WP_Multi_Ticket_Pro { 'url' => $this->update_url, ); - // Gitea API – Releases + // Gitea API – Releases (Liste) $api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/wp-multi-ticket/releases'; $response = wp_remote_get( $api_url, array( @@ -277,53 +284,66 @@ class WP_Multi_Ticket_Pro { $releases = json_decode( wp_remote_retrieve_body( $response ), true ); if ( is_array( $releases ) && ! empty( $releases ) ) { - - // Neuestes Release (Gitea liefert neueste zuerst) + // Gitea liefert Releases in der Regel vom neuesten zum ältesten $latest = $releases[0]; - // Version (genau wie im Toolkit) + // Version bestimmen (tag_name bevorzugt, sonst release name) if ( ! empty( $latest['tag_name'] ) ) { - $cached['version'] = ltrim( $latest['tag_name'], 'vV' ); + $cached['version'] = ltrim( (string) $latest['tag_name'], 'vV' ); } elseif ( ! empty( $latest['name'] ) ) { - $cached['version'] = ltrim( $latest['name'], 'vV' ); + $cached['version'] = ltrim( (string) $latest['name'], 'vV' ); } - // Exaktes ZIP-Asset suchen + // ZIP-Asset suchen (prefer exact filename 'wp-multi-ticket.zip') if ( ! empty( $latest['assets'] ) && is_array( $latest['assets'] ) ) { foreach ( $latest['assets'] as $asset ) { - if ( - ! empty( $asset['name'] ) && - ! empty( $asset['browser_download_url'] ) && - strtolower( $asset['name'] ) === 'wp-multi-ticket.zip' - ) { - $cached['url'] = $asset['browser_download_url']; - break; + if ( ! empty( $asset['browser_download_url'] ) ) { + // precise match if available + if ( ! empty( $asset['name'] ) && strtolower( $asset['name'] ) === 'wp-multi-ticket.zip' ) { + $cached['url'] = $asset['browser_download_url']; + break; + } + // fallback: use first available asset + if ( empty( $cached['url'] ) ) { + $cached['url'] = $asset['browser_download_url']; + } } } } + + // Wenn noch kein URL gesetzt, fallback auf releases-Seite + if ( empty( $cached['url'] ) ) { + $cached['url'] = $this->update_url; + } } } - // Cache setzen + // Cache 12 Stunden set_transient( $cache_key, $cached, 12 * HOUR_IN_SECONDS ); } - // Update-Hinweis anzeigen + // Anzeige der Admin-Notice, falls Version neuer ist if ( version_compare( $cached['version'], $current_version, '>' ) ) { + $check_now_url = wp_nonce_url( add_query_arg( 'wmt_check_update', '1', admin_url( 'plugins.php' ) ), 'wmt_check_update_action' ); + echo '
'; echo '

WP Multi Ticket Pro – Update verfügbar

'; echo '

Neue Version: ' . esc_html( $cached['version'] ) . '
'; echo 'Installiert: ' . esc_html( $current_version ) . '

'; echo '

'; echo 'Release ansehen '; - echo 'Direkter Download (ZIP)'; + if ( ! empty( $cached['url'] ) ) { + echo 'Direkter Download (ZIP) '; + } + echo 'Jetzt neu prüfen'; echo '

'; echo '
'; } } + public function load_analytics_scripts( $hook ) { if ( 'wmt-tickets_page_wmt_analytics' !== $hook ) return;