diff --git a/include/ajax.tasks.php b/include/ajax.tasks.php index 15a623c4d7d45e324540e9d0426f37b35205ed85..19016e20c7fbe3d7691f576a7af7ba3df7a00beb 100644 --- a/include/ajax.tasks.php +++ b/include/ajax.tasks.php @@ -126,7 +126,7 @@ class TasksAjaxAPI extends AjaxController { Format::datetime($_SESSION[':form-data']['timestamp'])); $note = array( - 'title' => __('Task Created From Thread'), + 'title' => __('Task Created From Thread Entry'), 'note' => __('Task ' . $taskLink . '<br /> Thread Entry ID: ' . $entryLink) ); @@ -139,7 +139,7 @@ class TasksAjaxAPI extends AjaxController { $originalTask->getNumber()); $note = array( - 'title' => __('Task Created From Thread'), + 'title' => __('Task Created From Thread Entry'), 'note' => __('This Task was created from Task ' . $taskLink)); $task->postNote($note, $errors, $thisstaff); diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php index 5377996c628c55c498a78e8d50650dd10815a713..0a7cf21bcbd1ea0bc01bec441bbcc385cbf62090 100644 --- a/include/ajax.tickets.php +++ b/include/ajax.tickets.php @@ -1362,7 +1362,7 @@ function refer($tid, $target=null) { Format::datetime($_SESSION[':form-data']['timestamp'])); $note = array( - 'title' => __('Task Created From Thread'), + 'title' => __('Task Created From Thread Entry'), 'body' => __('Task ' . $taskLink . '<br /> Thread Entry ID: ' . $entryLink) ); @@ -1375,7 +1375,7 @@ function refer($tid, $target=null) { $ticket->getNumber()); $note = array( - 'title' => __('Task Created From Thread'), + 'title' => __('Task Created From Thread Entry'), 'note' => __('This Task was created from Ticket ' . $ticketLink)); $task->postNote($note, $errors, $thisstaff); diff --git a/include/class.template.php b/include/class.template.php index 53f1caf431a542d115bcfe49a5baa5d08bdf3eb7..4e73ecb32967f248d6781b6d6696036bd4ff1088 100644 --- a/include/class.template.php +++ b/include/class.template.php @@ -60,6 +60,14 @@ class EmailTemplateGroup { 'ticket', 'signature', 'recipient', 'staff', 'message', ), ), + 'ticket.notice.bcc'=>array( + 'group'=>'a.ticket.user', + 'name'=>/* @trans */ 'New Ticket Notice (BCC)', + 'desc'=>/* @trans */ 'Notice sent to BCCd users, if enabled, on new ticket created by an agent on behalf of a user (e.g phone calls).', + 'context' => array( + 'ticket', 'signature', 'recipient', 'staff', 'message', + ), + ), 'ticket.overlimit'=>array( 'group'=>'a.ticket.user', 'name'=>/* @trans */ 'Overlimit Notice', @@ -76,6 +84,14 @@ class EmailTemplateGroup { 'ticket', 'signature', 'response', 'staff', 'poster', 'recipient', ), ), + 'ticket.reply.bcc'=>array( + 'group'=>'a.ticket.user', + 'name'=>/* @trans */ 'Response/Reply Template (BCC)', + 'desc'=>/* @trans */ 'Template used on ticket response/reply', + 'context' => array( + 'ticket', 'signature', 'response', 'staff', 'poster', 'recipient', + ), + ), 'ticket.activity.notice'=>array( 'group'=>'a.ticket.user', 'name'=>/* @trans */ 'New Activity Notice', @@ -84,6 +100,14 @@ class EmailTemplateGroup { 'ticket', 'signature', 'message', 'poster', 'recipient', ), ), + 'ticket.activity.notice.bcc'=>array( + 'group'=>'a.ticket.user', + 'name'=>/* @trans */ 'New Activity Notice (BCC)', + 'desc'=>/* @trans */ 'Template used to notify BCCd collaborators on ticket activity', + 'context' => array( + 'ticket', 'signature', 'message', 'poster', 'recipient', + ), + ), 'ticket.alert'=>array( 'group'=>'b.ticket.staff', 'name'=>/* @trans */ 'New Ticket Alert', @@ -309,6 +333,10 @@ class EmailTemplateGroup { return $this->getMsgTemplate('ticket.notice'); } + function getNewTicketNoticeBCCMsgTemplate() { + return $this->getMsgTemplate('ticket.notice.bcc'); + } + function getNewMessageAutorepMsgTemplate() { return $this->getMsgTemplate('message.autoresp'); } @@ -325,10 +353,18 @@ class EmailTemplateGroup { return $this->getMsgTemplate('ticket.reply'); } + function getReplyBCCMsgTemplate() { + return $this->getMsgTemplate('ticket.reply.bcc'); + } + function getActivityNoticeMsgTemplate() { return $this->getMsgTemplate('ticket.activity.notice'); } + function getActivityNoticeBCCMsgTemplate() { + return $this->getMsgTemplate('ticket.activity.notice.bcc'); + } + function getOverlimitMsgTemplate() { return $this->getMsgTemplate('ticket.overlimit'); } diff --git a/include/class.ticket.php b/include/class.ticket.php index f28f4e8e1d670bfec09aeeca9dcea6a2f7a5f9c2..3c2856d3baab56c8d883741592fc0d0fc487aa82 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -1564,6 +1564,7 @@ implements RestrictedAccess, Threadable, Searchable { || !($dept=$this->getDept()) || !($tpl=$dept->getTemplate()) || !($msg=$tpl->getActivityNoticeMsgTemplate()) + || !($bccmsg=$tpl->getActivityNoticeBCCMsgTemplate()) || !($email=$dept->getEmail()) ) { return; @@ -1593,6 +1594,7 @@ implements RestrictedAccess, Threadable, Searchable { ); $msg = $this->replaceVars($msg->asArray(), $vars); + $bccmsg = $this->replaceVars($bccmsg->asArray(), $vars); $attachments = $cfg->emailAttachments()?$entry->getAttachments():array(); $options = array('thread' => $entry); @@ -1627,7 +1629,7 @@ implements RestrictedAccess, Threadable, Searchable { //send bcc messages seperately for privacy if ($collabsBcc) { foreach ($collabsBcc as $recipient) { - $notice = $this->replaceVars($msg, array('recipient' => $recipient)); + $notice = $this->replaceVars($bccmsg, array('recipient' => $recipient)); if ($posterEmail != $recipient->getEmail()->address) $email->send($recipient, $notice['subj'], $notice['body'], $attachments, $options); @@ -2988,7 +2990,7 @@ implements RestrictedAccess, Threadable, Searchable { if ($vars['bccs'] && $vars['emailcollab'] && ($bcctpl = $dept->getTemplate()) - && ($bccmsg=$bcctpl->getReplyMsgTemplate())) { + && ($bccmsg=$bcctpl->getReplyBCCMsgTemplate())) { foreach ($vars['bccs'] as $uid) { if (!($recipient = User::lookup($uid))) continue; @@ -3887,20 +3889,19 @@ implements RestrictedAccess, Threadable, Searchable { } //check to see if ticket was created from a thread - if ($_SESSION[':form-data']['ticket'] || $_SESSION[':form-data']['task']) { - $oldTicket = $_SESSION[':form-data']['ticket']; - $oldTask = $_SESSION[':form-data']['task']; + if ($_SESSION[':form-data']['ticketId'] || $_SESSION[':form-data']['taskId']) { + $oldTicket = Ticket::lookup($_SESSION[':form-data']['ticketId']); + $oldTask = Task::lookup($_SESSION[':form-data']['taskId']); //add internal note to new ticket. //New ticket should have link to old task/ticket: - $link = sprintf('<a href="%s.php?id=%d#entry-%d"><b>#%s</b></a>', + $link = sprintf('<a href="%s.php?id=%d"><b>#%s</b></a>', $oldTicket ? 'tickets' : 'tasks', $oldTicket ? $oldTicket->getId() : $oldTask->getId(), - $_SESSION[':form-data']['eid'], $oldTicket ? $oldTicket->getNumber() : $oldTask->getNumber()); $note = array( - 'title' => __('Ticket Created From Thread'), + 'title' => __('Ticket Created From Thread Entry'), 'body' => sprintf(__('This Ticket was created from %s '. $link), $oldTicket ? 'Ticket' : 'Task') ); @@ -3919,12 +3920,12 @@ implements RestrictedAccess, Threadable, Searchable { Format::datetime($_SESSION[':form-data']['timestamp'])); $ticketNote = array( - 'title' => __('Ticket Created From Thread'), + 'title' => __('Ticket Created From Thread Entry'), 'body' => __('Ticket ' . $ticketLink). '<br /> Thread Entry ID: ' . $entryLink); $taskNote = array( - 'title' => __('Ticket Created From Thread'), + 'title' => __('Ticket Created From Thread Entry'), 'note' => __('Ticket ' . $ticketLink). '<br /> Thread Entry ID: ' . $entryLink); @@ -4142,7 +4143,8 @@ implements RestrictedAccess, Threadable, Searchable { $attachments = array(); $message = $ticket->getLastMessage(); if ($cfg->emailAttachments()) { - $attachments = $message->getAttachments(); + if ($message) + $attachments = $message->getAttachments(); if ($response && $response->getNumAttachments()) $attachments = $attachments->merge($response->getAttachments()); } @@ -4183,7 +4185,7 @@ implements RestrictedAccess, Threadable, Searchable { if ($collabsBcc) { foreach ($collabsBcc as $recipient) { if (($tpl=$dept->getTemplate()) - && ($bccmsg=$tpl->getNewTicketNoticeMsgTemplate()) + && ($bccmsg=$tpl->getNewTicketNoticeBCCMsgTemplate()) && ($email=$dept->getEmail()) ) $extraVars = UsersName::getNameFormats($recipient, 'recipient'); diff --git a/include/staff/ticket-open.inc.php b/include/staff/ticket-open.inc.php index 277714d5b701b9bfb22ecc8a83c5a2c5fceceaea..17b9891b90dba383df6180102ac49e0da28b7778 100644 --- a/include/staff/ticket-open.inc.php +++ b/include/staff/ticket-open.inc.php @@ -10,13 +10,13 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info); // Use thread entry to seed the ticket if (!$user && $_GET['tid'] && ($entry = ThreadEntry::lookup($_GET['tid']))) { if ($entry->getThread()->getObjectType() == 'T') - $oldTicket = Ticket::lookup($entry->getThread()->getObjectId()); + $oldTicketId = $entry->getThread()->getObjectId(); if ($entry->getThread()->getObjectType() == 'A') - $oldTask = Task::lookup($entry->getThread()->getObjectId()); + $oldTaskId = $entry->getThread()->getObjectId(); $_SESSION[':form-data']['message'] = Format::htmlchars($entry->getBody()); - $_SESSION[':form-data']['ticket'] = $oldTicket; - $_SESSION[':form-data']['task'] = $oldTask; + $_SESSION[':form-data']['ticketId'] = $oldTicketId; + $_SESSION[':form-data']['taskId'] = $oldTaskId; $_SESSION[':form-data']['eid'] = $entry->getId(); $_SESSION[':form-data']['timestamp'] = $entry->getCreateDate(); @@ -349,7 +349,7 @@ if ($_POST) <tbody id="dynamic-form"> <?php foreach ($forms as $form) { - print $form->getForm()->getMedia(); + print $form->getForm($_SESSION[':form-data'])->getMedia(); include(STAFFINC_DIR . 'templates/dynamic-form.tmpl.php'); } ?> diff --git a/scp/js/thread.js b/scp/js/thread.js index 0b4ebe50213763d035bd4df033856d6c51fe2241..bb67ca4ce868d7ea865c4aa5972f184836aa3c2c 100644 --- a/scp/js/thread.js +++ b/scp/js/thread.js @@ -159,7 +159,10 @@ var thread = { } // Open thread body links in a new tab/window + // unless referring to thread entry on current page $('div.thread-body a', $container).each(function() { + var str = this.toString(); + if (!str.includes('#entry-')) $(this).attr('target', '_blank'); });