class.Controller_Manage.php

INTRACTO - Support, 01/23/2013 07:13 am

Download (37.6 kB)

 
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
?>