admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('shielda_test_nonce'), 'checking' => __('در حال بررسی...', 'shielda-captcha'), 'testBtn' => __('تست اتصال به سرور', 'shielda-captcha'), 'ajaxError' => __('خطا در ارسال درخواست AJAX', 'shielda-captcha'), )); } /** * Add admin menu item. */ public function add_admin_menu() { // Add under Settings menu add_options_page( __('تنظیمات شیلدا کپچا', 'shielda-captcha'), __('شیلدا کپچا', 'shielda-captcha'), 'manage_options', 'shielda-captcha', array($this, 'render_settings_page') ); // Also add top-level menu for easy access add_menu_page( __('تنظیمات شیلدا کپچا', 'shielda-captcha'), __('شیلدا کپچا', 'shielda-captcha'), 'manage_options', 'shielda-captcha-main', array($this, 'render_settings_page'), 'data:image/svg+xml;base64,' . base64_encode(''), 80 ); } /** * Register settings and fields. */ public function register_settings() { register_setting('shielda_settings_group', self::OPTION_NAME, array($this, 'sanitize_settings')); } /** * Sanitize settings before saving. * * @param array $input * @return array */ public function sanitize_settings($input) { $sanitized = array(); $sanitized['site_key'] = isset($input['site_key']) ? sanitize_text_field(trim($input['site_key'])) : ''; $sanitized['secret_key'] = isset($input['secret_key']) ? sanitize_text_field(trim($input['secret_key'])) : ''; $checkbox_keys = array( 'enable_wp_login', 'enable_wp_register', 'enable_wp_comments', 'enable_wp_lostpassword', 'enable_wc_login', 'enable_wc_register', 'enable_wc_lostpassword', 'enable_wc_checkout', 'enable_wpforms_lite', 'enable_wpforms_pro', ); foreach ($checkbox_keys as $key) { $sanitized[$key] = (!empty($input[$key]) && $input[$key] === '1') ? '1' : '0'; } return $sanitized; } /** * AJAX handler to test connection with Shielda API. */ public function ajax_test_connection() { check_ajax_referer('shielda_test_nonce', 'nonce'); if (!current_user_can('manage_options')) { wp_send_json_error(array('message' => __('دسترسی غیرمجاز است.', 'shielda-captcha'))); } // Test fixed official Shielda health check endpoint $health_url = 'https://shielda.ir/health'; $response = wp_remote_get($health_url, array( 'timeout' => 5, )); if (is_wp_error($response)) { wp_send_json_error(array( 'message' => sprintf(__('خطا در برقراری ارتباط با سرور شیلدا: %s', 'shielda-captcha'), $response->get_error_message()) )); } $code = wp_remote_retrieve_response_code($response); if ($code === 200) { wp_send_json_success(array('message' => __('ارتباط با سرور ابری شیلدا با موفقیت برقرار شد!', 'shielda-captcha'))); } else { wp_send_json_error(array( 'message' => sprintf(__('سرور پاسخ داد با کد وضعیت: %d', 'shielda-captcha'), $code) )); } } /** * Render settings page HTML. */ public function render_settings_page() { $settings = get_option(self::OPTION_NAME, array( 'site_key' => '', 'secret_key' => '', 'enable_wp_login' => '1', 'enable_wp_register' => '1', 'enable_wp_comments' => '1', 'enable_wp_lostpassword' => '1', 'enable_wc_login' => '1', 'enable_wc_register' => '1', 'enable_wc_lostpassword' => '1', 'enable_wc_checkout' => '1', 'enable_wpforms_lite' => '1', 'enable_wpforms_pro' => '1', )); $has_keys = !empty($settings['site_key']) && !empty($settings['secret_key']); ?>