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