diff --git a/wp-rules.php b/wp-rules.php index 0b40ca5..530898c 100644 --- a/wp-rules.php +++ b/wp-rules.php @@ -2,7 +2,7 @@ /** * Plugin Name: Multi Rules * Description: Erstellt einen anpassbaren Regelbereich mit Tabs, Shortcode [meine_regeln] sowie Styling- und Import/Export-Funktionen. - * Version: 1.2 + * Version: 1.3 * Author: M_Viper * Plugin URI: https://git.viper.ipv64.net/M_Viper/Multi-Rules/releases * Author URI: https://m-viper.de @@ -21,6 +21,111 @@ if (!defined('ABSPATH')) { exit; } +/** + * Multi Rules - Update-Notice (Gitea Releases) + * Einfügen: direkt nach dem ABSPATH-Check oben + */ + +// Plugin-Version aus Header lesen +function mrp_get_plugin_version() { + if ( ! function_exists( 'get_plugin_data' ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } + $plugin_data = get_plugin_data( __FILE__ ); + return $plugin_data['Version'] ?? '0.0.0'; +} + +// Cache manuell leeren (Button "Jetzt neu prüfen") +function mrp_clear_update_cache() { + if ( isset( $_GET['mrp_clear_cache'] ) && current_user_can( 'manage_options' ) ) { + check_admin_referer( 'mrp_clear_cache_action' ); + delete_transient( 'mrp_latest_release' ); + wp_redirect( admin_url( 'plugins.php' ) ); + exit; + } +} +add_action( 'admin_init', 'mrp_clear_update_cache' ); + +// Neueste Release-Infos von Gitea holen +function mrp_get_latest_release_info( $force_refresh = false ) { + $transient_key = 'mrp_latest_release'; + + if ( $force_refresh ) { + delete_transient( $transient_key ); + } + + $release_info = get_transient( $transient_key ); + + if ( false === $release_info ) { + $response = wp_remote_get( + 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/Multi-Rules/releases/latest', + array( 'timeout' => 10 ) + ); + + if ( ! is_wp_error( $response ) && 200 === wp_remote_retrieve_response_code( $response ) ) { + $body = wp_remote_retrieve_body( $response ); + $data = json_decode( $body, true ); + + if ( $data && isset( $data['tag_name'] ) ) { + $tag = ltrim( (string) $data['tag_name'], 'vV' ); + + $release_info = array( + 'version' => $tag, + 'download_url' => $data['zipball_url'] ?? '', + 'notes' => $data['body'] ?? '', + 'published_at' => $data['published_at'] ?? '', + ); + + // Cache für 6 Stunden + set_transient( $transient_key, $release_info, 6 * HOUR_IN_SECONDS ); + } else { + // Kurzzeit-Cache bei fehlerhafter Antwort + set_transient( $transient_key, array(), HOUR_IN_SECONDS ); + } + } else { + // Fehler beim Abruf -> Kurzzeit-Cache + set_transient( $transient_key, array(), HOUR_IN_SECONDS ); + } + } + + return $release_info; +} + +// Admin-Notice anzeigen wenn Update vorhanden +function mrp_show_update_notice() { + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + + $current_version = mrp_get_plugin_version(); + $latest_release = mrp_get_latest_release_info(); + + if ( ! empty( $latest_release['version'] ) && version_compare( $current_version, $latest_release['version'], '<' ) ) { + $refresh_url = wp_nonce_url( admin_url( 'plugins.php?mrp_clear_cache=1' ), 'mrp_clear_cache_action' ); + ?> +
+

Multi Rules – Update verfügbar

+

+ Installiert:
+ Neueste Version: +

+

+ + Update herunterladen + + + Release Notes + + + Jetzt neu prüfen + +

+
+