whoami7 - Manager
:
/
home
/
dataiclx
/
vielorbe.com
/
wp-content
/
plugins
/
suremails
/
inc
/
api
/
Upload File:
files >> //home/dataiclx/vielorbe.com/wp-content/plugins/suremails/inc/api/dashboard-data.php
<?php /** * DashboardData class * * Handles the REST API endpoint for to get the dashboard data. * * @package SureMails\Inc\API */ namespace SureMails\Inc\API; use SureMails\Inc\DB\EmailLog; use SureMails\Inc\Settings; use SureMails\Inc\Traits\Instance; use WP_REST_Response; use WP_REST_Server; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Class DashboardData * * Handles the `/dashboard-data` REST API endpoint. */ class DashboardData extends Api_Base { use Instance; /** * Route base. * * @var string */ protected $rest_base = '/dashboard-data'; /** * Register API routes. * * @since 0.0.1 * @return void */ public function register_routes() { register_rest_route( $this->get_api_namespace(), $this->rest_base, [ [ 'methods' => WP_REST_Server::READABLE, 'callback' => [ $this, 'get_dashboard_data' ], 'permission_callback' => [ $this, 'validate_permission' ], ], ] ); } /** * Retrieves dashboard data for email statistics. * * @return WP_REST_Response The REST response object with email statistics. */ public function get_dashboard_data() { $chart_data = $this->get_chart_data(); $recent_logs = $this->get_recent_logs(); $total = $this->get_total_count( $chart_data ); return rest_ensure_response( array_merge( [ 'success' => true, 'recent_logs' => $recent_logs, 'chart_data' => $chart_data, ], $total, ) ); } /** * Get Total counts including connections. * * @param bool|array<string, mixed> $chart_data Chart data containing sent and failed counts. * @return array<string, mixed> */ public function get_total_count( $chart_data ) { if ( ! is_array( $chart_data ) ) { $chart_data = []; } $total = [ 'total_sent' => 0, 'total_failed' => 0, 'total_logs' => 0, 'total_connections' => 0, ]; foreach ( $chart_data as $data ) { $total['total_sent'] += (int) ( $data['total_sent'] ?? 0 ); $total['total_failed'] += (int) ( $data['total_failed'] ?? 0 ); } $total['total_logs'] = $total['total_sent'] + $total['total_failed']; $settings = Settings::instance()->get_settings(); $connections = isset( $settings['connections'] ) && is_array( $settings['connections'] ) ? $settings['connections'] : []; $total['total_connections'] = count( $connections ); return $total; } /** * Get Recent Logs * * @return array<string, mixed>|false */ public function get_recent_logs() { return EmailLog::instance()->get( [ 'order' => [ 'updated_at' => 'DESC' ], 'limit' => 6, ] ); } /** * Get Chart data * * @return array<string, mixed>|false */ public function get_chart_data() { $email_log = EmailLog::instance(); $current_date = new \DateTime(); $start_date = clone $current_date; $start_date->modify( '-30 days' ); $start_date_formatted = $start_date->format( 'Y-m-d 00:00:00' ); $end_date_formatted = $current_date->format( 'Y-m-d 23:59:59' ); $where = [ 'created_at >=' => $start_date_formatted, 'created_at <=' => $end_date_formatted, ]; // Fetch the dashboard data. return $email_log->get( [ 'select' => " DATE(created_at) as created_at, SUM(CASE WHEN status = 'sent' THEN 1 ELSE 0 END) as total_sent, SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) as total_failed ", 'where' => $where, 'group_by' => 'DATE(created_at)', 'order' => [ 'created_at' => 'DESC' ], ] ); } } // Initialize the DashboardData singleton. DashboardData::instance();
Copyright ©2021 || Defacer Indonesia