has_at_least_ten_visits() ) { return; } wp_add_dashboard_widget( $this->handle, sprintf( 'Optimole - %s', __( 'Image Optimization Stats', 'optimole-wp' ) ), [ $this, 'render_widget' ] ); } /** * Enqueue the widget assets. */ public function enqueue_widget() { if ( ! $this->is_main_dashboard_page() || ! $this->has_at_least_ten_visits() ) { return; } $asset_file = include OPTML_PATH . 'assets/build/widget/index.asset.php'; wp_register_script( $this->handle, OPTML_URL . 'assets/build/widget/index.js', $asset_file['dependencies'], $asset_file['version'], true ); wp_localize_script( $this->handle, 'optimoleDashboardWidget', $this->get_script_localization() ); wp_enqueue_script( $this->handle ); wp_enqueue_style( $this->handle, OPTML_URL . 'assets/build/widget/style-index.css', [], $asset_file['version'] ); } /** * Render the widget. */ public function render_widget() { echo '
' . $this->get_skeleton_loader() . '
'; } /** * Check if the current page is the main dashboard page. * * @return bool */ private function is_main_dashboard_page() { global $pagenow; return is_admin() && $pagenow === 'index.php'; } /** * Check if the user has at least 10 visits. * * @return bool */ private function has_at_least_ten_visits() { $settings = new Optml_Settings(); if ( OPTML_DEBUG && $settings->is_connected() ) { return true; } $service_data = $this->get_service_data(); if ( ! isset( $service_data['visitors'] ) ) { return false; } $visits = $service_data['visitors']; return $visits >= 10; } /** * Get the script localization. * * @return array */ private function get_script_localization() { return [ 'i18n' => [ 'averageCompression' => __( 'Average compression', 'optimole-wp' ), 'traffic' => __( 'Traffic', 'optimole-wp' ), 'duringLastMonth' => __( 'During last month', 'optimole-wp' ), 'viewAllStats' => __( 'View all stats', 'optimole-wp' ), 'monthlyVisitsQuota' => __( 'Monthly visits quota', 'optimole-wp' ), 'upgrade' => __( 'Upgrade', 'optimole-wp' ), ], 'skeletonLoader' => $this->get_skeleton_loader(), 'billingURL' => tsdk_translate_link( 'https://dashboard.optimole.com/settings/billing', 'query' ), 'serviceData' => $this->get_service_data(), 'assetsURL' => OPTML_URL . 'assets/', 'dashboardMetricsURL' => esc_url( 'https://dashboard.optimole.com/metrics' ), 'dashboardURL' => esc_url( tsdk_translate_link( 'https://dashboard.optimole.com' ) ), ]; } /** * Get the service data. * * @return array */ private function get_service_data() { $settings = new Optml_Settings(); return $settings->get( 'service_data' ); } /** * Get the skeleton loader markup. * * @return string */ private function get_skeleton_loader() { return '

'; } }