Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/fluentform/app/Modules/Form/Settings/FormCssJs.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
3
+
namespace FluentForm\App\Modules\Form\Settings;
4
+
5
+
use FluentForm\App\Helpers\Helper;
6
+
use FluentForm\Framework\Helpers\ArrayHelper;
7
+
8
+
class FormCssJs
9
+
{
10
+
/**
11
+
* Request object
12
+
*
13
+
* @var \FluentForm\Framework\Request\Request $request
14
+
*/
15
+
protected $request;
16
+
17
+
public function __construct()
18
+
{
19
+
$this->request = wpFluentForm('request');
20
+
}
21
+
22
+
public function addCustomCssJs($formId)
23
+
{
24
+
if (did_action('fluentform/adding_custom_css_js_' . $formId)) {
25
+
return;
26
+
}
27
+
28
+
do_action('fluentform/adding_custom_css_js_' . $formId, $formId);
29
+
30
+
$metaKeys = ['_custom_form_css', '_custom_form_js'];
31
+
32
+
$metas = (new \FluentForm\App\Services\Settings\Customizer())->get($formId, $metaKeys);
33
+
34
+
foreach ($metas as $metaKey => $metaValue) {
35
+
if ($metaValue) {
36
+
switch ($metaKey) {
37
+
case 'css':
38
+
$css = $metaValue;
39
+
$css = str_replace('{form_id}', $formId, $css);
40
+
$customCss = str_replace('FF_ID', $formId, $css);
41
+
42
+
if ($customCss) {
43
+
$this->addCss($formId, $customCss, 'fluentform_custom_css_' . $formId);
44
+
}
45
+
break;
46
+
case 'js':
47
+
$this->addJs($formId, $metaValue);
48
+
break;
49
+
}
50
+
}
51
+
}
52
+
}
53
+
54
+
public function addStylerCSS($formId, $styles = [])
55
+
{
56
+
$metaKeys = array_merge(
57
+
['_ff_form_styler_css', '_ff_selected_style'],
58
+
$styles
59
+
);
60
+
61
+
$metas = (new \FluentForm\App\Services\Settings\Customizer())->get($formId, $metaKeys);
62
+
63
+
foreach ($styles as $style) {
64
+
if (!$style) {
65
+
continue;
66
+
}
67
+
68
+
if ('ffs_inherit_theme' === $style) {
69
+
continue;
70
+
}
71
+
72
+
$loadCss = ArrayHelper::get($metas, $style);
73
+
74
+
if (!$loadCss) {
75
+
$loadCss = apply_filters('fluentform/build_style_from_theme', '', $formId, $style);
76
+
77
+
// todo: remove this from next version. it's only here to support if the user updates the free version first.
78
+
if (!$loadCss) {
79
+
$selectedStyle = ArrayHelper::get($metas, '_ff_selected_style');
80
+
$selectedStyleCSS = ArrayHelper::get($metas, '_ff_form_styler_css');
81
+
82
+
if ($selectedStyle == $style && $selectedStyleCSS) {
83
+
$loadCss = $selectedStyleCSS;
84
+
}
85
+
}
86
+
}
87
+
88
+
if ($loadCss) {
89
+
$this->addCss($formId, $loadCss, 'fluentform_styler_css_' . $formId . '_' . $style);
90
+
91
+
do_action('fluent_form/loaded_styler_' . $formId . '_' . $style);
92
+
}
93
+
}
94
+
}
95
+
96
+
public function getCss($formId)
97
+
{
98
+
$cssMeta = wpFluent()->table('fluentform_form_meta')
99
+
->where('form_id', $formId)
100
+
->where('meta_key', '_custom_form_css')
101
+
->first();
102
+
103
+
if (!$cssMeta || !$cssMeta->value) {
104
+
return '';
105
+
}
106
+
107
+
$css = $cssMeta->value;
108
+
$css = str_replace('{form_id}', $formId, $css);
109
+
$css = str_replace('FF_ID', $formId, $css);
110
+
return fluentformSanitizeCSS($css);
111
+
}
112
+
113
+
public function getJs($formId)
114
+
{
115
+
$jsMeta = wpFluent()->table('fluentform_form_meta')
116
+
->where('form_id', $formId)
117
+
->where('meta_key', '_custom_form_js')
118
+
->first();
119
+
120
+
if (!$jsMeta || !$jsMeta->value) {
121
+
return '';
122
+
}
123
+
124
+
return $jsMeta->value;
125
+
}
126
+
127
+
public function addCss($formId, $css, $cssId = 'fluentform_custom_css')
128
+
{
129
+
if ($css) {
130
+
$action = false;
131
+
132
+
if (!did_action('wp_head')) {
133
+
$action = 'wp_head';
134
+
} elseif (!did_action('wp_footer')) {
135
+
$action = 'wp_footer';
136
+
}
137
+
138
+
if (Helper::isBlockEditor()) {
139
+
$action = false;
140
+
}
141
+
142
+
if ($action) {
143
+
add_action($action, function () use ($css, $cssId) {
144
+
?>
145
+
<style id="<?php echo esc_attr($cssId); ?>" type="text/css">
146
+
<?php echo fluentformSanitizeCSS($css); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- fluentformSanitizeCSS() removes HTML tags, CSS is safe in style context ?>
147
+
</style>
148
+
149
+
<?php
150
+
}, 99);
151
+
} else {
152
+
?>
153
+
<style id="<?php echo esc_attr($cssId); ?>" type="text/css">
154
+
<?php echo fluentformSanitizeCSS($css); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- fluentformSanitizeCSS() removes HTML tags, CSS is safe in style context ?>
155
+
</style>
156
+
<?php
157
+
}
158
+
}
159
+
}
160
+
161
+
public function addJs($formId, $customJS)
162
+
{
163
+
if (trim($customJS)) {
164
+
add_action('wp_footer', function () use ($formId, $customJS) {
165
+
?>
166
+
<script type="text/javascript">
167
+
jQuery(document.body).on('fluentform_init_<?php echo esc_attr($formId); ?>',
168
+
function(event, data) {
169
+
var $form = jQuery(data[0]);
170
+
var formId = "<?php echo esc_attr($formId); ?>";
171
+
var $ = jQuery;
172
+
try {
173
+
<?php echo fluentform_kses_js($customJS); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- fluentform_kses_js() removes script tags, JS is safe in script context ?>
174
+
} catch (e) {
175
+
console.warn('Error in custom JS of Fluentform ID: ' + formId);
176
+
console.error(e);
177
+
}
178
+
});
179
+
</script>
180
+
<?php
181
+
}, 100);
182
+
}
183
+
}
184
+
185
+
/**
186
+
* Get settings for a particular form by id
187
+
*/
188
+
public function getSettingsAjax()
189
+
{
190
+
$formId = absint($this->request->get('form_id'));
191
+
wp_send_json_success([
192
+
'custom_css' => $this->getData($formId, '_custom_form_css'),
193
+
'custom_js' => $this->getData($formId, '_custom_form_js'),
194
+
], 200);
195
+
}
196
+
197
+
/**
198
+
* Save settings for a particular form by id
199
+
*/
200
+
public function saveSettingsAjax()
201
+
{
202
+
if (!fluentformCanUnfilteredHTML()) {
203
+
wp_send_json_error([
204
+
'message' => __('You need unfiltered_html permission to save Custom CSS & JS', 'fluentform'),
205
+
], 423);
206
+
}
207
+
208
+
$formId = absint($this->request->get('form_id'));
209
+
210
+
$css = fluentformSanitizeCSS($this->request->get('custom_css'));
211
+
$js = fluentform_kses_js($this->request->get('custom_js'));
212
+
213
+
$this->store($formId, '_custom_form_css', $css);
214
+
$this->store($formId, '_custom_form_js', $js);
215
+
216
+
wp_send_json_success([
217
+
'message' => __('Custom CSS & JS successfully updated', 'fluentform'),
218
+
], 200);
219
+
}
220
+
221
+
protected function getData($formId, $metaKey)
222
+
{
223
+
$row = wpFluent()->table('fluentform_form_meta')
224
+
->where('form_id', $formId)
225
+
->where('meta_key', $metaKey)
226
+
->first();
227
+
if ($row) {
228
+
return $row->value;
229
+
}
230
+
return '';
231
+
}
232
+
233
+
protected function store($formId, $metaKey, $metaValue)
234
+
{
235
+
$row = wpFluent()->table('fluentform_form_meta')
236
+
->where('form_id', $formId)
237
+
->where('meta_key', $metaKey)
238
+
->first();
239
+
240
+
if (!$row) {
241
+
return wpFluent()->table('fluentform_form_meta')
242
+
->insertGetId([
243
+
'form_id' => $formId,
244
+
'meta_key' => $metaKey,
245
+
'value' => $metaValue,
246
+
]);
247
+
}
248
+
249
+
return wpFluent()->table('fluentform_form_meta')
250
+
->where('id', $row->id)
251
+
->update([
252
+
'value' => $metaValue,
253
+
]);
254
+
}
255
+
}
256
+