PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.12
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.12
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
← All changes | classes/helpers/FrmCSVExportHelper.php +63 -37 6.36.12 View file →
@@ -5,89 +5,89 @@
5 5
6 6 class FrmCSVExportHelper {
7 7
8 8 /**
9 - * @var string $separator
9 + * @var string
10 10 */
11 11 protected static $separator = ', ';
12 12
13 13 /**
14 - * @var string $column_separator
14 + * @var string
15 15 */
16 16 protected static $column_separator = ',';
17 17
18 18 /**
19 - * @var string $line_break
19 + * @var string
20 20 */
21 21 protected static $line_break = 'return';
22 22
23 23 /**
24 - * @var string $charset
24 + * @var string
25 25 */
26 26 protected static $charset = 'UTF-8';
27 27
28 28 /**
29 - * @var string $to_encoding
29 + * @var string
30 30 */
31 31 protected static $to_encoding = 'UTF-8';
32 32
33 33 /**
34 - * @var string $wp_date_format
34 + * @var string
35 35 */
36 36 protected static $wp_date_format = 'Y-m-d H:i:s';
37 37
38 38 /**
39 - * @var int $comment_count
39 + * @var int
40 40 */
41 41 protected static $comment_count = 0;
42 42
43 43 /**
44 - * @var int $form_id
44 + * @var int
45 45 */
46 46 protected static $form_id = 0;
47 47
48 48 /**
49 - * @var array $headings
49 + * @var array
50 50 */
51 51 protected static $headings = array();
52 52
53 53 /**
54 - * @var array $fields
54 + * @var array
55 55 */
56 56 protected static $fields = array();
57 57
58 58 /**
59 - * @var stdClass|null $entry
59 + * @var stdClass|null
60 60 */
61 61 protected static $entry;
62 62
63 63 /**
64 - * @var bool|null $has_parent_id
64 + * @var bool|null
65 65 */
66 66 protected static $has_parent_id;
67 67
68 68 /**
69 - * @var array|null $fields_by_repeater_id
69 + * @var array|null
70 70 */
71 71 protected static $fields_by_repeater_id;
72 72
73 73 /**
74 - * @var string $mode either 'echo' or 'file' are supported.
74 + * @var string either 'echo' or 'file' are supported.
75 75 */
76 76 protected static $mode = 'echo';
77 77
78 78 /**
79 - * @var resource|null $fp used to write a CSV file in file mode.
79 + * @var resource|null used to write a CSV file in file mode.
80 80 */
81 81 protected static $fp;
82 82
83 83 /**
84 - * @var string $context the context of the CSV being generated. Possible values include 'email' when used as an email attachment, or 'default'.
84 + * @var string the context of the CSV being generated. Possible values include 'email' when used as an email attachment, or 'default'.
85 85 */
86 86 protected static $context = 'default';
87 87
88 88 /**
89 - * @var array $meta
89 + * @var array
90 90 */
91 91 protected static $meta = array();
92 92
93 93 public static function csv_format_options() {
@@ -98,9 +98,9 @@
98 98 }
99 99
100 100 /**
101 101 * @param array $atts
102 - * @return string|false|void returns a string file path or false if $atts['mode'] is set to 'file'.
102 + * @return false|string|null returns a string file path or false if $atts['mode'] is set to 'file'.
103 103 */
104 104 public static function generate_csv( $atts ) {
105 105 global $frm_vars;
106 106 $frm_vars['prevent_caching'] = true;
@@ -114,9 +114,8 @@
114 114 self::set_class_parameters();
115 115 self::set_has_parent_id( $atts['form'] );
116 116
117 117 $filename = self::generate_csv_filename( $atts['form'] );
118 - unset( $atts['form'], $atts['form_cols'] );
119 118
120 119 if ( 'file' === self::$mode ) {
121 120 $filepath = get_temp_dir() . $filename;
122 121 self::$fp = @fopen( $filepath, 'w' );
@@ -150,15 +149,40 @@
150 149 while ( $next_set = array_splice( $atts['entry_ids'], 0, 20 ) ) {
151 150 self::prepare_next_csv_rows( $next_set );
152 151 }
153 152
153 + self::after_generate_csv( $atts );
154 +
155 + unset( $atts['form'], $atts['form_cols'] );
156 +
154 157 if ( 'file' === self::$mode ) {
155 158 fclose( self::$fp );
156 159 return $filepath;
157 160 }
161 +
162 + return null;
158 163 }
159 164
160 165 /**
166 + * @since 6.8.4
167 + *
168 + * @param array $atts
169 + * @return void
170 + */
171 + private static function after_generate_csv( $atts ) {
172 + /**
173 + * @since 6.8.4
174 + *
175 + * @param array $atts {
176 + * @type object $form
177 + * @type array $entry_ids
178 + * @type array $form_cols
179 + * }
180 + */
181 + do_action( 'frm_after_generate_csv', $atts );
182 + }
183 +
184 + /**
161 185 * @since 5.0.16
162 186 *
163 187 * @param stdClass $form
164 188 * @return string
@@ -239,9 +263,10 @@
239 263 }
240 264
241 265 private static function field_headings( $col ) {
242 266 $field_type_obj = FrmFieldFactory::get_field_factory( $col );
243 - if ( ! empty( $field_type_obj->is_combo_field ) ) { // This is combo field.
267 + if ( ! empty( $field_type_obj->is_combo_field ) ) {
268 + // This is combo field.
244 269 return $field_type_obj->get_export_headings();
245 270 }
246 271
247 272 $field_headings = array();
@@ -268,10 +293,11 @@
268 293 $repeater_ids = array();
269 294
270 295 foreach ( self::$fields as $col ) {
271 296 if ( self::is_the_child_of_a_repeater( $col ) ) {
272 - $repeater_id = $col->field_options['in_section'];
273 - $headings[ 'repeater' . $repeater_id ] = array(); // set a placeholder to maintain order for repeater fields
297 + $repeater_id = $col->field_options['in_section'];
298 + // Set a placeholder to maintain order for repeater fields.
299 + $headings[ 'repeater' . $repeater_id ] = array();
274 300
275 301 if ( ! isset( $fields_by_repeater_id[ $repeater_id ] ) ) {
276 302 $fields_by_repeater_id[ $repeater_id ] = array();
277 303 $repeater_ids[] = $repeater_id;
@@ -311,9 +337,9 @@
311 337 foreach ( $fields_by_repeater_id[ $repeater_id ] as $col ) {
312 338 $repeater_headings += self::field_headings( $col );
313 339 }
314 340
315 - for ( $i = 0; $i < $max[ $repeater_id ]; $i ++ ) {
341 + for ( $i = 0; $i < $max[ $repeater_id ]; $i++ ) {
316 342 foreach ( $repeater_headings as $repeater_key => $repeater_name ) {
317 343 $flat[ $repeater_key . '[' . $i . ']' ] = $repeater_name;
318 344 }
319 345 }
@@ -327,12 +353,12 @@
327 353 unset( $key, $heading, $max, $repeater_headings, $repeater_id, $fields_by_repeater_id );
328 354
329 355 $headings = $flat;
330 356 unset( $flat );
331 - }
357 + }//end if
332 358
333 359 if ( self::$comment_count ) {
334 - for ( $i = 0; $i < self::$comment_count; $i ++ ) {
360 + for ( $i = 0; $i < self::$comment_count; $i++ ) {
335 361 $headings[ 'comment' . $i ] = __( 'Comment', 'formidable' );
336 362 $headings[ 'comment_user_id' . $i ] = __( 'Comment User', 'formidable' );
337 363 $headings[ 'comment_created_at' . $i ] = __( 'Comment Date', 'formidable' );
338 364 }
@@ -342,9 +368,9 @@
342 368 $headings['created_at'] = __( 'Timestamp', 'formidable' );
343 369 $headings['updated_at'] = __( 'Last Updated', 'formidable' );
344 370 $headings['user_id'] = __( 'Created By', 'formidable' );
345 371 $headings['updated_by'] = __( 'Updated By', 'formidable' );
346 - $headings['is_draft'] = __( 'Draft', 'formidable' );
372 + $headings['is_draft'] = __( 'Entry Status', 'formidable' );
347 373 $headings['ip'] = __( 'IP', 'formidable' );
348 374 $headings['id'] = __( 'ID', 'formidable' );
349 375 $headings['item_key'] = __( 'Key', 'formidable' );
350 376 if ( self::has_parent_id() ) {
@@ -385,9 +411,9 @@
385 411 'parent_item_id' => $next_set,
386 412 );
387 413 $entries = FrmEntry::getAll( $where, ' ORDER BY parent_item_id DESC', '', true, false );
388 414
389 - foreach ( $entries as $k => $entry ) {
415 + foreach ( $entries as $entry ) {
390 416 self::$entry = $entry;
391 417 unset( $entry );
392 418
393 419 if ( self::$entry->form_id !== self::$form_id ) {
@@ -433,19 +459,19 @@
433 459 if ( ! isset( $entries[ self::$entry->parent_item_id ]->metas[ $meta_id ] ) ) {
434 460 $entries[ self::$entry->parent_item_id ]->metas[ $meta_id ] = array();
435 461 } elseif ( ! is_array( $entries[ self::$entry->parent_item_id ]->metas[ $meta_id ] ) ) {
436 462 // if the data is here, it should be an array but if this field has collected data
437 - // both while inside and outside of the repeating section, it's possible this is a string
463 + // both while inside and outside of the repeating section, it's possible this is a string.
438 464 $entries[ self::$entry->parent_item_id ]->metas[ $meta_id ] = (array) $entries[ self::$entry->parent_item_id ]->metas[ $meta_id ];
439 465 }
440 466
441 - //add the repeated values
467 + // Add the repeated values.
442 468 $entries[ self::$entry->parent_item_id ]->metas[ $meta_id ][] = $meta_value;
443 - }
469 + }//end foreach
444 470
445 471 self::$entry->metas = self::fill_missing_repeater_metas( self::$entry->metas, $entries );
446 472 $entries[ self::$entry->parent_item_id ]->metas += self::$entry->metas;
447 - }
473 + }//end if
448 474
449 475 // add the embedded form id
450 476 if ( ! isset( $entries[ self::$entry->parent_item_id ]->embedded_fields ) ) {
451 477 $entries[ self::$entry->parent_item_id ]->embedded_fields = array();
@@ -536,9 +562,9 @@
536 562
537 563 $row[ $col->id ] = $field_value;
538 564
539 565 unset( $col, $field_value );
540 - }
566 + }//end foreach
541 567 }
542 568
543 569 /**
544 570 * @since 5.0.06
@@ -556,9 +582,9 @@
556 582 'post_id' => self::$entry->post_id,
557 583 'show_icon' => false,
558 584 'entry_id' => self::$entry->id,
559 585 'sep' => self::$separator,
560 - 'embedded_field_id' => ( isset( self::$entry->embedded_fields ) && isset( self::$entry->embedded_fields[ self::$entry->id ] ) ) ? 'form' . self::$entry->embedded_fields[ self::$entry->id ] : 0,
586 + 'embedded_field_id' => isset( self::$entry->embedded_fields ) && isset( self::$entry->embedded_fields[ self::$entry->id ] ) ? 'form' . self::$entry->embedded_fields[ self::$entry->id ] : 0,
561 587 )
562 588 );
563 589 }
564 590
@@ -592,9 +618,9 @@
592 618 $row['created_at'] = FrmAppHelper::get_formatted_time( self::$entry->created_at, self::$wp_date_format, ' ' );
593 619 $row['updated_at'] = FrmAppHelper::get_formatted_time( self::$entry->updated_at, self::$wp_date_format, ' ' );
594 620 $row['user_id'] = self::$entry->user_id;
595 621 $row['updated_by'] = self::$entry->updated_by;
596 - $row['is_draft'] = self::$entry->is_draft ? '1' : '0';
622 + $row['is_draft'] = self::$entry->is_draft;
597 623 $row['ip'] = self::$entry->ip;
598 624 $row['id'] = self::$entry->id;
599 625 $row['item_key'] = self::$entry->item_key;
600 626 if ( self::has_parent_id() ) {
@@ -613,9 +639,9 @@
613 639 $row = '';
614 640 // array indexed data is not at $rows[ $k ]
615 641 if ( $k[ strlen( $k ) - 1 ] === ']' ) {
616 642 $start = strrpos( $k, '[' );
617 - $key = substr( $k, 0, $start ++ );
643 + $key = substr( $k, 0, $start++ );
618 644 $index = substr( $k, $start, strlen( $k ) - 1 - $start );
619 645
620 646 if ( isset( $rows[ $key ] ) && isset( $rows[ $key ][ $index ] ) ) {
621 647 $row = $rows[ $key ][ $index ];
@@ -642,9 +668,9 @@
642 668 }
643 669 $sep = self::$column_separator;
644 670
645 671 unset( $k, $row );
646 - }
672 + }//end foreach
647 673 if ( $echo ) {
648 674 echo "\n";
649 675 } else {
650 676 fwrite( self::$fp, "\n" );
@@ -661,9 +687,9 @@
661 687 switch ( self::$to_encoding ) {
662 688 case 'macintosh':
663 689 // this map was derived from the differences between the MacRoman and UTF-8 Charsets
664 690 // Reference:
665 - // - http://www.alanwood.net/demos/macroman.html
691 + // http://www.alanwood.net/demos/macroman.html.
666 692 $convmap = array( 256, 304, 0, 0xffff, 306, 337, 0, 0xffff, 340, 375, 0, 0xffff, 377, 401, 0, 0xffff, 403, 709, 0, 0xffff, 712, 727, 0, 0xffff, 734, 936, 0, 0xffff, 938, 959, 0, 0xffff, 961, 8210, 0, 0xffff, 8213, 8215, 0, 0xffff, 8219, 8219, 0, 0xffff, 8227, 8229, 0, 0xffff, 8231, 8239, 0, 0xffff, 8241, 8248, 0, 0xffff, 8251, 8259, 0, 0xffff, 8261, 8363, 0, 0xffff, 8365, 8481, 0, 0xffff, 8483, 8705, 0, 0xffff, 8707, 8709, 0, 0xffff, 8711, 8718, 0, 0xffff, 8720, 8720, 0, 0xffff, 8722, 8729, 0, 0xffff, 8731, 8733, 0, 0xffff, 8735, 8746, 0, 0xffff, 8748, 8775, 0, 0xffff, 8777, 8799, 0, 0xffff, 8801, 8803, 0, 0xffff, 8806, 9673, 0, 0xffff, 9675, 63742, 0, 0xffff, 63744, 64256, 0, 0xffff );
667 693 break;
668 694 case 'ISO-8859-1':
669 695 $convmap = array( 256, 10000, 0, 0xffff );