Exemple #1
0
 function getReopenStatus()
 {
     global $cfg;
     $status = null;
     if ($this->isReopenable() && ($c = $this->getConfiguration()) && isset($c['reopenstatus'])) {
         $status = TicketStatus::lookup($c['reopenstatus'] ?: $cfg->getDefaultTicketStatusId());
     }
     return $status && !strcasecmp($status->getState(), 'open') ? $status : null;
 }
 function postNote($vars, &$errors, $poster, $alert = true)
 {
     global $cfg, $thisstaff;
     //Who is posting the note - staff or system?
     $vars['staffId'] = 0;
     $vars['poster'] = 'SYSTEM';
     if ($poster && is_object($poster)) {
         $vars['staffId'] = $poster->getId();
         $vars['poster'] = $poster->getName();
     } elseif ($poster) {
         //string
         $vars['poster'] = $poster;
     }
     if (!($note = $this->getThread()->addNote($vars, $errors))) {
         return null;
     }
     $alert = $alert && (isset($vars['flags']) ? !$vars['flags']['bounce'] && !$vars['flags']['auto-reply'] : true);
     // Get assigned staff just in case the ticket is closed.
     $assignee = $this->getStaff();
     if ($vars['note_status_id'] && ($status = TicketStatus::lookup($vars['note_status_id']))) {
         if ($this->setStatus($status)) {
             $this->reload();
         }
     }
     // If alerts are not enabled then return a success.
     if (!$alert || !$cfg->alertONNewNote() || !($dept = $this->getDept())) {
         return $note;
     }
     if (($email = $dept->getAlertEmail()) && ($tpl = $dept->getTemplate()) && ($msg = $tpl->getNoteAlertMsgTemplate())) {
         $msg = $this->replaceVars($msg->asArray(), array('note' => $note));
         // Alert recipients
         $recipients = array();
         //Last respondent.
         if ($cfg->alertLastRespondentONNewNote()) {
             $recipients[] = $this->getLastRespondent();
         }
         // Assigned staff / team
         if ($cfg->alertAssignedONNewNote()) {
             if ($assignee && $assignee instanceof Staff) {
                 $recipients[] = $assignee;
             }
             if ($team = $this->getTeam()) {
                 $recipients = array_merge($recipients, $team->getMembers());
             }
         }
         // Dept manager
         if ($cfg->alertDeptManagerONNewNote() && $dept && $dept->getManagerId()) {
             $recipients[] = $dept->getManager();
         }
         $options = array('inreplyto' => $note->getEmailMessageId(), 'references' => $note->getEmailReferences(), 'thread' => $note);
         $isClosed = $this->isClosed();
         $sentlist = array();
         foreach ($recipients as $k => $staff) {
             if (!is_object($staff) || !$staff->isAvailable() || isset($sentlist[$staff->getEmail()]) || $note->getStaffId() == $staff->getId() || $isClosed && !$this->checkStaffAccess($staff)) {
                 continue;
             }
             $alert = $this->replaceVars($msg, array('recipient' => $staff));
             $email->sendAlert($staff->getEmail(), $alert['subj'], $alert['body'], null, $options);
             $sentlist[$staff->getEmail()] = 1;
         }
     }
     return $note;
 }
Exemple #3
0
 function postNote($vars, &$errors, $poster, $alert = true)
 {
     global $cfg, $thisstaff;
     //Who is posting the note - staff or system?
     $vars['staffId'] = 0;
     $vars['poster'] = 'SYSTEM';
     if ($poster && is_object($poster)) {
         $vars['staffId'] = $poster->getId();
         $vars['poster'] = $poster->getName();
     } elseif ($poster) {
         //string
         $vars['poster'] = $poster;
     }
     if (!$vars['ip_address'] && $_SERVER['REMOTE_ADDR']) {
         $vars['ip_address'] = $_SERVER['REMOTE_ADDR'];
     }
     if (!($note = $this->getThread()->addNote($vars, $errors))) {
         return null;
     }
     $alert = $alert && (isset($vars['flags']) ? !$vars['flags']['bounce'] && !$vars['flags']['auto-reply'] : true);
     // Get assigned staff just in case the ticket is closed.
     $assignee = $this->getStaff();
     if ($vars['note_status_id'] && ($status = TicketStatus::lookup($vars['note_status_id']))) {
         if ($this->setStatus($status)) {
             $this->reload();
         }
     }
     $activity = $vars['activity'] ?: _S('New Internal Note');
     $this->onActivity(array('activity' => $activity, 'threadentry' => $note, 'assignee' => $assignee), $alert);
     return $note;
 }
 function setSelectedTicketsStatus($state)
 {
     global $thisstaff, $ost;
     $errors = $info = array();
     if (!$thisstaff || !$thisstaff->canManageTickets()) {
         $errors['err'] = sprintf('%s %s', sprintf(__('You do not have permission %s.'), __('to mass manage tickets')), __('Contact admin for such access'));
     } elseif (!$_REQUEST['tids'] || !count($_REQUEST['tids'])) {
         $errors['err'] = sprintf(__('You must select at least %s.'), __('one ticket'));
     } elseif (!($status = TicketStatus::lookup($_REQUEST['status_id']))) {
         $errors['status_id'] = sprintf('%s %s', __('Unknown or invalid'), __('status'));
     } elseif (!$errors) {
         // Make sure the agent has permission to set the status
         switch (mb_strtolower($status->getState())) {
             case 'open':
                 if (!$thisstaff->canCloseTickets() && !$thisstaff->canCreateTickets()) {
                     $errors['err'] = sprintf(__('You do not have permission %s.'), __('to reopen tickets'));
                 }
                 break;
             case 'closed':
                 if (!$thisstaff->canCloseTickets()) {
                     $errors['err'] = sprintf(__('You do not have permission %s.'), __('to resolve/close tickets'));
                 }
                 break;
             case 'deleted':
                 if (!$thisstaff->canDeleteTickets()) {
                     $errors['err'] = sprintf(__('You do not have permission %s.'), __('to archive/delete tickets'));
                 }
                 break;
             default:
                 $errors['err'] = sprintf('%s %s', __('Unknown or invalid'), __('status'));
         }
     }
     $count = count($_REQUEST['tids']);
     if (!$errors) {
         $i = 0;
         $comments = $_REQUEST['comments'];
         foreach ($_REQUEST['tids'] as $tid) {
             if (($ticket = Ticket::lookup($tid)) && $ticket->getStatusId() != $status->getId() && $ticket->checkStaffAccess($thisstaff) && $ticket->setStatus($status, $comments)) {
                 $i++;
             }
         }
         if (!$i) {
             $errors['err'] = sprintf(__('Unable to change status for %s'), _N('the selected ticket', 'any of the selected tickets', $count));
         } else {
             // Assume success
             if ($i == $count) {
                 if (!strcasecmp($status->getState(), 'deleted')) {
                     $msg = sprintf(__('Successfully deleted %s.'), _N('selected ticket', 'selected tickets', $count));
                 } else {
                     $msg = sprintf(__('Successfully changed status of %1$s to %2$s'), _N('selected ticket', 'selected tickets', $count), $status->getName());
                 }
                 $_SESSION['::sysmsgs']['msg'] = $msg;
             } else {
                 if (!strcasecmp($status->getState(), 'deleted')) {
                     $warn = sprintf(__('Successfully deleted %s.'), sprintf(__('%1$d of %2$d selected tickets'), $i, $count));
                 } else {
                     $warn = sprintf(__('%1$d of %2$d %3$s status changed to %4$s'), $i, $count, _N('selected ticket', 'selected tickets', $count), $status->getName());
                 }
                 $_SESSION['::sysmsgs']['warn'] = $warn;
             }
             Http::response(201, 'Successfully processed');
         }
     }
     return self::_changeSelectedTicketsStatus($state, $info, $errors);
 }