Added Gravity Forms Addon
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
/**
|
||||
* @package ogre-captcha
|
||||
* @author cleverogre
|
||||
* @copyright 2026 CleverOgre
|
||||
* @license GLP-3.0-or-later
|
||||
* @version 1.1.0
|
||||
* @since 1.1.0
|
||||
*/
|
||||
|
||||
namespace Ogre\Captcha\GravityForms;
|
||||
|
||||
use Ogre\Singleton;
|
||||
use Ogre\Captcha as Plugin;
|
||||
use GFForms;
|
||||
use GFAddOn;
|
||||
use Ogre\Captcha\API;
|
||||
use Ogre\Captcha\Settings;
|
||||
use Ogre\Captcha\Widget;
|
||||
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
GFForms::include_addon_framework();
|
||||
|
||||
final class Addon extends GFAddOn {
|
||||
use Singleton;
|
||||
|
||||
protected $_min_gravityforms_version = '2.6.3.2';
|
||||
|
||||
public static function get_instance(): Addon {
|
||||
return self::instance();
|
||||
}
|
||||
|
||||
public function pre_init() {
|
||||
$this->_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();
|
||||
}
|
||||
|
||||
public function init() {
|
||||
add_filter('gform_submit_button', [$this, 'submit_button'], 10, 2);
|
||||
add_filter('gform_validation', [$this, 'validation'], 10, 2);
|
||||
}
|
||||
|
||||
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 <a href="%s">this page</a>.'),
|
||||
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 = (bool) $this->get_plugin_setting('enabled');
|
||||
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 submit_button(string $button_input, array $form): string {
|
||||
if (!Settings::is_connected() || !$this->is_enabled($form)) return $button_input;
|
||||
ob_start();
|
||||
Widget::render();
|
||||
return ob_get_clean() . $button_input;
|
||||
}
|
||||
|
||||
public function validation(array $validation_result, string $context): array {
|
||||
if ($context != 'form-submit') return $validation_result;
|
||||
|
||||
if (!Settings::is_connected() || !$this->is_enabled(rgar($validation_result, '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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user