PluginProbe ʕ •ᴥ•ʔ
JetFormBuilder — Dynamic Blocks Form Builder / 3.0.8
JetFormBuilder — Dynamic Blocks Form Builder v3.0.8
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 / blocks / render / form-builder.php
jetformbuilder / includes / blocks / render Last commit date
action-button-render.php 3 years ago base-select-radio-check.php 3 years ago base.php 3 years ago calculated-field-render.php 3 years ago checkbox-field-render.php 3 years ago date-field-render.php 3 years ago datetime-field-render.php 3 years ago form-builder.php 3 years ago form-hidden-fields.php 3 years ago group-break-field-render.php 3 years ago heading-field-render.php 3 years ago media-field-render.php 3 years ago number-field-render.php 3 years ago radio-field-render.php 3 years ago range-field-render.php 3 years ago repeater-field-render.php 3 years ago select-field-render.php 3 years ago text-field-render.php 3 years ago textarea-field-render.php 3 years ago time-field-render.php 3 years ago wysiwyg-field-render.php 3 years ago
form-builder.php
256 lines
1 <?php
2
3 namespace Jet_Form_Builder\Blocks\Render;
4
5 use Jet_Form_Builder\Blocks\Block_Helper;
6 use Jet_Form_Builder\Blocks\Dynamic_Value;
7 use Jet_Form_Builder\Blocks\Validation;
8 use Jet_Form_Builder\Classes\Arguments\Form_Arguments;
9 use Jet_Form_Builder\Classes\Attributes_Trait;
10 use Jet_Form_Builder\Classes\Builder_Helper;
11 use Jet_Form_Builder\Classes\Compatibility;
12 use Jet_Form_Builder\Classes\Get_Template_Trait;
13 use Jet_Form_Builder\Classes\Http\Http_Tools;
14 use Jet_Form_Builder\Classes\Tools;
15 use Jet_Form_Builder\Compatibility\Jet_Plugins_Ajax\Jet_Plugins_Ajax;
16 use Jet_Form_Builder\Live_Form;
17 use Jet_Form_Builder\Plugin;
18 use Jet_Form_Builder\Presets\Preset_Manager;
19 use JET_SM\Gutenberg\Style_Manager;
20
21 // If this file is called directly, abort.
22
23 if ( ! defined( 'WPINC' ) ) {
24 die;
25 }
26
27 /**
28 * Form builder class
29 */
30 class Form_Builder {
31
32 use Attributes_Trait;
33 use Get_Template_Trait;
34
35 public $form_id;
36 public $post;
37 public $args = array();
38
39 private $form_content;
40
41 /**
42 * Constructor for the class
43 *
44 * @param null $form_id
45 * @param array $args
46 */
47 public function __construct( $form_id = null, $args = array() ) {
48
49 if ( ! $form_id ) {
50 return;
51 }
52 $this->form_id = $form_id;
53 $this->set_form_args( $args );
54 }
55
56 /**
57 * Render from HTML
58 *
59 * @return false|string [type] [description]
60 */
61 public function render_form() {
62
63 if ( $this->pre_render() ) {
64 return '';
65 }
66
67 if ( ! jet_fb_preset( $this->form_id )->general()->sanitize_source() ) {
68 echo 'You are not permitted to submit this form!';
69
70 return '';
71 }
72
73 $blocks = Live_Form::instance()
74 ->set_form_id( $this->form_id )
75 ->set_specific_data_for_render( $this->args )
76 ->setup_fields();
77
78 $form = $this->start_form();
79
80 $form .= Form_Hidden_Fields::render();
81
82 $form .= jet_fb_live()->maybe_progress_pages();
83 $form .= jet_fb_live()->maybe_start_page( true );
84
85 foreach ( $blocks as $block ) {
86 $form .= render_block( $block );
87 }
88
89 $form .= jet_fb_live()->maybe_end_page( true );
90 $form .= $this->end_form();
91
92 Live_Form::clear();
93
94 return $form;
95 }
96
97
98 /**
99 * @param $arguments
100 *
101 * @return Form_Builder
102 */
103 public function set_form_args( $arguments ): Form_Builder {
104 $this->args = array_intersect_key( $arguments, Form_Arguments::arguments() );
105
106 $this->args['className'] = $arguments['className'] ?? '';
107 $this->args['anchor'] = $arguments['anchor'] ?? '';
108
109 return $this;
110 }
111
112
113 /**
114 * @return mixed|void
115 */
116 public function pre_render() {
117 return apply_filters( 'jet-form-builder/pre-render/' . $this->form_id, false );
118 }
119
120 /**
121 * Open form wrapper
122 *
123 * @return string [type] [description]
124 */
125 public function start_form() {
126 Plugin::instance()->blocks->enqueue_frontend_styles();
127
128 $start_form = apply_filters( 'jet-form-builder/before-start-form', '', $this );
129
130 $start_form .= $this->maybe_render_fonts_block();
131 $start_form .= $this->render_styles();
132
133 $base_classes = sprintf(
134 'jet-form-builder layout-%1$s submit-type-%2$s',
135 jet_fb_live_args()->fields_layout,
136 jet_fb_live_args()->submit_type
137 );
138
139 /**
140 * We use form builder methods to add attributes, as the form can be displayed
141 * not only with the Gutenberg block, but also with a third-party builder widget
142 */
143 $this->add_attribute( 'id', $this->args['anchor'] );
144 $this->add_attribute( 'class', $base_classes );
145 $this->add_attribute( 'action', Http_Tools::get_form_action_url() );
146 $this->add_attribute( 'method', \WP_REST_Server::CREATABLE );
147 $this->add_attribute( 'data-form-id', $this->form_id );
148 $this->add_attribute( 'data-layout', jet_fb_live_args()->fields_layout );
149 $this->add_attribute( 'enctype', 'multipart/form-data' );
150 $this->add_attribute( 'data-validation-type', jet_fb_live_args()->validation_type );
151 $this->add_attribute( 'data-clear', jet_fb_live_args()->clear );
152 $this->add_attribute( 'novalidate' );
153
154 /**
155 * Backward compatibility.
156 * We leave only the basic ones in the classes, because the value
157 * from className is added "from above"
158 *
159 * Without it, custom classes will be on the <form> tag and the outer <div>
160 */
161 $this->add_attribute(
162 'class',
163 Compatibility::has_jet_sm() ? '' : $this->args['className']
164 );
165
166 $start_form .= sprintf(
167 '<form %1$s>',
168 $this->get_attributes_string()
169 );
170
171 $start_form .= apply_filters( 'jet-form-builder/after-start-form', '', $this );
172
173 return $start_form;
174 }
175
176 /**
177 * Close form wrapper
178 *
179 * @return string [type] [description]
180 */
181 public function end_form() {
182 Plugin::instance()->blocks->enqueue_frontend_assets();
183
184 $end_form = apply_filters( 'jet-form-builder/before-end-form', '', $this );
185 $form_id = $this->form_id;
186
187 ob_start();
188
189 if ( Plugin::instance()->captcha ) {
190 Plugin::instance()->captcha->render( $this->form_id );
191 }
192
193 include $this->get_global_template( 'common/end-form.php' );
194
195 $end_form .= ob_get_clean();
196
197 $end_form .= apply_filters( 'jet-form-builder/after-end-form', '', $this );
198
199 return $end_form;
200 }
201
202 private function render_styles(): string {
203 if ( wp_doing_ajax() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) {
204 return $this->get_inline_styles();
205 }
206
207 if ( Tools::is_elementor_editor() ) {
208 return $this->get_inline_styles();
209 }
210
211 Builder_Helper::enqueue_global_styles();
212 Builder_Helper::enqueue_style_form( $this->form_id );
213
214 return '';
215 }
216
217 private function get_inline_styles(): string {
218 return sprintf(
219 '<style id="jet-form-builder-%s-inline-css">%s</style>',
220 $this->form_id,
221 Plugin::instance()->post_type->maybe_get_jet_sm_ready_styles( $this->form_id )
222 );
223 }
224
225
226 private function maybe_render_fonts_block(): string {
227 if (
228 ! Compatibility::has_jet_sm()
229 || ! method_exists( Style_Manager::get_instance(), 'get_blocks_fonts' )
230 ) {
231 return '';
232 }
233 $fonts = Style_Manager::get_instance()->get_blocks_fonts( $this->form_id );
234
235 if ( ! $fonts ) {
236 return '';
237 }
238
239 $fonts = trim( $fonts, '"' );
240 $fonts = wp_unslash( $fonts );
241
242 return wp_kses(
243 $fonts,
244 array(
245 'link' => array(
246 'href' => true,
247 'rel' => true,
248 ),
249 )
250 );
251 }
252
253 }
254
255
256