PluginProbe
Advanced Custom Fields: Extended / 0.8.6.9
Advanced Custom Fields: Extended v0.8.6.9
0.9.2.7 0.9.2.6 0.9.2.5 0.8.6 0.8.6.1 0.8.6.3 0.8.6.5 0.8.6.6 0.8.6.7 0.8.6.8 0.8.6.9 0.8.7 0.8.7.1 0.8.7.2 0.8.7.3 0.8.7.4 0.8.7.5 0.8.7.6 0.8.8 0.8.8.1 0.8.8.10 0.8.8.11 0.8.8.2 0.8.8.3 0.8.8.4 All 92 releases
acf-extended / includes / admin / tools / form-import.php
form-import.php
459 lines 15.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if(!defined('ABSPATH'))
4 exit;
5
6 // Check setting
7 if(!acf_get_setting('acfe/modules/dynamic_forms'))
8 return;
9
10 if(!class_exists('ACFE_Admin_Tool_Import_Form')):
11
12 class ACFE_Admin_Tool_Import_Form extends ACF_Admin_Tool{
13
14 function initialize(){
15
16 // vars
17 $this->name = 'acfe_tool_form_import';
18 $this->title = __('Import Forms');
19 $this->icon = 'dashicons-upload';
20
21 }
22
23 function html(){
24
25 ?>
26 <p><?php _e('Import Forms', 'acf'); ?></p>
27
28 <div class="acf-fields">
29 <?php
30
31 acf_render_field_wrap(array(
32 'label' => __('Select File', 'acf'),
33 'type' => 'file',
34 'name' => 'acf_import_file',
35 'value' => false,
36 'uploader' => 'basic',
37 ));
38
39 ?>
40 </div>
41
42 <p class="acf-submit">
43 <button type="submit" name="action" class="button button-primary"><?php _e('Import File'); ?></button>
44 </p>
45 <?php
46
47 }
48
49 function submit(){
50
51 // Check file size.
52 if(empty($_FILES['acf_import_file']['size']))
53 return acf_add_admin_notice(__("No file selected", 'acf'), 'warning');
54
55 // Get file data.
56 $file = $_FILES['acf_import_file'];
57
58 // Check errors.
59 if($file['error'])
60 return acf_add_admin_notice(__("Error uploading file. Please try again", 'acf'), 'warning');
61
62 // Check file type.
63 if(pathinfo($file['name'], PATHINFO_EXTENSION) !== 'json')
64 return acf_add_admin_notice(__("Incorrect file type", 'acf'), 'warning');
65
66 // Read JSON.
67 $json = file_get_contents($file['tmp_name']);
68 $json = json_decode($json, true);
69
70 // Check if empty.
71 if(!$json || !is_array($json))
72 return acf_add_admin_notice(__("Import file empty", 'acf'), 'warning');
73
74 $ids = array();
75
76 // Loop over json
77 foreach($json as $args){
78
79 // Check if already exists
80 if(get_page_by_path($args['acfe_form_name'], OBJECT, 'acfe-form')){
81
82 acf_add_admin_notice(__("Form {$args['title']} already exists. Import aborted."), 'warning');
83
84 continue;
85
86 }
87
88 // Import
89 $post_id = $this->import($args);
90
91 // Insert error
92 if(!$post_id){
93
94 acf_add_admin_notice(__("Something went wrong with the form {$args['title']}. Import aborted."), 'warning');
95
96 continue;
97
98 }
99
100 // append message
101 $ids[] = $post_id;
102
103 }
104
105 if(empty($ids))
106 return false;
107
108 // Count total
109 $total = count($ids);
110
111 // Generate text
112 $text = sprintf(_n('1 form imported', '%s forms imported', $total, 'acf'), $total);
113
114 // Add links to text
115 $links = array();
116 foreach($ids as $id){
117
118 $links[] = '<a href="' . get_edit_post_link($id) . '">' . get_the_title($id) . '</a>';
119
120 }
121
122 $text .= ': ' . implode(', ', $links);
123
124 // Add notice
125 acf_add_admin_notice($text, 'success');
126
127 }
128
129 function import($args){
130
131 // Vars
132 $title = acf_extract_var($args, 'title');
133 $name = $args['acfe_form_name'];
134
135 // Insert post
136 $post_id = wp_insert_post(array(
137 'post_title' => $title,
138 'post_name' => $name,
139 'post_type' => 'acfe-form',
140 'post_status' => 'publish'
141 ));
142
143 // Insert error
144 if(is_wp_error($post_id))
145 return false;
146
147 acf_enable_filter('local');
148
149 // Import Compatibility
150 $args = $this->import_compatibility($args);
151
152 // Update Values
153 acf_update_values($args, $post_id);
154
155 acf_disable_filter('local');
156
157 return $post_id;
158
159 }
160
161 function import_compatibility($args){
162
163 // ACF Extended: 0.8.5 Compatibility - Step 1
164 // Groups upgrade
165 $has_upgraded = false;
166
167 $rules = array(
168
169 // Post: title
170 array(
171 'group' => 'field_acfe_form_post_save_post_title_group',
172 'sub_field' => 'field_acfe_form_post_save_post_title',
173 'sub_field_custom' => 'field_acfe_form_post_save_post_title_custom',
174 ),
175
176 // Post: name
177 array(
178 'group' => 'field_acfe_form_post_save_post_name_group',
179 'sub_field' => 'field_acfe_form_post_save_post_name',
180 'sub_field_custom' => 'field_acfe_form_post_save_post_name_custom',
181 ),
182
183 // Term: name
184 array(
185 'group' => 'field_acfe_form_term_save_name_group',
186 'sub_field' => 'field_acfe_form_term_save_name',
187 'sub_field_custom' => 'field_acfe_form_term_save_name_custom',
188 ),
189
190 // Term: slug
191 array(
192 'group' => 'field_acfe_form_term_save_slug_group',
193 'sub_field' => 'field_acfe_form_term_save_slug',
194 'sub_field_custom' => 'field_acfe_form_term_save_slug_custom',
195 ),
196
197 // User: e-mail
198 array(
199 'group' => 'field_acfe_form_user_save_email_group',
200 'sub_field' => 'field_acfe_form_user_save_email',
201 'sub_field_custom' => 'field_acfe_form_user_save_email_custom',
202 ),
203
204 // User: username
205 array(
206 'group' => 'field_acfe_form_user_save_username_group',
207 'sub_field' => 'field_acfe_form_user_save_username',
208 'sub_field_custom' => 'field_acfe_form_user_save_username_custom',
209 ),
210
211 // User: password
212 array(
213 'group' => 'field_acfe_form_user_save_password_group',
214 'sub_field' => 'field_acfe_form_user_save_password',
215 'sub_field_custom' => 'field_acfe_form_user_save_password_custom',
216 ),
217
218 // User: first name
219 array(
220 'group' => 'field_acfe_form_user_save_first_name_group',
221 'sub_field' => 'field_acfe_form_user_save_first_name',
222 'sub_field_custom' => 'field_acfe_form_user_save_first_name_custom',
223 ),
224
225 // User: last name
226 array(
227 'group' => 'field_acfe_form_user_save_last_name_group',
228 'sub_field' => 'field_acfe_form_user_save_last_name',
229 'sub_field_custom' => 'field_acfe_form_user_save_last_name_custom',
230 ),
231
232 // User: nickname
233 array(
234 'group' => 'field_acfe_form_user_save_nickname_group',
235 'sub_field' => 'field_acfe_form_user_save_nickname',
236 'sub_field_custom' => 'field_acfe_form_user_save_nickname_custom',
237 ),
238
239 // User: display name
240 array(
241 'group' => 'field_acfe_form_user_save_display_name_group',
242 'sub_field' => 'field_acfe_form_user_save_display_name',
243 'sub_field_custom' => 'field_acfe_form_user_save_display_name_custom',
244 ),
245
246 // User: website
247 array(
248 'group' => 'field_acfe_form_user_save_website_group',
249 'sub_field' => 'field_acfe_form_user_save_website',
250 'sub_field_custom' => 'field_acfe_form_user_save_website_custom',
251 ),
252
253 );
254
255 foreach($args['acfe_form_actions'] as &$row){
256
257 foreach($rules as $rule){
258
259 if(!acf_maybe_get($row, $rule['group']))
260 continue;
261
262 $value = null;
263 $group = $row[$rule['group']];
264
265 if(acf_maybe_get($group, $rule['sub_field']) === 'custom'){
266
267 $value = acf_maybe_get($group, $rule['sub_field_custom']);
268
269 }else{
270
271 $value = acf_maybe_get($group, $rule['sub_field']);
272
273 }
274
275 unset($row[$rule['group']]);
276
277 $row[$rule['sub_field']] = $value;
278
279 $has_upgraded = true;
280
281 }
282
283 }
284
285 // ACF Extended: 0.8.5 Compatibility - Step 2
286 // Field mapping upgrade
287 if($has_upgraded){
288
289 // Rules
290 $rules = array(
291
292 array(
293 'load_values' => 'field_acfe_form_post_load_values',
294 'fields' => array(
295 'field_acfe_form_post_map_post_type' => 'field_acfe_form_post_save_post_type',
296 'field_acfe_form_post_map_post_status' => 'field_acfe_form_post_save_post_status',
297 'field_acfe_form_post_map_post_title' => 'field_acfe_form_post_save_post_title',
298 'field_acfe_form_post_map_post_name' => 'field_acfe_form_post_save_post_name',
299 'field_acfe_form_post_map_post_content' => 'field_acfe_form_post_save_post_content',
300 'field_acfe_form_post_map_post_author' => 'field_acfe_form_post_save_post_author',
301 'field_acfe_form_post_map_post_parent' => 'field_acfe_form_post_save_post_parent',
302 'field_acfe_form_post_map_post_terms' => 'field_acfe_form_post_save_post_terms',
303 )
304 ),
305
306 array(
307 'load_values' => 'field_acfe_form_term_load_values',
308 'fields' => array(
309 'field_acfe_form_term_map_name' => 'field_acfe_form_term_save_name',
310 'field_acfe_form_term_map_slug' => 'field_acfe_form_term_save_slug',
311 'field_acfe_form_term_map_taxonomy' => 'field_acfe_form_term_save_taxonomy',
312 'field_acfe_form_term_map_parent' => 'field_acfe_form_term_save_parent',
313 'field_acfe_form_term_map_description' => 'field_acfe_form_term_save_description',
314 )
315 ),
316
317 array(
318 'load_values' => 'field_acfe_form_user_load_values',
319 'fields' => array(
320 'field_acfe_form_user_map_email' => 'field_acfe_form_user_save_email',
321 'field_acfe_form_user_map_username' => 'field_acfe_form_user_save_username',
322 'field_acfe_form_user_map_password' => 'field_acfe_form_user_save_password',
323 'field_acfe_form_user_map_first_name' => 'field_acfe_form_user_save_first_name',
324 'field_acfe_form_user_map_last_name' => 'field_acfe_form_user_save_last_name',
325 'field_acfe_form_user_map_nickname' => 'field_acfe_form_user_save_nickname',
326 'field_acfe_form_user_map_display_name' => 'field_acfe_form_user_save_display_name',
327 'field_acfe_form_user_map_website' => 'field_acfe_form_user_save_website',
328 'field_acfe_form_user_map_description' => 'field_acfe_form_user_save_description',
329 'field_acfe_form_user_map_role' => 'field_acfe_form_user_save_role',
330 )
331 ),
332
333 );
334
335 foreach($args['acfe_form_actions'] as &$row){
336
337 foreach($rules as $rule){
338
339 $load_values = acf_maybe_get($row, $rule['load_values']);
340 $fields = $rule['fields'];
341
342 if(!empty($load_values))
343 continue;
344
345 foreach($fields as $map => $save){
346
347 $map_value = acf_maybe_get($row, $map);
348
349 if(empty($map_value))
350 continue;
351
352 if($save === 'field_acfe_form_post_save_post_content'){
353
354 $row['field_acfe_form_post_save_post_content_group'][$save] = $map_value;
355
356 }
357
358 elseif($save === 'field_acfe_form_term_save_description'){
359
360 $row['field_acfe_form_term_save_description_group'][$save] = $map_value;
361
362 }
363
364 elseif($save === 'field_acfe_form_user_save_description'){
365
366 $row['field_acfe_form_user_save_description_group'][$save] = $map_value;
367
368 }
369
370 else{
371
372 $row[$save] = $map_value;
373
374 }
375
376 }
377
378 }
379
380 }
381
382 }
383
384 return $args;
385
386 }
387
388 function import_external($data){
389
390 $ids = array();
391
392 // Loop over args
393 foreach($data as $args){
394
395 // Check if already exists
396 $form_exists = get_page_by_path($args['acfe_form_name'], OBJECT, 'acfe-form');
397
398 if($form_exists)
399 continue;
400
401 // Import
402 $post_id = $this->import($args);
403
404 // Insert error
405 if(!$post_id)
406 continue;
407
408 $name = get_field('acfe_form_name', $post_id);
409
410 $return = array(
411 'id' => $post_id,
412 'name' => $name,
413 );
414
415 // append message
416 $ids[] = $return;
417
418 }
419
420 if(empty($ids))
421 return false;
422
423 return $ids;
424
425 }
426
427 }
428
429 acf_register_admin_tool('ACFE_Admin_Tool_Import_Form');
430
431 endif;
432
433 /*
434 * ACFE: Import Dynamic Form
435 *
436 * $args: Accepts array() or json
437 * return: A list of form_id & form_name
438 */
439 function acfe_import_dynamic_form($args = false){
440
441 if(!$args)
442 return false;
443
444 // json
445 if(is_string($args)){
446
447 $args = json_decode($args, true);
448
449 }
450
451 if(!is_array($args) || empty($args))
452 return false;
453
454 // Tool
455 $tool = acf()->admin_tools->get_tool('ACFE_Admin_Tool_Import_Form');
456
457 return $tool->import_external($args);
458
459 }