PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.84
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.84
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 5.5.41 5.5.42 All 160 releases
← All changes | admin/class-wp-data-access-admin.php +64 -221 5.5.225.5.84 View file →
@@ -5,30 +5,28 @@
5 5 *
6 6 * @package plugin\admin
7 7 */
8 8 use WPDataAccess\API\WPDA_API;
9 +use WPDataAccess\API\WPDA_API_Core;
9 10 use WPDataAccess\Backup\WPDA_Data_Export;
10 11 use WPDataAccess\CSV_Files\WPDA_CSV_Import;
11 12 use WPDataAccess\Dashboard\WPDA_Dashboard;
12 -use WPDataAccess\Data_Apps\WPDA_Apps;
13 -use WPDataAccess\Data_Apps\WPDA_Explorer_Container;
14 -use WPDataAccess\Data_Apps\WPDA_Apps_List;
13 +use WPDataAccess\Data_Apps\WPDA_App_Builder;
14 +use WPDataAccess\Data_Apps\WPDA_Data_Explorer;
15 +use WPDataAccess\Data_Apps\WPDA_Table_Container;
15 16 use WPDataAccess\Global_Search\WPDA_Global_Search;
16 17 use WPDataAccess\List_Table\WPDA_List_View;
17 18 use WPDataAccess\Plugin_Table_Models\WPDA_App_Model;
18 19 use WPDataAccess\Plugin_Table_Models\WPDA_Design_Table_Model;
19 20 use WPDataAccess\Plugin_Table_Models\WPDA_Publisher_Model;
20 -use WPDataAccess\Plugin_Table_Models\WPDA_Table_Settings_Model;
21 21 use WPDataAccess\Plugin_Table_Models\WPDA_User_Menus_Model;
22 -use WPDataAccess\Plugin_Table_Models\WPDP_Project_Model;
23 -use WPDataAccess\Premium\WPDAPRO_Dashboard\WPDAPRO_Dashboard;
24 22 use WPDataAccess\Premium\WPDAPRO_Data_Publisher\WPDAPRO_Data_Publisher_Manage_Styles;
25 -use WPDataAccess\Query_Builder\WPDA_Query_Builder;
26 23 use WPDataAccess\Settings\WPDA_Settings;
24 +use WPDataAccess\Utilities\WPDA_Add_App_To_Menu;
27 25 use WPDataAccess\Utilities\WPDA_Repository;
28 26 use WPDataAccess\WPDA;
27 +use WPDataAccess\WPDA_Navi\WPDA_Navi;
29 28 use WPDataProjects\WPDP;
30 -use WPDataAccess\WPDA_Navi\WPDA_Navi;
31 29 /**
32 30 * Class WP_Data_Access_Admin
33 31 *
34 32 * Defines admin specific functionality for plugin WP Data Access.
@@ -35,8 +33,9 @@
35 33 *
36 34 * @author Peter Schulz
37 35 * @since 1.0.0
38 36 */
37 +// phpcs:disable WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing -- verified on page
39 38 class WP_Data_Access_Admin {
40 39 /**
41 40 * Menu slug for main page
42 41 */
@@ -91,8 +90,10 @@
91 90 * Plugin main page slug
92 91 */
93 92 const MAIN_PAGE_SLUG = self::PAGE_NAVI;
94 93
94 + const PAGE_TABLE = 'wpda_table';
95 +
95 96 /**
96 97 * Menu slug for my tables page
97 98 */
98 99 const PAGE_MY_TABLES = 'wpda_my_tables';
@@ -103,8 +104,10 @@
103 104 * @var string|false
104 105 */
105 106 protected $wpda_data_explorer_menu;
106 107
108 + protected $wpda_table;
109 +
107 110 /**
108 111 * Page hook suffix to Data Designer page or false
109 112 *
110 113 * @var string|false
@@ -201,11 +204,9 @@
201 204 * @since 1.0.0
202 205 */
203 206 public function __construct() {
204 207 if ( isset( $_REQUEST['page'] ) ) {
205 - // phpcs:ignore WordPress.Security.NonceVerification
206 208 $this->page = sanitize_text_field( wp_unslash( $_REQUEST['page'] ) );
207 - // phpcs:ignore WordPress.Security.NonceVerification
208 209 }
209 210 }
210 211
211 212 private function load_app_css() {
@@ -304,9 +305,9 @@
304 305 plugins_url( '../assets/css/responsive.dataTables.min.css', __FILE__ ),
305 306 array(),
306 307 WPDA::get_option( WPDA::OPTION_WPDA_VERSION )
307 308 );
308 - if ( self::PAGE_MAIN === $this->page || self::PAGE_APPS === $this->page || self::PAGE_DASHBOARD === $this->page || self::PAGE_QUERY_BUILDER === $this->page || self::PAGE_PUBLISHER === $this->page || self::PAGE_CHARTS === $this->page ) {
309 + if ( self::PAGE_MAIN === $this->page || self::PAGE_APPS === $this->page || self::PAGE_DASHBOARD === $this->page || self::PAGE_PUBLISHER === $this->page || self::PAGE_CHARTS === $this->page ) {
309 310 // Load UI smoothness theme.
310 311 wp_enqueue_style(
311 312 'wpda_ui_smoothness',
312 313 plugins_url( '../assets/css/jquery-ui.smoothness.min.css', __FILE__ ),
@@ -326,10 +327,10 @@
326 327 if ( false !== $hide_button_icons && 'on' !== $hide_button_icons ) {
327 328 // SAVING SPACE - According to the plugin guidelines it is allowed to include external fonts:
328 329 // https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/#8-plugins-may-not-send-executable-code-via-third-party-systems .
329 330 // Load fontawesome icons.
331 + // phpcs:disable WordPress.WP.EnqueuedResourceParameters.MissingVersion
330 332 wp_enqueue_style(
331 - // phpcs:ignore WordPress.WP.EnqueuedResourceParameters
332 333 'wpda_fontawesome_icons',
333 334 WPDA::CDN_FONTAWESOME . 'all.min.css',
334 335 array(),
335 336 null,
@@ -334,8 +335,9 @@
334 335 array(),
335 336 null,
336 337 false
337 338 );
339 + // phpcs:enable WordPress.WP.EnqueuedResourceParameters.MissingVersion
338 340 }
339 341 if ( self::PAGE_PUBLISHER === $this->page ) {
340 342 wp_register_style(
341 343 'wpda_datatables_default',
@@ -351,25 +353,10 @@
351 353 WPDA::get_option( WPDA::OPTION_WPDA_VERSION ),
352 354 false
353 355 );
354 356 }
355 - if ( self::PAGE_QUERY_BUILDER === $this->page ) {
356 - // Add Query Builder resources.
357 + if ( !WPDA::current_user_is_admin() ) {
357 358 wp_enqueue_style(
358 - 'wpda_query_builder',
359 - plugins_url( '../assets/css/wpda_query_builder.css', __FILE__ ),
360 - array(),
361 - WPDA::get_option( WPDA::OPTION_WPDA_VERSION )
362 - );
363 - wp_enqueue_style(
364 - 'wpda_jquery_json_viewer',
365 - plugins_url( '../assets/css/jquery.json-viewer.css', __FILE__ ),
366 - array(),
367 - WPDA::get_option( WPDA::OPTION_WPDA_VERSION )
368 - );
369 - }
370 - if ( !current_user_can( 'manage_options' ) ) {
371 - wp_enqueue_style(
372 359 'wpda_non_admin',
373 360 plugins_url( '../assets/css/wpda_non_admin.css', __FILE__ ),
374 361 array(),
375 362 WPDA::get_option( WPDA::OPTION_WPDA_VERSION )
@@ -528,46 +515,8 @@
528 515 }
529 516 if ( self::PAGE_CHARTS === $this->page ) {
530 517 $this->load_google_charts();
531 518 }
532 - if ( self::PAGE_QUERY_BUILDER === $this->page ) {
533 - // Add Query Builder resources.
534 - wp_enqueue_script(
535 - 'wpda_query_builder',
536 - plugins_url( '../assets/js/wpda_query_builder.js', __FILE__ ),
537 - array(),
538 - WPDA::get_option( WPDA::OPTION_WPDA_VERSION ),
539 - false
540 - );
541 - wp_enqueue_script(
542 - 'wpda_jquery_xml2json',
543 - plugins_url( '../assets/js/jquery.xml2json.js', __FILE__ ),
544 - array(),
545 - WPDA::get_option( WPDA::OPTION_WPDA_VERSION ),
546 - false
547 - );
548 - wp_enqueue_script(
549 - 'wpda_jquery_json_viewer',
550 - plugins_url( '../assets/js/jquery.json-viewer.js', __FILE__ ),
551 - array(),
552 - WPDA::get_option( WPDA::OPTION_WPDA_VERSION ),
553 - false
554 - );
555 - // Add codeEditor to query builder.
556 - $cm_settings['codeEditor'] = wp_enqueue_code_editor( array(
557 - 'type' => 'text/x-sql',
558 - 'codemirror' => array(
559 - 'mode' => 'sql',
560 - 'lineNumbers' => true,
561 - 'autoRefresh' => true,
562 - 'lineWrapping' => true,
563 - 'styleActiveLine' => true,
564 - ),
565 - ) );
566 - wp_enqueue_script( 'wp-theme-plugin-editor' );
567 - wp_localize_script( 'wp-theme-plugin-editor', 'cm_settings', $cm_settings );
568 - wp_enqueue_style( 'wp-codemirror' );
569 - }
570 519 if ( self::PAGE_DASHBOARD === $this->page ) {
571 520 $this->load_google_charts();
572 521 // Load DBMS panels.
573 522 wp_enqueue_script(
@@ -590,8 +539,9 @@
590 539 * @return void
591 540 */
592 541 private function load_google_charts() {
593 542 // Load Google Charts.
543 + // phpcs:disable WordPress.WP.EnqueuedResourceParameters
594 544 wp_enqueue_script(
595 545 'wpda_google_charts',
596 546 WPDA::GOOGLE_CHARTS,
597 547 array(),
@@ -597,8 +547,9 @@
597 547 array(),
598 548 null,
599 549 false
600 550 );
551 + // phpcs:enable WordPress.WP.EnqueuedResourceParameters
601 552 wp_enqueue_script(
602 553 'wpda_google_charts_fnc',
603 554 plugins_url( '../assets/js/wpda_google_charts.js', __FILE__ ),
604 555 array(),
@@ -636,9 +587,9 @@
636 587 *
637 588 * @since 1.0.0
638 589 */
639 590 public function add_menu_items() {
640 - if ( current_user_can( 'manage_options' ) ) {
591 + if ( WPDA::current_user_is_admin() ) {
641 592 if ( 'on' === WPDA::get_option( WPDA::OPTION_PLUGIN_HIDE_ADMIN_MENU ) ) {
642 593 // Show Data Projects.
643 594 $this->add_data_projects();
644 595 // Hide admin menu.
@@ -643,18 +594,8 @@
643 594 $this->add_data_projects();
644 595 // Hide admin menu.
645 596 return;
646 597 }
647 - if ( self::PAGE_MAIN === $this->page && isset( $_REQUEST['de'] ) ) {
648 - if ( 'new' === $_REQUEST['de'] ) {
649 - update_user_meta( WPDA::get_current_user_id(), 'wpda_data_explorer', 'new' );
650 - }
651 - if ( 'old' === $_REQUEST['de'] ) {
652 - delete_user_meta( WPDA::get_current_user_id(), 'wpda_data_explorer' );
653 - }
654 - }
655 - // Specific list tables (and forms) can be made available for specific capabilities:
656 - // managed in method add_menu_my_tables.
657 598 // Main menu and items are only available to admin users (set capability to 'manage_options').
658 599 add_menu_page(
659 600 'WP Data Access',
660 601 'WP Data Access',
@@ -682,9 +623,8 @@
682 623 self::PAGE_APPS,
683 624 array($this, 'data_apps')
684 625 );
685 626 // Add data explorer to WPDA menu.
686 - $current_data_explorer_version = get_user_meta( WPDA::get_current_user_id(), 'wpda_data_explorer', true );
687 627 $this->wpda_data_explorer_menu = add_submenu_page(
688 628 self::MAIN_PAGE_SLUG,
689 629 'WP Data Access',
690 630 'Data Explorer',
@@ -689,18 +629,19 @@
689 629 'WP Data Access',
690 630 'Data Explorer',
691 631 'manage_options',
692 632 self::PAGE_MAIN,
693 - array($this, ( 'new' !== $current_data_explorer_version ? 'data_explorer_page' : 'data_explorer_page_new' ))
633 + array($this, 'data_explorer_page')
694 634 );
695 - if ( self::PAGE_MAIN === $this->page ) {
696 - if ( 'new' !== $current_data_explorer_version ) {
697 - $args = array(
698 - 'page_hook_suffix' => $this->wpda_data_explorer_menu,
699 - );
700 - $this->wpda_data_explorer_view = new WPDA_List_View($args);
701 - }
702 - }
635 + // Add data explorer to WPDA menu.
636 + $this->wpda_table = add_submenu_page(
637 + self::PAGE_TABLE,
638 + 'WP Data Access',
639 + 'Data Explorer',
640 + 'manage_options',
641 + self::PAGE_TABLE,
642 + array($this, 'data_explorer_table_page')
643 + );
703 644 // Add submenu for Query Builder.
704 645 $this->wpda_data_publisher_menu = add_submenu_page(
705 646 self::MAIN_PAGE_SLUG,
706 647 'WP Data Access',
@@ -761,9 +702,9 @@
761 702 * @param mixed $submenu_file Dashboard menu items.
762 703 * @return mixed
763 704 */
764 705 public function wpda_submenu_filter( $submenu_file ) {
765 - if ( current_user_can( 'manage_options' ) ) {
706 + if ( WPDA::current_user_is_admin() ) {
766 707 $hidden_submenus = array(
767 708 self::PAGE_DASHBOARD,
768 709 self::PAGE_CHARTS,
769 710 self::PAGE_PUBLISHER,
@@ -790,9 +731,9 @@
790 731 * @return void
791 732 */
792 733 protected function add_apps() {
793 734 // Add apps to dashbaord menu
794 - $apps = new WPDA_Apps();
735 + $apps = new WPDA_Add_App_To_Menu();
795 736 $apps->add_apps_to_menu();
796 737 }
797 738
798 739 /**
@@ -818,9 +759,9 @@
818 759 // Cannot determine the user roles (not able to show menus).
819 760 return;
820 761 }
821 762 // Check dashboard role access.
822 - $dashboard_roles = get_option( \WPDataAccess\Settings\WPDA_Settings_Dashboard::DASHBOARD_ROLES );
763 + $dashboard_roles = get_option( \WPDataAccess\Settings\WPDA_Settings_Legacy_Dashboard::DASHBOARD_ROLES );
823 764 $user_has_role = false;
824 765 foreach ( $user_roles as $user_role ) {
825 766 if ( false !== strpos( $dashboard_roles, $user_role ) ) {
826 767 $user_has_role = true;
@@ -827,9 +768,9 @@
827 768 break;
828 769 }
829 770 }
830 771 // Check dashboard user access.
831 - $dashboard_users = get_option( \WPDataAccess\Settings\WPDA_Settings_Dashboard::DASHBOARD_USERS );
772 + $dashboard_users = get_option( \WPDataAccess\Settings\WPDA_Settings_Legacy_Dashboard::DASHBOARD_USERS );
832 773 $user_has_access = false !== strpos( $dashboard_users, WPDA::get_current_user_login() );
833 774 if ( !$user_has_role && !$user_has_access ) {
834 775 return;
835 776 }
@@ -902,50 +843,43 @@
902 843 public function data_dashboard_page() {
903 844 WPDA_Dashboard::add_dashboard( true );
904 845 }
905 846
906 - /**
907 - * Show data explorer main page
908 - *
909 - * Initialization of $this->wpda_data_explorer_view is done earlier in
910 - * {@see WP_Data_Access_Admin::add_menu_items()} to support screen options. This method just shows the page
911 - * containing the list table.
912 - *
913 - * @since 1.0.0
914 - *
915 - * @see WP_Data_Access_Admin::add_menu_items()
916 - */
917 847 public function data_explorer_page() {
918 848 WPDA_Dashboard::add_dashboard();
919 849 if ( isset( $_REQUEST['page_action'] ) && 'wpda_backup' === $_REQUEST['page_action'] ) {
920 - // phpcs:ignore WordPress.Security.NonceVerification
921 850 $this->backup_page();
922 851 } elseif ( isset( $_REQUEST['page_action'] ) && 'wpda_import_csv' === $_REQUEST['page_action'] ) {
923 - // phpcs:ignore WordPress.Security.NonceVerification
924 852 $this->import_csv();
925 853 } elseif ( isset( $_REQUEST['page_action'] ) && 'wpda_global_search' === $_REQUEST['page_action'] ) {
926 - // phpcs:ignore WordPress.Security.NonceVerification
927 854 $this->advanced_search();
928 855 } else {
929 - $this->wpda_data_explorer_view->show();
856 + $explorer = new WPDA_Data_Explorer();
857 + $explorer->show();
930 858 }
931 859 }
932 860
933 - public function data_explorer_page_new() {
861 + public function data_explorer_table_page() {
934 862 WPDA_Dashboard::add_dashboard();
935 - if ( isset( $_REQUEST['page_action'] ) && 'wpda_backup' === $_REQUEST['page_action'] ) {
936 - // phpcs:ignore WordPress.Security.NonceVerification
937 - $this->backup_page();
938 - } elseif ( isset( $_REQUEST['page_action'] ) && 'wpda_import_csv' === $_REQUEST['page_action'] ) {
939 - // phpcs:ignore WordPress.Security.NonceVerification
940 - $this->import_csv();
941 - } elseif ( isset( $_REQUEST['page_action'] ) && 'wpda_global_search' === $_REQUEST['page_action'] ) {
942 - // phpcs:ignore WordPress.Security.NonceVerification
943 - $this->advanced_search();
944 - } else {
945 - $explorer = new WPDA_Explorer_Container();
946 - $explorer->show();
863 + if ( !isset(
864 + $_POST['dbs'],
865 + $_POST['tbl'],
866 + $_POST['s'],
867 + $_POST['c']
868 + ) ) {
869 + wp_die( esc_attr__( 'ERROR: Invalid usage', 'wp-data-access' ) );
947 870 }
871 + $dbs = WPDA_API_Core::sanitize_db_identifier( sanitize_text_field( wp_unslash( $_POST['dbs'] ) ) );
872 + $tbl = WPDA_API_Core::sanitize_db_identifier( sanitize_text_field( wp_unslash( $_POST['tbl'] ) ) );
873 + $s = WPDA_API_Core::sanitize_db_identifier( sanitize_text_field( wp_unslash( $_POST['s'] ) ) );
874 + $c = WPDA_API_Core::sanitize_db_identifier( sanitize_text_field( wp_unslash( $_POST['c'] ) ) );
875 + $explorer = new WPDA_Table_Container(array(
876 + 'dbs' => $dbs,
877 + 'tbl' => $tbl,
878 + 's' => $s,
879 + 'c' => $c,
880 + ));
881 + $explorer->show();
948 882 }
949 883
950 884 public function data_navi() {
951 885 if ( isset( $_POST['wpda-legacy-tool-status'] ) ) {
@@ -980,10 +914,10 @@
980 914 }
981 915
982 916 public function data_apps() {
983 917 WPDA_Dashboard::add_dashboard();
984 - $wpda_apps_list = new WPDA_Apps_List();
985 - $wpda_apps_list->show();
918 + $wpda_app_builder = new WPDA_App_Builder();
919 + $wpda_app_builder->show();
986 920 }
987 921
988 922 public function advanced_search() {
989 923 $advanced_search = new WPDA_Global_Search();
@@ -996,9 +930,9 @@
996 930 * @return void
997 931 */
998 932 public function query_builder() {
999 933 WPDA_Dashboard::add_dashboard();
1000 - $query_builder = new WPDA_Query_Builder();
934 + $query_builder = new \WPDataAccess\Data_Apps\WPDA_Query_Builder();
1001 935 $query_builder->show();
1002 936 }
1003 937
1004 938 /**
@@ -1042,9 +976,9 @@
1042 976 ?>
1043 977 <div class="wrap">
1044 978 <h1 class="wp-heading-inline">
1045 979 <span>Data Designer</span>
1046 - <a href="https://wpdataaccess.com/docs/data-designer/data-designer-getting-started/" target="_blank" class="wpda_tooltip" title="Plugin Help - opens in a new tab or window">
980 + <a href="https://docs.legacy.wpdataaccess.com/docs/data-designer-getting-started/" target="_blank" class="wpda_tooltip" title="Plugin Help - opens in a new tab or window">
1047 981 <span class="dashicons dashicons-editor-help" style="text-decoration:none;vertical-align:top;font-size:30px;">
1048 982 </span>
1049 983 </a>
1050 984 </h1>
@@ -1049,10 +983,9 @@
1049 983 </a>
1050 984 </h1>
1051 985 <p>
1052 986 <?php
1053 - echo __( 'ERROR: Repository table not found!', 'wp-data-access' );
1054 - // phpcs:ignore WordPress.Security.EscapeOutput
987 + esc_html_e( 'ERROR: Repository table not found!', 'wp-data-access' );
1055 988 ?>
1056 989 </p>
1057 990 </div>
1058 991 <?php
@@ -1061,9 +994,9 @@
1061 994 /**
1062 995 * Show Data Tables main page
1063 996 */
1064 997 public function data_publisher_page() {
1065 - if ( current_user_can( 'manage_options' ) ) {
998 + if ( WPDA::current_user_is_admin() ) {
1066 999 WPDA_Dashboard::add_dashboard();
1067 1000 }
1068 1001 $data_publisher_table_found = WPDA_Publisher_Model::table_exists();
1069 1002 if ( $data_publisher_table_found ) {
@@ -1089,9 +1022,9 @@
1089 1022 /**
1090 1023 * Data Tables repository table not found
1091 1024 */
1092 1025 public function data_publisher_page_not_found() {
1093 - if ( current_user_can( 'manage_options' ) ) {
1026 + if ( WPDA::current_user_is_admin() ) {
1094 1027 WPDA_Dashboard::add_dashboard();
1095 1028 }
1096 1029 $wpda_repository = new WPDA_Repository();
1097 1030 $wpda_repository->inform_user();
@@ -1098,9 +1031,9 @@
1098 1031 ?>
1099 1032 <div class="wrap">
1100 1033 <h1 class="wp-heading-inline">
1101 1034 <span>Data Tables</span>
1102 - <a href="https://wpdataaccess.com/docs/data-tables/data-tables-getting-started/" target="_blank" class="wpda_tooltip" title="Plugin Help - opens in a new tab or window">
1035 + <a href="https://docs.legacy.wpdataaccess.com/docs/data-tables-getting-started/" target="_blank" class="wpda_tooltip" title="Plugin Help - opens in a new tab or window">
1103 1036 <span class="dashicons dashicons-editor-help" style="text-decoration:none;vertical-align:top;font-size:30px;">
1104 1037 </span>
1105 1038 </a>
1106 1039 </h1>
@@ -1105,10 +1038,9 @@
1105 1038 </a>
1106 1039 </h1>
1107 1040 <p>
1108 1041 <?php
1109 - echo __( 'ERROR: Repository table not found!', 'wp-data-access' );
1110 - // phpcs:ignore WordPress.Security.EscapeOutput
1042 + esc_html_e( 'ERROR: Repository table not found!', 'wp-data-access' );
1111 1043 ?>
1112 1044 </p>
1113 1045 </div>
1114 1046 <?php
@@ -1126,13 +1058,10 @@
1126 1058 */
1127 1059 public function backup_page() {
1128 1060 $wpda_backup = new WPDA_Data_Export();
1129 1061 $wp_nonce = ( isset( $_REQUEST['wp_nonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['wp_nonce'] ) ) : '?' );
1130 - // phpcs:ignore WordPress.Security.NonceVerification
1131 1062 if ( isset( $_REQUEST['action'] ) && wp_verify_nonce( $wp_nonce, 'wpda-backup-' . WPDA::get_current_user_login() ) ) {
1132 - // phpcs:ignore WordPress.Security.NonceVerification
1133 1063 $action = sanitize_text_field( wp_unslash( $_REQUEST['action'] ) );
1134 - // phpcs:ignore WordPress.Security.NonceVerification
1135 1064 if ( 'new' === $action ) {
1136 1065 $wpda_backup->create_export( 'add' );
1137 1066 } elseif ( 'add' === $action ) {
1138 1067 $wpda_backup->wpda_add_cron_job();
@@ -1148,96 +1077,8 @@
1148 1077 }
1149 1078 }
1150 1079
1151 1080 /**
1152 - * Add user defined sub menu
1153 - *
1154 - * WPDA allows users to create sub menu for table lists and simple forms. Sub menus can be added to the WPDA
1155 - * menu or any other (external) menu. A sub menu is added to an external menu via the menu slug. Sub menus are
1156 - * taken from {@see WPDA_User_Menus_Model}.
1157 - *
1158 - * This method is called from the admin_menu action with a lower priority to make sure other menus are available.
1159 - * User defined menu items are added to available menus in this method. These can be WPDA menus or external menus
1160 - * as mentioned in the according list table and edit form. WPDA menus are added to menu WP Data Tables. External
1161 - * menus are added to the menu having the menu slug defined by the user.
1162 - *
1163 - * This method does not actually show the list tables! It just creates the menu items. When the user clicks on such
1164 - * a dynamically defined menu item, method {@see WP_Data_Access_Admin::my_tables_page()} is called, which takes
1165 - * care of showing the list table.
1166 - *
1167 - * @since 1.0.0
1168 - *
1169 - * @see WP_Data_Access_Admin::my_tables_page()
1170 - * @see WPDA_User_Menus_Model
1171 - */
1172 - public function add_menu_my_tables() {
1173 - $menus_shown_to_current_user = array();
1174 - // Add list tables to external menus.
1175 - foreach ( WPDA_User_Menus_Model::list_external_menus() as $menu ) {
1176 - $user_roles = WPDA::get_current_user_roles();
1177 - $user_has_role = false;
1178 - if ( '' === $menu->menu_role || null === $menu->menu_role ) {
1179 - $user_has_role = in_array( 'administrator', $user_roles, true );
1180 - } else {
1181 - $user_role_array = explode( ',', (string) $menu->menu_role );
1182 - //phpcs:ignore - 8.1 proof
1183 - foreach ( $user_role_array as $user_role_array_item ) {
1184 - $user_has_role = in_array( $user_role_array_item, $user_roles, true );
1185 - //phpcs:ignore - 8.1 proof
1186 - if ( $user_has_role ) {
1187 - break;
1188 - }
1189 - }
1190 - }
1191 - if ( $user_has_role ) {
1192 - if ( !isset( $menus_shown_to_current_user[$menu->menu_slug . '/' . $menu->menu_name . '/' . $menu->menu_table_name . '/' . $menu->menu_schema_name] ) ) {
1193 - $menu_slug = self::PAGE_EXPLORER . '_' . $menu->menu_table_name;
1194 - $menu_index = $menu->menu_table_name;
1195 - $this->create_non_admin_menu( $menu_slug );
1196 - $this->wpda_my_table_list_menu[$menu_index] = add_submenu_page(
1197 - $this->first_page,
1198 - 'WP Data Access : ' . strtoupper( $menu->menu_table_name ),
1199 - $menu->menu_name,
1200 - WPDA::get_current_user_capability(),
1201 - $menu_slug,
1202 - array($this, 'my_tables_page')
1203 - );
1204 - $this->wpda_my_table_list_view[$menu_index] = new WPDA_List_View(array(
1205 - 'page_hook_suffix' => $this->wpda_my_table_list_menu[$menu_index],
1206 - 'wpdaschema_name' => $menu->menu_schema_name,
1207 - 'table_name' => $menu->menu_table_name,
1208 - ));
1209 - $menus_shown_to_current_user[$menu->menu_slug . '/' . $menu->menu_name . '/' . $menu_index . '/' . $menu->menu_schema_name] = true;
1210 - }
1211 - }
1212 - }
1213 - }
1214 -
1215 - /**
1216 - * Show user defined menus
1217 - *
1218 - * A user defined menu that are added to the plugin menu in {@see WP_Data_Access_Admin::add_menu_my_tables()} is
1219 - * shown here. This method is called when the user clicks on the menu item generated in
1220 - * {@see WP_Data_Access_Admin::add_menu_my_tables()}.
1221 - *
1222 - * @since 1.0.0
1223 - *
1224 - * @see WP_Data_Access_Admin::add_menu_my_tables()
1225 - */
1226 - public function my_tables_page() {
1227 - // Grab table name from menu slug.
1228 - if ( null !== $this->page ) {
1229 - if ( strpos( $this->page, self::PAGE_EXPLORER ) !== false ) {
1230 - $table = substr( $this->page, strlen( self::PAGE_EXPLORER . '_' ) );
1231 - } else {
1232 - $table = substr( $this->page, strlen( self::PAGE_MY_TABLES . '_' ) );
1233 - }
1234 - // Show list table.
1235 - $this->wpda_my_table_list_view[$table]->show();
1236 - }
1237 - }
1238 -
1239 - /**
1240 1081 * Add main menu for non admin user
1241 1082 *
1242 1083 * @param string $first_page First plugin page.
1243 1084 * @return void
@@ -1259,4 +1100,6 @@
1259 1100 }
1260 1101 }
1261 1102
1262 1103 }
1104 +
1105 +// phpcs:enable WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing