PluginProbe
WP Data Access – App Builder for Tables, Forms, Dashboards, Charts & Maps / 5.5.87
WP Data Access – App Builder for Tables, Forms, Dashboards, Charts & Maps v5.5.87
5.5.87 5.5.85 5.5.84 5.5.83 5.5.82 5.5.81 5.5.80 5.5.79 5.5.77 5.5.76 5.5.75 5.5.73 5.5.72 5.5.22 5.5.23 5.5.29 5.5.3 5.5.31 5.5.32 5.5.34 5.5.35 5.5.36 5.5.37 5.5.4 5.5.40 All 162 releases
wp-data-access / assets / js / wpda_admin.js

wpda_admin.js in WP Data Access – App Builder for Tables, Forms, Dashboards, Charts & Maps 5.5.87, at assets/js/wpda_admin.js

968 lines 27.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 function wpda_show_table_actions( schema_name, table_name, rownum, wpnonce, dbo_type, loading ) {
2 jQuery('#wpda_admin_menu_actions_' + rownum).toggle();
3 wpda_toggle_row_actions(rownum);
4 if (jQuery('#wpda_admin_menu_actions_' + rownum).html()===loading) {
5 url = location.pathname + '?action=wpda_show_table_actions';
6 jQuery.ajax({
7 method: 'POST',
8 url: url,
9 data: {
10 wpdaschema_name: schema_name,
11 table_name: table_name,
12 _wpnonce: wpnonce,
13 dbo_type: dbo_type,
14 rownum: rownum
15 }
16 }).done(
17 function(msg) {
18 jQuery('#wpda_admin_menu_actions_' + rownum).html(msg);
19 }
20 );
21 }
22 }
23
24 function wpda_toggle_row_actions( rownum ) {
25 if (jQuery('#wpda_admin_menu_actions_' + rownum).is(":visible")) {
26 jQuery("#rownum_" + rownum + " td div").removeClass("row-actions");
27 } else {
28 jQuery("#rownum_" + rownum + " td div").addClass("row-actions");
29 }
30 }
31
32 function wpda_main_export_start() {
33 jQuery("#wpda_main_export_form").submit();
34 jQuery("#wpda_row_export_anchor").empty();
35
36 return false;
37 }
38
39 function wpda_main_export(schemaName, wpnonce, selectedRows) {
40 jQuery("#wpda_main_export_form__schema_name").val(schemaName);
41 jQuery("#wpda_main_export_form__wpnonce").val(wpnonce);
42
43 rows = JSON.parse(selectedRows);
44 for (var i=0; i<rows.length; i++) {
45 jQuery("#wpda_main_export_form").append("<input type='hidden' name='table_names[]' value='" + rows[i] + "' />");
46 }
47
48 jQuery("#wpda_row_export_anchor").append(
49 "<button class='button button-primary wpda_row_export_button' onclick='return wpda_main_export_start();'>Download export</button>"
50 );
51 }
52
53 function wpda_table_export(schemaName, tableNames, wpnonce, formatType, includeTableSettings) {
54 jQuery("#wpda_table_export_form__schema_name").val(schemaName);
55 jQuery("#wpda_table_export_form__table_names").val(tableNames);
56 jQuery("#wpda_table_export_form__format_type").val(formatType);
57 jQuery("#wpda_table_export_form__wpnonce").val(wpnonce);
58 jQuery("#wpda_table_export_form__include_table_settings").val(includeTableSettings);
59
60 jQuery("#wpda_table_export_form").submit();
61 }
62
63 function wpda_row_export_start() {
64 jQuery("#wpda_row_export_form").submit();
65 jQuery("#wpda_row_export_anchor").empty();
66
67 return false;
68 }
69
70 function wpda_row_export(pid, schemaName, tableNames, wpnonce, formatType, mysqlSet, showCreate, showComments, selectedRows) {
71 jQuery("#wpda_row_export_form__pid").val(pid);
72 jQuery("#wpda_row_export_form__schema_name").val(schemaName);
73 jQuery("#wpda_row_export_form__table_names").val(tableNames);
74 jQuery("#wpda_row_export_form__mysql_set").val(mysqlSet);
75 jQuery("#wpda_row_export_form__show_create").val(showCreate);
76 jQuery("#wpda_row_export_form__show_comments").val(showComments);
77 jQuery("#wpda_row_export_form__format_type").val(formatType);
78 jQuery("#wpda_row_export_form__wpnonce").val(wpnonce);
79
80 rows = JSON.parse(selectedRows);
81 for (var column in rows) {
82 for (var i=0; i<rows[column].length; i++) {
83 jQuery("#wpda_row_export_form").append("<input type='hidden' name='" + column + "[]' value='" + rows[column][i] + "' />");
84 }
85 }
86
87 jQuery("#wpda_row_export_anchor").append(
88 "<button class='button button-primary wpda_row_export_button' onclick='return wpda_row_export_start();'>Download " + (formatType==='' ? 'SQL' : formatType) + " export</button>"
89 );
90 }
91
92 function wpda_show_notice( value ) {
93 if (
94 value==='bulk-delete' ||
95 value==='bulk-drop' ||
96 value==='bulk-truncate'
97 ) {
98 return confirm('You are about to permanently delete these items from your site.\nThis action cannot be undone.\n\'Cancel\' to stop, \'OK\' to delete.');
99 }
100 }
101
102 function wpda_action_button() {
103 action1 = jQuery("#wpda_main_form :input[name='action']").val();
104 if (action1!=="-1") {
105 return wpda_show_notice(action1);
106 }
107 action2 = jQuery("#wpda_main_form :input[name='action2']").val();
108 if (action2!=="-1") {
109 return wpda_show_notice(action2);
110 }
111 return true;
112 }
113
114 // Source: https://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery
115 var entityMap = {
116 '&': '&amp;',
117 '<': '&lt;',
118 '>': '&gt;',
119 '"': '&quot;',
120 "'": '&#39;',
121 '/': '&#x2F;',
122 '`': '&#x60;',
123 '=': '&#x3D;'
124 };
125
126 // Source: https://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery
127 function escapeHtml(string) {
128 return String(string).replace(/[&<>"'`=\/]/g, function (s) {
129 return entityMap[s];
130 });
131 }
132
133 function submit_table_settings(rownum, schema_name, table_name) {
134 table_settings = {};
135
136 if (jQuery("input:radio[name ='" + table_name + "_row_count_estimate']:checked").val() === "true") {
137 table_settings['row_count_estimate'] = true;
138 } else if (jQuery("input:radio[name ='" + table_name + "_row_count_estimate']:checked").val() === "false") {
139 table_settings['row_count_estimate'] = false;
140 } else {
141 table_settings['row_count_estimate'] = null;
142 }
143
144 table_settings['row_count_estimate_value'] = jQuery("input:radio[name ='" + table_name + "_row_count_estimated_value']:checked").val();
145 table_settings['row_count_estimate_value_hard'] = jQuery("#" + table_name + "_row_count_estimated_value_hard").val();
146
147 table_settings['query_buffer_size'] =
148 jQuery('#' + table_name + '_query_buffer_size').val();
149
150 table_settings['row_level_security'] =
151 jQuery('#' + table_name + '_row_level_security').is(':checked') ? 'true' : 'false';
152
153 table_settings['hyperlink_definition'] =
154 jQuery('#' + table_name + 'table_top_setting_hyperlink_definition_json').is(':checked') ? 'json' : 'text';
155
156 jsonData = {};
157 jsonData['request_type'] = 'table_settings';
158 jsonData['table_settings'] = table_settings;
159 jsonData['unused'] = jQuery('#wpda_' + rownum + '_sql_dml').val();
160
161 // console.log(jsonData);
162 // console.log(JSON.stringify(jsonData));
163
164 // Submit
165 wpda_rest_api(
166 'save-settings',
167 {
168 action: 'table_settings',
169 dbs: schema_name,
170 tbl: table_name,
171 settings: JSON.stringify(jsonData),
172 },
173 (function(data) {
174 submitSettingsCallbackOk(data, rownum);
175 }),
176 submitSettingsCallbackError
177 );
178
179 return false;
180 }
181
182 function submitSettingsCallbackOk(response, rownum) {
183 if (response.code!==undefined && response.message!==undefined) {
184 switch(response.code) {
185 case "ok":
186 jQuery("#wpda_" + rownum + "_sql_dml").val("UPDATE");
187 jQuery.notify(response.message, "success");
188 break;
189 case "error":
190 jQuery.notify(response.message, "error");
191 break;
192 default:
193 jQuery.notify("Application error! Please contact the plugin development team.", "error");
194 }
195 } else {
196 submitSettingsCallbackError(response);
197 }
198 }
199
200 function submitSettingsCallbackError(response) {
201 if (response.code!==undefined && response.message!==undefined) {
202 switch(response.code) {
203 case "error":
204 jQuery.notify(response.message, "error");
205 break;
206 default:
207 jQuery.notify("Application error! Please contact the plugin development team.", "error");
208 }
209 } else {
210 jQuery.notify("Application error! Please contact the plugin development team.", "error");
211 }
212 }
213
214 function submit_column_settings(rownum, schema_name, table_name ) {
215 custom_settings = {};
216 list_labels = {};
217 form_labels = {};
218 column_media = {};
219 unused = {};
220
221 jQuery('#wpda_table_settings_' + rownum + ' .wpda_table_setting_item').each(function () {
222 element_id = jQuery(this).attr('id');
223 element_value = jQuery(this).val();
224 element_type = jQuery(this).attr('type');
225 is_custom_element = false;
226 for (i=0; i<custom_column_settings.length; i++) {
227 if (element_id.startsWith(custom_column_settings[i])) {
228 element_name = element_id.substr(custom_column_settings[i].length);
229 if (element_type==="checkbox") {
230 element_value = jQuery(this).is(':checked');
231 }
232 custom_settings[element_id] = element_value;
233 is_custom_element = true;
234 }
235 }
236 if (!is_custom_element) {
237 if (element_id.startsWith("list_label_")) {
238 element_name = element_id.substr(11);
239 list_labels[element_name] = element_value;
240 } else if (element_id.startsWith("form_label_")) {
241 element_name = element_id.substr(11);
242 form_labels[element_name] = element_value;
243 } else if (element_id.startsWith("column_media_")) {
244 element_name = element_id.substr(13);
245 element_old_value = jQuery('#column_media_' + element_name + '_old').val();
246 if (element_value !== element_old_value) {
247 media_dml = jQuery('#column_media_' + element_name + '_dml').val();
248 column_media[element_name] = {'value': element_value, 'dml': media_dml};
249 }
250 }
251 }
252 });
253
254 unused["sql_dml"] = jQuery('#wpda_' + rownum + '_sql_dml').val();
255
256 jsonData = {};
257 jsonData['request_type'] = 'column_settings';
258 jsonData['custom_settings'] = custom_settings;
259 jsonData['list_labels'] = list_labels;
260 jsonData['form_labels'] = form_labels;
261 jsonData['column_media'] = column_media;
262 jsonData['unused'] = unused;
263
264 // console.log(jsonData);
265 // console.log(JSON.stringify(jsonData));
266
267 // Submit
268 wpda_rest_api(
269 'save-settings',
270 {
271 action: 'column_settings',
272 dbs: schema_name,
273 tbl: table_name,
274 settings: JSON.stringify(jsonData),
275 },
276 (function(data) {
277 submitSettingsCallbackOk(data, rownum);
278 }),
279 submitSettingsCallbackError
280 );
281
282 return false;
283 }
284
285 function submit_hyperlinks(rownum, schema_name, table_name) {
286 hyperlinks = [];
287 unused = {};
288 isvalid = true;
289
290 jQuery("#wpda_" + rownum + "_add_hyperlink_body tr").each(function() {
291 let hyperlink_label, hyperlink_list, hyperlink_form, hyperlink_target, hyperlink_html;
292 jQuery(this).find("td .wpda_action_font").each(function() {
293 switch(jQuery(this).data("id")) {
294 case "hyperlink_label":
295 hyperlink_label = jQuery(this).val();
296 break;
297 case "hyperlink_list":
298 hyperlink_list = jQuery(this).is(':checked');
299 break;
300 case "hyperlink_form":
301 hyperlink_form = jQuery(this).is(':checked');
302 break;
303 case "hyperlink_target":
304 hyperlink_target = jQuery(this).is(':checked');
305 break;
306 case "hyperlink_html":
307 hyperlink_html = jQuery(this).val();
308 break;
309 }
310 });
311
312 if (hyperlink_label===""||hyperlink_html==="") {
313 alert('Hyperlink label and HTML must be entered');
314 isvalid = false;
315 } else {
316 let hyperlink_item = {
317 'hyperlink_label': hyperlink_label,
318 'hyperlink_list': hyperlink_list,
319 'hyperlink_form': hyperlink_form,
320 'hyperlink_target': hyperlink_target,
321 'hyperlink_html': escapeHtml(hyperlink_html)
322 };
323 hyperlinks.push(hyperlink_item);
324 }
325 });
326
327 if (!isvalid) {
328 return false;
329 }
330
331 unused["sql_dml"] = jQuery('#wpda_' + rownum + '_sql_dml').val();
332
333 jsonData = {};
334 jsonData['request_type'] = 'column_settings';
335 jsonData['hyperlinks'] = hyperlinks;
336 jsonData['unused'] = unused;
337
338 // console.log(jsonData);
339 // console.log(JSON.stringify(jsonData));
340
341 // Submit
342 wpda_rest_api(
343 'save-settings',
344 {
345 action: 'column_settings',
346 dbs: schema_name,
347 tbl: table_name,
348 settings: JSON.stringify(jsonData),
349 },
350 (function(data) {
351 submitSettingsCallbackOk(data, rownum);
352 }),
353 submitSettingsCallbackError
354 );
355
356 return false;
357 }
358
359 function submit_dashboard_menus(rownum, schema_name, table_name) {
360 menu = [];
361 isvalid = true;
362
363 jQuery("#wpda_" + rownum + "_add_dashboard_menu_body tr").each(function() {
364 let menu_name, menu_slug, menu_role, menu_id;
365 jQuery(this).find("td .wpda_action_font").each(function() {
366 switch(jQuery(this).data("id")) {
367 case "menu_name":
368 menu_name = jQuery(this).val();
369 break;
370 case "menu_slug":
371 menu_slug = jQuery(this).val();
372 break;
373 case "menu_role":
374 menu_role = jQuery(this).val();
375 break;
376 case "menu_id":
377 menu_id = jQuery(this).val();
378 break;
379 }
380 });
381
382 if (menu_name===""||menu_slug==="") {
383 alert('Menu name and slug must be entered');
384 isvalid = false;
385 } else {
386 let menu_item = {
387 'menu_name': menu_name,
388 'menu_slug': menu_slug,
389 'menu_role': menu_role,
390 'menu_id': menu_id
391 };
392 menu.push(menu_item);
393 }
394 });
395
396 if (!isvalid) {
397 return false;
398 }
399
400 jsonData = {};
401 jsonData['request_type'] = 'dashboard_menus';
402 jsonData['menu'] = menu;
403
404 if (wpdaDeletedDashboardMenus[rownum]!==undefined) {
405 jsonData['delete'] = wpdaDeletedDashboardMenus[rownum];
406 }
407
408 // console.log(jsonData);
409 // console.log(JSON.stringify(jsonData));
410
411 // Submit
412 wpda_rest_api(
413 'save-settings',
414 {
415 action: 'dashboard_menus',
416 dbs: schema_name,
417 tbl: table_name,
418 settings: JSON.stringify(jsonData),
419 },
420 (function(data) {
421 submitMenusCallbackOk(data, rownum);
422 }),
423 submitSettingsCallbackError
424 );
425
426 return false;
427 }
428
429 function submitMenusCallbackOk(response, rownum) {
430 if (response.code!==undefined && response.message!==undefined) {
431 switch(response.code) {
432 case "ok":
433 jQuery.notify(response.message, "success");
434 wpdaDeletedDashboardMenus[rownum] = [];
435 if (response.data!==undefined && Array.isArray(response.data)) {
436 for (let i=0; i<response.data.length; i++) {
437 jQuery("#wpda_" + rownum + "_add_dashboard_menu_body tr .wpda_dashboard_menu_id").each(function() {
438 if (jQuery(this).val()==="") {
439 jQuery(this).val(response.data[i].menu_id);
440 }
441 });
442 }
443 }
444 break;
445 case "error":
446 jQuery.notify(response.message, "error");
447 break;
448 default:
449 jQuery.notify("Application error! Please contact the plugin development team.", "error");
450 }
451 } else {
452 submitSettingsCallbackError(response);
453 }
454 }
455
456 function settab(rownum, tab) {
457 for (i = 1; i <= 6; i++) {
458 jQuery("#" + rownum + "-sel-" + i.toString()).removeClass('nav-tab-active');
459 jQuery("#" + rownum + "-tab-" + i.toString()).hide();
460 }
461 jQuery("#" + rownum + "-sel-" + tab).addClass('nav-tab-active');
462 jQuery("#" + rownum + "-tab-" + tab).show();
463 }
464
465 function backup_respository_tables(
466 app_table_name,
467 app_container_table_name,
468 app_apps_table_name,
469 table_settings_table_name,
470 media_table_name,
471 design_table_name,
472 data_projects_project_name,
473 data_projects_page_name,
474 data_projects_table_name,
475 data_publication_table_name,
476 menus_table_name,
477 csv_import_table_name,
478 logging_table_name
479 ) {
480 jQuery('#app_table_name').val(app_table_name);
481 jQuery('#app_container_table_name').val(app_container_table_name);
482 jQuery('#app_apps_table_name').val(app_apps_table_name);
483 jQuery('#table_settings_table_name').val(table_settings_table_name);
484 jQuery('#media_table_name').val(media_table_name);
485 jQuery('#design_table_name').val(design_table_name);
486 jQuery('#data_projects_project_name').val(data_projects_project_name);
487 jQuery('#data_projects_page_name').val(data_projects_page_name);
488 jQuery('#data_projects_table_name').val(data_projects_table_name);
489 jQuery('#data_publication_table_name').val(data_publication_table_name);
490 jQuery('#menus_table_name').val(menus_table_name);
491 jQuery('#csv_import_table_name').val(csv_import_table_name);
492 jQuery('#logging_table_name').val(logging_table_name);
493
494 jQuery('#wpda-download-backup').submit();
495 }
496
497 function restore_respository_tables() {
498 if (!confirm("Restore repository tables? This action cannot be undone!\n\nIt might be wise to backup your actual repository tables first...")) {
499 return;
500 }
501
502 jQuery('#restore_app_table_name').val(jQuery("input[name='restore_app_table_name']:checked").val());
503 jQuery('#restore_app_container_table_name').val(jQuery("input[name='restore_app_container_table_name']:checked").val());
504 jQuery('#restore_app_apps_table_name').val(jQuery("input[name='restore_app_apps_table_name']:checked").val());
505 jQuery('#restore_table_settings_table_name').val(jQuery("input[name='restore_table_settings_table_name']:checked").val());
506 jQuery('#restore_media_table_name').val(jQuery("input[name='restore_media_table_name']:checked").val());
507 jQuery('#restore_design_table_name').val(jQuery("input[name='restore_design_table_name']:checked").val());
508 jQuery('#restore_data_projects_project_name').val(jQuery("input[name='restore_data_projects_project_name']:checked").val());
509 jQuery('#restore_data_projects_page_name').val(jQuery("input[name='restore_data_projects_project_name']:checked").val());
510 jQuery('#restore_data_projects_table_name').val(jQuery("input[name='restore_data_projects_table_name']:checked").val());
511 jQuery('#restore_data_publication_table_name').val(jQuery("input[name='restore_data_publication_table_name']:checked").val());
512 jQuery('#restore_menus_table_name').val(jQuery("input[name='restore_menus_table_name']:checked").val());
513 jQuery('#restore_csv_import_table_name').val(jQuery("input[name='restore_csv_import_table_name']:checked").val());
514 jQuery('#restore_logging_table_name').val(jQuery("input[name='restore_logging_table_name']:checked").val());
515
516 jQuery('#restore_date').val(jQuery('.wpda-restore-repository-backup-selected').data('backupDate'));
517
518 jQuery('#wpda-restore-respository').submit();
519 }
520
521 function get_table_row_count(wpnonce, schema_name, table_name) {
522 url = location.pathname + '?action=wpda_get_table_row_count';
523 jQuery.ajax({
524 method: 'POST',
525 url: url,
526 data: {
527 wpda_wpnonce: wpnonce,
528 wpdaschema_name: schema_name,
529 wpdatable_name: table_name
530 }
531 }).done(
532 function(msg) {
533 try {
534 json = JSON.parse(msg);
535 if (json[0].row_count === undefined) {
536 alert('Ajax error: row count failed');
537 } else {
538 jQuery("#" + table_name + "_row_count_estimated_value_hard").val(json[0].row_count);
539 }
540 } catch (e) {
541 alert('Ajax error: ' + e.message);
542 }
543 }
544 );
545 }
546
547 function expandFieldset(id) {
548 if (jQuery("#wpda_table_expand_" + id).is(":visible")) {
549 jQuery("#wpda_field_expand_" + id).removeClass("fa-minus-circle");
550 jQuery("#wpda_field_expand_" + id).addClass("fa-plus-circle");
551 jQuery("#wpda_fieldset_expand_" + id).val("off");
552 jQuery("#wpda_table_expand_" + id).css("display", "none");
553 } else {
554 jQuery("#wpda_field_expand_" + id).removeClass("fa-plus-circle");
555 jQuery("#wpda_field_expand_" + id).addClass("fa-minus-circle");
556 jQuery("#wpda_fieldset_expand_" + id).val("on");
557 jQuery("#wpda_table_expand_" + id).css("display", "table");
558 }
559 }
560
561 function wpda_add_icons_to_dialog_buttons() {
562 jQuery("div.ui-dialog div.ui-dialog-buttonset button").each(function() {
563 switch(jQuery(this).text()) {
564 case "OK":
565 case "Select":
566 case "Close":
567 jQuery(this).prepend('<i class="fas fa-check wpda_icon_on_button"></i> ');
568 break;
569 case "Apply":
570 jQuery(this).prepend('<i class="fas fa-code-commit wpda_icon_on_button"></i> ');
571 break;
572 case "Delete":
573 jQuery(this).prepend('<i class="fas fa-trash wpda_icon_on_button"></i> ');
574 break;
575 case "Keep":
576 jQuery(this).prepend('<i class="fas fa-eraser wpda_icon_on_button"></i> ');
577 break;
578 case "Cancel":
579 jQuery(this).prepend('<i class="fas fa-times-circle wpda_icon_on_button"></i> ');
580 break;
581 }
582 });
583 }
584
585 function wpda_dbinit_admin( schema_name, wpnonce ) {
586 jQuery.ajax({
587 method: 'POST',
588 url: wpda_admin_vars.wpda_ajaxurl + '?action=wpda_dbinit_admin',
589 data: {
590 wpdaschema_name: schema_name,
591 wpnonce: wpnonce,
592 }
593 }).done(
594 function(data) {
595 if (typeof data === "string") {
596 msg = JSON.parse(data);
597 } else {
598 msg = data;
599 }
600 if (msg.status==="OK") {
601 jQuery.notify('Database function wpda_get_wp_user_id() created', 'success');
602 } else {
603 console.log(msg);
604 jQuery.notify(msg.msg, 'error');
605 }
606 }
607 );
608 }
609
610 function wpda_toggle_password(id, e) {
611 // Change input type
612 let elm = document.getElementById(id);
613 if (elm.type === "password") {
614 elm.type = "text";
615 } else {
616 elm.type = "password";
617 }
618
619 // Change icon if applicable
620 let icn = jQuery(e.target);
621 if (icn.hasClass("fa-eye")) {
622 icn.addClass("fa-eye-slash").removeClass("fa-eye");
623 } else if (icn.hasClass("fa-eye-slash")) {
624 icn.addClass("fa-eye").removeClass("fa-eye-slash");
625 }
626 }
627
628 function wpda_alert(title, txt) {
629 jQuery("<p></p>").append(txt).dialog({
630 title: title,
631 modal: true,
632 buttons: {
633 OK: function() {
634 jQuery(this).dialog("close");
635 }
636 }
637 });
638 }
639
640 function wpda_confirm(title, txt) {
641 var defer = jQuery.Deferred();
642
643 jQuery("<p></p>").append(txt).dialog({
644 title: title,
645 modal: true,
646 buttons: {
647 OK: function() {
648 defer.resolve(true);
649 jQuery(this).dialog("close");
650 },
651 CANCEL: function() {
652 defer.resolve(false);
653 jQuery(this).dialog("close");
654 }
655 }
656 });
657
658 return defer.promise();
659 }
660
661 function restApiPanelOnChange(elem, panel) {
662 if (elem.is(":checked")) {
663 panel.show();
664 } else {
665 panel.hide();
666 }
667 }
668
669 function restApiAccessOnChange(elem, access) {
670 if (elem.val() === "anonymous") {
671 access.hide();
672 } else {
673 access.show();
674 }
675 }
676
677 function submit_rest_api(schema_name, table_name, settings ) {
678 // Submit
679 wpda_rest_api(
680 'save-settings',
681 {
682 action: 'rest_api',
683 dbs: schema_name,
684 tbl: table_name,
685 settings: JSON.stringify(settings),
686 },
687 (function(data) {
688 submitSettingsCallbackOk(data, "norownum");
689 }),
690 submitSettingsCallbackError
691 );
692
693 return false;
694 }
695
696 function restApiTestCallbackOk(response, rownum) {
697 if (response.code!==undefined && response.message!==undefined) {
698 switch(response.code) {
699 case "ok":
700 jQuery.notify("Please check your console...", "success");
701 console.log(response);
702 break;
703 default:
704 jQuery.notify("Please check your console...", "error");
705 console.error(response);
706 }
707 } else {
708 restApiTestCallbackError(response);
709 }
710 }
711
712 function restApiTestCallbackError(response) {
713 if (response.code!==undefined && response.message!==undefined) {
714 jQuery.notify("Please check your console...", "error");
715 console.error(response);
716 } else {
717 jQuery.notify("Please check your console...", "error");
718 }
719 }
720
721 var wpdaDeletedDashboardMenus = [];
722 function deleteDashboardMenu(element, rownum) {
723 let menu_id = jQuery(element).closest("tr").find(".wpda_dashboard_menu_id").val();
724 if (wpdaDeletedDashboardMenus[rownum]===undefined) {
725 wpdaDeletedDashboardMenus[rownum] = [];
726 }
727 wpdaDeletedDashboardMenus[rownum].push(menu_id);
728 jQuery(element).closest("tr").remove();
729 }
730
731 wpdaMediaFrames = [];
732 function wpdaInitMediaItem(mediaId, mediaContainer, mediaItem, mediaType, dataType, title, buttonText, mediaTypes) {
733 wpdaMediaFrames[mediaId] = null;
734
735 jQuery("#media_" + mediaId + "_upload_button").on("click", function (e) {
736 e.preventDefault();
737
738 if (wpdaMediaFrames[mediaId]!==null) {
739 wpdaMediaFrames[mediaId].open();
740 wpdaSetMediaSelection(
741 mediaItem,
742 wpdaMediaFrames[mediaId]
743 );
744 } else {
745 wpdaMediaFrames[mediaId] = wp.media({
746 title: title,
747 button: {
748 text: buttonText
749 },
750 library: {
751 type: mediaTypes
752 },
753 multiple: dataType==="number" ? "false" : "true",
754 render: false
755 });
756
757 wpdaMediaFrames[mediaId].on("select", function () {
758 if ('number' === dataType) {
759 attachment = wpdaMediaFrames[mediaId].state().get('selection').first().toJSON();
760 } else {
761 attachment = wpdaMediaFrames[mediaId].state().get('selection').toJSON();
762 }
763
764 wpdaGetMedia(
765 mediaContainer,
766 mediaItem,
767 dataType,
768 attachment,
769 mediaType
770 );
771 });
772
773 wpdaMediaFrames[mediaId].open();
774 wpdaSetMediaSelection(
775 mediaItem,
776 wpdaMediaFrames[mediaId]
777 );
778 }
779 });
780
781 jQuery("#media_" + mediaId + "_remove_button").on("click", function (e) {
782 e.preventDefault();
783 mediaContainer.empty();
784 mediaItem.val('');
785 });
786 }
787
788 function wpdaGetMedia(mediaContainer, mediaItem, dataType, attachment, attachmentType) {
789 mediaContainer.empty();
790 if ('number' === dataType) {
791 mediaItem.val(attachment.id);
792 mediaContainer.append(
793 wpdaGetMediaContent(attachment, attachmentType)
794 );
795 } else {
796 mediaItem.val('');
797 for (var i = 0; i < attachment.length; ++i) {
798 if (attachment[i].id !== '') {
799 if (mediaItem.val() === '') {
800 mediaItem.val(attachment[i].id);
801 } else {
802 mediaItem.val(
803 mediaItem.val() + ',' + attachment[i].id
804 );
805 }
806 mediaContainer.append(
807 wpdaGetMediaContent(attachment[i], attachmentType)
808 );
809 }
810 }
811 }
812 }
813
814 function wpdaGetMediaContent(attachment, attachmentType) {
815 switch(attachmentType) {
816 case 'image':
817 return wpdaGetMediaImage(attachment)
818 case 'video':
819 return wpdaGetMediaVideo(attachment)
820 case 'audio':
821 return wpdaGetMediaAudio(attachment)
822 default:
823 return wpdaGetMediaItem(attachment)
824 }
825 }
826
827 function wpdaGetMediaItem(attachment) {
828 return `
829 <span class="wpda_media_container wpda_media">
830 <a href="${attachment.url}" target="_blank">
831 <img src="${attachment.icon}">
832 <br/>
833 ${attachment.title}
834 </a>
835 </span>
836 `;
837 }
838
839 function wpdaGetMediaImage(attachment) {
840 return `
841 <span class="wpda_media_container wpda_image">
842 <img src="${attachment.url}"/>
843 </span>
844 `;
845 }
846
847 function wpdaGetMediaAudio(attachment) {
848 return `
849 <span class="wpda_media_container wpda_audio">
850 <audio src="${attachment.url}" controls></audio>
851 </span>
852 `;
853 }
854
855 function wpdaGetMediaVideo(attachment) {
856 return `
857 <span class="wpda_media_container wpda_video">
858 <video controls>
859 <source src="${attachment.url}">
860 </video>
861 </span>
862 `;
863 }
864
865 function wpdaSetMediaSelection(mediaItem, frame) {
866 // Selects selected media in media uploader.
867 selection = frame.state().get('selection');
868 media_ids = mediaItem.val();
869 media_ids = media_ids.split(',');
870 media_ids.forEach(
871 function (id) {
872 attachment = wp.media.attachment(id);
873 attachment.fetch();
874 selection.add(attachment ? [attachment] : []);
875 }
876 );
877 }
878
879 const setLegacyTools = () => {
880 jQuery("#wpda-legacy-tool-settings-panel").toggle();
881 }
882
883 const setLegacyToolStatus = (element) => {
884 if (jQuery(element).find("i.fas.fa-toggle-off").length === 1) {
885 // Turn on
886 jQuery(element).html('<i class="fas fa-toggle-on" style="font-size: 28px;"></i>');
887 } else {
888 // Turn off
889 jQuery(element).html('<i class="fas fa-toggle-off" style="font-size: 28px;"></i>');
890 }
891 }
892
893 const updateLegacyTools = () => {
894 const toolStatus = {}
895
896 jQuery.each(
897 jQuery("#wpda-legacy-tool-settings-panel table td.status"),
898 function(key, value) {
899 const tool = jQuery(value).data("tool");
900 const status = jQuery(value).find("i.fas.fa-toggle-off").length === 0
901 toolStatus[tool] = status;
902 }
903 );
904
905 jQuery("#wpda-legacy-tool-settings-legacy-tool-data").val(JSON.stringify(toolStatus));
906 jQuery("#wpda-legacy-tool-settings-form-data").submit();
907 }
908
909 const submitMailCallbackOk = (response, debug) => {
910 if (response.code!==undefined && response.message!==undefined) {
911 switch(response.code) {
912 case "ok":
913 jQuery("#debugInfoContainer").parent().parent().hide()
914 jQuery.notify(response.message, "success");
915 break;
916 case "error":
917 jQuery.notify(response.message, "error");
918 break;
919 default:
920 jQuery.notify("Application error! Please contact the plugin development team.", "error");
921 }
922
923 if (debug === true) {
924 jQuery("#debugInfoContainer").html(response.debug)
925 jQuery("#debugInfoContainer").parent().parent().show()
926 }
927 } else {
928 submitSettingsCallbackError(response);
929 }
930
931 jQuery('#mailSpinner').hide();
932 }
933
934 const submitMailCallbackError = (response) => {
935 if (response.code!==undefined && response.message!==undefined) {
936 switch(response.code) {
937 case "error":
938 jQuery.notify(response.message, "error");
939 break;
940 default:
941 jQuery.notify("Application error! Please contact the plugin development team.", "error");
942 }
943 } else {
944 jQuery.notify("Application error! Please contact the plugin development team.", "error");
945 }
946
947 jQuery('#mailSpinner').hide();
948 }
949
950 const sendMail = (to, subject, message, debug) => {
951 if (to.trim() === "" || subject.trim() === "" || message.trim() === "") {
952 jQuery.notify("Invalid function call! Missing arguments.", "error");
953 jQuery('#mailSpinner').hide();
954 } else {
955 wpda_rest_api(
956 "action/mail",
957 {
958 to: to,
959 subject: subject,
960 message: message,
961 },
962 function(response) {
963 submitMailCallbackOk(response, debug)
964 },
965 submitSettingsCallbackError
966 );
967 }
968 }