/** * Informs an user about a ticket creation/update and writes a line to the log. * * @author EasySCP Team * @version 1.0.0 * * @access public * @param int $to_id ticket recipient * @param int $from_id ticket sender * @param string $ticket_subject ticket subject * @param string $ticket_message ticket content / message * @param int $ticket_status ticket status * @param int $urgency ticket urgency */ function sendTicketNotification($to_id, $from_id, $ticket_subject, $ticket_message, $ticket_status, $urgency) { $cfg = EasySCP_Registry::get('Config'); $sql = EasySCP_Registry::get('Db'); // To information $query = "SELECT\n\t\t\t`fname`, `lname`, `email`, `admin_name`\n\t\tFROM\n\t\t\t`admin`\n\t\tWHERE\n\t\t\t`admin_id` = ?\n\t\t;"; $res = exec_query($sql, $query, $to_id); $to_email = $res->fields['email']; $to_fname = $res->fields['fname']; $to_lname = $res->fields['lname']; $to_uname = $res->fields['admin_name']; // From information $query = "SELECT\n\t\t\t`fname`, `lname`, `email`, `admin_name`\n\t\tFROM\n\t\t\t`admin`\n\t\tWHERE\n\t\t\t`admin_id` = ?\n\t\t;"; $res = exec_query($sql, $query, $from_id); $from_email = $res->fields['email']; $from_fname = $res->fields['fname']; $from_lname = $res->fields['lname']; $from_uname = $res->fields['admin_name']; // Prepare message $subject = tr("[Ticket]") . " {SUBJ}"; if ($ticket_status == 0) { $message = tr("Hello %s!\n\nYou have a new ticket:\n", "{TO_NAME}"); } else { $message = tr("Hello %s!\n\nYou have an answer for this ticket:\n", "{TO_NAME}"); } $message .= "\n" . tr("Priority: %s\n", "{PRIORITY}"); $message .= "\n" . $ticket_message; $message .= "\n\n" . tr("Log in to answer") . ' ' . $cfg->BASE_SERVER_VHOST_PREFIX . $cfg->BASE_SERVER_VHOST; // Format addresses if ($from_fname && $from_lname) { $from = '"' . mb_encode_mimeheader($from_fname . ' ' . $from_lname, 'UTF-8') . "\" <" . $from_email . ">"; $fromname = "{$from_fname} {$from_lname}"; } else { $from = $from_email; $fromname = $from_uname; } if ($to_fname && $to_lname) { $to = '"' . mb_encode_mimeheader($to_fname . ' ' . $to_lname, 'UTF-8') . "\" <" . $to_email . ">"; $toname = "{$to_fname} {$to_lname}"; } else { $toname = $to_uname; $to = $to_email; } $priority = getTicketUrgency($urgency); // Prepare and send mail $search = array(); $replace = array(); $search[] = '{SUBJ}'; $replace[] = $ticket_subject; $search[] = '{TO_NAME}'; $replace[] = $toname; $search[] = '{FROM_NAME}'; $replace[] = $fromname; $search[] = '{PRIORITY}'; $replace[] = $priority; $subject = str_replace($search, $replace, $subject); $message = str_replace($search, $replace, $message); $headers = "From: " . $from . "\n" . "MIME-Version: 1.0\nContent-Type: text/plain; " . "charset=utf-8\nContent-Transfer-Encoding: 8bit\n" . "X-Mailer: EasySCP " . $cfg->Version . " Tickets Mailer"; $mail_result = mail($to, mb_encode_mimeheader($subject, 'UTF-8'), $message, $headers); $mail_status = $mail_result ? 'OK' : 'NOT OK'; $toname = tohtml($toname); $fromname = tohtml($fromname); write_log(sprintf("%s send ticket To: %s, From: %s, Status: %s!", $_SESSION['user_logged'], $toname . ": " . $to_email, $fromname . ": " . $from_email, $mail_status)); }
/** * Informs a user about a ticket creation/update and writes a line to the log * * @access private * @usedby updateTicket() * @usedby createTicket() * @param int $toId ticket recipient * @param int $fromId ticket sender * @param string $ticketSubject ticket subject * @param string $ticketMessage ticket content / message * @param int $ticketStatus ticket status * @param int $urgency ticket urgency */ function _sendTicketNotification($toId, $fromId, $ticketSubject, $ticketMessage, $ticketStatus, $urgency) { /** @var $cfg iMSCP_Config_Handler_File */ $cfg = iMSCP_Registry::get('config'); // To information $stmt = exec_query('SELECT fname, lname, email, admin_name FROM admin WHERE admin_id = ?', $toId); $row = $stmt->fetchRow(PDO::FETCH_ASSOC); $toFname = $row['fname']; $toLname = $row['lname']; $toEmail = $row['email']; $toUname = $row['admin_name']; // From information $stmt = exec_query('SELECT fname, lname, email, admin_name FROM admin WHERE admin_id = ?', $fromId); $row = $stmt->fetchRow(PDO::FETCH_ASSOC); $fromFname = $row['fname']; $fromLname = $row['lname']; $fromEmail = $row['email']; $fromUname = $row['admin_name']; // Prepare message $subject = tr('[Ticket]') . ' {SUBJ}'; if ($ticketStatus == 0) { $message = tr("Dear %s,\n\nYou have a new ticket:\n", '{TO_NAME}'); } else { $message = tr("Dear %s,\n\nYou have an answer for this ticket:\n", '{TO_NAME}'); } $port = $cfg['BASE_SERVER_VHOST_PREFIX'] == 'http://' ? $cfg['BASE_SERVER_VHOST_HTTP_PORT'] == '80' ? '' : ':' . $cfg['BASE_SERVER_VHOST_HTTP_PORT'] : ($cfg['BASE_SERVER_VHOST_HTTPS_PORT'] == '443' ? '' : ':' . $cfg['BASE_SERVER_VHOST_HTTPS_PORT']); $message .= "\n" . tr("Priority: %s\n", '{PRIORITY}'); $message .= "\n" . $ticketMessage; $message .= "\n\n" . tr('Log in to answer') . ' ' . $cfg['BASE_SERVER_VHOST_PREFIX'] . $cfg['BASE_SERVER_VHOST'] . $port; // Format addresses if ($fromFname && $fromLname) { $from = encode_mime_header($fromFname . ' ' . $fromLname) . " <{$fromEmail}>"; $fromname = "{$fromFname} {$fromLname}"; } else { $from = $fromEmail; $fromname = $fromUname; } if ($toFname && $toLname) { $to = encode_mime_header($toFname . ' ' . $toLname) . " <{$toEmail}>"; $toname = "{$toFname} {$toLname}"; } else { $toname = $toUname; $to = $toEmail; } $priority = getTicketUrgency($urgency); // Prepare and send mail $search = array(); $replace = array(); $search[] = '{SUBJ}'; $replace[] = $ticketSubject; $search[] = '{TO_NAME}'; $replace[] = $toname; $search[] = '{FROM_NAME}'; $replace[] = $fromname; $search[] = '{PRIORITY}'; $replace[] = $priority; $subject = str_replace($search, $replace, $subject); $message = str_replace($search, $replace, $message); $message = html_entity_decode($message, ENT_QUOTES, 'UTF-8'); $headers = "From: {$from}\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/plain; charset=utf-8\r\n"; $headers .= "Content-Transfer-Encoding: 8bit\r\n"; $headers .= 'X-Mailer: i-MSCP Mailer'; $mail_result = mail($to, encode_mime_header($subject), $message, $headers); $mail_status = $mail_result ? 'OK' : 'NOT OK'; $toname = tohtml($toname); $fromname = tohtml($fromname); write_log(sprintf('%s send ticket To: %s, From: %s, Status: %s.', $_SESSION['user_logged'], $toname . ': ' . $toEmail, $fromname . ': ' . $fromEmail, $mail_status), E_USER_NOTICE); }