PluginProbe
JetFormBuilder — Dynamic Blocks Form Builder / 3.6.1
JetFormBuilder — Dynamic Blocks Form Builder v3.6.1
3.6.6.1 3.6.6 3.6.5.4 3.6.5.3 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 All 134 releases
jetformbuilder / includes / presets / preset-manager.php

preset-manager.php in JetFormBuilder — Dynamic Blocks Form Builder 3.6.1, at includes/presets/preset-manager.php

241 lines 5.2 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\Presets;
5
6 use Jet_Form_Builder\Classes\Instance_Trait;
7 use Jet_Form_Builder\Classes\Tools;
8 use Jet_Form_Builder\Exceptions\Plain_Default_Exception;
9 use Jet_Form_Builder\Exceptions\Preset_Exception;
10 use Jet_Form_Builder\Presets\Sources;
11 use Jet_Form_Builder\Presets\Types\Base_Preset;
12 use Jet_Form_Builder\Presets\Types\Dynamic_Preset;
13 use Jet_Form_Builder\Presets\Types\General_Preset;
14
15 if ( ! defined( 'WPINC' ) ) {
16 die;
17 }
18
19 /**
20 * @method static Preset_Manager instance()
21 *
22 * Class Preset_Manager
23 * @package Jet_Form_Builder\Presets
24 */
25 class Preset_Manager {
26
27 use Instance_Trait;
28
29 protected $data = null;
30 protected $source = null;
31 protected $defaults = array(
32 'enabled' => false,
33 'from' => 'post',
34 'post_from' => 'current_post',
35 'user_from' => 'current_user',
36 'query_var' => '_post_id',
37 'term_from' => 'current_term',
38 'fields_map' => array(),
39 );
40
41 // phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
42 private $_preset_types = array();
43 private $_source_types;
44
45 // phpcs:enable PSR2.Classes.PropertyDeclaration.Underscore
46
47
48 protected function __construct() {
49 $this->register_preset_types();
50 $this->register_source_types();
51
52 do_action( 'jet-form-builder/after-init/preset-manager' );
53 }
54
55 public function set_form_id( $form_id ): Preset_Manager {
56 if ( ! $form_id ) {
57 return $this;
58 }
59 $this->general()->set_init_data( $this->general()->preset_source( $form_id ) );
60
61 try {
62 $this->general()->get_source();
63 } catch ( Preset_Exception $exception ) {
64 // do nothing
65 }
66
67 return $this;
68 }
69
70 /**
71 * @return Base_Preset[]
72 */
73 protected function preset_types(): array {
74 return $this->_preset_types;
75 }
76
77 /**
78 * @param $slug
79 *
80 * @return Base_Preset|void
81 */
82 public function get_preset_type_raw( $slug ): Base_Preset {
83 if ( isset( $this->_preset_types[ $slug ] ) ) {
84 return $this->_preset_types[ $slug ];
85 }
86
87 _doing_it_wrong(
88 esc_html( static::class . '::' . __METHOD__ ),
89 'Undefined preset type',
90 '1.4.2'
91 );
92 }
93
94 public function get_preset_type( $slug ): Base_Preset {
95 $type = $this->get_preset_type_raw( $slug );
96
97 return $type->is_unique() ? clone $type : $type;
98 }
99
100 /**
101 * @return Dynamic_Preset|Base_Preset
102 */
103 public function dynamic() {
104 return $this->get_preset_type( Dynamic_Preset::SLUG );
105 }
106
107 /**
108 * @return General_Preset|Base_Preset
109 */
110 public function general() {
111 return $this->get_preset_type( General_Preset::SLUG );
112 }
113
114 private function register_source_types() {
115 /** @var Sources\Base_Source[] $types */
116
117 $types = apply_filters(
118 'jet-form-builder/preset/source-types',
119 array(
120 new Sources\Preset_Source_Post(),
121 new Sources\Preset_Source_User(),
122 new Sources\Preset_Source_Query_Var(),
123 new Sources\Preset_Source_Term(),
124 )
125 );
126
127 foreach ( $types as $type ) {
128 $this->register_source_type( $type );
129 }
130 }
131
132 public function register_source_type( Sources\Base_Source $source ) {
133 if ( ! $source->condition() ) {
134 return;
135 }
136 $this->_source_types[ $source->get_id() ] = $source;
137
138 $source->after_register();
139 }
140
141 private function register_preset_types() {
142 $types = array(
143 new Dynamic_Preset(),
144 new General_Preset(),
145 );
146
147 foreach ( $types as $type ) {
148 $this->register_preset_type( $type );
149 }
150 }
151
152 /**
153 * @param $args
154 *
155 * @return Base_Preset
156 * @throws Plain_Default_Exception|Preset_Exception
157 */
158 protected function get_preset_type_manager( $args ) {
159 foreach ( $this->preset_types() as $type ) {
160 $preset = $type->is_unique() ? clone $type : $type;
161
162 if ( $preset->is_active_preset( $args ) ) {
163 return $preset;
164 }
165 }
166
167 throw new Preset_Exception( 'Preset manager is not installed.' );
168 }
169
170
171 protected function register_preset_type( Base_Preset $type ) {
172 $this->_preset_types[ $type->get_slug() ] = $type;
173 }
174
175 /**
176 * Returns field value
177 *
178 * @param array $args
179 *
180 * @return [type] [description]
181 */
182 public function get_field_value( $args = array() ) {
183 if ( empty( $args['name'] ) ) {
184 return '';
185 }
186
187 try {
188 $manager = $this->get_preset_type_manager( $args );
189 } catch ( Plain_Default_Exception $exception ) {
190 return $exception->getMessage();
191 } catch ( Preset_Exception $exception ) {
192 return '';
193 }
194
195 $manager->set_check_restriction( true );
196
197 try {
198 return $manager->get_source( $args )->result();
199 } catch ( Preset_Exception $exception ) {
200 return '';
201 }
202 }
203
204 /**
205 * @param $type
206 *
207 * @return Sources\Base_Source
208 * @throws Preset_Exception
209 */
210 public function get_source_by_type( $type ): Sources\Base_Source {
211 if ( ! isset( $this->_source_types[ $type ] ) ) {
212 throw new Preset_Exception(
213 esc_html( "Undefined source type: {$type}" )
214 );
215 }
216
217 return clone $this->_source_types[ $type ];
218 }
219
220 public function prepare_result( $field_type, $value ) {
221 // Prepare value for date field
222 switch ( $field_type ) {
223 case 'date-field':
224 if ( ! Tools::is_valid_timestamp( $value ) ) {
225 return $value;
226 }
227
228 return date_i18n( 'Y-m-d', $value );
229 case 'datetime-field':
230 if ( ! Tools::is_valid_timestamp( $value ) ) {
231 return $value;
232 }
233
234 return date_i18n( 'Y-m-d\TH:i', $value );
235 default:
236 return apply_filters( 'jet-form-builder/preset/parse-value', $value, $this );
237 }
238 }
239
240 }
241