File: /home/pewnabryka.pl/public_html/wp-content/plugins/CyberSMTP/admin/class-admin.php
<?php
if (!defined('ABSPATH')) {
    exit;
}
class CyberSMTP_Admin {
    public function __construct() {
        add_action('admin_menu', array($this, 'add_admin_menu'));
        add_action('admin_init', array($this, 'register_settings'));
        add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_styles'));
    }
    public function add_admin_menu() {
        add_menu_page(
            __('CyberSMTP', 'cyberpanel.net'),
            __('CyberSMTP', 'cyberpanel.net'),
            'manage_options',
            'cybersmtp',
            array($this, 'render_page'),
            'dashicons-email-alt',
            56
        );
    }
    public function register_settings() {
        register_setting('cybersmtp_settings_group', 'cybersmtp_smtp_settings');
    }
    public function enqueue_admin_styles($hook) {
        // Only load on our plugin page
        if (isset($_GET['page']) && $_GET['page'] === 'cybersmtp') {
            wp_enqueue_style('cybersmtp-admin', plugin_dir_url(__FILE__) . 'assets/cybersmtp-admin.css', array(), '1.0');
        }
    }
    public function render_page() {
        $tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : 'settings';
        echo '<div class="wrap">';
        // Modern header
        echo '<div class="cybersmtp-header">';
        echo '<div class="cybersmtp-logo"><img src="https://cyberpanel.net/wp-content/uploads/2025/04/cyberpanel-logo-icon_only.png" alt="CyberPanel Logo" style="width: 40px; height: 40px; object-fit: contain;" /></div>';
        echo '<div>';
        echo '<div class="cybersmtp-welcome">Welcome to CyberSMTP</div>';
        echo '<div style="color:#666;">Configure your email provider and settings below. Test your email score for free, <a href="https://platform.cyberpersons.com/MailTester/MailTester" target="_blank" rel="noopener">click here</a>.</div>';
        echo '</div>';
        echo '</div>';
        // Tabs
        echo '<nav class="nav-tab-wrapper">';
        echo '<a href="?page=cybersmtp&tab=settings" class="nav-tab' . ($tab === 'settings' ? ' nav-tab-active' : '') . '">⚙️ Settings</a>';
        echo '<a href="?page=cybersmtp&tab=test" class="nav-tab' . ($tab === 'test' ? ' nav-tab-active' : '') . '">✉️ Test Email</a>';
        echo '<a href="?page=cybersmtp&tab=logs" class="nav-tab' . ($tab === 'logs' ? ' nav-tab-active' : '') . '">📋 Logs</a>';
        echo '</nav>';
        if ($tab === 'logs') {
            $this->render_logs_page();
        } elseif ($tab === 'test') {
            $this->render_test_email_page();
        } else {
            $this->render_settings_page();
        }
        // Footer
        echo '<div class="cybersmtp-footer">CyberSMTP © ' . date('Y') . ' — <a href="https://cyberpanel.net/" target="_blank">Documentation</a></div>';
        echo '</div>';
    }
    public function render_settings_page() {
        $settings = get_option('cybersmtp_smtp_settings', array());
        $provider = $settings['provider'] ?? 'smtp';
        $mode = $settings['mode'] ?? 'smtp';
        $providers = [
            'smtp' => [
                'label' => 'Generic SMTP',
                'icon' => 'smtp.svg',
            ],
            'ses' => [
                'label' => 'Amazon SES',
                'icon' => 'amazonses.svg',
            ],
            'sendgrid' => [
                'label' => 'SendGrid',
                'icon' => 'sendgrid.svg',
            ],
            'mailgun' => [
                'label' => 'Mailgun',
                'icon' => 'mailgun.svg',
            ],
            'brevo' => [
                'label' => 'Brevo',
                'icon' => 'brevo.svg',
            ],
        ];
        echo '<form method="post" action="options.php" id="cybersmtp-settings-form">';
        settings_fields('cybersmtp_settings_group');
        // Provider Selection Section
        echo '<div class="cybersmtp-section"><h2>Provider Selection</h2>';
        echo '<div class="cybersmtp-provider-grid">';
        foreach ($providers as $key => $data) {
            $selected = ($provider === $key) ? 'selected' : '';
            echo '<div class="cybersmtp-provider-card ' . $selected . '" data-provider="' . esc_attr($key) . '">';
            echo '<div class="cybersmtp-provider-logo">';
            $icon_path = __DIR__ . '/assets/icons/' . $data['icon'];
            if (file_exists($icon_path)) {
                echo file_get_contents($icon_path);
            }
            echo '</div>';
            echo '<div class="cybersmtp-provider-label">' . esc_html($data['label']) . '</div>';
            echo '</div>';
        }
        echo '</div>';
        echo '<input type="hidden" name="cybersmtp_smtp_settings[provider]" id="cybersmtp-provider-select" value="' . esc_attr($provider) . '" />';
        echo '</div>';
        // SMTP/API Settings Section
        echo '<div class="cybersmtp-section"><h2>SMTP/API Settings</h2>';
        echo '<table class="form-table">';
        echo '<tr class="cybersmtp-field cybersmtp-field-mode"><th scope="row">Mode <span class="cybersmtp-help" title="Choose SMTP for standard email sending or API for direct integration with supported providers.">?</span></th><td>
            <select name="cybersmtp_smtp_settings[mode]" id="cybersmtp-mode-select">
                <option value="smtp" ' . selected($mode, 'smtp', false) . '>SMTP</option>
                <option value="api" ' . selected($mode, 'api', false) . '>API</option>
            </select>
            <span class="description">(For SendGrid/Mailgun/SES/Brevo only)</span>
        </td></tr>';
        echo '<tr class="cybersmtp-field cybersmtp-field-api-key"><th scope="row">API Key <span class="cybersmtp-help" title="Your API key from the selected provider. Required for API mode.">?</span></th><td><input type="text" name="cybersmtp_smtp_settings[api_key]" value="' . esc_attr($settings['api_key'] ?? '') . '" class="regular-text"></td></tr>';
        echo '<tr class="cybersmtp-field cybersmtp-field-api-secret"><th scope="row">API Secret <span class="cybersmtp-help" title="Some providers require both an API key and secret.">?</span></th><td><input type="text" name="cybersmtp_smtp_settings[api_secret]" value="' . esc_attr($settings['api_secret'] ?? '') . '" class="regular-text"></td></tr>';
        echo '<tr class="cybersmtp-field cybersmtp-field-domain"><th scope="row">Mailgun Domain <span class="cybersmtp-help" title="Your Mailgun sending domain, e.g. mg.example.com">?</span></th><td><input type="text" name="cybersmtp_smtp_settings[domain]" value="' . esc_attr($settings['domain'] ?? '') . '" class="regular-text"><span class="description">(e.g. mg.example.com)</span></td></tr>';
        echo '<tr class="cybersmtp-field cybersmtp-field-host"><th scope="row">SMTP Host <span class="cybersmtp-help" title="The SMTP server address provided by your email provider.">?</span></th><td><input type="text" name="cybersmtp_smtp_settings[host]" value="' . esc_attr($settings['host'] ?? '') . '" class="regular-text"></td></tr>';
        echo '<tr class="cybersmtp-field cybersmtp-field-port"><th scope="row">SMTP Port <span class="cybersmtp-help" title="The port number for your SMTP server, usually 587 (TLS) or 465 (SSL).">?</span></th><td><input type="number" name="cybersmtp_smtp_settings[port]" value="' . esc_attr($settings['port'] ?? '587') . '" class="small-text"></td></tr>';
        echo '<tr class="cybersmtp-field cybersmtp-field-username"><th scope="row">Username <span class="cybersmtp-help" title="Your SMTP or API username, often your email address.">?</span></th><td><input type="text" name="cybersmtp_smtp_settings[username]" value="' . esc_attr($settings['username'] ?? '') . '" class="regular-text"></td></tr>';
        echo '<tr class="cybersmtp-field cybersmtp-field-password"><th scope="row">Password <span class="cybersmtp-help" title="Your SMTP or API password/secret.">?</span></th><td><input type="password" name="cybersmtp_smtp_settings[password]" value="' . esc_attr($settings['password'] ?? '') . '" class="regular-text"></td></tr>';
        echo '<tr class="cybersmtp-field cybersmtp-field-encryption"><th scope="row">Encryption <span class="cybersmtp-help" title="Choose TLS or SSL for secure connections. Use None only if your provider instructs.">?</span></th><td>
            <select name="cybersmtp_smtp_settings[encryption]">'
                . '<option value="tls" ' . selected($settings['encryption'] ?? '', 'tls', false) . '>TLS</option>'
                . '<option value="ssl" ' . selected($settings['encryption'] ?? '', 'ssl', false) . '>SSL</option>'
                . '<option value="" ' . selected($settings['encryption'] ?? '', '', false) . '>None</option>'
            . '</select>
        </td></tr>';
        echo '<tr class="cybersmtp-field cybersmtp-field-region"><th scope="row">SES Region <span class="cybersmtp-help" title="The AWS region for your SES account, e.g. us-east-1.">?</span></th><td><input type="text" name="cybersmtp_smtp_settings[region]" value="' . esc_attr($settings['region'] ?? '') . '" class="regular-text"><span class="description">(For Amazon SES only, e.g. us-east-1)</span></td></tr>';
        echo '</table>';
        echo '</div>';
        // Sender Details Section
        echo '<div class="cybersmtp-section"><h2>Sender Details</h2>';
        echo '<table class="form-table">';
        echo '<tr><th scope="row">From Email <span class="cybersmtp-help" title="The email address that will appear as the sender.">?</span></th><td><input type="email" name="cybersmtp_smtp_settings[from_email]" value="' . esc_attr($settings['from_email'] ?? '') . '" class="regular-text" required></td></tr>';
        echo '<tr><th scope="row">From Name <span class="cybersmtp-help" title="The name that will appear as the sender.">?</span></th><td><input type="text" name="cybersmtp_smtp_settings[from_name]" value="' . esc_attr($settings['from_name'] ?? '') . '" class="regular-text"></td></tr>';
        echo '</table>';
        echo '</div>';
        echo '<div style="display:flex;gap:12px;align-items:center;margin-top:16px;">';
        echo '<input type="submit" class="button button-primary" value="Save Settings" />';
        echo '</form>';
        // Add JS for provider card selection and field updates
        echo "<script>
(function($){
    $(document).on('click', '.cybersmtp-provider-card', function() {
        $('.cybersmtp-provider-card').removeClass('selected');
        $(this).addClass('selected');
        var provider = $(this).data('provider');
        $('#cybersmtp-provider-select').val(provider).trigger('change');
    });
    function updateFields() {
        var provider = $('#cybersmtp-provider-select').val();
        var mode = $('#cybersmtp-mode-select').val();
        $('.cybersmtp-field').hide();
        // Show/hide fields for each provider/mode
        if (provider === 'ses') {
            $('.cybersmtp-field-mode').show();
            if (mode === 'api') {
                $('.cybersmtp-field-api-key, .cybersmtp-field-api-secret, .cybersmtp-field-region').show();
            } else {
                $('.cybersmtp-field-host, .cybersmtp-field-port, .cybersmtp-field-username, .cybersmtp-field-password, .cybersmtp-field-encryption, .cybersmtp-field-region').show();
            }
        } else if (provider === 'sendgrid') {
            $('.cybersmtp-field-mode').show();
            if (mode === 'api') {
                $('.cybersmtp-field-api-key').show();
            } else {
                $('.cybersmtp-field-host, .cybersmtp-field-port, .cybersmtp-field-username, .cybersmtp-field-password, .cybersmtp-field-encryption').show();
            }
        } else if (provider === 'mailgun') {
            $('.cybersmtp-field-mode').show();
            if (mode === 'api') {
                $('.cybersmtp-field-api-key, .cybersmtp-field-domain').show();
            } else {
                $('.cybersmtp-field-host, .cybersmtp-field-port, .cybersmtp-field-username, .cybersmtp-field-password, .cybersmtp-field-encryption').show();
            }
        } else if (provider === 'brevo') {
            $('.cybersmtp-field-mode').show();
            if (mode === 'api') {
                $('.cybersmtp-field-api-key').show();
            } else {
                $('.cybersmtp-field-host, .cybersmtp-field-port, .cybersmtp-field-username, .cybersmtp-field-password, .cybersmtp-field-encryption').show();
            }
        } else {
            // Generic SMTP
            $('.cybersmtp-field-host, .cybersmtp-field-port, .cybersmtp-field-username, .cybersmtp-field-password, .cybersmtp-field-encryption').show();
        }
        if (provider === 'smtp') {
            $('.cybersmtp-field-host label').text('SMTP Host');
        } else if (provider === 'ses') {
            $('.cybersmtp-field-host label').text('SES SMTP Host');
        } else if (provider === 'sendgrid') {
            $('.cybersmtp-field-host label').text('SendGrid SMTP Host');
        } else if (provider === 'mailgun') {
            $('.cybersmtp-field-host label').text('Mailgun SMTP Host');
        } else if (provider === 'brevo') {
            $('.cybersmtp-field-host label').text('Brevo SMTP Host');
        }
    }
    $(document).ready(function(){
        updateFields();
        $('#cybersmtp-provider-select, #cybersmtp-mode-select').on('change', updateFields);
        // Tooltip
        $('.cybersmtp-help').hover(function(){
            $(this).addClass('active');
        }, function(){
            $(this).removeClass('active');
        });
    });
})(jQuery);
</script>";
    }
    public function render_test_email_page() {
        $test_email_result = '';
        if (isset($_POST['cybersmtp_test_email'])) {
            file_put_contents(dirname(__DIR__) . '/cybersmtp-debug.log', "ADMIN: Test email POST received\n", FILE_APPEND);
            if (!check_admin_referer('cybersmtp_test_email_action', 'cybersmtp_test_email_nonce')) {
                file_put_contents(dirname(__DIR__) . '/cybersmtp-debug.log', "ADMIN: Nonce check failed\n", FILE_APPEND);
            } else {
                $test_email = sanitize_email($_POST['cybersmtp_test_email_address']);
                if (is_email($test_email)) {
                    file_put_contents(dirname(__DIR__) . '/cybersmtp-debug.log', "ADMIN: Sending test email to $test_email\n", FILE_APPEND);
                    $mailer = new CyberSMTP_Mailer();
                    $mailer->send_test_email($test_email);
                    $test_email_result = '<div class="notice notice-success"><p>Test email sent to ' . esc_html($test_email) . ' (check your inbox and logs tab).</p></div>';
                } else {
                    file_put_contents(dirname(__DIR__) . '/cybersmtp-debug.log', "ADMIN: Invalid email address: $test_email\n", FILE_APPEND);
                    $test_email_result = '<div class="notice notice-error"><p>Invalid email address.</p></div>';
                }
            }
        }
        echo '<div style="max-width:500px;margin:32px auto 0 auto;background:#fff;padding:32px 24px 24px 24px;border-radius:10px;box-shadow:0 2px 12px rgba(0,0,0,0.04);">';
        echo '<h2>Send Test Email</h2>';
        echo $test_email_result;
        echo '<form method="post">';
        wp_nonce_field('cybersmtp_test_email_action', 'cybersmtp_test_email_nonce');
        echo '<input type="email" name="cybersmtp_test_email_address" placeholder="Recipient Email" required style="width:70%;margin-right:10px;" />';
        echo '<input type="submit" name="cybersmtp_test_email" class="button button-secondary" value="Send Test Email" />';
        echo '</form>';
        echo '</div>';
    }
    public function render_logs_page() {
        require_once dirname(__FILE__) . '/../includes/class-email-logger.php';
        $logger = new CyberSMTP_Email_Logger();
        // Filtering
        $status_filter = isset($_GET['status']) ? sanitize_text_field($_GET['status']) : '';
        $recipient_filter = isset($_GET['recipient']) ? sanitize_email($_GET['recipient']) : '';
        $logs = $logger->get_logs(100, $status_filter, $recipient_filter);
        // Analytics
        $analytics = $logger->get_analytics();
        $sent_count = $analytics['sent'] ?? 0;
        $failed_count = $analytics['failed'] ?? 0;
        $total = $sent_count + $failed_count;
        $success_rate = $total > 0 ? round(($sent_count / $total) * 100, 1) : 0;
        echo '<h2>Email Logs</h2>';
        echo '<div style="margin-bottom:16px;">';
        echo '<strong>Sent:</strong> ' . esc_html($sent_count) . ' | ';
        echo '<strong>Failed:</strong> ' . esc_html($failed_count) . ' | ';
        echo '<strong>Success Rate:</strong> ' . esc_html($success_rate) . '%';
        echo '</div>';
        // Filter form
        echo '<form method="get" style="margin-bottom:16px;">';
        echo '<input type="hidden" name="page" value="cybersmtp">';
        echo '<input type="hidden" name="tab" value="logs">';
        echo 'Status: <select name="status"><option value="">All</option><option value="sent"' . selected($status_filter, 'sent', false) . '>Sent</option><option value="error"' . selected($status_filter, 'error', false) . '>Failed</option></select> ';
        echo 'Recipient: <input type="email" name="recipient" value="' . esc_attr($recipient_filter) . '" placeholder="user@example.com"> ';
        echo '<input type="submit" class="button" value="Filter">';
        echo '</form>';
        // Logs table
        echo '<table class="widefat fixed striped"><thead><tr>';
        echo '<th>Date</th><th>To</th><th>Subject</th><th>Status</th><th>Error</th>';
        echo '</tr></thead><tbody>';
        if ($logs) {
            foreach ($logs as $log) {
                echo '<tr>';
                echo '<td>' . esc_html($log['created_at']) . '</td>';
                echo '<td>' . esc_html($log['to_email']) . '</td>';
                echo '<td>' . esc_html($log['subject']) . '</td>';
                echo '<td>' . esc_html($log['status']) . '</td>';
                echo '<td>' . esc_html($log['response_data']) . '</td>';
                echo '</tr>';
            }
        } else {
            echo '<tr><td colspan="5">No logs found.</td></tr>';
        }
        echo '</tbody></table>';
    }
}