PluginProbe ʕ •ᴥ•ʔ
Conditional Fields for Contact Form 7 / 1.9.3
Conditional Fields for Contact Form 7 v1.9.3
2.7.8 2.7.7 2.7.6 2.7.5 2.7.4 2.7.3 2.7.2 0.2.4 0.2.5 0.2.6 0.2.7 0.2.8 0.2.9 1.0 1.1 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.4 1.4.1 1.4.2 1.4.3 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.6.1 1.6.2 1.6.3 1.6.5 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.8 1.7.9 1.8 1.8.1 1.8.2 1.8.3 1.8.5 1.8.6 1.8.7 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2 2.2.1 2.2.10 2.2.11 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 2.3 2.3.1 2.3.10 2.3.11 2.3.12 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.4 2.4.1 2.4.10 2.4.11 2.4.12 2.4.13 2.4.14 2.4.15 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.14 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.6.6 2.6.7 2.6.8 2.7 2.7.1 trunk 0.1 0.1.1 0.1.2 0.1.3 0.1.4 0.1.5 0.1.6 0.1.7 0.2 0.2.1 0.2.2 0.2.3
cf7-conditional-fields / admin.php
cf7-conditional-fields Last commit date
js 6 years ago Wpcf7cfMailParser.php 6 years ago admin-style.css 6 years ago admin-style.css.map 6 years ago admin-style.scss 6 years ago admin.php 6 years ago cf7cf.php 6 years ago contact-form-7-conditional-fields.php 6 years ago init.php 6 years ago readme.txt 6 years ago style.css 6 years ago tg_pane_group.php 6 years ago wpcf7cf-options.php 6 years ago
admin.php
277 lines
1 <?php
2
3 add_action( 'admin_enqueue_scripts', 'wpcf7cf_admin_enqueue_scripts', 11 ); // set priority so scripts and styles get loaded later.
4
5 function wpcf7cf_admin_enqueue_scripts( $hook_suffix ) {
6 if ( false === strpos( $hook_suffix, 'wpcf7' ) ) {
7 return; //don't load styles and scripts if this isn't a CF7 page.
8 }
9
10 wp_enqueue_script('cf7cf-scripts-admin', wpcf7cf_plugin_url( 'js/scripts_admin.js' ),array('jquery-ui-autocomplete', 'jquery-ui-sortable'), WPCF7CF_VERSION,true);
11 wp_localize_script('cf7cf-scripts-admin', 'wpcf7cf_options_0', get_option(WPCF7CF_OPTIONS));
12
13 }
14
15 add_filter('wpcf7_editor_panels', 'add_conditional_panel');
16
17 function add_conditional_panel($panels) {
18 if ( current_user_can( 'wpcf7_edit_contact_form' ) ) {
19 $panels['wpcf7cf-conditional-panel'] = array(
20 'title' => __( 'Conditional fields', 'wpcf7cf' ),
21 'callback' => 'wpcf7cf_editor_panel_conditional'
22 );
23 }
24 return $panels;
25 }
26
27 function wpcf7cf_all_field_options($post, $selected = '-1') {
28 $all_fields = $post->scan_form_tags();
29 ?>
30 <option value="-1" <?php echo $selected == '-1'?'selected':'' ?>>-- Select field --</option>
31 <?php
32 foreach ($all_fields as $tag) {
33 if ($tag['type'] == 'group' || $tag['name'] == '') continue;
34 ?>
35 <option value="<?php echo $tag['name']; ?>" <?php echo $selected == $tag['name']?'selected':'' ?>><?php echo $tag['name']; ?></option>
36 <?php
37 }
38 }
39
40 function wpcf7cf_all_group_options($post, $selected = '-1') {
41 $all_groups = $post->scan_form_tags(array('type'=>'group'));
42
43 ?>
44 <option value="-1" <?php echo $selected == '-1'?'selected':'' ?>>-- Select group --</option>
45 <?php
46 foreach ($all_groups as $tag) {
47 ?>
48 <option value="<?php echo $tag['name']; ?>" <?php echo $selected == $tag['name']?'selected':'' ?>><?php echo $tag['name']; ?></option>
49 <?php
50 }
51 }
52
53 if (!function_exists('all_operator_options')) {
54 function all_operator_options($selected = 'equals') {
55 $all_options = array('equals', 'not equals');
56 $all_options = apply_filters('wpcf7cf_get_operators', $all_options);
57 foreach($all_options as $option) {
58 // backwards compat
59 $selected = $selected == '' ? 'less than or equals' : $selected;
60 $selected = $selected == '' ? 'greater than or equals' : $selected;
61 $selected = $selected == '>' ? 'greater than' : $selected;
62 $selected = $selected == '<' ? 'less than' : $selected;
63
64 ?>
65 <option value="<?php echo htmlentities($option) ?>" <?php echo $selected == $option?'selected':'' ?>><?php echo htmlentities($option) ?></option>
66 <?php
67 }
68 }
69 }
70
71 function wpcf7cf_editor_panel_conditional($form) {
72
73 $settings = wpcf7cf_get_settings();
74 $is_text_only = $settings['conditions_ui'] === 'text_only';
75
76 // print_r($settings);
77
78 $form_id = isset($_GET['post']) ? $_GET['post'] : false;
79
80 if ($form_id === false) {
81 ?>
82 <div class="wpcf7cf-inner-container">
83 <h2><?php echo esc_html( __( 'Conditional fields', 'wpcf7cf' ) ); ?></h2>
84 <p>You need to save your form, before you can start adding conditions.</p>
85 </div>
86 <?php
87 return;
88 }
89
90 $wpcf7cf_entries = CF7CF::getConditions($form_id);
91
92 if (!is_array($wpcf7cf_entries)) $wpcf7cf_entries = array();
93
94 $wpcf7cf_entries = array_values($wpcf7cf_entries);
95
96 ?>
97 <div class="wpcf7cf-inner-container">
98
99 <label class="wpcf7cf-switch" id="wpcf7cf-text-only-switch">
100 <span class="label">Text mode</span>
101 <span class="switch">
102 <input type="checkbox" id="wpcf7cf-text-only-checkbox" name="wpcf7cf-text-only-checkbox" value="text_only" <?php echo $is_text_only ? 'checked':''; ?>>
103 <span class="slider round"></span>
104 </span>
105 </label>
106
107 <h2><?php echo esc_html( __( 'Conditional fields', 'wpcf7cf' ) ); ?></h2>
108
109 <div id="wpcf7cf-entries-ui" style="display:none">
110 <?php
111 print_entries_html($form);
112 ?>
113 <div id="wpcf7cf-entries">
114 <?php
115 //print_entries_html($form, $wpcf7cf_entries);
116 ?>
117 </div>
118
119 <span id="wpcf7cf-add-button" title="add new rule">+ add new conditional rule</span>
120
121 <div id="wpcf7cf-a-lot-of-conditions" class="wpcf7cf-notice notice-warning" style="display:none;">
122 <p>
123 <strong>Wow, That's a lot of conditions!</strong><br>
124 You can only add up to <?php echo WPCF7CF_MAX_RECOMMENDED_CONDITIONS ?> conditions using this interface.
125 Please switch to <strong>Text mode</strong> if you want to add more than <?php echo WPCF7CF_MAX_RECOMMENDED_CONDITIONS ?> conditions.
126 </p>
127 </div>
128
129 </div>
130
131 <div id="wpcf7cf-text-entries">
132 <div id="wpcf7cf-settings-text-wrap">
133
134 <textarea id="wpcf7cf-settings-text" name="wpcf7cf-settings-text"><?php echo CF7CF::serializeConditions($wpcf7cf_entries) ?></textarea>
135 <br>
136 </div>
137 </div>
138 </div>
139 <?php
140 }
141
142 // duplicate conditions on duplicate form part 1.
143 add_filter('wpcf7_copy','wpcf7cf_copy', 10, 2);
144 function wpcf7cf_copy($new_form,$current_form) {
145
146 $id = $current_form->id();
147 $props = $new_form->get_properties();
148 $props['messages']['wpcf7cf_copied'] = $id;
149 $new_form->set_properties($props);
150
151 return $new_form;
152 }
153
154 // duplicate conditions on duplicate form part 2.
155 add_action('wpcf7_after_save','wpcf7cf_after_save',10,1);
156 function wpcf7cf_after_save($contact_form) {
157 $props = $contact_form->get_properties();
158 $original_id = isset($props['messages']['wpcf7cf_copied']) ? $props['messages']['wpcf7cf_copied'] : 0;
159 if ($original_id !== 0) {
160 $post_id = $contact_form->id();
161 unset($props['messages']['wpcf7cf_copied']);
162 $contact_form->set_properties($props);
163 CF7CF::setConditions($post_id, CF7CF::getConditions($original_id));
164 return;
165 }
166 }
167
168 // wpcf7_save_contact_form callback
169 add_action( 'wpcf7_save_contact_form', 'wpcf7cf_save_contact_form', 10, 1 );
170 function wpcf7cf_save_contact_form( $contact_form )
171 {
172
173 if ( ! isset( $_POST ) || empty( $_POST ) || ! isset( $_POST['wpcf7cf-settings-text'] ) ) {
174 return;
175 }
176 $post_id = $contact_form->id();
177 if ( ! $post_id )
178 return;
179
180 // unset($_POST['wpcf7cf_options']['{id}']); // remove the dummy entry
181
182 // TODO: only save the one import/export field.
183 $conditions_string = stripslashes(sanitize_textarea_field($_POST['wpcf7cf-settings-text']));
184
185 $conditions = CF7CF::parse_conditions($conditions_string);
186
187 CF7CF::setConditions($post_id, $conditions);
188
189 if (isset($_POST['wpcf7cf-summary-template'])) {
190 WPCF7CF_Summary::saveSummaryTemplate($_POST['wpcf7cf-summary-template'],$post_id);
191 }
192
193 return;
194
195 };
196
197 function wpcf7cf_sanitize_options($options) {
198 //$options = array_values($options);
199 $sanitized_options = [];
200 foreach ($options as $option_entry) {
201 $sanitized_option = [];
202 $sanitized_option['then_field'] = sanitize_text_field($option_entry['then_field']);
203 foreach ($option_entry['and_rules'] as $and_rule) {
204 $sanitized_option['and_rules'][] = [
205 'if_field' => sanitize_text_field($and_rule['if_field']),
206 'operator' => $and_rule['operator'],
207 'if_value' => sanitize_text_field($and_rule['if_value']),
208 ];
209 }
210
211 $sanitized_options[] = $sanitized_option;
212 }
213 return $sanitized_options;
214 }
215
216 function print_entries_html($form, $wpcf7cf_entries = false) {
217
218 $is_dummy = !$wpcf7cf_entries;
219
220 if ($is_dummy) {
221 $wpcf7cf_entries = array(
222 '{id}' => array(
223 'then_field' => '-1',
224 'and_rules' => array(
225 0 => array(
226 'if_field' => '-1',
227 'operator' => 'equals',
228 'if_value' => ''
229 )
230 )
231 )
232 );
233 }
234
235 foreach($wpcf7cf_entries as $i => $entry) {
236
237 // check for backwards compatibility ( < 2.0 )
238 if (!key_exists('and_rules', $wpcf7cf_entries[$i]) || !is_array($wpcf7cf_entries[$i]['and_rules'])) {
239 $wpcf7cf_entries[$i]['and_rules'][0] = $wpcf7cf_entries[$i];
240 }
241
242 $and_entries = array_values($wpcf7cf_entries[$i]['and_rules']);
243
244 if ($is_dummy) {
245 echo '<div id="wpcf7cf-new-entry">';
246 } else {
247 echo '<div class="entry">';
248 }
249 ?>
250 <div class="wpcf7cf-if">
251 <span class="label">Show</span>
252 <select class="then-field-select"><?php wpcf7cf_all_group_options($form, $entry['then_field']); ?></select>
253 </div>
254 <div class="wpcf7cf-and-rules" data-next-index="<?php echo count($and_entries) ?>">
255 <?php
256
257
258
259 foreach($and_entries as $and_i => $and_entry) {
260 ?>
261 <div class="wpcf7cf-and-rule">
262 <span class="rule-part if-txt label">if</span>
263 <select class="rule-part if-field-select"><?php wpcf7cf_all_field_options( $form, $and_entry['if_field'] ); ?></select>
264 <select class="rule-part operator"><?php all_operator_options( $and_entry['operator'] ) ?></select>
265 <input class="rule-part if-value" type="text"
266 placeholder="value" value="<?php echo $and_entry['if_value'] ?>">
267 <span class="and-button">And</span>
268 <span title="delete rule" class="rule-part delete-button">remove</span>
269 </div>
270 <?php
271 }
272 ?>
273 </div>
274 <?php
275 echo '</div>';
276 }
277 }