page_title = __( 'Tools', 'wpconsent-cookies-banner-privacy-suite' ); $this->menu_title = __( 'Tools', 'wpconsent-cookies-banner-privacy-suite' ); parent::__construct(); } /** * Page specific Hooks. * * @return void */ public function page_hooks() { $this->views = array( 'import' => __( 'Import', 'wpconsent-cookies-banner-privacy-suite' ), 'export' => __( 'Export', 'wpconsent-cookies-banner-privacy-suite' ), 'database' => __( 'Database', 'wpconsent-cookies-banner-privacy-suite' ), 'info' => __( 'System Info', 'wpconsent-cookies-banner-privacy-suite' ), ); $this->process_message(); add_action( 'admin_init', array( $this, 'handle_import_submit' ) ); add_action( 'admin_init', array( $this, 'handle_export_submit' ) ); add_action( 'admin_init', array( $this, 'handle_clear_cache_submit' ) ); add_filter( 'wpconsent_admin_js_data', array( $this, 'add_js_data' ) ); } /** * Add the strings for the js data. * * @param array $data The localized data we already have. * * @return array */ public function add_js_data( $data ) { $data['custom_scripts_export'] = array( 'title' => esc_html__( 'Custom Scripts Export is a PRO feature', 'wpconsent-cookies-banner-privacy-suite' ), 'text' => esc_html__( 'Upgrade to WPConsent PRO today and easily manage custom scripts and iframes. Take full control and block any scripts and iframes from loading until users give consent.', 'wpconsent-cookies-banner-privacy-suite' ), 'url' => wpconsent_utm_url( 'https://wpconsent.com/lite', 'import-export', 'custom-scripts-export' ), ); $data['consent_logs_export'] = array( 'title' => esc_html__( 'Consent Logs Export is a PRO feature', 'wpconsent-cookies-banner-privacy-suite' ), 'text' => esc_html__( 'Upgrade to WPConsent PRO today and easily export your consent logs. Monitor who accepted your cookie banner and when.', 'wpconsent-cookies-banner-privacy-suite' ), 'url' => wpconsent_utm_url( 'https://wpconsent.com/lite', 'export-consent-logs', 'custom-scripts-export' ), ); $data['do_not_track_export'] = array( 'title' => esc_html__( 'Do Not Sell Export is a premium feature', 'wpconsent-cookies-banner-privacy-suite' ), 'text' => esc_html__( 'Upgrade to WPConsent Plus or higher plans today and easily export your Do Not Sell requests. With the Do Not Sell addon you can easily manage "Do Not Sell My Personal Information" directly from your website.', 'wpconsent-cookies-banner-privacy-suite' ), 'url' => wpconsent_utm_url( 'https://wpconsent.com/lite', 'export-do-not-track', 'custom-scripts-export' ), ); $data['consent_logs_delete'] = array( 'title' => esc_html__( 'Consent Logs are a PRO feature', 'wpconsent-cookies-banner-privacy-suite' ), 'text' => esc_html__( 'Upgrade to WPConsent PRO to track consent logs and manage them. Monitor who accepted your cookie banner and when. Delete old records based on age thresholds for data retention compliance.', 'wpconsent-cookies-banner-privacy-suite' ), 'url' => wpconsent_utm_url( 'https://wpconsent.com/lite', 'delete-consent-logs', 'database-page' ), ); $data['do_not_track_delete'] = array( 'title' => esc_html__( 'Do Not Sell Requests are a PRO feature', 'wpconsent-cookies-banner-privacy-suite' ), 'text' => esc_html__( 'Upgrade to WPConsent PRO to track Do Not Sell requests and manage them. Monitor who requested to be excluded from tracking. Delete old records based on age thresholds for data retention compliance.', 'wpconsent-cookies-banner-privacy-suite' ), 'url' => wpconsent_utm_url( 'https://wpconsent.com/lite', 'delete-do-not-track', 'database-page' ), ); return $data; } /** * The page output based on the view. * * @return void */ public function output_content() { if ( method_exists( $this, 'output_view_' . $this->view ) ) { call_user_func( array( $this, 'output_view_' . $this->view ) ); } } /** * Handle the import submission. * * @return void */ public function handle_import_submit() { // Check if this is an import request. if ( ! isset( $_POST['wpconsent_import'] ) ) { return; } // Verify nonce for import. if ( ! isset( $_POST['wpconsent_import_settings_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['wpconsent_import_settings_nonce'] ), 'wpconsent_import_settings' ) ) { wp_die( esc_html__( 'Security check failed.', 'wpconsent-cookies-banner-privacy-suite' ) ); } $this->handle_import(); } /** * Handle the export submission. * * @return void */ public function handle_export_submit() { // Check if this is an import request. if ( ! isset( $_POST['wpconsent_export'] ) ) { return; } // Verify nonce for import. if ( ! isset( $_POST['wpconsent_export_settings_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['wpconsent_export_settings_nonce'] ), 'wpconsent_export_settings' ) ) { wp_die( esc_html__( 'Security check failed.', 'wpconsent-cookies-banner-privacy-suite' ) ); } $this->handle_export(); } /** * Handle the clear cache submission. * * @return void */ public function handle_clear_cache_submit() { // Check if this is a clear cache request. if ( ! isset( $_POST['wpconsent_clear_cache'] ) ) { return; } // Verify nonce for clear cache. if ( ! isset( $_POST['wpconsent_clear_cache_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['wpconsent_clear_cache_nonce'] ), 'wpconsent_clear_cache' ) ) { wp_die( esc_html__( 'Security check failed.', 'wpconsent-cookies-banner-privacy-suite' ) ); } $this->handle_clear_cache(); } /** * Output the import view. * * @return void */ public function output_view_import() { ?>
metabox( __( 'Export Logs', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_export_logs_content() ); } /** * Output the database view. * * @return void */ public function output_view_database() { ?> metabox( __( 'Clear Consent Logs', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_delete_consent_logs_row() ); $this->metabox( __( 'Clear Do Not Sell Logs', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_delete_dnt_logs_row() ); } /** * The System Info view. * * @return void */ public function output_view_info() { $this->metabox( __( 'System Information', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_system_info_content() ); $this->metabox( __( 'Test SSL Connections', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_ssl_test_content() ); } /** * Get the import settings content. * * @return string */ public function get_import_settings_content() { ob_start(); ?> metabox_row( esc_html__( 'Consent Logs', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_export_records_of_consent_button(), '', '', '', '', true, 'export-records-of-consent-lite' ); $this->metabox_row( esc_html__( 'Do Not Sell Logs', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_export_do_not_track_button(), '', '', '', '', true, 'export-do-not-track-lite' ); return ob_get_clean(); } /** * Get the system information content. * * @return string */ public function get_system_info_content() { ob_start(); ?>' . $default_cookie_policy_text . '
'; // Let's check if the site is using the block editor for pages. if ( function_exists( 'use_block_editor_for_post_type' ) && use_block_editor_for_post_type( 'page' ) ) { // Let's wrap the page content in a paragraph block. $page_content = '' . $page_content . ''; // Let's add the shortcode block. $page_content .= '' . $shortcode . ''; } else { // Let's add the shortcode. $page_content .= $shortcode; } // Create new cookie policy page. $page_id = wp_insert_post( array( 'post_title' => esc_html__( 'Cookie Policy', 'wpconsent-cookies-banner-privacy-suite' ), 'post_content' => $page_content, 'post_status' => 'publish', 'post_type' => 'page', ) ); if ( $page_id ) { // Update the cookie policy page ID in settings. wpconsent()->settings->bulk_update_options( array( 'cookie_policy_page' => $page_id, ) ); } else { wpconsent()->settings->bulk_update_options( array( 'cookie_policy_page' => 0, ) ); } } } } /** * Import banner design from import data. * * @param array $import_data The import data. * * @return void */ protected function import_banner_design( $import_data ) { if ( isset( $import_data['banner_design'] ) ) { // Let's go through the banner design settings and sanitize all the values. $banner_design = $import_data['banner_design']; foreach ( $banner_design as $key => $value ) { if ( is_array( $value ) ) { $banner_design[ $key ] = array_map( 'wp_kses_post', $value ); } else { $banner_design[ $key ] = wp_kses_post( $value ); } } wpconsent()->settings->bulk_update_options( $banner_design ); } } /** * Import cookies from import data. * * @param array $import_data The import data. * * @return void */ protected function import_cookies( $import_data ) { if ( isset( $import_data['cookies'] ) ) { foreach ( $import_data['cookies'] as $category_slug => $category_data ) { // Check if category exists, if not create it. $category = get_term_by( 'slug', $category_slug, wpconsent()->cookies->taxonomy ); if ( ! $category ) { $category_id = wpconsent()->cookies->add_category( sanitize_text_field( $category_data['name'] ), wp_kses_post( $category_data['description'] ) ); if ( is_wp_error( $category_id ) ) { continue; } } else { $category_id = $category->term_id; // Update category name and description if it already exists. wpconsent()->cookies->update_category( $category_id, sanitize_text_field( $category_data['name'] ), wp_kses_post( $category_data['description'] ) ); } // Update category meta. update_term_meta( $category_id, 'wpconsent_required', intval( $category_data['required'] ) ); // Allow child classes to import additional category data. $this->import_category_data( $category_id, $category_data ); // Import cookies directly attached to category. if ( isset( $category_data['cookies'] ) && is_array( $category_data['cookies'] ) ) { foreach ( $category_data['cookies'] as $cookie_data ) { $post_id = wpconsent()->cookies->add_cookie( sanitize_text_field( $cookie_data['cookie_id'] ), sanitize_text_field( $cookie_data['name'] ), wp_kses_post( $cookie_data['description'] ), absint( $category_id ), isset( $cookie_data['duration'] ) ? sanitize_text_field( $cookie_data['duration'] ) : '' ); // Allow child classes to import additional cookie data. $this->import_cookie_data( $post_id, $cookie_data ); } } // Import services and their cookies. if ( isset( $category_data['services'] ) && is_array( $category_data['services'] ) ) { foreach ( $category_data['services'] as $service_data ) { // Add new service under the category. $service_id = wpconsent()->cookies->add_service( sanitize_text_field( $service_data['name'] ), absint( $category_id ), isset( $service_data['description'] ) ? wp_kses_post( $service_data['description'] ) : '', isset( $service_data['service_url'] ) ? esc_url( $service_data['service_url'] ) : '' ); if ( ! $service_id ) { continue; } // Allow child classes to import additional service data. $this->import_service_data( $service_id, $service_data ); // Import cookies for this service. if ( isset( $service_data['cookies'] ) && is_array( $service_data['cookies'] ) ) { foreach ( $service_data['cookies'] as $cookie_data ) { $post_id = wpconsent()->cookies->add_cookie( sanitize_text_field( $cookie_data['cookie_id'] ), sanitize_text_field( $cookie_data['name'] ), wp_kses_post( $cookie_data['description'] ), absint( $service_id ), isset( $cookie_data['duration'] ) ? sanitize_text_field( $cookie_data['duration'] ) : '' ); // Allow child classes to import additional cookie data. $this->import_cookie_data( $post_id, $cookie_data ); } } } } } } } /** * Import additional category data. This is a hook for child classes to extend. * * @param int $category_id The category ID. * @param array $category_data The category data. * * @return void */ protected function import_category_data( $category_id, $category_data ) { // This method is meant to be overridden by child classes. } /** * Import additional cookie data. This is a hook for child classes to extend. * * @param int $post_id The cookie post ID. * @param array $cookie_data The cookie data. * * @return void */ protected function import_cookie_data( $post_id, $cookie_data ) { // This method is meant to be overridden by child classes. } /** * Import additional service data. This is a hook for child classes to extend. * * @param int $service_id The service ID. * @param array $service_data The service data. * * @return void */ protected function import_service_data( $service_id, $service_data ) { // This method is meant to be overridden by child classes. } /** * Import geolocation groups from import data. * * @param array $import_data The import data. * * @return void */ protected function import_geolocation_groups( $import_data ) { // This method is meant to be overridden by Pro class. } /** * Import custom scripts from import data. * * @param array $import_data The import data. * * @return void */ protected function import_custom_scripts( $import_data ) { // This method is meant to be overridden by child classes. } /** * Handle clearing the cookies cache. * * @return void */ protected function handle_clear_cache() { // Clear cookies cache. wpconsent()->cookies->clear_cookies_cache(); // Redirect back to the database view with a success message. wp_safe_redirect( add_query_arg( 'message', 'cache_cleared', $this->get_page_action_url() ) ); exit; } /** * Handle the export of settings. * * @return void */ protected function handle_export() { $export_all_settings = isset( $_POST['export_all_settings'] ) ? true : false; // phpcs:ignore WordPress.Security.NonceVerification $export_banner_design = isset( $_POST['export_banner_design'] ) ? true : false; // phpcs:ignore WordPress.Security.NonceVerification $export_cookie_data = isset( $_POST['export_cookie_data'] ) ? true : false; // phpcs:ignore WordPress.Security.NonceVerification $export_custom_scripts = isset( $_POST['export_custom_scripts'] ) ? true : false; // phpcs:ignore WordPress.Security.NonceVerification $export_data = array(); if ( $export_all_settings || $export_banner_design ) { $all_options = wpconsent()->settings->get_options(); } if ( $export_all_settings ) { $export_data['settings'] = $this->get_settings_for_export( $all_options ); // Export geolocation groups separately with proper structure. $export_data['geolocation_groups'] = $this->get_geolocation_groups_for_export( $all_options ); } if ( $export_banner_design ) { $export_data['banner_design'] = $this->get_banner_design_for_export( $all_options ); } if ( $export_cookie_data ) { $export_data['cookies'] = $this->get_cookie_data_for_export(); } if ( $export_custom_scripts ) { $export_data['custom_scripts'] = $this->get_custom_scripts_for_export(); } $this->output_export_file( $export_data ); } /** * Get settings for export. * * @param array $all_options All plugin options. * @return array */ protected function get_settings_for_export( $all_options ) { $settings = $all_options; unset( $settings['manual_scan_pages'] ); unset( $settings['onboarding_completed'] ); unset( $settings['has_auto_populated_pages'] ); unset( $settings['banner_logo'] ); // Remove banner settings as they are handled separately. foreach ( $this->get_banner_settings_keys() as $setting ) { unset( $settings[ $setting ] ); } // Ensure enabled_languages is always an empty array if not set or null. if ( ! isset( $settings['enabled_languages'] ) || null === $settings['enabled_languages'] ) { $settings['enabled_languages'] = array(); } return $settings; } /** * Get banner design settings for export. * * @param array $all_options All plugin options. * @return array */ protected function get_banner_design_for_export( $all_options ) { $banner_data = array(); foreach ( $this->get_banner_settings_keys() as $setting ) { if ( isset( $all_options[ $setting ] ) ) { // If this is the consent_floating_icon setting and it's a URL (custom image). if ( 'consent_floating_icon' === $setting && filter_var( $all_options[ $setting ], FILTER_VALIDATE_URL ) ) { $banner_data[ $setting ] = 'preferences'; } else { $banner_data[ $setting ] = $all_options[ $setting ]; } } } return $banner_data; } /** * Get cookie data for export. * * @return array */ protected function get_cookie_data_for_export() { $export_data = array(); $categories = wpconsent()->cookies->get_categories(); foreach ( $categories as $category_slug => $category ) { $category_id = $category['id']; $cookies = wpconsent()->cookies->get_cookies_by_category( $category_id ); $services = wpconsent()->cookies->get_services_by_category( $category_id ); $category_data = array( 'name' => $category['name'], 'description' => $category['description'], 'required' => $category['required'], 'cookies' => array(), 'services' => array(), ); foreach ( $cookies as $cookie ) { if ( count( $cookie['categories'] ) === 1 && $cookie['categories'][0] === $category_id ) { $category_data['cookies'][] = $this->get_cookie_export_data( $cookie ); } } foreach ( $services as $service ) { $service_data = array( 'id' => $service['id'], 'name' => $service['name'], 'description' => $service['description'], 'service_url' => $service['service_url'], 'cookies' => array(), ); foreach ( $cookies as $cookie ) { if ( in_array( $service['id'], $cookie['categories'], true ) ) { $service_data['cookies'][] = $this->get_cookie_export_data( $cookie ); } } $category_data['services'][] = $service_data; } $export_data[ $category_slug ] = $category_data; } return $export_data; } /** * Get custom scripts for export. * * @return void */ protected function get_custom_scripts_for_export() { // This method is meant to be overridden by child classes. } /** * Get geolocation groups for export. * * @param array $all_options All plugin options. * * @return array */ protected function get_geolocation_groups_for_export( $all_options ) { return array(); } /** * Get cookie export data. * * @param array $cookie Cookie data. * @return array */ protected function get_cookie_export_data( $cookie ) { return array( 'id' => $cookie['id'], 'name' => $cookie['name'], 'cookie_id' => $cookie['cookie_id'], 'description' => $cookie['description'], 'duration' => $cookie['duration'], 'auto_added' => $cookie['auto_added'], ); } /** * Get banner settings keys. * * @return array */ protected function get_banner_settings_keys() { return array( 'banner_layout', 'banner_position', 'banner_background_color', 'banner_text_color', 'banner_font_size', 'banner_button_size', 'banner_button_corner', 'banner_button_type', 'banner_accept_bg', 'banner_accept_color', 'banner_cancel_bg', 'banner_cancel_color', 'banner_preferences_bg', 'banner_preferences_color', 'hide_powered_by', 'banner_message', 'accept_button_text', 'accept_button_enabled', 'button_order', 'preferences_button_text', 'cancel_button_text', 'cancel_button_enabled', 'preferences_button_enabled', 'preferences_panel_title', 'preferences_panel_description', 'cookie_policy_title', 'cookie_policy_text', 'save_preferences_button_text', 'close_button_text', 'disable_close_button', 'cookie_table_header_name', 'cookie_table_header_description', 'cookie_table_header_duration', 'cookie_table_header_category', 'consent_floating_icon', 'gpc_override_message', 'gpc_toast_message', ); } /** * Output export file. * * @param array $export_data Data to export. * * @return void */ protected function output_export_file( $export_data ) { $filename = 'wpconsent-export-' . gmdate( 'Y-m-d-H-i' ) . '.json'; header( 'Content-Type: application/json; charset=utf-8' ); header( 'Content-Disposition: attachment; filename="' . $filename . '"' ); header( 'Expires: 0' ); echo wp_json_encode( $export_data, JSON_PRETTY_PRINT ); exit; } /** * For this page we output a menu. * * @return void */ public function output_header_bottom() { ?> site_info(); $data .= $this->wp_info(); $data .= $this->uploads_info(); $data .= $this->plugins_info(); $data .= $this->server_info(); $data .= "\n" . '### End System Info ###'; return $data; } /** * Get Site info. * * @return string */ private function site_info() { $data = "\n" . '-- Site Info' . "\n\n"; $data .= 'Site URL: ' . site_url() . "\n"; $data .= 'Home URL: ' . home_url() . "\n"; $data .= 'Multisite: ' . ( is_multisite() ? 'Yes' : 'No' ) . "\n"; return $data; } /** * Get WordPress Configuration info. * * @return string */ private function wp_info() { global $wpdb; $theme_data = wp_get_theme(); $theme = $theme_data->name . ' ' . $theme_data->version; $data = "\n" . '-- WordPress Configuration' . "\n\n"; $data .= 'Version: ' . get_bloginfo( 'version' ) . "\n"; $data .= 'Language: ' . get_locale() . "\n"; $data .= 'User Language: ' . get_user_locale() . "\n"; $data .= 'Permalink Structure: ' . ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' ) . "\n"; $data .= 'Active Theme: ' . $theme . "\n"; $data .= 'Show On Front: ' . get_option( 'show_on_front' ) . "\n"; // Only show page specs if front page is set to 'page'. if ( get_option( 'show_on_front' ) === 'page' ) { $front_page_id = get_option( 'page_on_front' ); $blog_page_id = get_option( 'page_for_posts' ); $data .= 'Page On Front: ' . ( $front_page_id ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset' ) . "\n"; $data .= 'Page For Posts: ' . ( $blog_page_id ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset' ) . "\n"; } $data .= 'ABSPATH: ' . ABSPATH . "\n"; $data .= 'Table Prefix: ' . 'Length: ' . strlen( $wpdb->prefix ) . ' Status: ' . ( strlen( $wpdb->prefix ) > 16 ? 'ERROR: Too long' : 'Acceptable' ) . "\n"; //phpcs:ignore $data .= 'WP_DEBUG: ' . ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n"; $data .= 'Memory Limit: ' . WP_MEMORY_LIMIT . "\n"; $data .= 'Registered Post Stati: ' . implode( ', ', get_post_stati() ) . "\n"; $data .= 'Revisions: ' . ( WP_POST_REVISIONS ? WP_POST_REVISIONS > 1 ? 'Limited to ' . WP_POST_REVISIONS : 'Enabled' : 'Disabled' ) . "\n"; return $data; } /** * Get Uploads/Constants info. * * @return string */ private function uploads_info() { $data = "\n" . '-- WordPress Uploads/Constants' . "\n\n"; $data .= 'WP_CONTENT_DIR: ' . ( defined( 'WP_CONTENT_DIR' ) ? WP_CONTENT_DIR ? WP_CONTENT_DIR : 'Disabled' : 'Not set' ) . "\n"; $data .= 'WP_CONTENT_URL: ' . ( defined( 'WP_CONTENT_URL' ) ? WP_CONTENT_URL ? WP_CONTENT_URL : 'Disabled' : 'Not set' ) . "\n"; $data .= 'UPLOADS: ' . ( defined( 'UPLOADS' ) ? UPLOADS ? UPLOADS : 'Disabled' : 'Not set' ) . "\n"; $uploads_dir = wp_upload_dir(); $data .= 'wp_uploads_dir() path: ' . $uploads_dir['path'] . "\n"; $data .= 'wp_uploads_dir() url: ' . $uploads_dir['url'] . "\n"; $data .= 'wp_uploads_dir() basedir: ' . $uploads_dir['basedir'] . "\n"; $data .= 'wp_uploads_dir() baseurl: ' . $uploads_dir['baseurl'] . "\n"; return $data; } /** * Get Plugins info. * * @return string */ private function plugins_info() { // Get plugins that have an update. $data = $this->mu_plugins(); $data .= $this->installed_plugins(); $data .= $this->multisite_plugins(); return $data; } /** * Get MU Plugins info. * * @return string */ private function mu_plugins() { $data = ''; // Must-use plugins. // NOTE: MU plugins can't show updates! $muplugins = get_mu_plugins(); if ( ! empty( $muplugins ) && count( $muplugins ) > 0 ) { $data = "\n" . '-- Must-Use Plugins' . "\n\n"; foreach ( $muplugins as $plugin => $plugin_data ) { $data .= $plugin_data['Name'] . ': ' . $plugin_data['Version'] . "\n"; } } return $data; } /** * Get Installed Plugins info. * * @return string */ private function installed_plugins() { $updates = get_plugin_updates(); // WordPress active plugins. $data = "\n" . '-- WordPress Active Plugins' . "\n\n"; $plugins = get_plugins(); $active_plugins = get_option( 'active_plugins', array() ); foreach ( $plugins as $plugin_path => $plugin ) { if ( ! in_array( $plugin_path, $active_plugins, true ) ) { continue; } $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : ''; $data .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n"; } // WordPress inactive plugins. $data .= "\n" . '-- WordPress Inactive Plugins' . "\n\n"; foreach ( $plugins as $plugin_path => $plugin ) { if ( in_array( $plugin_path, $active_plugins, true ) ) { continue; } $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : ''; $data .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n"; } return $data; } /** * Get Multisite Plugins info. * * @return string */ private function multisite_plugins() { $data = ''; if ( ! is_multisite() ) { return $data; } $updates = get_plugin_updates(); // WordPress Multisite active plugins. $data = "\n" . '-- Network Active Plugins' . "\n\n"; $plugins = wp_get_active_network_plugins(); $active_plugins = get_site_option( 'active_sitewide_plugins', array() ); foreach ( $plugins as $plugin_path ) { $plugin_base = plugin_basename( $plugin_path ); if ( ! array_key_exists( $plugin_base, $active_plugins ) ) { continue; } $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : ''; $plugin = get_plugin_data( $plugin_path ); $data .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n"; } return $data; } /** * Get Server info. * * @return string */ private function server_info() { global $wpdb; // Server configuration (really just versions). $data = "\n" . '-- Webserver Configuration' . "\n\n"; $data .= 'PHP Version: ' . PHP_VERSION . "\n"; $data .= 'MySQL Version: ' . $wpdb->db_version() . "\n"; $data .= 'Webserver Info: ' . ( isset( $_SERVER['SERVER_SOFTWARE'] ) ? sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) ) : '' ) . "\n"; // PHP configs... now we're getting to the important stuff. $data .= "\n" . '-- PHP Configuration' . "\n\n"; $data .= 'Memory Limit: ' . ini_get( 'memory_limit' ) . "\n"; $data .= 'Upload Max Size: ' . ini_get( 'upload_max_filesize' ) . "\n"; $data .= 'Post Max Size: ' . ini_get( 'post_max_size' ) . "\n"; $data .= 'Upload Max Filesize: ' . ini_get( 'upload_max_filesize' ) . "\n"; $data .= 'Time Limit: ' . ini_get( 'max_execution_time' ) . "\n"; $data .= 'Max Input Vars: ' . ini_get( 'max_input_vars' ) . "\n"; $data .= 'Display Errors: ' . ( ini_get( 'display_errors' ) ? 'On (' . ini_get( 'display_errors' ) . ')' : 'N/A' ) . "\n"; // PHP extensions and such. $data .= "\n" . '-- PHP Extensions' . "\n\n"; $data .= 'cURL: ' . ( function_exists( 'curl_init' ) ? 'Supported' : 'Not Supported' ) . "\n"; $data .= 'fsockopen: ' . ( function_exists( 'fsockopen' ) ? 'Supported' : 'Not Supported' ) . "\n"; $data .= 'SOAP Client: ' . ( class_exists( 'SoapClient', false ) ? 'Installed' : 'Not Installed' ) . "\n"; $data .= 'Suhosin: ' . ( extension_loaded( 'suhosin' ) ? 'Installed' : 'Not Installed' ) . "\n"; // Session stuff. $data .= "\n" . '-- Session Configuration' . "\n\n"; $data .= 'Session: ' . ( isset( $_SESSION ) ? 'Enabled' : 'Disabled' ) . "\n"; // The rest of this is only relevant if session is enabled. if ( isset( $_SESSION ) ) { $data .= 'Session Name: ' . esc_html( ini_get( 'session.name' ) ) . "\n"; $data .= 'Cookie Path: ' . esc_html( ini_get( 'session.cookie_path' ) ) . "\n"; $data .= 'Save Path: ' . esc_html( ini_get( 'session.save_path' ) ) . "\n"; $data .= 'Use Cookies: ' . ( ini_get( 'session.use_cookies' ) ? 'On' : 'Off' ) . "\n"; $data .= 'Use Only Cookies: ' . ( ini_get( 'session.use_only_cookies' ) ? 'On' : 'Off' ) . "\n"; } return $data; } /** * Get the input for Records of Consent logs deletion. * * @return string */ public function get_roc_logs_content() { ob_start(); ?> metabox_row( esc_html__( 'Clear logs older than:', 'wpconsent-cookies-banner-privacy-suite' ), $this->select( 'delete_consent_period', array( '3_months' => esc_html__( '3 months', 'wpconsent-cookies-banner-privacy-suite' ), '6_months' => esc_html__( '6 months', 'wpconsent-cookies-banner-privacy-suite' ), '1_year' => esc_html__( '1 year', 'wpconsent-cookies-banner-privacy-suite' ), '2_years' => esc_html__( '2 years', 'wpconsent-cookies-banner-privacy-suite' ), 'all' => esc_html__( 'All time', 'wpconsent-cookies-banner-privacy-suite' ), ), '1_year' ) ); ?> metabox_row( esc_html__( 'Clear logs older than:', 'wpconsent-cookies-banner-privacy-suite' ), $this->select( 'delete_dnt_period', array( '3_months' => esc_html__( '3 months', 'wpconsent-cookies-banner-privacy-suite' ), '6_months' => esc_html__( '6 months', 'wpconsent-cookies-banner-privacy-suite' ), '1_year' => esc_html__( '1 year', 'wpconsent-cookies-banner-privacy-suite' ), '2_years' => esc_html__( '2 years', 'wpconsent-cookies-banner-privacy-suite' ), 'all' => esc_html__( 'All time', 'wpconsent-cookies-banner-privacy-suite' ), ), '1_year' ) ); ?>