1
|
|
|
<?php declare(strict_types=1); |
2
|
|
|
|
3
|
|
|
/* |
4
|
|
|
* You may not change or alter any portion of this comment or credits |
5
|
|
|
* of supporting developers from this source code or any supporting source code |
6
|
|
|
* which is considered copyrighted (c) material of the original comment or credit authors. |
7
|
|
|
* |
8
|
|
|
* This program is distributed in the hope that it will be useful, |
9
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
10
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
11
|
|
|
*/ |
12
|
|
|
|
13
|
|
|
/** |
14
|
|
|
* @copyright {@link https://xoops.org/ XOOPS Project} |
15
|
|
|
* @license {@link https://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2 or later} |
16
|
|
|
* @author Brian Wahoff <[email protected]> |
17
|
|
|
* @author Eric Juden <[email protected]> |
18
|
|
|
* @author XOOPS Development Team |
19
|
|
|
*/ |
20
|
|
|
|
21
|
|
|
use Xmf\Module\Admin; |
22
|
|
|
use Xmf\Request; |
23
|
|
|
use XoopsModules\Xhelp; |
24
|
|
|
|
25
|
|
|
require_once __DIR__ . '/admin_header.php'; |
26
|
|
|
xoops_load('XoopsPagenav'); |
27
|
|
|
define('MAX_STAFF_RESPONSETIME', 5); |
28
|
|
|
define('MAX_STAFF_CALLSCLOSED', 5); |
29
|
|
|
|
30
|
|
|
global $_GET, $xoopsModule; |
31
|
|
|
$module_id = $xoopsModule->getVar('mid'); |
32
|
|
|
|
33
|
|
|
$helper = Xhelp\Helper::getInstance(); |
34
|
|
|
|
35
|
|
|
$op = 'default'; |
36
|
|
|
|
37
|
|
|
if (Request::hasVar('op', 'REQUEST')) { |
38
|
|
|
$op = $_REQUEST['op']; |
39
|
|
|
} |
40
|
|
|
|
41
|
|
|
switch ($op) { |
42
|
|
|
case 'about': |
43
|
|
|
about(); |
44
|
|
|
break; |
45
|
|
|
case 'mailEvents': |
46
|
|
|
mailEvents(); |
47
|
|
|
break; |
48
|
|
|
case 'searchMailEvents': |
49
|
|
|
searchMailEvents(); |
50
|
|
|
break; |
51
|
|
|
// case 'blocks': |
52
|
|
|
// require_once __DIR__ . '/myblocksadmin.php'; |
53
|
|
|
// break; |
54
|
|
|
case 'createdir': |
55
|
|
|
createdir(); |
56
|
|
|
break; |
57
|
|
|
case 'setperm': |
58
|
|
|
setperm(); |
59
|
|
|
break; |
60
|
|
|
case 'manageFields': |
61
|
|
|
manageFields(); |
62
|
|
|
break; |
63
|
|
|
default: |
64
|
|
|
xhelp_default(); |
65
|
|
|
break; |
66
|
|
|
} |
67
|
|
|
|
68
|
|
|
function modifyTicketFields() |
69
|
|
|
{ |
70
|
|
|
//xoops_cp_header(); |
71
|
|
|
//echo "not created yet"; |
72
|
|
|
xoops_cp_footer(); |
73
|
|
|
} |
74
|
|
|
|
75
|
|
|
/** |
76
|
|
|
* @param array $mailEvents |
77
|
|
|
* @param array $mailboxes |
78
|
|
|
*/ |
79
|
|
|
function displayEvents(array $mailEvents, array $mailboxes) |
80
|
|
|
{ |
81
|
|
|
echo "<table width='100%' cellspacing='1' class='outer'>"; |
82
|
|
|
if (count($mailEvents) > 0) { |
83
|
|
|
echo "<tr><th colspan='4'>" . _AM_XHELP_TEXT_MAIL_EVENTS . '</th></tr>'; |
84
|
|
|
echo "<tr class='head'><td>" . _AM_XHELP_TEXT_MAILBOX . '</td> |
85
|
|
|
<td>' . _AM_XHELP_TEXT_EVENT_CLASS . '</td> |
86
|
|
|
<td>' . _AM_XHELP_TEXT_DESCRIPTION . '</td> |
87
|
|
|
<td>' . _AM_XHELP_TEXT_TIME . '</td> |
88
|
|
|
</tr>'; |
89
|
|
|
|
90
|
|
|
$class = 'odd'; |
91
|
|
|
foreach ($mailEvents as $event) { |
92
|
|
|
echo "<tr class='" . $class . "'><td>" . $mailboxes[$event->getVar('mbox_id')]->getVar('emailaddress') . '</td> |
93
|
|
|
<td>' . Xhelp\Utility::getEventClass($event->getVar('event_class')) . '</td> |
94
|
|
|
<td>' . $event->getVar('event_desc') . '</td> |
95
|
|
|
<td>' . $event->posted() . '</td> |
96
|
|
|
</tr>'; |
97
|
|
|
$class = ('odd' === $class) ? 'even' : 'odd'; |
98
|
|
|
} |
99
|
|
|
} else { |
100
|
|
|
echo '<tr><th>' . _AM_XHELP_TEXT_MAIL_EVENTS . '</th></tr>'; |
101
|
|
|
echo "<tr><td class='odd'>" . _AM_XHELP_NO_EVENTS . '</td></tr>'; |
102
|
|
|
} |
103
|
|
|
echo '</table><br>'; |
104
|
|
|
echo "<a href='main.php?op=searchMailEvents'>" . _AM_XHELP_SEARCH_EVENTS . '</a>'; |
105
|
|
|
} |
106
|
|
|
|
107
|
|
|
function mailEvents() |
108
|
|
|
{ |
109
|
|
|
$helper = Xhelp\Helper::getInstance(); |
110
|
|
|
// Will display the last 50 mail events |
111
|
|
|
/** @var \XoopsModules\Xhelp\MailEventHandler $mailEventHandler */ |
112
|
|
|
$mailEventHandler = $helper->getHandler('MailEvent'); |
113
|
|
|
/** @var \XoopsModules\Xhelp\DepartmentMailBoxHandler $departmentMailBoxHandler */ |
114
|
|
|
$departmentMailBoxHandler = $helper->getHandler('DepartmentMailBox'); |
115
|
|
|
$mailboxes = $departmentMailBoxHandler->getObjects(null, true); |
116
|
|
|
|
117
|
|
|
$criteria = new \Criteria('', ''); |
118
|
|
|
$criteria->setLimit(50); |
119
|
|
|
$criteria->setOrder('DESC'); |
120
|
|
|
$criteria->setSort('posted'); |
121
|
|
|
$mailEvents = $mailEventHandler->getObjects($criteria); |
122
|
|
|
|
123
|
|
|
xoops_cp_header(); |
124
|
|
|
//echo $oAdminButton->renderButtons('mailEvents'); |
125
|
|
|
$adminObject = Admin::getInstance(); |
126
|
|
|
$adminObject->displayNavigation(basename(__FILE__)); |
127
|
|
|
|
128
|
|
|
displayEvents($mailEvents, $mailboxes); |
129
|
|
|
|
130
|
|
|
require_once __DIR__ . '/admin_footer.php'; |
131
|
|
|
} |
132
|
|
|
|
133
|
|
|
function searchMailEvents() |
134
|
|
|
{ |
135
|
|
|
xoops_cp_header(); |
136
|
|
|
$helper = Xhelp\Helper::getInstance(); |
137
|
|
|
//echo $oAdminButton->renderButtons('mailEvents'); |
138
|
|
|
$adminObject = Admin::getInstance(); |
139
|
|
|
$adminObject->displayNavigation(basename(__FILE__)); |
140
|
|
|
|
141
|
|
|
if (isset($_POST['searchEvents'])) { |
142
|
|
|
/** @var \XoopsModules\Xhelp\MailEventHandler $mailEventHandler */ |
143
|
|
|
$mailEventHandler = $helper->getHandler('MailEvent'); |
144
|
|
|
/** @var \XoopsModules\Xhelp\DepartmentMailBoxHandler $departmentMailBoxHandler */ |
145
|
|
|
$departmentMailBoxHandler = $helper->getHandler('DepartmentMailBox'); |
146
|
|
|
$mailboxes = $departmentMailBoxHandler->getObjects(null, true); |
147
|
|
|
|
148
|
|
|
$begin_date = explode('-', $_POST['begin_date']); |
149
|
|
|
$end_date = explode('-', $_POST['end_date']); |
150
|
|
|
$begin_hour = xhelpChangeHour($_POST['begin_mode'], $_POST['begin_hour']); |
151
|
|
|
$end_hour = xhelpChangeHour($_POST['end_mode'], $_POST['end_hour']); |
152
|
|
|
|
153
|
|
|
// Get timestamps to search by |
154
|
|
|
$begin_time = mktime($begin_hour, Request::getInt('begin_minute', 0, 'POST'), (int)$begin_date[1], (int)$begin_date[2], (int)$begin_date[0]); |
155
|
|
|
$end_time = mktime($end_hour, Request::getInt('end_minute', 0, 'POST'), 0, (int)$end_date[1], (int)$end_date[2], (int)$end_date[0]); |
156
|
|
|
|
157
|
|
|
$criteria = new \CriteriaCompo(new \Criteria('posted', (string)$begin_time, '>=')); |
158
|
|
|
$criteria->add(new \Criteria('posted', (string)$end_time, '<=')); |
159
|
|
|
if ('' != $_POST['email']) { |
160
|
|
|
$email = \Xmf\Request::getString('email', '', 'POST'); |
161
|
|
|
$criteria->add(new \Criteria('emailaddress', "%$email%", 'LIKE', 'd')); |
162
|
|
|
} |
163
|
|
|
if ('' != $_POST['description']) { |
164
|
|
|
$description = \Xmf\Request::getString('description', '', 'POST'); |
165
|
|
|
$criteria->add(new \Criteria('event_desc', "%$description%", 'LIKE')); |
166
|
|
|
} |
167
|
|
|
$criteria->setOrder('DESC'); |
168
|
|
|
$criteria->setSort('posted'); |
169
|
|
|
if (isset($email)) { |
170
|
|
|
$mailEvents = $mailEventHandler->getObjectsJoin($criteria); |
171
|
|
|
} else { |
172
|
|
|
$mailEvents = $mailEventHandler->getObjects($criteria); |
173
|
|
|
} |
174
|
|
|
|
175
|
|
|
displayEvents($mailEvents, $mailboxes); |
176
|
|
|
|
177
|
|
|
require_once __DIR__ . '/admin_footer.php'; |
178
|
|
|
} else { |
179
|
|
|
$stylePath = require_once XHELP_ASSETS_PATH . '/js/calendar/calendarjs.php'; |
180
|
|
|
echo '<link rel="stylesheet" type="text/css" media="all" href="' . $stylePath . '"><!--[if lt IE 7]><script src="iepngfix.js" language="JavaScript" type="text/javascript"></script><![endif]-->'; |
181
|
|
|
|
182
|
|
|
echo "<form method='post' action='" . XHELP_ADMIN_URL . "/main.php?op=searchMailEvents'>"; |
|
|
|
|
183
|
|
|
|
184
|
|
|
echo "<table width='100%' cellspacing='1' class='outer'>"; |
185
|
|
|
echo "<tr><th colspan='2'>" . _AM_XHELP_SEARCH_EVENTS . '</th></tr>'; |
186
|
|
|
echo "<tr><td width='20%' class='head'>" . _AM_XHELP_TEXT_MAILBOX . "</td> |
187
|
|
|
<td class='even'><input type='text' size='55' name='email' class='formButton'></td></tr>"; |
188
|
|
|
echo "<tr><td class='head'>" . _AM_XHELP_TEXT_DESCRIPTION . "</td> |
189
|
|
|
<td class='even'><input type='text' size='55' name='description' class='formButton'></td></tr>"; |
190
|
|
|
echo "<tr><td class='head'>" . _AM_XHELP_SEARCH_BEGINEGINDATE . "</td> |
191
|
|
|
<td class='even'><input type='text' name='begin_date' id='begin_date' size='10' maxlength='10' value='" . formatTimestamp(time(), 'mysql') . "'> |
192
|
|
|
<a href='' onclick='return showCalendar(\"begin_date\");'><img src='" . XHELP_IMAGE_URL . "/calendar.png' alt='Calendar image' name='calendar' style='vertical-align:bottom;border:0;background:transparent;'></a> "; |
193
|
|
|
xhelpDrawHourSelect('begin_hour', '12'); |
194
|
|
|
xhelpDrawMinuteSelect('begin_minute'); |
195
|
|
|
xhelpDrawModeSelect('begin_mode'); |
196
|
|
|
echo "<tr><td class='head'>" . _AM_XHELP_SEARCH_ENDDATE . "</td> |
197
|
|
|
<td class='even'><input type='text' name='end_date' id='end_date' size='10' maxlength='10' value='" . formatTimestamp(time(), 'mysql') . "'> |
198
|
|
|
<a href='' onclick='return showCalendar(\"end_date\");'><img src='" . XHELP_IMAGE_URL . "/calendar.png' alt='Calendar image' name='calendar' style='vertical-align:bottom;border:0;background:transparent;'></a> "; |
199
|
|
|
xhelpDrawHourSelect('end_hour', '12'); |
200
|
|
|
xhelpDrawMinuteSelect('end_minute'); |
201
|
|
|
xhelpDrawModeSelect('end_mode'); |
202
|
|
|
echo "<tr><td class='foot' colspan='2'><input type='submit' name='searchEvents' value='" . _AM_XHELP_BUTTON_SEARCH . "'></td></tr>"; |
203
|
|
|
echo '</table>'; |
204
|
|
|
echo '</form>'; |
205
|
|
|
|
206
|
|
|
require_once __DIR__ . '/admin_footer.php'; |
207
|
|
|
} |
208
|
|
|
} |
209
|
|
|
|
210
|
|
|
/** |
211
|
|
|
* changes hour to am/pm |
212
|
|
|
* |
213
|
|
|
* @param int $mode , 1-am, 2-pm |
214
|
|
|
* @param int $hour hour of the day |
215
|
|
|
* |
216
|
|
|
* @return int in 24 hour mode |
217
|
|
|
*/ |
218
|
|
|
function xhelpChangeHour(int $mode, int $hour): int |
219
|
|
|
{ |
220
|
|
|
$mode = $mode; |
221
|
|
|
$hour = $hour; |
222
|
|
|
|
223
|
|
|
if (2 == $mode) { |
224
|
|
|
$hour += 12; |
225
|
|
|
|
226
|
|
|
return $hour; |
227
|
|
|
} |
228
|
|
|
|
229
|
|
|
return $hour; |
230
|
|
|
} |
231
|
|
|
|
232
|
|
|
/** |
233
|
|
|
* @param string $name |
234
|
|
|
* @param string $lSelect |
235
|
|
|
*/ |
236
|
|
|
function xhelpDrawHourSelect(string $name, string $lSelect = '-1') |
237
|
|
|
{ |
238
|
|
|
echo "<select name='" . $name . "'>"; |
239
|
|
|
for ($i = 1; $i <= 12; ++$i) { |
240
|
|
|
if ($lSelect == $i) { |
241
|
|
|
$selected = 'selected'; |
242
|
|
|
} else { |
243
|
|
|
$selected = ''; |
244
|
|
|
} |
245
|
|
|
echo "<option value='" . $i . "'" . $selected . '>' . $i . '</option>'; |
246
|
|
|
} |
247
|
|
|
echo '</select>'; |
248
|
|
|
} |
249
|
|
|
|
250
|
|
|
/** |
251
|
|
|
* @param string $name |
252
|
|
|
*/ |
253
|
|
|
function xhelpDrawMinuteSelect(string $name) |
254
|
|
|
{ |
255
|
|
|
$lSum = 0; |
256
|
|
|
|
257
|
|
|
echo "<select name='" . $name . "'>"; |
258
|
|
|
for ($i = 0; $lSum <= 50; ++$i) { |
259
|
|
|
if (0 == $i) { |
260
|
|
|
echo "<option value='00' selected>00</option>"; |
261
|
|
|
} else { |
262
|
|
|
$lSum += 5; |
263
|
|
|
echo "<option value='" . $lSum . "'>" . $lSum . '</option>'; |
264
|
|
|
} |
265
|
|
|
} |
266
|
|
|
echo '</select>'; |
267
|
|
|
} |
268
|
|
|
|
269
|
|
|
/** |
270
|
|
|
* @param string $name |
271
|
|
|
* @param string $sSelect |
272
|
|
|
*/ |
273
|
|
|
function xhelpDrawModeSelect(string $name, string $sSelect = 'AM') |
274
|
|
|
{ |
275
|
|
|
echo "<select name='" . $name . "'>"; |
276
|
|
|
if ('AM' === $sSelect) { |
277
|
|
|
echo "<option value='1' selected>AM</option>"; |
278
|
|
|
echo "<option value='2'>PM</option>"; |
279
|
|
|
} else { |
280
|
|
|
echo "<option value='1'>AM</option>"; |
281
|
|
|
echo "<option value='2' selected>PM</option>"; |
282
|
|
|
} |
283
|
|
|
} |
284
|
|
|
|
285
|
|
|
function xhelp_default() |
286
|
|
|
{ |
287
|
|
|
$helper = Xhelp\Helper::getInstance(); |
288
|
|
|
|
289
|
|
|
xoops_cp_header(); |
290
|
|
|
//echo $oAdminButton->renderButtons('index'); |
291
|
|
|
$adminObject = Admin::getInstance(); |
292
|
|
|
$adminObject->displayNavigation(basename(__FILE__)); |
293
|
|
|
|
294
|
|
|
$displayName = $helper->getConfig('xhelp_displayName'); // Determines if username or real name is displayed |
295
|
|
|
|
296
|
|
|
$stylePath = XHELP_BASE_URL . '/assets/css/xhelp.css'; |
297
|
|
|
echo '<link rel="stylesheet" type="text/css" media="all" href="' . $stylePath . '"><!--[if if lt IE 7]><script src="iepngfix.js" language="JavaScript" type="text/javascript"></script><![endif]-->'; |
298
|
|
|
|
299
|
|
|
global $xoopsUser, $xoopsDB; |
300
|
|
|
/** @var \XoopsModules\Xhelp\TicketHandler $ticketHandler */ |
301
|
|
|
$ticketHandler = $helper->getHandler('Ticket'); |
302
|
|
|
/** @var \XoopsModules\Xhelp\StatusHandler $statusHandler */ |
303
|
|
|
$statusHandler = $helper->getHandler('Status'); |
304
|
|
|
|
305
|
|
|
$criteria = new \Criteria('', ''); |
306
|
|
|
$criteria->setSort('description'); |
307
|
|
|
$criteria->setOrder('ASC'); |
308
|
|
|
$statuses = $statusHandler->getObjects($criteria); |
309
|
|
|
$table_class = ['odd', 'even']; |
310
|
|
|
echo "<table border='0' width='100%'>"; |
311
|
|
|
echo "<tr><td width='50%' valign='top'>"; |
312
|
|
|
echo "<div id='ticketInfo'>"; |
313
|
|
|
echo "<table border='0' width='95%' cellspacing='1' class='outer'> |
314
|
|
|
<tr><th colspan='2'>" . _AM_XHELP_TEXT_TICKET_INFO . '</th></tr>'; |
315
|
|
|
$class = 'odd'; |
316
|
|
|
$totalTickets = 0; |
317
|
|
|
foreach ($statuses as $status) { |
318
|
|
|
$criteria = new \Criteria('status', $status->getVar('id')); |
319
|
|
|
$numTickets = $ticketHandler->getCount($criteria); |
320
|
|
|
$totalTickets += $numTickets; |
321
|
|
|
|
322
|
|
|
echo "<tr class='" . $class . "'><td>" . $status->getVar('description') . '</td><td>' . $numTickets . '</td></tr>'; |
323
|
|
|
if ('odd' === $class) { |
324
|
|
|
$class = 'even'; |
325
|
|
|
} else { |
326
|
|
|
$class = 'odd'; |
327
|
|
|
} |
328
|
|
|
} |
329
|
|
|
echo "<tr class='foot'><td>" . _AM_XHELP_TEXT_TOTAL_TICKETS . '</td><td>' . $totalTickets . '</td></tr>'; |
330
|
|
|
echo '</table></div><br>'; |
331
|
|
|
|
332
|
|
|
/** @var \XoopsModules\Xhelp\StaffHandler $staffHandler */ |
333
|
|
|
$staffHandler = $helper->getHandler('Staff'); |
|
|
|
|
334
|
|
|
/** @var \XoopsModules\Xhelp\ResponseHandler $responseHandler */ |
335
|
|
|
$responseHandler = $helper->getHandler('Response'); |
|
|
|
|
336
|
|
|
echo "</td><td valign='top'>"; // Outer table |
337
|
|
|
echo "<div id='timeSpent'>"; // Start inner top-left cell |
338
|
|
|
echo "<table border='0' width='100%' cellspacing='1' class='outer'> |
339
|
|
|
<tr><th colspan='2'>" . _AM_XHELP_TEXT_RESPONSE_TIME . '</th></tr>'; |
340
|
|
|
|
341
|
|
|
$sql = sprintf('SELECT u.uid, u.uname, u.name, (s.responseTime / s.ticketsResponded) AS AvgResponseTime FROM `%s` u INNER JOIN %s s ON u.uid = s.uid WHERE ticketsResponded > 0 ORDER BY AvgResponseTime', $xoopsDB->prefix('users'), $xoopsDB->prefix('xhelp_staff')); |
342
|
|
|
$ret = $xoopsDB->query($sql, MAX_STAFF_RESPONSETIME); |
343
|
|
|
$i = 0; |
344
|
|
|
while ([$uid, $uname, $name, $avgResponseTime] = $xoopsDB->fetchRow($ret)) { |
345
|
|
|
$class = $table_class[$i % 2]; |
346
|
|
|
echo "<tr class='$class'><td>" . Xhelp\Utility::getDisplayName($displayName, $name, $uname) . "</td><td align='right'>" . Xhelp\Utility::formatTime((int)$avgResponseTime) . '</td></tr>'; |
347
|
|
|
++$i; |
348
|
|
|
} |
349
|
|
|
echo '</table></div><br>'; // End inner top-left cell |
350
|
|
|
echo "</td></tr><tr><td valign='top'>"; // End first, start second cell |
351
|
|
|
|
352
|
|
|
//Get Calls Closed block |
353
|
|
|
$sql = sprintf('SELECT SUM(callsClosed) FROM `%s`', $xoopsDB->prefix('xhelp_staff')); |
354
|
|
|
$ret = $xoopsDB->query($sql); |
355
|
|
|
if ([$totalStaffClosed] = $xoopsDB->fetchRow($ret)) { |
356
|
|
|
if ($totalStaffClosed) { |
357
|
|
|
$sql = sprintf('SELECT u.uid, u.uname, u.name, s.callsClosed FROM `%s` u INNER JOIN %s s ON u.uid = s.uid WHERE s.callsClosed > 0 ORDER BY s.callsClosed DESC', $xoopsDB->prefix('users'), $xoopsDB->prefix('xhelp_staff')); |
358
|
|
|
$ret = $xoopsDB->query($sql, MAX_STAFF_CALLSCLOSED); |
359
|
|
|
echo "<div id='callsClosed'>"; |
360
|
|
|
echo "<table border='0' width='95%' cellspacing='1' class='outer'> |
361
|
|
|
<tr><th colspan='2'>" . _AM_XHELP_TEXT_TOP_CLOSERS . '</th></tr>'; |
362
|
|
|
$i = 0; |
363
|
|
|
while ([$uid, $uname, $name, $callsClosed] = $xoopsDB->fetchRow($ret)) { |
364
|
|
|
$class = $table_class[$i % 2]; |
365
|
|
|
echo "<tr class='$class'><td>" . Xhelp\Utility::getDisplayName($displayName, $name, $uname) . "</td><td align='right'>" . $callsClosed . ' (' . round(($callsClosed / $totalStaffClosed) * 100, 2) . '%)</td></tr>'; |
366
|
|
|
++$i; |
367
|
|
|
} |
368
|
|
|
echo '</table></div><br>'; // End inner table top row |
369
|
|
|
echo "</td><td valign='top'>"; // End top row of outer table |
370
|
|
|
|
371
|
|
|
$sql = sprintf('SELECT u.uid, u.uname, u.name, (s.responseTime / s.ticketsResponded) AS AvgResponseTime FROM `%s` u INNER JOIN %s s ON u.uid = s.uid WHERE ticketsResponded > 0 ORDER BY AvgResponseTime DESC', $xoopsDB->prefix('users'), $xoopsDB->prefix('xhelp_staff')); |
372
|
|
|
$ret = $xoopsDB->query($sql, MAX_STAFF_RESPONSETIME); |
373
|
|
|
echo "<div id='leastCallsClosed'>"; |
374
|
|
|
echo "<table border='0' width='100%' cellspacing='1' class='outer'> |
375
|
|
|
<tr><th colspan='2'>" . _AM_XHELP_TEXT_RESPONSE_TIME_SLOW . '</th></tr>'; |
376
|
|
|
$i = 0; |
377
|
|
|
while ([$uid, $uname, $name, $avgResponseTime] = $xoopsDB->fetchRow($ret)) { |
378
|
|
|
$class = $table_class[$i % 2]; |
379
|
|
|
echo "<tr class='$class'><td>" . Xhelp\Utility::getDisplayName($displayName, $name, $uname) . "</td><td align='right'>" . Xhelp\Utility::formatTime($avgResponseTime) . '</td></tr>'; |
380
|
|
|
++$i; |
381
|
|
|
} |
382
|
|
|
echo '</table></div>'; // End first cell, second row of inner table |
383
|
|
|
} |
384
|
|
|
} |
385
|
|
|
echo '</td></tr></table><br>'; // End second cell, second row of inner table |
386
|
|
|
|
387
|
|
|
$criteria = new \Criteria('state', '2', '<>', 's'); |
388
|
|
|
$criteria->setSort('priority'); |
389
|
|
|
$criteria->setOrder('ASC'); |
390
|
|
|
$criteria->setLimit(10); |
391
|
|
|
$highPriority = $ticketHandler->getObjects($criteria); |
392
|
|
|
$has_highPriority = (count($highPriority) > 0); |
393
|
|
|
if ($has_highPriority) { |
394
|
|
|
echo "<div id='highPriority'>"; |
395
|
|
|
echo "<table border='0' width='100%' cellspacing='1' class='outer'> |
396
|
|
|
<tr><th colspan='8'>" . _AM_XHELP_TEXT_HIGH_PRIORITY . '</th></tr>'; |
397
|
|
|
echo "<tr class='head'><td>" |
398
|
|
|
. _AM_XHELP_TEXT_PRIORITY |
399
|
|
|
. '</td><td>' |
400
|
|
|
. _AM_XHELP_TEXT_ELAPSED |
401
|
|
|
. '</td><td>' |
402
|
|
|
. _AM_XHELP_TEXT_STATUS |
403
|
|
|
. '</td><td>' |
404
|
|
|
. _AM_XHELP_TEXT_SUBJECT |
405
|
|
|
. '</td><td>' |
406
|
|
|
. _AM_XHELP_TEXT_DEPARTMENT |
407
|
|
|
. '</td><td>' |
408
|
|
|
. _AM_XHELP_TEXT_OWNER |
409
|
|
|
. '</td><td>' |
410
|
|
|
. _AM_XHELP_TEXT_LAST_UPDATED |
411
|
|
|
. '</td><td>' |
412
|
|
|
. _AM_XHELP_TEXT_LOGGED_BY |
413
|
|
|
. '</td></tr>'; |
414
|
|
|
$i = 0; |
415
|
|
|
foreach ($highPriority as $ticket) { |
416
|
|
|
if ($ticket->isOverdue()) { |
417
|
|
|
$class = $table_class[$i % 2] . ' overdue'; |
418
|
|
|
} else { |
419
|
|
|
$class = $table_class[$i % 2]; |
420
|
|
|
} |
421
|
|
|
$priority_url = "<img src='" . XHELP_IMAGE_URL . '/priority' . $ticket->getVar('priority') . ".png' alt='" . $ticket->getVar('priority') . "'>"; |
422
|
|
|
$subject_url = sprintf("<a href='" . XHELP_BASE_URL . '/ticket.php?id=' . $ticket->getVar('id') . "' target='_BLANK'>%s</a>", $ticket->getVar('subject')); |
423
|
|
|
$dept = $ticket->getDepartment(); |
424
|
|
|
if ($dept) { |
425
|
|
|
$dept_url = sprintf("<a href='" . XHELP_BASE_URL . '/index.php?op=staffViewAll&dept=' . $dept->getVar('id') . "' target='_BLANK'>%s</a>", $dept->getVar('department')); |
426
|
|
|
} else { |
427
|
|
|
$dept_url = _AM_XHELP_TEXT_NO_DEPT; |
428
|
|
|
} |
429
|
|
|
if (0 != $ticket->getVar('ownership')) { |
430
|
|
|
$owner_url = sprintf("<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $ticket->getVar('uid') . "' target='_BLANK'>%s</a>", Xhelp\Utility::getUsername($ticket->getVar('ownership'), $displayName)); |
431
|
|
|
} else { |
432
|
|
|
$owner_url = _AM_XHELP_TEXT_NO_OWNER; |
433
|
|
|
} |
434
|
|
|
$user_url = sprintf("<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $ticket->getVar('uid') . "' target='_BLANK'>%s</a>", Xhelp\Utility::getUsername($ticket->getVar('uid'), $displayName)); |
435
|
|
|
echo "<tr class='$class'><td>" . $priority_url . '</td> |
436
|
|
|
<td>' . $ticket->elapsed() . '</td> |
437
|
|
|
<td>' . Xhelp\Utility::getStatus($ticket->getVar('status')) . '</td> |
438
|
|
|
<td>' . $subject_url . '</td> |
439
|
|
|
<td>' . $dept_url . '</td> |
440
|
|
|
<td>' . $owner_url . ' </td> |
441
|
|
|
<td>' . $ticket->lastUpdated() . '</td> |
442
|
|
|
<td>' . $user_url . '</td> |
443
|
|
|
</tr>'; |
444
|
|
|
++$i; |
445
|
|
|
} |
446
|
|
|
echo '</table></div>'; |
447
|
|
|
} |
448
|
|
|
|
449
|
|
|
pathConfiguration(); |
450
|
|
|
|
451
|
|
|
require_once __DIR__ . '/admin_footer.php'; |
452
|
|
|
} |
453
|
|
|
|
454
|
|
|
function pathConfiguration() |
455
|
|
|
{ |
456
|
|
|
global $xoopsModule, $xoopsConfig; |
457
|
|
|
|
458
|
|
|
// Upload and Images Folders |
459
|
|
|
|
460
|
|
|
$paths = []; |
461
|
|
|
$paths[_AM_XHELP_PATH_TICKETATTACH] = XHELP_UPLOAD_PATH; |
|
|
|
|
462
|
|
|
$paths[_AM_XHELP_PATH_EMAILTPL] = XHELP_BASE_PATH . "/language/{$xoopsConfig['language']}"; |
463
|
|
|
|
464
|
|
|
echo '<h3>' . _AM_XHELP_PATH_CONFIG . '</h3>'; |
465
|
|
|
echo "<table width='100%' class='outer' cellspacing='1' cellpadding='3' border='0' ><tr>"; |
466
|
|
|
echo "<td class='bg3'><b>" . _AM_XHELP_TEXT_DESCRIPTION . '</b></td>'; |
467
|
|
|
echo "<td class='bg3'><b>" . _AM_XHELP_TEXT_PATH . '</b></td>'; |
468
|
|
|
echo "<td class='bg3' align='center'><b>" . _AM_XHELP_TEXT_STATUS . '</b></td></tr>'; |
469
|
|
|
|
470
|
|
|
foreach ($paths as $desc => $path) { |
471
|
|
|
echo "<tr><td class='odd'>$desc</td>"; |
472
|
|
|
echo "<td class='odd'>$path</td>"; |
473
|
|
|
echo "<td class='even' class='center;'>" . xhelp_admin_getPathStatus($path) . '</td></tr>'; |
474
|
|
|
} |
475
|
|
|
|
476
|
|
|
echo '</table>'; |
477
|
|
|
echo '<br>'; |
478
|
|
|
|
479
|
|
|
echo '</div>'; |
480
|
|
|
} |
481
|
|
|
|
482
|
|
|
function about() |
483
|
|
|
{ |
484
|
|
|
xoops_cp_header(); |
485
|
|
|
//echo $oAdminButton->renderButtons(); |
486
|
|
|
$adminObject = Admin::getInstance(); |
487
|
|
|
$adminObject->displayNavigation(basename(__FILE__)); |
488
|
|
|
|
489
|
|
|
require_once XHELP_ADMIN_PATH . '/about.php'; |
|
|
|
|
490
|
|
|
} |
491
|
|
|
|
492
|
|
|
function createdir() |
493
|
|
|
{ |
494
|
|
|
$path = $_GET['path']; |
495
|
|
|
$res = xhelp_admin_mkdir($path); |
496
|
|
|
$helper = Xhelp\Helper::getInstance(); |
497
|
|
|
|
498
|
|
|
$msg = $res ? _AM_XHELP_PATH_CREATED : _AM_XHELP_PATH_NOTCREATED; |
499
|
|
|
$helper->redirect('admin/index.php', 2, $msg . ': ' . $path); |
500
|
|
|
} |
501
|
|
|
|
502
|
|
|
function setperm() |
503
|
|
|
{ |
504
|
|
|
$helper = Xhelp\Helper::getInstance(); |
505
|
|
|
$path = $_GET['path']; |
506
|
|
|
$res = xhelp_admin_chmod($path, 0777); |
507
|
|
|
$msg = ($res ? _AM_XHELP_PATH_PERMSET : _AM_XHELP_PATH_NOTPERMSET); |
508
|
|
|
$helper->redirect('admin/index.php', 2, $msg . ': ' . $path); |
509
|
|
|
} |
510
|
|
|
|