diff --git a/Minecraft-Modern-Theme/inc/theme-updater.php b/Minecraft-Modern-Theme/inc/theme-updater.php index 81007df..6bf5945 100644 --- a/Minecraft-Modern-Theme/inc/theme-updater.php +++ b/Minecraft-Modern-Theme/inc/theme-updater.php @@ -6,120 +6,137 @@ if ( ! defined( 'ABSPATH' ) ) { } // === ZENTRALE VERSIONSKONSTANTE === -// Bitte passen Sie diese Version bei jedem Release an! define( 'MINECRAFT_MODERN_THEME_VERSION', '1.6' ); - // === THEME UPDATE NOTIFICATION SYSTEM === -// Funktion zum Abrufen der neuesten Release-Informationen vom Git-Repository -function minecraft_modern_get_latest_release_info() { +// Funktion zum Leeren des Caches (wenn man auf "Update prüfen" klickt) +function minecraft_modern_clear_cache() { + if ( isset( $_GET['mm_clear_cache'] ) && current_user_can( 'manage_options' ) ) { + check_admin_referer( 'mm_clear_cache_action' ); + delete_transient( 'minecraft_modern_latest_release' ); + wp_redirect( admin_url( 'index.php' ) ); + exit; + } +} +add_action( 'admin_init', 'minecraft_modern_clear_cache' ); + +// Funktion zum Abrufen der neuesten Release-Informationen +function minecraft_modern_get_latest_release_info( $force_refresh = false ) { $transient_key = 'minecraft_modern_latest_release'; - // Versuche, die Daten aus dem Transient-Cache zu holen - $release_info = get_transient($transient_key); + // Wenn erzwungen wird (oder Cache leer), frische Daten holen + if ( $force_refresh ) { + delete_transient( $transient_key ); + } - // Wenn der Cache leer oder abgelaufen ist, rufe neue Daten ab - if (false === $release_info) { - $response = wp_remote_get('https://git.viper.ipv64.net/api/v1/repos/M_Viper/Minecraft-Modern-Theme/releases/latest'); + $release_info = get_transient( $transient_key ); + + if ( false === $release_info ) { + // Timeout auf 10 Sekunden erhöht für langsame Verbindungen + $response = wp_remote_get( 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/Minecraft-Modern-Theme/releases/latest', array( 'timeout' => 10 ) ); - if (!is_wp_error($response) && 200 === wp_remote_retrieve_response_code($response)) { - $body = wp_remote_retrieve_body($response); - $release_data = json_decode($body, true); + if ( ! is_wp_error( $response ) && 200 === wp_remote_retrieve_response_code( $response ) ) { + $body = wp_remote_retrieve_body( $response ); + $release_data = json_decode( $body, true ); - if ($release_data && isset($release_data['tag_name'])) { + if ( $release_data && isset( $release_data['tag_name'] ) ) { + // Tag bereinigen (falls 'v' davor steht, z.B. v1.6 -> 1.6) + $tag_name = $release_data['tag_name']; + if ( strpos( $tag_name, 'v' ) === 0 ) { + $tag_name = ltrim( $tag_name, 'v' ); + } + $release_info = array( - 'version' => $release_data['tag_name'], - 'download_url' => $release_data['zipball_url'], - 'release_notes' => isset($release_data['body']) ? $release_data['body'] : '', - 'published_at' => isset($release_data['published_at']) ? $release_data['published_at'] : '' + 'version' => $tag_name, + 'download_url' => $release_data['zipball_url'], + 'release_notes' => isset( $release_data['body'] ) ? $release_data['body'] : '', + 'published_at' => isset( $release_data['published_at'] ) ? $release_data['published_at'] : '' ); - // Speichere die Daten für 12 Stunden im Cache - set_transient($transient_key, $release_info, 12 * HOUR_IN_SECONDS); + // Cache für 6 Stunden (kannst du anpassen) + set_transient( $transient_key, $release_info, 6 * HOUR_IN_SECONDS ); + } else { + // Fehlerhafte Daten leer cachen + set_transient( $transient_key, array(), HOUR_IN_SECONDS ); } } else { - // Bei Fehler, leere Daten für 1 Stunde cachen, um wiederholte fehlgeschlagene Anfragen zu vermeiden - set_transient($transient_key, array(), HOUR_IN_SECONDS); + // Fehler beim Abrufen + set_transient( $transient_key, array(), HOUR_IN_SECONDS ); } } return $release_info; } -// Funktion zum Anzeigen der Update-Benachrichtigung im Admin-Bereich +// Benachrichtigung im Admin-Bereich function minecraft_modern_show_update_notification() { - // Nur im Admin-Bereich und für Administratoren anzeigen - if (!is_admin() || !current_user_can('manage_options')) { + if ( ! is_admin() || ! current_user_can( 'manage_options' ) ) { return; } - // Aktuelle Theme-Version abrufen (JETZT AUS UNSERER KONSTANTE) $current_version = MINECRAFT_MODERN_THEME_VERSION; + $latest_release = minecraft_modern_get_latest_release_info(); - // Neueste Release-Informationen abrufen - $latest_release = minecraft_modern_get_latest_release_info(); - - // Wenn wir gültige Release-Informationen haben und die Versionen unterschiedlich sind - if (!empty($latest_release) && isset($latest_release['version']) && version_compare($current_version, $latest_release['version'], '<')) { + if ( ! empty( $latest_release ) && isset( $latest_release['version'] ) && version_compare( $current_version, $latest_release['version'], '<' ) ) { ?>
' . esc_html($current_version) . '', - '' . esc_html($latest_release['version']) . '' + __( 'You are using version %1$s of the Minecraft Modern Theme. Version %2$s is now available.', 'minecraft-modern-theme' ), + '' . esc_html( $current_version ) . '', + '' . esc_html( $latest_release['version'] ) . '' ); ?>
' . __('Current Version:', 'minecraft-modern-theme') . ' ' . esc_html($current_version) . '
'; - - if (!empty($latest_release) && isset($latest_release['version'])) { - if (version_compare($current_version, $latest_release['version'], '<')) { - echo '' . __('Latest Version:', 'minecraft-modern-theme') . ' ' . esc_html($latest_release['version']) . '
'; - echo '' . __('Status:', 'minecraft-modern-theme') . ' ' . __('Update Available', 'minecraft-modern-theme') . '
'; - echo '' . __('Download Update', 'minecraft-modern-theme') . '
'; + if ( ! empty( $latest_release ) && isset( $latest_release['version'] ) ) { + echo '' . __( 'Latest Version:', 'minecraft-modern-theme' ) . ' ' . esc_html( $latest_release['version'] ) . '
'; + + if ( version_compare( $current_version, $latest_release['version'], '<' ) ) { + echo '' . __( 'Status:', 'minecraft-modern-theme' ) . ' ' . __( 'Update Available', 'minecraft-modern-theme' ) . '
'; + echo '' . __( 'Download Update', 'minecraft-modern-theme' ) . '
'; } else { - echo '' . __('Latest Version:', 'minecraft-modern-theme') . ' ' . esc_html($latest_release['version']) . '
'; - echo '' . __('Status:', 'minecraft-modern-theme') . ' ' . __('Up to Date', 'minecraft-modern-theme') . '
'; + echo '' . __( 'Status:', 'minecraft-modern-theme' ) . ' ' . __( 'Up to Date', 'minecraft-modern-theme' ) . '
'; } } else { - echo '' . __('Status:', 'minecraft-modern-theme') . ' ' . __('Unable to check for updates', 'minecraft-modern-theme') . '
'; + echo '' . __( 'Status:', 'minecraft-modern-theme' ) . ' ' . __( 'Unable to check for updates', 'minecraft-modern-theme' ) . '
'; } - echo '' . __('View All Releases', 'minecraft-modern-theme') . '
'; + // Link für "Jetzt prüfen" hinzugefügt + $refresh_url = wp_nonce_url( admin_url( 'index.php?mm_clear_cache=1' ), 'mm_clear_cache_action' ); + echo '' . __( 'Check for Updates Now', 'minecraft-modern-theme' ) . '
'; + + echo ''; } \ No newline at end of file