* @link https://www.fireplugins.com * @copyright Copyright © 2021 FirePlugins All Rights Reserved * @license GNU GPLv3 or later */ namespace FireBox\Core\Admin\Analytics\Overview; use FireBox\Core\Admin\Analytics\Helpers\AnalyticsHelper; if (!defined('ABSPATH')) { exit; // Exit if accessed directly. } class Overview { /** * The default Overview filters * * @var array */ private $default_filters = [ 'date' => 'this_month' ]; /** * Configuration * * @var array */ private $configuration; /** * Analytics Toolbar * * @var Toolbar */ private $toolbar; public function __construct($configuration = []) { // set the configuration data of the Analytics Helper class AnalyticsHelper::setConfigurationData($configuration); // Ensure we can show analytics overview on current page if (!wp_doing_ajax() && !$this->canRun()) { return; } $this->configuration = $configuration; $this->toolbar = new \FireBox\Core\Admin\Analytics\Toolbar($configuration); $this->ajax = new Ajax($this); // render overview filters add_action('firebox/analytics/overview/filters', [$this, 'renderFilters']); // render overview add_action('firebox/dashboard/content', [$this, 'render']); } /** * Whether we can run analytics overview or not * * @return boolean */ protected function canRun() { // we must be on admin panel if (!is_admin()) { return false; } // ensure we have correct priviledges if (!is_user_logged_in() || !current_user_can('manage_options')) { return false; } // we must be on admin.php page global $pagenow; if (!$pagenow == 'admin.php') { return false; } // ensure we are on firebox dashboard $page = fpframework()->getPluginPage(); if (!$page || !in_array($page, ['firebox'])) { return false; } return true; } /** * Display the Analytics Overview * * @return void */ public function render() { // Load CSS & JS files $this->loadMedia(); $payload = $this->getOverviewItemsPayload(); firebox()->renderer->admin->render('analytics/overview/tmpl', [ 'overview_items_names' => $this->getOverviewItemsNames(), 'default_filters' => $this->default_filters ]); } public function renderFilters() { firebox()->renderer->admin->render('analytics/overview/filters', [ 'configuration' => $this->configuration, 'filters' => $this->getFilters() ]); } public function getOverviewItemsNames() { $payload = $this->getOverviewItemsPayload(); return array_keys($payload); } public function getOverviewItemsPayload() { $configuration = $this->toolbar->getConfiguration(); return [ 'impressions' => [ 'overview_type' => 'chart', 'url_chart_metrics' => ['impressions'], 'metrics' => ['impressions'], 'allowed_filters' => [ 'box', 'date' ], 'toolbar_items' => [ 'date' => [ 'method' => 'filter', 'options_key' => 'this_month', ] ], ], 'avg_time_open' => [ 'overview_type' => 'chart', 'url_chart_metrics' => ['theaveragetimeopen'], 'metrics' => ['theaveragetimeopen'], 'allowed_filters' => [ 'box', 'date' ], 'toolbar_items' => [ 'date' => [ 'method' => 'filter', 'options_key' => 'this_month', ] ], ], 'boxes_pro' => [ 'overview_title' => firebox()->_('FB_TOP_BOXES'), 'overview_type' => 'pro', 'layout' => 'pro', 'redirect_base' => true, 'feature' => firebox()->_('FB_TOP_BOXES'), 'image' => FBOX_MEDIA_ADMIN_URL . 'images/analytics_overview_boxes.png', 'show_overlay_message' => true, 'class' => 'overlay-bg full-width', 'message' => 'FPF_ANALYTICS_OVERVIEW_OVERLAY_PRO_MSG1' ], 'devices_pro' => [ 'overview_title' => fpframework()->_('FPF_TOP_DEVICES'), 'overview_type' => 'pro', 'layout' => 'pro', 'redirect_base' => true, 'feature' => fpframework()->_('FPF_TOP_DEVICES'), 'image' => FBOX_MEDIA_ADMIN_URL . 'images/analytics_overview_devices.png', 'show_overlay_message' => true, 'class' => 'overlay-bg full-width', 'message' => 'FPF_ANALYTICS_OVERVIEW_OVERLAY_PRO_MSG1' ], 'countries_pro' => [ 'overview_title' => fpframework()->_('FPF_TOP_COUNTRIES'), 'overview_type' => 'pro', 'layout' => 'pro', 'redirect_base' => true, 'feature' => fpframework()->_('FPF_TOP_COUNTRIES'), 'image' => FBOX_MEDIA_ADMIN_URL . 'images/analytics_overview_countries.png', 'show_overlay_message' => true, 'class' => 'overlay-bg full-width', 'message' => 'FPF_ANALYTICS_OVERVIEW_OVERLAY_PRO_MSG1' ], 'referrers_pro' => [ 'overview_title' => fpframework()->_('FPF_TOP_REFERRERS'), 'overview_type' => 'pro', 'layout' => 'pro', 'redirect_base' => true, 'feature' => fpframework()->_('FPF_TOP_REFERRERS'), 'image' => FBOX_MEDIA_ADMIN_URL . 'images/analytics_overview_referrers.png', 'show_overlay_message' => true, 'class' => 'overlay-bg full-width', 'message' => 'FPF_ANALYTICS_OVERVIEW_OVERLAY_PRO_MSG1' ], ]; } public function getFilters($plain = false) { return [ 'box_pro' => [ 'default_label' => firebox()->_('FB_ALL_POPUPS'), 'item' => firebox()->_('FB_POPUP_SELECTION') ], 'date_pro' => [ 'default_label' => fpframework()->_('FB_THIS_MONTH'), 'item' => fpframework()->_('FPF_DATE_PERIOD') ] ]; } /** * Load media for the Analytics Overview page * * @return void */ private function loadMedia() { // Countries Icons CSS Library wp_register_style( 'firebox-analytics-overview-countries-icons', FBOX_MEDIA_ADMIN_URL . 'css/flag-icon.min.css', [], FBOX_VERSION, false ); wp_enqueue_style('firebox-analytics-overview-countries-icons'); // Chart JS CSS Library wp_register_style( 'firebox-analytics-chart', FBOX_MEDIA_ADMIN_URL . 'css/chart.min.css', [], FBOX_VERSION, false ); wp_enqueue_style('firebox-analytics-chart'); // Moments JS wp_register_script( 'firebox-analytics-moment-js-library', includes_url('js/dist/vendor/moment.min.js'), [], FBOX_VERSION, false ); wp_enqueue_script('firebox-analytics-moment-js-library'); // Chart JS wp_register_script( 'firebox-analytics-chart', FBOX_MEDIA_ADMIN_URL . 'js/chart.min.js', ['firebox-analytics-moment-js-library'], FBOX_VERSION, false ); wp_enqueue_script('firebox-analytics-chart'); // FireBox Analytics Overview JS wp_register_script( 'firebox-analytics-overview', FBOX_MEDIA_ADMIN_URL . 'js/fb_analytics_overview.js', [], FBOX_VERSION, false ); wp_enqueue_script('firebox-analytics-overview'); } public function getToolbar() { return $this->toolbar; } }