File Editor
Directories:
.. (Back)
modules
Files:
bot-detect.php
consent-logs-list-table.php
consent-logs.php
dashboard.php
frontend.php
functions.php
settings.php
welcome-api.php
welcome-frontend.php
welcome.php
Create New File
Create
Edit File: consent-logs-list-table.php
<?php // exit if accessed directly if ( ! defined( 'ABSPATH' ) ) exit; /** * Cookie_Notice_Consent_Logs_List_Table class. * * @class Cookie_Notice_Consent_Logs_List_Table */ class Cookie_Notice_Consent_Logs_List_Table extends WP_List_Table { /** * Prepare the items for the table to process. * * @return void */ public function prepare_items() { // get main instance $cn = Cookie_Notice(); // get consent logs if ( is_multisite() && $cn->is_network_admin() && $cn->is_plugin_network_active() && $cn->network_options['global_override'] ) $analytics = get_site_option( 'cookie_notice_app_analytics', [] ); else $analytics = get_option( 'cookie_notice_app_analytics', [] ); // get date format $format = get_option( 'date_format' ); // get 30 days of default data $logs = $this->fill_missing_dates( $format ); // any data? if ( ! empty( $analytics['consentActivities'] ) && is_array( $analytics['consentActivities'] ) ) { foreach ( $analytics['consentActivities'] as $index => $entry ) { // get date in digits only $digits = (int) str_replace( '-', '', substr( $entry->eventdt, 0, 10 ) ); // current data? if ( array_key_exists( $digits, $logs ) ) { $logs[$digits]['level_' . (int) $entry->consentlevel] = (int) $entry->totalrecd; $logs[$digits]['total'] += (int) $entry->totalrecd; } } krsort( $logs, SORT_NUMERIC ); } $this->_column_headers = [ $this->get_columns(), [], $this->get_sortable_columns(), 'date' ]; usort( $logs, [ $this, 'usort_reorder' ] ); $this->items = $logs; } /** * Fill missing dates. * * @param string $format * @return array */ private function fill_missing_dates( $format ) { $empty_logs = []; // get current date $d = new DateTime(); // go back 30 days $d->modify( '-30 days' ); // update dates for last 30 days for ( $i = 1; $i <= 31; $i++ ) { $date = $d->format( 'Y-m-d' ); $digits = (int) str_replace( '-', '', $date ); $empty_logs[$digits] = [ 'slug' => $digits, 'date' => date_i18n( $format, strtotime( $date ) ), 'date_iso' => $date, 'level_1' => 0, 'level_2' => 0, 'level_3' => 0, 'total' => 0 ]; $d->modify( '+1 days' ); } return $empty_logs; } /** * Sort consent logs. * * @param int $first * @param int $second * @return array */ public function usort_reorder( $first, $second ) { // get orderby $orderby = ( ! empty( $_GET['orderby'] ) ) ? sanitize_key( $_GET['orderby'] ) : 'date'; // skip invalid orderby if ( ! array_key_exists( $orderby, $this->get_sortable_columns() ) ) return 0; // get order $order = ( ! empty( $_GET['order'] ) ) ? sanitize_key( $_GET['order'] ) : 'desc'; // use numeric value for dates if ( $orderby === 'date' ) $orderby = 'slug'; // determine sort order if ( $first[$orderby] === $second[$orderby] ) $result = 0; else $result = ( $first[$orderby] < $second[$orderby] ) ? -1 : 1; return ( $order === 'asc' ) ? $result : -$result; } /** * Override the parent columns method. Defines the columns to use in your listing table. * * @return array */ public function get_columns() { $columns = [ 'cb' => '', 'date' => __( 'Date', 'cookie-notice' ), 'level_1' => __( 'Level 1', 'cookie-notice' ), 'level_2' => __( 'Level 2', 'cookie-notice' ), 'level_3' => __( 'Level 3', 'cookie-notice' ), 'total' => __( 'Total', 'cookie-notice' ) ]; return $columns; } /** * Define the sortable columns * * @return array */ public function get_sortable_columns() { return [ 'date' => [ 'date', false ], 'level_1' => [ 'level_1', true ], 'level_2' => [ 'level_2', true ], 'level_3' => [ 'level_3', true ], 'total' => [ 'total', true ] ]; } /** * Display single row. * * @param array $item * @return void */ public function single_row( $item ) { echo ' <tr id="cn_consent_log_' . esc_attr( $item['slug'] ) . '" class="cn-consent-log" data-date="' . esc_attr( $item['date_iso'] ) . '">'; $this->single_row_columns( $item ); echo ' </tr>'; } /** * Define what data to show on each column of the table. * * @param array $item * @param string $column_name * @return string */ public function column_default( $item, $column_name ) { return esc_html( $item[$column_name] ); } /** * Define what data to show on cb column of the table. * * @param array $item * @return string */ function column_cb( $item ) { return ' <label for="cn-consent-log-' . esc_attr( $item['slug'] ) . '" class="cn-consent-log-item"> <input id="cn-consent-log-' . esc_attr( $item['slug'] ) . '" type="checkbox"> <span class="cn-consent-log-head' . ( $item['total'] === 0 ? ' disabled' : '' ) . '"></span> </label>'; } /** * Display bulk actions. * * @return array */ public function get_bulk_actions() { return []; } /** * Display empty result. * * @return void */ public function no_items() { echo __( 'No consent logs found.', 'cookie-notice' ); } }
Save Changes
Rename File
Rename