_version = Plugin::get_version(); $this->_slug = Plugin::get_id(); $this->_path = sprintf( '%1$s/%1$s.php', Plugin::get_id() ); $this->_full_path = Plugin::get_file(); $this->_title = sprintf( Plugin::__('%s Add-On'), Plugin::get_title() ); $this->_short_title = Plugin::get_title(); parent::__construct(); } public function init() { add_filter('gform_submit_button', [$this, 'submit_button'], 10, 2); add_filter('gform_validation', [$this, 'validation'], 10, 2); parent::init(); } public function get_menu_icon() { return 'gform-icon--lock'; } public function plugin_settings_fields() { return [ [ 'title' => esc_html(sprintf( Plugin::__('%s Settings'), Plugin::get_title() )), 'description' => sprintf( Plugin::__('Looking to configure your CAPTCHA connection? You can find the settings on this page.'), esc_url(Settings::get_url()) ), 'fields' => [ [ 'label' => sprintf( Plugin::esc_html__('Enable %s'), Plugin::get_title() ), 'type' => 'checkbox', 'name' => 'enabled', 'choices' => [ [ 'label' => Plugin::esc_html__('Enable CAPTCHA on all forms by default.'), 'name' => 'enabled', ] ] ] ] ] ]; } public function form_settings_fields($form) { return [ [ 'title' => esc_html(sprintf( Plugin::__('%s Settings'), Plugin::get_title() )), 'fields' => [ [ 'type' => 'checkbox', 'name' => 'disabled', 'choices' => [ [ 'label' => Plugin::esc_html__('Disable CAPTCHA for this form.'), 'name' => 'disabled', ] ] ] ] ] ]; } public function is_enabled(array|null $form = null): bool { $plugin_enabled = $this->get_plugin_setting('enabled') === '1'; if (is_null($form) || !$plugin_enabled) return $plugin_enabled; $form_settings = $this->get_form_settings($form); $form_disabled = (bool) rgar($form_settings, 'disabled'); return !$form_disabled; } public function set_enabled(bool $value): bool { $settings = (array) $this->get_plugin_settings(); $settings['enabled'] = !!$value ? '1' : '0'; $this->update_plugin_settings($settings); return true; } public function submit_button(string $button_input, array $form): string { if (!Settings::is_connected() || !$this->is_enabled($form)) return $button_input; if ((is_admin() && !defined('DOING_AJAX')) || GFCommon::is_form_editor()) return $button_input; ob_start(); Widget::render(); $button_input = ob_get_clean() . $button_input; if (Settings::is_widget_floating()) $button_input = Widget::set_button_floating($button_input); return $button_input; } public function validation(array $validation_result, string $context): array { if ($context != 'form-submit') return $validation_result; $form = $validation_result['form']; if (!GFFormDisplay::is_last_page($form) || rgpost('action') == 'heartbeat') return $validation_result; if (!Settings::is_connected() || !$this->is_enabled($form)) return $validation_result; $errors = API::process(Widget::get_token()); if ($errors->has_errors()) { $validation_result['is_valid'] = false; } // TODO: Mark as spam (optional) return $validation_result; } }