class-field.php
5.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
class MC4WP_Gravity_Forms_Field extends GF_Field
{
public $type = 'mailchimp';
/**
* Returns the field markup; including field label, description, validation, and the form editor admin buttons.
*
* The {FIELD} placeholder will be replaced in GFFormDisplay::get_field_content with the markup returned by GF_Field::get_field_input().
*
* @param string|array $value The field value. From default/dynamic population, $_POST, or a resumed incomplete submission.
* @param bool $force_frontend_label Should the frontend label be displayed in the admin even if an admin label is configured.
* @param array $form The Form Object currently being processed.
*
* @return string
*/
public function get_field_content($value, $force_frontend_label, $form)
{
$validation_message = ( $this->failed_validation && ! empty($this->validation_message) ) ? sprintf("<div class='gfield_description validation_message'>%s</div>", $this->validation_message) : '';
$is_form_editor = $this->is_form_editor();
$is_entry_detail = $this->is_entry_detail();
$is_admin = $is_form_editor || $is_entry_detail;
$admin_buttons = $this->get_admin_buttons();
$description = $this->get_description($this->description, 'gfield_description');
if ($this->is_description_above($form)) {
$clear = $is_admin ? "<div class='gf_clear'></div>" : '';
$field_content = sprintf("%s%s{FIELD}%s$clear", $admin_buttons, $description, $validation_message);
} else {
$field_content = sprintf('%s{FIELD}%s%s', $admin_buttons, $description, $validation_message);
}
return $field_content;
}
public function get_form_editor_field_title()
{
return esc_attr__('Mailchimp for WordPress', 'mailchimp-for-wp');
}
public function get_form_editor_field_settings()
{
return array(
'label_setting',
'description_setting',
'css_class_setting',
'mailchimp_list_setting',
'mailchimp_double_optin',
'mailchimp_precheck',
'rules_setting',
);
}
public function get_field_input($form, $value = '', $entry = null)
{
$form_id = absint($form['id']);
$is_entry_detail = $this->is_entry_detail();
$is_form_editor = $this->is_form_editor();
$id = $this->id;
$field_id = $is_entry_detail || $is_form_editor || 0 === (int) $form_id ? "input_$id" : 'input_' . $form_id . "_$id";
$disabled_text = $is_form_editor ? 'disabled="disabled"' : '';
return sprintf("<div class='ginput_container ginput_container_checkbox'><ul class='gfield_checkbox' id='%s'>%s</ul></div>", esc_attr($field_id), $this->get_checkbox_choices($value, $disabled_text, $form_id));
}
private function apply_mc4wp_options_filters($options)
{
$options = apply_filters('mc4wp_integration_gravity-forms_options', $options);
return $options;
}
public function get_checkbox_choices($value, $disabled_text, $form_id = 0)
{
$choices = '';
$is_entry_detail = $this->is_entry_detail();
$is_form_editor = $this->is_form_editor();
$options = array(
'label' => $this->get_field_label(false, $value),
'precheck' => isset($this->mailchimp_precheck) ? $this->mailchimp_precheck : false,
);
$options = $this->apply_mc4wp_options_filters($options);
// generate html
$choice = array(
'text' => $options['label'],
'value' => '1',
'isSelected' => $options['precheck'],
);
$input_id = $this->id;
if ($is_entry_detail || $is_form_editor || 0 === (int) $form_id) {
$id = $this->id;
} else {
$id = $form_id . '_' . $this->id;
}
if (! isset($_GET['gf_token']) && empty($_POST) && rgar($choice, 'isSelected')) {
$checked = "checked='checked'";
} elseif (is_array($value) && RGFormsModel::choice_value_match($this, $choice, rgget($input_id, $value))) {
$checked = "checked='checked'";
} elseif (! is_array($value) && RGFormsModel::choice_value_match($this, $choice, $value)) {
$checked = "checked='checked'";
} else {
$checked = '';
}
$tabindex = $this->get_tabindex();
$choice_value = $choice['value'];
$choice_value = esc_attr($choice_value);
$choice_markup = "<li class='gchoice_{$id}'>
<input name='input_{$input_id}' type='checkbox' value='{$choice_value}' {$checked} id='choice_{$id}' {$tabindex} {$disabled_text} />
<label for='choice_{$id}' id='label_{$id}'>{$choice['text']}</label>
</li>";
$choices .= gf_apply_filters(
array(
'gform_field_choice_markup_pre_render',
$this->formId,
$this->id,
),
$choice_markup,
$choice,
$this,
$value
);
return gf_apply_filters(array( 'gform_field_choices', $this->formId, $this->id ), $choices, $this);
}
}