PluginProbe ʕ •ᴥ•ʔ
JetFormBuilder — Dynamic Blocks Form Builder / 1.1.5
JetFormBuilder — Dynamic Blocks Form Builder v1.1.5
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 / admin / editor.php
jetformbuilder / includes / admin Last commit date
editor.php 5 years ago
editor.php
493 lines
1 <?php
2
3 namespace Jet_Form_Builder\Admin;
4
5 use Jet_Form_Builder\Classes\Tools;
6 use Jet_Form_Builder\Gateways\Gateway_Manager;
7 use Jet_Form_Builder\Plugin;
8
9 /**
10 * Form editor class
11 * Thanks Tom J Nowell for initial editor idea and inspiration!
12 */
13
14 // If this file is called directly, abort.
15 if ( ! defined( 'WPINC' ) ) {
16 die;
17 }
18
19 /**
20 * Define Editor class
21 */
22 class Editor {
23
24 public static $index = 0;
25
26 public $allowed_blocks = null;
27 public $action = null;
28 public $item_id = null;
29
30 /**
31 * Set up editor instatnce props
32 *
33 * @param array $config [description]
34 */
35 public function __construct( $config = array() ) {
36
37 if ( ! empty( $config['allowed_blocks'] ) ) {
38 $this->allowed_blocks = $config['allowed_blocks'];
39 }
40
41 if ( ! empty( $config['action'] ) ) {
42 $this->action = $config['action'];
43 }
44
45 if ( ! empty( $config['item_id'] ) ) {
46 $this->item_id = $config['item_id'];
47 }
48
49 }
50
51 /**
52 * Returns action URL
53 *
54 * @return [type] [description]
55 */
56 public function get_action() {
57
58 if ( null === $this->action ) {
59 $this->action = apply_filters( 'jet-form-builder/editor/action', null );
60 }
61
62 return $this->action;
63
64 }
65
66 /**
67 * Returns current item ID
68 *
69 * @return [type] [description]
70 */
71 public function get_item_id() {
72 return $this->item_id;
73 }
74
75 /**
76 * Retuns allowed blocks list
77 *
78 * @return array
79 */
80 public function get_allowed_blocks() {
81
82 if ( empty( $this->allowed_blocks ) ) {
83
84 $this->allowed_blocks = apply_filters( 'jet-form-builder/editor/allowed-blocks', array(
85 'core/paragraph',
86 'core/image',
87 'core/heading',
88 'core/verse',
89 'core/freeform',
90 'core/spacer',
91 'core/subhead',
92 'core/pullquote',
93 'core/preformatted',
94 'core/shortcode',
95 'core/code',
96 'core/quote',
97 'core/list',
98 'core/heading',
99 'core/separator',
100 'core/text-columns',
101 'core/embed',
102 'core-embed/youtube',
103 'core-embed/twitter',
104 'core-embed/vimeo',
105 'core/columns',
106 'core/column',
107 ) );
108
109 }
110
111 return $this->allowed_blocks;
112 }
113
114 /**
115 * Returns taxonomies list for the config
116 * @return [type] [description]
117 */
118 public function get_taxonomies_list() {
119
120 $taxonomies = get_taxonomies( array(), 'objects' );
121
122 $result = array();
123
124 foreach ( $taxonomies as $tax ) {
125 $result[] = array(
126 'value' => $tax->name,
127 'label' => sprintf( '%1$s (%2$s)', $tax->label, $tax->name ),
128 );
129 }
130
131 return $result;
132
133 }
134
135 public function get_preset_config() {
136 return apply_filters( 'jet-form-builder/editor/preset-config', array(
137 'global_fields' => array(
138 array(
139 'name' => 'from',
140 'label' => __( 'Source:', 'jet-form-builder' ),
141 'type' => 'select',
142 'options' => Tools::with_placeholder( array(
143 array(
144 'value' => 'post',
145 'label' => __( 'Post', 'jet-form-builder' ),
146 ),
147 array(
148 'value' => 'user',
149 'label' => __( 'User', 'jet-form-builder' ),
150 ),
151 array(
152 'value' => 'query_var',
153 'label' => __( 'URL Query Variable', 'jet-form-builder' ),
154 ),
155 ) ),
156 ),
157 array(
158 'name' => 'post_from',
159 'label' => __( 'Get post ID from:', 'jet-form-builder' ),
160 'type' => 'select',
161 'options' => Tools::with_placeholder( array(
162 array(
163 'value' => 'current_post',
164 'label' => __( 'Current post', 'jet-form-builder' ),
165 ),
166 array(
167 'value' => 'query_var',
168 'label' => __( 'URL Query Variable', 'jet-form-builder' ),
169 ),
170 ) ),
171 'condition' => array(
172 'field' => 'from',
173 'value' => 'post',
174 ),
175 ),
176 array(
177 'name' => 'user_from',
178 'label' => __( 'Get user ID from:', 'jet-form-builder' ),
179 'type' => 'select',
180 'options' => Tools::with_placeholder( array(
181 array(
182 'value' => 'current_user',
183 'label' => __( 'Current user', 'jet-form-builder' ),
184 ),
185 array(
186 'value' => 'query_var',
187 'label' => __( 'URL Query Variable', 'jet-form-builder' ),
188 ),
189 ) ),
190 'condition' => array(
191 'field' => 'from',
192 'value' => 'user',
193 ),
194 ),
195 array(
196 'name' => 'query_var',
197 'label' => __( 'Query variable name:', 'jet-form-builder' ),
198 'type' => 'text',
199 'custom_condition' => 'query_var',
200 'position' => 'dynamic'
201 )
202 ),
203 'map_fields' => array(
204 array(
205 'name' => 'key',
206 'label' => __( 'Query variable key', 'jet-form-builder' ),
207 'type' => 'text',
208 'position' => 'general',
209 'parent_condition' => array(
210 'field' => 'from',
211 'value' => 'query_var'
212 ),
213 ),
214 array(
215 'name' => 'prop',
216 'label' => __( 'Post property', 'jet-form-builder' ),
217 'type' => 'select',
218 'options' => Tools::with_placeholder( array(
219 array(
220 'value' => 'ID',
221 'label' => __( 'Post ID', 'jet-form-builder' ),
222 ),
223 array(
224 'value' => 'post_title',
225 'label' => __( 'Post Title', 'jet-form-builder' ),
226 ),
227 array(
228 'value' => 'post_content',
229 'label' => __( 'Post Content', 'jet-form-builder' ),
230 ),
231 array(
232 'value' => 'post_excerpt',
233 'label' => __( 'Post Excerpt', 'jet-form-builder' ),
234 ),
235 array(
236 'value' => 'post_date',
237 'label' => __( 'Post Date', 'jet-form-builder' )
238 ),
239 array(
240 'value' => 'post_date_gmt',
241 'label' => __( 'Post Date GMT', 'jet-form-builder' )
242 ),
243 array(
244 'value' => 'post_thumb',
245 'label' => __( 'Post Thumbnail', 'jet-form-builder' ),
246 ),
247 array(
248 'value' => 'post_meta',
249 'label' => __( 'Post Meta', 'jet-form-builder' ),
250 ),
251 array(
252 'value' => 'post_terms',
253 'label' => __( 'Post Terms', 'jet-form-builder' ),
254 ),
255 ) ),
256 'parent_condition' => array(
257 'field' => 'from',
258 'value' => 'post'
259 ),
260 ),
261 array(
262 'name' => 'key',
263 'label' => __( 'Taxonomy', 'jet-form-builder' ),
264 'type' => 'select',
265 'options' => Tools::with_placeholder( $this->get_taxonomies_list() ),
266 'parent_condition' => array(
267 'field' => 'from',
268 'value' => 'post'
269 ),
270 'condition' => array(
271 'field' => 'prop',
272 'value' => 'post_terms'
273 ),
274 ),
275 array(
276 'name' => 'key',
277 'label' => __( 'Meta field key', 'jet-form-builder' ),
278 'type' => 'text',
279 'parent_condition' => array(
280 'field' => 'from',
281 'value' => 'post'
282 ),
283 'condition' => array(
284 'field' => 'prop',
285 'value' => 'post_meta'
286 ),
287 ),
288 array(
289 'name' => 'prop',
290 'label' => __( 'User field', 'jet-form-builder' ),
291 'type' => 'select',
292 'options' => Tools::with_placeholder( array(
293 array(
294 'value' => 'ID',
295 'label' => __( 'User ID', 'jet-form-builder' ),
296 ),
297 array(
298 'value' => 'user_login',
299 'label' => __( 'User Login', 'jet-form-builder' ),
300 ),
301 array(
302 'value' => 'user_email',
303 'label' => __( 'Email', 'jet-form-builder' ),
304 ),
305 array(
306 'value' => 'password',
307 'label' => __( 'Password', 'jet-form-builder' ),
308 ),
309 array(
310 'value' => 'first_name',
311 'label' => __( 'First Name', 'jet-form-builder' ),
312 ),
313 array(
314 'value' => 'last_name',
315 'label' => __( 'Last Name', 'jet-form-builder' ),
316 ),
317 array(
318 'value' => 'user_url',
319 'label' => __( 'User URL', 'jet-form-builder' ),
320 ),
321 array(
322 'value' => 'user_meta',
323 'label' => __( 'User Meta', 'jet-form-builder' ),
324 ),
325 ) ),
326 'parent_condition' => array(
327 'field' => 'from',
328 'value' => 'user'
329 ),
330 ),
331 array(
332 'name' => 'key',
333 'label' => __( 'Meta field key', 'jet-form-builder' ),
334 'type' => 'text',
335 'parent_condition' => array(
336 'field' => 'from',
337 'value' => 'user'
338 ),
339 'condition' => array(
340 'field' => 'prop',
341 'value' => 'user_meta'
342 ),
343 ),
344 ),
345 ) );
346 }
347
348 public function get_messages_default() {
349 return Plugin::instance()->post_type->get_messages_default();
350 }
351
352 public function get_recaptcha_labels() {
353 return array(
354 'enabled' => __( 'Enable reCAPTCHA v3 form verification', 'jet-form-builder' ),
355 'key' => __( 'Site Key:', 'jet-form-builder' ),
356 'secret' => __( 'Secret Key:', 'jet-form-builder' ),
357 );
358 }
359
360 /**
361 * Enqueue editor assets
362 *
363 * @return void
364 */
365 public function enqueue_assets() {
366
367 $handle = 'jet-form-builder';
368
369 do_action( 'jet-form-builder/editor-assets/before', $this, $handle );
370
371 wp_enqueue_script(
372 $handle,
373 JET_FORM_BUILDER_URL . 'assets/js/editor.js',
374 array(
375 'wp-editor',
376 'wp-core-data',
377 'wp-data',
378 'wp-block-library',
379 'wp-format-library',
380 'wp-api-fetch',
381 ),
382 JET_FORM_BUILDER_VERSION,
383 true
384 );
385
386 wp_enqueue_style(
387 $handle,
388 JET_FORM_BUILDER_URL . 'assets/css/editor.css',
389 array(
390 'media',
391 'l10n',
392 'buttons',
393 'wp-edit-blocks',
394 'wp-editor',
395 ),
396 JET_FORM_BUILDER_VERSION,
397 'all'
398 );
399
400
401 wp_localize_script( $handle, 'JetFormEditorData', array(
402 'allowedBlocks' => $this->get_allowed_blocks(),
403 'action' => $this->get_action(),
404 'itemID' => $this->get_item_id(),
405 'presetConfig' => $this->get_preset_config(),
406 'messagesDefault' => $this->get_messages_default(),
407 'recaptchaLabels' => $this->get_recaptcha_labels(),
408 'gateways' => Gateway_Manager::instance()->editor_data(),
409 'helpForRepeaters' => $this->get_help_for_repeaters(),
410 ) );
411
412 do_action( 'jet-form-builder/editor-assets/after', $this, $handle );
413 }
414
415 private function get_help_for_repeaters() {
416 return array(
417 'conditional_block' => array(
418 'label' => __( 'With many conditions for the block, they are checked with the AND operator', 'jet-form-builder' )
419 ),
420 'conditional_action' => array(
421 'label' => __( 'With many conditions for the action, they are checked with the AND operator', 'jet-form-builder' )
422 ),
423 );
424 }
425
426 public function enqueue_form_assets() {
427
428 $handle = 'jet-form-builder/form';
429
430 do_action( 'jet-form-builder/other-editor-assets/before', $this, $handle );
431
432 wp_enqueue_script(
433 $handle,
434 JET_FORM_BUILDER_URL . 'assets/js/form-block.js',
435 array(
436 'wp-editor',
437 'wp-core-data',
438 'wp-data',
439 'wp-block-library',
440 'wp-format-library',
441 'wp-api-fetch',
442 ),
443 JET_FORM_BUILDER_VERSION,
444 true
445 );
446
447 wp_enqueue_style(
448 'jet-form-builder-others',
449 Plugin::instance()->plugin_url( 'assets/css/frontend.css' ),
450 array(),
451 Plugin::instance()->get_version()
452 );
453
454 wp_localize_script( $handle, 'JetFormEditorData', array(
455 'allowedBlocks' => $this->get_allowed_blocks(),
456 'action' => $this->get_action(),
457 'itemID' => $this->get_item_id(),
458 'presetConfig' => $this->get_preset_config(),
459 ) );
460
461 do_action( 'jet-form-builder/other-editor-assets/after', $this, $handle );
462
463 }
464
465 /**
466 * Render new editor instance
467 *
468 * @return [type] [description]
469 */
470 public function render( $input_name = '', $content = '', $form_name = '' ) {
471
472 if ( ! $input_name ) {
473 $input_name = 'jet_form_editor_' . self::$index;
474 self::$index ++;
475 }
476
477 ?>
478 <input name="<?php echo esc_attr( $input_name ); ?>" id="<?php echo esc_attr( $input_name ); ?>" type="hidden"/>
479 <script>
480 document.addEventListener( 'jet-form-builder-initialized', function ( event ) {
481 window.JetFormEditor(
482 '<?php echo esc_js( $input_name ); ?>',
483 '<?php echo esc_js( $input_name ); ?>',
484 '<?php echo html_entity_decode( esc_js( $content ) ); ?>',
485 '<?php echo esc_js( $form_name ); ?>'
486 );
487 } );
488 </script>
489 <?php
490 }
491
492 }
493