PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / 3.2.2
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder v3.2.2
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 2.10.2 All 137 releases
bit-form / includes / Frontend / StandaloneFormView.php

StandaloneFormView.php in Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder 3.2.2, at includes/Frontend/StandaloneFormView.php

149 lines 5.1 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;
4
5 use BitCode\BitForm\Core\Database\FormModel;
6 use BitCode\BitForm\Core\Form\FormManager;
7 use BitCode\BitForm\Core\Util\Render;
8 use BitCode\BitForm\Frontend\Form\FrontendFormHandler;
9
10 class StandaloneFormView
11 {
12 public static function preview()
13 {
14 if (!(current_user_can('manage_options') || current_user_can('manage_bitform'))) {
15 auth_redirect();
16 return;
17 }
18 // $requestUri = isset($_SERVER['REQUEST_URI']) ? wp_unslash($_SERVER['REQUEST_URI']) : '';
19 // ('Request URI: ' . $requestUri);
20 // $uri = explode('/', rtrim($requestUri, '/'));
21 // Read-only: form ID from query string for view dispatch. No state mutation.
22 $formID = isset($_REQUEST['bitform-form-view']) && is_scalar($_REQUEST['bitform-form-view']) ? intval(sanitize_text_field(wp_unslash($_REQUEST['bitform-form-view']))) : null;
23 if (!is_array($formID) && is_numeric($formID)) {
24 $attr = ['form_id' => $formID, 'form_preview' => true];
25
26 $frontendFormHandler = new FrontendFormHandler();
27 $formViewObject = $frontendFormHandler->handleFrontendRenderRequest($attr);
28 if ('string' === gettype($formViewObject)) {
29 Render::view('views/form-not-found');
30 exit;
31 }
32 $formHTML = $formViewObject->html;
33 $font = $formViewObject->font;
34 $bfGlobals = $formViewObject->bfGlobals;
35 $formContent = isset($formViewObject->formContent) ? $formViewObject->formContent : null;
36
37 set_transient('bitform_form_preview', true);
38 $frontendFormHandler->generateJs($formID);
39 $title = 'BitForm Preview page';
40 Render::view('views/preview-page', compact('formID', 'title', 'formHTML', 'font', 'bfGlobals', 'formContent'));
41 }
42 }
43
44 private static function getCustomUrlFormId()
45 {
46 $urlMap = get_transient('bitform_standalone_url_map');
47 if (false === $urlMap) {
48 $urlMap = self::buildStandaloneUrlMap();
49 set_transient('bitform_standalone_url_map', $urlMap, DAY_IN_SECONDS);
50 }
51
52 if (empty($urlMap)) {
53 return null;
54 }
55
56 $currentUrl = get_site_url() . (isset($_SERVER['REQUEST_URI']) ? esc_url_raw(wp_unslash($_SERVER['REQUEST_URI'])) : '');
57 $parsedCurrentUrl = wp_parse_url($currentUrl);
58
59 foreach ($urlMap as $formID => $customUrlSlug) {
60 $customUrl = get_site_url() . '/' . $customUrlSlug;
61 $parsedCustomUrl = wp_parse_url($customUrl);
62 $pathMatched = isset($parsedCustomUrl['path']) && $parsedCustomUrl['path'] === ($parsedCurrentUrl['path'] ?? '');
63 if (!$pathMatched) {
64 continue;
65 }
66 if (!isset($parsedCustomUrl['query'])) {
67 return $formID;
68 }
69 parse_str($parsedCustomUrl['query'], $parsedCustomQueries);
70 parse_str($parsedCurrentUrl['query'] ?? '', $parsedCurrentQueries);
71 if (empty(array_diff_assoc($parsedCustomQueries, $parsedCurrentQueries))) {
72 return $formID;
73 }
74 }
75
76 return null;
77 }
78
79 private static function buildStandaloneUrlMap()
80 {
81 $formModel = new FormModel();
82 $forms = $formModel->get(['id', 'form_content']);
83 $urlMap = [];
84 if (is_wp_error($forms) || !is_array($forms)) {
85 return $urlMap;
86 }
87 foreach ($forms as $form) {
88 $formContent = json_decode($form->form_content);
89 if (empty($formContent->formInfo->standaloneSettings->active)) {
90 continue;
91 }
92 $standaloneSettings = $formContent->formInfo->standaloneSettings;
93 if (empty($standaloneSettings->customUrl)) {
94 continue;
95 }
96 $urlMap[$form->id] = $standaloneSettings->customUrl;
97 }
98 return $urlMap;
99 }
100
101 public static function standaloneFormView()
102 {
103 if (is_admin()) {
104 return;
105 }
106 // Read-only: form ID from query string for standalone view dispatch. No state mutation.
107 $hasBitFormParam = isset($_GET['bit-form']);
108 $formID = isset($_GET['bit-form']) ? sanitize_text_field(wp_unslash($_GET['bit-form'])) : '';
109
110 if (empty($formID)) {
111 $formID = self::getCustomUrlFormId();
112 }
113
114 if (empty($formID)) {
115 return '';
116 }
117
118 $formID = intval($formID);
119 $attr = ['form_id' => $formID, 'form_preview' => true];
120
121 $FormManager = FormManager::getInstance($formID);
122 $formContent = $FormManager->getFormContent();
123 if (empty($formContent->formInfo->standaloneSettings->active)) {
124 return;
125 }
126
127 $standaloneSettings = $formContent->formInfo->standaloneSettings;
128
129 $frontendFormHandler = new FrontendFormHandler();
130 $formViewObject = $frontendFormHandler->handleFrontendRenderRequest($attr);
131 if ('string' === gettype($formViewObject)) {
132 Render::view('views/form-not-found');
133 exit;
134 }
135
136 $formHTML = $formViewObject->html;
137 $font = $formViewObject->font;
138 $bfGlobals = $formViewObject->bfGlobals;
139 $formContent = isset($formViewObject->formContent) ? $formViewObject->formContent : null;
140
141 set_transient('bitform_form_preview', true);
142 $frontendFormHandler->generateJs($formID);
143 $title = !empty($standaloneSettings->pageTitle) ? $standaloneSettings->pageTitle : 'Bit Form';
144 Render::view('views/standalone-form', compact('formID', 'title', 'formHTML', 'font', 'bfGlobals', 'formContent'));
145
146 exit(200);
147 }
148 }
149