diff --git a/include/class.mailer.php b/include/class.mailer.php index 3faae326690d2fe129549da8d4594b4041c0a5e3..1d3712211a43a69d040b976a4fa80d67899b99bc 100644 --- a/include/class.mailer.php +++ b/include/class.mailer.php @@ -66,10 +66,14 @@ class Mailer { $this->ht['from'] = $from; } - function getFromAddress() { + function getFromAddress($options=array()) { - if(!$this->ht['from'] && ($email=$this->getEmail())) - $this->ht['from'] =sprintf('"%s" <%s>', ($email->getName()?$email->getName():$email->getEmail()), $email->getEmail()); + if (!$this->ht['from'] && ($email=$this->getEmail())) { + if (($name = $options['from_name'] ?: $email->getName())) + $this->ht['from'] =sprintf('"%s" <%s>', $name, $email->getEmail()); + else + $this->ht['from'] =sprintf('<%s>', $email->getEmail()); + } return $this->ht['from']; } @@ -318,7 +322,7 @@ class Mailer { $subject = preg_replace("/(\r\n|\r|\n)/s",'', trim($subject)); $headers = array ( - 'From' => $this->getFromAddress(), + 'From' => $this->getFromAddress($options), 'To' => $to, 'Subject' => $subject, 'Date'=> date('D, d M Y H:i:s O'), diff --git a/include/class.staff.php b/include/class.staff.php index cbbc5200f3fc3cebb8ec7df6f067c26ee753e11c..84fed044440be2f4dcb7d27e533c2ffdcfa210c9 100644 --- a/include/class.staff.php +++ b/include/class.staff.php @@ -282,6 +282,10 @@ implements AuthenticatedUser, EmailContact, TemplateVariable { return $this->default_signature_type; } + function getReplyFromNameType() { + return $this->default_from_name; + } + function getDefaultPaperSize() { return $this->default_paper_size; } @@ -621,6 +625,7 @@ implements AuthenticatedUser, EmailContact, TemplateVariable { $this->max_page_size = $vars['max_page_size']; $this->auto_refresh_rate = $vars['auto_refresh_rate']; $this->default_signature_type = $vars['default_signature_type']; + $this->default_from_name = $vars['default_from_name']; $this->default_paper_size = $vars['default_paper_size']; $this->lang = $vars['lang']; $this->onvacation = isset($vars['onvacation'])?1:0; diff --git a/include/class.ticket.php b/include/class.ticket.php index c97ebbd2e4f9e329f20530047283d992255593d2..3d176f05f580afadcfe217d39c664f029f1c7b7f 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -1496,6 +1496,10 @@ implements RestrictedAccess, Threadable { $attachments = $cfg->emailAttachments()?$entry->getAttachments():array(); $options = array('thread' => $entry); + + if ($vars['from_name']) + $options += array('from_name' => $vars['from_name']); + foreach ($recipients as $recipient) { // Skip folks who have already been included on this part of // the conversation @@ -2494,15 +2498,33 @@ implements RestrictedAccess, Threadable { if (!$alert) return $response; - $options = array(); $email = $dept->getEmail(); - + $options = array('thread'=>$response); + $signature = $from_name = ''; if ($thisstaff && $vars['signature']=='mine') $signature=$thisstaff->getSignature(); elseif ($vars['signature']=='dept' && $dept->isPublic()) $signature=$dept->getSignature(); - else - $signature=''; + + if ($thisstaff && ($type=$thisstaff->getReplyFromNameType())) { + switch ($type) { + case 'mine': + if (!$cfg->hideStaffName()) + $from_name = (string) $thisstaff->getName(); + break; + case 'dept': + if ($dept->isPublic()) + $from_name = $dept->getName(); + break; + case 'email': + default: + $from_name = $email->getName(); + } + + if ($from_name) + $options += array('from_name' => $from_name); + + } $variables = array( 'response' => $response, @@ -2511,9 +2533,7 @@ implements RestrictedAccess, Threadable { 'poster' => $thisstaff ); - $user = $this->getOwner(); - $options = array('thread' => $response); if (($email=$dept->getEmail()) && ($tpl = $dept->getTemplate()) && ($msg=$tpl->getReplyMsgTemplate()) @@ -2528,7 +2548,9 @@ implements RestrictedAccess, Threadable { if ($vars['emailcollab']) { $this->notifyCollaborators($response, - array('signature' => $signature) + array( + 'signature' => $signature, + 'from_name' => $from_name) ); } return $response; diff --git a/include/staff/profile.inc.php b/include/staff/profile.inc.php index a41e31304dc72a3ecbc732e7dba3e9bb59bb02f6..aacea1421dfe5af611ac965bc1fcdc42cb72d35b 100644 --- a/include/staff/profile.inc.php +++ b/include/staff/profile.inc.php @@ -196,9 +196,35 @@ if ($avatar->isChangeable()) { ?> </select> </td> </tr> + + <tr> + <td><?php echo __('Default From Name');?>: + <div class="faded"><?php echo __('From name to use when replying to a thread');?></div> + </td> + <td> + <select name="default_from_name"> + <?php + $options=array( + 'email' => __("Email Address Name"), + 'dept' => sprintf(__("Department Name (%s)"), + __('if public' /* This is used in 'Department's Name (>if public<)' */)), + 'mine' => __('My Name')); + if ($cfg->hideStaffName()) + unset($options['mine']); + + foreach($options as $k=>$v) { + echo sprintf('<option value="%s" %s>%s</option>', + $k,($staff->default_from_name==$k)?'selected="selected"':'',$v); + } + ?> + </select> + <div class="error"><?php echo $errors['default_from_name']; ?></div> + </td> + </tr> + <tr> <td><?php echo __('Default Signature');?>: - <div class="faded"><?php echo __('This can be selected when replying to a ticket');?></div> + <div class="faded"><?php echo __('This can be selected when replying to a thread');?></div> </td> <td> <select name="default_signature_type">