diff --git a/wp-multi-comment-notifications.php b/wp-multi-comment-notifications.php index b0e5a32..90edaf3 100644 --- a/wp-multi-comment-notifications.php +++ b/wp-multi-comment-notifications.php @@ -3,7 +3,7 @@ * Plugin Name: WP Multi Comment Notifications * Plugin URI: https://git.viper.ipv64.net/M_Viper/wp-multi-comment-notifications * Description: Benachrichtigt bei neuen Kommentaren per E-Mail und optional über Telegram & Discord. Ideal für Teams, die schnell informiert werden wollen. - * Version: 1.1 + * Version: 1.3 * Author: M_Viper * Author URI: https://m-viper.de * Requires at least: 6.7.2 @@ -19,129 +19,99 @@ * - Telegram: https://t.me/M_Viper04 */ -if ( ! defined( 'ABSPATH' ) ) { +if (!defined('ABSPATH')) { exit; } -/** - * Dashboard Widget – Update Info für dieses Plugin - */ -function wp_multi_cmn_dashboard_widget() { - wp_add_dashboard_widget( - 'wp_multi_cmn_update_widget', - __('WP Multi Comment Notifications – Update Info', 'wp-multi-comment-notifications'), - 'wp_multi_cmn_update_dashboard_widget_content' - ); -} -add_action('wp_dashboard_setup', 'wp_multi_cmn_dashboard_widget'); +define('WPMCN_PLUGIN_VERSION', '1.2'); +define('WPMCN_PLUGIN_DIR', plugin_dir_path(__FILE__)); -// Cron-Intervall „stündlich“ definieren -add_filter('cron_schedules', function ($schedules) { - $schedules['hourly'] = array( - 'interval' => 3600, - 'display' => __('Stündlich', 'wp-multi-comment-notifications'), - ); - return $schedules; -}); +// Abhängigkeit prüfen und WP Multi Toolkit installieren/aktivieren +function wpmcn_check_dependency() { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + $required_plugin = 'WP-Multi-Toolkit/wp-multi-toolkit.php'; + $download_url = 'https://git.viper.ipv64.net/M_Viper/wp-multi-toolkit/releases/latest/download/wp-multi-toolkit.zip'; // Direkter Download-Link zur neuesten ZIP -// Cron-Event planen -function wp_multi_cmn_schedule_update_check() { - if (!wp_next_scheduled('wp_multi_cmn_update_check_event')) { - wp_schedule_event(time(), 'hourly', 'wp_multi_cmn_update_check_event'); - } -} -add_action('wp', 'wp_multi_cmn_schedule_update_check'); - -// Gitea API aufrufen -function wp_multi_cmn_fetch_latest_release($show_prereleases = false) { - $api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/wp-multi-comment-notifications/releases'; - $response = wp_remote_get($api_url, array('timeout' => 10)); - - if (is_wp_error($response)) { - error_log('WP Multi Comment Notifications – Update Fehler: ' . $response->get_error_message()); - return false; + // Prüfen, ob WP Multi Toolkit installiert ist + if (!file_exists(WP_PLUGIN_DIR . '/' . $required_plugin)) { + // Plugin ist nicht installiert, versuche es zu installieren + wpmcn_install_required_plugin($download_url, $required_plugin); } - $body = wp_remote_retrieve_body($response); - $data = json_decode($body, true); - - if (!is_array($data)) { - error_log('WP Multi Comment Notifications – 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; + // Prüfen, ob WP Multi Toolkit aktiv ist + if (!is_plugin_active($required_plugin)) { + // Plugin ist installiert, aber nicht aktiv, aktiviere es + $result = activate_plugin($required_plugin); + if (is_wp_error($result)) { + // Fehlerbehandlung: Admin-Benachrichtigung + add_action('admin_notices', function () use ($result) { + echo '

' . sprintf( + __('Fehler beim Aktivieren von WP Multi Toolkit: %s', 'wp-multi-comment-notifications'), + esc_html($result->get_error_message()) + ) . '

'; + }); } } - - return null; } -// Cron Callback -function wp_multi_cmn_update_check() { - if (!function_exists('get_plugin_data')) { - require_once ABSPATH . 'wp-admin/includes/plugin.php'; +// Funktion zum Installieren des erforderlichen Plugins +function wpmcn_install_required_plugin($download_url, $plugin_file) { + if (!current_user_can('install_plugins')) { + return; // Nur Admins können Plugins installieren } - $plugin_data = get_plugin_data(__FILE__); - $installed_version = $plugin_data['Version']; - $show_prereleases = get_option('wp_multi_cmn_show_prereleases', false); + require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; + require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + require_once ABSPATH . 'wp-admin/includes/file.php'; - $release = wp_multi_cmn_fetch_latest_release($show_prereleases); - - if ($release) { - update_option('wp_multi_cmn_latest_version', $release['tag_name']); - update_option('wp_multi_cmn_release_notes', $release['body']); - update_option('wp_multi_cmn_is_prerelease', $release['prerelease']); - } -} -add_action('wp_multi_cmn_update_check_event', 'wp_multi_cmn_update_check'); - -// Widget Callback -function wp_multi_cmn_update_dashboard_widget_content() { - if (!function_exists('get_plugin_data')) { - require_once ABSPATH . 'wp-admin/includes/plugin.php'; - } - - $plugin_data = get_plugin_data(__FILE__); - $installed_version = $plugin_data['Version']; - $show_prereleases = get_option('wp_multi_cmn_show_prereleases', false); - - $release = wp_multi_cmn_fetch_latest_release($show_prereleases); - - if ($release === false) { - echo '

Fehler beim Abrufen der Update-Informationen.

'; + // Dateisystemzugriff initialisieren + $access_type = get_filesystem_method(); + if ($access_type !== 'direct') { + add_action('admin_notices', function () { + echo '

' . __('Direkter Dateizugriff erforderlich, um WP Multi Toolkit zu installieren. Bitte überprüfe die Dateisystemkonfiguration.', 'wp-multi-comment-notifications') . '

'; + }); return; } - $latest_version = $release['tag_name']; - $release_notes = isset($release['body']) ? $release['body'] : ''; - $is_prerelease = isset($release['prerelease']) && $release['prerelease']; + $creds = request_filesystem_credentials(admin_url(), '', false, false, null); + if (!WP_Filesystem($creds)) { + add_action('admin_notices', function () { + echo '

' . __('Dateisystemzugriff fehlgeschlagen. WP Multi Toolkit konnte nicht installiert werden.', 'wp-multi-comment-notifications') . '

'; + }); + return; + } - if (version_compare($installed_version, $latest_version, '>=')) { - echo '

Du verwendest die aktuelle Version: ' . esc_html($installed_version) . '

'; + $upgrader = new Plugin_Upgrader(); + $result = $upgrader->install($download_url); + + if (is_wp_error($result)) { + add_action('admin_notices', function () use ($result) { + echo '

' . sprintf( + __('Fehler beim Installieren von WP Multi Toolkit: %s', 'wp-multi-comment-notifications'), + esc_html($result->get_error_message()) + ) . '

'; + }); } else { - echo '

Neue Version verfügbar: ' . esc_html($latest_version) . '

'; - echo '

Installiert: ' . esc_html($installed_version) . '

'; - - if ($is_prerelease && $show_prereleases) { - echo '

Hinweis: Dies ist ein PreRelease.

'; + // Installation erfolgreich, aktiviere das Plugin + $activate = activate_plugin($plugin_file); + if (is_wp_error($activate)) { + add_action('admin_notices', function () use ($activate) { + echo '

' . sprintf( + __('Fehler beim Aktivieren von WP Multi Toolkit nach Installation: %s', 'wp-multi-comment-notifications'), + esc_html($activate->get_error_message()) + ) . '

'; + }); + } else { + add_action('admin_notices', function () { + echo '

' . __('WP Multi Toolkit wurde erfolgreich installiert und aktiviert.', 'wp-multi-comment-notifications') . '

'; + }); } - - if (!empty($release_notes)) { - echo '

Release Notes:
' . nl2br(esc_html($release_notes)) . '

'; - } - - $download_url = isset($release['assets'][0]['browser_download_url']) ? $release['assets'][0]['browser_download_url'] : '#'; - echo '

Update herunterladen

'; } } +// Prüfung bei Plugin-Aktivierung und jedem Admin-Ladevorgang +register_activation_hook(__FILE__, 'wpmcn_check_dependency'); +add_action('admin_init', 'wpmcn_check_dependency'); // 1. Plugin-Optionen im Admin-Bereich unter dem Menü "Kommentare" hinzufügen function wp_multi_comment_notifications_menu() { @@ -162,8 +132,8 @@ function wp_multi_comment_notifications_settings_page() {

WP Multi Comment Notifications Einstellungen

Telegram Bot Token

@@ -177,7 +147,6 @@ function wp_multi_comment_notifications_settings_page() {

Verwende Platzhalter wie {{COMMENT_AUTHOR}}, {{COMMENT_TEXT}}, {{USER_NAME}} für dynamische Daten.

-

Nachricht für E-Mail

Verwende Platzhalter wie {{COMMENT_AUTHOR}}, {{COMMENT_TEXT}}, {{USER_NAME}} für dynamische Daten.

@@ -209,7 +178,7 @@ function wp_multi_comment_notifications_settings_page() { " /> - " /> + " /> @@ -275,7 +244,6 @@ function wp_multi_comment_notifications_register_settings() { register_setting('wp_multi_comment_notifications_settings_group', 'wp_email_logo_url'); register_setting('wp_multi_comment_notifications_settings_group', 'wp_discord_webhook_url'); register_setting('wp_multi_comment_notifications_settings_group', 'wp_discord_message'); - } add_action('admin_init', 'wp_multi_comment_notifications_register_settings'); @@ -322,7 +290,7 @@ function wp_multi_comment_notifications_on_comment($comment_ID) { $html .= nl2br(esc_html($email_msg)); $headers = [ 'Content-Type: text/html; charset=UTF-8', - "From: $site ', + 'From' => get_option('admin_email'), ]; wp_mail($email, 'Neuer Kommentar', $html, $headers); } @@ -341,7 +309,6 @@ function wp_multi_comment_notifications_on_comment($comment_ID) { } add_action('wp_insert_comment', 'wp_multi_comment_notifications_on_comment', 10, 1); - /** ------------------------- * Testnachrichten senden * ------------------------- */ @@ -378,7 +345,6 @@ function wp_multi_comment_notifications_send_test_message($user_number) { } } - /** ------------------------- * Telegram-Nachricht mit Button * ------------------------- */ @@ -405,7 +371,6 @@ function wp_multi_comment_notifications_send_telegram($token, $chat_id, $comment ]); } - /** ------------------------- * Discord-Nachricht senden * ------------------------- */ @@ -417,4 +382,4 @@ function wp_multi_comment_notifications_send_discord($webhook_url, $message) { 'body' => $payload, 'timeout' => 10, ]); -} +} \ No newline at end of file