/** * @param int $order_id Номер заказа * @param array $authors_ids id получателей * @param string $sender_id id отправителя с префиксом клиент/сотрудник (н-р "u330") * @param string $subject тема сообщения * @param string $body текст сообщения * @param int $notification_type тип сообщения, из набора EmailNotificationType::$NOTIFICATION_TYPES * @see EmailNotificationType * @return array|bool Добавляет внутреннее сообщение и ставит его в очередь рассылки по cron<br/>Массив ассоциативных массивов с ключами 'name' и 'email' тех, для кого сообщение не было создано или не поставлено в очередь рассылки | false в случае ошибки */ public static function saveMessageAndEnqueueEmail($order_id, array $authors_ids, $sender_id, $subject, $body, $notification_type) { static $order, $manager, $filial, $attachments; // Если не надо пихать в ядро - выходим типа все ок if (!EmailNotificationType::isPersistable($notification_type)) { return array(); } if (!is_array($authors_ids)) { if (is_numeric($authors_ids)) { $authors_ids = array($authors_ids); } else { return false; } } if (empty($order)) { try { $order = Order::find($order_id); } catch (Exception $e) { return false; } } if (empty($manager)) { try { $manager = Employee::find($order['manager_id']); } catch (Exception $e) { return false; } } $replyTo = array('email' => $manager['email'], 'name' => $manager['fio']); $result = array(); foreach ($authors_ids as $id) { if (is_numeric($id)) { try { $author = Employee::find($id); } catch (Exception $e) { continue; } $receiver = array('email' => $author['email'], 'name' => $author['fio']); //Сохраняем уведомление $message_id = Message::create(array('parent_id' => 0, 'order_id' => $order_id, 'klient_id' => $order['klient_id'], 'visit_id' => 0, 'tender_id' => 0, 'created' => time(), 'creator_id' => $sender_id, 'addr' => 'u' . $id, 'subject' => $subject, 'text' => $body, 'prior' => 1, 'uvedom' => 1, 'readed' => 0, 'needansv' => 0, 'basket' => 0)); if (!empty($message_id)) { //Ставим в очередь на отправку по cron $email_notification = enqueue_message_to_email($message_id, $author['email'], $notification_type); } if (empty($email_notification)) { $result[] = $receiver; } } else { $ids = explode(', ', $id); $temp_result = self::saveMessageAndEnqueueEmail($order_id, $ids, $sender_id, $subject, $body, $notification_type); if (count($temp_result)) { array_push($result, $temp_result); } } } return $result; }
function sendmessage_exec($Frm, $Err) { global $data_users; if (!$Err) { // Авторам запрещено писать клиентам $to_kln = $_SESSION["user"]["data"]["group_id"] != 6; //Декодирование адресатов $adrs = strtolower($Frm->GetNmValue("to")); $adrs = preg_replace("[^uk0-9;]", "", $adrs); $adrs = explode(";", $adrs); $adrs_k = array(); $adrs_u = array(); foreach ($adrs as $v) { $ind = intval(substr($v, 1)); $s = substr($v, 0, 1); if ($to_kln && $s == 'k' && $ind) { $adrs_k[] = $ind; } else { if ($s == 'u' && $ind) { $adrs_u[] = $ind; } } } if (!count($adrs_u) && !count($adrs_k)) { $Frm->_gui->informer->ERR("Неверно указан получатель"); return; } foreach ($adrs_u as $v) { if (!isset($data_users[$v])) { $Frm->_gui->informer->ERR("Указан несуществующий получатель"); return; } } $srok = 0; if (strlen($Frm->GetNmValue("date"))) { $d = explode("-", $Frm->GetNmValue("date")); $srok = mktime(0, 0, 0, $d[1], $d[0], $d[2]); if ($srok < mktime(0, 0, 0, date("n"), date("j"), date("Y"))) { $Frm->_gui->informer->ERR("Неверно указан срок ответа"); return; } } $subj = $Frm->GetNmValueH("subj"); $text = $Frm->GetNmValueH("txt"); $prior = $Frm->GetNmValueI("prior"); $parent_id = 0; if ($Frm->GetNmValue("ans")) { $parent_id = $Frm->GetNmValue("ans"); } // Для каждого получателя формирутеся свой экземпляр foreach ($adrs_k as $a) { $message_id = mls_Send("k" . $a, "u" . $_SESSION["user"]["data"]["id"], $subj, $text, $prior, $srok, $parent_id, 0, $a, 0, 0); $client = \Components\Entity\Client::find($a); if (!empty($message_id) && !empty($client['email'])) { enqueue_message_to_email($message_id, $client['email'], EmailNotification::TO_RECEIVER_ON_MESSAGE_COMMON); } } foreach ($adrs_u as $a) { $message_id = mls_Send("u" . $a, "u" . $_SESSION["user"]["data"]["id"], $subj, $text, $prior, $srok, $parent_id, 0, 0, 0, 0); \Components\Classes\Author::enqueue_message_to_email($message_id, array($a), EmailNotification::TO_RECEIVER_ON_MESSAGE_COMMON); } $Frm->_gui->informer->OK("Сообщение создано"); page_reloadToSec(3); } }
print "<div style='height: " . $h . "px; overflow: auto;'>" . $out . "<div style='border-top: 1px solid silver;'></div></div>"; } } if (isset($messages[intval($_REQUEST["messages"])])) { $m = $messages[intval($_REQUEST["messages"])]; if (!$m["readed"]) { Message::update($m["id"], array('readed' => 1)); } if (isset($_REQUEST["cab_msg_answer"])) { $t = clearText($_REQUEST["cab_msg_answer"]); if (strlen($t)) { $t = substr($t, 0, 1000); $sbj = "[Re] " . $m["subject"]; $message_id = Message::create(array("parent_id" => $m["id"], "klient_id" => $m["klient_id"], "created" => time(), "creator_id" => $m["addr"], "addr" => $m["creator_id"], "subject" => $sbj, "text" => $t, "prior" => 1)); if ($message_id) { enqueue_message_to_email($message_id, message_reciever_to_email($m['creator_id']), \Components\Entity\EmailNotificationType::TO_RECEIVER_ON_MESSAGE_COMMON); $_SESSION["cab_msg_answer_info"] = "<span style='color:green'>Сообщение отправлено</span>"; } else { $_SESSION["cab_msg_answer_info"] = "<span style='color:red'>Не удалось отправить сообщение</span>"; } header("location: ?type=cabinet&messages=" . $m["id"]); print $_SESSION["cab_msg_answer_info"]; die; } else { $_SESSION["cab_msg_answer_info"] = "Введите текст сообщения"; } } ?> <script> jQuery(function () { jQuery("#cab_msg_answer").bind("focus", function () {