PluginProbe ʕ •ᴥ•ʔ
JetFormBuilder — Dynamic Blocks Form Builder / 3.6.0
JetFormBuilder — Dynamic Blocks Form Builder v3.6.0
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 1.1.6 1.1.7 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.1.0 2.1.1 2.1.10 2.1.11 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 3.0.0 3.0.0.1 3.0.0.2 3.0.0.3 3.0.1 3.0.1.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.0.1 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.3.2 3.3.3 3.3.3.1 3.3.4 3.3.4.1 3.3.4.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.5.1 3.4.5.2 3.4.6 3.4.7 3.4.7.1 3.5.0 3.5.1 3.5.1.1 3.5.1.2 3.5.2 3.5.2.1 3.5.3 3.5.4 3.5.5 3.5.6 3.5.6.1 3.5.6.2 3.5.6.3 3.6.0
jetformbuilder / includes / request / request-tools.php
jetformbuilder / includes / request Last commit date
exceptions 2 years ago form-request-router.php 2 years ago request-handler.php 2 years ago request-router.php 2 years ago request-tools.php 2 years ago
request-tools.php
189 lines
1 <?php
2
3
4 namespace Jet_Form_Builder\Request;
5
6 use Jet_Form_Builder\Classes\Resources\File;
7 use Jet_Form_Builder\Classes\Resources\File_Tools;
8 use Jet_Form_Builder\Classes\Resources\Media_Block_Value;
9 use Jet_Form_Builder\Classes\Resources\Sanitize_File_Exception;
10 use Jet_Form_Builder\Classes\Resources\File_Collection;
11 use Jet_Form_Builder\Classes\Resources\Uploaded_Collection;
12 use Jet_Form_Builder\Classes\Resources\Uploaded_File;
13 use Jet_Form_Builder\Classes\Tools;
14 use Jet_Form_Builder\Live_Form;
15
16 // If this file is called directly, abort.
17 if ( ! defined( 'WPINC' ) ) {
18 die;
19 }
20
21 class Request_Tools {
22
23 const FILE_PROPERTIES = array( 'name', 'size', 'error', 'type', 'tmp_name' );
24
25 public static function get_files( array $initial ): array {
26 $response = array();
27
28 foreach ( $initial as $fields_name => $files ) {
29 $is_collection = isset( $files['name'] ) && is_array( $files['name'] );
30 $is_repeater = false;
31
32 if ( $is_collection ) {
33 // check the first item
34 foreach ( $files['name'] as $key => $first_item ) {
35 $is_repeater = is_numeric( $key ) && is_array( $first_item );
36 break;
37 }
38 }
39
40 if ( $is_repeater ) {
41 $response[ $fields_name ] = static::get_repeater_files( $files );
42
43 continue;
44 }
45
46 if ( ! $is_collection ) {
47 try {
48 $file = new File( $files );
49 } catch ( Sanitize_File_Exception $exception ) {
50 continue;
51 }
52 $response[ $fields_name ] = $file;
53
54 continue;
55 }
56
57 $count_collection = count( $files['name'] );
58 $collection = array();
59
60 for ( $index = 0; $index < $count_collection; $index++ ) {
61 $file = array();
62
63 foreach ( self::FILE_PROPERTIES as $property ) {
64 $file[ $property ] = $files[ $property ][ $index ];
65 }
66
67 $collection[ $index ] = $file;
68 }
69
70 $response[ $fields_name ] = ( new File_Collection() )->push_files( $collection );
71 }
72
73 return $response;
74 }
75
76 public static function get_request(): array {
77 // phpcs:ignore WordPress.Security.NonceVerification.Missing
78 $request = Tools::sanitize_recursive( wp_unslash( $_POST ) );
79
80 /**
81 * We need to be sure, that repeater rows starts from 0 index
82 * and they have correct incrementing with order
83 */
84 foreach ( $request as &$value ) {
85 if ( ! wp_is_numeric_array( $value ) ) {
86 continue;
87 }
88 $value = array_values( $value );
89 }
90
91 return $request;
92 }
93
94 public static function get_repeater_files( array $files ): array {
95 $indexes = array_keys( $files['name'] );
96 $repeater = array();
97
98 foreach ( $indexes as $current ) {
99 $row = array();
100
101 foreach ( self::FILE_PROPERTIES as $property ) {
102 foreach ( $files[ $property ][ $current ] as $field_name => $values ) {
103 if ( ! isset( $row[ $field_name ] ) ) {
104 $row[ $field_name ] = array();
105 }
106
107 if ( is_array( $values ) ) {
108 $count_values = count( $values );
109
110 for ( $index_value = 0; $index_value < $count_values; $index_value++ ) {
111 if ( ! isset( $row[ $field_name ][ $index_value ] ) ) {
112 $row[ $field_name ][ $index_value ] = array();
113 }
114 $row[ $field_name ][ $index_value ][ $property ] = $values[ $index_value ];
115 }
116 } else {
117 $row[ $field_name ][ $property ] = $values;
118 }
119 }
120 }
121 unset( $field_name, $values );
122
123 foreach ( $row as $field_name => $values ) {
124 if ( isset( $values[0] ) ) {
125 $row[ $field_name ] = ( new File_Collection() )->push_files( $values );
126 } else {
127 try {
128 $file = new File( $values );
129 } catch ( Sanitize_File_Exception $exception ) {
130 unset( $row[ $field_name ] );
131 continue;
132 }
133 $row[ $field_name ] = $file;
134 }
135 }
136
137 $repeater[] = $row;
138 }
139
140 return $repeater;
141 }
142
143
144 /**
145 * @param string $field_name
146 *
147 * @return false|Media_Block_Value
148 */
149 public static function get_file( string $field_name ) {
150 $file = jet_fb_context()->get_file( $field_name );
151
152 if ( false !== $file ) {
153 return $file;
154 }
155
156 $file_data = jet_fb_context()->get_value( $field_name );
157
158 // parse value in json format (both)
159 if ( is_string( $file_data ) && ! is_numeric( $file_data ) ) {
160 $decoded = Tools::decode_json( $file_data );
161
162 if ( ! is_null( $decoded ) ) {
163 $file_data = $decoded;
164 }
165 }
166
167 if ( is_string( $file_data ) ) {
168 $file_data = explode( ',', $file_data );
169 }
170
171 if ( ! is_array( $file_data ) ) {
172 return false;
173 }
174
175 if ( empty( $file_data[0] ) ) {
176 return File_Tools::create_uploaded_file( $file_data );
177 }
178
179 $collection = array();
180
181 foreach ( $file_data as $item ) {
182 $collection[] = File_Tools::create_uploaded_file( $item );
183 }
184
185 return new Uploaded_Collection( $collection );
186 }
187
188 }
189