wp-multi-toolkit.php aktualisiert

This commit is contained in:
M_Viper 2025-04-09 14:10:07 +00:00
parent e4a3a7f5d5
commit 959e458951

View File

@ -1,410 +1,416 @@
<?php <?php
/* /*
Plugin Name: WP Multi Toolkit * Plugin Name: WP Multi Toolkit
Plugin URI: https://git.viper.ipv64.net/M_Viper/wp-multi-toolkit * Plugin URI: https://git.viper.ipv64.net/M_Viper/wp-multi-toolkit
Description: Ein umfassendes Toolkit inklusive WP Multi Funktionen und Update-Management für zugehörige Plugins. * Description: Ein umfassendes Toolkit inklusive WP Multi Funktionen und Update-Management für zugehörige Plugins.
Version: 1.0.0 * Version: 1.0.1
Author: M_Viper * Author: M_Viper
Author URI: https://git.viper.ipv64.net/M_Viper * Author URI: https://m-viper.de
License: GPL2 * Requires at least: 6.7.2
Text Domain: wp-multi-toolkit * Tested up to: 6.7.2
Domain Path: /languages * License: GPL2
*/ * License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: wp-multi-toolkit
defined('ABSPATH') or die('No direct access allowed.'); * Tags: toolkit, update-management, wp-multi, plugin-utility, wordpress, plugin-toolkit
* Support: [Microsoft Teams Support](https://teams.live.com/l/community/FEAzokphpZTJ2u6OgI)
define('WPMT_PLUGIN_DIR', plugin_dir_path(__FILE__)); * Support: [Telegram Support](https://t.me/M_Viper04)
*/
// Textdomain laden
function wpmt_load_textdomain() {
load_plugin_textdomain('wp-multi-toolkit', false, dirname(plugin_basename(__FILE__)) . '/languages'); defined('ABSPATH') or die('No direct access allowed.');
}
add_action('plugins_loaded', 'wpmt_load_textdomain'); define('WPMT_PLUGIN_DIR', plugin_dir_path(__FILE__));
// ### WP Multi Grundfunktionen ### // Textdomain laden
function wpmt_load_textdomain() {
// Optionen-Seite für WP Multi load_plugin_textdomain('wp-multi-toolkit', false, dirname(plugin_basename(__FILE__)) . '/languages');
function wpmt_register_settings() { }
register_setting('wpmt_options_group', 'wpmt_multi_settings', array( add_action('plugins_loaded', 'wpmt_load_textdomain');
'sanitize_callback' => 'wpmt_sanitize_settings'
)); // ### WP Multi Grundfunktionen ###
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'); // Optionen-Seite für WP Multi
} function wpmt_register_settings() {
add_action('admin_init', 'wpmt_register_settings'); register_setting('wpmt_options_group', 'wpmt_multi_settings', array(
'sanitize_callback' => 'wpmt_sanitize_settings'
function wpmt_sanitize_settings($input) { ));
$new_input = array(); add_settings_section('wpmt_main_section', __('WP Multi Einstellungen', 'wp-multi-toolkit'), null, 'wpmt_settings');
$new_input['enable_multi'] = isset($input['enable_multi']) ? 1 : 0; add_settings_field('wpmt_enable_multi', __('Multi-Funktion aktivieren', 'wp-multi-toolkit'), 'wpmt_enable_multi_callback', 'wpmt_settings', 'wpmt_main_section');
return $new_input; }
} add_action('admin_init', 'wpmt_register_settings');
function wpmt_enable_multi_callback() { function wpmt_sanitize_settings($input) {
$options = get_option('wpmt_multi_settings', array('enable_multi' => 0)); $new_input = array();
echo '<input type="checkbox" name="wpmt_multi_settings[enable_multi]" value="1" ' . checked(1, $options['enable_multi'], false) . ' />'; $new_input['enable_multi'] = isset($input['enable_multi']) ? 1 : 0;
} return $new_input;
}
function wpmt_add_admin_menu() {
add_options_page( function wpmt_enable_multi_callback() {
__('WP Multi Toolkit Einstellungen', 'wp-multi-toolkit'), $options = get_option('wpmt_multi_settings', array('enable_multi' => 0));
__('WP Multi Toolkit', 'wp-multi-toolkit'), echo '<input type="checkbox" name="wpmt_multi_settings[enable_multi]" value="1" ' . checked(1, $options['enable_multi'], false) . ' />';
'manage_options', }
'wpmt_settings',
'wpmt_settings_page' function wpmt_add_admin_menu() {
); add_options_page(
} __('WP Multi Toolkit Einstellungen', 'wp-multi-toolkit'),
add_action('admin_menu', 'wpmt_add_admin_menu'); __('WP Multi Toolkit', 'wp-multi-toolkit'),
'manage_options',
function wpmt_settings_page() { 'wpmt_settings',
?> 'wpmt_settings_page'
<div class="wrap"> );
<h1><?php echo esc_html__('WP Multi Toolkit Einstellungen', 'wp-multi-toolkit'); ?></h1> }
<form method="post" action="options.php"> add_action('admin_menu', 'wpmt_add_admin_menu');
<?php
settings_fields('wpmt_options_group'); function wpmt_settings_page() {
do_settings_sections('wpmt_settings'); ?>
submit_button(); <div class="wrap">
?> <h1><?php echo esc_html__('WP Multi Toolkit Einstellungen', 'wp-multi-toolkit'); ?></h1>
</form> <form method="post" action="options.php">
</div> <?php
<?php settings_fields('wpmt_options_group');
} do_settings_sections('wpmt_settings');
submit_button();
// Shortcode für Multi-Funktionalität ?>
function wpmt_multi_shortcode($atts) { </form>
$options = get_option('wpmt_multi_settings', array('enable_multi' => 0)); </div>
if ($options['enable_multi']) { <?php
return '<p>' . __('Multi-Funktion ist aktiviert!', 'wp-multi-toolkit') . '</p>'; }
}
return '<p>' . __('Multi-Funktion ist deaktiviert.', 'wp-multi-toolkit') . '</p>'; // Shortcode für Multi-Funktionalität
} function wpmt_multi_shortcode($atts) {
add_shortcode('wpmt_multi', 'wpmt_multi_shortcode'); $options = get_option('wpmt_multi_settings', array('enable_multi' => 0));
if ($options['enable_multi']) {
// ### Update-Management ### return '<p>' . __('Multi-Funktion ist aktiviert!', 'wp-multi-toolkit') . '</p>';
}
// Widget zum Admin-Dashboard hinzufügen return '<p>' . __('Multi-Funktion ist deaktiviert.', 'wp-multi-toolkit') . '</p>';
function wpmt_update_dashboard_widget() { }
wp_add_dashboard_widget( add_shortcode('wpmt_multi', 'wpmt_multi_shortcode');
'wpmt_update_widget',
__('Verfügbare Updates für WP Multi Toolkit', 'wp-multi-toolkit'), // ### Update-Management ###
'wpmt_update_dashboard_widget_content',
null, // Widget zum Admin-Dashboard hinzufügen
null, function wpmt_update_dashboard_widget() {
'normal', wp_add_dashboard_widget(
'high' 'wpmt_update_widget',
); __('Verfügbare Updates für WP Multi Toolkit', 'wp-multi-toolkit'),
} 'wpmt_update_dashboard_widget_content',
null,
// Dashboard-Setup anpassen null,
function wpmt_force_widget_position() { 'normal',
global $wp_meta_boxes; 'high'
);
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']); // Dashboard-Setup anpassen
$wp_meta_boxes['dashboard']['normal']['high'] = array('wpmt_update_widget' => $widget) + $wp_meta_boxes['dashboard']['normal']['high']; function wpmt_force_widget_position() {
} global $wp_meta_boxes;
}
add_action('wp_dashboard_setup', 'wpmt_update_dashboard_widget', 1); if (isset($wp_meta_boxes['dashboard']['normal']['high']['wpmt_update_widget'])) {
add_action('wp_dashboard_setup', 'wpmt_force_widget_position', 999); $widget = $wp_meta_boxes['dashboard']['normal']['high']['wpmt_update_widget'];
unset($wp_meta_boxes['dashboard']['normal']['high']['wpmt_update_widget']);
// Widget nicht ausblendbar machen $wp_meta_boxes['dashboard']['normal']['high'] = array('wpmt_update_widget' => $widget) + $wp_meta_boxes['dashboard']['normal']['high'];
function wpmt_prevent_widget_hiding($widgets) { }
$widgets['wpmt_update_widget'] = array( }
'id' => 'wpmt_update_widget', add_action('wp_dashboard_setup', 'wpmt_update_dashboard_widget', 1);
'title' => __('Verfügbare Updates für WP Multi Toolkit', 'wp-multi-toolkit'), add_action('wp_dashboard_setup', 'wpmt_force_widget_position', 999);
'callback' => 'wpmt_update_dashboard_widget_content'
); // Widget nicht ausblendbar machen
return $widgets; function wpmt_prevent_widget_hiding($widgets) {
} $widgets['wpmt_update_widget'] = array(
add_filter('dashboard_available_widgets', 'wpmt_prevent_widget_hiding'); 'id' => 'wpmt_update_widget',
'title' => __('Verfügbare Updates für WP Multi Toolkit', 'wp-multi-toolkit'),
// Benutzerdefiniertes Cron-Intervall hinzufügen 'callback' => 'wpmt_update_dashboard_widget_content'
add_filter('cron_schedules', function ($schedules) { );
$schedules['hourly'] = array( return $widgets;
'interval' => 3600, }
'display' => __('Stündlich', 'wp-multi-toolkit'), add_filter('dashboard_available_widgets', 'wpmt_prevent_widget_hiding');
);
return $schedules; // Benutzerdefiniertes Cron-Intervall hinzufügen
}); add_filter('cron_schedules', function ($schedules) {
$schedules['hourly'] = array(
// Cron-Job registrieren 'interval' => 3600,
function wpmt_update_schedule_check() { 'display' => __('Stündlich', 'wp-multi-toolkit'),
if (!wp_next_scheduled('wpmt_update_check_event')) { );
wp_schedule_event(time(), 'hourly', 'wpmt_update_check_event'); return $schedules;
} });
}
add_action('wp', 'wpmt_update_schedule_check'); // Cron-Job registrieren
function wpmt_update_schedule_check() {
// Hilfsfunktion zur Wiederverwendung der Gitea-API-Abfrage if (!wp_next_scheduled('wpmt_update_check_event')) {
function wpmt_fetch_latest_release($repo, $show_prereleases = false) { wp_schedule_event(time(), 'hourly', 'wpmt_update_check_event');
$api_url = "https://git.viper.ipv64.net/api/v1/repos/M_Viper/{$repo}/releases"; }
$response = wp_remote_get($api_url, array('timeout' => 10)); }
add_action('wp', 'wpmt_update_schedule_check');
if (is_wp_error($response)) {
error_log("WP Multi Toolkit Update Fehler für {$repo}: " . $response->get_error_message()); // Hilfsfunktion zur Wiederverwendung der Gitea-API-Abfrage
return false; 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));
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true); if (is_wp_error($response)) {
error_log("WP Multi Toolkit Update Fehler für {$repo}: " . $response->get_error_message());
if (!is_array($data)) { return false;
error_log("WP Multi Toolkit Update für {$repo}: Ungültige API-Antwort"); }
return false;
} $body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
foreach ($data as $release) {
if (!$show_prereleases && isset($release['prerelease']) && $release['prerelease']) { if (!is_array($data)) {
continue; error_log("WP Multi Toolkit Update für {$repo}: Ungültige API-Antwort");
} return false;
if (!empty($release['tag_name'])) { }
return $release;
} foreach ($data as $release) {
} if (!$show_prereleases && isset($release['prerelease']) && $release['prerelease']) {
return null; continue;
} }
if (!empty($release['tag_name'])) {
// Cron-Job für Update-Überprüfung return $release;
function wpmt_update_check() { }
require_once ABSPATH . 'wp-admin/includes/plugin.php'; }
return null;
$show_prereleases = get_option('wpmt_update_show_prereleases', false); }
$installed_plugins = get_plugins();
$plugins_to_check = array( // Cron-Job für Update-Überprüfung
'wp-multi-toolkit' => 'WP-Multi-Toolkit/wp-multi-toolkit.php', function wpmt_update_check() {
'wp-multi' => 'WP-Multi/wp-multi.php', require_once ABSPATH . 'wp-admin/includes/plugin.php';
'WP-Multi-Search' => 'wp-multi-search/wp-multi-search.php',
'wp-multi-comment-notifications' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php' $show_prereleases = get_option('wpmt_update_show_prereleases', false);
); $installed_plugins = get_plugins();
$plugins_to_check = array(
foreach ($plugins_to_check as $repo => $file) { 'wp-multi-toolkit' => 'WP-Multi-Toolkit/wp-multi-toolkit.php',
if (array_key_exists($file, $installed_plugins) && is_plugin_active($file)) { 'wp-multi' => 'WP-Multi/wp-multi.php',
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $file); 'WP-Multi-Search' => 'wp-multi-search/wp-multi-search.php',
$installed_version = $plugin_data['Version']; 'wp-multi-comment-notifications' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php'
$valid_release = wpmt_fetch_latest_release($repo, $show_prereleases); );
if ($valid_release) { foreach ($plugins_to_check as $repo => $file) {
$latest_version = $valid_release['tag_name']; if (array_key_exists($file, $installed_plugins) && is_plugin_active($file)) {
$release_notes = $valid_release['body'] ?? ''; $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $file);
$is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease']; $installed_version = $plugin_data['Version'];
$valid_release = wpmt_fetch_latest_release($repo, $show_prereleases);
update_option("wpmt_update_latest_version_{$repo}", $latest_version);
update_option("wpmt_update_release_notes_{$repo}", $release_notes); if ($valid_release) {
update_option("wpmt_update_is_prerelease_{$repo}", $is_prerelease); $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);
add_action('wpmt_update_check_event', 'wpmt_update_check'); update_option("wpmt_update_release_notes_{$repo}", $release_notes);
update_option("wpmt_update_is_prerelease_{$repo}", $is_prerelease);
// Callback-Funktion für das Widget }
function wpmt_update_dashboard_widget_content() { }
require_once ABSPATH . 'wp-admin/includes/plugin.php'; }
}
$installed_plugins = get_plugins(); add_action('wpmt_update_check_event', 'wpmt_update_check');
$show_prereleases = get_option('wpmt_update_show_prereleases', false);
// Callback-Funktion für das Widget
$plugins_to_check = array( function wpmt_update_dashboard_widget_content() {
'wp-multi-toolkit' => array( require_once ABSPATH . 'wp-admin/includes/plugin.php';
'file' => 'WP-Multi-Toolkit/wp-multi-toolkit.php',
'name' => 'WP Multi Toolkit', $installed_plugins = get_plugins();
'repo' => 'wp-multi-toolkit' $show_prereleases = get_option('wpmt_update_show_prereleases', false);
),
'wp-multi' => array( $plugins_to_check = array(
'file' => 'WP-Multi/wp-multi.php', 'wp-multi-toolkit' => array(
'name' => 'WP Multi', 'file' => 'wp-multi-toolkit/wp-multi-toolkit.php',
'repo' => 'wp-multi' 'name' => 'WP Multi Toolkit',
), 'repo' => 'wp-multi-toolkit'
'WP-Multi-Search' => array( ),
'file' => 'wp-multi-search/wp-multi-search.php', 'wp-multi' => array(
'name' => 'WP Multi Search', 'file' => 'WP-Multi/wp-multi.php',
'repo' => 'WP-Multi-Search' 'name' => 'WP Multi',
), 'repo' => 'wp-multi'
'wp-multi-comment-notifications' => array( ),
'file' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php', 'WP-Multi-Search' => array(
'name' => 'WP Multi Comment Notifications', 'file' => 'wp-multi-search/wp-multi-search.php',
'repo' => 'wp-multi-comment-notifications' 'name' => 'WP Multi Search',
) 'repo' => 'WP-Multi-Search'
); ),
'wp-multi-comment-notifications' => array(
$has_active_plugins = false; 'file' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php',
foreach ($plugins_to_check as $key => $plugin) { 'name' => 'WP Multi Comment Notifications',
$is_installed = array_key_exists($plugin['file'], $installed_plugins); 'repo' => 'wp-multi-comment-notifications'
$is_active = $is_installed && is_plugin_active($plugin['file']); )
);
if ($is_installed && $is_active) {
$has_active_plugins = true; $has_active_plugins = false;
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin['file']); foreach ($plugins_to_check as $key => $plugin) {
$installed_version = $plugin_data['Version']; $is_installed = array_key_exists($plugin['file'], $installed_plugins);
$valid_release = wpmt_fetch_latest_release($plugin['repo'], $show_prereleases); $is_active = $is_installed && is_plugin_active($plugin['file']);
echo '<h4>' . esc_html($plugin['name']) . '</h4>'; if ($is_installed && $is_active) {
if ($valid_release === false) { $has_active_plugins = true;
printf('<p>%s</p>', esc_html__('Fehler beim Abrufen der Versionsinformationen von Gitea.', 'wp-multi-toolkit')); $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin['file']);
} elseif ($valid_release) { $installed_version = $plugin_data['Version'];
$latest_version = $valid_release['tag_name']; $valid_release = wpmt_fetch_latest_release($plugin['repo'], $show_prereleases);
$release_notes = $valid_release['body'] ?? '';
$is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease']; echo '<h4>' . esc_html($plugin['name']) . '</h4>';
if ($valid_release === false) {
if (version_compare($installed_version, $latest_version, '>=')) { printf('<p>%s</p>', esc_html__('Fehler beim Abrufen der Versionsinformationen von Gitea.', 'wp-multi-toolkit'));
printf( } elseif ($valid_release) {
'<p style="color: green;">%s</p>', $latest_version = $valid_release['tag_name'];
sprintf( $release_notes = $valid_release['body'] ?? '';
__('Ihre Version ist aktuell. Version %s ist die neueste Version.', 'wp-multi-toolkit'), $is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease'];
esc_html($installed_version)
) if (version_compare($installed_version, $latest_version, '>=')) {
); printf(
} else { '<p style="color: green;">%s</p>',
printf( sprintf(
'<p style="color: red;">%s</p>', __('Ihre Version ist aktuell. Version %s ist die neueste Version.', 'wp-multi-toolkit'),
sprintf( esc_html($installed_version)
__('Es ist eine neue Version von %s verfügbar! <strong>Version %s</strong> ist jetzt verfügbar.', 'wp-multi-toolkit'), )
esc_html($plugin['name']), );
esc_html($latest_version) } else {
) printf(
); '<p style="color: red;">%s</p>',
printf( sprintf(
'<p>%s: <strong>%s</strong></p>', __('Es ist eine neue Version von %s verfügbar! <strong>Version %s</strong> ist jetzt verfügbar.', 'wp-multi-toolkit'),
__('Aktuell installierte Version', 'wp-multi-toolkit'), esc_html($plugin['name']),
esc_html($installed_version) esc_html($latest_version)
); )
printf( );
'<p>%s: <strong>%s</strong></p>', printf(
__('Neue Version auf Gitea', 'wp-multi-toolkit'), '<p>%s: <strong>%s</strong></p>',
esc_html($latest_version) __('Aktuell installierte Version', 'wp-multi-toolkit'),
); esc_html($installed_version)
);
if ($is_prerelease && $show_prereleases) { printf(
printf('<p style="color: blue;">%s</p>', __('Dieses Update ist ein PreRelease.', 'wp-multi-toolkit')); '<p>%s: <strong>%s</strong></p>',
} __('Neue Version auf Gitea', 'wp-multi-toolkit'),
esc_html($latest_version)
if (!empty($release_notes)) { );
printf(
'<p><strong>%s:</strong></p><p>%s</p>', if ($is_prerelease && $show_prereleases) {
__('Information zum Update', 'wp-multi-toolkit'), printf('<p style="color: blue;">%s</p>', __('Dieses Update ist ein PreRelease.', 'wp-multi-toolkit'));
nl2br(esc_html($release_notes)) }
);
} if (!empty($release_notes)) {
printf(
$button_text = $is_prerelease ? __('PreRelease herunterladen', 'wp-multi-toolkit') : __('Update herunterladen', 'wp-multi-toolkit'); '<p><strong>%s:</strong></p><p>%s</p>',
$download_url = $valid_release['assets'][0]['browser_download_url'] ?? '#'; __('Information zum Update', 'wp-multi-toolkit'),
printf( nl2br(esc_html($release_notes))
'<p><a href="%s" class="button button-primary">%s</a></p>', );
esc_url($download_url), }
esc_html($button_text)
); $button_text = $is_prerelease ? __('PreRelease herunterladen', 'wp-multi-toolkit') : __('Update herunterladen', 'wp-multi-toolkit');
} $download_url = $valid_release['assets'][0]['browser_download_url'] ?? '#';
} else { printf(
printf('<p>%s</p>', esc_html__('Keine Versionsinformationen gefunden.', 'wp-multi-toolkit')); '<p><a href="%s" class="button button-primary">%s</a></p>',
} esc_url($download_url),
} esc_html($button_text)
} );
}
if (!$has_active_plugins) { } else {
echo '<p>' . __('Keine aktiven WP Multi Plugins gefunden.', 'wp-multi-toolkit') . '</p>'; printf('<p>%s</p>', esc_html__('Keine Versionsinformationen gefunden.', 'wp-multi-toolkit'));
} }
}
// Optionale Plugins }
$optional_plugins = array(
'wp-multi-toolkit' => array( if (!$has_active_plugins) {
'file' => 'WP-Multi-Toolkit/wp-multi-toolkit.php', echo '<p>' . __('Keine aktiven WP Multi Plugins gefunden.', 'wp-multi-toolkit') . '</p>';
'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi-toolkit/releases', }
'description' => __('Kern-Toolkit für WP Multi Plugins.', 'wp-multi-toolkit')
), // Optionale Plugins
'wp-multi' => array( $optional_plugins = array(
'file' => 'WP-Multi/wp-multi.php', 'wp-multi-toolkit' => array(
'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi/releases', 'file' => 'wp-multi-toolkit/wp-multi-toolkit.php',
'description' => __('Hauptplugin für WP Multi Funktionen.', 'wp-multi-toolkit') '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-Search' => array( ),
'file' => 'wp-multi-search/wp-multi-search.php', 'wp-multi' => array(
'download_url' => 'https://git.viper.ipv64.net/M_Viper/WP-Multi-Search/releases', 'file' => 'WP-Multi/wp-multi.php',
'description' => __('Erweiterte Suchfunktionen.', 'wp-multi-toolkit') 'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi/releases',
), 'description' => __('Hauptplugin für WP Multi Funktionen.', 'wp-multi-toolkit')
'wp-multi-comment-notifications' => array( ),
'file' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php', 'WP-Multi-Search' => array(
'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi-comment-notifications/releases', 'file' => 'wp-multi-search/wp-multi-search.php',
'description' => __('Kommentar-Benachrichtigungen.', 'wp-multi-toolkit') 'download_url' => 'https://git.viper.ipv64.net/M_Viper/WP-Multi-Search/releases',
) 'description' => __('Erweiterte Suchfunktionen.', 'wp-multi-toolkit')
); ),
'wp-multi-comment-notifications' => array(
echo '<hr style="margin: 20px 0;"><h3>' . __('Optionale Plugins', 'wp-multi-toolkit') . '</h3>'; 'file' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php',
echo '<table style="width: 100%; border-collapse: collapse;">'; 'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi-comment-notifications/releases',
echo '<tr><th style="text-align: left; padding: 5px;">' . __('Plugin', 'wp-multi-toolkit') . '</th><th style="text-align: left; padding: 5px;">' . __('Beschreibung', 'wp-multi-toolkit') . '</th><th style="text-align: left; padding: 5px;">' . __('Status', 'wp-multi-toolkit') . '</th><th style="text-align: left; padding: 5px;">' . __('Aktion', 'wp-multi-toolkit') . '</th></tr>'; 'description' => __('Kommentar-Benachrichtigungen.', 'wp-multi-toolkit')
)
foreach ($optional_plugins as $key => $plugin) { );
$is_installed = array_key_exists($plugin['file'], $installed_plugins);
$is_active = $is_installed && is_plugin_active($plugin['file']); echo '<hr style="margin: 20px 0;"><h3>' . __('Optionale Plugins', 'wp-multi-toolkit') . '</h3>';
echo '<table style="width: 100%; border-collapse: collapse;">';
echo '<tr style="border-bottom: 1px solid #ddd;">'; echo '<tr><th style="text-align: left; padding: 5px;">' . __('Plugin', 'wp-multi-toolkit') . '</th><th style="text-align: left; padding: 5px;">' . __('Beschreibung', 'wp-multi-toolkit') . '</th><th style="text-align: left; padding: 5px;">' . __('Status', 'wp-multi-toolkit') . '</th><th style="text-align: left; padding: 5px;">' . __('Aktion', 'wp-multi-toolkit') . '</th></tr>';
echo '<td style="padding: 5px;"><strong>' . esc_html($plugins_to_check[$key]['name']) . '</strong></td>';
echo '<td style="padding: 5px;">' . esc_html($plugin['description']) . '</td>'; foreach ($optional_plugins as $key => $plugin) {
echo '<td style="padding: 5px;">'; $is_installed = array_key_exists($plugin['file'], $installed_plugins);
if ($is_active) { $is_active = $is_installed && is_plugin_active($plugin['file']);
echo '<span style="color: green;">' . __('Aktiv', 'wp-multi-toolkit') . '</span>';
} elseif ($is_installed) { echo '<tr style="border-bottom: 1px solid #ddd;">';
echo '<span style="color: orange;">' . __('Inaktiv', 'wp-multi-toolkit') . '</span>'; echo '<td style="padding: 5px;"><strong>' . esc_html($plugins_to_check[$key]['name']) . '</strong></td>';
} else { echo '<td style="padding: 5px;">' . esc_html($plugin['description']) . '</td>';
echo '<span style="color: red;">' . __('Nicht installiert', 'wp-multi-toolkit') . '</span>'; echo '<td style="padding: 5px;">';
} if ($is_active) {
echo '</td>'; echo '<span style="color: green;">' . __('Aktiv', 'wp-multi-toolkit') . '</span>';
echo '<td style="padding: 5px;">'; } elseif ($is_installed) {
if ($is_active) { echo '<span style="color: orange;">' . __('Inaktiv', 'wp-multi-toolkit') . '</span>';
echo '—'; } else {
} elseif ($is_installed) { echo '<span style="color: red;">' . __('Nicht installiert', 'wp-multi-toolkit') . '</span>';
echo '<a href="' . esc_url(wp_nonce_url(admin_url('plugins.php?action=activate&plugin=' . $plugin['file']), 'activate-plugin_' . $plugin['file'])) . '" class="button">' . __('Aktivieren', 'wp-multi-toolkit') . '</a>'; }
} else { echo '</td>';
echo '<a href="' . esc_url($plugin['download_url']) . '" class="button button-primary" target="_blank">' . __('Herunterladen', 'wp-multi-toolkit') . '</a>'; echo '<td style="padding: 5px;">';
} if ($is_active) {
echo '</td>'; echo '—';
echo '</tr>'; } elseif ($is_installed) {
} echo '<a href="' . esc_url(wp_nonce_url(admin_url('plugins.php?action=activate&plugin=' . $plugin['file']), 'activate-plugin_' . $plugin['file'])) . '" class="button">' . __('Aktivieren', 'wp-multi-toolkit') . '</a>';
echo '</table>'; } else {
} echo '<a href="' . esc_url($plugin['download_url']) . '" class="button button-primary" target="_blank">' . __('Herunterladen', 'wp-multi-toolkit') . '</a>';
}
// Update-Einstellungen echo '</td>';
function wpmt_update_general_settings() { echo '</tr>';
add_settings_section( }
'wpmt_update_section', echo '</table>';
__('WP Multi Toolkit Update Einstellungen', 'wp-multi-toolkit'), }
null,
'general' // Update-Einstellungen
); function wpmt_update_general_settings() {
add_settings_section(
add_settings_field( 'wpmt_update_section',
'wpmt_update_show_prereleases', __('WP Multi Toolkit Update Einstellungen', 'wp-multi-toolkit'),
__('Pre-Releases anzeigen', 'wp-multi-toolkit'), null,
'wpmt_update_show_prereleases_callback', 'general'
'general', );
'wpmt_update_section'
); add_settings_field(
'wpmt_update_show_prereleases',
register_setting('general', 'wpmt_update_show_prereleases', array( __('Pre-Releases anzeigen', 'wp-multi-toolkit'),
'type' => 'boolean', 'wpmt_update_show_prereleases_callback',
'description' => __('Aktivieren, um Pre-Releases im Dashboard und in den Versionsinformationen anzuzeigen.', 'wp-multi-toolkit'), 'general',
'default' => 0, 'wpmt_update_section'
)); );
}
add_action('admin_init', 'wpmt_update_general_settings'); register_setting('general', 'wpmt_update_show_prereleases', array(
'type' => 'boolean',
// Callback-Funktion für das Anzeigen der Checkbox 'description' => __('Aktivieren, um Pre-Releases im Dashboard und in den Versionsinformationen anzuzeigen.', 'wp-multi-toolkit'),
function wpmt_update_show_prereleases_callback() { 'default' => 0,
$checked = get_option('wpmt_update_show_prereleases', false); ));
echo '<input type="checkbox" name="wpmt_update_show_prereleases" value="1" ' . checked(1, $checked, false) . '/>'; }
echo '<p style="color: red;"><small>' . __('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') . '</small></p>'; add_action('admin_init', 'wpmt_update_general_settings');
}
// Callback-Funktion für das Anzeigen der Checkbox
// Deinstallation function wpmt_update_show_prereleases_callback() {
function wpmt_uninstall() { $checked = get_option('wpmt_update_show_prereleases', false);
$repos = array('wp-multi-toolkit', 'wp-multi', 'WP-Multi-Search', 'wp-multi-comment-notifications'); echo '<input type="checkbox" name="wpmt_update_show_prereleases" value="1" ' . checked(1, $checked, false) . '/>';
foreach ($repos as $repo) { echo '<p style="color: red;"><small>' . __('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') . '</small></p>';
delete_option("wpmt_update_latest_version_{$repo}"); }
delete_option("wpmt_update_release_notes_{$repo}");
delete_option("wpmt_update_is_prerelease_{$repo}"); // Deinstallation
} function wpmt_uninstall() {
delete_option('wpmt_update_show_prereleases'); $repos = array('wp-multi-toolkit', 'wp-multi', 'WP-Multi-Search', 'wp-multi-comment-notifications');
delete_option('wpmt_multi_settings'); foreach ($repos as $repo) {
wp_clear_scheduled_hook('wpmt_update_check_event'); 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'); register_uninstall_hook(__FILE__, 'wpmt_uninstall');