admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('cookieadmin_pro_admin_js_nonce'), 'rules' => get_option('cookieadmin_geo_rules', []), 'countries' => $locations['countries'], 'continents' => $locations['continents'], 'laws' => apply_filters('cookieadmin_geo_law_options', [ 'cookieadmin_gdpr' => __('GDPR', 'cookieadmin'), 'cookieadmin_us' => __('US State Laws', 'cookieadmin'), ]), 'geo_enabled' => get_option('cookieadmin_geo_enabled', false), 'lang' => [ 'table_title' => __('Geo Targeting Rules', 'cookieadmin'), 'rule_name' => __('Rule Name', 'cookieadmin'), 'law_type' => __('Law Type', 'cookieadmin'), 'select_law' => __('Select Law Type', 'cookieadmin'), 'countries' => __('Countries', 'cookieadmin'), 'add_country' => __('+ Add Country', 'cookieadmin'), 'remove_country' => __('Remove', 'cookieadmin'), 'block_scripts' => __('Block Scripts', 'cookieadmin'), 'block_scripts_short' => __('Scripts', 'cookieadmin'), 'content_blocking' => __('Content Blocking', 'cookieadmin'), 'content_blocking_short' => __('Content', 'cookieadmin'), 'google_consent_mode' => __('Google Consent Mode', 'cookieadmin'), 'google_consent_mode_short' => __('Google', 'cookieadmin'), 'clarity_consent' => __('Clarity Consent', 'cookieadmin'), 'clarity_consent_short' => __('Clarity', 'cookieadmin'), 'inherit' => __('Inherit', 'cookieadmin'), 'on' => __('On', 'cookieadmin'), 'off' => __('Off', 'cookieadmin'), 'edit' => __('Edit', 'cookieadmin'), 'delete' => __('Delete', 'cookieadmin'), 'delete_rule' => __('Delete Rule', 'cookieadmin'), 'saving' => __('Saving...', 'cookieadmin'), 'saved' => __('Settings saved successfully', 'cookieadmin'), 'save_error' => __('Failed to save. Please try again.', 'cookieadmin'), 'rule_saved' => __('Rule saved', 'cookieadmin'), 'name_required' => __('Rule name is required', 'cookieadmin'), 'law_required' => __('Law type is required', 'cookieadmin'), 'countries_required' => __('At least one country is required', 'cookieadmin'), 'delete_confirm' => __('Are you sure you want to delete this rule?', 'cookieadmin'), 'shortcut_exists' => __('This shortcut is already added', 'cookieadmin'), 'shortcut_added' => __('shortcut added', 'cookieadmin'), 'remove_shortcut' => __('Remove shortcut', 'cookieadmin'), 'country_singular' => __('country', 'cookieadmin'), 'country_plural' => __('countries', 'cookieadmin'), 'gdpr_preset_name' => __('GDPR Countries', 'cookieadmin'), 'us_preset_name' => __('US State Laws', 'cookieadmin'), 'shortcuts_label' => __('Shortcuts', 'cookieadmin'), 'shortcut_eu' => __('EU', 'cookieadmin'), 'shortcut_eea' => __('EEA', 'cookieadmin'), 'shortcut_africa' => __('Africa', 'cookieadmin'), 'shortcut_asia' => __('Asia', 'cookieadmin'), 'shortcut_europe' => __('Europe', 'cookieadmin'), 'shortcut_north_america' => __('North America', 'cookieadmin'), 'shortcut_south_america' => __('South America', 'cookieadmin'), 'shortcut_oceania' => __('Oceania', 'cookieadmin'), 'shortcut_caribbean' => __('Caribbean', 'cookieadmin'), 'shortcut_asean' => __('ASEAN', 'cookieadmin'), 'shortcut_worldwide' => __('Worldwide', 'cookieadmin'), 'toggle_error' => __('Failed to update setting', 'cookieadmin'), 'rule_singular' => __('rule', 'cookieadmin'), 'rule_plural' => __('rules', 'cookieadmin'), ], ]; wp_localize_script('cookieadmin-geo-js', 'cookieadmin_geo_vars', $geo_vars); } // Add tinymce editor script for the Do Not Sell page if($current_page === 'cookieadmin-do-not-sell'){ $current_tab = !empty($_GET['tab']) ? sanitize_text_field(wp_unslash($_GET['tab'])) : ''; if($current_tab === 'settings'){ wp_enqueue_editor(); } } } //Re-Consent Icons static function reconsent_icons($icons_grid = '', $policy = []){ $icon_files = glob(COOKIEADMIN_PRO_DIR . 'assets/images/re-consent-icons/*.svg', GLOB_BRACE); if(empty($icon_files)){ return $icons_grid; } $default_icon = 'cookieadmin.svg'; $selected_icon = !empty($policy['cookieadmin_reconsent_icon']) ? basename($policy['cookieadmin_reconsent_icon']) : $default_icon; $bg_color = !empty($policy['cookieadmin_re_consent_bg_color']) ? 'background-color:'.$policy['cookieadmin_re_consent_bg_color'] : ''; foreach($icon_files as $icon_file){ $icon_name = basename($icon_file); $is_selected = ($icon_name === $selected_icon) ? 'checked' : ''; $icon_ext_dashed = str_replace('.', '-', $icon_name); $icons_grid .= ''; } return $icons_grid; } // Admin notice to create consent table if missing when consent logs are enabled static function table_missing_notice(){ if(!is_admin()) return; // Only show on our plugin admin pages $current_page = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : ''; if(strpos($current_page, 'cookieadmin') === FALSE) { return; } global $wpdb; $table_name = $wpdb->prefix . 'cookieadmin_consents'; $exists = $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $table_name)); if($exists === $table_name){ return; } echo '
'; echo '

'.esc_html__('The Consent table is missing. Consent Logs and Consent data cannot be saved.', 'cookieadmin').'

'; echo '

'; echo '
'; } //Add Main Menu static function plugin_menu(){ } static function show_settings($title = 'CookieAdmin Pro'){ } static function cookieadmin_pro_table_exists($table_name) { global $wpdb; $query = $wpdb->prepare("SHOW TABLES LIKE %s", $table_name); return $wpdb->get_var($query) === $table_name; } // Create Consent table via AJAX static function create_consent_table() { \CookieAdminPro\Database::activate(); wp_send_json_success(esc_html__('Consent table created', 'cookieadmin')); } static function show_consent_logs(){ global $cookieadmin_lang, $cookieadmin_error, $cookieadmin_msg; \CookieAdmin\Admin::header_theme(__('Consent Logs', 'cookieadmin')); $log_data = \CookieAdminPro\Admin::get_consent_logs(); $consent_logs = (!empty($log_data['logs']) ? $log_data['logs'] : array()); echo ' '; \CookieAdmin\Admin::footer_theme(); } //Load Consent logs data from the database static function get_consent_logs(){ global $wpdb; if($_POST && count($_POST) > 0){ $nonce_slug = (wp_doing_ajax() ? 'cookieadmin_pro_admin_js_nonce' : 'cookieadmin_pro_admin_nonce'); check_admin_referer($nonce_slug, 'cookieadmin_pro_security'); } if(!current_user_can('administrator')){ wp_send_json_error(array('message' => 'Sorry, but you do not have permissions to perform this action')); } $num_items = 0; $table_name = esc_sql($wpdb->prefix . 'cookieadmin_consents'); $current_page = isset($_POST['current_page']) ? intval($_POST['current_page']) : 1; if (!\CookieAdminPro\Admin::cookieadmin_pro_table_exists($table_name)) { // wp_send_json_error(['message' => 'Table does not exist']); return array(); } // Get total number of logs $total_consent_logs = (int) $wpdb->get_var("SELECT COUNT(*) FROM $table_name"); $logs_per_page = 25; // Calculate max pages $max_page = ceil($total_consent_logs / $logs_per_page); $max_page = max(1, $max_page); // Ensure current page is within valid range if ($current_page > $max_page) { $current_page = $max_page; } elseif ($current_page < 1) { $current_page = 1; } // Calculate pagination offset $offset = ($current_page - 1) * $logs_per_page; // Fetch paginated logs $consent_logs = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $table_name ORDER BY id DESC LIMIT %d OFFSET %d", $logs_per_page, $offset ), ARRAY_A ); if(!empty($consent_logs)){ foreach($consent_logs as $lk => $log){ if(!empty($log['consent_status'])){ $_consent_status = json_decode($log['consent_status'], true)[0]; if($_consent_status == 'accept'){ $consent_logs[$lk]['consent_status_raw'] = 'accept'; $consent_logs[$lk]['consent_status'] = __('Accepted', 'cookieadmin'); }elseif($_consent_status == 'reject'){ $consent_logs[$lk]['consent_status_raw'] = 'reject'; $consent_logs[$lk]['consent_status'] = __('Rejected', 'cookieadmin'); }else{ $consent_logs[$lk]['consent_status_raw'] = 'partially_accepted'; $consent_logs[$lk]['consent_status'] = __('Partially Accepted', 'cookieadmin'); } } if(!empty($log['consent_time'])){ $consent_logs[$lk]['consent_time'] = cookieadmin_pro_human_readable_time($log['consent_time']); } if(!empty($log['user_ip'])){ $consent_logs[$lk]['user_ip'] = inet_ntop($log['user_ip']); } } $num_items = count($consent_logs); } $min_items = $offset + 1; $max_items = $min_items + ($num_items - 1); $return = [ 'logs' => $consent_logs, 'total_logs' => $total_consent_logs, 'logs_per_page' => $logs_per_page, 'current_page' => $current_page, 'total_pages' => $max_page, 'min_items' => $min_items, 'max_items' => $max_items ]; // Return logs as JSON response if (defined('DOING_AJAX') && DOING_AJAX) { wp_send_json_success($return); } // Return paginated data return $return; } // Export Consent Logs from the Database static function export_logs() { global $wpdb; $cookieadmin_export_type = !empty($_REQUEST['cookieadmin_export_type']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_export_type'])) : ''; if(!empty($cookieadmin_export_type)){ if($cookieadmin_export_type == 'consent_logs'){ $table_name = esc_sql($wpdb->prefix . 'cookieadmin_consents'); //First will check if the table in the database exists or not? if(!self::cookieadmin_pro_table_exists($table_name)){ echo -1; echo esc_html__('Table does not exists', 'cookieadmin'); wp_die(); } $logs = $wpdb->get_results("SELECT * FROM $table_name ORDER BY id DESC", ARRAY_A); $filename = 'cookieadmin-consent-logs'; } } if(empty($logs)){ echo -1; echo esc_html__('No data to export', 'cookieadmin'); wp_die(); } header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename='.$filename.'.csv'); $allowed_fields = array('consent_id' => 'Consent Id', 'consent_status' => 'Consent Status', 'country' => 'Country', 'user_ip' => 'User IP (Anonymized)', 'consent_time' => 'Consent Time'); $file = fopen("php://output","w"); fputcsv($file, array_values($allowed_fields)); foreach($logs as $ik => $log){ if(!empty($log['consent_status'])){ $_consent_status = json_decode($log['consent_status'], true)[0]; if($_consent_status == 'accept'){ $log['consent_status'] = __('Accepted', 'cookieadmin'); }elseif($_consent_status == 'reject'){ $log['consent_status'] = __('Rejected', 'cookieadmin'); }else{ $log['consent_status'] = __('Partially Accepted', 'cookieadmin'); } } if(!empty($log['consent_time'])){ $log['consent_time'] = wp_date('M j Y g:i A T', $log['consent_time']); } if(!empty($log['user_ip'])){ $log['user_ip'] = inet_ntop($log['user_ip']); } $log['country'] = (!empty($log['country']) ? $log['country'] : '—'); $row = array(); foreach($allowed_fields as $ak => $av){ $row[$ak] = $log[$ak]; } fputcsv($file, $row); } fclose($file); wp_die(); } static function version_notice(){ $type = ''; if(!empty($_REQUEST['type'])){ $type = sanitize_text_field(wp_unslash($_REQUEST['type'])); } if(empty($type)){ wp_send_json_error(__('Unknow version difference type', 'cookieadmin')); } update_option('cookieadmin_version_'. $type .'_nag', time() + WEEK_IN_SECONDS); wp_send_json_success(); } static function dismiss_expired_licenses(){ update_option('softaculous_expired_licenses', time()); wp_send_json_success(); } // Manual Add cookie feature for Admin static function add_cookie(){ global $wpdb; $table_name = esc_sql($wpdb->prefix . 'cookieadmin_cookies'); $data = null; if(empty($_REQUEST['cookie_info'])){ wp_send_json([ 'success' => false, 'data' => null, 'message' => __('Error : Cookie details missing', 'cookieadmin')]); } $cookie_info = map_deep(wp_unslash($_REQUEST['cookie_info']), 'sanitize_text_field' ); $scan_timestamp = time(); if(empty($cookie_info['duration'])){ $calculated_expiry = 0; }else{ $calculated_expiry_seconds = ($cookie_info['duration'] * 86400) + $scan_timestamp; $calculated_expiry = date('Y-m-d H:i:s', $calculated_expiry_seconds); } $patterns = '[]'; $csv_matches = cookieadmin_load_cookies_csv([$cookie_info['name']], 0); if(!empty($csv_matches) && !is_wp_error($csv_matches)){ foreach($csv_matches as $match){ if(isset($match['cookie_name']) && $match['cookie_name'] === $cookie_info['name']){ $patterns = isset($match['patterns']) ? $match['patterns'] : '[]'; break; } } } $data = [ 'cookie_name' => $cookie_info['name'], 'category' => $cookie_info['type'], 'description' => $cookie_info['description'], 'domain' => wp_parse_url( home_url(), PHP_URL_HOST ), 'expires' => $calculated_expiry, 'scan_timestamp' => $scan_timestamp, 'patterns' => $patterns, 'edited' => 1 ]; $formats = ['%s', '%s', '%s', '%s', '%s', '%d', '%s', '%d']; $wpdb->insert($table_name, $data, $formats); $data = $wpdb->insert_id; if ($wpdb->last_error || $data === false) { //error_log('DB Error: ' . $wpdb->last_error); // Log it wp_send_json([ 'success' => false, 'data' => null, 'message' => __('Cookie addition Failed, Error: ', 'cookieadmin') . esc_html($wpdb->last_error) ]); } wp_send_json([ 'success' => true, 'data' => $data, 'message' => __('Cookie addition successful', 'cookieadmin') ]); } //Starts the consent logs deletion for ajax static function consent_log_pruning_ajax(){ if(get_transient('cookieadmin_pruning_in_progress')){ wp_send_json([ 'success' => false, 'message' => __('Deletion is already running in the background. You will be notified on completion.', 'cookieadmin') ]); } $consent_logs_expiry = !empty($_REQUEST['consent_logs_expiry']) ? absint(wp_unslash($_REQUEST['consent_logs_expiry'])) : 0; if($consent_logs_expiry <= 0){ wp_send_json([ 'success' => false, 'message' => __('Please set a valid logs expiry day(s) limit to start deleting.', 'cookieadmin') ]); } $retention_limit = time() - ($consent_logs_expiry * DAY_IN_SECONDS); set_transient('cookieadmin_pruning_in_progress', 'true', 3600); \CookieAdminPro\Cron::consent_log_pruning_batch($retention_limit); wp_send_json([ 'success' => false, 'message' => __('Deletion has started in the background. You will be notified on completion.', 'cookieadmin') ]); } static function get_preloaded_pages(){ $home_url = untrailingslashit(home_url('/')); $page_ids = get_posts([ 'post_type' => 'page', 'post_status' => 'publish', 'posts_per_page' => 20, 'orderby' => 'title', 'order' => 'ASC', 'fields' => 'ids', ]); $pages = []; foreach($page_ids as $id){ $url = untrailingslashit(get_permalink($id)); if($url === $home_url){ continue; } $pages[] = [ 'id' => $id, 'title' => get_the_title($id), 'url' => $url, 'type' => 'page', ]; } return $pages; } static function resolve_entry($val){ if($val === 'home'){ return ['type' => 'home', 'id' => 0, 'title' => __('Home', 'cookieadmin'), 'icon' => 'dashicons-admin-home', 'valid' => true]; } if($val === 'latest_post'){ $latest = get_posts(['post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => 1, 'fields' => 'ids']); if(!empty($latest)){ return ['type' => 'latest_post', 'id' => $latest[0], 'title' => __('Single Post', 'cookieadmin'), 'url' => untrailingslashit(get_permalink($latest[0])), 'icon' => 'dashicons-admin-post', 'valid' => true]; } return ['type' => 'latest_post', 'id' => 0, 'title' => __('Single Post', 'cookieadmin'), 'url' => '', 'icon' => 'dashicons-admin-post', 'valid' => false]; } if($val === 'latest_product'){ if(!post_type_exists('product')){ return ['type' => 'latest_product', 'id' => 0, 'title' => __('Single Product', 'cookieadmin'), 'url' => '', 'icon' => 'dashicons-products', 'valid' => false]; } $latest = get_posts(['post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => 1, 'fields' => 'ids']); if(!empty($latest)){ return ['type' => 'latest_product', 'id' => $latest[0], 'title' => __('Single Product', 'cookieadmin'), 'url' => untrailingslashit(get_permalink($latest[0])), 'icon' => 'dashicons-products', 'valid' => true]; } return ['type' => 'latest_product', 'id' => 0, 'title' => __('Single Product', 'cookieadmin'), 'url' => '', 'icon' => 'dashicons-products', 'valid' => false]; } if(is_numeric($val) && $val > 0){ if(get_post_status($val) === 'publish' && get_post_type($val) === 'page'){ $url = untrailingslashit(get_permalink($val)); return ['type' => 'page', 'id' => $val, 'title' => get_the_title($val), 'url' => $url, 'icon' => 'dashicons-admin-page', 'valid' => true]; } return ['type' => 'page', 'id' => $val, 'title' => '', 'url' => '', 'icon' => 'dashicons-admin-page', 'valid' => false]; } return null; } static function render_scan_pages_ui(){ $saved = get_option('cookieadmin_scan_pages', []); $home_url = untrailingslashit(home_url('/')); $home_resolved = self::resolve_entry('home'); echo '
'.esc_html__('Pages to Scan', 'cookieadmin').' 
'; echo '
'.esc_html($home_resolved['title']).'
'; if(!empty($saved)){ foreach($saved as $entry){ if($entry === 'home') continue; $resolved = self::resolve_entry($entry); if(empty($resolved)) continue; $type = $resolved['type']; $valid = $resolved['valid']; $title = $resolved['title']; $url = $resolved['url']; $icon = $resolved['icon']; $type_class = 'cookieadmin-sp-card--'.sanitize_html_class($type); $warning_class = !$valid ? ' cookieadmin-sp-card--warning' : ''; $path = ''; if($type === 'page' && !empty($url)){ $path = str_replace($home_url, '', $url); if(empty($path)) $path = '/'; } $data_val = esc_attr($entry); echo '
'.esc_html($title).''; if(!$valid){ echo ''.esc_html__('No longer available', 'cookieadmin').''; } echo '×
'; if(!empty($path) && $path !== '/'){ echo '
'.esc_html($path).'
'; } echo '
'; } } echo '
'; } static function ajax_search_scan_content(){ check_ajax_referer('cookieadmin_pro_admin_js_nonce', 'cookieadmin_pro_security'); if(!current_user_can('administrator')){ wp_send_json_error(['message' => __('Unauthorized', 'cookieadmin')]); } $search = !empty($_REQUEST['s']) ? sanitize_text_field(wp_unslash($_REQUEST['s'])) : ''; $selected_ids = !empty($_REQUEST['selected_ids']) ? array_map('absint', (array)$_REQUEST['selected_ids']) : []; $home_url = untrailingslashit(home_url('/')); $results = []; if(strlen($search) >= 2){ $page_ids = get_posts([ 'post_type' => 'page', 'post_status' => 'publish', 's' => $search, 'posts_per_page' => 20, 'orderby' => 'title', 'order' => 'ASC', 'fields' => 'ids', 'exclude' => $selected_ids, ]); foreach($page_ids as $id){ $url = untrailingslashit(get_permalink($id)); if($url === $home_url) continue; $results[] = [ 'id' => $id, 'title' => get_the_title($id), 'url' => $url, 'type' => 'page', ]; } } wp_send_json_success($results); } static function ajax_save_scan_pages(){ check_ajax_referer('cookieadmin_pro_admin_js_nonce', 'cookieadmin_pro_security'); if(!current_user_can('administrator')){ wp_send_json_error(['message' => __('Unauthorized', 'cookieadmin')]); } $selections = !empty($_REQUEST['selections']) ? wp_unslash($_REQUEST['selections']) : []; if(!is_array($selections)) $selections = []; $saved = ['home']; $post_added = false; $product_added = false; $page_count = 0; foreach($selections as $sel){ $val = sanitize_text_field($sel); if(is_numeric($val) && absint($val) > 0){ $id = absint($val); if(get_post_status($id) === 'publish' && get_post_type($id) === 'page' && $page_count < 4){ $saved[] = $id; $page_count++; } }elseif($val === 'latest_post' && !$post_added){ $saved[] = 'latest_post'; $post_added = true; }elseif($val === 'latest_product' && !$product_added && post_type_exists('product')){ $saved[] = 'latest_product'; $product_added = true; } if(($page_count + ($post_added ? 1 : 0) + ($product_added ? 1 : 0)) >= 4) break; } $user_count = count($saved) - 1; if($user_count > 4){ $saved = array_slice($saved, 0, 5); } update_option('cookieadmin_scan_pages', $saved, true); wp_send_json_success([ 'message' => __('Scan pages saved', 'cookieadmin'), 'data' => $saved, ]); } static function cookieadmin_get_site_urls($urls = [], $limit = 5){ $saved = get_option('cookieadmin_scan_pages', []); $home_url = home_url('/'); if(!empty($saved) && is_array($saved)){ $urls[] = $home_url; foreach($saved as $val){ if($val === 'home') continue; // Need to make sure home URL is always at first $resolved = self::resolve_entry($val); if(empty($resolved) || !$resolved['valid']) continue; $urls[] = $resolved['url']; } } $limit = max(1, (int) $limit); if(empty($urls)){ $urls[] = $home_url; } // Normalize, dedupe, limit $urls = array_map('untrailingslashit', $urls); $urls = array_values(array_unique($urls)); $urls = array_slice($urls, 0, $limit); // Persist canonical scan set update_option('cookieadmin_to_scan_urls', $urls); return apply_filters('cookieadmin_scan_urls', $urls); } // Saves cookieadmin_settings settings for the Pro features. static function save_settings($value, $old_value, $option){ global $cookieadmin, $cookieadmin_settings; // If we are not saving any settings we simply return if(empty($_REQUEST['cookieadmin_save_settings'])){ return $value; } check_admin_referer('cookieadmin_admin_nonce', 'cookieadmin_security'); if(!current_user_can('administrator')){ wp_die(__('Sorry, but you do not have permissions to perform this action', 'cookieadmin')); } if(empty($value)){ $value = []; } $cookieadmin_settings = $value; $cookieadmin_settings['respect_gpc'] = !empty($_REQUEST['cookieadmin_respect_gpc']); $cookieadmin_settings['gpc_message'] = !empty($_REQUEST['cookieadmin_gpc_message']) ? trim(sanitize_textarea_field(wp_unslash($_REQUEST['cookieadmin_gpc_message']))) : ''; $cookieadmin_settings['gpc_override_warning'] = !empty($_REQUEST['cookieadmin_gpc_override_warning']) ? trim(sanitize_textarea_field(wp_unslash($_REQUEST['cookieadmin_gpc_override_warning']))) : ''; if($cookieadmin_settings['gpc_message'] === $cookieadmin['gpc_message_default']){ unset($cookieadmin_settings['gpc_message']); } if($cookieadmin_settings['gpc_override_warning'] === $cookieadmin['gpc_override_warning_default']){ unset($cookieadmin_settings['gpc_override_warning']); } // Creating gpc.json if respect gpc was enabled. if(!empty($cookieadmin_settings['respect_gpc']) && (empty($old_value) || empty($old_value['respect_gpc']))){ \CookieAdminPro\GPC::create_gpc_json_file(); } // If GPC has been disable we will need to delete the gpc.json file if(empty($cookieadmin_settings['respect_gpc']) && !empty($old_value) && !empty($old_value['respect_gpc'])){ $gpc_path = ABSPATH . '.well-known/gpc.json'; if(file_exists($gpc_path)){ unlink($gpc_path); } } return $cookieadmin_settings; } // Dashboard widget: Recent Consent Logs static function dashboard_consent_logs_widget(){ global $wpdb; $table_name = esc_sql($wpdb->prefix . 'cookieadmin_consents'); if(!\CookieAdminPro\Admin::cookieadmin_pro_table_exists($table_name)){ return; } $logs = $wpdb->get_results( "SELECT consent_id, consent_status, country, consent_time, user_ip FROM {$table_name} ORDER BY id DESC LIMIT 10", ARRAY_A ); if(empty($logs)){ return; } echo '
'.esc_html__('Recent Consent Logs', 'cookieadmin').' '.esc_html__('View All Logs', 'cookieadmin').'
'; foreach($logs as $log){ $status_raw = ''; $status_label = ''; $status_class = ''; if(!empty($log['consent_status'])){ $_status = json_decode($log['consent_status'], true); if(is_array($_status) && !empty($_status[0])){ $_status = $_status[0]; }else{ $_status = $log['consent_status']; } if($_status === 'accept'){ $status_raw = 'accept'; $status_label = __('Accepted', 'cookieadmin'); $status_class = 'cookieadmin-success'; }elseif($_status === 'reject'){ $status_raw = 'reject'; $status_label = __('Rejected', 'cookieadmin'); $status_class = 'cookieadmin-danger'; }else{ $status_raw = 'partial'; $status_label = __('Partial', 'cookieadmin'); $status_class = 'cookieadmin-warning'; } } $consent_time = !empty($log['consent_time']) ? human_time_diff($log['consent_time'], time()) . ' ' . __('ago', 'cookieadmin') : '-'; $country = !empty($log['country']) ? esc_html($log['country']) : '-'; echo ''; } echo '
'; } }