Advertisement
Guest User

Untitled

a guest
May 13th, 2014
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 30.45 KB | None | 0 0
  1. <?php
  2. /*************************************************************************
  3.     tickets.php
  4.  
  5.     Handles all tickets related actions.
  6.  
  7.     Peter Rotich <peter@osticket.com>
  8.     Copyright (c)  2006-2013 osTicket
  9.     http://www.osticket.com
  10.  
  11.     Released under the GNU General Public License WITHOUT ANY WARRANTY.
  12.     See LICENSE.TXT for details.
  13.  
  14.     vim: expandtab sw=4 ts=4 sts=4:
  15. **********************************************************************/
  16.  
  17. require('staff.inc.php');
  18. require_once(INCLUDE_DIR.'class.ticket.php');
  19. require_once(INCLUDE_DIR.'class.dept.php');
  20. require_once(INCLUDE_DIR.'class.filter.php');
  21. require_once(INCLUDE_DIR.'class.canned.php');
  22. require_once(INCLUDE_DIR.'class.json.php');
  23. require_once(INCLUDE_DIR.'class.dynamic_forms.php');
  24.  
  25.  
  26. $page='';
  27. $ticket = $user = null; //clean start.
  28. //LOCKDOWN...See if the id provided is actually valid and if the user has access.
  29. if($_REQUEST['id']) {
  30.     if(!($ticket=Ticket::lookup($_REQUEST['id'])))
  31.          $errors['err']='Unknown or invalid ticket ID';
  32.     elseif(!$ticket->checkStaffAccess($thisstaff)) {
  33.         $errors['err']='Access denied. Contact admin if you believe this is in error';
  34.         $ticket=null; //Clear ticket obj.
  35.     }
  36. }
  37.  
  38. //Lookup user if id is available.
  39. if ($_REQUEST['uid'])
  40.     $user = User::lookup($_REQUEST['uid']);
  41.  
  42. //At this stage we know the access status. we can process the post.
  43. if($_POST && !$errors):
  44.  
  45.     if($ticket && $ticket->getId()) {
  46.         //More coffee please.
  47.         $errors=array();
  48.         $lock=$ticket->getLock(); //Ticket lock if any
  49.         $statusKeys=array('open'=>'Open','Reopen'=>'Open','Close'=>'Closed');
  50.         switch(strtolower($_POST['a'])):
  51.         case 'reply':
  52.             if(!$thisstaff->canPostReply())
  53.                 $errors['err'] = 'Action denied. Contact admin for access';
  54.             else {
  55.  
  56.                 if(!$_POST['response'])
  57.                     $errors['response']='Response required';
  58.                 //Use locks to avoid double replies
  59.                 if($lock && $lock->getStaffId()!=$thisstaff->getId())
  60.                     $errors['err']='Action Denied. Ticket is locked by someone else!';
  61.  
  62.                 //Make sure the email is not banned
  63.                 if(!$errors['err'] && TicketFilter::isBanned($ticket->getEmail()))
  64.                     $errors['err']='Email is in banlist. Must be removed to reply.';
  65.             }
  66.  
  67.             $wasOpen =($ticket->isOpen());
  68.  
  69.             //If no error...do the do.
  70.             $vars = $_POST;
  71.             if(!$errors && $_FILES['attachments'])
  72.                 $vars['files'] = AttachmentFile::format($_FILES['attachments']);
  73.  
  74.             if(!$errors && ($response=$ticket->postReply($vars, $errors, $_POST['emailreply']))) {
  75.                 $msg='Reply posted successfully';
  76.                 $ticket->reload();
  77.  
  78.                 if($ticket->isClosed() && $wasOpen)
  79.                     $ticket=null;
  80.                 else
  81.                     // Still open -- cleanup response draft for this user
  82.                     Draft::deleteForNamespace(
  83.                         'ticket.response.' . $ticket->getId(),
  84.                         $thisstaff->getId());
  85.  
  86.             } elseif(!$errors['err']) {
  87.                 $errors['err']='Unable to post the reply. Correct the errors below and try again!';
  88.             }
  89.             break;
  90.         case 'transfer': /** Transfer ticket **/
  91.             //Check permission
  92.             if(!$thisstaff->canTransferTickets())
  93.                 $errors['err']=$errors['transfer'] = 'Action Denied. You are not allowed to transfer tickets.';
  94.             else {
  95.  
  96.                 //Check target dept.
  97.                 if(!$_POST['deptId'])
  98.                     $errors['deptId'] = 'Select department';
  99.                 elseif($_POST['deptId']==$ticket->getDeptId())
  100.                     $errors['deptId'] = 'Ticket already in the department';
  101.                 elseif(!($dept=Dept::lookup($_POST['deptId'])))
  102.                     $errors['deptId'] = 'Unknown or invalid department';
  103.  
  104.                 //Transfer message - required.
  105.                 if(!$_POST['transfer_comments'])
  106.                     $errors['transfer_comments'] = 'Transfer comments required';
  107.                 elseif(strlen($_POST['transfer_comments'])<5)
  108.                     $errors['transfer_comments'] = 'Transfer comments too short!';
  109.  
  110.                 //If no errors - them attempt the transfer.
  111.                 if(!$errors && $ticket->transfer($_POST['deptId'], $_POST['transfer_comments'])) {
  112.                     $msg = 'Ticket transferred successfully to '.$ticket->getDeptName();
  113.                     //Check to make sure the staff still has access to the ticket
  114.                     if(!$ticket->checkStaffAccess($thisstaff))
  115.                         $ticket=null;
  116.  
  117.                 } elseif(!$errors['transfer']) {
  118.                     $errors['err'] = 'Unable to complete the ticket transfer';
  119.                     $errors['transfer']='Correct the error(s) below and try again!';
  120.                 }
  121.             }
  122.             break;
  123.         case 'assign':
  124.  
  125.              if(!$thisstaff->canAssignTickets())
  126.                  $errors['err']=$errors['assign'] = 'Action Denied. You are not allowed to assign/reassign tickets.';
  127.              else {
  128.  
  129.                  $id = preg_replace("/[^0-9]/", "",$_POST['assignId']);
  130.                  $claim = (is_numeric($_POST['assignId']) && $_POST['assignId']==$thisstaff->getId());
  131.  
  132.                  if(!$_POST['assignId'] || !$id)
  133.                      $errors['assignId'] = 'Select assignee';
  134.                  elseif($_POST['assignId'][0]!='s' && $_POST['assignId'][0]!='t' && !$claim)
  135.                      $errors['assignId']='Invalid assignee ID - get technical support';
  136.                  elseif($ticket->isAssigned()) {
  137.                      if($_POST['assignId'][0]=='s' && $id==$ticket->getStaffId())
  138.                          $errors['assignId']='Ticket already assigned to the staff.';
  139.                      elseif($_POST['assignId'][0]=='t' && $id==$ticket->getTeamId())
  140.                          $errors['assignId']='Ticket already assigned to the team.';
  141.                  }
  142.  
  143.                  //Comments are not required on self-assignment (claim)
  144.                  if($claim && !$_POST['assign_comments'])
  145.                      $_POST['assign_comments'] = 'Ticket claimed by '.$thisstaff->getName();
  146.                  elseif(!$_POST['assign_comments'])
  147.                      $errors['assign_comments'] = 'Assignment comments required';
  148.                  elseif(strlen($_POST['assign_comments'])<5)
  149.                          $errors['assign_comments'] = 'Comment too short';
  150.  
  151.                  if(!$errors && $ticket->assign($_POST['assignId'], $_POST['assign_comments'], !$claim)) {
  152.                      if($claim) {
  153.                          $msg = 'Ticket is NOW assigned to you!';
  154.                      } else {
  155.                          $msg='Ticket assigned successfully to '.$ticket->getAssigned();
  156.                          TicketLock::removeStaffLocks($thisstaff->getId(), $ticket->getId());
  157.                          $ticket=null;
  158.                      }
  159.                  } elseif(!$errors['assign']) {
  160.                      $errors['err'] = 'Unable to complete the ticket assignment';
  161.                      $errors['assign'] = 'Correct the error(s) below and try again!';
  162.                  }
  163.              }
  164.             break;
  165.         case 'postnote': /* Post Internal Note */
  166.             //Make sure the staff can set desired state
  167.             if($_POST['state']) {
  168.                 if($_POST['state']=='closed' && !$thisstaff->canCloseTickets())
  169.                     $errors['state'] = "You don't have permission to close tickets";
  170.                 elseif(in_array($_POST['state'], array('overdue', 'notdue', 'unassigned'))
  171.                         && (!($dept=$ticket->getDept()) || !$dept->isManager($thisstaff)))
  172.                     $errors['state'] = "You don't have permission to set the state";
  173.             }
  174.  
  175.             $vars = $_POST;
  176.             if($_FILES['attachments'])
  177.                 $vars['files'] = AttachmentFile::format($_FILES['attachments']);
  178.  
  179.             $wasOpen = ($ticket->isOpen());
  180.             if(($note=$ticket->postNote($vars, $errors, $thisstaff))) {
  181.  
  182.                 $msg='Internal note posted successfully';
  183.                 if($wasOpen && $ticket->isClosed())
  184.                     $ticket = null; //Going back to main listing.
  185.                 else
  186.                     // Ticket is still open -- clear draft for the note
  187.                     Draft::deleteForNamespace('ticket.note.'.$ticket->getId(),
  188.                         $thisstaff->getId());
  189.  
  190.             } else {
  191.  
  192.                 if(!$errors['err'])
  193.                     $errors['err'] = 'Unable to post internal note - missing or invalid data.';
  194.  
  195.                 $errors['postnote'] = 'Unable to post the note. Correct the error(s) below and try again!';
  196.             }
  197.             break;
  198.         case 'edit':
  199.         case 'update':
  200.             $forms=DynamicFormEntry::forTicket($ticket->getId());
  201.             foreach ($forms as $form)
  202.                 if (!$form->isValid())
  203.                     $errors = array_merge($errors, $form->errors());
  204.             if(!$ticket || !$thisstaff->canEditTickets())
  205.                 $errors['err']='Permission Denied. You are not allowed to edit tickets';
  206.             elseif($ticket->update($_POST,$errors)) {
  207.                 $msg='Ticket updated successfully';
  208.                 $_REQUEST['a'] = null; //Clear edit action - going back to view.
  209.                 //Check to make sure the staff STILL has access post-update (e.g dept change).
  210.                 foreach ($forms as $f) $f->save();
  211.                 if(!$ticket->checkStaffAccess($thisstaff))
  212.                     $ticket=null;
  213.             } elseif(!$errors['err']) {
  214.                 $errors['err']='Unable to update the ticket. Correct the errors below and try again!';
  215.             }
  216.             break;
  217.         case 'process':
  218.             switch(strtolower($_POST['do'])):
  219.                 case 'close':
  220.                     if(!$thisstaff->canCloseTickets()) {
  221.                         $errors['err'] = 'Permission Denied. You are not allowed to close tickets.';
  222.                     } elseif($ticket->isClosed()) {
  223.                         $errors['err'] = 'Ticket is already closed!';
  224.                     } elseif($ticket->close()) {
  225.                         $msg='Ticket #'.$ticket->getNumber().' status set to CLOSED';
  226.                         //Log internal note
  227.                         if($_POST['ticket_status_notes'])
  228.                             $note = $_POST['ticket_status_notes'];
  229.                         else
  230.                             $note='Ticket closed (without comments)';
  231.  
  232.                         $ticket->logNote('Ticket Closed', $note, $thisstaff);
  233.  
  234.                         //Going back to main listing.
  235.                         TicketLock::removeStaffLocks($thisstaff->getId(), $ticket->getId());
  236.                         $page=$ticket=null;
  237.  
  238.                     } else {
  239.                         $errors['err']='Problems closing the ticket. Try again';
  240.                     }
  241.                     break;
  242.                 case 'reopen':
  243.                     //if staff can close or create tickets ...then assume they can reopen.
  244.                     if(!$thisstaff->canCloseTickets() && !$thisstaff->canCreateTickets()) {
  245.                         $errors['err']='Permission Denied. You are not allowed to reopen tickets.';
  246.                     } elseif($ticket->isOpen()) {
  247.                         $errors['err'] = 'Ticket is already open!';
  248.                     } elseif($ticket->reopen()) {
  249.                         $msg='Ticket REOPENED';
  250.  
  251.                         if($_POST['ticket_status_notes'])
  252.                             $note = $_POST['ticket_status_notes'];
  253.                         else
  254.                             $note='Ticket reopened (without comments)';
  255.  
  256.                         $ticket->logNote('Ticket Reopened', $note, $thisstaff);
  257.  
  258.                     } else {
  259.                         $errors['err']='Problems reopening the ticket. Try again';
  260.                     }
  261.                     break;
  262.                 case 'release':
  263.                     if(!$ticket->isAssigned() || !($assigned=$ticket->getAssigned())) {
  264.                         $errors['err'] = 'Ticket is not assigned!';
  265.                     } elseif($ticket->release()) {
  266.                         $msg='Ticket released (unassigned) from '.$assigned;
  267.                         $ticket->logActivity('Ticket unassigned',$msg.' by '.$thisstaff->getName());
  268.                     } else {
  269.                         $errors['err'] = 'Problems releasing the ticket. Try again';
  270.                     }
  271.                     break;
  272.                 case 'claim':
  273.                     if(!$thisstaff->canAssignTickets()) {
  274.                         $errors['err'] = 'Permission Denied. You are not allowed to assign/claim tickets.';
  275.                     } elseif(!$ticket->isOpen()) {
  276.                         $errors['err'] = 'Only open tickets can be assigned';
  277.                     } elseif($ticket->isAssigned()) {
  278.                         $errors['err'] = 'Ticket is already assigned to '.$ticket->getAssigned();
  279.                     } elseif($ticket->assignToStaff($thisstaff->getId(), ('Ticket claimed by '.$thisstaff->getName()), false)) {
  280.                         $msg = 'Ticket is now assigned to you!';
  281.                     } else {
  282.                         $errors['err'] = 'Problems assigning the ticket. Try again';
  283.                     }
  284.                     break;
  285.                 case 'overdue':
  286.                     $dept = $ticket->getDept();
  287.                     if(!$dept || !$dept->isManager($thisstaff)) {
  288.                         $errors['err']='Permission Denied. You are not allowed to flag tickets overdue';
  289.                     } elseif($ticket->markOverdue()) {
  290.                         $msg='Ticket flagged as overdue';
  291.                         $ticket->logActivity('Ticket Marked Overdue',($msg.' by '.$thisstaff->getName()));
  292.                     } else {
  293.                         $errors['err']='Problems marking the the ticket overdue. Try again';
  294.                     }
  295.                     break;
  296.                 case 'answered':
  297.                     $dept = $ticket->getDept();
  298.                     if(!$dept || !$dept->isManager($thisstaff)) {
  299.                         $errors['err']='Permission Denied. You are not allowed to flag tickets';
  300.                     } elseif($ticket->markAnswered()) {
  301.                         $msg='Ticket flagged as answered';
  302.                         $ticket->logActivity('Ticket Marked Answered',($msg.' by '.$thisstaff->getName()));
  303.                     } else {
  304.                         $errors['err']='Problems marking the the ticket answered. Try again';
  305.                     }
  306.                     break;
  307.                 case 'unanswered':
  308.                     $dept = $ticket->getDept();
  309.                     if(!$dept || !$dept->isManager($thisstaff)) {
  310.                         $errors['err']='Permission Denied. You are not allowed to flag tickets';
  311.                     } elseif($ticket->markUnAnswered()) {
  312.                         $msg='Ticket flagged as unanswered';
  313.                         $ticket->logActivity('Ticket Marked Unanswered',($msg.' by '.$thisstaff->getName()));
  314.                     } else {
  315.                         $errors['err']='Problems marking the the ticket unanswered. Try again';
  316.                     }
  317.                     break;
  318.                 case 'banemail':
  319.                     if(!$thisstaff->canBanEmails()) {
  320.                         $errors['err']='Permission Denied. You are not allowed to ban emails';
  321.                     } elseif(BanList::includes($ticket->getEmail())) {
  322.                         $errors['err']='Email already in banlist';
  323.                     } elseif(Banlist::add($ticket->getEmail(),$thisstaff->getName())) {
  324.                         $msg='Email ('.$ticket->getEmail().') added to banlist';
  325.                     } else {
  326.                         $errors['err']='Unable to add the email to banlist';
  327.                     }
  328.                     break;
  329.                 case 'unbanemail':
  330.                     if(!$thisstaff->canBanEmails()) {
  331.                         $errors['err'] = 'Permission Denied. You are not allowed to remove emails from banlist.';
  332.                     } elseif(Banlist::remove($ticket->getEmail())) {
  333.                         $msg = 'Email removed from banlist';
  334.                     } elseif(!BanList::includes($ticket->getEmail())) {
  335.                         $warn = 'Email is not in the banlist';
  336.                     } else {
  337.                         $errors['err']='Unable to remove the email from banlist. Try again.';
  338.                     }
  339.                     break;
  340.                 case 'changeuser':
  341.                     if (!$thisstaff->canEditTickets()) {
  342.                         $errors['err'] = 'Permission Denied. You are not allowed to EDIT tickets!!';
  343.                     } elseif (!$_POST['user_id'] || !($user=User::lookup($_POST['user_id']))) {
  344.                         $errors['err'] = 'Unknown user selected!';
  345.                     } elseif ($ticket->changeOwner($user)) {
  346.                         $msg = 'Ticket ownership changed to '.$user->getName();
  347.                     } else {
  348.                         $errors['err'] = 'Unable to change tiket ownership. Try again';
  349.                     }
  350.                     break;
  351.                 case 'delete': // Dude what are you trying to hide? bad customer support??
  352.                     if(!$thisstaff->canDeleteTickets()) {
  353.                         $errors['err']='Permission Denied. You are not allowed to DELETE tickets!!';
  354.                     } elseif($ticket->delete()) {
  355.                         $msg='Ticket #'.$ticket->getNumber().' deleted successfully';
  356.                         //Log a debug note
  357.                         $ost->logDebug('Ticket #'.$ticket->getNumber().' deleted',
  358.                                 sprintf('Ticket #%s deleted by %s',
  359.                                     $ticket->getNumber(), $thisstaff->getName())
  360.                                 );
  361.                         $ticket=null; //clear the object.
  362.                     } else {
  363.                         $errors['err']='Problems deleting the ticket. Try again';
  364.                     }
  365.                     break;
  366.                 default:
  367.                     $errors['err']='You must select action to perform';
  368.             endswitch;
  369.             break;
  370.         default:
  371.             $errors['err']='Unknown action';
  372.         endswitch;
  373.         if($ticket && is_object($ticket))
  374.             $ticket->reload();//Reload ticket info following post processing
  375.     }elseif($_POST['a']) {
  376.  
  377.         switch($_POST['a']) {
  378.             case 'mass_process':
  379.                 if(!$thisstaff->canManageTickets())
  380.                     $errors['err']='You do not have permission to mass manage tickets. Contact admin for such access';
  381.                 elseif(!$_POST['tids'] || !is_array($_POST['tids']))
  382.                     $errors['err']='No tickets selected. You must select at least one ticket.';
  383.                 else {
  384.                     $count=count($_POST['tids']);
  385.                     $i = 0;
  386.                     switch(strtolower($_POST['do'])) {
  387.                         case 'reopen':
  388.                             if($thisstaff->canCloseTickets() || $thisstaff->canCreateTickets()) {
  389.                                 $note='Ticket reopened by '.$thisstaff->getName();
  390.                                 foreach($_POST['tids'] as $k=>$v) {
  391.                                     if(($t=Ticket::lookup($v)) && $t->isClosed() && @$t->reopen()) {
  392.                                         $i++;
  393.                                         $t->logNote('Ticket Reopened', $note, $thisstaff);
  394.                                     }
  395.                                 }
  396.  
  397.                                 if($i==$count)
  398.                                     $msg = "Selected tickets ($i) reopened successfully";
  399.                                 elseif($i)
  400.                                     $warn = "$i of $count selected tickets reopened";
  401.                                 else
  402.                                     $errors['err'] = 'Unable to reopen selected tickets';
  403.                             } else {
  404.                                 $errors['err'] = 'You do not have permission to reopen tickets';
  405.                             }
  406.                             break;
  407.                         case 'close':
  408.                             if($thisstaff->canCloseTickets()) {
  409.                                 $note='Ticket closed without response by '.$thisstaff->getName();
  410.                                 foreach($_POST['tids'] as $k=>$v) {
  411.                                     if(($t=Ticket::lookup($v)) && $t->isOpen() && @$t->close()) {
  412.                                         $i++;
  413.                                         $t->logNote('Ticket Closed', $note, $thisstaff);
  414.                                     }
  415.                                 }
  416.  
  417.                                 if($i==$count)
  418.                                     $msg ="Selected tickets ($i) closed succesfully";
  419.                                 elseif($i)
  420.                                     $warn = "$i of $count selected tickets closed";
  421.                                 else
  422.                                     $errors['err'] = 'Unable to close selected tickets';
  423.                             } else {
  424.                                 $errors['err'] = 'You do not have permission to close tickets';
  425.                             }
  426.                             break;
  427.                         case 'mark_overdue':
  428.                             $note='Ticket flagged as overdue by '.$thisstaff->getName();
  429.                             foreach($_POST['tids'] as $k=>$v) {
  430.                                 if(($t=Ticket::lookup($v)) && !$t->isOverdue() && $t->markOverdue()) {
  431.                                     $i++;
  432.                                     $t->logNote('Ticket Marked Overdue', $note, $thisstaff);
  433.                                 }
  434.                             }
  435.  
  436.                             if($i==$count)
  437.                                 $msg = "Selected tickets ($i) marked overdue";
  438.                             elseif($i)
  439.                                 $warn = "$i of $count selected tickets marked overdue";
  440.                             else
  441.                                 $errors['err'] = 'Unable to flag selected tickets as overdue';
  442.                             break;
  443.                         case 'delete':
  444.                             if($thisstaff->canDeleteTickets()) {
  445.                                 foreach($_POST['tids'] as $k=>$v) {
  446.                                     if(($t=Ticket::lookup($v)) && @$t->delete()) $i++;
  447.                                 }
  448.  
  449.                                 //Log a warning
  450.                                 if($i) {
  451.                                     $log = sprintf('%s (%s) just deleted %d ticket(s)',
  452.                                             $thisstaff->getName(), $thisstaff->getUserName(), $i);
  453.                                     $ost->logWarning('Tickets deleted', $log, false);
  454.  
  455.                                 }
  456.  
  457.                                 if($i==$count)
  458.                                     $msg = "Selected tickets ($i) deleted successfully";
  459.                                 elseif($i)
  460.                                     $warn = "$i of $count selected tickets deleted";
  461.                                 else
  462.                                     $errors['err'] = 'Unable to delete selected tickets';
  463.                             } else {
  464.                                 $errors['err'] = 'You do not have permission to delete tickets';
  465.                             }
  466.                             break;
  467.                         default:
  468.                             $errors['err']='Unknown or unsupported action - get technical help';
  469.                     }
  470.                 }
  471.                 break;
  472.             case 'open':
  473.                 $ticket=null;
  474.                 if ($topic=Topic::lookup($_POST['topicId'])) {
  475.                     if ($form = DynamicForm::lookup($topic->ht['form_id'])) {
  476.                         $form = $form->instanciate();
  477.                         if (!$form->getForm()->isValid())
  478.                             $errors = array_merge($errors, $form->getForm()->errors());
  479.                     }
  480.                 }
  481.                 if(!$thisstaff || !$thisstaff->canCreateTickets()) {
  482.                      $errors['err']='You do not have permission to create tickets. Contact admin for such access';
  483.                 } else {
  484.                     $vars = $_POST;
  485.                     $vars['uid'] = $user? $user->getId() : 0;
  486.  
  487.                     if(($ticket=Ticket::open($vars, $errors))) {
  488.                         $msg='Ticket created successfully';
  489.                         $_REQUEST['a']=null;
  490.                         # Save extra dynamic form(s)
  491.                        if (isset($form)) {
  492.                             $form->setTicketId($ticket->getId());
  493.                             $form->save();
  494.                         }
  495.                         if (!$ticket->checkStaffAccess($thisstaff) || $ticket->isClosed())
  496.                             $ticket=null;
  497.                         Draft::deleteForNamespace('ticket.staff%', $thisstaff->getId());
  498.                     } elseif(!$errors['err']) {
  499.                         $errors['err']='Unable to create the ticket. Correct the error(s) and try again';
  500.                     }
  501.                 }
  502.                 break;
  503.         }
  504.     }
  505.     if(!$errors)
  506.         $thisstaff ->resetStats(); //We'll need to reflect any changes just made!
  507. endif;
  508.  
  509. /*... Quick stats ...*/
  510. $stats= $thisstaff->getTicketsStats();
  511.  
  512. //Navigation
  513. $nav->setTabActive('tickets');
  514. if($thisstaff->canCreateTickets()) {
  515.     $nav->addSubMenu(array('desc'=>'New Ticket',
  516.                            'title' => 'Open New Ticket',
  517.                            'href'=>'tickets.php?a=open',
  518.                            'iconclass'=>'newTicket',
  519.                            'id' => 'new-ticket'),
  520.                         ($_REQUEST['a']=='open'));
  521. }
  522. if($cfg->showAnsweredTickets()) {
  523.     $nav->addSubMenu(array('desc'=>'Open ('.number_format($stats['open']+$stats['answered']).')',
  524.                             'title'=>'Open Tickets',
  525.                             'href'=>'tickets.php',
  526.                             'iconclass'=>'Ticket'),
  527.                         (!$_REQUEST['status'] || $_REQUEST['status']=='open'));
  528. } else {
  529.  
  530.     if($stats) {
  531.         $nav->addSubMenu(array('desc'=>'Open ('.number_format($stats['open']).')',
  532.                                'title'=>'Open Tickets',
  533.                                'href'=>'tickets.php',
  534.                                'iconclass'=>'Ticket'),
  535.                             (!$_REQUEST['status'] || $_REQUEST['status']=='open'));
  536.     }
  537.  
  538.     if($stats['answered']) {
  539.         $nav->addSubMenu(array('desc'=>'Answered ('.number_format($stats['answered']).')',
  540.                                'title'=>'Answered Tickets',
  541.                                'href'=>'tickets.php?status=answered',
  542.                                'iconclass'=>'answeredTickets'),
  543.                             ($_REQUEST['status']=='answered'));
  544.     }
  545. }
  546.  
  547. if($stats['assigned']) {
  548.  
  549.     $nav->addSubMenu(array('desc'=>'My Tickets ('.number_format($stats['assigned']).')',
  550.                            'title'=>'Assigned Tickets',
  551.                            'href'=>'tickets.php?status=assigned',
  552.                            'iconclass'=>'assignedTickets'),
  553.                         ($_REQUEST['status']=='assigned'));
  554. }
  555.  
  556. if($stats['overdue']) {
  557.     $nav->addSubMenu(array('desc'=>'Overdue ('.number_format($stats['overdue']).')',
  558.                            'title'=>'Stale Tickets',
  559.                            'href'=>'tickets.php?status=overdue',
  560.                            'iconclass'=>'overdueTickets'),
  561.                         ($_REQUEST['status']=='overdue'));
  562.  
  563.     if(!$sysnotice && $stats['overdue']>10)
  564.         $sysnotice=$stats['overdue'] .' overdue tickets!';
  565. }
  566.  
  567. if($thisstaff->showAssignedOnly() && $stats['closed']) {
  568.     $nav->addSubMenu(array('desc'=>'My Closed Tickets ('.number_format($stats['closed']).')',
  569.                            'title'=>'My Closed Tickets',
  570.                            'href'=>'tickets.php?status=closed',
  571.                            'iconclass'=>'closedTickets'),
  572.                         ($_REQUEST['status']=='closed'));
  573. } else {
  574.  
  575.     $nav->addSubMenu(array('desc'=>'Closed Tickets ('.number_format($stats['closed']).')',
  576.                            'title'=>'Closed Tickets',
  577.                            'href'=>'tickets.php?status=closed',
  578.                            'iconclass'=>'closedTickets'),
  579.                         ($_REQUEST['status']=='closed'));
  580. }
  581.  
  582.  
  583. $inc = 'tickets.inc.php';
  584. if($ticket) {
  585.     $ost->setPageTitle('Ticket #'.$ticket->getNumber());
  586.     $nav->setActiveSubMenu(-1);
  587.     $inc = 'ticket-view.inc.php';
  588.     if($_REQUEST['a']=='edit' && $thisstaff->canEditTickets()) {
  589.         $inc = 'ticket-edit.inc.php';
  590.         if (!$forms) $forms=DynamicFormEntry::forTicket($ticket->getId());
  591.         // Auto add new fields to the entries
  592.         foreach ($forms as $f) $f->addMissingFields();
  593.     } elseif($_REQUEST['a'] == 'print' && !$ticket->pdfExport($_REQUEST['psize'], $_REQUEST['notes']))
  594.         $errors['err'] = 'Internal error: Unable to export the ticket to PDF for print.';
  595. } else {
  596.     $inc = 'tickets.inc.php';
  597.     if($_REQUEST['a']=='open' && $thisstaff->canCreateTickets())
  598.         $inc = 'ticket-open.inc.php';
  599.     elseif($_REQUEST['a'] == 'export') {
  600.         require_once(INCLUDE_DIR.'class.export.php');
  601.         $ts = strftime('%Y%m%d');
  602.         if (!($token=$_REQUEST['h']))
  603.             $errors['err'] = 'Query token required';
  604.         elseif (!($query=$_SESSION['search_'.$token]))
  605.             $errors['err'] = 'Query token not found';
  606.         elseif (!Export::saveTickets($query, "tickets-$ts.csv", 'csv'))
  607.             $errors['err'] = 'Internal error: Unable to dump query results';
  608.     }
  609.  
  610.     //Clear active submenu on search with no status
  611.     if($_REQUEST['a']=='search' && !$_REQUEST['status'])
  612.         $nav->setActiveSubMenu(-1);
  613.  
  614.     //set refresh rate if the user has it configured
  615.     if(!$_POST && !$_REQUEST['a'] && ($min=$thisstaff->getRefreshRate()))
  616.         $ost->addExtraHeader('<meta http-equiv="refresh" content="'.($min*60).'" />');
  617. }
  618.  
  619. require_once(STAFFINC_DIR.'header.inc.php');
  620. require_once(STAFFINC_DIR.$inc);
  621. require_once(STAFFINC_DIR.'footer.inc.php');
  622. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement