Skip to content

Commit 6f646b3

Browse files
Move from text input to textarea
1 parent 9788d07 commit 6f646b3

File tree

1 file changed

+57
-24
lines changed

1 file changed

+57
-24
lines changed

class-gf-email-filtering-addon.php

+57-24
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
use Gravity_Forms\Gravity_Forms\Settings\Fields\Textarea;
4+
35
GFForms::include_addon_framework();
46

57
class GFEmailFilteringAddOn extends GFAddOn
@@ -50,6 +52,11 @@ class GFEmailFilteringAddOn extends GFAddOn
5052

5153
private static $_instance = null;
5254

55+
public $denylist = [];
56+
public $settings = [];
57+
public $denylist_tooltip = 'Using one entry per line, enter a list of domains or email addresses to filter. You may also include wildcard notations to block top-level domains (e.g., *.ru).';
58+
public $validation_tooltip = 'Please enter a default error message if a denied email is submitted. ';
59+
5360
/**
5461
* Get an instance of this class.
5562
*/
@@ -62,12 +69,23 @@ public static function get_instance(): GFEmailFilteringAddOn
6269
return self::$_instance;
6370
}
6471

72+
/**
73+
* Add tasks or filters here that you want to perform both in the backend and frontend and for ajax requests
74+
*/
75+
public function init(): void {
76+
parent::init();
77+
78+
$this->settings = get_option('gravityformsaddon_' . $this->_slug . '_settings');
79+
$this->getDenylist();
80+
}
81+
6582
/**
6683
* Add tasks or filters here that you want to perform only in admin.
6784
*/
6885
public function init_admin(): void
6986
{
7087
parent::init_admin();
88+
7189
add_action('gform_editor_js', [$this, 'gform_editor_js']);
7290
add_action('gform_field_advanced_settings', [$this, 'gform_field_advanced_settings'], 10, 2);
7391
add_filter('gform_tooltips', [$this, 'gform_tooltips']);
@@ -79,6 +97,7 @@ public function init_admin(): void
7997
public function init_frontend(): void
8098
{
8199
parent::init_frontend();
100+
82101
add_filter('gform_validation', [$this, 'gform_validation']);
83102
}
84103

@@ -94,16 +113,17 @@ public function plugin_settings_fields(): array
94113
'fields' => [
95114
[
96115
'label' => __('Global Email Filters', 'gf-email-filtering-addon'),
97-
'type' => 'text',
116+
'type' => 'textarea',
98117
'name' => 'default_email_denylist',
99-
'tooltip' => __('Please enter a list of domains (e.g., hotmail.com) or email addresses (e.g., [email protected]) to filter. You may include wildcard notations to filter top-level domains (e.g., *.cn). This setting can be overridden on individual email fields in the advanced settings.', 'gf-email-filtering-addon'),
118+
'tooltip' => __("{$this->denylist_tooltip} This setting can be overridden on individual email fields in the advanced settings.", 'gf-email-filtering-addon'),
100119
'class' => 'medium',
120+
'save_callback' => [$this, 'saveDenylist'],
101121
],
102122
[
103123
'label' => __('Global Validation Message', 'gf-email-filtering-addon'),
104124
'type' => 'text',
105125
'name' => 'default_email_denylist_error_msg',
106-
'tooltip' => __('Please enter a default error message if a denied email is submitted. This setting can be overridden on individual email fields in the advanced settings.', 'gf-email-filtering-addon'),
126+
'tooltip' => __("{$this->validation_tooltip} This setting can be overridden on individual email fields in the advanced settings.", 'gf-email-filtering-addon'),
107127
'class' => 'medium',
108128
],
109129
],
@@ -125,28 +145,27 @@ public function gform_field_advanced_settings(int $position, ?int $form_id = nul
125145
}
126146

127147
// Get settings for placeholder text.
128-
if (get_option('gravityformsaddon_' . $this->_slug . '_settings')) {
129-
$settings = get_option('gravityformsaddon_' . $this->_slug . '_settings');
130-
$denylist = __('Global Email Filters: ', 'gf-email-filtering-addon') . $settings['default_email_denylist'];
131-
$denylist_msg = __('Global Error Message: ', 'gf-email-filtering-addon') . $settings['default_email_denylist_error_msg'];
148+
if ($this->settings) {
149+
$denylist_placeholder = __('Global Email Filters: ', 'gf-email-filtering-addon') . "\r\n" . implode("\r\n", $this->denylist);
150+
$denylist_msg = __('Global Error Message: ', 'gf-email-filtering-addon') . $this->settings['default_email_denylist_error_msg'];
132151
} else {
133-
$denylist = __('Set Email Filters', 'gf-email-filtering-addon');
152+
$denylist_placeholder = __('Set Email Filters', 'gf-email-filtering-addon');
134153
$denylist_msg = __('Set Error Message', 'gf-email-filtering-addon');
135154
}
136155

137-
$denylist = esc_attr($denylist);
156+
$denylist_placeholder = esc_attr($denylist_placeholder);
138157
$denylist_msg = esc_attr($denylist_msg);
139158
$filter_label = esc_html('Filtered Emails', 'gf-email-filtering-addon');
140-
$filter_label .= gform_tooltip('form_field_email_filtering', true);
159+
$filter_label .= gform_tooltip('form_field_email_filtering', '', true);
141160
$message_label = esc_html('Filtered Emails Validation Message', 'gf-email-filtering-addon');
142-
$message_label .= gform_tooltip('form_field_email_filtering_validation', true);
161+
$message_label .= gform_tooltip('form_field_email_filtering_validation', '', true);
143162

144163
echo <<<HTML
145164
<li class="email_filtering_setting field_setting">
146165
<label for="field_email_filtering">
147166
$filter_label
148167
</label>
149-
<input type="text" id="field_email_filtering" class="fieldwidth-3" size="35" onkeyup="SetFieldProperty('email_filtering', this.value);" placeholder="$denylist">
168+
<textarea id="field_email_filtering" class="fieldwidth-3" size="35" onkeyup="SetFieldProperty('email_filtering', this.value);" placeholder="$denylist_placeholder"></textarea>
150169
</li>
151170
152171
<li class="email_filtering_validation field_setting">
@@ -163,8 +182,8 @@ public function gform_field_advanced_settings(int $position, ?int $form_id = nul
163182
*/
164183
public function gform_tooltips(array $tooltips): array
165184
{
166-
$tooltips['form_field_email_filtering'] = __("Please enter a comma-separated list of domains to filter (e.g., hotmail.com) or email addresses (e.g., [email protected]). You may also include the wildcard notations to block top-level domains (e.g., *.ru). This will override the globally-defined email filters. Enter 'none' to bypass the global setting and allow all email addresses.", 'gf-email-filtering-addon');
167-
$tooltips['form_field_email_filtering_validation'] = __('Please enter an error message if a filtered email is submitted. This will override the globally-defined error message.', 'gf-email-filtering-addon');
185+
$tooltips['form_field_email_filtering'] = __("{$this->denylist_tooltip} This will override the globally-defined email filters. Enter 'none' to bypass the global setting and allow all email addresses.", 'gf-email-filtering-addon');
186+
$tooltips['form_field_email_filtering_validation'] = __("{$this->validation_tooltip} This will override the globally-defined error message.", 'gf-email-filtering-addon');
168187
return $tooltips;
169188
}
170189

@@ -196,13 +215,7 @@ public function gform_editor_js(): void
196215
*/
197216
public function gform_validation(array $validation_result): array
198217
{
199-
// Collect global settings.
200-
$denylist = get_option('gravityformsaddon_' . $this->_slug . '_settings');
201-
if (is_array($denylist) && ! empty($denylist['default_email_denylist'])) {
202-
$denylist = $denylist['default_email_denylist'];
203-
} else {
204-
$denylist = '';
205-
}
218+
$denylist = $this->denylist;
206219

207220
// Collect form results.
208221
$form = $validation_result['form'];
@@ -277,9 +290,8 @@ public function gform_validation(array $validation_result): array
277290
// Set the validation message or use the default.
278291
if (! empty($field['email_filtering_validation'])) {
279292
$validation_message = $field['email_filtering_validation'];
280-
} elseif (get_option('gravityformsaddon_' . $this->_slug . '_settings')) {
281-
$validation_message = get_option('gravityformsaddon_' . $this->_slug . '_settings');
282-
$validation_message = $validation_message['default_email_denylist_error_msg'];
293+
} elseif ($this->settings) {
294+
$validation_message = $this->settings['default_email_denylist_error_msg'];
283295
} else {
284296
$validation_message = __('Sorry, the email address entered is not eligible for this form.', 'gf-email-filtering-addon');
285297
}
@@ -303,6 +315,27 @@ public function gform_validation(array $validation_result): array
303315
return $validation_result;
304316
}
305317

318+
/**
319+
* Normalize the denylist setting upon save
320+
*/
321+
public function saveDenylist(Textarea $field, string $setting): string {
322+
$denylist = str_replace(',', "\r\n", $setting);
323+
$denylist = explode("\r\n", $denylist);
324+
$denylist = array_map([$this, 'clean_string'], $denylist);
325+
326+
return implode("\r\n", $denylist);
327+
}
328+
329+
/**
330+
* Set the denylist in an array.
331+
*/
332+
public function getDenylist(): void {
333+
$denylist = $this->settings['default_email_denylist'] ?? '';
334+
$denylist = str_replace(',', "\r\n", $denylist);
335+
$denylist = explode("\r\n", $denylist);
336+
$this->denylist = array_map([$this, 'clean_string'], $denylist);
337+
}
338+
306339
/**
307340
* Convert a string to lowercase and remove extra whitespace.
308341
*/

0 commit comments

Comments
 (0)