PluginProbe
Booking Calendar / 11.8.4
Booking Calendar v11.8.4
11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 All 204 releases
← All changes | includes/save-load-option/_src/save-load-option.js +35 -56 11.211.8.4 View file →
@@ -1,4 +1,4 @@
1 1 /**
2 2 * General Option Loader/Saver (client)
3 3 *
4 4 * - Provides:
@@ -159,18 +159,15 @@
159 159 }
160 160
161 161 var wpbc_uix_autosave_registry = {};
162 162
163 - function wpbc_uix_get_option_save_config($el) {
164 - return {
165 - nonce : $el.data('wpbc-u-save-nonce'),
166 - nonce_action : $el.data('wpbc-u-save-action'),
167 - data_name : $el.data('wpbc-u-save-name'),
168 - fields_raw : $el.data('wpbc-u-save-fields') || '',
169 - inline_value : wpbc_uix_read_attr_or_data($el, 'data-wpbc-u-save-value', 'wpbc-u-save-value'),
170 - json : wpbc_uix_read_attr_or_data($el, 'data-wpbc-u-save-value-json', 'wpbc-u-save-value-json'),
171 - save_mode : $el.data('wpbc-u-save-mode') || $el.attr('data-wpbc-u-save-mode') || '',
172 - value_from_selector: $el.data('wpbc-u-save-value-from') || $el.attr('data-wpbc-u-save-value-from')
163 + function wpbc_uix_get_option_save_config($el) {
164 + return {
165 + data_name : $el.data('wpbc-u-save-name'),
166 + fields_raw : $el.data('wpbc-u-save-fields') || '',
167 + inline_value : wpbc_uix_read_attr_or_data($el, 'data-wpbc-u-save-value', 'wpbc-u-save-value'),
168 + json : wpbc_uix_read_attr_or_data($el, 'data-wpbc-u-save-value-json', 'wpbc-u-save-value-json'),
169 + value_from_selector: $el.data('wpbc-u-save-value-from') || $el.attr('data-wpbc-u-save-value-from')
173 170 };
174 171 }
175 172
176 173 function wpbc_uix_build_option_save_payload($el, cfg) {
@@ -223,22 +220,18 @@
223 220 if (!cfg.data_name) {
224 221 return;
225 222 }
226 223
227 - wpbc_uix_autosave_registry[cfg.data_name] = {
228 - nonce : cfg.nonce,
229 - nonce_action: cfg.nonce_action,
230 - data_name : cfg.data_name,
231 - payload : wpbc_uix_build_option_save_payload($el, cfg),
232 - save_mode : cfg.save_mode,
233 - fields_raw : cfg.fields_raw,
234 - dirty : !!is_dirty,
224 + wpbc_uix_autosave_registry[cfg.data_name] = {
225 + data_name : cfg.data_name,
226 + payload : wpbc_uix_build_option_save_payload($el, cfg),
227 + dirty : !!is_dirty,
235 228 el : el
236 229 };
237 230 }
238 231
239 - function wpbc_uix_save_autosave_registry_entry(entry) {
240 - if (!entry || !entry.dirty || !entry.nonce || !entry.nonce_action || !entry.data_name || entry.payload === null) {
232 + function wpbc_uix_save_autosave_registry_entry(entry) {
233 + if (!entry || !entry.dirty || !entry.data_name || entry.payload === null || !w.wpbc_option_saver_loader_config || !w.wpbc_option_saver_loader_config.save_nonce) {
241 234 return;
242 235 }
243 236
244 237 $(document).trigger('wpbc:option:beforeSave', [ $(), entry.payload ]);
@@ -245,16 +238,13 @@
245 238
246 239 $.ajax({
247 240 url: w.wpbc_option_saver_loader_config.ajax_url,
248 241 type: 'POST',
249 - data: {
250 - action: w.wpbc_option_saver_loader_config.action_save,
251 - nonce: entry.nonce,
252 - nonce_action: entry.nonce_action,
253 - data_name: entry.data_name,
254 - data_value: entry.payload,
255 - data_mode: entry.save_mode,
256 - data_fields: (entry.save_mode === 'split' ? String(entry.fields_raw || '') : '')
242 + data: {
243 + action: w.wpbc_option_saver_loader_config.action_save,
244 + nonce: w.wpbc_option_saver_loader_config.save_nonce,
245 + data_name: entry.data_name,
246 + data_value: entry.payload
257 247 }
258 248 })
259 249 .done(function (resp) {
260 250 if (resp && resp.success) {
@@ -283,14 +273,12 @@
283 273 * Save Option - send ajax request to save data.
284 274 *
285 275 * Data attributes:
286 276 * data-wpbc-u-save-name — option key (required)
287 - * data-wpbc-u-save-nonce — nonce value (required)
288 - * data-wpbc-u-save-action — nonce action (required)
277 + * The fixed save nonce is supplied by wpbc_option_saver_loader_config.
289 278 * data-wpbc-u-save-value — RAW scalar to save (optional) (dynamic: read via attr first)
290 279 * data-wpbc-u-save-value-json — JSON string to save (optional) (dynamic: read via attr first)
291 - * data-wpbc-u-save-fields — CSV selectors; values serialized with jQuery.param (optional). Optional allowlist of keys for split mode (CSV).
292 - * data-wpbc-u-save-mode - Optional.: 'split' | '' -- Optional: split JSON object into separate options server-side.
280 + * data-wpbc-u-save-fields — CSV selectors serialized with jQuery.param (optional). Server policy owns the writable-key allowlist.
293 281 * data-wpbc-u-save-value-from — OPTIONAL selector to read scalar from (checkbox => On/Off)
294 282 * data-wpbc-u-busy-text — custom text during AJAX (optional)
295 283 * data-wpbc-u-save-callback — window function name to call on success (optional)
296 284 *
@@ -305,18 +293,15 @@
305 293 }
306 294
307 295 var $el = $(el);
308 296
309 - // Static values can be read from .data().
310 - var nonce = $el.data('wpbc-u-save-nonce');
311 - var nonce_action = $el.data('wpbc-u-save-action');
312 - var data_name = $el.data('wpbc-u-save-name');
297 + var nonce = w.wpbc_option_saver_loader_config.save_nonce;
298 + var data_name = $el.data('wpbc-u-save-name');
313 299
314 300 // Dynamic values MUST prefer attribute read (fresh), fallback to .data().
315 301 var fields_raw = $el.data('wpbc-u-save-fields') || '';
316 302 var inline_value = wpbc_uix_read_attr_or_data($el, 'data-wpbc-u-save-value', 'wpbc-u-save-value');
317 303 var json = wpbc_uix_read_attr_or_data($el, 'data-wpbc-u-save-value-json', 'wpbc-u-save-value-json');
318 - var save_mode = $el.data('wpbc-u-save-mode') || $el.attr('data-wpbc-u-save-mode') || '';
319 304
320 305 // Optional: compute scalar from another control selector at click time.
321 306 var value_from_selector = $el.data('wpbc-u-save-value-from') || $el.attr('data-wpbc-u-save-value-from');
322 307
@@ -322,10 +307,10 @@
322 307
323 308 var cb_id = $el.data('wpbc-u-save-callback');
324 309 var cb_fn = (cb_id && typeof w[cb_id] === 'function') ? w[cb_id] : null;
325 310
326 - if (!nonce || !nonce_action || !data_name) {
327 - console.error('WPBC | missing nonce/action/name');
311 + if (!nonce || !data_name) {
312 + console.error('WPBC | missing nonce/name');
328 313 return;
329 314 }
330 315
331 316 var payload = '';
@@ -387,20 +372,13 @@
387 372
388 373 $.ajax({
389 374 url: w.wpbc_option_saver_loader_config.ajax_url,
390 375 type: 'POST',
391 - data: {
392 - action: w.wpbc_option_saver_loader_config.action_save,
393 - nonce: nonce,
394 - nonce_action: nonce_action,
395 - data_name: data_name,
396 - data_value: payload,
397 -
398 - // Optional: split JSON object into separate options server-side.
399 - data_mode: save_mode,
400 -
401 - // Optional allowlist of keys for split mode (CSV).
402 - data_fields: (save_mode === 'split' ? String(fields_raw || '') : '')
376 + data: {
377 + action: w.wpbc_option_saver_loader_config.action_save,
378 + nonce: nonce,
379 + data_name: data_name,
380 + data_value: payload
403 381 }
404 382 })
405 383 .done(function (resp) {
406 384
@@ -520,10 +498,10 @@
520 498
521 499 var cb_id = $el.data('wpbc-u-load-callback');
522 500 var cb_fn = (cb_id && typeof w[cb_id] === 'function') ? w[cb_id] : null;
523 501
524 - if (!name) {
525 - console.error('WPBC | missing data-wpbc-u-load-name');
502 + if (!name || !w.wpbc_option_saver_loader_config.load_nonce) {
503 + console.error('WPBC | missing load nonce/name');
526 504 return;
527 505 }
528 506
529 507 $(document).trigger('wpbc:option:beforeLoad', [ $el, name ]);
@@ -531,11 +509,12 @@
531 509
532 510 $.ajax({
533 511 url: w.wpbc_option_saver_loader_config.ajax_url,
534 512 type: 'GET',
535 - data: {
536 - action: w.wpbc_option_saver_loader_config.action_load,
537 - data_name: name
513 + data: {
514 + action: w.wpbc_option_saver_loader_config.action_load,
515 + nonce: w.wpbc_option_saver_loader_config.load_nonce,
516 + data_name: name
538 517 }
539 518 })
540 519 .done(function (resp) {
541 520 if (resp && resp.success) {