From 03a23c29ff556cf722ebc5df9018022a72a70779 Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@osticket.com> Date: Wed, 10 Oct 2012 23:30:30 -0400 Subject: [PATCH] Add expres actions support --- scp/tickets.php | 200 +++++++++++++++++++++++++++--------------------- 1 file changed, 111 insertions(+), 89 deletions(-) diff --git a/scp/tickets.php b/scp/tickets.php index 9cc247cc6..cf8619d50 100644 --- a/scp/tickets.php +++ b/scp/tickets.php @@ -167,122 +167,144 @@ if($_POST && !$errors): } break; case 'process': - $isdeptmanager=($ticket->getDeptId()==$thisstaff->getDeptId())?true:false; switch(strtolower($_POST['do'])): - case 'change_priority': - if(!$thisstaff->canManageTickets() && !$thisstaff->isManager()){ - $errors['err']='Perm. Denied. You are not allowed to change ticket\'s priority'; - }elseif(!$_POST['ticket_priority'] or !is_numeric($_POST['ticket_priority'])){ - $errors['err']='You must select priority'; - } - if(!$errors){ - if($ticket->setPriority($_POST['ticket_priority'])){ - $msg='Priority Changed Successfully'; - $ticket->reload(); - $note='Ticket priority set to "'.$ticket->getPriority().'" by '.$thisstaff->getName(); - $ticket->logActivity('Priority Changed',$note); - }else{ - $errors['err']='Problems changing priority. Try again'; - } - } - break; case 'close': - if(!$thisstaff->isAdmin() && !$thisstaff->canCloseTickets()){ - $errors['err']='Perm. Denied. You are not allowed to close tickets.'; - }else{ - if($ticket->close()){ - $msg='Ticket #'.$ticket->getExtId().' status set to CLOSED'; - $note='Ticket closed without response by '.$thisstaff->getName(); - $ticket->logActivity('Ticket Closed',$note); - $page=$ticket=null; //Going back to main listing. - }else{ - $errors['err']='Problems closing the ticket. Try again'; - } + if(!$thisstaff->canCloseTickets()) { + $errors['err'] = 'Perm. Denied. You are not allowed to close tickets.'; + } elseif($ticket->isClosed()) { + $errors['err'] = 'Ticket is already closed!'; + } elseif($ticket->close()) { + $msg='Ticket #'.$ticket->getExtId().' status set to CLOSED'; + //Log internal note + if($_POST['ticket_status_notes']) + $note = $_POST['ticket_status_notes']; + else + $note='Ticket closed (without comments)'; + + $ticket->postNote('Ticket Closed', $note, $thisstaff); + //ban email? + + if(isset($_POST['banemail'])) + Banlist::add($ticket->getEmail(), $thisstaff->getName()); + + //Going back to main listing. + TicketLock::removeStaffLocks($thisstaff->getId(), $ticket->getId()); + $page=$ticket=null; + + } else { + $errors['err']='Problems closing the ticket. Try again'; } break; case 'reopen': - //if they can close...then assume they can reopen. - if(!$thisstaff->isAdmin() && !$thisstaff->canCloseTickets()){ + //if staff can close or create tickets ...then assume they can reopen. + if(!$thisstaff->canCloseTickets() && !$thisstaff->canCreateTickets()) { $errors['err']='Perm. Denied. You are not allowed to reopen tickets.'; - }else{ - if($ticket->reopen()){ - $msg='Ticket status set to OPEN'; + } elseif($ticket->isOpen()) { + $errors['err'] = 'Ticket is already open!'; + } elseif($ticket->reopen()) { + $msg='Ticket REOPENED'; + + if($_POST['ticket_status_notes']) + $note = $_POST['ticket_status_notes']; + else $note='Ticket reopened (without comments)'; - if($_POST['ticket_priority']) { - $ticket->setPriority($_POST['ticket_priority']); - $ticket->reload(); - $note.=' and status set to '.$ticket->getPriority(); - } - $note.=' by '.$thisstaff->getName(); - $ticket->logActivity('Ticket Reopened',$note); - }else{ - $errors['err']='Problems reopening the ticket. Try again'; - } + + $ticket->postNote('Ticket Reopened', $note, $thisstaff); + } else { + $errors['err']='Problems reopening the ticket. Try again'; } break; case 'release': - if(!($staff=$ticket->getStaff())) - $errors['err']='Ticket is not assigned!'; - elseif($ticket->release()) { - $msg='Ticket released (unassigned) from '.$staff->getName().' by '.$thisstaff->getName();; - $ticket->logActivity('Ticket unassigned',$msg); - }else - $errors['err']='Problems releasing the ticket. Try again'; + if(!$ticket->isAssigned() || !($assigned=$ticket->getAssigned())) { + $errors['err'] = 'Ticket is not assigned!'; + } elseif($ticket->release()) { + $msg='Ticket released (unassigned) from '.$assigned; + $ticket->logActivity('Ticket unassigned',$msg.' by '.$thisstaff->getName()); + } else { + $errors['err'] = 'Problems releasing the ticket. Try again'; + } + break; + case 'claim': + if(!$thisstaff->canAssignTickets()) { + $errors['err'] = 'Perm. Denied. You are not allowed to assign/claim tickets.'; + } elseif(!$ticket->isOpen()) { + $errors['err'] = 'Only open tickets can be assigned'; + } elseif($ticket->isAssigned()) { + $errors['err'] = 'Ticket is already assigned to '.$ticket->getAssigned(); + } elseif($ticket->assignToStaff($thisstaff->getId(), ('Ticket claimed by '.$thisstaff->getName()), false)) { + $msg = 'Ticket is now assigned to you!'; + } else { + $errors['err'] = 'Problems assigning the ticket. Try again'; + } break; case 'overdue': - //Mark the ticket as overdue - if(!$thisstaff->isAdmin() && !$thisstaff->isManager()){ + $dept = $ticket->getDept(); + if(!$dept || !$dept->isManager($thisstaff)) { $errors['err']='Perm. Denied. You are not allowed to flag tickets overdue'; - }else{ - if($ticket->markOverdue()){ - $msg='Ticket flagged as overdue'; - $note=$msg; - if($_POST['ticket_priority']) { - $ticket->setPriority($_POST['ticket_priority']); - $ticket->reload(); - $note.=' and status set to '.$ticket->getPriority(); - } - $note.=' by '.$thisstaff->getName(); - $ticket->logActivity('Ticket Marked Overdue',$note); - }else{ - $errors['err']='Problems marking the the ticket overdue. Try again'; - } + } elseif($ticket->markOverdue()) { + $msg='Ticket flagged as overdue'; + $ticket->logActivity('Ticket Marked Overdue',($msg.' by '.$thisstaff->getName())); + } else { + $errors['err']='Problems marking the the ticket overdue. Try again'; + } + break; + case 'answered': + $dept = $ticket->getDept(); + if(!$dept || !$dept->isManager($thisstaff)) { + $errors['err']='Perm. Denied. You are not allowed to flag tickets'; + } elseif($ticket->markAnswered()) { + $msg='Ticket flagged as answered'; + $ticket->logActivity('Ticket Marked Answered',($msg.' by '.$thisstaff->getName())); + } else { + $errors['err']='Problems marking the the ticket answered. Try again'; + } + break; + case 'unanswered': + $dept = $ticket->getDept(); + if(!$dept || !$dept->isManager($thisstaff)) { + $errors['err']='Perm. Denied. You are not allowed to flag tickets'; + } elseif($ticket->markUnAnswered()) { + $msg='Ticket flagged as unanswered'; + $ticket->logActivity('Ticket Marked Unanswered',($msg.' by '.$thisstaff->getName())); + } else { + $errors['err']='Problems marking the the ticket unanswered. Try again'; } break; case 'banemail': - if(!$thisstaff->isAdmin() && !$thisstaff->canBanEmails()){ + if(!$thisstaff->canBanEmails()) { $errors['err']='Perm. Denied. You are not allowed to ban emails'; - }elseif(Banlist::add($ticket->getEmail(),$thisstaff->getName())){ + } elseif(BanList::includes($ticket->getEmail())) { + $errors['err']='Email already in banlist'; + } elseif(Banlist::add($ticket->getEmail(),$thisstaff->getName())) { $msg='Email ('.$ticket->getEmail().') added to banlist'; - if($ticket->isOpen() && $ticket->close()) { - $msg.=' & ticket status set to closed'; - $ticket->logActivity('Ticket Closed',$msg); - $page=$ticket=null; //Going back to main listing. - } - }else{ + } else { $errors['err']='Unable to add the email to banlist'; } break; case 'unbanemail': - if(!$thisstaff->isAdmin() && !$thisstaff->canBanEmails()){ - $errors['err']='Perm. Denied. You are not allowed to remove emails from banlist.'; - }elseif(Banlist::remove($ticket->getEmail())){ - $msg='Email removed from banlist'; - }else{ + if(!$thisstaff->canBanEmails()) { + $errors['err'] = 'Perm. Denied. You are not allowed to remove emails from banlist.'; + } elseif(Banlist::remove($ticket->getEmail())) { + $msg = 'Email removed from banlist'; + } elseif(!BanList::includes($ticket->getEmail())) { + $warn = 'Email is not in the banlist'; + } else { $errors['err']='Unable to remove the email from banlist. Try again.'; } break; case 'delete': // Dude what are you trying to hide? bad customer support?? - if(!$thisstaff->isAdmin() && !$thisstaff->canDeleteTickets()){ + if(!$thisstaff->canDeleteTickets()) { $errors['err']='Perm. Denied. You are not allowed to DELETE tickets!!'; - }else{ - if($ticket->delete()){ - $page='tickets.inc.php'; //ticket is gone...go back to the listing. - $msg='Ticket Deleted Forever'; - $ticket=null; //clear the object. - }else{ - $errors['err']='Problems deleting the ticket. Try again'; - } + } elseif($ticket->delete()) { + $msg='Ticket #'.$ticket->getNumber().' deleted successfully'; + //Log a debug note + $ost->logDebug('Ticket #'.$ticket->getNumber().' deleted', + sprintf('Ticket #%s deleted by %s', + $ticket->getNumber(), $thisstaff->getName()) + ); + $ticket=null; //clear the object. + } else { + $errors['err']='Problems deleting the ticket. Try again'; } break; default: -- GitLab