/var/www/html_fr/wp-content/plugins/fluent-smtp/app/Http/Controllers/DashboardController.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php

namespace FluentMail\App\Http\Controllers;

use 
FluentMail\App\Models\Logger;
use 
FluentMail\App\Services\Mailer\Manager;
use 
FluentMail\App\Services\Reporting;
use 
FluentMail\Includes\Request\Request;
use 
FluentMail\Includes\Support\Arr;

class 
DashboardController extends Controller
{
    public function 
index(Logger $loggerManager $manager)
    {
        
$this->verify();

        
$connections $manager->getSettings('connections', []);

        return 
$this->send([
            
'stats'         => $logger->getStats(),
            
'settings_stat' => [
                
'connection_counts' => count($connections),
                
'active_senders'    => count($manager->getSettings('mappings', [])),
                
'auto_delete_days'  => $manager->getSettings('misc.log_saved_interval_days'),
                
'log_enabled'       => $manager->getSettings('misc.log_emails')
            ]
        ]);
    }

    public function 
getDayTimeStats()
    {
        
$this->verify();

        
$lastDay 0;
        if (isset(
$_REQUEST['last_day'])) {
            
$lastDay = (int)$_REQUEST['last_day'];
        }

        global 
$wpdb;
        if (
$lastDay 6) {
            
$results $wpdb->get_results("SELECT
  DAYNAME(created_at) AS day_of_week,
  HOUR(created_at) AS hour_of_day,
  COUNT(*) AS count
FROM
  
{$wpdb->prefix}fsmpt_email_logs
WHERE
  created_at >= NOW() - INTERVAL 
{$lastDay} DAY
GROUP BY
  DAYNAME(created_at),
  HOUR(created_at)
ORDER BY
  FIELD(DAYNAME(created_at), 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'),
  HOUR(created_at)"
);
        } else {
            
$results $wpdb->get_results("SELECT
  DAYNAME(created_at) AS day_of_week,
  HOUR(created_at) AS hour_of_day,
  COUNT(*) AS count
FROM
  
{$wpdb->prefix}fsmpt_email_logs
GROUP BY
  DAYNAME(created_at),
  HOUR(created_at)
ORDER BY
  FIELD(DAYNAME(created_at), 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'),
  HOUR(created_at)"
);
        }

        
// Assuming $results is the array of records fetched from the database.
        
$dataItems = [
            
'Mon' => [], 'Tue' => [], 'Wed' => [], 'Thu' => [], 'Fri' => [], 'Sat' => [], 'Sun' => []
        ];

        
$hours = ['0:00''1:00''2:00''3:00''4:00''5:00''6:00''7:00''8:00''9:00''10:00''11:00''12:00''13:00''14:00''15:00''16:00''17:00''18:00''19:00''20:00''21:00''22:00''23:00'];

        foreach (
$dataItems as $day => $data) {
            foreach (
$hours as $hour) {
                
$dataItems[$day][$hour] = 0;
            }
        }

        foreach (
$results as $row) {
            
$day substr($row->day_of_week03); // Shorten 'Monday' to 'Mon', etc.
            
$hour $row->hour_of_day ":00";      // Format hour as '0:00', '1:00', etc.
            
$dataItems[$day][$hour] = (int)$row->count;
        }

        return 
$this->send([
            
'stats' => $dataItems
        
]);

    }

    public function 
getSendingStats(Request $requestReporting $reporting)
    {
        
$this->verify();

        list(
$from$to) = $request->get('date_range');

        return 
$this->send([
            
'stats' => $reporting->getSendingStats($from$to)
        ]);

    }

    public function 
getDocs()
    {
        
$this->verify();

        
$request wp_remote_get('https://fluentsmtp.com/wp-json/wp/v2/docs?per_page=100');

        
$docs json_decode(wp_remote_retrieve_body($request), true);


        
$formattedDocs = [];

        foreach (
$docs as $doc) {
            
$primaryCategory Arr::get($doc'taxonomy_info.doc_category.0', ['value' => 'none''label' => 'Other']);
            
$formattedDocs[] = [
                
'title'    => $doc['title']['rendered'],
                
'content'  => $doc['content']['rendered'],
                
'link'     => $doc['link'],
                
'category' => $primaryCategory
            
];
        }

        return 
$this->send([
            
'docs' => $formattedDocs
        
]);
    }

}