diff --git a/include/class.thread.php b/include/class.thread.php index 306cedf5240c0a5de01dcc2951c7864ae31b6850..034eb35054e227351dcc03dcd8cfff651a925ea8 100644 --- a/include/class.thread.php +++ b/include/class.thread.php @@ -1547,7 +1547,7 @@ implements TemplateVariable { $ticketUser = Ticket::objects()->filter(array('ticket_id'=>$ticket[0]))->values_flat('user_id')->first(); //User - if ($ticketUser && (Ticket::checkReply('user', $vars['emailreply']) || $vars['do'] == 'create')) { + if ($ticketUser && Ticket::checkReply('user', $vars['emailreply'])) { $uEmail = UserEmailModel::objects()->filter(array('user_id'=>$ticketUser[0]))->values_flat('address')->first(); $u = array(); $u[$ticketUser[0]] = $uEmail[0]; @@ -1561,18 +1561,18 @@ implements TemplateVariable { self::setReplyFlag($entry, $vars['emailreply']); //Cc collaborators - if ($vars['ccs'] && (Ticket::checkReply('cc', $vars['emailreply']) || $vars['do'] == 'create')) { + if ($vars['ccs'] && Ticket::checkReply('cc', $vars['emailreply'])) { $cc = Collaborator::getCollabList($vars['ccs']); $recipients['cc'] = $cc; } //Bcc Collaborators - if($vars['bccs'] && (Ticket::checkReply('bcc', $vars['emailreply']) || $vars['do'] == 'create')) { + if($vars['bccs'] && Ticket::checkReply('bcc', $vars['emailreply'])) { $bcc = Collaborator::getCollabList($vars['bccs']); $recipients['bcc'] = $bcc; } - if (($vars['do'] == 'create' || $vars['emailreply'] != '0') && $recipients) + if ($vars['emailreply'] != '0' && $recipients) $entry->recipients = json_encode($recipients); if ($entry->format == 'html') diff --git a/include/class.ticket.php b/include/class.ticket.php index 8ec533177c4bf3eaea576c9e8e495af1c14facb6..df25a4a0d7ac51d07d531a631769dc024c297dcb 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -4161,7 +4161,6 @@ implements RestrictedAccess, Threadable, Searchable { } if (!$cfg->notifyONNewStaffTicket() - || !isset($vars['alertuser']) || !($dept=$ticket->getDept()) ) { return $ticket; //No alerts. @@ -4208,12 +4207,15 @@ implements RestrictedAccess, Threadable, Searchable { ); //ticket created on user's behalf - if($vars['emailcollab'] == 1) { - + if (Ticket::checkReply('cc', $vars['emailreply'])) { $email->send($ticket->getOwner(), $msg['subj'], $msg['body'], $attachments, $options, $collabsCc); + } + elseif (Ticket::checkReply('user', $vars['emailreply'])) + $email->send($ticket->getOwner(), $msg['subj'], $msg['body'], $attachments, + $options); - if ($collabsBcc) { + if ($collabsBcc && Ticket::checkReply('bcc', $vars['emailreply'])) { foreach ($collabsBcc as $recipient) { if (($tpl=$dept->getTemplate()) && ($bccmsg=$tpl->getNewTicketNoticeBCCMsgTemplate()) @@ -4231,10 +4233,7 @@ implements RestrictedAccess, Threadable, Searchable { $options); } } - } - else - $email->send($ticket->getOwner(), $msg['subj'], $msg['body'], $attachments, - $options); + } return $ticket; } diff --git a/include/i18n/en_US/help/tips/tickets.queue.yaml b/include/i18n/en_US/help/tips/tickets.queue.yaml index a6238b0e79a538bef78aae4b4134f14c88147f95..2b799b166dadccdf2a354a9614058881002fb3ea 100644 --- a/include/i18n/en_US/help/tips/tickets.queue.yaml +++ b/include/i18n/en_US/help/tips/tickets.queue.yaml @@ -84,7 +84,7 @@ reply_types: This reply is sent to the User and the Collaborators (CC and BCC) you choose to include.</br> <b>Reply to User:</b> This reply is sent to the User only, no Collaborators.</br> - <b>Reply to Collaborators:</b> + <b>Reply to CC + User:</b> This reply is sent to only the User and CC'd Collaborators</br> <b>Reply to BCC:</b> This is sent only to the BCC'd Collaborators. diff --git a/include/staff/ticket-open.inc.php b/include/staff/ticket-open.inc.php index 923e19b41f195132edb739c15f841f6a13129727..dc03024d9e47592630b606a3538e9f22173f383c 100644 --- a/include/staff/ticket-open.inc.php +++ b/include/staff/ticket-open.inc.php @@ -75,113 +75,129 @@ if ($_POST) <tbody> <tr> <th colspan="2"> - <em><strong><?php echo __('Recipient Information'); ?></strong>: </em> + <em><strong><?php echo __('User and Collaborators'); ?></strong>: </em> <div class="error"><?php echo $errors['user']; ?></div> </th> </tr> - <?php - if ($user) { ?> - <tr><td><?php echo __('User'); ?>:</td><td> - <div id="user-info"> - <input type="hidden" name="uid" id="uid" value="<?php echo $user->getId(); ?>" /> - <a href="#" onclick="javascript: - $.userLookup('ajax.php/users/<?php echo $user->getId(); ?>/edit', - function (user) { - $('#user-name').text(user.name); - $('#user-email').text(user.email); - }); - return false; - "><i class="icon-user"></i> - <span id="user-name"><?php echo Format::htmlchars($user->getName()); ?></span> - <<span id="user-email"><?php echo $user->getEmail(); ?></span>> - </a> - <a class="inline button" style="overflow:inherit" href="#" + <tr> + <td> + <table class="form_table" width="940" border="0" cellspacing="0" cellpadding="2"> + <?php + if ($user) { ?> + <tr><td><?php echo __('User'); ?>:</td><td> + <div id="user-info"> + <input type="hidden" name="uid" id="uid" value="<?php echo $user->getId(); ?>" /> + <a href="#" onclick="javascript: + $.userLookup('ajax.php/users/<?php echo $user->getId(); ?>/edit', + function (user) { + $('#user-name').text(user.name); + $('#user-email').text(user.email); + }); + return false; + "><i class="icon-user"></i> + <span id="user-name"><?php echo Format::htmlchars($user->getName()); ?></span> + <<span id="user-email"><?php echo $user->getEmail(); ?></span>> + </a> + <a class="inline button" style="overflow:inherit" href="#" onclick="javascript: - $.userLookup('ajax.php/users/select/'+$('input#uid').val(), - function(user) { - $('input#uid').val(user.id); - $('#user-name').text(user.name); - $('#user-email').text('<'+user.email+'>'); - }); - return false; + $.userLookup('ajax.php/users/select/'+$('input#uid').val(), + function(user) { + $('input#uid').val(user.id); + $('#user-name').text(user.name); + $('#user-email').text('<'+user.email+'>'); + }); + return false; "><i class="icon-retweet"></i> <?php echo __('Change'); ?></a> - </div> - </td></tr> - <?php - } else { //Fallback: Just ask for email and name - ?> - <tr> - <td width="160" class="required"> <?php echo __('Email Address'); ?>: </td> - <td> - <div class="attached input"> - <input type="text" size=45 name="email" id="user-email" class="attached" - autocomplete="off" autocorrect="off" value="<?php echo $info['email']; ?>" /> </span> - <a href="?a=open&uid={id}" data-dialog="ajax.php/users/lookup/form" - class="attached button"><i class="icon-search"></i></a> - </div> + </div> + </td> + </tr> + <?php + } else { //Fallback: Just ask for email and name + ?> + <tr id="userRow"> + <td width="120"><?php echo __('User'); ?>:</td> + <td> + <span> + <select class="userSelection" name="name" id="user-name" + data-placeholder="<?php echo __('Select User'); ?>"> + </select> + </span> + + <a class="inline button" style="overflow:inherit" href="#" + onclick="javascript: + $.userLookup('ajax.php/users/lookup/form', function (user) { + var newUser = new Option(user.email + ' - ' + user.name, user.id, true, true); + return $("#user-name").append(newUser).trigger('change'); + }); + "><i class="icon-plus"></i> <?php echo __('Add New'); ?></a> + <span class="error">*</span> - <div class="error"><?php echo $errors['email']; ?></div> - </td> - </tr> - <tr> - <td width="160" class="required"> <?php echo __('Full Name'); ?>: </td> + <br/><span class="error"><?php echo $errors['name']; ?></span> + </td> + <div> + <input type="hidden" size=45 name="email" id="user-email" class="attached" + placeholder="<?php echo __('User Email'); ?>" + autocomplete="off" autocorrect="off" value="<?php echo $info['email']; ?>" /> + </div> + </tr> + <?php + } ?> + <tr id="ccRow"> + <td width="160"><?php echo __('Cc'); ?>:</td> <td> - <span style="display:inline-block;"> - <input type="text" size=45 name="name" id="user-name" value="<?php echo $info['name']; ?>" /> </span> - <span class="error">*</span> - <div class="error"><?php echo $errors['name']; ?></div> - </td> - </tr> - <?php - } ?> + <span> + <select class="collabSelections" name="ccs[]" id="cc_users_open" multiple="multiple" + ref="tags" data-placeholder="<?php echo __('Select Contacts'); ?>"> + </select> + </span> - <?php - if($cfg->notifyONNewStaffTicket()) { ?> - <tr> - <td width="160"><?php echo __('Ticket Notice'); ?>:</td> - <td> - <input type="checkbox" name="alertuser" <?php echo (!$errors || $info['alertuser'])? 'checked="checked"': ''; ?>><?php - echo __('Send alert to user.'); ?> - </td> + <a class="inline button" style="overflow:inherit" href="#" + onclick="javascript: + $.userLookup('ajax.php/users/lookup/form', function (user) { + var newUser = new Option(user.name, user.id, true, true); + return $("#cc_users_open").append(newUser).trigger('change'); + }); + "><i class="icon-plus"></i> <?php echo __('Add New'); ?></a> + + <br/><span class="error"><?php echo $errors['ccs']; ?></span> + </td> </tr> - <?php - } ?> - <tr> - <td> - <table border="0"> - <tr class="no_border"> - <td width="120"> - <label><strong><?php echo __('Collaborators'); ?>:</strong></label> - </td> - <td> - <input type='checkbox' value='1' name="emailcollab" - id="emailcollab" - <?php echo ((!$info['emailcollab'] && !$errors) || isset($info['emailcollab']))?'checked="checked"':''; ?> + <tr id="bccRow"> + <td width="160"><?php echo __('Bcc'); ?>:</td> + <td> + <span> + <select class="collabSelections" name="bccs[]" id="bcc_users_open" multiple="multiple" + data-placeholder="<?php echo __('Select Contacts'); ?>"> + </select> + </span> + + <a class="inline button" style="overflow:inherit" href="#" + onclick="javascript: + $.userLookup('ajax.php/users/lookup/form', function (user) { + var newUser = new Option(user.name, user.id, true, true); + return $("#bcc_users_open").append(newUser).trigger('change'); + }); + "><i class="icon-plus"></i> <?php echo __('Add New'); ?></a> - > - <?php - ?> - </td> - </tr> - <tr class="no_border" id="ccRow"> - <td width="160"><?php echo __('Cc'); ?>:</td> - <td> - <select class="collabSelections" name="ccs[]" id="cc_users_open" multiple="multiple" - data-placeholder="<?php echo __('Select Contacts'); ?>"> - </select> - <br/><span class="error"><?php echo $errors['ccs']; ?></span> - </td> - </tr> - <tr class="no_border" id="bccRow"> - <td width="160"><?php echo __('Bcc'); ?>:</td> - <td> - <select class="collabSelections" name="bccs[]" id="bcc_users_open" multiple="multiple" - data-placeholder="<?php echo __('Select Contacts'); ?>"> - </select> - <br/><span class="error"><?php echo $errors['ccs']; ?></span> - </td> - </tr> - </table> + <br/><span class="error"><?php echo $errors['bccs']; ?></span> + </td> + </tr> + <tr class="no_border"> + <td> + <?php echo __('Ticket Notice');?>: + </td> + <td> + <select id="emailreply" name="emailreply"> + <option value="reply-all"><?php echo __('Alert All'); ?></option> + <option value="reply-user"><?php echo __('Alert to User'); ?></option> + <option value="reply-collab" <?php echo 'selected="selected"'; ?>><?php echo __('Alert to CC + User'); ?></option> + <option value="reply-bcc"><?php echo __('Alert to BCC'); ?></option> + <option value="reply-bcc"><?php echo __('Alert to BCC'); ?></option> + <option value="0">— <?php echo __('Do Not Send Alert'); ?> —</option> + </select> + </td> + </tr> + </table> </td> </tr> </tbody> @@ -529,8 +545,8 @@ $(function() { return false; }); - $('.collabSelections').select2({ - width: '350px', + $('.userSelection').select2({ + width: '450px', minimumInputLength: 3, ajax: { url: "ajax.php/users/local", @@ -544,40 +560,54 @@ $(function() { return { results: $.map(data, function (item) { return { - text: item.name, + text: item.email + ' - ' + item.name, slug: item.slug, + email: item.email, id: item.id } }) }; + $('#user-email').val(item.name); } } }); - }); + $('.userSelection').on('select2:select', function (e) { + var data = e.params.data; + $('#user-email').val(data.email); + }); -$(document).ready(function () { - $('#emailcollab').on('change', function(){ - var value = $("#cc_users_open").val(); - if ($(this).prop('checked')) { - $('#ccRow').show(); - $('#bccRow').show(); - } - else { - $('#ccRow').hide(); - $('#bccRow').hide(); + $('.userSelection').on("change", function (e) { + var data = $('.userSelection').select2('data'); + var data = data[0].text; + var email = data.substr(0,data.indexOf(' ')); + $('#user-email').val(data.substr(0,data.indexOf(' '))); + }); + + $('.collabSelections').select2({ + width: '450px', + minimumInputLength: 3, + ajax: { + url: "ajax.php/users/local", + dataType: 'json', + data: function (params) { + return { + q: params.term, + }; + }, + processResults: function (data) { + return { + results: $.map(data, function (item) { + return { + text: item.name, + slug: item.slug, + id: item.id + } + }) + }; } + } }); -}); -$("form").submit(function(event) { - var value = $("#emailcollab").val(); - if ($("#emailcollab").prop('checked')) { - //do nothing - } - else { - $("#cc_users_open").val(null).change(); - $("#bcc_users_open").val(null).change(); - } -}); + }); </script> diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php index 8715462fb486ddd49512aebeae31d9cac04f86ba..5a1a90e2ed1e9240d738cf353cdb53e378d62f86 100644 --- a/include/staff/ticket-view.inc.php +++ b/include/staff/ticket-view.inc.php @@ -762,7 +762,7 @@ if ($errors['err'] && isset($_POST['a'])) { <select id="emailreply" name="emailreply"> <option value="reply-all"><?php echo __('Reply All'); ?></option> <option value="reply-user"><?php echo __('Reply to User'); ?></option> - <option value="reply-collab" <?php echo ($ccUser || $ticketUser ) ? 'selected="selected"' : ''; ?>><?php echo __('Reply to Collaborators'); ?></option> + <option value="reply-collab" <?php echo ($ccUser || $ticketUser ) ? 'selected="selected"' : ''; ?>><?php echo __('Reply to CC + User'); ?></option> <option value="reply-bcc" <?php echo $bccUser || $errors['bccs'] ? 'selected="selected"' : ''; ?>><?php echo __('Reply to BCC'); ?></option> <option value="0" <?php echo !$emailReply ? 'selected="selected"' : ''; ?> >— <?php echo __('Do Not Email Reply'); ?> —</option> @@ -798,38 +798,60 @@ if ($errors['err'] && isset($_POST['a'])) { <tr id="cc-row"> <td width="160" style="padding-left:20px;"><?php echo __('Cc'); ?></td> <td> - <select class="collabSelections" name="ccs[]" id="cc_users" multiple="multiple" - data-placeholder="<?php echo __('Select Contacts'); ?>"> - <?php - foreach ($cc_cids as $u) { - if($u != $ticket->user_id && !in_array($u, $bcc_cids)) { - ?> - <option value="<?php echo $u; ?>" <?php - if (in_array($u, $cc_cids)) - echo 'selected="selected"'; ?>><?php echo User::lookup($u); ?> - </option> - <?php } } ?> - ?> - </select> + <span> + <select class="collabSelections" name="ccs[]" id="cc_users" multiple="multiple" + data-placeholder="<?php echo __('Select Contacts'); ?>"> + <?php + foreach ($cc_cids as $u) { + if($u != $ticket->user_id && !in_array($u, $bcc_cids)) { + ?> + <option value="<?php echo $u; ?>" <?php + if (in_array($u, $cc_cids)) + echo 'selected="selected"'; ?>><?php echo User::lookup($u); ?> + </option> + <?php } } ?> + ?> + </select> + </span> + + <a class="inline button" style="overflow:inherit" href="#" + onclick="javascript: + $.userLookup('ajax.php/users/lookup/form', function (user) { + var newUser = new Option(user.name, user.id, true, true); + return $("#cc_users").append(newUser).trigger('change'); + }); + "><i class="icon-plus"></i> <?php echo __('Add New'); ?></a> + <br/><span class="error"><?php echo $errors['ccs']; ?></span> </td> </tr> <tr id="bcc-row"> <td width="160" style="padding-left:20px;"><?php echo __('Bcc'); ?></td> <td> - <select class="collabSelections" name="bccs[]" id="bcc_users" multiple="multiple" - data-placeholder="<?php echo __('Select Contacts'); ?>"> - <?php - foreach ($bcc_cids as $u) { - if($u != $ticket->user_id && !in_array($u, $cc_cids)) { - ?> - <option value="<?php echo $u; ?>" <?php - if (in_array($u, $bcc_cids)) - echo 'selected="selected"'; ?>><?php echo User::lookup($u); ?> - </option> - <?php } } ?> - ?> - </select> + <span> + <select class="collabSelections" name="bccs[]" id="bcc_users" multiple="multiple" + data-placeholder="<?php echo __('Select Contacts'); ?>"> + <?php + foreach ($bcc_cids as $u) { + if($u != $ticket->user_id && !in_array($u, $cc_cids)) { + ?> + <option value="<?php echo $u; ?>" <?php + if (in_array($u, $bcc_cids)) + echo 'selected="selected"'; ?>><?php echo User::lookup($u); ?> + </option> + <?php } } ?> + ?> + </select> + </span> + + <a class="inline button" style="overflow:inherit" href="#" + onclick="javascript: + $.userLookup('ajax.php/users/lookup/form', function (user) { + var newUser = new Option(user.name, user.id, true, true); + return $("#bcc_users").append(newUser).trigger('change'); + }); + "><i class="icon-plus"></i> <?php echo __('Add New'); ?></a> + <br/><span class="error"><?php echo $errors['bccs']; ?></span> </td> </tr> @@ -1236,31 +1258,6 @@ $(function() { }); $(function() { - $('.collabSelections').on("select2:select", function(e) { - var el = $(this); - var tid = <?php echo $ticket->getThreadId(); ?>; - var target = e.currentTarget.id; - var addTo = (target == 'cc_users') ? 'addcc' : 'addbcc'; - - if(el.val().includes("NEW")) { - $("li[title='— Add New —']").remove(); - var url = 'ajax.php/thread/' + tid + '/add-collaborator/' + addTo ; - $.userLookup(url, function(user) { - e.preventDefault(); - if($('.dialog#confirm-action').length) { - $('.dialog#confirm-action #action').val(addTo); - $('#confirm-form').append('<input type=hidden name=user_id value='+user.id+' />'); - $('#overlay').show(); - } - }); - var arr = el.val(); - var removeStr = "NEW"; - - arr.splice($.inArray(removeStr, arr),1); - $(this).val(arr); - } - }); - $('.collabSelections').on("select2:unselecting", function(e) { var el = $(this); var target = '#' + e.currentTarget.id; @@ -1289,7 +1286,6 @@ $(function() { }; }, processResults: function (data) { - data[0] = {name: "\u2014 Add New \u2014", id: "NEW"}; return { results: $.map(data, function (item) { return {