wp-multi-comment-notifications.php aktualisiert
This commit is contained in:
		@@ -1,359 +1,420 @@
 | 
			
		||||
<?php
 | 
			
		||||
/*
 | 
			
		||||
 * 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. Ideal für Teams, die schnell informiert werden wollen.
 | 
			
		||||
 * Version: 1.0
 | 
			
		||||
 * Author: M_Viper
 | 
			
		||||
 * Author URI: https://m-viper.de
 | 
			
		||||
 * Requires at least: 6.7.2
 | 
			
		||||
 * Tested up to: 6.7.2
 | 
			
		||||
 * License: GPL2
 | 
			
		||||
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 | 
			
		||||
 * Text Domain: wp-multi-comment-notifications
 | 
			
		||||
 * Domain Path: /languages
 | 
			
		||||
 * Tags: kommentare, benachrichtigung, e-mail, telegram, kommentarüberwachung, teamkommunikation
 | 
			
		||||
 *
 | 
			
		||||
 * Support:
 | 
			
		||||
 * - Microsoft Teams: https://teams.live.com/l/community/FEAzokphpZTJ2u6OgI
 | 
			
		||||
 * - Telegram: https://t.me/M_Viper04
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
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');
 | 
			
		||||
 | 
			
		||||
// 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;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// 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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Cron Callback
 | 
			
		||||
function wp_multi_cmn_update_check() {
 | 
			
		||||
    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) {
 | 
			
		||||
        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 '<p style="color:red;">Fehler beim Abrufen der Update-Informationen.</p>';
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $latest_version = $release['tag_name'];
 | 
			
		||||
    $release_notes = isset($release['body']) ? $release['body'] : '';
 | 
			
		||||
    $is_prerelease = isset($release['prerelease']) && $release['prerelease'];
 | 
			
		||||
 | 
			
		||||
    if (version_compare($installed_version, $latest_version, '>=')) {
 | 
			
		||||
        echo '<p style="color:green;">Du verwendest die aktuelle Version: <strong>' . esc_html($installed_version) . '</strong></p>';
 | 
			
		||||
    } else {
 | 
			
		||||
        echo '<p style="color:red;"><strong>Neue Version verfügbar: ' . esc_html($latest_version) . '</strong></p>';
 | 
			
		||||
        echo '<p>Installiert: <strong>' . esc_html($installed_version) . '</strong></p>';
 | 
			
		||||
 | 
			
		||||
        if ($is_prerelease && $show_prereleases) {
 | 
			
		||||
            echo '<p style="color:blue;">Hinweis: Dies ist ein PreRelease.</p>';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!empty($release_notes)) {
 | 
			
		||||
            echo '<p><strong>Release Notes:</strong><br>' . nl2br(esc_html($release_notes)) . '</p>';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $download_url = isset($release['assets'][0]['browser_download_url']) ? $release['assets'][0]['browser_download_url'] : '#';
 | 
			
		||||
        echo '<p><a href="' . esc_url($download_url) . '" class="button button-primary">Update herunterladen</a></p>';
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 1. Plugin-Optionen im Admin-Bereich unter dem Menü "Kommentare" hinzufügen
 | 
			
		||||
function wp_multi_comment_notifications_menu() {
 | 
			
		||||
    add_submenu_page(
 | 
			
		||||
        'edit-comments.php',
 | 
			
		||||
        'WP Multi Comment Notifications',
 | 
			
		||||
        'Kommentar Benachrichtigungen',
 | 
			
		||||
        'manage_options',
 | 
			
		||||
        'wp-multi-comment-notifications',
 | 
			
		||||
        'wp_multi_comment_notifications_settings_page'
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
add_action('admin_menu', 'wp_multi_comment_notifications_menu');
 | 
			
		||||
 | 
			
		||||
function wp_multi_comment_notifications_settings_page() {
 | 
			
		||||
    ?>
 | 
			
		||||
    <div class="wrap">
 | 
			
		||||
        <h1>WP Multi Comment Notifications Einstellungen</h1>
 | 
			
		||||
        <form method="post" action="options.php">
 | 
			
		||||
            <?php
 | 
			
		||||
            settings_fields( 'wp_multi_comment_notifications_settings_group' );
 | 
			
		||||
            do_settings_sections( 'wp-multi-comment-notifications' );
 | 
			
		||||
            ?>
 | 
			
		||||
            <h3>Telegram Bot Token</h3>
 | 
			
		||||
            <label for="wp_telegram_token">Telegram Bot Token</label>
 | 
			
		||||
            <input type="text" name="wp_telegram_token" value="<?php echo esc_attr(get_option('wp_telegram_token')); ?>" class="regular-text" />
 | 
			
		||||
 | 
			
		||||
            <h3>Nachricht für E-Mail</h3>
 | 
			
		||||
            <textarea name="wp_email_message" rows="5" class="large-text"><?php echo esc_textarea(get_option('wp_email_message')); ?></textarea>
 | 
			
		||||
            <p>Verwende Platzhalter wie <code>{{COMMENT_AUTHOR}}</code>, <code>{{COMMENT_TEXT}}</code>, <code>{{USER_NAME}}</code> für dynamische Daten.</p>
 | 
			
		||||
 | 
			
		||||
            <h3>Nachricht für Telegram</h3>
 | 
			
		||||
            <textarea name="wp_telegram_message" rows="5" class="large-text"><?php echo esc_textarea(get_option('wp_telegram_message')); ?></textarea>
 | 
			
		||||
            <p>Verwende Platzhalter wie <code>{{COMMENT_AUTHOR}}</code>, <code>{{COMMENT_TEXT}}</code>, <code>{{USER_NAME}}</code> für dynamische Daten.</p>
 | 
			
		||||
 | 
			
		||||
            <h3>Backend-Button URL</h3>
 | 
			
		||||
            <label for="wp_backend_button_url">URL für Backend Button</label>
 | 
			
		||||
            <input type="text" name="wp_backend_button_url" value="<?php echo esc_attr(get_option('wp_backend_button_url')); ?>" class="regular-text" />
 | 
			
		||||
 | 
			
		||||
            <h3>Logo/Banner für E-Mail</h3>
 | 
			
		||||
            <label for="wp_email_logo_url">Logo/Banner URL</label>
 | 
			
		||||
            <input type="text" name="wp_email_logo_url" value="<?php echo esc_attr(get_option('wp_email_logo_url')); ?>" class="regular-text" />
 | 
			
		||||
            <p>Füge hier die vollständige URL zum Logo/Banner ein, das in der E-Mail angezeigt werden soll.</p>
 | 
			
		||||
 | 
			
		||||
            <div class="user-boxes">
 | 
			
		||||
                <?php for ($i = 1; $i <= 6; $i++) : ?>
 | 
			
		||||
                    <div class="user-box">
 | 
			
		||||
                        <h3>User <?php echo $i; ?></h3>
 | 
			
		||||
                        <label for="wp_user_<?php echo $i; ?>_name">Name</label>
 | 
			
		||||
                        <input type="text" name="wp_user_<?php echo $i; ?>_name" value="<?php echo esc_attr(get_option("wp_user_{$i}_name")); ?>" />
 | 
			
		||||
 | 
			
		||||
                        <label for="wp_user_<?php echo $i; ?>_email">E-Mail Adresse</label>
 | 
			
		||||
                        <input type="email" name="wp_user_<?php echo $i; ?>_email" value="<?php echo esc_attr(get_option("wp_user_{$i}_email")); ?>" />
 | 
			
		||||
 | 
			
		||||
                        <label for="wp_user_<?php echo $i; ?>_telegram_chat_id">Telegram Chat ID</label>
 | 
			
		||||
                        <input type="text" name="wp_user_<?php echo $i; ?>_telegram_chat_id" value="<?php echo esc_attr(get_option("wp_user_{$i}_telegram_chat_id")); ?>" />
 | 
			
		||||
                    </div>
 | 
			
		||||
                <?php endfor; ?>
 | 
			
		||||
            </div>
 | 
			
		||||
            <?php submit_button(); ?>
 | 
			
		||||
        </form>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <style>
 | 
			
		||||
        .user-boxes {
 | 
			
		||||
            display: flex;
 | 
			
		||||
            flex-wrap: wrap;
 | 
			
		||||
            gap: 20px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-box {
 | 
			
		||||
            width: 30%;
 | 
			
		||||
            padding: 15px;
 | 
			
		||||
            border: 1px solid #ddd;
 | 
			
		||||
            border-radius: 5px;
 | 
			
		||||
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-box h3 {
 | 
			
		||||
            margin-top: 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-box label {
 | 
			
		||||
            display: block;
 | 
			
		||||
            margin-bottom: 5px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-box input,
 | 
			
		||||
        .user-box textarea {
 | 
			
		||||
            width: 100%;
 | 
			
		||||
            padding: 8px;
 | 
			
		||||
            margin-bottom: 10px;
 | 
			
		||||
            border: 1px solid #ddd;
 | 
			
		||||
            border-radius: 5px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .regular-text {
 | 
			
		||||
            width: 100%;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .large-text {
 | 
			
		||||
            width: 100%;
 | 
			
		||||
            height: 150px;
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
    <?php
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function wp_multi_comment_notifications_register_settings() {
 | 
			
		||||
    for ($i = 1; $i <= 6; $i++) {
 | 
			
		||||
        register_setting('wp_multi_comment_notifications_settings_group', "wp_user_{$i}_name");
 | 
			
		||||
        register_setting('wp_multi_comment_notifications_settings_group', "wp_user_{$i}_email");
 | 
			
		||||
        register_setting('wp_multi_comment_notifications_settings_group', "wp_user_{$i}_telegram_chat_id");
 | 
			
		||||
    }
 | 
			
		||||
    register_setting('wp_multi_comment_notifications_settings_group', 'wp_telegram_token');
 | 
			
		||||
    register_setting('wp_multi_comment_notifications_settings_group', 'wp_email_message');
 | 
			
		||||
    register_setting('wp_multi_comment_notifications_settings_group', 'wp_telegram_message');
 | 
			
		||||
    register_setting('wp_multi_comment_notifications_settings_group', 'wp_backend_button_url');
 | 
			
		||||
    register_setting('wp_multi_comment_notifications_settings_group', 'wp_email_logo_url');
 | 
			
		||||
}
 | 
			
		||||
add_action('admin_init', 'wp_multi_comment_notifications_register_settings');
 | 
			
		||||
 | 
			
		||||
// 2. Kommentar-Benachrichtigung bei neuem Kommentar
 | 
			
		||||
function wp_multi_comment_notifications_on_comment($comment_ID) {
 | 
			
		||||
    $comment = get_comment($comment_ID);
 | 
			
		||||
    $comment_author = $comment->comment_author;
 | 
			
		||||
    $comment_text = $comment->comment_content;
 | 
			
		||||
    $site_name = get_bloginfo('name');
 | 
			
		||||
    $backend_url = get_option('wp_backend_button_url');
 | 
			
		||||
    $logo_url = esc_url(get_option('wp_email_logo_url'));
 | 
			
		||||
 | 
			
		||||
    for ($i = 1; $i <= 6; $i++) {
 | 
			
		||||
        $user_name = get_option("wp_user_{$i}_name");
 | 
			
		||||
        $user_email = get_option("wp_user_{$i}_email");
 | 
			
		||||
        $telegram_chat_id = get_option("wp_user_{$i}_telegram_chat_id");
 | 
			
		||||
 | 
			
		||||
        $email_message = str_replace(
 | 
			
		||||
            ['{{COMMENT_AUTHOR}}', '{{COMMENT_TEXT}}', '{{USER_NAME}}'],
 | 
			
		||||
            [$comment_author, $comment_text, $user_name],
 | 
			
		||||
            get_option('wp_email_message')
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        if (!empty($backend_url)) {
 | 
			
		||||
            $email_message .= "\n\nWeitere Details hier: " . $backend_url;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($user_email) {
 | 
			
		||||
            $html_message = '';
 | 
			
		||||
            if (!empty($logo_url)) {
 | 
			
		||||
                $html_message .= '<img src="' . $logo_url . '" alt="Logo" style="max-width: 100%; height: auto; margin-bottom: 20px;"><br>';
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $html_message .= nl2br(esc_html($email_message));
 | 
			
		||||
 | 
			
		||||
            $headers = [
 | 
			
		||||
                'Content-Type: text/html; charset=UTF-8',
 | 
			
		||||
                'From: ' . $site_name . ' <no-reply@' . $_SERVER['SERVER_NAME'] . '>'
 | 
			
		||||
            ];
 | 
			
		||||
 | 
			
		||||
            wp_mail(trim($user_email), 'Neuer Kommentar', $html_message, $headers);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $telegram_message = str_replace(
 | 
			
		||||
            ['{{COMMENT_AUTHOR}}', '{{COMMENT_TEXT}}', '{{USER_NAME}}'],
 | 
			
		||||
            [$comment_author, $comment_text, $user_name],
 | 
			
		||||
            get_option('wp_telegram_message')
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        if ($telegram_chat_id) {
 | 
			
		||||
            wp_multi_comment_notifications_send_telegram(get_option('wp_telegram_token'), $telegram_chat_id, $comment_ID, $telegram_message);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
add_action('wp_insert_comment', 'wp_multi_comment_notifications_on_comment', 10, 1);
 | 
			
		||||
 | 
			
		||||
// 3. Telegram Nachricht senden (mit Inline-Button)
 | 
			
		||||
function wp_multi_comment_notifications_send_telegram($token, $chat_id, $comment_ID, $message) {
 | 
			
		||||
    $url = "https://api.telegram.org/bot$token/sendMessage";
 | 
			
		||||
    $button_url = get_option('wp_backend_button_url');
 | 
			
		||||
    $inline_button = [];
 | 
			
		||||
 | 
			
		||||
    if (!empty($button_url)) {
 | 
			
		||||
        $inline_button = [
 | 
			
		||||
            'inline_keyboard' => [
 | 
			
		||||
                [
 | 
			
		||||
                    ['text' => 'Zum Backend', 'url' => $button_url]
 | 
			
		||||
                ]
 | 
			
		||||
            ]
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $data = [
 | 
			
		||||
        'chat_id' => $chat_id,
 | 
			
		||||
        'text' => $message,
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    if (!empty($inline_button)) {
 | 
			
		||||
        $data['reply_markup'] = json_encode($inline_button);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $options = [
 | 
			
		||||
        'http' => [
 | 
			
		||||
            'method' => 'POST',
 | 
			
		||||
            'content' => http_build_query($data),
 | 
			
		||||
            'header' => "Content-Type: application/x-www-form-urlencoded\r\n"
 | 
			
		||||
        ]
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    $context = stream_context_create($options);
 | 
			
		||||
    $response = file_get_contents($url, false, $context);
 | 
			
		||||
 | 
			
		||||
    if ($response === FALSE) {
 | 
			
		||||
        error_log("Fehler bei Telegram-Nachricht: $url");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
<?php
 | 
			
		||||
/*
 | 
			
		||||
 * 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
 | 
			
		||||
 * Author: M_Viper
 | 
			
		||||
 * Author URI: https://m-viper.de
 | 
			
		||||
 * Requires at least: 6.7.2
 | 
			
		||||
 * Tested up to: 6.7.2
 | 
			
		||||
 * License: GPL2
 | 
			
		||||
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 | 
			
		||||
 * Text Domain: wp-multi-comment-notifications
 | 
			
		||||
 * Domain Path: /languages
 | 
			
		||||
 * Tags: kommentare, benachrichtigung, e-mail, telegram, discord, kommentarüberwachung, teamkommunikation
 | 
			
		||||
 *
 | 
			
		||||
 * Support:
 | 
			
		||||
 * - Microsoft Teams: https://teams.live.com/l/community/FEAzokphpZTJ2u6OgI
 | 
			
		||||
 * - Telegram: https://t.me/M_Viper04
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
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');
 | 
			
		||||
 | 
			
		||||
// 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;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// 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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Cron Callback
 | 
			
		||||
function wp_multi_cmn_update_check() {
 | 
			
		||||
    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) {
 | 
			
		||||
        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 '<p style="color:red;">Fehler beim Abrufen der Update-Informationen.</p>';
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $latest_version = $release['tag_name'];
 | 
			
		||||
    $release_notes = isset($release['body']) ? $release['body'] : '';
 | 
			
		||||
    $is_prerelease = isset($release['prerelease']) && $release['prerelease'];
 | 
			
		||||
 | 
			
		||||
    if (version_compare($installed_version, $latest_version, '>=')) {
 | 
			
		||||
        echo '<p style="color:green;">Du verwendest die aktuelle Version: <strong>' . esc_html($installed_version) . '</strong></p>';
 | 
			
		||||
    } else {
 | 
			
		||||
        echo '<p style="color:red;"><strong>Neue Version verfügbar: ' . esc_html($latest_version) . '</strong></p>';
 | 
			
		||||
        echo '<p>Installiert: <strong>' . esc_html($installed_version) . '</strong></p>';
 | 
			
		||||
 | 
			
		||||
        if ($is_prerelease && $show_prereleases) {
 | 
			
		||||
            echo '<p style="color:blue;">Hinweis: Dies ist ein PreRelease.</p>';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!empty($release_notes)) {
 | 
			
		||||
            echo '<p><strong>Release Notes:</strong><br>' . nl2br(esc_html($release_notes)) . '</p>';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $download_url = isset($release['assets'][0]['browser_download_url']) ? $release['assets'][0]['browser_download_url'] : '#';
 | 
			
		||||
        echo '<p><a href="' . esc_url($download_url) . '" class="button button-primary">Update herunterladen</a></p>';
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 1. Plugin-Optionen im Admin-Bereich unter dem Menü "Kommentare" hinzufügen
 | 
			
		||||
function wp_multi_comment_notifications_menu() {
 | 
			
		||||
    add_submenu_page(
 | 
			
		||||
        'edit-comments.php',
 | 
			
		||||
        'WP Multi Comment Notifications',
 | 
			
		||||
        'Kommentar Benachrichtigungen',
 | 
			
		||||
        'manage_options',
 | 
			
		||||
        'wp-multi-comment-notifications',
 | 
			
		||||
        'wp_multi_comment_notifications_settings_page'
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
add_action('admin_menu', 'wp_multi_comment_notifications_menu');
 | 
			
		||||
 | 
			
		||||
function wp_multi_comment_notifications_settings_page() {
 | 
			
		||||
    ?>
 | 
			
		||||
    <div class="wrap">
 | 
			
		||||
        <h1>WP Multi Comment Notifications Einstellungen</h1>
 | 
			
		||||
        <form method="post" action="options.php">
 | 
			
		||||
            <?php
 | 
			
		||||
            settings_fields( 'wp_multi_comment_notifications_settings_group' );
 | 
			
		||||
            do_settings_sections( 'wp-multi-comment-notifications' );
 | 
			
		||||
            ?>
 | 
			
		||||
            <h3>Telegram Bot Token</h3>
 | 
			
		||||
            <label for="wp_telegram_token">Telegram Bot Token</label>
 | 
			
		||||
            <input type="text" name="wp_telegram_token" value="<?php echo esc_attr(get_option('wp_telegram_token')); ?>" class="regular-text" />
 | 
			
		||||
 | 
			
		||||
            <h3>Discord Webhook URL</h3>
 | 
			
		||||
            <label for="wp_discord_webhook_url">Webhook URL</label>
 | 
			
		||||
            <input type="text" name="wp_discord_webhook_url" value="<?php echo esc_attr(get_option('wp_discord_webhook_url')); ?>" class="regular-text" />
 | 
			
		||||
 | 
			
		||||
            <h3>Nachricht für Discord</h3>
 | 
			
		||||
            <textarea name="wp_discord_message" rows="5" class="large-text"><?php echo esc_textarea(get_option('wp_discord_message')); ?></textarea>
 | 
			
		||||
            <p>Verwende Platzhalter wie <code>{{COMMENT_AUTHOR}}</code>, <code>{{COMMENT_TEXT}}</code>, <code>{{USER_NAME}}</code> für dynamische Daten.</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            <h3>Nachricht für E-Mail</h3>
 | 
			
		||||
            <textarea name="wp_email_message" rows="5" class="large-text"><?php echo esc_textarea(get_option('wp_email_message')); ?></textarea>
 | 
			
		||||
            <p>Verwende Platzhalter wie <code>{{COMMENT_AUTHOR}}</code>, <code>{{COMMENT_TEXT}}</code>, <code>{{USER_NAME}}</code> für dynamische Daten.</p>
 | 
			
		||||
 | 
			
		||||
            <h3>Nachricht für Telegram</h3>
 | 
			
		||||
            <textarea name="wp_telegram_message" rows="5" class="large-text"><?php echo esc_textarea(get_option('wp_telegram_message')); ?></textarea>
 | 
			
		||||
            <p>Verwende Platzhalter wie <code>{{COMMENT_AUTHOR}}</code>, <code>{{COMMENT_TEXT}}</code>, <code>{{USER_NAME}}</code> für dynamische Daten.</p>
 | 
			
		||||
 | 
			
		||||
            <h3>Backend-Button URL</h3>
 | 
			
		||||
            <label for="wp_backend_button_url">URL für Backend Button</label>
 | 
			
		||||
            <input type="text" name="wp_backend_button_url" value="<?php echo esc_attr(get_option('wp_backend_button_url')); ?>" class="regular-text" />
 | 
			
		||||
 | 
			
		||||
            <h3>Logo/Banner für E-Mail</h3>
 | 
			
		||||
            <label for="wp_email_logo_url">Logo/Banner URL</label>
 | 
			
		||||
            <input type="text" name="wp_email_logo_url" value="<?php echo esc_attr(get_option('wp_email_logo_url')); ?>" class="regular-text" />
 | 
			
		||||
            <p>Füge hier die vollständige URL zum Logo/Banner ein, das in der E-Mail angezeigt werden soll.</p>
 | 
			
		||||
 | 
			
		||||
            <div class="user-boxes">
 | 
			
		||||
                <?php for ($i = 1; $i <= 6; $i++) : ?>
 | 
			
		||||
                    <div class="user-box">
 | 
			
		||||
                        <h3>User <?php echo $i; ?></h3>
 | 
			
		||||
                        <label for="wp_user_<?php echo $i; ?>_name">Name</label>
 | 
			
		||||
                        <input type="text" name="wp_user_<?php echo $i; ?>_name" value="<?php echo esc_attr(get_option("wp_user_{$i}_name")); ?>" />
 | 
			
		||||
 | 
			
		||||
                        <label for="wp_user_<?php echo $i; ?>_email">E-Mail Adresse</label>
 | 
			
		||||
                        <input type="email" name="wp_user_<?php echo $i; ?>_email" value="<?php echo esc_attr(get_option("wp_user_{$i}_email")); ?>" />
 | 
			
		||||
 | 
			
		||||
                        <label for="wp_user_<?php echo $i; ?>_telegram_chat_id">Telegram Chat ID</label>
 | 
			
		||||
                        <input type="text" name="wp_user_<?php echo $i; ?>_telegram_chat_id" value="<?php echo esc_attr(get_option("wp_user_{$i}_telegram_chat_id")); ?>" />
 | 
			
		||||
 | 
			
		||||
                        <!-- Button für individuelle Testnachricht -->
 | 
			
		||||
                        <input type="submit" name="send_test_message_user_<?php echo $i; ?>" class="button button-secondary" value="Testnachricht an <?php echo esc_attr(get_option("wp_user_{$i}_name")); ?>" />
 | 
			
		||||
                    </div>
 | 
			
		||||
                <?php endfor; ?>
 | 
			
		||||
            </div>
 | 
			
		||||
            <?php submit_button(); ?>
 | 
			
		||||
        </form>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <style>
 | 
			
		||||
        .user-boxes {
 | 
			
		||||
            display: flex;
 | 
			
		||||
            flex-wrap: wrap;
 | 
			
		||||
            gap: 20px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-box {
 | 
			
		||||
            width: 30%;
 | 
			
		||||
            padding: 15px;
 | 
			
		||||
            border: 1px solid #ddd;
 | 
			
		||||
            border-radius: 5px;
 | 
			
		||||
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-box h3 {
 | 
			
		||||
            margin-top: 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-box label {
 | 
			
		||||
            display: block;
 | 
			
		||||
            margin-bottom: 5px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .user-box input,
 | 
			
		||||
        .user-box textarea {
 | 
			
		||||
            width: 100%;
 | 
			
		||||
            padding: 8px;
 | 
			
		||||
            margin-bottom: 10px;
 | 
			
		||||
            border: 1px solid #ddd;
 | 
			
		||||
            border-radius: 5px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .regular-text {
 | 
			
		||||
            width: 100%;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .large-text {
 | 
			
		||||
            width: 100%;
 | 
			
		||||
            height: 150px;
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
    <?php
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function wp_multi_comment_notifications_register_settings() {
 | 
			
		||||
    for ($i = 1; $i <= 6; $i++) {
 | 
			
		||||
        register_setting('wp_multi_comment_notifications_settings_group', "wp_user_{$i}_name");
 | 
			
		||||
        register_setting('wp_multi_comment_notifications_settings_group', "wp_user_{$i}_email");
 | 
			
		||||
        register_setting('wp_multi_comment_notifications_settings_group', "wp_user_{$i}_telegram_chat_id");
 | 
			
		||||
    }
 | 
			
		||||
    register_setting('wp_multi_comment_notifications_settings_group', 'wp_telegram_token');
 | 
			
		||||
    register_setting('wp_multi_comment_notifications_settings_group', 'wp_email_message');
 | 
			
		||||
    register_setting('wp_multi_comment_notifications_settings_group', 'wp_telegram_message');
 | 
			
		||||
    register_setting('wp_multi_comment_notifications_settings_group', 'wp_backend_button_url');
 | 
			
		||||
    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');
 | 
			
		||||
 | 
			
		||||
/** -------------------------
 | 
			
		||||
 * Kommentar-Benachrichtigung
 | 
			
		||||
 * ------------------------- */
 | 
			
		||||
function wp_multi_comment_notifications_on_comment($comment_ID) {
 | 
			
		||||
    $comment = get_comment($comment_ID);
 | 
			
		||||
    $author = $comment->comment_author;
 | 
			
		||||
    $text = $comment->comment_content;
 | 
			
		||||
    $site = get_bloginfo('name');
 | 
			
		||||
    $url = get_option('wp_backend_button_url');
 | 
			
		||||
    $logo = esc_url(get_option('wp_email_logo_url'));
 | 
			
		||||
    $discord_webhook = get_option('wp_discord_webhook_url');
 | 
			
		||||
    $discord_template = get_option('wp_discord_message');
 | 
			
		||||
 | 
			
		||||
    // Nachricht für Discord nur einmal senden
 | 
			
		||||
    if ($discord_webhook && $discord_template) {
 | 
			
		||||
        $discord_msg = strtr($discord_template, [
 | 
			
		||||
            '{{COMMENT_AUTHOR}}' => $author,
 | 
			
		||||
            '{{COMMENT_TEXT}}'   => $text,
 | 
			
		||||
        ]);
 | 
			
		||||
        wp_multi_comment_notifications_send_discord($discord_webhook, $discord_msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // E-Mail & Telegram Benachrichtigungen pro Benutzer
 | 
			
		||||
    for ($i = 1; $i <= 6; $i++) {
 | 
			
		||||
        $name = get_option("wp_user_{$i}_name");
 | 
			
		||||
        $email = get_option("wp_user_{$i}_email");
 | 
			
		||||
        $chat_id = get_option("wp_user_{$i}_telegram_chat_id");
 | 
			
		||||
 | 
			
		||||
        // Nachricht für E-Mail & Telegram
 | 
			
		||||
        $replacements = [
 | 
			
		||||
            '{{COMMENT_AUTHOR}}' => $author,
 | 
			
		||||
            '{{COMMENT_TEXT}}'   => $text,
 | 
			
		||||
            '{{USER_NAME}}'      => $name,
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        $email_msg = strtr(get_option('wp_email_message'), $replacements);
 | 
			
		||||
        if ($url) $email_msg .= "\n\nWeitere Details hier: $url";
 | 
			
		||||
 | 
			
		||||
        if ($email) {
 | 
			
		||||
            $html = $logo ? "<img src='$logo' style='max-width:100%;margin-bottom:20px;'><br>" : '';
 | 
			
		||||
            $html .= nl2br(esc_html($email_msg));
 | 
			
		||||
            $headers = [
 | 
			
		||||
                'Content-Type: text/html; charset=UTF-8',
 | 
			
		||||
                "From: $site <no-reply@" . $_SERVER['SERVER_NAME'] . '>',
 | 
			
		||||
            ];
 | 
			
		||||
            wp_mail($email, 'Neuer Kommentar', $html, $headers);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $tg_msg = strtr(get_option('wp_telegram_message'), $replacements);
 | 
			
		||||
 | 
			
		||||
        if ($chat_id) {
 | 
			
		||||
            wp_multi_comment_notifications_send_telegram(
 | 
			
		||||
                get_option('wp_telegram_token'),
 | 
			
		||||
                $chat_id,
 | 
			
		||||
                $comment_ID,
 | 
			
		||||
                $tg_msg
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
add_action('wp_insert_comment', 'wp_multi_comment_notifications_on_comment', 10, 1);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** -------------------------
 | 
			
		||||
 * Testnachrichten senden
 | 
			
		||||
 * ------------------------- */
 | 
			
		||||
add_action('admin_init', function () {
 | 
			
		||||
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
 | 
			
		||||
        for ($i = 1; $i <= 6; $i++) {
 | 
			
		||||
            if (isset($_POST["send_test_message_user_$i"])) {
 | 
			
		||||
                wp_multi_comment_notifications_send_test_message($i);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function wp_multi_comment_notifications_send_test_message($user_number) {
 | 
			
		||||
    $name = get_option("wp_user_{$user_number}_name");
 | 
			
		||||
    $email = get_option("wp_user_{$user_number}_email");
 | 
			
		||||
    $chat_id = get_option("wp_user_{$user_number}_telegram_chat_id");
 | 
			
		||||
    $discord_webhook = get_option('wp_discord_webhook_url');
 | 
			
		||||
    $token = get_option('wp_telegram_token');
 | 
			
		||||
    $button_url = get_option('wp_backend_button_url');
 | 
			
		||||
 | 
			
		||||
    $message = "Dies ist eine Testnachricht für $name.";
 | 
			
		||||
 | 
			
		||||
    if ($email) {
 | 
			
		||||
        wp_mail($email, 'Testnachricht', $message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($chat_id) {
 | 
			
		||||
        wp_multi_comment_notifications_send_telegram($token, $chat_id, 0, $message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($discord_webhook) {
 | 
			
		||||
        wp_multi_comment_notifications_send_discord($discord_webhook, $message);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** -------------------------
 | 
			
		||||
 * Telegram-Nachricht mit Button
 | 
			
		||||
 * ------------------------- */
 | 
			
		||||
function wp_multi_comment_notifications_send_telegram($token, $chat_id, $comment_ID, $message) {
 | 
			
		||||
    $url = "https://api.telegram.org/bot$token/sendMessage";
 | 
			
		||||
    $button_url = get_option('wp_backend_button_url');
 | 
			
		||||
 | 
			
		||||
    $data = [
 | 
			
		||||
        'chat_id' => $chat_id,
 | 
			
		||||
        'text' => $message,
 | 
			
		||||
        'parse_mode' => 'HTML'
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    if ($button_url) {
 | 
			
		||||
        $data['reply_markup'] = json_encode([
 | 
			
		||||
            'inline_keyboard' => [[['text' => 'Zum Backend', 'url' => $button_url]]]
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wp_remote_post($url, [
 | 
			
		||||
        'body' => $data,
 | 
			
		||||
        'timeout' => 10,
 | 
			
		||||
        'headers' => ['Content-Type' => 'application/x-www-form-urlencoded'],
 | 
			
		||||
    ]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** -------------------------
 | 
			
		||||
 * Discord-Nachricht senden
 | 
			
		||||
 * ------------------------- */
 | 
			
		||||
function wp_multi_comment_notifications_send_discord($webhook_url, $message) {
 | 
			
		||||
    $payload = json_encode(['content' => $message]);
 | 
			
		||||
 | 
			
		||||
    wp_remote_post($webhook_url, [
 | 
			
		||||
        'headers' => ['Content-Type' => 'application/json'],
 | 
			
		||||
        'body' => $payload,
 | 
			
		||||
        'timeout' => 10,
 | 
			
		||||
    ]);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user