PluginProbe
CookieAdmin – Cookie Consent Banner / 1.2.6
CookieAdmin – Cookie Consent Banner v1.2.6
1.2.6 1.2.5 1.2.4 1.2.3 1.2.2 1.2.1 1.2.0 1.1.9 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 All 26 releases
cookieadmin / includes / admin / dashboard.php

dashboard.php in CookieAdmin – Cookie Consent Banner 1.2.6, at includes/admin/dashboard.php

421 lines 15.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace CookieAdmin\Admin;
4
5 if(!defined('COOKIEADMIN_VERSION') || !defined('ABSPATH')){
6 die('Hacking Attempt');
7 }
8
9 class Dashboard{
10
11 static function dashboard(){
12
13 global $cookieadmin_lang, $cookieadmin_error, $cookieadmin_msg, $cookieadmin_settings;
14
15 \CookieAdmin\Admin::header_theme(__('Dashboard', 'cookieadmin'));
16
17 $view = get_option('cookieadmin_law', 'cookieadmin_gdpr');
18
19 $stats = array();
20
21 $stats['banner'] = array(
22 'icon' => 'yes-alt',
23 'icon_color' => 'green',
24 'label' => __('Consent Banner', 'cookieadmin'),
25 'value' => esc_html__('Enabled', 'cookieadmin'),
26 'value_class' => 'cookieadmin-green',
27 );
28
29 $stats['consent_type'] = array(
30 'icon' => 'admin-site',
31 'icon_color' => 'blue',
32 'label' => __('Consent Type', 'cookieadmin'),
33 'value' => ($view == 'cookieadmin_us' ? esc_html__('US State Laws', 'cookieadmin') : ($view == 'cookieadmin_dpdp' ? esc_html__('DPDP Act (India)', 'cookieadmin') : esc_html__('GDPR', 'cookieadmin'))),
34 'value_class' => 'cookieadmin-uppercase',
35 'edit_url' => admin_url('admin.php?page=cookieadmin-consent'),
36 );
37
38 $stats['gcm'] = array(
39 'icon' => 'google',
40 'icon_color' => 'navy',
41 'label' => __('Google Consent Mode v2', 'cookieadmin'),
42 'value' => (!empty($cookieadmin_settings['google_consent_mode_v2']) ? '<span class="cookieadmin-green">'.esc_html__('Enabled', 'cookieadmin').'</span>' : esc_html__('Disabled', 'cookieadmin')),
43 'edit_url' => admin_url('admin.php?page=cookieadmin-settings'),
44 );
45
46 $stats['auto_scan'] = array(
47 'icon' => 'update',
48 'icon_color' => 'amber',
49 'label' => __('Auto Scan', 'cookieadmin'),
50 'value' => (!empty($cookieadmin_settings['cookieadmin_auto_scan']) ? '<span class="cookieadmin-green">'.esc_html__('Enabled', 'cookieadmin').'</span>' : esc_html__('Disabled', 'cookieadmin')),
51 'edit_url' => admin_url('admin.php?page=cookieadmin-settings'),
52 );
53
54 $stats = apply_filters('cookieadmin_dashboard_stats', $stats);
55
56 // Stat cards
57 echo '<div class="cookieadmin-stats-grid">';
58 foreach($stats as $stat){
59 echo '<div class="cookieadmin-stat-card">
60 <div class="cookieadmin-stat-icon cookieadmin-stat-icon--'.esc_attr($stat['icon_color']).'"><span class="dashicons dashicons-'.esc_attr($stat['icon']).'"></span></div>
61 <div class="cookieadmin-stat-label">'.esc_html($stat['label']);
62 if(!empty($stat['edit_url'])){
63 echo ' <a class="cookieadmin-stat-edit" href="'.esc_url($stat['edit_url']).'">'.esc_html__('Edit', 'cookieadmin').'</a>';
64 }
65 echo '</div>
66 <div class="cookieadmin-stat-value '.(!empty($stat['value_class']) ? esc_attr($stat['value_class']) : '').'">'.wp_kses_post($stat['value']).'</div>
67 </div>';
68 }
69 echo '</div>';
70
71 // ====== DASHBOARD LAYOUT: MAIN 70% + SIDEBAR 30% ======
72 $checklist = self::get_setup_checklist();
73 $inventory = self::get_cookie_inventory();
74
75 echo '<div class="cookieadmin-dashboard-grid">';
76
77 // MAIN AREA (~70%)
78 echo '<div class="cookieadmin-dashboard-main">';
79
80 // Setup Checklist
81 echo '<div class="cookieadmin-card cookieadmin-mb-16">
82 <div class="cookieadmin-card-header">
83 <span class="cookieadmin-card-title"><span class="dashicons dashicons-performance"></span>'.esc_html__('Setup Checklist', 'cookieadmin').'</span>
84 </div>
85 <div class="cookieadmin-card-body">
86 <ol class="cookieadmin-checklist">';
87 foreach($checklist as $item){
88 // We should not show the checklist of Pro features if Pro is disabled.
89 if(isset($item['pro']) && !defined('COOKIEADMIN_PRO_VERSION')){
90 continue;
91 }
92
93 $done_class = $item['done'] ? 'cookieadmin-checklist-item--done' : 'cookieadmin-checklist-item--pending';
94 $icon = $item['done'] ? 'yes' : 'marker';
95 echo '<li><a href="'.esc_url($item['url']).'" class="'.esc_attr($done_class).'"><span class="dashicons dashicons-'.esc_attr($icon).'"></span> '.esc_html($item['label']).'</a></li>';
96 }
97 echo '</ol>
98 </div>
99 </div>';
100
101 // Cookie Inventory
102 echo '<div class="cookieadmin-card cookieadmin-mb-16">
103 <div class="cookieadmin-card-header">
104 <span class="cookieadmin-card-title"><span class="dashicons dashicons-chart-pie"></span>'.esc_html__('Cookie Inventory', 'cookieadmin').'</span>
105 <a href="'.esc_url(admin_url('admin.php?page=cookieadmin-scan-cookies')).'" class="cookieadmin-btn cookieadmin-btn-secondary cookieadmin-btn-sm">'.esc_html__('View All Cookies', 'cookieadmin').'</a>
106 </div>
107 <div class="cookieadmin-card-body">';
108 if(!empty($inventory['total'])){
109 echo '<div class="cookieadmin-inventory-total"><span class="cookieadmin-inventory-number">'.esc_html($inventory['total']).'</span> <span class="cookieadmin-inventory-label">'.esc_html__('Cookies discovered', 'cookieadmin').'</span></div>';
110
111 $seg_colors = array('necessary' => 'var(--cookieadmin-success)', 'functional' => 'var(--cookieadmin-info)', 'analytics' => 'var(--cookieadmin-warning)', 'marketing' => 'var(--cookieadmin-danger)', 'unknown' => 'var(--cookieadmin-text-soft)');
112
113 echo '<div class="cookieadmin-segment-bar">';
114 foreach($inventory['categories'] as $cat => $count){
115 if($count > 0 && !empty($inventory['total'])){
116 $pct = round(($count / $inventory['total']) * 100, 1);
117 echo '<div class="cookieadmin-segment" style="width:'.esc_attr($pct).'%;background:'.esc_attr($seg_colors[$cat]).';" title="'.esc_attr(ucfirst($cat)).': '.esc_attr($count).'"></div>';
118 }
119 }
120 echo '</div>';
121
122 echo '<div class="cookieadmin-segment-legend">';
123 foreach($inventory['categories'] as $cat => $count){
124 echo '<span class="cookieadmin-legend-item"><span class="cookieadmin-legend-dot" style="background:'.esc_attr($seg_colors[$cat]).';"></span> '.esc_html(ucfirst($cat)).': <strong>'.esc_html($count).'</strong></span>';
125 }
126 echo '</div>';
127 }else{
128 echo '<p class="cookieadmin-text-muted">'.esc_html__('No cookies discovered yet. Run a scan to get started.', 'cookieadmin').'</p>';
129 }
130 if(!empty($inventory['unknown'])){
131 echo '<div class="cookieadmin-inventory-warning"><span class="dashicons dashicons-warning"></span> '.esc_html__('Some cookies are uncategorized. Run a scan for better compliance.', 'cookieadmin').'</div>';
132 }
133 echo '</div>
134 </div>';
135
136 // Pro main-area widgets (appears inside main, below checklist + inventory)
137 do_action('cookieadmin_dashboard_main_widgets');
138
139 echo '</div>'; // end main
140
141 // SIDEBAR (~30%)
142 echo '<div class="cookieadmin-dashboard-sidebar">';
143
144 // Recommended Plugins (free)
145 self::render_recommended_plugins();
146
147 // Pro sidebar widgets (if any)
148 do_action('cookieadmin_dashboard_sidebar_widgets');
149
150 echo '</div>'; // end sidebar
151
152 echo '</div>'; // end grid
153
154 \CookieAdmin\Admin::footer_theme();
155 }
156
157 static function get_setup_checklist(){
158 global $cookieadmin_settings;
159
160 $policy = cookieadmin_load_policy();
161 $law = get_option('cookieadmin_law', '');
162 $scan = get_option('cookieadmin_scan', array());
163 $cur = !empty($policy[$law]) ? $policy[$law] : array();
164
165 $checklist = array();
166
167 $checklist[] = array(
168 'label' => __('Run Cookie Scan', 'cookieadmin'),
169 'done' => (!empty($scan['success']) && $scan['success'] === true),
170 'url' => admin_url('admin.php?page=cookieadmin-scan-cookies'),
171 );
172
173 $checklist[] = array(
174 'label' => __('Configure Consent Banner', 'cookieadmin'),
175 'done' => !empty($cur),
176 'url' => admin_url('admin.php?page=cookieadmin-consent'),
177 );
178
179 $checklist[] = array(
180 'label' => __('Set Consent Type', 'cookieadmin'),
181 'done' => (!empty($law) && in_array($law, array('cookieadmin_gdpr', 'cookieadmin_us', 'cookieadmin_dpdp'), true)),
182 'url' => admin_url('admin.php?page=cookieadmin-consent'),
183 );
184
185 $checklist[] = array(
186 'label' => __('Enable Google Consent Mode v2', 'cookieadmin'),
187 'done' => !empty($cookieadmin_settings['google_consent_mode_v2']),
188 'url' => admin_url('admin.php?page=cookieadmin-settings'),
189 'pro' => true,
190 );
191
192 $has_links = false;
193 if(!empty($cur['cookieadmin_privacy_policy']) || !empty($cur['cookieadmin_cookie_policy'])){
194 $has_links = true;
195 }
196 $checklist[] = array(
197 'label' => __('Set Privacy / Cookie Policy Links', 'cookieadmin'),
198 'done' => $has_links,
199 'url' => admin_url('admin.php?page=cookieadmin-consent'),
200 'pro' => true,
201 );
202
203 $checklist[] = array(
204 'label' => __('Configure Auto Scan', 'cookieadmin'),
205 'done' => !empty($cookieadmin_settings['cookieadmin_auto_scan']),
206 'url' => admin_url('admin.php?page=cookieadmin-settings'),
207 'pro' => true,
208 );
209
210 return $checklist;
211 }
212
213 static function get_cookie_inventory(){
214 global $wpdb;
215
216 $table_name = esc_sql($wpdb->prefix . 'cookieadmin_cookies');
217
218 if(!\CookieAdmin\Admin::cookieadmin_table_exists($table_name)){
219 return array('total' => 0, 'categories' => array('necessary' => 0, 'functional' => 0, 'analytics' => 0, 'marketing' => 0, 'unknown' => 0), 'unknown' => 0);
220 }
221
222 $total = (int) $wpdb->get_var("SELECT COUNT(*) FROM $table_name");
223
224 $categories = array('necessary' => 0, 'functional' => 0, 'analytics' => 0, 'marketing' => 0, 'unknown' => 0);
225
226 $rows = $wpdb->get_results("SELECT category, COUNT(*) AS cnt FROM $table_name GROUP BY category");
227
228 if(!empty($rows)){
229 foreach($rows as $row){
230 $cat = strtolower($row->category);
231 if(array_key_exists($cat, $categories)){
232 $categories[$cat] = (int) $row->cnt;
233 }else{
234 $categories['unknown'] += (int) $row->cnt;
235 }
236 }
237 }
238
239 return array(
240 'total' => $total,
241 'categories' => $categories,
242 'unknown' => $categories['unknown'],
243 );
244 }
245
246 static function render_recommended_plugins(){
247 $plugins = array(
248 'loginizer' => array(
249 'name' => 'Loginizer',
250 'desc' => __('Brute Force Protection & Login Security', 'cookieadmin'),
251 'icon' => 'dashicons-shield',
252 'wporg_url' => 'https://wordpress.org/plugins/loginizer/',
253 ),
254 'gosmtp' => array(
255 'name' => 'GoSMTP',
256 'desc' => __('SMTP Mailer for WordPress', 'cookieadmin'),
257 'icon' => 'dashicons-email-alt',
258 'wporg_url' => 'https://wordpress.org/plugins/gosmtp/',
259 ),
260 'backuply' => array(
261 'name' => 'Backuply',
262 'desc' => __('Backup & Restore made easy', 'cookieadmin'),
263 'icon' => 'dashicons-backup',
264 'wporg_url' => 'https://wordpress.org/plugins/backuply/',
265 ),
266 'siteseo' => array(
267 'name' => 'SiteSEO',
268 'desc' => __('SEO Optimization for WordPress', 'cookieadmin'),
269 'icon' => 'dashicons-search',
270 'wporg_url' => 'https://wordpress.org/plugins/siteseo/',
271 ),
272 );
273
274 echo '<div class="cookieadmin-card cookieadmin-recommended-plugins">
275 <div class="cookieadmin-card-header">
276 <span class="cookieadmin-card-title"><span class="dashicons dashicons-admin-plugins"></span>'.esc_html__('Recommended Plugins', 'cookieadmin').'</span>
277 </div>
278 <div class="cookieadmin-card-body">';
279
280 foreach($plugins as $slug => $plugin){
281 $status = self::get_plugin_status($slug);
282
283 echo '<div class="cookieadmin-recommended-plugin" data-slug="'.esc_attr($slug).'">
284 <div class="cookieadmin-recommended-plugin-info">
285 <div class="cookieadmin-recommended-plugin-icon"><span class="dashicons '.esc_attr($plugin['icon']).'"></span></div>
286 <div class="cookieadmin-recommended-plugin-details">
287 <div class="cookieadmin-recommended-plugin-name">'.esc_html($plugin['name']).'</div>
288 <div class="cookieadmin-recommended-plugin-desc">'.esc_html($plugin['desc']).'</div>
289 </div>
290 </div>
291 <div class="cookieadmin-recommended-plugin-action">
292 <a href="'.esc_url($plugin['wporg_url']).'" target="_blank" class="cookieadmin-recommended-plugin-link">'.esc_html__('Learn more', 'cookieadmin').'&nbsp;</a>
293 ';
294
295 if($status === 'active'){
296 echo '<span class="cookieadmin-badge cookieadmin-success">'.esc_html__('Active', 'cookieadmin').'</span>';
297 }elseif($status === 'installed'){
298 echo '<button type="button" class="cookieadmin-btn cookieadmin-btn-secondary cookieadmin-btn-sm cookieadmin-plugin-activate-btn" data-slug="'.esc_attr($slug).'">'.esc_html__('Activate', 'cookieadmin').'</button>';
299 }else{
300 echo '<button type="button" class="cookieadmin-btn cookieadmin-btn-primary cookieadmin-btn-sm cookieadmin-plugin-install-btn" data-slug="'.esc_attr($slug).'">'.esc_html__('Install', 'cookieadmin').'</button>';
301 }
302
303 echo '</div>
304 </div>';
305 }
306
307 echo '</div>
308 </div>';
309 }
310
311 static function get_plugin_status($slug){
312 if(!function_exists('get_plugins')){
313 require_once ABSPATH . 'wp-admin/includes/plugin.php';
314 }
315
316 $all_plugins = get_plugins();
317
318 foreach($all_plugins as $plugin_path => $plugin_data){
319 if(strpos($plugin_path, $slug . '/') === 0){
320 if(is_plugin_active($plugin_path)){
321 return 'active';
322 }
323 return 'installed';
324 }
325 }
326
327 return 'not_installed';
328 }
329
330 static function install_recommended_plugin(){
331 check_ajax_referer('cookieadmin_admin_js_nonce', 'cookieadmin_security');
332
333 if(!current_user_can('install_plugins')){
334 wp_send_json_error(array('message' => __('You do not have permission to install plugins.', 'cookieadmin')));
335 }
336
337 $slug = !empty($_REQUEST['plugin']) ? sanitize_text_field(wp_unslash($_REQUEST['plugin'])) : '';
338 if(empty($slug)){
339 wp_send_json_error(array('message' => __('Plugin slug is required.', 'cookieadmin')));
340 }
341
342 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
343 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
344 require_once ABSPATH . 'wp-admin/includes/plugin.php';
345
346 $api = plugins_api('plugin_information', array('slug' => $slug, 'fields' => array('sections' => false)));
347 if(is_wp_error($api)){
348 wp_send_json_error(array('message' => $api->get_error_message()));
349 }
350
351 $skin_class = class_exists('\Automatic_Upgrader_Skin') ? '\Automatic_Upgrader_Skin' : '\WP_Upgrader_Skin';
352 $skin = new $skin_class();
353 $upgrader = new \Plugin_Upgrader($skin);
354 $result = $upgrader->install($api->download_link);
355
356 if(is_wp_error($result)){
357 wp_send_json_error(array('message' => $result->get_error_message()));
358 }
359 if(!$result){
360 wp_send_json_error(array('message' => __('Plugin installation failed.', 'cookieadmin')));
361 }
362
363 $all_plugins = get_plugins();
364 $installed_plugin = '';
365 foreach($all_plugins as $path => $data){
366 if(strpos($path, $slug . '/') === 0){
367 $installed_plugin = $path;
368 break;
369 }
370 }
371
372 if(empty($installed_plugin)){
373 wp_send_json_error(array('message' => __('Plugin installed but could not be located for activation.', 'cookieadmin')));
374 }
375
376 $result = activate_plugin($installed_plugin);
377 if(is_wp_error($result)){
378 wp_send_json_error(array('message' => $result->get_error_message()));
379 }
380
381 wp_send_json_success(array('message' => __('Plugin installed and activated successfully.', 'cookieadmin')));
382 }
383
384 static function activate_recommended_plugin(){
385 check_ajax_referer('cookieadmin_admin_js_nonce', 'cookieadmin_security');
386
387 if(!current_user_can('activate_plugins')){
388 wp_send_json_error(array('message' => __('You do not have permission to activate plugins.', 'cookieadmin')));
389 }
390
391 $slug = !empty($_REQUEST['plugin']) ? sanitize_text_field(wp_unslash($_REQUEST['plugin'])) : '';
392 if(empty($slug)){
393 wp_send_json_error(array('message' => __('Plugin slug is required.', 'cookieadmin')));
394 }
395
396 if(!function_exists('get_plugins')){
397 require_once ABSPATH . 'wp-admin/includes/plugin.php';
398 }
399
400 $all_plugins = get_plugins();
401 $plugin_path = '';
402 foreach($all_plugins as $path => $data){
403 if(strpos($path, $slug . '/') === 0){
404 $plugin_path = $path;
405 break;
406 }
407 }
408
409 if(empty($plugin_path)){
410 wp_send_json_error(array('message' => __('Plugin not found.', 'cookieadmin')));
411 }
412
413 $result = activate_plugin($plugin_path);
414 if(is_wp_error($result)){
415 wp_send_json_error(array('message' => $result->get_error_message()));
416 }
417
418 wp_send_json_success(array('message' => __('Plugin activated successfully.', 'cookieadmin')));
419 }
420 }
421