Beispiel #1
0
 /**
  * @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;
 }
Beispiel #2
0
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);
    }
}
Beispiel #3
0
         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 () {