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-handler.php

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

207 lines 4.9 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 use Jet_Form_Builder\Actions\Events\Bad_Request\Bad_Request_Event;
7 use Jet_Form_Builder\Blocks\Block_Helper;
8 use Jet_Form_Builder\Blocks\Modules\Fields_Errors\Error_Handler;
9 use Jet_Form_Builder\Classes\Resources\Media_Block_Value;
10 use Jet_Form_Builder\Classes\Security\Wp_Nonce_Tools;
11 use Jet_Form_Builder\Classes\Resources\File;
12 use Jet_Form_Builder\Classes\Resources\File_Collection;
13 use Jet_Form_Builder\Classes\Resources\Sanitize_File_Exception;
14 use Jet_Form_Builder\Classes\Tools;
15 use Jet_Form_Builder\Exceptions\Action_Exception;
16 use Jet_Form_Builder\Exceptions\Request_Exception;
17 use Jet_Form_Builder\Live_Form;
18
19 class Request_Handler {
20
21 public $_fields = array();
22 private $request_types = array();
23 private $request_attrs = array();
24 private $raw_request = array();
25 private $files = array();
26
27 /**
28 * Get submitted form data
29 *
30 * @throws Action_Exception|Request_Exception
31 */
32 public function set_form_data() {
33 $this->set_raw_request( $this->get_raw_request() );
34 $this->set_raw_files( Request_Tools::get_files( $_FILES ) );
35
36 $context = ( new Parser_Context() )
37 ->set_files_context( $this->files )
38 ->set_request_context( $this->raw_request );
39
40 $request = apply_filters(
41 'jet-form-builder/form-handler/form-data',
42 Parser_Manager::instance()->get_values_fields( $this->_fields, $context ),
43 $this
44 );
45
46 jet_fb_action_handler()->add_request( $request );
47
48 if ( Error_Handler::instance()->empty_errors() ) {
49 return;
50 }
51
52 jet_fb_events()->execute( Bad_Request_Event::class );
53
54 throw new Request_Exception(
55 'validation_failed',
56 Error_Handler::instance()->errors(),
57 $request
58 );
59 }
60
61 private function get_raw_request(): array {
62 $this->_fields = Block_Helper::get_blocks_by_post(
63 jet_fb_handler()->get_form_id()
64 );
65
66 // phpcs:ignore WordPress.Security.NonceVerification.Missing
67 $values = Tools::sanitize_recursive( wp_unslash( $_POST ) );
68
69 Live_Form::instance()
70 ->set_form_id( jet_fb_handler()->get_form_id() )
71 ->set_specific_data_for_render();
72
73 return apply_filters( 'jet-form-builder/request-handler/request', $values );
74 }
75
76 public function exclude( string $field_name ): Request_Handler {
77 $attrs = $this->get_attrs_by_name( $field_name );
78
79 /**
80 * @see \Jet_Form_Builder\Actions\Methods\Form_Record\Controller::generate_request
81 */
82 $attrs['field_type'] = 'password';
83
84 return $this->set_request_attrs(
85 array(
86 $field_name => $attrs
87 )
88 );
89 }
90
91 public function set_request_type( array $types ): Request_Handler {
92 $this->request_types = array_merge( $this->request_types, $types );
93
94 return $this;
95 }
96
97 public function set_request_attrs( array $attrs ): Request_Handler {
98 $this->request_attrs = array_merge( $this->request_attrs, $attrs );
99
100 return $this;
101 }
102
103 public function get_types(): array {
104 return $this->request_types;
105 }
106
107 public function get_attrs(): array {
108 return $this->request_attrs;
109 }
110
111 /**
112 * @param string $name
113 * @param string $field_type
114 *
115 * @return bool
116 */
117 public function is_type( string $name, string $field_type ): bool {
118 return $this->get_type( $name ) === $field_type;
119 }
120
121 public function get_type( string $name ): string {
122 return $this->request_types[ $name ] ?? '';
123 }
124
125 /**
126 * @param string $name
127 *
128 * @return array
129 */
130 public function get_attrs_by_name( string $name ): array {
131 return $this->request_attrs[ $name ] ?? array();
132 }
133
134 public function set_raw_request( array $request ): Request_Handler {
135 $this->raw_request = $request;
136
137 return $this;
138 }
139
140 public function set_raw_files( array $files ): Request_Handler {
141 $this->files = $files;
142
143 return $this;
144 }
145
146 /**
147 * @return array
148 */
149 public function get_request(): array {
150 return $this->raw_request;
151 }
152
153 /**
154 * @return File[]|File_Collection[]|array[]
155 */
156 public function get_files(): array {
157 return $this->files;
158 }
159
160 /**
161 * @param string $name
162 *
163 * @return false|Media_Block_Value
164 */
165 public function get_file( string $name ) {
166 return $this->files[ $name ] ?? false;
167 }
168
169 public function update_file( string $name, $file ): Request_Handler {
170 $this->files[ $name ] = $file;
171
172 return $this;
173 }
174
175 /**
176 * @param $field_name
177 * @param $attr_name
178 * @param false $if_not_exist
179 *
180 * @return mixed
181 */
182 public function get_attr(
183 $field_name, $attr_name, $if_not_exist = false
184 ) {
185 $attrs = $this->get_attrs_by_name( $field_name );
186
187 return $attrs[ $attr_name ] ?? $if_not_exist;
188 }
189
190
191 /**
192 * @param $field_name
193 * @param string $attr_name
194 * @param bool $if_empty
195 *
196 * @return array
197 * @deprecated since 2.0.0
198 * Use jfb_request_handler()->get_attr instead
199 */
200 public function get_field_attrs_by_name(
201 $field_name, $attr_name = '', $if_empty = false
202 ) {
203 return $this->get_attr( $field_name, $attr_name, $if_empty );
204 }
205
206 }
207