1 | <?php
|
2 | /**
|
3 | * ###############################################
|
4 | *
|
5 | * SWIFT Framework
|
6 | * _______________________________________________
|
7 | *
|
8 | * @author Varun Shoor
|
9 | *
|
10 | * @package SWIFT
|
11 | * @copyright Copyright (c) 2001-2012, Kayako
|
12 | * @license http://www.kayako.com/license
|
13 | * @link http://www.kayako.com
|
14 | *
|
15 | * ###############################################
|
16 | */
|
17 |
|
18 | /**
|
19 | * The Ticket Grid Controller
|
20 | *
|
21 | * @author Varun Shoor
|
22 | */
|
23 | class Controller_Manage extends Controller_staff
|
24 | {
|
25 | public $UserInterfaceGrid = false;
|
26 |
|
27 | // Core Constants
|
28 | const MENU_ID = 2;
|
29 | const NAVIGATION_ID = 1;
|
30 |
|
31 | /**
|
32 | * Constructor
|
33 | *
|
34 | * @author Varun Shoor
|
35 | * @return bool "true" on Success, "false" otherwise
|
36 | */
|
37 | public function __construct()
|
38 | {
|
39 | parent::__construct();
|
40 |
|
41 | $this->Language->Load('staff_ticketsmain');
|
42 | $this->Language->Load('staff_ticketsmanage');
|
43 |
|
44 | SWIFT_Ticket::LoadLanguageTable();
|
45 |
|
46 | $this->Load->Library('UserInterface:UserInterfaceGrid', array('ticketmanagegrid', false, true));
|
47 |
|
48 | return true;
|
49 | }
|
50 |
|
51 | /**
|
52 | * Destructor
|
53 | *
|
54 | * @author Varun Shoor
|
55 | * @return bool "true" on Success, "false" otherwise
|
56 | */
|
57 | public function __destruct()
|
58 | {
|
59 | parent::__destruct();
|
60 |
|
61 | return true;
|
62 | }
|
63 |
|
64 | /**
|
65 | * Put Back the Tickets that were trashed from Mass Action
|
66 | *
|
67 | * @author Varun Shoor
|
68 | * @param mixed $_ticketIDList The Ticket ID List Container Array
|
69 | * @param bool $_byPassCSRF Whether to bypass the CSRF check
|
70 | * @return bool "true" on Success, "false" otherwise
|
71 | */
|
72 | static public function PutBackList($_ticketIDList, $_byPassCSRF = false)
|
73 | {
|
74 | $_SWIFT = SWIFT::GetInstance();
|
75 |
|
76 | // BEGIN CSRF HASH CHECK
|
77 |
|
78 | if (!$_byPassCSRF && !SWIFT_Session::CheckCSRFHash($_POST['csrfhash']))
|
79 | {
|
80 | SWIFT::Error($_SWIFT->Language->Get('titlecsrfhash'), $_SWIFT->Language->Get('msgcsrfhash'));
|
81 |
|
82 | return false;
|
83 | }
|
84 |
|
85 | // END CSRF HASH CHECK
|
86 |
|
87 | $_departmentCache = $_SWIFT->Cache->Get('departmentcache');
|
88 | $_ticketStatusCache = $_SWIFT->Cache->Get('statuscache');
|
89 |
|
90 | if ($_SWIFT->Staff->GetPermission('staff_tcanupdateticket') == '0') {
|
91 | SWIFT::Error($_SWIFT->Language->Get('titlenoperm'), $_SWIFT->Language->Get('msgnoperm'));
|
92 |
|
93 | return false;
|
94 | }
|
95 |
|
96 | if (_is_array($_ticketIDList)) {
|
97 | $_SWIFT->Database->Query("SELECT * FROM " . TABLE_PREFIX . "tickets WHERE ticketid IN (" .
|
98 | BuildIN($_ticketIDList) . ")");
|
99 | while ($_SWIFT->Database->NextRecord()) {
|
100 | $_SWIFT_TicketObject = new SWIFT_Ticket(new SWIFT_DataStore($_SWIFT->Database->Record));
|
101 | if (!$_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
102 | throw new SWIFT_Exception('Access Denied to Ticket: ' . $_SWIFT_TicketObject->GetTicketDisplayID());
|
103 | }
|
104 |
|
105 | if ($_SWIFT_TicketObject->GetProperty('departmentid') != '0')
|
106 | {
|
107 | continue;
|
108 | }
|
109 |
|
110 | $_departmentTitle = $_ticketStatusTitle = '';
|
111 | if (isset($_departmentCache[$_SWIFT->Database->Record['departmentid']])) {
|
112 | $_departmentTitle = htmlspecialchars($_departmentCache[$_SWIFT->Database->Record['departmentid']]['title']);
|
113 | }
|
114 |
|
115 | if (isset($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']])) {
|
116 | $_ticketStatusTitle = htmlspecialchars($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']]['title']);
|
117 | }
|
118 |
|
119 | SWIFT_StaffActivityLog::AddToLog(sprintf($_SWIFT->Language->Get('activityundeleteticket'),
|
120 | htmlspecialchars($_SWIFT->Database->Record['subject']), htmlspecialchars($_departmentTitle),
|
121 | htmlspecialchars($_ticketStatusTitle), htmlspecialchars($_SWIFT->Database->Record['fullname'])),
|
122 | SWIFT_StaffActivityLog::ACTION_DELETE, SWIFT_StaffActivityLog::SECTION_TICKETS, SWIFT_StaffActivityLog::INTERFACE_STAFF);
|
123 | }
|
124 |
|
125 | SWIFT_Ticket::UnDeleteList($_ticketIDList);
|
126 | }
|
127 |
|
128 | SWIFT_TicketManager::RebuildCache();
|
129 |
|
130 | return true;
|
131 | }
|
132 |
|
133 | /**
|
134 | * Put Back the Given Ticket ID
|
135 | *
|
136 | * @author Varun Shoor
|
137 | * @param int $_ticketID The Ticket ID
|
138 | * @param int $_departmentID (OPTIONAL) The Department ID
|
139 | * @param int $_ticketStatusID (OPTIONAL) The Ticket Status ID
|
140 | * @param int $_ticketTypeID (OPTIONAL) The Ticket Type ID
|
141 | * @return bool "true" on Success, "false" otherwise
|
142 | * @throws SWIFT_Exception If the Class is not Loaded
|
143 | */
|
144 | public function PutBack($_ticketID, $_listType = false, $_departmentID = -1, $_ticketStatusID = -1, $_ticketTypeID = -1)
|
145 | {
|
146 | if (!$this->GetIsClassLoaded())
|
147 | {
|
148 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
149 |
|
150 | return false;
|
151 | }
|
152 |
|
153 | self::PutBackList(array($_ticketID), true);
|
154 |
|
155 | /*
|
156 | * BUG FIX - Varun Shoor
|
157 | *
|
158 | * SWIFT-1562 Issue while moving a ticket to Trash
|
159 | *
|
160 | */
|
161 | $this->Load->Index(0, $_listType, $_departmentID, $_ticketStatusID, $_ticketTypeID);
|
162 |
|
163 | return true;
|
164 | }
|
165 |
|
166 | /**
|
167 | * Delete the Tickets from Mass Action
|
168 | *
|
169 | * @author Varun Shoor
|
170 | * @param mixed $_ticketIDList The Ticket ID List Container Array
|
171 | * @param bool $_byPassCSRF Whether to bypass the CSRF check
|
172 | * @return bool "true" on Success, "false" otherwise
|
173 | */
|
174 | static public function DeleteList($_ticketIDList, $_byPassCSRF = false)
|
175 | {
|
176 | $_SWIFT = SWIFT::GetInstance();
|
177 |
|
178 | // BEGIN CSRF HASH CHECK
|
179 |
|
180 | if (!$_byPassCSRF && !SWIFT_Session::CheckCSRFHash($_POST['csrfhash']))
|
181 | {
|
182 | SWIFT::Error($_SWIFT->Language->Get('titlecsrfhash'), $_SWIFT->Language->Get('msgcsrfhash'));
|
183 |
|
184 | return false;
|
185 | }
|
186 |
|
187 | // END CSRF HASH CHECK
|
188 |
|
189 | $_departmentCache = $_SWIFT->Cache->Get('departmentcache');
|
190 | $_ticketStatusCache = $_SWIFT->Cache->Get('statuscache');
|
191 |
|
192 | if ($_SWIFT->Staff->GetPermission('staff_tcandeleteticket') == '0') {
|
193 | SWIFT::Error($_SWIFT->Language->Get('titlenoperm'), $_SWIFT->Language->Get('msgnoperm'));
|
194 |
|
195 | return false;
|
196 | }
|
197 |
|
198 | if (_is_array($_ticketIDList)) {
|
199 | $_SWIFT->Database->Query("SELECT * FROM " . TABLE_PREFIX . "tickets WHERE ticketid IN (" .
|
200 | BuildIN($_ticketIDList) . ")");
|
201 | while ($_SWIFT->Database->NextRecord()) {
|
202 | $_SWIFT_TicketObject = new SWIFT_Ticket(new SWIFT_DataStore($_SWIFT->Database->Record));
|
203 | if (!$_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
204 | throw new SWIFT_Exception('Access Denied to Ticket: ' . $_SWIFT_TicketObject->GetTicketDisplayID());
|
205 | }
|
206 |
|
207 | $_departmentTitle = $_ticketStatusTitle = '';
|
208 | if (isset($_departmentCache[$_SWIFT->Database->Record['departmentid']])) {
|
209 | $_departmentTitle = htmlspecialchars($_departmentCache[$_SWIFT->Database->Record['departmentid']]['title']);
|
210 | }
|
211 |
|
212 | if (isset($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']])) {
|
213 | $_ticketStatusTitle = htmlspecialchars($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']]['title']);
|
214 | }
|
215 |
|
216 | SWIFT_StaffActivityLog::AddToLog(sprintf($_SWIFT->Language->Get('activitydeleteticket'),
|
217 | htmlspecialchars($_SWIFT->Database->Record['subject']), htmlspecialchars($_departmentTitle),
|
218 | htmlspecialchars($_ticketStatusTitle), htmlspecialchars($_SWIFT->Database->Record['fullname'])),
|
219 | SWIFT_StaffActivityLog::ACTION_DELETE, SWIFT_StaffActivityLog::SECTION_TICKETS, SWIFT_StaffActivityLog::INTERFACE_STAFF);
|
220 | }
|
221 |
|
222 | // Begin Hook: staff_ticket_delete
|
223 | unset($_hookCode);
|
224 | ($_hookCode = SWIFT_Hook::Execute('staff_ticket_delete')) ? eval($_hookCode) : false;
|
225 | // End Hook
|
226 |
|
227 | SWIFT_Ticket::DeleteList($_ticketIDList);
|
228 | }
|
229 |
|
230 | SWIFT_TicketManager::RebuildCache();
|
231 |
|
232 | return true;
|
233 | }
|
234 |
|
235 | /**
|
236 | * Delete all the Tickets from Trash Folder
|
237 | *
|
238 | * @author Parminder Singh
|
239 | * @return bool "true" on Success, "false" otherwise
|
240 | */
|
241 | public function EmptyTrash()
|
242 | {
|
243 | $_SWIFT = SWIFT::GetInstance();
|
244 |
|
245 | $_departmentCache = $_SWIFT->Cache->Get('departmentcache');
|
246 | $_ticketStatusCache = $_SWIFT->Cache->Get('statuscache');
|
247 |
|
248 | if ($_SWIFT->Staff->GetPermission('staff_tcandeleteticket') == '0') {
|
249 | SWIFT::Error($_SWIFT->Language->Get('titlenoperm'), $_SWIFT->Language->Get('msgnoperm'));
|
250 |
|
251 | return false;
|
252 | }
|
253 | $_ticketIDList = array();
|
254 | $_assignedDepartmentIDList = $_SWIFT->Staff->GetAssignedDepartments();
|
255 |
|
256 | $_SWIFT->Database->Query("SELECT * FROM " . TABLE_PREFIX . "tickets WHERE departmentid = '0' AND trasholddepartmentid IN (" . BuildIN($_assignedDepartmentIDList) . ")");
|
257 |
|
258 | while ($_SWIFT->Database->NextRecord()) {
|
259 | $_SWIFT_TicketObject = new SWIFT_Ticket(new SWIFT_DataStore($_SWIFT->Database->Record));
|
260 | if (!$_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
261 | throw new SWIFT_Exception('Access Denied to Ticket: ' . $_SWIFT_TicketObject->GetTicketDisplayID());
|
262 | }
|
263 |
|
264 | $_ticketIDList[] = $_SWIFT->Database->Record['ticketid'];
|
265 |
|
266 | $_departmentTitle = $_ticketStatusTitle = '';
|
267 | if (isset($_departmentCache[$_SWIFT->Database->Record['departmentid']])) {
|
268 | $_departmentTitle = htmlspecialchars($_departmentCache[$_SWIFT->Database->Record['departmentid']]['title']);
|
269 | }
|
270 |
|
271 | if (isset($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']])) {
|
272 | $_ticketStatusTitle = htmlspecialchars($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']]['title']);
|
273 | }
|
274 |
|
275 | SWIFT_StaffActivityLog::AddToLog(sprintf($_SWIFT->Language->Get('activitydeleteticket'), htmlspecialchars($_SWIFT->Database->Record['subject']), htmlspecialchars($_departmentTitle), htmlspecialchars($_ticketStatusTitle), htmlspecialchars($_SWIFT->Database->Record['fullname'])), SWIFT_StaffActivityLog::ACTION_DELETE, SWIFT_StaffActivityLog::SECTION_TICKETS, SWIFT_StaffActivityLog::INTERFACE_STAFF);
|
276 | }
|
277 |
|
278 | // Begin Hook: staff_ticket_delete
|
279 | unset($_hookCode);
|
280 | ($_hookCode = SWIFT_Hook::Execute('staff_ticket_delete')) ? eval($_hookCode) : false;
|
281 | // End Hook
|
282 |
|
283 | SWIFT_Ticket::DeleteList($_ticketIDList);
|
284 |
|
285 | SWIFT_TicketManager::RebuildCache();
|
286 |
|
287 | $this->Load->Index();
|
288 |
|
289 | return true;
|
290 | }
|
291 |
|
292 | /**
|
293 | * Trash the Tickets from Mass Action
|
294 | *
|
295 | * @author Varun Shoor
|
296 | * @param mixed $_ticketIDList The Ticket ID List Container Array
|
297 | * @param bool $_byPassCSRF Whether to bypass the CSRF check
|
298 | * @return bool "true" on Success, "false" otherwise
|
299 | */
|
300 | static public function TrashList($_ticketIDList, $_byPassCSRF = false)
|
301 | {
|
302 | $_SWIFT = SWIFT::GetInstance();
|
303 |
|
304 | // BEGIN CSRF HASH CHECK
|
305 |
|
306 | if (!$_byPassCSRF && !SWIFT_Session::CheckCSRFHash($_POST['csrfhash']))
|
307 | {
|
308 | SWIFT::Error($_SWIFT->Language->Get('titlecsrfhash'), $_SWIFT->Language->Get('msgcsrfhash'));
|
309 |
|
310 | return false;
|
311 | }
|
312 |
|
313 | // END CSRF HASH CHECK
|
314 |
|
315 | $_departmentCache = $_SWIFT->Cache->Get('departmentcache');
|
316 | $_ticketStatusCache = $_SWIFT->Cache->Get('statuscache');
|
317 |
|
318 | if ($_SWIFT->Staff->GetPermission('staff_tcantrashticket') == '0') {
|
319 | SWIFT::Error($_SWIFT->Language->Get('titlenoperm'), $_SWIFT->Language->Get('msgnoperm'));
|
320 |
|
321 | return false;
|
322 | }
|
323 |
|
324 | if (_is_array($_ticketIDList)) {
|
325 | $_SWIFT->Database->Query("SELECT * FROM " . TABLE_PREFIX . "tickets WHERE ticketid IN (" .
|
326 | BuildIN($_ticketIDList) . ")");
|
327 | while ($_SWIFT->Database->NextRecord()) {
|
328 | $_SWIFT_TicketObject = new SWIFT_Ticket(new SWIFT_DataStore($_SWIFT->Database->Record));
|
329 | if (!$_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
330 | throw new SWIFT_Exception('Access Denied to Ticket: ' . $_SWIFT_TicketObject->GetTicketDisplayID());
|
331 | }
|
332 |
|
333 | $_departmentTitle = $_ticketStatusTitle = '';
|
334 | if (isset($_departmentCache[$_SWIFT->Database->Record['departmentid']])) {
|
335 | $_departmentTitle = htmlspecialchars($_departmentCache[$_SWIFT->Database->Record['departmentid']]['title']);
|
336 | }
|
337 |
|
338 | if (isset($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']])) {
|
339 | $_ticketStatusTitle = htmlspecialchars($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']]['title']);
|
340 | }
|
341 |
|
342 | SWIFT_StaffActivityLog::AddToLog(sprintf($_SWIFT->Language->Get('activitytrashticket'),
|
343 | htmlspecialchars($_SWIFT->Database->Record['subject']), htmlspecialchars($_departmentTitle),
|
344 | htmlspecialchars($_ticketStatusTitle), htmlspecialchars($_SWIFT->Database->Record['fullname'])),
|
345 | SWIFT_StaffActivityLog::ACTION_DELETE, SWIFT_StaffActivityLog::SECTION_TICKETS, SWIFT_StaffActivityLog::INTERFACE_STAFF);
|
346 | }
|
347 |
|
348 | SWIFT_Ticket::TrashList($_ticketIDList);
|
349 | }
|
350 |
|
351 | SWIFT_TicketManager::RebuildCache();
|
352 |
|
353 | return true;
|
354 | }
|
355 |
|
356 | /**
|
357 | * Trash the Given Ticket ID
|
358 | *
|
359 | * @author Varun Shoor
|
360 | * @param int $_ticketID The Ticket ID
|
361 | * @param int $_departmentID (OPTIONAL) The Department ID
|
362 | * @param int $_ticketStatusID (OPTIONAL) The Ticket Status ID
|
363 | * @param int $_ticketTypeID (OPTIONAL) The Ticket Type ID
|
364 | * @return bool "true" on Success, "false" otherwise
|
365 | * @throws SWIFT_Exception If the Class is not Loaded
|
366 | */
|
367 | public function Trash($_ticketID, $_listType = false, $_departmentID = -1, $_ticketStatusID = -1, $_ticketTypeID = -1)
|
368 | {
|
369 | if (!$this->GetIsClassLoaded())
|
370 | {
|
371 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
372 |
|
373 | return false;
|
374 | }
|
375 |
|
376 | self::TrashList(array($_ticketID), true);
|
377 |
|
378 | /*
|
379 | * BUG FIX - Varun Shoor
|
380 | *
|
381 | * SWIFT-1562 Issue while moving a ticket to Trash
|
382 | *
|
383 | */
|
384 | $this->Load->Index(0, $_listType, $_departmentID, $_ticketStatusID, $_ticketTypeID);
|
385 |
|
386 | return true;
|
387 | }
|
388 |
|
389 | /**
|
390 | * Mark the Tickets as Spam from Mass Action
|
391 | *
|
392 | * @author Varun Shoor
|
393 | * @param mixed $_ticketIDList The Ticket ID List Container Array
|
394 | * @param bool $_byPassCSRF Whether to bypass the CSRF check
|
395 | * @return bool "true" on Success, "false" otherwise
|
396 | */
|
397 | static public function SpamList($_ticketIDList, $_byPassCSRF = false)
|
398 | {
|
399 | $_SWIFT = SWIFT::GetInstance();
|
400 |
|
401 | // BEGIN CSRF HASH CHECK
|
402 |
|
403 | if (!$_byPassCSRF && !SWIFT_Session::CheckCSRFHash($_POST['csrfhash']))
|
404 | {
|
405 | SWIFT::Error($_SWIFT->Language->Get('titlecsrfhash'), $_SWIFT->Language->Get('msgcsrfhash'));
|
406 |
|
407 | return false;
|
408 | }
|
409 |
|
410 | // END CSRF HASH CHECK
|
411 |
|
412 | $_departmentCache = $_SWIFT->Cache->Get('departmentcache');
|
413 | $_ticketStatusCache = $_SWIFT->Cache->Get('statuscache');
|
414 |
|
415 | if ($_SWIFT->Staff->GetPermission('staff_tcanmarkasspam') == '0') {
|
416 | SWIFT::Error($_SWIFT->Language->Get('titlenoperm'), $_SWIFT->Language->Get('msgnoperm'));
|
417 |
|
418 | return false;
|
419 | }
|
420 |
|
421 | if (_is_array($_ticketIDList)) {
|
422 | $_SWIFT->Database->Query("SELECT * FROM " . TABLE_PREFIX . "tickets WHERE ticketid IN (" .
|
423 | BuildIN($_ticketIDList) . ")");
|
424 | while ($_SWIFT->Database->NextRecord()) {
|
425 | $_SWIFT_TicketObject = new SWIFT_Ticket(new SWIFT_DataStore($_SWIFT->Database->Record));
|
426 | if (!$_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
427 | throw new SWIFT_Exception('Access Denied to Ticket: ' . $_SWIFT_TicketObject->GetTicketDisplayID());
|
428 | }
|
429 |
|
430 | $_departmentTitle = $_ticketStatusTitle = '';
|
431 | if (isset($_departmentCache[$_SWIFT->Database->Record['departmentid']])) {
|
432 | $_departmentTitle = htmlspecialchars($_departmentCache[$_SWIFT->Database->Record['departmentid']]['title']);
|
433 | }
|
434 |
|
435 | if (isset($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']])) {
|
436 | $_ticketStatusTitle = htmlspecialchars($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']]['title']);
|
437 | }
|
438 |
|
439 | SWIFT_StaffActivityLog::AddToLog(sprintf($_SWIFT->Language->Get('activitymarkasspamticket'),
|
440 | htmlspecialchars($_SWIFT->Database->Record['subject']), htmlspecialchars($_departmentTitle),
|
441 | htmlspecialchars($_ticketStatusTitle), htmlspecialchars($_SWIFT->Database->Record['fullname'])),
|
442 | SWIFT_StaffActivityLog::ACTION_UPDATE, SWIFT_StaffActivityLog::SECTION_TICKETS, SWIFT_StaffActivityLog::INTERFACE_STAFF);
|
443 | }
|
444 |
|
445 | SWIFT_Ticket::MarkAsSpamList($_ticketIDList);
|
446 | }
|
447 |
|
448 | SWIFT_TicketManager::RebuildCache();
|
449 |
|
450 | return true;
|
451 | }
|
452 |
|
453 | /**
|
454 | * Mark as Spam the Given Ticket ID
|
455 | *
|
456 | * @author Varun Shoor
|
457 | * @param int $_ticketID The Ticket ID
|
458 | * @return bool "true" on Success, "false" otherwise
|
459 | * @throws SWIFT_Exception If the Class is not Loaded
|
460 | */
|
461 | public function Spam($_ticketID)
|
462 | {
|
463 | if (!$this->GetIsClassLoaded())
|
464 | {
|
465 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
466 |
|
467 | return false;
|
468 | }
|
469 |
|
470 | self::SpamList(array($_ticketID), true);
|
471 |
|
472 | $this->Load->Index();
|
473 |
|
474 | return true;
|
475 | }
|
476 |
|
477 | /**
|
478 | * Merge Tickets from Mass Action
|
479 | *
|
480 | * @author Varun Shoor
|
481 | * @param mixed $_ticketIDList The Ticket ID List Container Array
|
482 | * @param bool $_byPassCSRF Whether to bypass the CSRF check
|
483 | * @return bool "true" on Success, "false" otherwise
|
484 | */
|
485 | static public function MergeList($_ticketIDList, $_byPassCSRF = false)
|
486 | {
|
487 | $_SWIFT = SWIFT::GetInstance();
|
488 |
|
489 | // BEGIN CSRF HASH CHECK
|
490 |
|
491 | if (!$_byPassCSRF && !SWIFT_Session::CheckCSRFHash($_POST['csrfhash']))
|
492 | {
|
493 | SWIFT::Error($_SWIFT->Language->Get('titlecsrfhash'), $_SWIFT->Language->Get('msgcsrfhash'));
|
494 |
|
495 | return false;
|
496 | }
|
497 |
|
498 | // END CSRF HASH CHECK
|
499 |
|
500 | $_departmentCache = $_SWIFT->Cache->Get('departmentcache');
|
501 | $_ticketStatusCache = $_SWIFT->Cache->Get('statuscache');
|
502 |
|
503 | if ($_SWIFT->Staff->GetPermission('staff_tcanupateticket') == '0') {
|
504 | SWIFT::Error($_SWIFT->Language->Get('titlenoperm'), $_SWIFT->Language->Get('msgnoperm'));
|
505 |
|
506 | return false;
|
507 | }
|
508 |
|
509 | if (_is_array($_ticketIDList)) {
|
510 | $_SWIFT->Database->Query("SELECT * FROM " . TABLE_PREFIX . "tickets WHERE ticketid IN (" .
|
511 | BuildIN($_ticketIDList) . ")");
|
512 | while ($_SWIFT->Database->NextRecord()) {
|
513 | $_SWIFT_TicketObject = new SWIFT_Ticket(new SWIFT_DataStore($_SWIFT->Database->Record));
|
514 | if (!$_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
515 | throw new SWIFT_Exception('Access Denied to Ticket: ' . $_SWIFT_TicketObject->GetTicketDisplayID());
|
516 | }
|
517 |
|
518 | $_departmentTitle = $_ticketStatusTitle = '';
|
519 | if (isset($_departmentCache[$_SWIFT->Database->Record['departmentid']])) {
|
520 | $_departmentTitle = htmlspecialchars($_departmentCache[$_SWIFT->Database->Record['departmentid']]['title']);
|
521 | }
|
522 |
|
523 | if (isset($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']])) {
|
524 | $_ticketStatusTitle = htmlspecialchars($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']]['title']);
|
525 | }
|
526 |
|
527 | SWIFT_StaffActivityLog::AddToLog(sprintf($_SWIFT->Language->Get('activitymergeticket'),
|
528 | htmlspecialchars($_SWIFT->Database->Record['subject']), htmlspecialchars($_departmentTitle),
|
529 | htmlspecialchars($_ticketStatusTitle), htmlspecialchars($_SWIFT->Database->Record['fullname'])),
|
530 | SWIFT_StaffActivityLog::ACTION_UPDATE, SWIFT_StaffActivityLog::SECTION_TICKETS, SWIFT_StaffActivityLog::INTERFACE_STAFF);
|
531 | }
|
532 |
|
533 | SWIFT_Ticket::Merge($_ticketIDList);
|
534 | }
|
535 |
|
536 | SWIFT_TicketManager::RebuildCache();
|
537 |
|
538 | return true;
|
539 | }
|
540 |
|
541 | /**
|
542 | * Watch Tickets from Mass Action
|
543 | *
|
544 | * @author Varun Shoor
|
545 | * @param mixed $_ticketIDList The Ticket ID List Container Array
|
546 | * @param bool $_byPassCSRF Whether to bypass the CSRF check
|
547 | * @return bool "true" on Success, "false" otherwise
|
548 | */
|
549 | static public function WatchList($_ticketIDList, $_byPassCSRF = false)
|
550 | {
|
551 | $_SWIFT = SWIFT::GetInstance();
|
552 |
|
553 | // BEGIN CSRF HASH CHECK
|
554 |
|
555 | if (!$_byPassCSRF && !SWIFT_Session::CheckCSRFHash($_POST['csrfhash']))
|
556 | {
|
557 | SWIFT::Error($_SWIFT->Language->Get('titlecsrfhash'), $_SWIFT->Language->Get('msgcsrfhash'));
|
558 |
|
559 | return false;
|
560 | }
|
561 |
|
562 | // END CSRF HASH CHECK
|
563 |
|
564 | $_departmentCache = $_SWIFT->Cache->Get('departmentcache');
|
565 | $_ticketStatusCache = $_SWIFT->Cache->Get('statuscache');
|
566 |
|
567 | if ($_SWIFT->Staff->GetPermission('staff_tcanupateticket') == '0' || $_SWIFT->Staff->GetPermission('staff_tcanviewticket') == '0') {
|
568 | SWIFT::Error($_SWIFT->Language->Get('titlenoperm'), $_SWIFT->Language->Get('msgnoperm'));
|
569 |
|
570 | return false;
|
571 | }
|
572 |
|
573 | if (_is_array($_ticketIDList)) {
|
574 | $_SWIFT->Database->Query("SELECT * FROM " . TABLE_PREFIX . "tickets WHERE ticketid IN (" .
|
575 | BuildIN($_ticketIDList) . ")");
|
576 | while ($_SWIFT->Database->NextRecord()) {
|
577 | $_SWIFT_TicketObject = new SWIFT_Ticket(new SWIFT_DataStore($_SWIFT->Database->Record));
|
578 | if (!$_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
579 | throw new SWIFT_Exception('Access Denied to Ticket: ' . $_SWIFT_TicketObject->GetTicketDisplayID());
|
580 | }
|
581 |
|
582 | $_departmentTitle = $_ticketStatusTitle = '';
|
583 | if (isset($_departmentCache[$_SWIFT->Database->Record['departmentid']])) {
|
584 | $_departmentTitle = htmlspecialchars($_departmentCache[$_SWIFT->Database->Record['departmentid']]['title']);
|
585 | }
|
586 |
|
587 | if (isset($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']])) {
|
588 | $_ticketStatusTitle = htmlspecialchars($_ticketStatusCache[$_SWIFT->Database->Record['ticketstatusid']]['title']);
|
589 | }
|
590 |
|
591 | SWIFT_StaffActivityLog::AddToLog(sprintf($_SWIFT->Language->Get('activitywatchticket'),
|
592 | htmlspecialchars($_SWIFT->Database->Record['subject']), htmlspecialchars($_departmentTitle),
|
593 | htmlspecialchars($_ticketStatusTitle), htmlspecialchars($_SWIFT->Database->Record['fullname'])),
|
594 | SWIFT_StaffActivityLog::ACTION_UPDATE, SWIFT_StaffActivityLog::SECTION_TICKETS, SWIFT_StaffActivityLog::INTERFACE_STAFF);
|
595 | }
|
596 |
|
597 | SWIFT_Ticket::Watch($_ticketIDList, $_SWIFT->Staff);
|
598 | }
|
599 |
|
600 | SWIFT_TicketManager::RebuildCache();
|
601 |
|
602 | return true;
|
603 | }
|
604 |
|
605 | /**
|
606 | * Mass Reply to Tickets from Mass Action
|
607 | *
|
608 | * @author Varun Shoor
|
609 | * @param mixed $_ticketIDList The Ticket ID List Container Array
|
610 | * @param bool $_byPassCSRF Whether to bypass the CSRF check
|
611 | * @return bool "true" on Success, "false" otherwise
|
612 | */
|
613 | static public function MassReplyList($_ticketIDList, $_byPassCSRF = false)
|
614 | {
|
615 | $_SWIFT = SWIFT::GetInstance();
|
616 |
|
617 | // BEGIN CSRF HASH CHECK
|
618 |
|
619 | if (!$_byPassCSRF && !SWIFT_Session::CheckCSRFHash($_POST['csrfhash']))
|
620 | {
|
621 | SWIFT::Error($_SWIFT->Language->Get('titlecsrfhash'), $_SWIFT->Language->Get('msgcsrfhash'));
|
622 |
|
623 | return false;
|
624 | }
|
625 |
|
626 | // END CSRF HASH CHECK
|
627 |
|
628 | $_departmentCache = $_SWIFT->Cache->Get('departmentcache');
|
629 | $_ticketStatusCache = $_SWIFT->Cache->Get('statuscache');
|
630 |
|
631 | if ($_SWIFT->Staff->GetPermission('staff_tcanupateticket') == '0' || $_SWIFT->Staff->GetPermission('staff_tcanviewticket') == '0') {
|
632 | SWIFT::Error($_SWIFT->Language->Get('titlenoperm'), $_SWIFT->Language->Get('msgnoperm'));
|
633 |
|
634 | return false;
|
635 | }
|
636 |
|
637 | $_SWIFT->Language->Load('staff_ticketsmain');
|
638 | $_SWIFT->Language->Load('staff_ticketsmanage');
|
639 |
|
640 | SWIFT_Ticket::LoadLanguageTable();
|
641 |
|
642 | if (_is_array($_ticketIDList) && $_POST['replycontents'] != '') {
|
643 | foreach ($_ticketIDList as $_ticketID) {
|
644 | try {
|
645 | $_SWIFT_TicketObject = new SWIFT_Ticket(new SWIFT_DataID($_ticketID));
|
646 |
|
647 | if ($_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
648 | SWIFT_TicketPost::CreateStaff($_SWIFT_TicketObject, $_SWIFT->Staff, SWIFT_Ticket::CREATIONMODE_STAFFCP, $_POST['replycontents'], $_SWIFT_TicketObject->GetProperty('subject'),
|
649 | false, false);
|
650 |
|
651 | }
|
652 | } catch (SWIFT_Exception $_SWIFT_ExceptionObject) {
|
653 | }
|
654 | }
|
655 |
|
656 | SWIFT::Set('massreplyticketidlist', $_ticketIDList);
|
657 | }
|
658 |
|
659 | SWIFT_TicketManager::RebuildCache();
|
660 |
|
661 | return true;
|
662 | }
|
663 |
|
664 | /**
|
665 | * Render the Mass Reply Dialog
|
666 | *
|
667 | * @author Varun Shoor
|
668 | * @return bool "true" on Success, "false" otherwise
|
669 | */
|
670 | public function _MassReplyDialog()
|
671 | {
|
672 | $_SWIFT = SWIFT::GetInstance();
|
673 |
|
674 | if (!$this->GetIsClassLoaded())
|
675 | {
|
676 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
677 |
|
678 | return false;
|
679 | }
|
680 |
|
681 | $this->UserInterface->Header($this->Language->Get('tickets') . ' > ' . $this->Language->Get('massreply'), self::MENU_ID, self::NAVIGATION_ID);
|
682 |
|
683 | if ($_SWIFT->Staff->GetPermission('staff_tcanupateticket') == '0' || $_SWIFT->Staff->GetPermission('staff_tcanviewticket') == '0')
|
684 | {
|
685 | $this->UserInterface->DisplayError($this->Language->Get('titlenoperm'), $this->Language->Get('msgnoperm'));
|
686 | } else {
|
687 | $this->View->RenderMassReply();
|
688 | }
|
689 |
|
690 | $this->UserInterface->Footer();
|
691 |
|
692 | return true;
|
693 | }
|
694 |
|
695 | /**
|
696 | * Mass Action Panel Action
|
697 | *
|
698 | * @author Varun Shoor
|
699 | * @param mixed $_ticketIDList The Ticket ID List Container Array
|
700 | * @param bool $_byPassCSRF Whether to bypass the CSRF check
|
701 | * @return bool "true" on Success, "false" otherwise
|
702 | */
|
703 | static public function MassActionPanel($_ticketIDList, $_byPassCSRF = false)
|
704 | {
|
705 | $_SWIFT = SWIFT::GetInstance();
|
706 |
|
707 | // BEGIN CSRF HASH CHECK
|
708 |
|
709 | if (!$_byPassCSRF && !SWIFT_Session::CheckCSRFHash($_POST['csrfhash']))
|
710 | {
|
711 | SWIFT::Error($_SWIFT->Language->Get('titlecsrfhash'), $_SWIFT->Language->Get('msgcsrfhash'));
|
712 |
|
713 | return false;
|
714 | }
|
715 |
|
716 | // END CSRF HASH CHECK
|
717 |
|
718 |
|
719 | if ($_SWIFT->Staff->GetPermission('staff_tcanupateticket') == '0') {
|
720 | SWIFT::Error($_SWIFT->Language->Get('titlenoperm'), $_SWIFT->Language->Get('msgnoperm'));
|
721 |
|
722 | return false;
|
723 | }
|
724 |
|
725 | $_SWIFT_TicketViewPropertyManagerObject = new SWIFT_TicketViewPropertyManager();
|
726 |
|
727 | if (_is_array($_ticketIDList)) {
|
728 | $_finalTicketObjectContainer = array();
|
729 |
|
730 | $_SWIFT->Database->Query("SELECT * FROM " . TABLE_PREFIX . "tickets WHERE ticketid IN (" . BuildIN($_ticketIDList) . ")");
|
731 | while ($_SWIFT->Database->NextRecord()) {
|
732 | $_SWIFT_TicketObject = new SWIFT_Ticket(new SWIFT_DataStore($_SWIFT->Database->Record));
|
733 | if (!$_SWIFT_TicketObject instanceof SWIFT_Ticket || !$_SWIFT_TicketObject->GetIsClassLoaded() || !$_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
734 | continue;
|
735 | }
|
736 |
|
737 | $_finalTicketObjectContainer[] = $_SWIFT_TicketObject;
|
738 |
|
739 | /**
|
740 | * @todo Create the activity logs
|
741 | */
|
742 | // SWIFT_StaffActivityLog::AddToLog(sprintf($_SWIFT->Language->Get('activitydeleteusergroup'), htmlspecialchars($_SWIFT->Database->Record['title'])), SWIFT_StaffActivityLog::ACTION_DELETE, SWIFT_StaffActivityLog::SECTION_USERS, SWIFT_StaffActivityLog::INTERFACE_ADMIN);
|
743 | }
|
744 |
|
745 | if (count($_finalTicketObjectContainer))
|
746 | {
|
747 | $_finalTicketIDList = $_linkTicketIDList = array();
|
748 | foreach ($_finalTicketObjectContainer as $_key => $_SWIFT_TicketObject) {
|
749 | if (isset($_POST['departmentid']) && !empty($_POST['departmentid']) && $_POST['departmentid'] != '-1') {
|
750 | $_SWIFT_TicketObject->SetDepartment($_POST['departmentid']);
|
751 |
|
752 | $_SWIFT_TicketViewPropertyManagerObject->IncrementDepartment($_POST['departmentid']);
|
753 | }
|
754 |
|
755 | if (isset($_POST['staffid']) && $_POST['staffid'] != '-1') {
|
756 | $_SWIFT_TicketObject->SetOwner($_POST['staffid']);
|
757 |
|
758 | if ($_POST['staffid'] != '0') {
|
759 | $_SWIFT_TicketViewPropertyManagerObject->IncrementStaff($_POST['staffid']);
|
760 | }
|
761 | }
|
762 |
|
763 | if (isset($_POST['tickettypeid']) && !empty($_POST['tickettypeid']) && $_POST['tickettypeid'] != '-1') {
|
764 | $_SWIFT_TicketObject->SetType($_POST['tickettypeid']);
|
765 | $_SWIFT_TicketViewPropertyManagerObject->IncrementTicketType($_POST['tickettypeid']);
|
766 | }
|
767 |
|
768 | if (isset($_POST['ticketstatusid']) && !empty($_POST['ticketstatusid']) && $_POST['ticketstatusid'] != '-1') {
|
769 | $_SWIFT_TicketObject->SetStatus($_POST['ticketstatusid']);
|
770 | $_SWIFT_TicketViewPropertyManagerObject->IncrementTicketStatus($_POST['ticketstatusid']);
|
771 | }
|
772 |
|
773 | if (isset($_POST['ticketpriorityid']) && !empty($_POST['ticketpriorityid']) && $_POST['ticketpriorityid'] != '-1') {
|
774 | $_SWIFT_TicketObject->SetPriority($_POST['ticketpriorityid']);
|
775 | $_SWIFT_TicketViewPropertyManagerObject->IncrementTicketPriority($_POST['ticketpriorityid']);
|
776 | }
|
777 |
|
778 | if (isset($_POST['bayescategoryid']) && !empty($_POST['bayescategoryid']) && $_POST['bayescategoryid'] != '-1') {
|
779 | $_SWIFT_TicketObject->TrainBayes($_POST['bayescategoryid']);
|
780 | $_SWIFT_TicketViewPropertyManagerObject->IncrementBayesian($_POST['bayescategoryid']);
|
781 | }
|
782 |
|
783 | if (isset($_POST['ticketlinktypeid']) && !empty($_POST['ticketlinktypeid']) && $_POST['ticketlinktypeid'] != '-1') {
|
784 | // Link the tickets
|
785 |
|
786 | $_linkTicketIDList[] = $_SWIFT_TicketObject->GetTicketID();
|
787 |
|
788 | $_SWIFT_TicketObject->MarkAsLinked();
|
789 | }
|
790 |
|
791 | // Set Flag
|
792 | if (isset($_POST['ticketflagid']) && $_POST['ticketflagid'] != '-1') {
|
793 | $_SWIFT_TicketObject->SetFlag($_POST['ticketflagid']);
|
794 |
|
795 | if ($_POST['ticketflagid'] != '0') {
|
796 | $_SWIFT_TicketViewPropertyManagerObject->IncrementTicketFlag($_POST['ticketflagid']);
|
797 | }
|
798 | }
|
799 |
|
800 | // Add Tags
|
801 | if ($_SWIFT->Staff->GetPermission('staff_canupdatetags') != '0')
|
802 | {
|
803 | SWIFT_Tag::AddTags(SWIFT_TagLink::TYPE_TICKET, $_SWIFT_TicketObject->GetTicketID(), SWIFT_UserInterface::GetMultipleInputValues('addtags'), $_SWIFT->Staff->GetStaffID());
|
804 | }
|
805 |
|
806 | $_SWIFT_TicketObject->ProcessUpdatePool();
|
807 |
|
808 | $_finalTicketIDList[] = $_SWIFT_TicketObject->GetTicketID();
|
809 | }
|
810 |
|
811 | // Process Links
|
812 | if (count($_linkTicketIDList)) {
|
813 | SWIFT_TicketLinkChain::CreateChain($_POST['ticketlinktypeid'], $_linkTicketIDList);
|
814 | }
|
815 |
|
816 | // Remove Tags
|
817 | if ($_SWIFT->Staff->GetPermission('staff_canupdatetags') != '0')
|
818 | {
|
819 | SWIFT_Tag::RemoveTags(SWIFT_TagLink::TYPE_TICKET, $_finalTicketIDList, SWIFT_UserInterface::GetMultipleInputValues('removetags'), $_SWIFT->Staff->GetStaffID());
|
820 | }
|
821 | }
|
822 | }
|
823 |
|
824 | SWIFT_TicketManager::RebuildCache();
|
825 |
|
826 | return true;
|
827 | }
|
828 |
|
829 | /**
|
830 | * Displays the Ticket Grid
|
831 | *
|
832 | * @author Varun Shoor
|
833 | * @return bool "true" on Success, "false" otherwise
|
834 | * @throws SWIFT_Exception If the Class is not Loaded
|
835 | */
|
836 | public function Index($_searchStoreID = 0, $_listType = false, $_departmentID = -1, $_ticketStatusID = -1, $_ticketTypeID = -1)
|
837 | {
|
838 | $_SWIFT = SWIFT::GetInstance();
|
839 |
|
840 | if (!$this->GetIsClassLoaded())
|
841 | {
|
842 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
843 |
|
844 | return false;
|
845 | }
|
846 |
|
847 | if (!is_numeric($_searchStoreID)) {
|
848 | $_searchStoreID = 0;
|
849 | } else {
|
850 | $_searchStoreID = intval($_searchStoreID);
|
851 | }
|
852 |
|
853 | if ($_listType !== false) {
|
854 | $this->Redirect($_listType, $_departmentID, $_ticketStatusID, $_ticketTypeID);
|
855 |
|
856 | return true;
|
857 | }
|
858 |
|
859 | $this->_Render(-1, -1, -1, false, $_searchStoreID);
|
860 |
|
861 | return true;
|
862 | }
|
863 |
|
864 | /**
|
865 | * Filter & Display Results
|
866 | *
|
867 | * @author Varun Shoor
|
868 | * @param int $_departmentID (OPTIONAL) The Department ID
|
869 | * @param int $_ticketStatusID (OPTIONAL) The Ticket Status ID
|
870 | * @param int $_ticketTypeID (OPTIONAL) The Ticket Type ID
|
871 | * @param int $_searchStoreID (OPTIONAL) The Search Store ID
|
872 | * @return bool "true" on Success, "false" otherwise
|
873 | * @throws SWIFT_Exception If the Class is not Loaded
|
874 | */
|
875 | public function Filter($_departmentID = -1, $_ticketStatusID = -1, $_ticketTypeID = -1, $_searchStoreID = 0) {
|
876 | if (!$this->GetIsClassLoaded()) {
|
877 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
878 |
|
879 | return false;
|
880 | }
|
881 |
|
882 | if (!is_numeric($_departmentID)) {
|
883 | $_departmentID = -1;
|
884 | } else {
|
885 | $_departmentID = intval($_departmentID);
|
886 | }
|
887 | SWIFT::Set('tickettreedepartmentid', $_departmentID);
|
888 |
|
889 | if (!is_numeric($_ticketStatusID)) {
|
890 | $_ticketStatusID = -1;
|
891 | } else {
|
892 | $_ticketStatusID = intval($_ticketStatusID);
|
893 | }
|
894 | SWIFT::Set('tickettreestatusid', $_ticketStatusID);
|
895 |
|
896 | if (!is_numeric($_ticketTypeID)) {
|
897 | $_ticketTypeID = -1;
|
898 | } else {
|
899 | $_ticketTypeID = intval($_ticketTypeID);
|
900 | }
|
901 | SWIFT::Set('tickettreetypeid', $_ticketTypeID);
|
902 |
|
903 | // $this->UserInterfaceGrid->SetURLArguments('/' . $_departmentID . '/' . $_ticketStatusID . '/' . $_ticketTypeID);
|
904 |
|
905 | if (!is_numeric($_searchStoreID)) {
|
906 | $_searchStoreID = 0;
|
907 | } else {
|
908 | $_searchStoreID = intval($_searchStoreID);
|
909 | }
|
910 | $this->_Render($_departmentID, $_ticketStatusID, $_ticketTypeID, false, $_searchStoreID);
|
911 |
|
912 | return true;
|
913 | }
|
914 |
|
915 | /**
|
916 | * Display Assigned to Current Staff Tickets
|
917 | *
|
918 | * @author Varun Shoor
|
919 | * @return bool "true" on Success, "false" otherwise
|
920 | * @throws SWIFT_Exception If the Class is not Loaded
|
921 | */
|
922 | public function MyTickets($_searchStoreID = 0) {
|
923 | if (!$this->GetIsClassLoaded()) {
|
924 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
925 |
|
926 | return false;
|
927 | }
|
928 |
|
929 | SWIFT::Set('tickettreelisttype', 'mytickets');
|
930 |
|
931 | if (!is_numeric($_searchStoreID)) {
|
932 | $_searchStoreID = 0;
|
933 | } else {
|
934 | $_searchStoreID = intval($_searchStoreID);
|
935 | }
|
936 | $this->_Render(-1, -1, -1, SWIFT_TicketViewRenderer::OWNER_MYTICKETS, $_searchStoreID);
|
937 |
|
938 | return true;
|
939 | }
|
940 |
|
941 | /**
|
942 | * Display Unassigned Tickets
|
943 | *
|
944 | * @author Varun Shoor
|
945 | * @return bool "true" on Success, "false" otherwise
|
946 | * @throws SWIFT_Exception If the Class is not Loaded
|
947 | */
|
948 | public function Unassigned($_searchStoreID = 0) {
|
949 | if (!$this->GetIsClassLoaded()) {
|
950 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
951 |
|
952 | return false;
|
953 | }
|
954 |
|
955 | SWIFT::Set('tickettreelisttype', 'unassigned');
|
956 |
|
957 | if (!is_numeric($_searchStoreID)) {
|
958 | $_searchStoreID = 0;
|
959 | } else {
|
960 | $_searchStoreID = intval($_searchStoreID);
|
961 | }
|
962 | $this->_Render(-1, -1, -1, SWIFT_TicketViewRenderer::OWNER_UNASSIGNED, $_searchStoreID);
|
963 |
|
964 | return true;
|
965 | }
|
966 |
|
967 | /**
|
968 | * Redirect call to appropriate function
|
969 | *
|
970 | * @author Varun Shoor
|
971 | * @param string $_listType (OPTIONAL) The List Type
|
972 | * @param int $_departmentID (OPTIONAL) The Department ID
|
973 | * @param int $_ticketStatusID (OPTIONAL) The Ticket Status ID
|
974 | * @param int $_ticketTypeID (OPTIONAL) The Ticket Type ID
|
975 | * @return bool "true" on Success, "false" otherwise
|
976 | * @throws SWIFT_Exception If the Class is not Loaded
|
977 | */
|
978 | public function Redirect($_listType = 'inbox', $_departmentID = -1, $_ticketStatusID = -1, $_ticketTypeID = -1) {
|
979 | if (!$this->GetIsClassLoaded()) {
|
980 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
981 |
|
982 | return false;
|
983 | }
|
984 |
|
985 | if ($_departmentID == -1)
|
986 | {
|
987 | $_ticketStatusID = -1;
|
988 | $_ticketTypeID = -1;
|
989 | }
|
990 |
|
991 | if ($_listType == 'mytickets') {
|
992 | $this->MyTickets();
|
993 | } else if ($_listType == 'unassigned') {
|
994 | $this->Unassigned();
|
995 | } else {
|
996 | $this->Filter($_departmentID, $_ticketStatusID, $_ticketTypeID);
|
997 | }
|
998 |
|
999 | return true;
|
1000 | }
|
1001 |
|
1002 | /**
|
1003 | * Switch the View
|
1004 | *
|
1005 | * @author Varun Shoor
|
1006 | * @param int $_ticketViewID The Ticket View ID
|
1007 | * @param int $_departmentID (OPTIONAL) The Department ID
|
1008 | * @param int $_ticketStatusID (OPTIONAL) The Ticket Status ID
|
1009 | * @param int $_ticketTypeID (OPTIONAL) The Ticket Type ID
|
1010 | * @return bool "true" on Success, "false" otherwise
|
1011 | * @throws SWIFT_Exception If the Class is not Loaded
|
1012 | */
|
1013 | public function View($_ticketViewID, $_departmentID = -1, $_ticketStatusID = -1, $_ticketTypeID = -1) {
|
1014 | $_SWIFT = SWIFT::GetInstance();
|
1015 |
|
1016 | if (!$this->GetIsClassLoaded())
|
1017 | {
|
1018 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
1019 |
|
1020 | return false;
|
1021 | }
|
1022 |
|
1023 | $_ticketViewCache = $_SWIFT->Cache->Get('ticketviewcache');
|
1024 | if (!isset($_ticketViewCache[$_ticketViewID])) {
|
1025 | throw new SWIFT_Exception(SWIFT_INVALIDDATA);
|
1026 | }
|
1027 |
|
1028 | $_SWIFT_TicketViewObject = new SWIFT_TicketView(new SWIFT_DataStore($_ticketViewCache[$_ticketViewID]));
|
1029 | if (!$_SWIFT_TicketViewObject instanceof SWIFT_TicketView || !$_SWIFT_TicketViewObject->GetIsClassLoaded() ||
|
1030 | !$_SWIFT_TicketViewObject->CanStaffView()) {
|
1031 | throw new SWIFT_Exception(SWIFT_INVALIDDATA);
|
1032 | }
|
1033 |
|
1034 | /**
|
1035 | * BUG FIX: Parminder Singh
|
1036 | *
|
1037 | * SWIFT-1198: Staff CP -> Manage Tickets -> Trash -> View: All Tickets - All Tickets = doesn't work
|
1038 | */
|
1039 | if (!is_numeric($_departmentID)) {
|
1040 | $_departmentID = -1;
|
1041 | } else {
|
1042 | $_departmentID = intval($_departmentID);
|
1043 | }
|
1044 |
|
1045 | SWIFT::Set('tickettreedepartmentid', $_departmentID);
|
1046 |
|
1047 | if (!is_numeric($_ticketStatusID)) {
|
1048 | $_ticketStatusID = -1;
|
1049 | } else {
|
1050 | $_ticketStatusID = intval($_ticketStatusID);
|
1051 | }
|
1052 |
|
1053 | SWIFT::Set('tickettreestatusid', $_ticketStatusID);
|
1054 |
|
1055 | SWIFT_TicketViewRenderer::ChangeView($_SWIFT_TicketViewObject);
|
1056 |
|
1057 | $this->_Render($_departmentID, $_ticketStatusID, $_ticketTypeID);
|
1058 |
|
1059 | return true;
|
1060 | }
|
1061 |
|
1062 | /**
|
1063 | * Load the search results
|
1064 | *
|
1065 | * @author Varun Shoor
|
1066 | * @param int $_searchStoreID The Search Store ID
|
1067 | * @return bool "true" on Success, "false" otherwise
|
1068 | * @throws SWIFT_Exception If the Class is not Loaded
|
1069 | */
|
1070 | public function Search($_searchStoreID)
|
1071 | {
|
1072 | if (!$this->GetIsClassLoaded())
|
1073 | {
|
1074 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
1075 |
|
1076 | return false;
|
1077 | }
|
1078 |
|
1079 | $_finalSearchStoreID = -1;
|
1080 | if (is_numeric($_searchStoreID))
|
1081 | {
|
1082 | $_finalSearchStoreID = intval($_searchStoreID);
|
1083 | }
|
1084 |
|
1085 | $this->_Render(-1, -1, -1, false, $_finalSearchStoreID);
|
1086 |
|
1087 | return true;
|
1088 | }
|
1089 |
|
1090 | /**
|
1091 | * Render the grid
|
1092 | *
|
1093 | * @author Varun Shoor
|
1094 | * @param int $_departmentID (OPTIONAL) The Department ID
|
1095 | * @param int $_ticketStatusID (OPTIONAL) The Ticket Status ID
|
1096 | * @param int $_ticketTypeID (OPTIONAL) The Ticket Type ID
|
1097 | * @param constant $_ownerFilter (OPTIONAL) The Owner Filter
|
1098 | * @param int $_searchStoreID (OPTIONAL) The Search Store ID
|
1099 | * @return bool "true" on Success, "false" otherwise
|
1100 | * @throws SWIFT_Exception If the Class is not Loaded
|
1101 | */
|
1102 | protected function _Render($_departmentID = -1, $_ticketStatusID = -1, $_ticketTypeID = -1, $_ownerFilter = false, $_searchStoreID = 0) {
|
1103 | $_SWIFT = SWIFT::GetInstance();
|
1104 |
|
1105 | if (!$this->GetIsClassLoaded())
|
1106 | {
|
1107 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
1108 |
|
1109 | return false;
|
1110 | }
|
1111 |
|
1112 | if ($_SWIFT->Staff->GetPermission('staff_tcanviewtickets') == '0')
|
1113 | {
|
1114 | $this->UserInterface->Header($this->Language->Get('tickets') . ' > ' . $this->Language->Get('manage'), self::MENU_ID,
|
1115 | self::NAVIGATION_ID);
|
1116 | $this->UserInterface->DisplayError($this->Language->Get('titlenoperm'), $this->Language->Get('msgnoperm'));
|
1117 | } else {
|
1118 | $this->View->RenderGrid($_departmentID, $_ticketStatusID, $_ticketTypeID, $_ownerFilter, $_searchStoreID);
|
1119 | }
|
1120 |
|
1121 | $this->UserInterface->Footer();
|
1122 |
|
1123 | return true;
|
1124 | }
|
1125 |
|
1126 | /**
|
1127 | * Loads the Display Data
|
1128 | *
|
1129 | * @author Varun Shoor
|
1130 | * @return bool "true" on Success, "false" otherwise
|
1131 | * @throws SWIFT_Exception If the Class is not Loaded
|
1132 | */
|
1133 | public function _LoadDisplayData()
|
1134 | {
|
1135 | if (!$this->GetIsClassLoaded())
|
1136 | {
|
1137 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
1138 |
|
1139 | return false;
|
1140 | }
|
1141 |
|
1142 | $_ticketListType = 'inbox';
|
1143 | $_ticketTreeDepartmentID = $_ticketTreeStatusID = $_ticketTreeTypeID = -1;
|
1144 |
|
1145 | if (SWIFT::Get('tickettreedepartmentid') !== false) {
|
1146 | $_ticketTreeDepartmentID = intval(SWIFT::Get('tickettreedepartmentid'));
|
1147 | }
|
1148 |
|
1149 | if (SWIFT::Get('tickettreestatusid')) {
|
1150 | $_ticketTreeStatusID = intval(SWIFT::Get('tickettreestatusid'));
|
1151 | }
|
1152 |
|
1153 | if (SWIFT::Get('tickettreetypeid')) {
|
1154 | $_ticketTreeTypeID = intval(SWIFT::Get('tickettreetypeid'));
|
1155 | }
|
1156 |
|
1157 | if (SWIFT::Get('tickettreelisttype')) {
|
1158 | $_ticketListType = SWIFT::Get('tickettreelisttype');
|
1159 | }
|
1160 |
|
1161 | $this->UserInterface->AddNavigationBox($this->Language->Get('quickfilter'), SWIFT_TicketViewRenderer::RenderTree($_ticketListType,
|
1162 | $_ticketTreeDepartmentID, $_ticketTreeStatusID, $_ticketTreeTypeID));
|
1163 | $this->Load->Library('Tag:TagCloud', array(SWIFT_TagLink::RetrieveCloudContainer(SWIFT_TagLink::TYPE_TICKET), false,
|
1164 | 'window.$gridirs.RunIRS(\'ticketmanagegrid\', \'tag:%s\');'));
|
1165 |
|
1166 | return true;
|
1167 | }
|
1168 |
|
1169 | /**
|
1170 | * Preview a Ticket Contents
|
1171 | *
|
1172 | * @author Varun Shoor
|
1173 | * @param int $_ticketID The Ticket ID
|
1174 | * @return bool "true" on Success, "false" otherwise
|
1175 | * @throws SWIFT_Exception If the Class is not Loaded
|
1176 | */
|
1177 | public function Preview($_ticketID)
|
1178 | {
|
1179 | $_SWIFT = SWIFT::GetInstance();
|
1180 |
|
1181 | if (!$this->GetIsClassLoaded())
|
1182 | {
|
1183 | throw new SWIFT_Exception(SWIFT_CLASSNOTLOADED);
|
1184 |
|
1185 | return false;
|
1186 | }
|
1187 |
|
1188 | $_SWIFT_TicketObject = SWIFT_Ticket::GetObjectOnID($_ticketID);
|
1189 | if (!$_SWIFT_TicketObject->CanAccess($_SWIFT->Staff)) {
|
1190 | throw new SWIFT_Exception('Access Denied to Ticket: ' . $_SWIFT_TicketObject->GetTicketDisplayID());
|
1191 | }
|
1192 |
|
1193 | echo $_SWIFT_TicketObject->GetLastPostContents();
|
1194 |
|
1195 | return true;
|
1196 | }
|
1197 | }
|
1198 | ?> |