PluginProbe ʕ •ᴥ•ʔ
JetFormBuilder — Dynamic Blocks Form Builder / 2.0.6
JetFormBuilder — Dynamic Blocks Form Builder v2.0.6
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 / parser-manager.php
jetformbuilder / includes / request Last commit date
exceptions 4 years ago fields 4 years ago field-data-parser.php 4 years ago form-request-router.php 4 years ago parser-manager.php 4 years ago request-handler.php 4 years ago request-router.php 4 years ago
parser-manager.php
174 lines
1 <?php
2
3
4 namespace Jet_Form_Builder\Request;
5
6 use Jet_Form_Builder\Blocks\Block_Helper;
7 use Jet_Form_Builder\Classes\Instance_Trait;
8 use Jet_Form_Builder\Classes\Repository\Repository_Pattern_Trait;
9 use Jet_Form_Builder\Exceptions\Parse_Exception;
10 use Jet_Form_Builder\Exceptions\Repository_Exception;
11 use Jet_Form_Builder\Request\Exceptions\Exclude_Field_Exception;
12 use Jet_Form_Builder\Request\Fields;
13
14 /**
15 * @method static Parser_Manager instance()
16 *
17 * Class Parser_Manager
18 * @package Jet_Form_Builder\Request
19 */
20 class Parser_Manager {
21
22 const EMPTY_BLOCK_ERROR = '0';
23 const NOT_FIELD_HAS_INNER = '1';
24 const FIELD_HAS_INNER = '2';
25 const IS_CONDITIONAL = '3';
26
27 use Instance_Trait;
28 use Repository_Pattern_Trait;
29
30 private function __construct() {
31 $this->rep_install();
32 }
33
34 public function rep_instances(): array {
35 return apply_filters(
36 'jet-form-builder/parsers-request/register',
37 array(
38 new Fields\Date_Field_Parser(),
39 new Fields\Repeater_Field_Parser(),
40 new Fields\Wysiwyg_Field_Parser(),
41 new Fields\Text_Field_Parser(),
42 new Fields\Repeater_Field_Parser(),
43 new Fields\Media_Field_Parser(),
44 new Fields\Datetime_Field_Parser(),
45 new Fields\Hidden_Field_Parser(),
46 )
47 );
48 }
49
50 public function get_values_fields( $fields, $request, $inside_conditional = false ) {
51 $response = array();
52 $this->get_values_fields_recursive( $response, $fields, $request, $inside_conditional );
53
54 return $response;
55 }
56
57 public function get_values_fields_recursive( &$output, $fields, $request, $inside_conditional ) {
58 foreach ( $fields as $field ) {
59 try {
60 $this->get_value_from_field( $output, $field, $request, $inside_conditional );
61
62 } catch ( Parse_Exception $exception ) {
63 switch ( $exception->getMessage() ) {
64
65 case self::IS_CONDITIONAL:
66 $this->get_values_fields_recursive(
67 $output,
68 $exception->get_inner(),
69 $request,
70 true
71 );
72 break;
73
74 case self::NOT_FIELD_HAS_INNER:
75 $this->get_values_fields_recursive(
76 $output,
77 $exception->get_inner(),
78 $request,
79 $inside_conditional
80 );
81 break;
82 }
83 }
84 }
85 }
86
87
88 /**
89 * @param $output
90 * @param $field
91 *
92 * @param $request
93 * @param $inside_conditional
94 *
95 * @throws Parse_Exception
96 */
97 public function get_value_from_field( &$output, $field, $request, $inside_conditional ) {
98 if ( empty( $field['blockName'] ) ) {
99 throw new Parse_Exception( self::EMPTY_BLOCK_ERROR );
100 }
101
102 if ( ! empty( $field['innerBlocks'] ) ) {
103 if ( strpos( $field['blockName'], 'conditional-block' ) ) {
104 throw new Parse_Exception( self::IS_CONDITIONAL, $field['innerBlocks'] );
105 }
106 if ( ! $this->isset_parser( $field['blockName'] ) ) {
107 throw new Parse_Exception( self::NOT_FIELD_HAS_INNER, $field['innerBlocks'] );
108 }
109 }
110
111 $settings = $field['attrs'];
112 $name = $settings['name'] ?? 'field_name';
113 $field_type = Block_Helper::delete_namespace( $field['blockName'] );
114 $value = $request[ $name ] ?? '';
115
116 try {
117 $parser = $this->get_parser( $field_type );
118 } catch ( Repository_Exception $exception ) {
119 $this->save_to_request( $name, $field_type, $settings );
120
121 $output[ $name ] = $value;
122
123 return;
124 }
125
126 try {
127 $output[ $name ] = $parser->get_parsed_value( $value, $field, $inside_conditional );
128 } catch ( Parse_Exception $exception ) {
129 $output = array_merge( $output, $exception->get_inner() );
130 return;
131
132 } catch ( Exclude_Field_Exception $exception ) {
133 return;
134 }
135
136 $this->save_to_request( $name, $field_type, $settings );
137 }
138
139 private function save_to_request( $name, $type, $settings ) {
140 jet_fb_request_handler()->set_request_type(
141 array(
142 $name => $type,
143 )
144 );
145 jet_fb_request_handler()->set_request_attrs(
146 array(
147 $name => $settings,
148 )
149 );
150 }
151
152 /**
153 * @param $block_name
154 *
155 * @return bool
156 */
157 private function isset_parser( $block_name ): bool {
158 $type = Block_Helper::delete_namespace( $block_name );
159
160 return $this->rep_isset_item( $type );
161 }
162
163 /**
164 * @param $slug
165 *
166 * @return mixed
167 * @throws Repository_Exception
168 */
169 public function get_parser( $slug ): Field_Data_Parser {
170 return $this->rep_clone_item( $slug );
171 }
172
173 }
174