PluginProbe ʕ •ᴥ•ʔ
WP All Export – Drag & Drop Export to Any Custom CSV, XML & Excel / 1.2.2
WP All Export – Drag & Drop Export to Any Custom CSV, XML & Excel v1.2.2
trunk 0.9.0 0.9.1 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.2.0 1.2.1 1.2.10 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.10 1.4.11 1.4.12 1.4.13 1.4.14 1.4.15 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0
wp-all-export / libraries / XmlExportACF.php
wp-all-export / libraries Last commit date
VariableProductTitle 7 years ago .gitkeep 7 years ago WpaeInvalidPhpException.php 7 years ago WpaeInvalidStringException.php 7 years ago WpaeMethodNotFoundException.php 7 years ago WpaePhpInterpreterErrorHandler.php 7 years ago WpaeString.php 7 years ago WpaeTooMuchRecursionException.php 7 years ago WpaeXmlProcessor.php 7 years ago XmlCsvExport.php 7 years ago XmlExportACF.php 7 years ago XmlExportComment.php 7 years ago XmlExportCpt.php 7 years ago XmlExportEngine.php 7 years ago XmlExportFiltering.php 7 years ago XmlExportMediaGallery.php 7 years ago XmlExportTaxonomy.php 7 years ago XmlExportUser.php 7 years ago XmlExportWooCommerce.php 7 years ago XmlExportWooCommerceCoupon.php 7 years ago XmlExportWooCommerceOrder.php 7 years ago XmlGoogleMerchants.php 7 years ago XmlSpec.php 7 years ago
XmlExportACF.php
1750 lines
1 <?php
2
3 if ( ! class_exists('XmlExportACF') )
4 {
5 final class XmlExportACF
6 {
7 private $_existing_acf_meta_keys = array();
8
9 private $_acf_groups = array();
10
11 public function __construct()
12 {
13 add_filter("wp_all_export_csv_rows", array( &$this, "filter_csv_rows"), 10, 3);
14 }
15
16 public function init( & $existing_meta_keys = array() ){
17
18 if ( ! class_exists( 'acf' ) ) return;
19
20 global $acf;
21
22 if ($acf and version_compare($acf->settings['version'], '5.0.0') >= 0){
23
24 $saved_acfs = get_posts(array('posts_per_page' => -1, 'post_type' => 'acf-field-group'));
25
26 $acfs = acf_local()->groups;
27
28 if ( ! empty($acfs) and is_array($acfs)) $this->_acf_groups = $acfs;
29
30 }
31 else{
32
33 $this->_acf_groups = apply_filters('acf/get_field_groups', array());
34
35 }
36
37 if ( ! empty($saved_acfs) ){
38 foreach ($saved_acfs as $key => $obj) {
39 if ( ! isset($acfs[$obj->post_name]))
40 {
41 $this->_acf_groups[] = array(
42 'ID' => $obj->ID,
43 'title' => $obj->post_title
44 );
45 }
46 }
47 }
48
49 if ( ! empty($this->_acf_groups) ){
50
51 foreach ($this->_acf_groups as $key => $acfObj)
52 {
53 if (empty($this->_acf_groups[$key]['ID']) and ! empty($this->_acf_groups[$key]['key']))
54 {
55 $this->_acf_groups[$key]['ID'] = $acfs[$key]['key'];
56 }
57 elseif (empty($this->_acf_groups[$key]['ID']) and ! empty($this->_acf_groups[$key]['id']))
58 {
59 $this->_acf_groups[$key]['ID'] = $this->_acf_groups[$key]['id'];
60 }
61 }
62
63 // get all ACF fields
64 if ($acf->settings['version'] and version_compare($acf->settings['version'], '5.0.0') >= 0)
65 {
66
67 foreach ($this->_acf_groups as $key => $acf_obj) {
68
69 if ( is_numeric($acf_obj['ID'])){
70
71 $acf_fields = get_posts(array('posts_per_page' => -1, 'post_type' => 'acf-field', 'post_parent' => $acf_obj['ID'], 'post_status' => 'publish', 'orderby' => 'menu_order', 'order' => 'ASC'));
72
73 if ( ! empty($acf_fields) ){
74
75 foreach ($acf_fields as $field) {
76
77 $fieldData = (!empty($field->post_content)) ? unserialize($field->post_content) : array();
78
79 $fieldData['ID'] = $field->ID;
80 $fieldData['id'] = $field->ID;
81 $fieldData['label'] = $field->post_title;
82 $fieldData['key'] = $field->post_name;
83
84 if (in_array($fieldData['type'], array('tab'))) continue;
85
86 if (empty($fieldData['name'])) $fieldData['name'] = $field->post_excerpt;
87
88 if ( ! empty($fieldData['name'])){
89 $this->_existing_acf_meta_keys[] = $fieldData['name'];
90 }
91
92 $this->_acf_groups[$key]['fields'][] = $fieldData;
93
94 }
95 }
96 }
97 else
98 {
99 $acf_fields = acf_local()->fields;
100
101 if ( ! empty($acf_fields) )
102 {
103 foreach ($acf_fields as $field_key => $field)
104 {
105 if ($field['parent'] == $acf_obj['key'])
106 {
107 $fieldData = $field;
108
109 if (empty($fieldData['ID']))
110 {
111 $fieldData['ID'] = $fieldData['id'] = uniqid();
112 }
113
114 if ( ! empty($fieldData['name'])){
115 $this->_existing_acf_meta_keys[] = $fieldData['name'];
116 }
117
118 $this->_acf_groups[$key]['fields'][] = $fieldData;
119 }
120 }
121 }
122 }
123 }
124 }
125 else
126 {
127 foreach ($this->_acf_groups as $key => $acf_obj) {
128
129 $fields = array();
130
131 if (is_numeric($acf_obj['id'])){
132
133 foreach (get_post_meta($acf_obj['id'], '') as $cur_meta_key => $cur_meta_val)
134 {
135 if (strpos($cur_meta_key, 'field_') !== 0) continue;
136
137 $fields[] = (!empty($cur_meta_val[0])) ? unserialize($cur_meta_val[0]) : array();
138
139 }
140 }
141 else
142 {
143 global $acf_register_field_group;
144
145 if ( ! empty($acf_register_field_group) )
146 {
147 foreach ($acf_register_field_group as $group)
148 {
149 if ($group['id'] == $acf_obj['ID'])
150 {
151 foreach ($group['fields'] as $field)
152 {
153 $fields[] = $field;
154 }
155 }
156 }
157 }
158 }
159
160 if (count($fields)){
161
162 $sortArray = array();
163
164 foreach($fields as $field){
165 foreach($field as $key2=>$value){
166 if(!isset($sortArray[$key2])){
167 $sortArray[$key2] = array();
168 }
169 $sortArray[$key2][] = $value;
170 }
171 }
172
173 $orderby = "order_no";
174
175 if(is_array($sortArray[$orderby])) {
176 @array_multisort($sortArray[$orderby], SORT_ASC, $fields);
177 }
178 foreach ($fields as $field){
179 if (in_array($field['type'], array('tab'))) continue;
180 $this->_acf_groups[$key]['fields'][] = $field;
181 if ( ! empty($field['name'])) $this->_existing_acf_meta_keys[] = $field['name'];
182 }
183 }
184 }
185 }
186
187 if ( ! empty($existing_meta_keys)){
188 foreach ($existing_meta_keys as $key => $meta_key) {
189 foreach ($this->_existing_acf_meta_keys as $acf_key => $acf_value) {
190 if (in_array($meta_key, array($acf_value, "_" . $acf_value))) {
191 unset($existing_meta_keys[$key]);
192 }
193 }
194 }
195 }
196 }
197 }
198
199 private static $additional_articles = array();
200
201 private static $fc_sub_field_names = array();
202
203 public static function export_acf_field($field_value = '', $exportOptions, $ID, $pid, &$article, $xmlWriter = false, &$acfs, $element_name = '', $element_name_ns = '', $fieldSnipped = '', $group_id = '', $preview = false, $return_value = false, $is_sub_field = false )
204 {
205 global $acf;
206
207 $put_to_csv = true;
208
209 $field_name = (!empty($exportOptions['cc_label'][$ID])) ? $exportOptions['cc_label'][$ID] : $exportOptions['name'];
210 $field_options = (!empty($exportOptions['cc_options'][$ID])) ? unserialize($exportOptions['cc_options'][$ID]) : $exportOptions;
211 $field_settings = (!empty($exportOptions['cc_settings'][$ID])) ? json_decode($exportOptions['cc_settings'][$ID], true) : false;
212
213 $is_xml_export = false;
214
215 if ( ! empty($xmlWriter) and XmlExportEngine::$exportOptions['export_to'] == 'xml' and ! in_array(XmlExportEngine::$exportOptions['xml_template_type'], array('custom', 'XmlGoogleMerchants')) ){
216 $is_xml_export = true;
217 }
218
219 $is_custom_xml_export = false;
220
221 if ( XmlExportEngine::$exportOptions['export_to'] == 'xml' and in_array(XmlExportEngine::$exportOptions['xml_template_type'], array('custom')) ){
222 $is_custom_xml_export = true;
223 }
224
225 if ($field_options['type'] == 'message'){
226 $field_value = empty($field_options['message']) ? '' : $field_options['message'];
227 }
228
229
230 if ( ! empty($field_value))
231 {
232 $field_value = maybe_unserialize($field_value);
233
234 $implode_delimiter = XmlExportEngine::$implode;
235
236 switch ($field_options['type'])
237 {
238 case 'date_time_picker':
239 $format = empty($field_options['return_format']) ? 'Y-m-d H:i:s' : $field_options['return_format'];
240 $field_value = date($format, (is_numeric($field_value) ? $field_value : strtotime($field_value)));
241 break;
242 case 'date_picker':
243 $field_value = date('Ymd', strtotime($field_value));
244 break;
245
246 case 'file':
247 case 'image':
248 if (is_numeric($field_value))
249 {
250 $field_value = wp_get_attachment_url($field_value);
251 }
252 elseif(is_array($field_value))
253 {
254 $field_value = empty($field_value['url']) ? '' : $field_value['url'];
255 }
256 break;
257
258 case 'gallery':
259 $v = array();
260
261 foreach ($field_value as $key => $item)
262 {
263 if (!empty($item['url'])){
264 $v[] = $item['url'];
265 }
266 elseif (is_numeric($item)){
267 $gallery_item_url = wp_get_attachment_url($item);
268 if (!empty($gallery_item_url)){
269 $v[] = $gallery_item_url;
270 }
271 }
272 }
273 $field_value = implode($implode_delimiter, $v);
274
275 break;
276 case 'location-field':
277 $localion_parts = explode("|", $field_value);
278
279 if ($is_xml_export)
280 {
281 if ( ! empty($localion_parts) ){
282
283 $xmlWriter->beginElement($element_name_ns, $element_name, null);
284 $xmlWriter->startElement('address');
285 $xmlWriter->writeData($localion_parts[0], 'address');
286 $xmlWriter->closeElement();
287
288 if (!empty($localion_parts[1])){
289 $coordinates = explode(",", $localion_parts[1]);
290 if (!empty($coordinates)){
291 $xmlWriter->startElement('lat');
292 $xmlWriter->writeData($coordinates[0], 'lat');
293 $xmlWriter->closeElement();
294 $xmlWriter->startElement('lng');
295 $xmlWriter->writeData($coordinates[1], 'lng');
296 $xmlWriter->closeElement();
297 }
298 }
299 $xmlWriter->closeElement();
300
301 }
302 }
303 else
304 {
305 if ( ! $return_value )
306 {
307 $acfs[$element_name] = array(
308 $element_name . '_address',
309 $element_name . '_lat',
310 $element_name . '_lng'
311 );
312
313 if ( ! empty($localion_parts) )
314 {
315 $article[$element_name . '_address'] = $localion_parts[0];
316 if (!empty($localion_parts[1]))
317 {
318 $coordinates = explode(",", $localion_parts[1]);
319 if (!empty($coordinates))
320 {
321 $article[$element_name . '_lat'] = $coordinates[0];
322 $article[$element_name . '_lng'] = $coordinates[1];
323 }
324 }
325 }
326 }
327 else
328 {
329 if ( ! empty($localion_parts) )
330 {
331 $return_value = array(
332 'address' => $localion_parts[0],
333 );
334 if (!empty($localion_parts[1]))
335 {
336 $coordinates = explode(",", $localion_parts[1]);
337 if (!empty($coordinates))
338 {
339 $return_value['lat'] = $coordinates[0];
340 $return_value['lng'] = $coordinates[1];
341 }
342 }
343 }
344 }
345 }
346
347 $put_to_csv = false;
348 break;
349
350 case 'paypal_item':
351
352 if ($is_xml_export)
353 {
354 $xmlWriter->beginElement($element_name_ns, $element_name, null);
355 if ( is_array($field_value) ){
356 foreach ($field_value as $key => $value) {
357 $xmlWriter->beginElement($element_name_ns, $key, null);
358 $xmlWriter->writeData($value, $key);
359 $xmlWriter->closeElement();
360 }
361 }
362 $xmlWriter->closeElement();
363 }
364 else
365 {
366 if ( ! $return_value )
367 {
368 if ( $is_custom_xml_export ){
369 $article[$element_name] = json_encode($field_value);
370 }
371 else{
372 $acfs[$element_name] = array($element_name . '_item_name', $element_name . '_item_description', $element_name . '_price');
373
374 if ( is_array($field_value) )
375 {
376 foreach ($field_value as $key => $value)
377 {
378 $article[$element_name . '_' . $key] = $value;
379 }
380 }
381 }
382 }
383 }
384
385 $put_to_csv = false;
386
387 break;
388
389 case 'google_map':
390
391 if ($is_xml_export)
392 {
393 $xmlWriter->beginElement($element_name_ns, $element_name, null);
394 $xmlWriter->startElement('address');
395 $xmlWriter->writeData($field_value['address'], 'address');
396 $xmlWriter->closeElement();
397 $xmlWriter->startElement('lat');
398 $xmlWriter->writeData($field_value['lat'], 'lat');
399 $xmlWriter->closeElement();
400 $xmlWriter->startElement('lng');
401 $xmlWriter->writeData($field_value['lng'], 'lng');
402 $xmlWriter->closeElement();
403 $xmlWriter->closeElement();
404 }
405 else
406 {
407 if ( ! $return_value )
408 {
409 if ( $is_custom_xml_export ){
410 $article[$element_name] = json_encode($field_value);
411 }
412 else{
413 $acfs[$element_name] = array($element_name . '_address', $element_name . '_lat', $element_name . '_lng');
414 $article[$element_name . '_address'] = $field_value['address'];
415 $article[$element_name . '_lat'] = $field_value['lat'];
416 $article[$element_name . '_lng'] = $field_value['lng'];
417 }
418 }
419 }
420 $put_to_csv = false;
421
422 break;
423
424 case 'link':
425
426 if ($is_xml_export)
427 {
428 $xmlWriter->beginElement($element_name_ns, $element_name, null);
429 $xmlWriter->startElement('title');
430 $xmlWriter->writeData($field_value['title'], 'title');
431 $xmlWriter->closeElement();
432 $xmlWriter->startElement('url');
433 $xmlWriter->writeData($field_value['url'], 'url');
434 $xmlWriter->closeElement();
435 $xmlWriter->startElement('target');
436 $xmlWriter->writeData($field_value['target'], 'target');
437 $xmlWriter->closeElement();
438 $xmlWriter->closeElement();
439 }
440 else
441 {
442 if ( ! $return_value )
443 {
444 if ( $is_custom_xml_export ){
445 $article[$element_name] = json_encode($field_value);
446 }
447 else{
448 $acfs[$element_name] = array($element_name . '_title', $element_name . '_url', $element_name . '_target');
449 $article[$element_name . '_title'] = $field_value['_title'];
450 $article[$element_name . '_url'] = $field_value['_url'];
451 $article[$element_name . '_target'] = $field_value['_target'];
452 }
453 }
454 }
455 $put_to_csv = false;
456
457 break;
458
459 case 'acf_cf7':
460 case 'gravity_forms_field':
461
462 if ( ! empty($field_options['multiple']) )
463 {
464 $field_value = implode($implode_delimiter, $field_value);
465 }
466
467 break;
468
469 case 'page_link':
470
471 if (is_array($field_value))
472 {
473 $field_value = implode($implode_delimiter, $field_value);
474 }
475
476 break;
477
478 case 'post_object':
479
480 if ( ! empty($field_options['multiple'])){
481 $v = array();
482 foreach ($field_value as $key => $pid) {
483
484 if (is_numeric($pid)){
485 $entry = get_post($pid);
486 if ($entry)
487 {
488 $v[] = $entry->post_name;
489 }
490 }
491 else{
492 $v[] = $pid->post_name;
493 }
494 }
495 $field_value = implode($implode_delimiter, $v);
496 }
497 else{
498 if (is_numeric($field_value)){
499 $entry = get_post($field_value);
500 if ($entry)
501 {
502 $field_value = $entry->post_name;
503 }
504 }
505 else{
506 $field_value = $field_value->post_name;
507 }
508 }
509
510 break;
511
512 case 'relationship':
513
514 $v = array();
515 foreach ($field_value as $key => $pid) {
516 $entry = get_post($pid);
517 if ($entry)
518 {
519 $v[] = $entry->post_title;
520 }
521 }
522 $field_value = implode($implode_delimiter, $v);
523
524 break;
525
526 case 'user':
527
528 if ( ! empty($field_options['multiple'])){
529 $v = array();
530 foreach ($field_value as $key => $user) {
531 if (is_numeric($user)){
532 $entry = get_user_by('ID', $user);
533 if ($entry)
534 {
535 $v[] = $entry->user_email;
536 }
537 }
538 else{
539 $v[] = $user['user_email'];
540 }
541 }
542 $field_value = implode($implode_delimiter, $v);
543 }
544 else{
545 if (is_numeric($field_value)){
546 $entry = get_user_by('ID', $field_value);
547 if ($entry)
548 {
549 $field_value = $entry->user_email;
550 }
551 }
552 else{
553 $field_value = $field_value['user_email'];
554 }
555 }
556
557 break;
558
559 case 'taxonomy':
560
561 if ($is_xml_export)
562 {
563 $xmlWriter->beginElement($element_name_ns, $element_name, null);
564
565 if ( ! in_array($field_options['field_type'], array('radio', 'select'))){
566 foreach ($field_value as $key => $tid) {
567 $entry = get_term($tid , $field_options['taxonomy']);
568 if ($entry and !is_wp_error($entry))
569 {
570 $xmlWriter->startElement('term');
571 $xmlWriter->writeData($entry->name, 'term');
572 $xmlWriter->closeElement();
573 }
574 }
575 }
576 else{
577 $entry = get_term($field_value, $field_options['taxonomy']);
578 if ($entry)
579 {
580 $xmlWriter->startElement('term');
581 $xmlWriter->writeData($entry->name, 'term');
582 $xmlWriter->closeElement();
583 }
584 }
585
586 $xmlWriter->closeElement();
587
588 $put_to_csv = false;
589 }
590 else
591 {
592 if ( ! in_array($field_options['field_type'], array('radio', 'select'))){
593 $v = array();
594 foreach ($field_value as $key => $tid) {
595 $entry = get_term($tid , $field_options['taxonomy']);
596 if ($entry and !is_wp_error($entry))
597 {
598 $v[] = $entry->name;
599 }
600 }
601 $field_value = implode($implode_delimiter, $v);
602 }
603 else{
604 $entry = get_term($field_value, $field_options['taxonomy']);
605 if ($entry)
606 {
607 $field_value = $entry->name;
608 }
609 }
610 }
611
612 break;
613
614 case 'select':
615
616 if ( ! empty($field_options['multiple']))
617 {
618 $field_value = implode($implode_delimiter, $field_value);
619 }
620
621 break;
622
623 case 'checkbox':
624
625 if ( is_array($field_value) )
626 {
627 $field_value = implode($implode_delimiter, $field_value);
628 }
629
630 break;
631
632 case 'clone':
633
634 if ( ! empty($field_options['clone']) ) {
635 $values = maybe_unserialize($field_value);
636
637 $sub_fields = array();
638 foreach ($field_options['clone'] as $sub_field_key) {
639
640 if (strpos($sub_field_key, 'group_') === 0){
641 $acf_groups = get_posts(array(
642 'posts_per_page' => 1,
643 'post_type' => 'acf-field-group',
644 'name' => $sub_field_key,
645 'post_status' => 'publish'
646 ));
647 if (!empty($acf_groups)){
648 foreach ($acf_groups as $acf_group){
649 $sub_fields = get_posts(array('posts_per_page' => -1, 'post_type' => 'acf-field', 'post_parent' => $acf_group->ID, 'post_status' => 'publish', 'orderby' => 'menu_order', 'order' => 'ASC'));
650 }
651 }
652 }
653 else{
654 $args = array(
655 'name' => $sub_field_key,
656 'post_type' => 'acf-field',
657 'post_status' => 'publish',
658 'posts_per_page' => 1
659 );
660 $my_posts = get_posts($args);
661 if ($my_posts) {
662 $sub_fields[] = $my_posts[0];
663 }
664 }
665 }
666 if ( ! empty($sub_fields) ){
667
668 foreach ($sub_fields as $sub_field){
669
670 $field_value = isset($values[$sub_field->post_excerpt]) ? $values[$sub_field->post_excerpt] : '';
671
672 $sub_field_name = empty($sub_field->post_excerpt) ? str_replace("-","_", sanitize_title($sub_field->post_title)) : $sub_field->post_excerpt;
673
674 $field_options = unserialize($sub_field->post_content);
675
676 $sub_field_value = self::export_acf_field(
677 $field_value,
678 $field_options,
679 false,
680 $pid,
681 $article,
682 $xmlWriter,
683 $acfs,
684 $is_xml_export ? $sub_field_name : $element_name . '_' . $sub_field_name,
685 $element_name_ns,
686 '',
687 '',
688 $preview,
689 $is_xml_export ? false : true,
690 true
691 );
692
693 $acfs[$element_name][] = $element_name . '_' . $sub_field_name;
694 $article[$element_name . '_' . $sub_field_name] = ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($sub_field_value))) : $sub_field_value;
695 }
696 }
697 }
698
699 $put_to_csv = false;
700
701 break;
702
703 case 'repeater':
704
705 if ($is_xml_export) $xmlWriter->beginElement($element_name_ns, $element_name, null);
706
707 if( have_rows($field_name, $pid) ):
708
709 $rowValues = array();
710
711 $repeater_sub_field_names = array();
712
713 while( have_rows($field_name, $pid) ):
714
715 the_row();
716
717 $row = self::acf_get_row();
718
719 if ($is_xml_export) $xmlWriter->startElement('row');
720
721 foreach ($row['field']['sub_fields'] as $sub_field) {
722
723 if ($acf and version_compare($acf->settings['version'], '5.0.0') >= 0)
724 {
725 $v = $row['value'][ $row['i'] ][ $sub_field['key'] ];
726 $cache_slug = "format_value/post_id=".$row['post_id']."/name={$sub_field['name']}";
727 wp_cache_delete($cache_slug, 'acf');
728 if ($is_xml_export) $v = acf_format_value($v, $row['post_id'], $sub_field);
729 }
730 else
731 {
732 $v = get_sub_field($sub_field['name']);
733 }
734
735 if ($preview && ! $is_xml_export){
736 switch ($sub_field['type']) {
737 case 'textarea':
738 case 'oembed':
739 case 'wysiwyg':
740 case 'wp_wysiwyg':
741 case 'date_time_picker':
742 case 'date_picker':
743 $v = preg_replace( "/\r|\n/", "", esc_html($v) );
744 break;
745 default:
746 break;
747 }
748 }
749
750 $sub_field['delimiter'] = $implode_delimiter;
751
752 $sub_field_name = empty($sub_field['name']) ? str_replace("-","_", sanitize_title($sub_field['label'])) : $sub_field['name'];
753
754 $sub_field_value = self::export_acf_field(
755 $v,
756 $sub_field,
757 false,
758 $pid,
759 $article,
760 $xmlWriter,
761 $acfs,
762 $is_xml_export ? $sub_field_name : $element_name . '_' . $sub_field_name,
763 $element_name_ns,
764 $fieldSnipped,
765 '',
766 $preview,
767 $is_xml_export ? false : true,
768 true
769 );
770
771 if ( ! $is_xml_export )
772 {
773 switch ($sub_field['type'])
774 {
775 case 'google_map':
776 case 'paypal_item':
777 case 'location-field':
778 if ( ! empty($sub_field_value))
779 {
780 foreach ($sub_field_value as $repeater_key => $repeater_value)
781 {
782 $rowValues[$sub_field['name']][$repeater_key][] = (is_array($repeater_value)) ? implode($exportOptions['delimiter'], $repeater_value) : $repeater_value;
783 }
784 }
785 break;
786 case 'repeater':
787 if ( ! empty($sub_field_value)){
788 foreach ($sub_field_value as $repeater_key => $repeater_value) {
789 if (is_array($repeater_value)){
790 $rv = array();
791 foreach ($repeater_value as $repeater_key2 => $repeater_value2) {
792 $rv[] = (is_array($repeater_value2)) ? implode($exportOptions['delimiter'], $repeater_value2) : $repeater_value2;
793 }
794 $rowValues[$sub_field_name][$repeater_key][] = implode($exportOptions['delimiter'], $rv);
795 }
796 else{
797 $rowValues[$sub_field_name][$repeater_key][] = $repeater_value;
798 }
799 }
800 }
801 break;
802 default:
803 $sub_field_name = empty($sub_field['name']) ? str_replace("-","_", sanitize_title($sub_field['label'])) : $sub_field['name'];
804 $rowValues[$sub_field_name][] = apply_filters('pmxe_acf_field', pmxe_filter( (is_array($sub_field_value)) ? implode($exportOptions['delimiter'], $sub_field_value) : $sub_field_value, $fieldSnipped), $sub_field_name, $pid);
805 break;
806 }
807 }
808 }
809
810 if ($is_xml_export) $xmlWriter->closeElement();
811
812 endwhile;
813
814 if ($return_value) return $rowValues;
815
816 if ( ! $is_xml_export )
817 {
818 $additional_articles = array();
819
820 $sub_repeater_delimiter = apply_filters('wp_all_export_repeater_delimiter', $exportOptions['delimiter'], XmlExportEngine::$exportID);
821
822 foreach ($rowValues as $key => $values)
823 {
824 $is_have_subvalues = array_filter(array_keys($values), 'is_numeric');
825
826 if (empty($is_have_subvalues))
827 {
828 foreach ($values as $subkey => $subvalue)
829 {
830 if ( ! in_array($element_name . '_' . $key . '_' . $subkey, $repeater_sub_field_names))
831 {
832 $repeater_sub_field_names[] = $element_name . '_' . $key . '_' . $subkey;
833 }
834 // Display each repeater row in its own csv line
835 if ( ! empty($field_settings) and $field_settings['repeater_field_item_per_line'] )
836 {
837 $base_value = array_shift($subvalue);
838
839 $article[$element_name . '_' . $key . '_' . $subkey] = ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($base_value))) : $base_value;
840
841 if ( ! empty($subvalue))
842 {
843 foreach ($subvalue as $i => $addRowValue)
844 {
845 $additional_articles[$i]['settings'] = $field_settings;
846 $additional_articles[$i]['content'][$element_name . '_' . $key . '_' . $subkey] = $addRowValue;
847 }
848 }
849 }
850 else
851 {
852 if ($is_custom_xml_export){
853 $article[$element_name][$key . '_' . $subkey] = apply_filters('pmxe_acf_field', pmxe_filter(($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars(implode("|", $subvalue)))) : implode("|", $subvalue), $fieldSnipped), $key . '_' . $subkey, $pid);
854 }
855 else{
856 $article[$element_name . '_' . $key . '_' . $subkey] = apply_filters('pmxe_acf_field', pmxe_filter(($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars(implode($sub_repeater_delimiter, $subvalue)))) : implode($sub_repeater_delimiter, $subvalue), $fieldSnipped), $element_name . '_' . $key . '_' . $subkey, $pid);
857 }
858 }
859 }
860
861 }
862 else
863 {
864 if ( ! in_array($element_name . '_' . $key, $repeater_sub_field_names))
865 {
866 $repeater_sub_field_names[] = $element_name . '_' . $key;
867 }
868 // Display each repeater row in its own csv line
869 if ( ! empty($field_settings) and $field_settings['repeater_field_item_per_line'] )
870 {
871 $base_value = array_shift($values);
872
873 $article[$element_name . '_' . $key] = ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($base_value))) : $base_value;
874
875 if ( ! empty($values))
876 {
877 foreach ($values as $i => $addRowValue)
878 {
879 $additional_articles[$i]['settings'] = $field_settings;
880 $additional_articles[$i]['content'][$element_name . '_' . $key] = $addRowValue;
881 }
882 }
883 }
884 else
885 {
886 if ($is_custom_xml_export){
887 $article[$element_name][$key] = apply_filters('pmxe_acf_field', pmxe_filter(($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars(implode("|", $values)))) : implode("|", $values), $fieldSnipped), $key, $pid);
888 }
889 else{
890 $article[$element_name . '_' . $key] = apply_filters('pmxe_acf_field', pmxe_filter(($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars(implode($sub_repeater_delimiter, $values)))) : implode($sub_repeater_delimiter, $values), $fieldSnipped), $element_name . '_' . $key, $pid);
891 }
892 }
893 }
894 }
895
896 if ($is_custom_xml_export){
897 $article[$element_name] = serialize($article[$element_name]);
898 }
899
900 if ( ! empty($repeater_sub_field_names)) $acfs[$element_name] = $repeater_sub_field_names;
901
902 if ( ! empty($additional_articles) )
903 {
904 foreach ($additional_articles as $i => $additional_article) {
905 self::$additional_articles[] = $additional_article;
906 }
907 }
908 }
909
910 endif;
911
912 if ($is_xml_export) $xmlWriter->closeElement();
913
914 $put_to_csv = false;
915
916 break;
917
918 case 'flexible_content':
919
920 if ( ! $is_sub_field ){
921 $acf_flexible = get_option('wp_all_export_acf_flexible_' . XmlExportEngine::$exportID);
922 self::$fc_sub_field_names = empty($acf_flexible[$element_name]) ? array() : $acf_flexible[$element_name];
923 }
924
925 if ($is_xml_export) $xmlWriter->beginElement($element_name_ns, $element_name, null);
926
927 // check if the flexible content field has rows of data
928 if( have_rows($field_name, $pid) ):
929
930 // loop through the rows of data
931 while ( have_rows($field_name, $pid) ) : the_row();
932
933 $row = self::acf_get_row();
934
935 foreach ($row['field']['layouts'] as $layout) {
936
937 if ($layout['name'] == $row['value'][ $row['i'] ]['acf_fc_layout']){
938
939 if ($is_xml_export) $xmlWriter->startElement(preg_replace('#^\d+#', '', $row['value'][ $row['i'] ]['acf_fc_layout']) . '_' . $row['i']);
940
941 foreach ($layout['sub_fields'] as $sub_field) {
942
943 $layout_field_name = $element_name . '_' . $layout['name'] . '_' . $row['i'];
944
945 $v = '';
946
947 if(version_compare($acf->settings['version'], '5.0.0') >= 0) {
948 $fieldValueKey = 'key';
949 } else {
950 $fieldValueKey = 'name';
951 }
952
953 if (isset($row['value'][ $row['i']][ $sub_field[$fieldValueKey]]))
954 {
955 $v = $row['value'][ $row['i']][$sub_field[$fieldValueKey]];
956
957 if ($is_xml_export)
958 {
959 // apply filters
960 $v = apply_filters( "acf/format_value", $v, $pid, $sub_field );
961 $v = apply_filters( "acf/format_value/type={$sub_field['type']}", $v, $pid, $sub_field );
962 $v = apply_filters( "acf/format_value/name={$sub_field['_name']}", $v, $pid, $sub_field );
963 $v = apply_filters( "acf/format_value/key={$sub_field['key']}", $v, $pid, $sub_field );
964 }
965 }
966
967 if ($preview && ! $is_xml_export){
968 switch ($sub_field['type']) {
969 case 'textarea':
970 case 'oembed':
971 case 'wysiwyg':
972 case 'wp_wysiwyg':
973 case 'date_time_picker':
974 case 'date_picker':
975 $v = preg_replace( "/\r|\n/", "", esc_html($v) );
976 break;
977 default:
978 break;
979 }
980 }
981
982 $sub_field['delimiter'] = $implode_delimiter;
983
984 $sub_field_values = self::export_acf_field(
985 $v,
986 $sub_field,
987 false,
988 $pid,
989 $article,
990 $xmlWriter,
991 $acfs,
992 $is_xml_export ? $sub_field['name'] : $layout_field_name . '_' . $sub_field['name'],
993 $element_name_ns,
994 $fieldSnipped,
995 '',
996 $preview,
997 $is_xml_export ? false : true,
998 true
999 );
1000
1001 if ( ! $is_xml_export )
1002 {
1003 switch ($sub_field['type'])
1004 {
1005 case 'repeater':
1006
1007 if ( ! empty($sub_field_values))
1008 {
1009 foreach ($sub_field_values as $key => $values) {
1010 $article[$layout_field_name . '_' . $key] = ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars(implode($implode_delimiter, $values)))) : implode($implode_delimiter, $values);
1011 if ( ! in_array($layout_field_name . '_' . $key, self::$fc_sub_field_names)) self::$fc_sub_field_names[] = $layout_field_name . '_' . $key;
1012 }
1013 }
1014
1015 break;
1016 case 'flexible_content':
1017
1018
1019 break;
1020
1021 default:
1022
1023 $article[$layout_field_name . '_' . $sub_field['name']] = is_array($sub_field_values) ? implode($implode_delimiter, $sub_field_values) : $sub_field_values;
1024
1025 if ( ! in_array($layout_field_name . '_' . $sub_field['name'], self::$fc_sub_field_names))
1026 self::$fc_sub_field_names[] = $layout_field_name . '_' . $sub_field['name'];
1027
1028 break;
1029 }
1030 }
1031 }
1032 if ($is_xml_export) $xmlWriter->closeElement();
1033 }
1034 }
1035
1036 endwhile;
1037
1038 else :
1039
1040 // no layouts found
1041
1042 endif;
1043
1044 if ($is_xml_export) $xmlWriter->closeElement();
1045
1046 $put_to_csv = false;
1047
1048 break;
1049
1050 default:
1051
1052 break;
1053 }
1054 }
1055
1056 if ($return_value) return $field_value;
1057
1058 if ( ! empty(self::$fc_sub_field_names)){
1059 $acf_flexible = get_option('wp_all_export_acf_flexible_' . XmlExportEngine::$exportID);
1060 $acfs[$element_name] = self::$fc_sub_field_names;
1061 $acf_flexible[$element_name] = self::$fc_sub_field_names;
1062 update_option('wp_all_export_acf_flexible_' . XmlExportEngine::$exportID, $acf_flexible);
1063 self::$fc_sub_field_names = array();
1064 }
1065
1066 if ($put_to_csv)
1067 {
1068 $val = apply_filters('pmxe_acf_field', pmxe_filter( ( ! empty($field_value) ) ? maybe_serialize($field_value) : '', $fieldSnipped), $field_name, $pid);
1069
1070 if ($is_xml_export)
1071 {
1072 $xmlWriter->beginElement($element_name_ns, $element_name, null);
1073 $xmlWriter->writeData($val, $element_name);
1074 $xmlWriter->closeElement();
1075 }
1076 else
1077 {
1078 if($field_value === 0 || $field_value === "0") {
1079 $val = 0;
1080 }
1081
1082 // $article[$element_name] = ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($val))) : $val;
1083 wp_all_export_write_article( $article, $element_name, ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($val))) : $val);
1084 if ( ! isset($acfs[$element_name]) && ! in_array($field_options['type'], array('repeater', 'clone'))) $acfs[$element_name] = $element_name;
1085 }
1086 }
1087 }
1088
1089 public function filter_csv_rows($articles, $options, $export_id)
1090 {
1091 if ( ! empty(self::$additional_articles) and $options['export_to'] == 'csv')
1092 {
1093 $base_article = $articles[count($articles) - 1];
1094
1095 if ( ! empty(self::$additional_articles ) )
1096 {
1097 foreach (self::$additional_articles as $article)
1098 {
1099 if ($article['settings']['repeater_field_fill_empty_columns'])
1100 {
1101 foreach ($article['content'] as $key => $value) {
1102 unset($base_article[$key]);
1103 }
1104 $articles[] = @array_merge($base_article, $article['content']);
1105 }
1106 else
1107 {
1108 $articles[] = $article['content'];
1109 }
1110 }
1111 self::$additional_articles = array();
1112 }
1113 }
1114
1115 return $articles;
1116 }
1117
1118 public function get_fields_options( &$fields, $field_keys = array() ){
1119
1120 if ( ! empty($this->_acf_groups) )
1121 {
1122 foreach ($this->_acf_groups as $key => $group)
1123 {
1124 if ( ! empty($group['fields']))
1125 {
1126 foreach ($group['fields'] as $field)
1127 {
1128 $field_key = $field['label'];
1129
1130 if ( ! in_array($field_key, $field_keys) ) continue;
1131
1132 $fields['ids'][] = 1;
1133 $fields['cc_label'][] = $field['name'];
1134 $fields['cc_php'][] = '';
1135 $fields['cc_code'][] = '';
1136 $fields['cc_sql'][] = '';
1137 $fields['cc_options'][] = serialize(array_merge($field, array('group_id' => ((!empty($group['ID'])) ? $group['ID'] : $group['id']) )));
1138 $fields['cc_type'][] = 'acf';
1139 $fields['cc_value'][] = $field['name'];
1140 $fields['cc_name'][] = $field_key;
1141 $fields['cc_settings'][] = '';
1142 }
1143 }
1144 }
1145 }
1146 }
1147
1148 public function render( & $i ){
1149
1150 if ( ! empty($this->_acf_groups) )
1151 {
1152 ?>
1153 <p class="wpae-available-fields-group"><?php _e("ACF", "wp_all_export_plugin"); ?><span class="wpae-expander">+</span></p>
1154 <div class="wp-all-export-acf-wrapper wpae-custom-field">
1155 <?php
1156
1157 foreach ($this->_acf_groups as $key => $group)
1158 {
1159 $is_acf_group_visible = false;
1160 if (!empty($group['location'])){
1161 foreach ( $group['location'] as $locationRule ){
1162 $rule = array_shift($locationRule);
1163 if ( XmlExportEngine::$is_user_export && $rule['param'] == 'user_form'){
1164 $is_acf_group_visible = true;
1165 break;
1166 }
1167 elseif ( XmlExportEngine::$is_taxonomy_export && $rule['param'] == 'taxonomy'){
1168 $is_acf_group_visible = true;
1169 break;
1170 }
1171 elseif ( 'specific' == XmlExportEngine::$exportOptions['export_type'] && $rule['param'] == 'post_type'){
1172 if ( $rule['operator'] == '==' && in_array($rule['value'], XmlExportEngine::$post_types)){
1173 $is_acf_group_visible = true;
1174 break;
1175 }
1176 elseif ( $rule['operator'] != '==' && ! in_array($rule['value'], XmlExportEngine::$post_types)){
1177 $is_acf_group_visible = true;
1178 break;
1179 }
1180 }
1181 elseif( 'advanced' == XmlExportEngine::$exportOptions['export_type']){
1182 $is_acf_group_visible = true;
1183 break;
1184 }
1185 }
1186 }
1187 else{
1188 $is_acf_group_visible = true;
1189 }
1190
1191 if ( ! $is_acf_group_visible ) continue;
1192
1193 ?>
1194 <div class="wpae-acf-field">
1195 <ul>
1196 <li>
1197 <div class="default_column" rel="">
1198 <label class="wpallexport-element-label"><?php echo $group['title']; ?></label>
1199 <input type="hidden" name="rules[]" value="pmxe_acf_<?php echo (!empty($group['ID'])) ? $group['ID'] : $group['id'];?>"/>
1200 </div>
1201 </li>
1202 <?php
1203 if ( ! empty($group['fields']))
1204 {
1205 foreach ($group['fields'] as $field)
1206 {
1207 ?>
1208 <li class="pmxe_acf_<?php echo (!empty($group['ID'])) ? $group['ID'] : $group['id'];?> wp_all_export_auto_generate">
1209 <div class="custom_column" rel="<?php echo ($i + 1);?>">
1210 <label class="wpallexport-xml-element"><?php echo $field['label']; ?></label>
1211 <input type="hidden" name="ids[]" value="1"/>
1212 <input type="hidden" name="cc_label[]" value="<?php echo $field['name']; ?>"/>
1213 <input type="hidden" name="cc_php[]" value=""/>
1214 <input type="hidden" name="cc_code[]" value=""/>
1215 <input type="hidden" name="cc_sql[]" value=""/>
1216 <input type="hidden" name="cc_options[]" value="<?php echo esc_html(serialize(array_merge($field, array('group_id' => ((!empty($group['ID'])) ? $group['ID'] : $group['id']) ))));?>"/>
1217 <input type="hidden" name="cc_type[]" value="acf"/>
1218 <input type="hidden" name="cc_value[]" value="<?php echo $field['name']; ?>"/>
1219 <input type="hidden" name="cc_name[]" value="<?php echo $field['label'];?>"/>
1220 <input type="hidden" name="cc_settings[]" value=""/>
1221 </div>
1222 </li>
1223 <?php
1224 $i++;
1225 }
1226 }
1227 ?>
1228 </ul>
1229 </div>
1230 <?php
1231 }
1232 ?>
1233 </div>
1234 <?php
1235 }
1236 }
1237
1238 public function render_new_field(){
1239
1240 if ( ! empty($this->_acf_groups) )
1241 {
1242 foreach ($this->_acf_groups as $key => $group)
1243 {
1244 ?>
1245 <optgroup label="<?php _e("ACF", "wp_all_export_plugin"); ?> - <?php echo $group['title']; ?>">
1246 <?php
1247 if ( ! empty($group['fields']))
1248 {
1249 foreach ($group['fields'] as $field)
1250 {
1251 $field_options = esc_html(serialize(array_merge($field, array('group_id' => ((!empty($group['ID'])) ? $group['ID'] : $group['id']) ))));
1252 ?>
1253 <option
1254 value="acf"
1255 label="<?php echo $field['name'];?>"
1256 options="<?php echo $field_options; ?>"><?php echo $field['label'];?></option>
1257 <?php
1258 }
1259 }
1260 ?>
1261 </optgroup>
1262 <?php
1263 }
1264 ?>
1265 </div>
1266 <?php
1267 }
1268 }
1269
1270 public function render_filters(){
1271
1272 if ( ! empty($this->_acf_groups) ){
1273 ?>
1274 <optgroup label="<?php _e("ACF", "wp_all_export_plugin"); ?>">
1275 <?php
1276 foreach ($this->_acf_groups as $key => $group) {
1277 if ( ! empty($group['fields'])){
1278 foreach ($group['fields'] as $field) {
1279 ?>
1280 <option value="<?php echo 'cf_' . $field['name']; ?>"><?php echo $field['label']; ?></option>
1281 <?php
1282 }
1283 }
1284 }
1285 ?>
1286 </optgroup>
1287 <?php
1288 }
1289
1290 }
1291
1292 public static function prepare_import_template( $exportOptions, &$templateOptions, &$acf_list, $element_name, $field_options, $parent_delimiter = false)
1293 {
1294 $field_tpl_key = $element_name . '[1]';
1295
1296 $acf_list[] = '[' . $field_options['name'] . '] ' . $field_options['label'];
1297
1298 $field_template = false;
1299
1300 $is_multiple_field_value = false;
1301
1302 $is_xml_template = $exportOptions['export_to'] == 'xml';
1303
1304 $xpath_separator = $is_xml_template ? '/' : '_';
1305
1306 $implode_delimiter = XmlExportEngine::$implode;
1307
1308 if (!empty($parent_delimiter)){
1309 $implode_delimiter = $parent_delimiter == '|' ? ',' : '|';
1310 }
1311
1312 switch ($field_options['type'])
1313 {
1314 case 'text':
1315 case 'textarea':
1316 case 'number':
1317 case 'email':
1318 case 'password':
1319 case 'url':
1320 case 'oembed':
1321 case 'wysiwyg':
1322 case 'image':
1323 case 'file':
1324 case 'date_picker':
1325 case 'color_picker':
1326 case 'acf_cf7':
1327 case 'gravity_forms_field':
1328 case 'limiter':
1329 case 'wp_wysiwyg':
1330 case 'date_time_picker':
1331 $field_template = '{' . $field_tpl_key . '}';
1332 break;
1333 case 'gallery':
1334
1335 $field_template = array(
1336 'search_in_media' => 1,
1337 'delim' => $implode_delimiter,
1338 'gallery' => '{' . $field_tpl_key . '}'
1339 );
1340
1341 break;
1342 case 'relationship':
1343
1344 $field_template = array(
1345 'delim' => $implode_delimiter,
1346 'value' => '{' . $field_tpl_key . '}'
1347 );
1348
1349 break;
1350 case 'post_object':
1351 case 'page_link':
1352 case 'user':
1353
1354 if ($is_xml_template)
1355 {
1356 $field_template = '{' . $field_tpl_key . '}';
1357 }
1358 else
1359 {
1360 $field_tpl_key = str_replace("[1]", "", $field_tpl_key);
1361
1362 if ($field_options['multiple'])
1363 {
1364 if ($implode_delimiter == "|")
1365 $field_template = '[str_replace("|", ",",{' . $field_tpl_key . '[1]})]';
1366 else
1367 $field_template = '{' . $field_tpl_key . '[1]}';
1368 }
1369 else
1370 {
1371 $field_template = '{' . $field_tpl_key . '[1]}';
1372 }
1373 }
1374
1375 break;
1376 case 'select':
1377 case 'checkbox':
1378
1379 $templateOptions['is_multiple_field_value'][$field_options['key']] = "no";
1380
1381 if ($is_xml_template)
1382 {
1383 if ($implode_delimiter == "|")
1384 $field_template = '[str_replace("|", ",",{' . $field_tpl_key . '})]';
1385 else
1386 $field_template = '{' . $field_tpl_key . '}';
1387 }
1388 else
1389 {
1390 $field_tpl_key = str_replace("[1]", "", $field_tpl_key);
1391
1392 if ($implode_delimiter == "|")
1393 $field_template = '[str_replace("|", ",",{' . $field_tpl_key . '[1]})]';
1394 else
1395 $field_template = '{' . $field_tpl_key . '[1]}';
1396 }
1397
1398 break;
1399 case 'radio':
1400 case 'true_false':
1401
1402 $templateOptions['is_multiple_field_value'][$field_options['key']] = "no";
1403
1404 $field_template = '{' . $field_tpl_key . '}';
1405
1406 break;
1407 case 'location-field':
1408 case 'google_map':
1409
1410 if ( ! $is_xml_template) $field_tpl_key = str_replace("[1]", "", $field_tpl_key);
1411
1412 $field_template = array(
1413 'address' => '{' . $field_tpl_key . $xpath_separator . 'address[1]}',
1414 'address_geocode' => 'address_no_key',
1415 'address_google_developers_api_key' => '',
1416 'address_google_for_work_client_id' => '',
1417 'address_google_for_work_digital_signature' => '',
1418 'lat' => '{' . $field_tpl_key . $xpath_separator . 'lat[1]}',
1419 'lng' => '{' . $field_tpl_key . $xpath_separator . 'lng[1]}'
1420 );
1421
1422 break;
1423 case 'paypal_item':
1424
1425 if ( ! $is_xml_template) $field_tpl_key = str_replace("[1]", "", $field_tpl_key);
1426
1427 $field_template = array(
1428 'item_name' => '{' . $field_tpl_key . $xpath_separator . 'item_name[1]}',
1429 'item_description' => '{' . $field_tpl_key . $xpath_separator . 'item_description[1]}',
1430 'price' => '{' . $field_tpl_key . $xpath_separator . 'price[1]}'
1431 );
1432
1433 break;
1434 case 'link':
1435
1436 if ( ! $is_xml_template) $field_tpl_key = str_replace("[1]", "", $field_tpl_key);
1437
1438 $field_template = array(
1439 'title' => '{' . $field_tpl_key . $xpath_separator . 'title[1]}',
1440 'url' => '{' . $field_tpl_key . $xpath_separator . 'url[1]}',
1441 'target' => '{' . $field_tpl_key . $xpath_separator . 'target[1]}'
1442 );
1443
1444 break;
1445 case 'taxonomy':
1446
1447 $taxonomy_options = array();
1448
1449 $single_term = new stdClass;
1450 $single_term->item_id = 1;
1451 $single_term->parent_id = NULL;
1452 $single_term->xpath = $is_xml_template ? '{' . $field_tpl_key . '/term[1]}' : '{' . $field_tpl_key . '}';
1453 $single_term->assign = false;
1454
1455 if ($implode_delimiter == "|"){
1456 $single_term->xpath = '[str_replace("|", ",", '. $single_term->xpath .')]';
1457 }
1458
1459 $taxonomy_options[] = $single_term;
1460
1461 $templateOptions['is_multiple_field_value'][$field_options['key']] = "no";
1462
1463 $field_template = json_encode($taxonomy_options);
1464
1465 break;
1466
1467 case 'clone':
1468
1469 if (!empty($field_options['clone'])) {
1470 $sub_fields = array();
1471 foreach ($field_options['clone'] as $sub_field_key) {
1472 if (strpos($sub_field_key, 'group_') === 0) {
1473 $acf_groups = get_posts(array(
1474 'posts_per_page' => 1,
1475 'post_type' => 'acf-field-group',
1476 'name' => $sub_field_key,
1477 'post_status' => 'publish'
1478 ));
1479 if (!empty($acf_groups)) {
1480 foreach ($acf_groups as $acf_group) {
1481 $sub_fields = get_posts(array(
1482 'posts_per_page' => -1,
1483 'post_type' => 'acf-field',
1484 'post_parent' => $acf_group->ID,
1485 'post_status' => 'publish',
1486 'orderby' => 'menu_order',
1487 'order' => 'ASC'
1488 ));
1489 }
1490 }
1491 }
1492 else {
1493 $args = array(
1494 'name' => $sub_field_key,
1495 'post_type' => 'acf-field',
1496 'post_status' => 'publish',
1497 'posts_per_page' => 1
1498 );
1499 $my_posts = get_posts($args);
1500 if ($my_posts) {
1501 $sub_fields[] = $my_posts[0];
1502 }
1503 }
1504 }
1505 if ( ! empty($sub_fields) ){
1506
1507 foreach ($sub_fields as $n => $sub_field){
1508
1509 $sub_field_options = unserialize($sub_field->post_content);
1510 $sub_field_options['label'] = $sub_field->post_title;
1511 $sub_field_options['name'] = $sub_field->post_excerpt;
1512 $sub_field_options['ID'] = $sub_field->ID;
1513 $sub_field_options['key'] = $sub_field->post_name;
1514
1515 $sub_field_tpl_key = $is_xml_template ? $sub_field->post_excerpt : $element_name . '_' . strtolower($sub_field->post_excerpt);
1516 $field_template[$sub_field->post_name] = self::prepare_import_template( $exportOptions, $templateOptions, $acf_list, $sub_field_tpl_key, $sub_field_options );
1517 }
1518 }
1519 }
1520
1521 break;
1522
1523 case 'repeater':
1524
1525 if ($is_xml_template)
1526 {
1527 $field_template = array(
1528 'is_variable' => 'yes',
1529 'foreach' => '{' . $field_tpl_key . '/row}',
1530 'rows' => array()
1531 );
1532 }
1533 else
1534 {
1535 $field_template = array(
1536 'is_variable' => 'csv',
1537 'separator' => $implode_delimiter,
1538 'rows' => array()
1539 );
1540 }
1541
1542 if (class_exists('acf')){
1543
1544 global $acf;
1545
1546 if ($acf and version_compare($acf->settings['version'], '5.0.0') >= 0){
1547
1548 $sub_fields = get_posts(array('posts_per_page' => -1, 'post_type' => 'acf-field', 'post_parent' => (( ! empty($field_options['id'])) ? $field_options['id'] : $field_options['ID']), 'post_status' => 'publish'));
1549
1550 if ( ! empty($sub_fields) ){
1551
1552 foreach ($sub_fields as $n => $sub_field){
1553
1554 $sub_field_options = unserialize($sub_field->post_content);
1555 $sub_field_options['label'] = $sub_field->post_title;
1556 $sub_field_options['name'] = $sub_field->post_excerpt;
1557 $sub_field_options['ID'] = $sub_field->ID;
1558 $sub_field_options['key'] = $sub_field->post_name;
1559
1560 $sub_field_tpl_key = $is_xml_template ? $sub_field->post_excerpt : $element_name . '_' . strtolower($sub_field->post_excerpt);
1561 $field_template['rows']['1'][$sub_field->post_name] = self::prepare_import_template( $exportOptions, $templateOptions, $acf_list, $sub_field_tpl_key, $sub_field_options, $implode_delimiter );
1562
1563 $templateOptions['is_multiple_field_value'][$field_options['key']]['rows']['1'][$sub_field->post_name] = "no";
1564
1565 }
1566 }
1567
1568 }
1569 else
1570 {
1571 if ( ! empty($field['sub_fields']))
1572 {
1573 foreach ($field['sub_fields'] as $n => $sub_field)
1574 {
1575 $sub_field_tpl_key = $is_xml_template ? $sub_field['name'] : $element_name . '_' . strtolower($sub_field['name']);
1576
1577 $field_template['rows']['1'][$sub_field['key']] = self::prepare_import_template( $exportOptions, $templateOptions, $acf_list, $sub_field_tpl_key, $sub_field, $implode_delimiter );
1578
1579 $templateOptions['is_multiple_field_value'][$field_options['key']]['rows']['1'][$sub_field['key']] = "no";
1580 }
1581 }
1582 }
1583 }
1584
1585 break;
1586
1587 case 'flexible_content':
1588
1589 $field_template = array(
1590 'layouts' => array()
1591 );
1592
1593 if (class_exists('acf')){
1594
1595 global $acf;
1596
1597 if ($acf and version_compare($acf->settings['version'], '5.0.0') >= 0){
1598
1599 $sub_fields = get_posts(array('posts_per_page' => -1, 'post_type' => 'acf-field', 'post_parent' => (( ! empty($field_options['id'])) ? $field_options['id'] : $field_options['ID']), 'post_status' => 'publish'));
1600
1601 if ( ! empty($field_options['layouts']))
1602 {
1603 foreach ($field_options['layouts'] as $key => $layout)
1604 {
1605 if ( ! empty($sub_fields) )
1606 {
1607 $field_template['layouts'][(string)($key + 1)]['acf_fc_layout'] = $layout['name'];
1608
1609 foreach ($sub_fields as $n => $sub_field)
1610 {
1611 $sub_field_options = unserialize($sub_field->post_content);
1612
1613 if ($sub_field_options['parent_layout'] == $layout['key'])
1614 {
1615 $sub_field_options['label'] = $sub_field->post_title;
1616 $sub_field_options['name'] = $sub_field->post_excerpt;
1617 $sub_field_options['ID'] = $sub_field->ID;
1618 $sub_field_options['key'] = $sub_field->post_name;
1619
1620 if ($is_xml_template)
1621 {
1622 $sub_field_tpl_key = $field_tpl_key . '/' . $layout['name'] . '_' . $key . '[1]/' . $sub_field->post_excerpt;
1623 }
1624 else
1625 {
1626 $sub_field_tpl_key = $element_name . '_' . $layout['name'] . '_' . $key . '_' . strtolower($sub_field->post_excerpt);
1627 }
1628
1629 $field_template['layouts'][(string)($key + 1)][$sub_field->post_name] = self::prepare_import_template( $exportOptions, $templateOptions, $acf_list, $sub_field_tpl_key, $sub_field_options );
1630
1631 $templateOptions['is_multiple_field_value'][$field_options['key']]['layouts'][(string)($key + 1)][$sub_field->post_name] = "no";
1632 }
1633 }
1634 }
1635 }
1636 }
1637 }
1638 else
1639 {
1640 if ( ! empty($field['layouts']))
1641 {
1642 foreach ($field['layouts'] as $key => $layout)
1643 {
1644 if ( ! empty($layout['sub_fields']))
1645 {
1646 $field_template['layouts'][(string)($key + 1)]['acf_fc_layout'] = $layout['key'];
1647
1648 foreach ($layout['sub_fields'] as $n => $sub_field){
1649
1650 if ($is_xml_template)
1651 {
1652 $sub_field_tpl_key = $field_tpl_key . '/' . $layout['name'] . '_' . $key . '[1]/' . $sub_field['name'];
1653 }
1654 else
1655 {
1656 $sub_field_tpl_key = $element_name . '_' . $layout['name'] . '_' . $key . '_' . strtolower($sub_field['name']);
1657 }
1658
1659 $field_template['layouts'][(string)($key + 1)][$sub_field['key']] = self::prepare_import_template( $exportOptions, $templateOptions, $acf_list, $sub_field_tpl_key, $sub_field );
1660
1661 $templateOptions['is_multiple_field_value'][$field_options['key']]['layouts'][(string)($key + 1)][$sub_field['key']] = "no";
1662 }
1663 }
1664 }
1665 }
1666 }
1667 }
1668
1669 break;
1670
1671 default:
1672
1673 $field_template = '{' . $field_tpl_key . '}';
1674
1675 break;
1676
1677 }
1678 return $field_template;
1679 }
1680
1681 public function auto_generate_export_fields( & $fields ){
1682
1683 if ( ! empty($this->_acf_groups) )
1684 {
1685 foreach ($this->_acf_groups as $key => $group)
1686 {
1687 if ( ! empty($group['fields']))
1688 {
1689 foreach ($group['fields'] as $field)
1690 {
1691 $fields['ids'][] = 1;
1692 $fields['cc_label'][] = $field['name'];
1693 $fields['cc_php'][] = 0;
1694 $fields['cc_code'][] = '';
1695 $fields['cc_sql'][] = '';
1696 $fields['cc_settings'][] = '';
1697 $fields['cc_type'][] = 'acf';
1698 $fields['cc_options'][] = serialize(array_merge($field, array('group_id' => ((!empty($group['ID'])) ? $group['ID'] : $group['id']) )));
1699 $fields['cc_value'][] = $field['name'];
1700 $fields['cc_name'][] = $field['label'];
1701 }
1702 }
1703 }
1704 }
1705 }
1706
1707 /**
1708 * __get function.
1709 *
1710 * @access public
1711 * @param mixed $key
1712 * @return mixed
1713 */
1714 public function __get( $key ) {
1715 return $this->get( $key );
1716 }
1717
1718 /**
1719 * Get a session variable
1720 *
1721 * @param string $key
1722 * @param mixed $default used if the session variable isn't set
1723 * @return mixed value of session variable
1724 */
1725 public function get( $key, $default = null ) {
1726 return isset( $this->{$key} ) ? $this->{$key} : $default;
1727 }
1728
1729 public static function acf_get_row() {
1730
1731 global $acf;
1732
1733 if ($acf and version_compare($acf->settings['version'], '5.3.6.0') >= 0)
1734 {
1735 return acf_get_loop('active');
1736 }
1737 // check and return row
1738 elseif( !empty($GLOBALS['acf_field']) ) {
1739
1740 return end( $GLOBALS['acf_field'] );
1741
1742 }
1743
1744 // return
1745 return false;
1746
1747 }
1748 }
1749 }
1750