PluginProbe ʕ •ᴥ•ʔ
Spider Elements – Premium Elementor Widgets & Addons Library / 1.7.0
Spider Elements – Premium Elementor Widgets & Addons Library v1.7.0
trunk 1.0.0 1.1.0 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.7.0 1.8.0 1.9.0
spider-elements / includes / Admin / Dashboard.php
spider-elements / includes / Admin Last commit date
dashboard 6 months ago extension 6 months ago Assets.php 6 months ago Dashboard.php 6 months ago Module_Settings.php 6 months ago Plugin_Installer.php 6 months ago
Dashboard.php
198 lines
1 <?php
2 namespace SPEL\includes\Admin;
3
4 // Exit if accessed directly
5 if ( ! defined( 'ABSPATH' ) ) {
6 exit;
7 }
8
9 /**
10 * Class Admin_Settings
11 *
12 * @package spiderElements\includes\Admin
13 */
14 class Dashboard {
15
16 const PAGE_ID = 'spider_elements_settings';
17
18 /**
19 * List of Spider Elements admin page slugs
20 */
21 private array $plugin_pages = [
22 'spider_elements_settings',
23 'spider_elements_elements',
24 'spider_elements_features',
25 'spider_elements_integration',
26 ];
27
28 public function __construct() {
29 add_action( 'admin_menu', [ $this, 'add_menu_page' ] );
30 add_action( 'admin_init', [ $this, 'hide_admin_notices' ] );
31 }
32
33
34 /**
35 * @return void
36 * Hide all admin notices on Spider Elements pages.
37 */
38 public function hide_admin_notices(): void {
39 // Check if we're on a Spider Elements page
40 if ( ! isset( $_GET['page'] ) || ! in_array( $_GET['page'], $this->plugin_pages, true ) ) {
41 return;
42 }
43
44 // Remove all admin notices
45 remove_all_actions( 'admin_notices' );
46 remove_all_actions( 'all_admin_notices' );
47 }
48
49
50 /**
51 * @return void
52 * Add menu page to the WordPress admin dashboard.
53 */
54 public function add_menu_page(): void {
55 // Add main menu page
56 add_menu_page(
57 esc_html__( 'Spider Elements', 'spider-elements' ),
58 esc_html__( 'Spider Elements', 'spider-elements' ),
59 'manage_options',
60 'spider_elements_settings',
61 [ $this, 'render_plugin_page' ],
62 $this->icon(),
63 30
64 );
65
66 // Add submenus (matching the tab-menu items in sidebar)
67 add_submenu_page(
68 'spider_elements_settings',
69 esc_html__( 'Dashboard', 'spider-elements' ),
70 esc_html__( 'Dashboard', 'spider-elements' ),
71 'manage_options',
72 'spider_elements_settings', // Same as parent to make it the default
73 [ $this, 'render_plugin_page' ]
74 );
75
76 add_submenu_page(
77 'spider_elements_settings',
78 esc_html__( 'Elements', 'spider-elements' ),
79 esc_html__( 'Elements', 'spider-elements' ),
80 'manage_options',
81 'spider_elements_elements',
82 [ $this, 'render_plugin_page' ]
83 );
84
85 add_submenu_page(
86 'spider_elements_settings',
87 esc_html__( 'Features', 'spider-elements' ),
88 esc_html__( 'Features', 'spider-elements' ),
89 'manage_options',
90 'spider_elements_features',
91 [ $this, 'render_plugin_page' ]
92 );
93
94 add_submenu_page(
95 'spider_elements_settings',
96 esc_html__( 'Integration', 'spider-elements' ),
97 esc_html__( 'Integration', 'spider-elements' ),
98 'manage_options',
99 'spider_elements_integration',
100 [ $this, 'render_plugin_page' ]
101 );
102 }
103
104
105 /**
106 * @return string
107 * Get the active tab based on the current page URL.
108 */
109 public function get_active_tab(): string {
110 $page = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : 'spider_elements_settings';
111
112 $tab_map = [
113 'spider_elements_settings' => 'welcome',
114 'spider_elements_elements' => 'elements',
115 'spider_elements_features' => 'features',
116 'spider_elements_integration' => 'integration',
117 ];
118
119 return $tab_map[ $page ] ?? 'welcome';
120 }
121
122
123 /**
124 * @return void
125 * Render the content of the menu page.
126 * This is where you would add your custom HTML
127 */
128 public function render_plugin_page(): void {
129 // Get the active tab based on which submenu was clicked
130 $active_tab = $this->get_active_tab();
131
132 // Map tab names to submenu page slugs
133 $tab_to_page = [
134 'welcome' => 'spider_elements_settings',
135 'elements' => 'spider_elements_elements',
136 'features' => 'spider_elements_features',
137 'integration' => 'spider_elements_integration',
138 ];
139
140 // Get the page slug for the active tab
141 $current_page = $tab_to_page[ $active_tab ] ?? 'spider_elements_settings';
142 $form_action = admin_url( 'admin.php?page=' . $current_page );
143
144 echo '<form action="' . esc_url( $form_action ) . '" method="post" id="spel_settings" name="spel_settings" class="wrapper spel_dashboard" data-active-tab="' . esc_attr( $active_tab ) . '">';
145
146 // Hidden field to track current active tab (updated by JavaScript)
147 echo '<input type="hidden" name="spel_active_tab" id="spel_active_tab" value="' . esc_attr( $active_tab ) . '">';
148
149 //Sidebar's menu
150 echo '<div class="sidebar_navigation">';
151
152 if ( file_exists( require_once __DIR__ . '/dashboard/sidebar.php' ) ) {
153 require_once __DIR__ . '/dashboard/sidebar.php';
154 }
155
156 echo '</div>'; //End of sidebar menu
157
158
159 // Tab contents
160 echo '<div class="tab_contents">';
161
162 if ( file_exists( require_once __DIR__ . '/dashboard/welcome.php' ) ) {
163 require_once __DIR__ . '/dashboard/welcome.php';
164 }
165
166 if ( file_exists( require_once __DIR__ . '/dashboard/elements.php' ) ) {
167 require_once __DIR__ . '/dashboard/elements.php';
168 }
169
170 if ( file_exists( require_once __DIR__ . '/dashboard/features.php' ) ) {
171 require_once __DIR__ . '/dashboard/features.php';
172 }
173
174 if ( file_exists( require_once __DIR__ . '/dashboard/integration.php' ) ) {
175 require_once __DIR__ . '/dashboard/integration.php';
176 }
177
178 if ( file_exists( require_once __DIR__ . '/dashboard/popup-pro.php' ) ) {
179 require_once __DIR__ . '/dashboard/popup-pro.php';
180 }
181
182 echo '</div>'; //End of tab contents
183
184 echo '</form>'; //End of wrapper
185
186 }
187
188
189 /**
190 * @return string
191 * Return the base64 encoded SVG icon.
192 */
193 public function icon(): string {
194 return 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODYiIGhlaWdodD0iODMiIHZpZXdCb3g9IjAgMCA4NiA4MyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzRfMjExMikiPgo8cGF0aCBkPSJNODYgMTkuNjE0MlYxNS45OTc2VjBINzAuMjI4M0gxNS43NzE3QzcuMDYwNTcgMCAwIDcuMTYxNzEgMCAxNS45OTc2SDc2LjAxMjJDNzguNzMxNCAxOC4yNTg0IDgyLjIwODcgMTkuNjE0MiA4NiAxOS42MTQyWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzRfMjExMikiLz4KPHBhdGggZD0iTTAgNjMuMzg1N1Y2Ny4wMDI0VjgzSDE1Ljc3MTdINzAuMjI4M0M3OC45Mzk0IDgzIDg2IDc1LjgzODIgODYgNjcuMDAyNEg5Ljk4Nzc4QzcuMjY4NjUgNjQuNzQxNSAzLjc5MTI3IDYzLjM4NTcgMCA2My4zODU3WiIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyXzRfMjExMikiLz4KPHBhdGggZD0iTTcwLjIyODMgMzMuNTAxMkgwQzAgNDIuMzM3MSA3LjA2MDU3IDQ5LjQ5ODggMTUuNzcxNyA0OS40OTg4SDg2Qzg2IDQwLjY2MjkgNzguOTM5NCAzMy41MDEyIDcwLjIyODMgMzMuNTAxMloiIGZpbGw9InVybCgjcGFpbnQyX2xpbmVhcl80XzIxMTIpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl80XzIxMTIiIHgxPSIwIiB5MT0iOS44MDcxMSIgeDI9Ijg2IiB5Mj0iOS44MDcxMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjNzQ2MEZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzlENzBGRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfNF8yMTEyIiB4MT0iMCIgeTE9IjczLjE5MjkiIHgyPSI4NiIgeTI9IjczLjE5MjkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzc0NjBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM5RDcwRkYiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzRfMjExMiIgeDE9IjAiIHkxPSI0MS41IiB4Mj0iODYiIHkyPSI0MS41IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiM3NDYwRkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjOUQ3MEZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxjbGlwUGF0aCBpZD0iY2xpcDBfNF8yMTEyIj4KPHJlY3Qgd2lkdGg9Ijg2IiBoZWlnaHQ9IjgzIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=';
195 }
196
197
198 }