PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 2.10.0
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v2.10.0
3.3.1 V-3.3.0 3.2.2 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 V3.0.3 V3.0.2 -3.0.1 V_3.0.0 1.1.1 1.1.8 1.2 1.3 1.4 1.4.18 1.5.2 1.9 2.0 2.10.0 2.10.1 All 138 releases
bit-form / includes / Frontend / Form / View / Conversational / ConversationalHelpers.php

ConversationalHelpers.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 2.10.0, at includes/Frontend/Form/View/Conversational/ConversationalHelpers.php

268 lines 9.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace BitCode\BitForm\Frontend\Form\View\Conversational;
4
5 use BitCode\BitForm\Admin\Form\Helpers;
6
7 class ConversationalHelpers
8 {
9 private $_formId;
10 private $_conversationalSettings;
11 private $_stepListObject;
12
13 public function __construct($formId, $conversationalSettings)
14 {
15 $this->_formId = $formId;
16 $this->_conversationalSettings = $conversationalSettings;
17 $this->_stepListObject = $this->_conversationalSettings->stepListObject;
18 }
19
20 public function getWelcomePageView()
21 {
22 $welcomePageSettings = $this->getMergedStepSettings("welcomePage");
23 $welcomeTitle = '';
24 $welcomePageMarkup = '';
25 $buttonMarkup = '';
26
27 if(!$welcomePageSettings->enable) return '';
28 if (!empty($welcomePageSettings->title)) {
29 $welcomeTitle = <<<WELCOMETITLE
30 <div class="bc{$this->_formId}-welcome-title">
31 <h2>{$welcomePageSettings->title}</h2>
32 </div>
33 WELCOMETITLE;
34 }
35
36 $startBtnPreIcn = $this->conversationalSettingsIcon($welcomePageSettings, 'startBtnPreIcn', 'btn-pre-icon', 'Start Button Pre Icon');
37 $startBtnSufIcn = $this->conversationalSettingsIcon($welcomePageSettings, 'startBtnSufIcn', 'btn-suf-icon', 'Start Button Suf Icon');
38
39 $startBtnText = !empty($welcomePageSettings->btnTxt) ? $welcomePageSettings->btnTxt : 'Start';
40
41 $stepHints = !empty($welcomePageSettings->stepHints) ? $welcomePageSettings->stepHints : '';
42
43 $buttonMarkup = <<<BUTTONMARKUP
44 <div class="bc{$this->_formId}-step-btn-wrpr">
45 <div class="bc{$this->_formId}-step-btn-inner-wrpr">
46 <div class="bc{$this->_formId}-step-btn-cntnt">
47 <button class="bc{$this->_formId}-start-btn bc{$this->_formId}-btn" type="button">
48 {$startBtnPreIcn}
49 {$startBtnText}
50 {$startBtnSufIcn}
51 </button>
52 <span class="bc{$this->_formId}-step-hints">
53 {$stepHints}
54 </span>
55 </div>
56 </div>
57 </div>
58 BUTTONMARKUP;
59
60 $welcomePageMarkup = <<<WELCOMEPAGECONTENT
61 <div class="bc{$this->_formId}-welcome-content">
62 {$welcomeTitle}
63 {$welcomePageSettings->content}
64 {$buttonMarkup}
65 </div>
66 WELCOMEPAGECONTENT;
67 $imageContent = $this->conversationalSettingsIcon($welcomePageSettings, 'layoutImage', 'step-img', 'Background Image');
68 $welcomeLayout = $welcomePageSettings->layout;
69 $welcomeLayoutClsNames = "bc{$this->_formId}-welcome $welcomeLayout";
70 return $this->getStepLayout($this->_formId, $imageContent, $welcomePageMarkup, $welcomeLayout, $welcomeLayoutClsNames);
71 }
72
73 public function getNavigationView()
74 {
75 $navigationSettings = $this->_conversationalSettings->navigationSettings;
76 $formId = $this->_formId;
77 $progressLabelMarkup = '';
78 $progressBarMarkup = '';
79 $progressMarkup = '';
80 $brandingMarkup = '';
81 $navBtnMarkup = '';
82
83 if ($navigationSettings->showProgressLabel) {
84 $progressLabelMarkup = <<<PERCENTAGEMARKUP
85 <div class="bc{$formId}-progress-lbl-wrpr">
86 <span class="bc{$formId}-progress-lbl">
87 {$navigationSettings->progressLabel}
88 </span>
89 </div>
90 PERCENTAGEMARKUP;
91 }
92
93 if ($navigationSettings->showProgressBar) {
94 $progressBarMarkup = <<<PROGRESSBARMARKUP
95 <div class="bc{$formId}-progress-bar-wrpr">
96 <div class="bc{$formId}-progress-bar">
97 <div class="bc{$formId}-progress-fill" style="width: 40%"></div>
98 </div>
99 </div>
100 PROGRESSBARMARKUP;
101 }
102
103 if ($navigationSettings->showProgressBar || $navigationSettings->showProgressLabel) {
104 $progressMarkup = <<<PROGRESSMARKUP
105 <div class="bc{$formId}-progress-wrpr">
106 <div class="bc{$formId}-progress-cntnt" >
107 {$progressLabelMarkup}
108 {$progressBarMarkup}
109 </div>
110 </div>
111 PROGRESSMARKUP;
112 }
113
114 if ($navigationSettings->showBranding) {
115 $brandingMarkup = <<<BRANDINGMARKUP
116 <div class="bc{$formId}-branding-wrpr">
117 <div class="bc{$formId}-branding-cntnt">
118 <div class="bc{$formId}-branding-lbl">
119 <span class="bc{$formId}-prowered-by-lbl">Powered by</span>
120 <span class="bc{$formId}-bit-form-lbl">Bit Form</span>
121 </div>
122 </div>
123 </div>
124 BRANDINGMARKUP;
125 }
126
127 if ($navigationSettings->showNavigateBtn) {
128 $navBtnMarkup = <<<NAVBTNMARKUP
129 <div class="bc{$formId}-nav-btn-wrpr">
130 <div class="bc{$formId}-nav-btn-cntnt">
131 <button class="bc{$formId}-nav-btn bc{$formId}-nav-btn-up" type="button">
132 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-up"><line x1="12" y1="19" x2="12" y2="5"></line><polyline points="5 12 12 5 19 12"></polyline></svg>
133 </button>
134 <button class="bc{$formId}-nav-btn bc{$formId}-nav-btn-down" type="button">
135 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-up"><line x1="12" y1="19" x2="12" y2="5"></line><polyline points="5 12 12 5 19 12"></polyline></svg>
136 </button>
137 </div>
138 </div>
139 NAVBTNMARKUP;
140 }
141 $navBtnContainer = '';
142 if ($navigationSettings->showNavigateBtn || $navigationSettings->showBranding) {
143 $navBtnContainer = <<<NAVBTNCNTNR
144 <div class="bc{$formId}-nav-btn-container">
145 {$brandingMarkup}
146 {$navBtnMarkup}
147 </div>
148 NAVBTNCNTNR;
149 }
150
151 if ($navigationSettings->show) {
152 return <<<NAVVIEW
153 <div class="bc{$formId}-nav-wrpr">
154 <div class="bc{$formId}-nav-wrpr-cntnt">
155 {$progressMarkup}
156 {$navBtnContainer}
157 </div>
158 </div>
159 NAVVIEW;
160 }
161 return '';
162 }
163
164 public function getStepButtonsView($fieldData, $stepSettings)
165 {
166 $formId = $this->_formId;
167 $isFieldRequired = !empty($fieldData->valid->req) && $fieldData->valid->req;
168 $btnTxt = $isFieldRequired ? $stepSettings->nextBtnTxt : $stepSettings->btnTxt;
169 $btnPreIcn = $this->conversationalSettingsIcon($stepSettings, 'btnPreIcn', 'btn-pre-icon', 'Button Leading Icon');
170 $btnSufIcn = $this->conversationalSettingsIcon($stepSettings, 'btnSufIcn', 'btn-suf-icon', 'Button Trailing Icon');
171 $hiddenClass = $isFieldRequired ? 'bc-grid-hide' : '';
172 $stepHints = !empty($stepSettings->stepHints) ? $stepSettings->stepHints : '';
173
174 $btnWrapperMarkup = <<<BTNWRAPPERMARKUP
175 <div class="{$hiddenClass} bc{$formId}-step-btn-wrpr">
176 <div class="bc{$formId}-step-btn-inner-wrpr">
177 <div class="bc{$formId}-step-btn-cntnt">
178 <button class="bc{$formId}-btn bc{$formId}-btn-ok" type="button">
179 {$btnPreIcn}
180 {$btnTxt}
181 {$btnSufIcn}
182 </button>
183 <span class="bc{$formId}-step-hints">
184 {$stepHints}
185 </span>
186 </div>
187 </div>
188 </div>
189 BTNWRAPPERMARKUP;
190
191 return $btnWrapperMarkup;
192 }
193
194 public static function getStepLayout($formID, $imageContent, $fieldContent, $layoutName, $layoutClassNames = '')
195 {
196 $imageContentWrapper = <<<IMAGECONTENTWRAPPER
197 <div class="bc{$formID}-step-img-cntnr">
198 <picture class="bc{$formID}-step-img-wrpr">
199 {$imageContent}
200 </picture>
201 </div>
202 IMAGECONTENTWRAPPER;
203 $imageContentWrapper = $layoutName === 'normal-layout' ? '' : $imageContentWrapper;
204
205 return <<<STEPLAYOUT
206 <div class="bc{$formID}-step-wrapper bc{$formID}-step bc-step-deactive {$layoutClassNames}">
207 <div class="bc{$formID}-step-content">
208 {$imageContentWrapper}
209 <div class="bc{$formID}-step-fld-wrpr">
210 {$fieldContent}
211 </div>
212 </div>
213 </div>
214 STEPLAYOUT;
215 }
216
217 public function conversationalSettingsIcon($data, $icnPropName, $element, $alt = 'Image')
218 {
219 if (Helpers::property_exists_nested($data, $icnPropName, '', 1)) {
220 $url = esc_url($data->$icnPropName);
221 return <<<ICON
222 <img
223 class="bc{$this->_formId}-{$element}"
224 src="{$url}"
225 alt={$alt}
226 />
227 ICON;
228 }
229 return '';
230 }
231
232 public function filterConversationalAllowedFields($layout, $fields)
233 {
234 $ignoreFields = $this::getConversationalIgnoredFields();
235 $newLayouts = (object) ['lg' => []];
236 foreach ($layout->lg as $row) {
237 if (!in_array($fields->{$row->i}->typ, $ignoreFields)) {
238 $newLayouts->lg[] = $row;
239 }
240 }
241 return $newLayouts;
242 }
243
244 public static function getConversationalIgnoredFields()
245 {
246 return [
247 'button',
248 'divider',
249 'title',
250 'html',
251 'recaptcha',
252 'turnstile',
253 'image',
254 'stripe',
255 'paypal',
256 'razorpay',
257 ];
258 }
259
260 public function getMergedStepSettings($stepPropertyName){
261 $allStepsSettings = $this->_stepListObject->allSteps;
262 $stepSettings = !empty($this->_stepListObject->{$stepPropertyName}) ? $this->_stepListObject->{$stepPropertyName} : (object) [];
263 $mergedSettings = (object) array_merge((array) $allStepsSettings, (array) $stepSettings);
264
265 return $mergedSettings;
266 }
267 }
268