PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.3
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.3
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 5.5.41 5.5.42 5.5.43 All 159 releases
wp-data-access / assets / js / wpda_admin.js

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

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