PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.41
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.41
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.41, at assets/js/wpda_admin.js

1,004 lines 28.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 app_table_name,
507 app_container_table_name,
508 app_apps_table_name,
509 table_settings_table_name,
510 media_table_name,
511 design_table_name,
512 data_projects_project_name,
513 data_projects_page_name,
514 data_projects_table_name,
515 data_publication_table_name,
516 menus_table_name,
517 csv_import_table_name,
518 logging_table_name
519 ) {
520 jQuery('#app_table_name').val(app_table_name);
521 jQuery('#app_container_table_name').val(app_container_table_name);
522 jQuery('#app_apps_table_name').val(app_apps_table_name);
523 jQuery('#table_settings_table_name').val(table_settings_table_name);
524 jQuery('#media_table_name').val(media_table_name);
525 jQuery('#design_table_name').val(design_table_name);
526 jQuery('#data_projects_project_name').val(data_projects_project_name);
527 jQuery('#data_projects_page_name').val(data_projects_page_name);
528 jQuery('#data_projects_table_name').val(data_projects_table_name);
529 jQuery('#data_publication_table_name').val(data_publication_table_name);
530 jQuery('#menus_table_name').val(menus_table_name);
531 jQuery('#csv_import_table_name').val(csv_import_table_name);
532 jQuery('#logging_table_name').val(logging_table_name);
533
534 jQuery('#wpda-download-backup').submit();
535 }
536
537 function restore_respository_tables() {
538 if (!confirm("Restore repository tables? This action cannot be undone!\n\nIt might be wise to backup your actual repository tables first...")) {
539 return;
540 }
541
542 jQuery('#restore_app_table_name').val(jQuery("input[name='restore_app_table_name']:checked").val());
543 jQuery('#restore_app_container_table_name').val(jQuery("input[name='restore_app_container_table_name']:checked").val());
544 jQuery('#restore_app_apps_table_name').val(jQuery("input[name='restore_app_apps_table_name']:checked").val());
545 jQuery('#restore_table_settings_table_name').val(jQuery("input[name='restore_table_settings_table_name']:checked").val());
546 jQuery('#restore_media_table_name').val(jQuery("input[name='restore_media_table_name']:checked").val());
547 jQuery('#restore_design_table_name').val(jQuery("input[name='restore_design_table_name']:checked").val());
548 jQuery('#restore_data_projects_project_name').val(jQuery("input[name='restore_data_projects_project_name']:checked").val());
549 jQuery('#restore_data_projects_page_name').val(jQuery("input[name='restore_data_projects_project_name']:checked").val());
550 jQuery('#restore_data_projects_table_name').val(jQuery("input[name='restore_data_projects_table_name']:checked").val());
551 jQuery('#restore_data_publication_table_name').val(jQuery("input[name='restore_data_publication_table_name']:checked").val());
552 jQuery('#restore_menus_table_name').val(jQuery("input[name='restore_menus_table_name']:checked").val());
553 jQuery('#restore_csv_import_table_name').val(jQuery("input[name='restore_csv_import_table_name']:checked").val());
554 jQuery('#restore_logging_table_name').val(jQuery("input[name='restore_logging_table_name']:checked").val());
555
556 jQuery('#restore_date').val(jQuery('.wpda-restore-repository-backup-selected').data('backupDate'));
557
558 jQuery('#wpda-restore-respository').submit();
559 }
560
561 function get_table_row_count(wpnonce, schema_name, table_name) {
562 url = location.pathname + '?action=wpda_get_table_row_count';
563 jQuery.ajax({
564 method: 'POST',
565 url: url,
566 data: {
567 wpda_wpnonce: wpnonce,
568 wpdaschema_name: schema_name,
569 wpdatable_name: table_name
570 }
571 }).done(
572 function(msg) {
573 try {
574 json = JSON.parse(msg);
575 if (json[0].row_count === undefined) {
576 alert('Ajax error: row count failed');
577 } else {
578 jQuery("#" + table_name + "_row_count_estimated_value_hard").val(json[0].row_count);
579 }
580 } catch (e) {
581 alert('Ajax error: ' + e.message);
582 }
583 }
584 );
585 }
586
587 function expandFieldset(id) {
588 if (jQuery("#wpda_table_expand_" + id).is(":visible")) {
589 jQuery("#wpda_field_expand_" + id).removeClass("fa-minus-circle");
590 jQuery("#wpda_field_expand_" + id).addClass("fa-plus-circle");
591 jQuery("#wpda_fieldset_expand_" + id).val("off");
592 jQuery("#wpda_table_expand_" + id).css("display", "none");
593 } else {
594 jQuery("#wpda_field_expand_" + id).removeClass("fa-plus-circle");
595 jQuery("#wpda_field_expand_" + id).addClass("fa-minus-circle");
596 jQuery("#wpda_fieldset_expand_" + id).val("on");
597 jQuery("#wpda_table_expand_" + id).css("display", "table");
598 }
599 }
600
601 function wpda_add_icons_to_dialog_buttons() {
602 jQuery("div.ui-dialog div.ui-dialog-buttonset button").each(function() {
603 switch(jQuery(this).text()) {
604 case "OK":
605 case "Select":
606 case "Close":
607 jQuery(this).prepend('<i class="fas fa-check wpda_icon_on_button"></i> ');
608 break;
609 case "Apply":
610 jQuery(this).prepend('<i class="fas fa-code-commit wpda_icon_on_button"></i> ');
611 break;
612 case "Delete":
613 jQuery(this).prepend('<i class="fas fa-trash wpda_icon_on_button"></i> ');
614 break;
615 case "Keep":
616 jQuery(this).prepend('<i class="fas fa-eraser wpda_icon_on_button"></i> ');
617 break;
618 case "Cancel":
619 jQuery(this).prepend('<i class="fas fa-times-circle wpda_icon_on_button"></i> ');
620 break;
621 }
622 });
623 }
624
625 function wpda_dbinit_admin( schema_name, wpnonce ) {
626 jQuery.ajax({
627 method: 'POST',
628 url: wpda_admin_vars.wpda_ajaxurl + '?action=wpda_dbinit_admin',
629 data: {
630 wpdaschema_name: schema_name,
631 wpnonce: wpnonce,
632 }
633 }).done(
634 function(data) {
635 msg = JSON.parse(data);
636 if (msg.status==="OK") {
637 jQuery.notify('Database function wpda_get_wp_user_id() created', 'success');
638 } else {
639 console.log(msg);
640 jQuery.notify(msg.msg, 'error');
641 }
642 }
643 );
644 }
645
646 function wpda_toggle_password(id, e) {
647 // Change input type
648 let elm = document.getElementById(id);
649 if (elm.type === "password") {
650 elm.type = "text";
651 } else {
652 elm.type = "password";
653 }
654
655 // Change icon if applicable
656 let icn = jQuery(e.target);
657 if (icn.hasClass("fa-eye")) {
658 icn.addClass("fa-eye-slash").removeClass("fa-eye");
659 } else if (icn.hasClass("fa-eye-slash")) {
660 icn.addClass("fa-eye").removeClass("fa-eye-slash");
661 }
662 }
663
664 function wpda_alert(title, txt) {
665 jQuery("<p></p>").append(txt).dialog({
666 title: title,
667 modal: true,
668 buttons: {
669 OK: function() {
670 jQuery(this).dialog("close");
671 }
672 }
673 });
674 }
675
676 function wpda_confirm(title, txt) {
677 var defer = jQuery.Deferred();
678
679 jQuery("<p></p>").append(txt).dialog({
680 title: title,
681 modal: true,
682 buttons: {
683 OK: function() {
684 defer.resolve(true);
685 jQuery(this).dialog("close");
686 },
687 CANCEL: function() {
688 defer.resolve(false);
689 jQuery(this).dialog("close");
690 }
691 }
692 });
693
694 return defer.promise();
695 }
696
697 function restApiPanelOnChange(elem, panel) {
698 if (elem.is(":checked")) {
699 panel.show();
700 } else {
701 panel.hide();
702 }
703 }
704
705 function restApiAccessOnChange(elem, access) {
706 if (elem.val() === "anonymous") {
707 access.hide();
708 } else {
709 access.show();
710 }
711 }
712
713 function submit_rest_api(schema_name, table_name, settings ) {
714 // Submit
715 wpda_rest_api(
716 'save-settings',
717 {
718 action: 'rest_api',
719 dbs: schema_name,
720 tbl: table_name,
721 settings: JSON.stringify(settings),
722 },
723 (function(data) {
724 submitSettingsCallbackOk(data, "norownum");
725 }),
726 submitSettingsCallbackError
727 );
728
729 return false;
730 }
731
732 function restApiTestCallbackOk(response, rownum) {
733 if (response.code!==undefined && response.message!==undefined) {
734 switch(response.code) {
735 case "ok":
736 jQuery.notify("Please check your console...", "success");
737 console.log(response);
738 break;
739 default:
740 jQuery.notify("Please check your console...", "error");
741 console.error(response);
742 }
743 } else {
744 restApiTestCallbackError(response);
745 }
746 }
747
748 function restApiTestCallbackError(response) {
749 if (response.code!==undefined && response.message!==undefined) {
750 jQuery.notify("Please check your console...", "error");
751 console.error(response);
752 } else {
753 jQuery.notify("Please check your console...", "error");
754 }
755 }
756
757 var wpdaDeletedDashboardMenus = [];
758 function deleteDashboardMenu(element, rownum) {
759 let menu_id = jQuery(element).closest("tr").find(".wpda_dashboard_menu_id").val();
760 if (wpdaDeletedDashboardMenus[rownum]===undefined) {
761 wpdaDeletedDashboardMenus[rownum] = [];
762 }
763 wpdaDeletedDashboardMenus[rownum].push(menu_id);
764 jQuery(element).closest("tr").remove();
765 }
766
767 wpdaMediaFrames = [];
768 function wpdaInitMediaItem(mediaId, mediaContainer, mediaItem, mediaType, dataType, title, buttonText, mediaTypes) {
769 wpdaMediaFrames[mediaId] = null;
770
771 jQuery("#media_" + mediaId + "_upload_button").on("click", function (e) {
772 e.preventDefault();
773
774 if (wpdaMediaFrames[mediaId]!==null) {
775 wpdaMediaFrames[mediaId].open();
776 wpdaSetMediaSelection(
777 mediaItem,
778 wpdaMediaFrames[mediaId]
779 );
780 } else {
781 wpdaMediaFrames[mediaId] = wp.media({
782 title: title,
783 button: {
784 text: buttonText
785 },
786 library: {
787 type: mediaTypes
788 },
789 multiple: dataType==="number" ? "false" : "true",
790 render: false
791 });
792
793 wpdaMediaFrames[mediaId].on("select", function () {
794 if ('number' === dataType) {
795 attachment = wpdaMediaFrames[mediaId].state().get('selection').first().toJSON();
796 } else {
797 attachment = wpdaMediaFrames[mediaId].state().get('selection').toJSON();
798 }
799
800 wpdaGetMedia(
801 mediaContainer,
802 mediaItem,
803 dataType,
804 attachment,
805 mediaType
806 );
807 });
808
809 wpdaMediaFrames[mediaId].open();
810 wpdaSetMediaSelection(
811 mediaItem,
812 wpdaMediaFrames[mediaId]
813 );
814 }
815 });
816
817 jQuery("#media_" + mediaId + "_remove_button").on("click", function (e) {
818 e.preventDefault();
819 mediaContainer.empty();
820 mediaItem.val('');
821 });
822 }
823
824 function wpdaGetMedia(mediaContainer, mediaItem, dataType, attachment, attachmentType) {
825 mediaContainer.empty();
826 if ('number' === dataType) {
827 mediaItem.val(attachment.id);
828 mediaContainer.append(
829 wpdaGetMediaContent(attachment, attachmentType)
830 );
831 } else {
832 mediaItem.val('');
833 for (var i = 0; i < attachment.length; ++i) {
834 if (attachment[i].id !== '') {
835 if (mediaItem.val() === '') {
836 mediaItem.val(attachment[i].id);
837 } else {
838 mediaItem.val(
839 mediaItem.val() + ',' + attachment[i].id
840 );
841 }
842 mediaContainer.append(
843 wpdaGetMediaContent(attachment[i], attachmentType)
844 );
845 }
846 }
847 }
848 }
849
850 function wpdaGetMediaContent(attachment, attachmentType) {
851 switch(attachmentType) {
852 case 'image':
853 return wpdaGetMediaImage(attachment)
854 case 'video':
855 return wpdaGetMediaVideo(attachment)
856 case 'audio':
857 return wpdaGetMediaAudio(attachment)
858 default:
859 return wpdaGetMediaItem(attachment)
860 }
861 }
862
863 function wpdaGetMediaItem(attachment) {
864 return `
865 <span class="wpda_media_container wpda_media">
866 <a href="${attachment.url}" target="_blank">
867 <img src="${attachment.icon}">
868 <br/>
869 ${attachment.title}
870 </a>
871 </span>
872 `;
873 }
874
875 function wpdaGetMediaImage(attachment) {
876 return `
877 <span class="wpda_media_container wpda_image">
878 <img src="${attachment.url}"/>
879 </span>
880 `;
881 }
882
883 function wpdaGetMediaAudio(attachment) {
884 return `
885 <span class="wpda_media_container wpda_audio">
886 <audio src="${attachment.url}" controls></audio>
887 </span>
888 `;
889 }
890
891 function wpdaGetMediaVideo(attachment) {
892 return `
893 <span class="wpda_media_container wpda_video">
894 <video controls>
895 <source src="${attachment.url}">
896 </video>
897 </span>
898 `;
899 }
900
901 function wpdaSetMediaSelection(mediaItem, frame) {
902 // Selects selected media in media uploader.
903 selection = frame.state().get('selection');
904 media_ids = mediaItem.val();
905 media_ids = media_ids.split(',');
906 media_ids.forEach(
907 function (id) {
908 attachment = wp.media.attachment(id);
909 attachment.fetch();
910 selection.add(attachment ? [attachment] : []);
911 }
912 );
913 }
914
915 const setLegacyTools = () => {
916 jQuery("#wpda-legacy-tool-settings-panel").toggle();
917 }
918
919 const setLegacyToolStatus = (element) => {
920 if (jQuery(element).find("i.fas.fa-toggle-off").length === 1) {
921 // Turn on
922 jQuery(element).html('<i class="fas fa-toggle-on" style="font-size: 28px;"></i>');
923 } else {
924 // Turn off
925 jQuery(element).html('<i class="fas fa-toggle-off" style="font-size: 28px;"></i>');
926 }
927 }
928
929 const updateLegacyTools = () => {
930 const toolStatus = {}
931
932 jQuery.each(
933 jQuery("#wpda-legacy-tool-settings-panel table td.status"),
934 function(key, value) {
935 const tool = jQuery(value).data("tool");
936 const status = jQuery(value).find("i.fas.fa-toggle-off").length === 0
937 toolStatus[tool] = status;
938 }
939 );
940
941 jQuery("#wpda-legacy-tool-settings-legacy-tool-data").val(JSON.stringify(toolStatus));
942 jQuery("#wpda-legacy-tool-settings-form-data").submit();
943 }
944
945 const submitMailCallbackOk = (response, debug) => {
946 if (response.code!==undefined && response.message!==undefined) {
947 switch(response.code) {
948 case "ok":
949 jQuery("#debugInfoContainer").parent().parent().hide()
950 jQuery.notify(response.message, "success");
951 break;
952 case "error":
953 jQuery.notify(response.message, "error");
954 break;
955 default:
956 jQuery.notify("Application error! Please contact the plugin development team.", "error");
957 }
958
959 if (debug === true) {
960 jQuery("#debugInfoContainer").html(response.debug)
961 jQuery("#debugInfoContainer").parent().parent().show()
962 }
963 } else {
964 submitSettingsCallbackError(response);
965 }
966
967 jQuery('#mailSpinner').hide();
968 }
969
970 const submitMailCallbackError = (response) => {
971 if (response.code!==undefined && response.message!==undefined) {
972 switch(response.code) {
973 case "error":
974 jQuery.notify(response.message, "error");
975 break;
976 default:
977 jQuery.notify("Application error! Please contact the plugin development team.", "error");
978 }
979 } else {
980 jQuery.notify("Application error! Please contact the plugin development team.", "error");
981 }
982
983 jQuery('#mailSpinner').hide();
984 }
985
986 const sendMail = (to, subject, message, debug) => {
987 if (to.trim() === "" || subject.trim() === "" || message.trim() === "") {
988 jQuery.notify("Invalid function call! Missing arguments.", "error");
989 jQuery('#mailSpinner').hide();
990 } else {
991 wpda_rest_api(
992 "action/mail",
993 {
994 to: to,
995 subject: subject,
996 message: message,
997 },
998 function(response) {
999 submitMailCallbackOk(response, debug)
1000 },
1001 submitSettingsCallbackError
1002 );
1003 }
1004 }