'wpmt_sanitize_settings' )); add_settings_section('wpmt_main_section', __('WP Multi Einstellungen', 'wp-multi-toolkit'), null, 'wpmt_settings'); add_settings_field('wpmt_enable_multi', __('Multi-Funktion aktivieren', 'wp-multi-toolkit'), 'wpmt_enable_multi_callback', 'wpmt_settings', 'wpmt_main_section'); } add_action('admin_init', 'wpmt_register_settings'); function wpmt_sanitize_settings($input) { $new_input = array(); $new_input['enable_multi'] = isset($input['enable_multi']) ? 1 : 0; return $new_input; } function wpmt_enable_multi_callback() { $options = get_option('wpmt_multi_settings', array('enable_multi' => 0)); echo ''; } function wpmt_add_admin_menu() { add_options_page( __('WP Multi Toolkit Einstellungen', 'wp-multi-toolkit'), __('WP Multi Toolkit', 'wp-multi-toolkit'), 'manage_options', 'wpmt_settings', 'wpmt_settings_page' ); } add_action('admin_menu', 'wpmt_add_admin_menu'); function wpmt_settings_page() { ?>
' . __('Multi-Funktion ist aktiviert!', 'wp-multi-toolkit') . '
'; } return '' . __('Multi-Funktion ist deaktiviert.', 'wp-multi-toolkit') . '
'; } add_shortcode('wpmt_multi', 'wpmt_multi_shortcode'); // ### Update-Management ### // Widget zum Admin-Dashboard hinzufügen function wpmt_update_dashboard_widget() { wp_add_dashboard_widget( 'wpmt_update_widget', __('Verfügbare Updates für WP Multi Toolkit', 'wp-multi-toolkit'), 'wpmt_update_dashboard_widget_content', null, null, 'normal', 'high' ); } // Dashboard-Setup anpassen function wpmt_force_widget_position() { global $wp_meta_boxes; if (isset($wp_meta_boxes['dashboard']['normal']['high']['wpmt_update_widget'])) { $widget = $wp_meta_boxes['dashboard']['normal']['high']['wpmt_update_widget']; unset($wp_meta_boxes['dashboard']['normal']['high']['wpmt_update_widget']); $wp_meta_boxes['dashboard']['normal']['high'] = array('wpmt_update_widget' => $widget) + $wp_meta_boxes['dashboard']['normal']['high']; } } add_action('wp_dashboard_setup', 'wpmt_update_dashboard_widget', 1); add_action('wp_dashboard_setup', 'wpmt_force_widget_position', 999); // Widget nicht ausblendbar machen function wpmt_prevent_widget_hiding($widgets) { $widgets['wpmt_update_widget'] = array( 'id' => 'wpmt_update_widget', 'title' => __('Verfügbare Updates für WP Multi Toolkit', 'wp-multi-toolkit'), 'callback' => 'wpmt_update_dashboard_widget_content' ); return $widgets; } add_filter('dashboard_available_widgets', 'wpmt_prevent_widget_hiding'); // Benutzerdefiniertes Cron-Intervall hinzufügen add_filter('cron_schedules', function ($schedules) { $schedules['hourly'] = array( 'interval' => 3600, 'display' => __('Stündlich', 'wp-multi-toolkit'), ); return $schedules; }); // Cron-Job registrieren function wpmt_update_schedule_check() { if (!wp_next_scheduled('wpmt_update_check_event')) { wp_schedule_event(time(), 'hourly', 'wpmt_update_check_event'); } } add_action('wp', 'wpmt_update_schedule_check'); // Hilfsfunktion zur Wiederverwendung der Gitea-API-Abfrage function wpmt_fetch_latest_release($repo, $show_prereleases = false) { $api_url = "https://git.viper.ipv64.net/api/v1/repos/M_Viper/{$repo}/releases"; $response = wp_remote_get($api_url, array('timeout' => 10)); if (is_wp_error($response)) { error_log("WP Multi Toolkit Update Fehler für {$repo}: " . $response->get_error_message()); return false; } $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if (!is_array($data)) { error_log("WP Multi Toolkit Update für {$repo}: Ungültige API-Antwort"); return false; } foreach ($data as $release) { if (!$show_prereleases && isset($release['prerelease']) && $release['prerelease']) { continue; } if (!empty($release['tag_name'])) { return $release; } } return null; } // Cron-Job für Update-Überprüfung function wpmt_update_check() { require_once ABSPATH . 'wp-admin/includes/plugin.php'; $show_prereleases = get_option('wpmt_update_show_prereleases', false); $installed_plugins = get_plugins(); $plugins_to_check = array( 'wp-multi-toolkit' => 'WP-Multi-Toolkit/wp-multi-toolkit.php', 'wp-multi' => 'WP-Multi/wp-multi.php', 'WP-Multi-Search' => 'wp-multi-search/wp-multi-search.php', 'wp-multi-comment-notifications' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php' ); foreach ($plugins_to_check as $repo => $file) { if (array_key_exists($file, $installed_plugins) && is_plugin_active($file)) { $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $file); $installed_version = $plugin_data['Version']; $valid_release = wpmt_fetch_latest_release($repo, $show_prereleases); if ($valid_release) { $latest_version = $valid_release['tag_name']; $release_notes = $valid_release['body'] ?? ''; $is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease']; update_option("wpmt_update_latest_version_{$repo}", $latest_version); update_option("wpmt_update_release_notes_{$repo}", $release_notes); update_option("wpmt_update_is_prerelease_{$repo}", $is_prerelease); } } } } add_action('wpmt_update_check_event', 'wpmt_update_check'); // Callback-Funktion für das Widget function wpmt_update_dashboard_widget_content() { require_once ABSPATH . 'wp-admin/includes/plugin.php'; $installed_plugins = get_plugins(); $show_prereleases = get_option('wpmt_update_show_prereleases', false); $plugins_to_check = array( 'wp-multi-toolkit' => array( 'file' => 'wp-multi-toolkit/wp-multi-toolkit.php', 'name' => 'WP Multi Toolkit', 'repo' => 'wp-multi-toolkit' ), 'wp-multi' => array( 'file' => 'WP-Multi/wp-multi.php', 'name' => 'WP Multi', 'repo' => 'wp-multi' ), 'WP-Multi-Search' => array( 'file' => 'wp-multi-search/wp-multi-search.php', 'name' => 'WP Multi Search', 'repo' => 'WP-Multi-Search' ), 'wp-multi-comment-notifications' => array( 'file' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php', 'name' => 'WP Multi Comment Notifications', 'repo' => 'wp-multi-comment-notifications' ) ); $has_active_plugins = false; foreach ($plugins_to_check as $key => $plugin) { $is_installed = array_key_exists($plugin['file'], $installed_plugins); $is_active = $is_installed && is_plugin_active($plugin['file']); if ($is_installed && $is_active) { $has_active_plugins = true; $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin['file']); $installed_version = $plugin_data['Version']; $valid_release = wpmt_fetch_latest_release($plugin['repo'], $show_prereleases); echo '%s
', esc_html__('Fehler beim Abrufen der Versionsinformationen von Gitea.', 'wp-multi-toolkit')); } elseif ($valid_release) { $latest_version = $valid_release['tag_name']; $release_notes = $valid_release['body'] ?? ''; $is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease']; if (version_compare($installed_version, $latest_version, '>=')) { printf( '%s
', sprintf( __('Ihre Version ist aktuell. Version %s ist die neueste Version.', 'wp-multi-toolkit'), esc_html($installed_version) ) ); } else { printf( '%s
', sprintf( __('Es ist eine neue Version von %s verfügbar! Version %s ist jetzt verfügbar.', 'wp-multi-toolkit'), esc_html($plugin['name']), esc_html($latest_version) ) ); printf( '%s: %s
', __('Aktuell installierte Version', 'wp-multi-toolkit'), esc_html($installed_version) ); printf( '%s: %s
', __('Neue Version auf Gitea', 'wp-multi-toolkit'), esc_html($latest_version) ); if ($is_prerelease && $show_prereleases) { printf('%s
', __('Dieses Update ist ein PreRelease.', 'wp-multi-toolkit')); } if (!empty($release_notes)) { printf( '%s:
%s
', __('Information zum Update', 'wp-multi-toolkit'), nl2br(esc_html($release_notes)) ); } $button_text = $is_prerelease ? __('PreRelease herunterladen', 'wp-multi-toolkit') : __('Update herunterladen', 'wp-multi-toolkit'); $download_url = $valid_release['assets'][0]['browser_download_url'] ?? '#'; printf( '', esc_url($download_url), esc_html($button_text) ); } } else { printf('%s
', esc_html__('Keine Versionsinformationen gefunden.', 'wp-multi-toolkit')); } } } if (!$has_active_plugins) { echo '' . __('Keine aktiven WP Multi Plugins gefunden.', 'wp-multi-toolkit') . '
'; } // Optionale Plugins $optional_plugins = array( 'wp-multi-toolkit' => array( 'file' => 'wp-multi-toolkit/wp-multi-toolkit.php', 'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi-toolkit/releases', 'description' => __('Kern-Toolkit für WP Multi Plugins.', 'wp-multi-toolkit') ), 'wp-multi' => array( 'file' => 'WP-Multi/wp-multi.php', 'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi/releases', 'description' => __('Hauptplugin für WP Multi Funktionen.', 'wp-multi-toolkit') ), 'WP-Multi-Search' => array( 'file' => 'wp-multi-search/wp-multi-search.php', 'download_url' => 'https://git.viper.ipv64.net/M_Viper/WP-Multi-Search/releases', 'description' => __('Erweiterte Suchfunktionen.', 'wp-multi-toolkit') ), 'wp-multi-comment-notifications' => array( 'file' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php', 'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi-comment-notifications/releases', 'description' => __('Kommentar-Benachrichtigungen.', 'wp-multi-toolkit') ) ); echo '' . __('Plugin', 'wp-multi-toolkit') . ' | ' . __('Beschreibung', 'wp-multi-toolkit') . ' | ' . __('Status', 'wp-multi-toolkit') . ' | ' . __('Aktion', 'wp-multi-toolkit') . ' |
---|---|---|---|
' . esc_html($plugins_to_check[$key]['name']) . ' | '; echo '' . esc_html($plugin['description']) . ' | '; echo ''; if ($is_active) { echo '' . __('Aktiv', 'wp-multi-toolkit') . ''; } elseif ($is_installed) { echo '' . __('Inaktiv', 'wp-multi-toolkit') . ''; } else { echo '' . __('Nicht installiert', 'wp-multi-toolkit') . ''; } echo ' | '; echo ''; if ($is_active) { echo '—'; } elseif ($is_installed) { echo '' . __('Aktivieren', 'wp-multi-toolkit') . ''; } else { echo '' . __('Herunterladen', 'wp-multi-toolkit') . ''; } echo ' | '; echo '
' . __('Achtung: Pre-Releases sind Beta-Versionen und können Fehler enthalten. Verwenden Sie sie nur, wenn Sie Fehlerberichterstattung oder Tests durchführen möchten.', 'wp-multi-toolkit') . '
'; } // Deinstallation function wpmt_uninstall() { $repos = array('wp-multi-toolkit', 'wp-multi', 'WP-Multi-Search', 'wp-multi-comment-notifications'); foreach ($repos as $repo) { delete_option("wpmt_update_latest_version_{$repo}"); delete_option("wpmt_update_release_notes_{$repo}"); delete_option("wpmt_update_is_prerelease_{$repo}"); } delete_option('wpmt_update_show_prereleases'); delete_option('wpmt_multi_settings'); wp_clear_scheduled_hook('wpmt_update_check_event'); } register_uninstall_hook(__FILE__, 'wpmt_uninstall');