PluginProbe
JetFormBuilder — Dynamic Blocks Form Builder / 3.0.5
JetFormBuilder — Dynamic Blocks Form Builder v3.0.5
3.6.5.2 3.6.5.1 3.6.5 3.6.4.2 3.6.4.1 3.6.4 3.6.3.1 3.6.3 3.6.2.2 3.6.2.1 3.6.2 3.6.1.1 3.6.1 3.6.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 All 130 releases
jetformbuilder / includes / request / request-tools.php

request-tools.php in JetFormBuilder — Dynamic Blocks Form Builder 3.0.5, at includes/request/request-tools.php

158 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3
4 namespace Jet_Form_Builder\Request;
5
6
7 use Jet_Form_Builder\Classes\Resources\File;
8 use Jet_Form_Builder\Classes\Resources\File_Tools;
9 use Jet_Form_Builder\Classes\Resources\Media_Block_Value;
10 use Jet_Form_Builder\Classes\Resources\Sanitize_File_Exception;
11 use Jet_Form_Builder\Classes\Resources\File_Collection;
12 use Jet_Form_Builder\Classes\Resources\Uploaded_Collection;
13 use Jet_Form_Builder\Classes\Resources\Uploaded_File;
14 use Jet_Form_Builder\Classes\Tools;
15
16 class Request_Tools {
17
18 const FILE_PROPERTIES = array( 'name', 'size', 'error', 'type', 'tmp_name' );
19
20 public static function get_files( array $initial ): array {
21 $response = array();
22
23 foreach ( $initial as $fields_name => $files ) {
24 $is_repeater = isset( $files['name'][0] ) && is_array( $files['name'][0] );
25
26 if ( $is_repeater ) {
27 $response[ $fields_name ] = static::get_repeater_files( $files );
28
29 continue;
30 }
31
32 $is_collection = is_array( $files['name'] );
33
34 if ( ! $is_collection ) {
35 try {
36 $file = new File( $files );
37 } catch ( Sanitize_File_Exception $exception ) {
38 continue;
39 }
40 $response[ $fields_name ] = $file;
41
42 continue;
43 }
44
45 $count_collection = count( $files['name'] );
46 $collection = array();
47
48 for ( $index = 0; $index < $count_collection; $index ++ ) {
49 $file = array();
50
51 foreach ( self::FILE_PROPERTIES as $property ) {
52 $file[ $property ] = $files[ $property ][ $index ];
53 }
54
55 $collection[ $index ] = $file;
56 }
57
58 $response[ $fields_name ] = ( new File_Collection() )->push_files( $collection );
59 }
60
61 return $response;
62 }
63
64 public static function get_repeater_files( array $files ): array {
65 $rows = count( $files['name'] );
66 $repeater = array();
67
68 for ( $current = 0; $current < $rows; $current ++ ) {
69 $row = array();
70
71 foreach ( self::FILE_PROPERTIES as $property ) {
72 foreach ( $files[ $property ][ $current ] as $field_name => $values ) {
73 if ( ! isset( $row[ $field_name ] ) ) {
74 $row[ $field_name ] = array();
75 }
76
77 if ( is_array( $values ) ) {
78 $count_values = count( $values );
79
80 for ( $index_value = 0; $index_value < $count_values; $index_value ++ ) {
81 if ( ! isset( $row[ $field_name ][ $index_value ] ) ) {
82 $row[ $field_name ][ $index_value ] = array();
83 }
84 $row[ $field_name ][ $index_value ][ $property ] = $values[ $index_value ];
85 }
86 } else {
87 $row[ $field_name ][ $property ] = $values;
88 }
89 }
90 }
91 unset( $field_name, $values );
92
93 foreach ( $row as $field_name => $values ) {
94 if ( isset( $values[0] ) ) {
95 $row[ $field_name ] = ( new File_Collection() )->push_files( $values );
96 } else {
97 try {
98 $file = new File( $values );
99 } catch ( Sanitize_File_Exception $exception ) {
100 unset( $row[ $field_name ] );
101 continue;
102 }
103 $row[ $field_name ] = $file;
104 }
105 }
106
107 $repeater[ $current ] = $row;
108 }
109
110 return $repeater;
111 }
112
113
114 /**
115 * @param string $field_name
116 *
117 * @return false|Media_Block_Value
118 */
119 public static function get_file( string $field_name ) {
120 $file = jet_fb_request_handler()->get_file( $field_name );
121
122 if ( false !== $file ) {
123 return $file;
124 }
125
126 $file_data = jet_fb_action_handler()->request_data[ $field_name ] ?? false;
127
128 // parse value in json format (both)
129 if ( is_string( $file_data ) && ! is_numeric( $file_data ) ) {
130 $decoded = Tools::decode_json( $file_data );
131
132 if ( ! is_null( $decoded ) ) {
133 $file_data = $decoded;
134 }
135 }
136
137 if ( is_string( $file_data ) ) {
138 $file_data = explode( ',', $file_data );
139 }
140
141 if ( ! is_array( $file_data ) ) {
142 return false;
143 }
144
145 if ( empty( $file_data[0] ) ) {
146 return File_Tools::create_uploaded_file( $file_data );
147 }
148
149 $collection = array();
150
151 foreach ( $file_data as $item ) {
152 $collection[] = File_Tools::create_uploaded_file( $item );
153 }
154
155 return new Uploaded_Collection( $collection );
156 }
157
158 }