PluginProbe
Fluent Support – Helpdesk & Customer Support Ticket System / 1.10.5
Fluent Support – Helpdesk & Customer Support Ticket System v1.10.5
2.4.0 2.3.2 2.3.1 2.3.0 2.2.1 2.2.0 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.10.5 1.4.0 1.4.1 1.4.2 1.4.5 1.4.6 1.4.7 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 All 68 releases
fluent-support / app / Hooks / Handlers / DataExporter.php

DataExporter.php in Fluent Support – Helpdesk & Customer Support Ticket System 1.10.5, at app/Hooks/Handlers/DataExporter.php

102 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentSupport\App\Hooks\Handlers;
4
5 use FluentSupport\App\Modules\PermissionManager;
6 use FluentSupport\App\Services\Helper;
7 use FluentSupport\App\Modules\Reporting\Reporting;
8 use FluentSupport\App\Services\Csv\CsvWriter;
9
10 class DataExporter
11 {
12 public function exportReport()
13 {
14 $this->verifyRequest();
15 $csvWriter = new CsvWriter();
16 $request = Helper::FluentSupport('request');
17 $from_date = $request->getSafe('from_date', 'sanitize_text_field');
18 $to_date = $request->getSafe('to_date', 'sanitize_text_field');
19 $columns = $request->get('columns', []);
20 $agents = $request->get('agents', []);
21 if (empty($columns)) {
22 $columns = Helper::getExportOptions();
23 }
24 $columns = $this->defineColumns($columns);
25
26 $reporting = new Reporting();
27 $data = $reporting->agentSummary($from_date, $to_date, $agents);
28
29 $csvWriter->insertOne(array_keys($columns));
30
31 $rows = [];
32 foreach ($data as $summary) {
33 $row = [];
34 foreach ($columns as $key => $column) {
35 if (isset($summary[$column])) {
36 $row[$key] = $summary[$column];
37 } else if (isset($summary['stats'][$column])) {
38 $row[$key] = $summary['stats'][$column];
39 } else if (isset($summary['active_stat'][$column])) {
40 $row[$key] = $summary['active_stat'][$column];
41 }
42 }
43 $rows[] = $row;
44 }
45
46 $csvWriter->insertAll($rows);
47
48 $currentTime = current_time('timestamp');
49 $csvWriter->output('agent_report-' . gmdate('Y-m-d_H-i-s', $currentTime) . '.csv');
50 }
51
52 private function defineColumns($columns)
53 {
54 $arr = [
55 'Agent First Name' => 'first_name',
56 'Agent Last Name' => 'last_name',
57 'Agent Full Name' => 'full_name',
58 'Responses' => 'responses',
59 'Interactions' => 'interactions',
60 'Open Tickets' => 'opens',
61 'Closed' => 'closed',
62 'Waiting Tickets' => 'waiting_tickets',
63 'Average Waiting' => 'average_waiting',
64 'Max Waiting' => 'max_waiting',
65 ];
66
67 if (Helper::isAgentFeedbackEnabled()) {
68 $arr['Likes'] = 'likes';
69 $arr['Dislikes'] = 'dislikes';
70 }
71
72 return array_filter($arr, function ($column, $key) use ($columns) {
73 return in_array($key, $columns);
74 }, ARRAY_FILTER_USE_BOTH);
75 }
76
77 private function getCsvWriter()
78 {
79 if (!class_exists('\League\Csv\Writer')) {
80 include FLUENT_SUPPORT_PLUGIN_PATH . 'app/Services/Libs/csv/autoload.php';
81 }
82
83 return \League\Csv\Writer::createFromFileObject(new \SplTempFileObject());
84 }
85
86 private function verifyRequest()
87 {
88 $permission = 'fst_view_all_reports';
89
90 if ( ! isset($_REQUEST['_wpnonce']) || ! wp_verify_nonce(sanitize_text_field(wp_unslash($_REQUEST['_wpnonce'])), 'fluent-support') ) {
91 wp_die('Security check failed');
92 }
93
94 if ( PermissionManager::currentUserCan($permission) ) {
95 return true;
96 }
97
98 wp_die('You do not have permission');
99 }
100
101 }
102