wp-multi-ticket.php aktualisiert

This commit is contained in:
2026-02-11 19:50:12 +00:00
parent 315c477cad
commit e3ebfbe3fb

View File

@@ -235,11 +235,11 @@ class WP_Multi_Ticket_Pro {
return $result; return $result;
} }
/** /**
* Prüft auf Updates von der Git-URL und zeigt eine Admin-Notice an * 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() { */
public function check_plugin_updates() {
if ( ! current_user_can( 'update_plugins' ) ) { if ( ! current_user_can( 'update_plugins' ) ) {
return; return;
} }
@@ -249,10 +249,17 @@ class WP_Multi_Ticket_Pro {
} }
$plugin_data = get_plugin_data( __FILE__ ); $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'; $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 ) { if ( false === $cached ) {
@@ -261,7 +268,7 @@ class WP_Multi_Ticket_Pro {
'url' => $this->update_url, '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'; $api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/wp-multi-ticket/releases';
$response = wp_remote_get( $api_url, array( $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 ); $releases = json_decode( wp_remote_retrieve_body( $response ), true );
if ( is_array( $releases ) && ! empty( $releases ) ) { if ( is_array( $releases ) && ! empty( $releases ) ) {
// Gitea liefert Releases in der Regel vom neuesten zum ältesten
// Neuestes Release (Gitea liefert neueste zuerst)
$latest = $releases[0]; $latest = $releases[0];
// Version (genau wie im Toolkit) // Version bestimmen (tag_name bevorzugt, sonst release name)
if ( ! empty( $latest['tag_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'] ) ) { } 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'] ) ) { if ( ! empty( $latest['assets'] ) && is_array( $latest['assets'] ) ) {
foreach ( $latest['assets'] as $asset ) { foreach ( $latest['assets'] as $asset ) {
if ( if ( ! empty( $asset['browser_download_url'] ) ) {
! empty( $asset['name'] ) && // precise match if available
! empty( $asset['browser_download_url'] ) && if ( ! empty( $asset['name'] ) && strtolower( $asset['name'] ) === 'wp-multi-ticket.zip' ) {
strtolower( $asset['name'] ) === 'wp-multi-ticket.zip' $cached['url'] = $asset['browser_download_url'];
) { break;
$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 ); 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, '>' ) ) { 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 '<div class="notice notice-warning is-dismissible">'; echo '<div class="notice notice-warning is-dismissible">';
echo '<p><strong>WP Multi Ticket Pro Update verfügbar</strong></p>'; echo '<p><strong>WP Multi Ticket Pro Update verfügbar</strong></p>';
echo '<p>Neue Version: <strong>' . esc_html( $cached['version'] ) . '</strong><br>'; echo '<p>Neue Version: <strong>' . esc_html( $cached['version'] ) . '</strong><br>';
echo 'Installiert: <strong>' . esc_html( $current_version ) . '</strong></p>'; echo 'Installiert: <strong>' . esc_html( $current_version ) . '</strong></p>';
echo '<p>'; echo '<p>';
echo '<a href="' . esc_url( $this->update_url ) . '" target="_blank" class="button">Release ansehen</a> '; echo '<a href="' . esc_url( $this->update_url ) . '" target="_blank" class="button">Release ansehen</a> ';
echo '<a href="' . esc_url( $cached['url'] ) . '" target="_blank" class="button button-primary">Direkter Download (ZIP)</a>'; if ( ! empty( $cached['url'] ) ) {
echo '<a href="' . esc_url( $cached['url'] ) . '" target="_blank" class="button button-primary" style="margin-left:8px;">Direkter Download (ZIP)</a> ';
}
echo '<a href="' . esc_url( $check_now_url ) . '" class="button" style="margin-left:8px;">Jetzt neu prüfen</a>';
echo '</p>'; echo '</p>';
echo '</div>'; echo '</div>';
} }
} }
public function load_analytics_scripts( $hook ) { public function load_analytics_scripts( $hook ) {
if ( 'wmt-tickets_page_wmt_analytics' !== $hook ) return; if ( 'wmt-tickets_page_wmt_analytics' !== $hook ) return;