예제 #1
0
 /**
  * Method used to build a properly encoded email address that will be
  * used by the email/note routing system.
  *
  * @param   integer $issue_id The issue ID
  * @param   string $sender The email address of the sender
  * @param   string $type Whether this is a note or email routing message
  * @return  string The properly encoded email address
  */
 public static function getFixedFromHeader($issue_id, $sender, $type)
 {
     $setup = Setup::get();
     if ($type == 'issue') {
         $routing = 'email_routing';
     } else {
         $routing = 'note_routing';
     }
     $project_id = Issue::getProjectID($issue_id);
     // if sender is empty, get project email address
     if (empty($sender)) {
         $project_info = Project::getOutgoingSenderAddress($project_id);
         $info = array('sender_name' => $project_info['name'], 'email' => $project_info['email']);
         // if no project name, use eventum wide sender name
         if (empty($info['sender_name'])) {
             $setup_sender_info = Mail_Helper::getAddressInfo($setup['smtp']['from']);
             $info['sender_name'] = $setup_sender_info['sender_name'];
         }
     } else {
         $info = Mail_Helper::getAddressInfo($sender);
     }
     // allow flags even without routing enabled
     if (!empty($setup[$routing]['recipient_type_flag'])) {
         $flag = '[' . $setup[$routing]['recipient_type_flag'] . '] ';
     } else {
         $flag = '';
     }
     if ($setup[$routing]['status'] != 'enabled') {
         // let's use the custom outgoing sender address
         $project_info = Project::getOutgoingSenderAddress($project_id);
         if (empty($project_info['email'])) {
             /// no project email, use main email address
             $from_email = $setup['smtp']['from'];
         } else {
             $from_email = $project_info['email'];
         }
     } else {
         $from_email = $setup[$routing]['address_prefix'] . $issue_id . '@' . $setup[$routing]['address_host'];
     }
     if (empty($info['sender_name'])) {
         // no sender name, check if this email address belongs to a user and if so use that
         $usr_id = User::getUserIDByEmail($info['email']);
         if (!empty($usr_id)) {
             $info['sender_name'] = User::getFullName($usr_id);
         } else {
             // no name exists, use email address for name as well
             $info['sender_name'] = $info['email'];
         }
     }
     // also check where we need to append/prepend a special string to the sender name
     if (substr($info['sender_name'], strlen($info['sender_name']) - 1) == '"') {
         if ($setup[$routing]['flag_location'] == 'before') {
             $info['sender_name'] = '"' . $flag . substr($info['sender_name'], 1);
         } else {
             $info['sender_name'] = substr($info['sender_name'], 0, strlen($info['sender_name']) - 1) . ' ' . trim($flag) . '"';
         }
     } else {
         if ($setup[$routing]['flag_location'] == 'before') {
             $info['sender_name'] = '"' . $flag . $info['sender_name'] . '"';
         } else {
             $info['sender_name'] = '"' . $info['sender_name'] . ' ' . trim($flag) . '"';
         }
     }
     $from = Mail_Helper::getFormattedName($info['sender_name'], $from_email);
     return Mime_Helper::encodeAddress(trim($from));
 }