예제 #1
0
파일: Author.php 프로젝트: yonkon/diplom
 /**
  * @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;
 }
예제 #2
0
파일: list.inc.php 프로젝트: yonkon/diplom
            if (!empty($_GET['t'])) {
                $type = $_GET['t'];
            }
            switch ($type) {
                case NOTIFICATION_TYPE_NORMAL:
                default:
                    if (!\Components\Entity\EmailNotificationType::isPersistable(\Components\Entity\EmailNotification::TO_AUTHOR_ON_REMIND_NORMAL)) {
                        $GUI->ERR("Напоминание отключено!");
                        page_ReloadSec();
                        return;
                    }
                    $failed_emails = Author::saveMessageAndEnqueueEmail($order_id, array($order_info['author_id']), 'u' . $_SESSION['user']['data']['id'], 'Напоминание по заказу №' . $order_id . ' ' . $order_info['subject'], 'Уважаемый автор, напоминаем Вам о том, что данный заказ должен быть прислан Вами на почту или прикреплен на сайте в личном кабинете сегодня. Сообщите о состоянии заказа.
С уважением, ' . sotr_getFullName($_SESSION['user']['data']['id']), \Components\Entity\EmailNotification::TO_AUTHOR_ON_REMIND_NORMAL);
                    break;
                case NOTIFICATION_TYPE_URGENT:
                    if (!\Components\Entity\EmailNotificationType::isPersistable(\Components\Entity\EmailNotification::TO_AUTHOR_ON_REMIND_URGENT)) {
                        $GUI->ERR("Напоминание отключено!");
                        page_ReloadSec();
                        return;
                    }
                    $failed_emails = Author::saveMessageAndEnqueueEmail($order_id, array($order_info['author_id']), 'u' . $_SESSION['user']['data']['id'], 'СРОЧНО ответьте по заказу №' . $order_id . ' ' . $order_info['subject'], 'Срочно ответьте о состоянии данного заказа, по которому дата сдачи Вами сорвана. Предупреждаем что срыв срока заказа позволит нам не выплатить Вам гонорар и/или наложить штраф. Мы всегда выполняем свои обязательства по оплате перед Вами и ждем с Вашей стороны того же, а именно соблюдение сроков и требований. Спасибо за понимание. С уважением, ' . sotr_getFullName($_SESSION['user']['data']['id']), \Components\Entity\EmailNotification::TO_AUTHOR_ON_REMIND_URGENT);
                    break;
            }
            if (!empty($failed_emails)) {
                $GUI->ERR("Не удалось отправить заказ на " . $failed_emails[0]['email']);
                page_ReloadSec();
            }
            AuthorNotification::create(array('author_id' => $order_info['author_id'], 'order_id' => $order_id, 'date' => date('Y-m-d H:i:s'), 'type' => $type));
            $GUI->OK("Напоминание отправлено");
            page_ReloadSec();
            break;
예제 #3
0
파일: functions.php 프로젝트: yonkon/diplom
/**
 * @param int $message_id Message id in TABLE_MESSAGES
 * @param string $receiver_email receiver's Email address
 * @param int $message_type тип сообщения, из набора EmailNotificationType::$NOTIFICATION_TYPES
 * @see EmailNotificationType
 * @return mixed
 */
function enqueue_message_to_email($message_id, $receiver_email, $notification_type)
{
    assert(in_array($notification_type, EmailNotificationType::$NOTIFICATION_TYPES));
    if (empty($receiver_email)) {
        return false;
    }
    if (!EmailNotificationType::isPersistable($notification_type)) {
        return false;
    }
    return EmailNotification::create(array('message_id' => $message_id, 'receiver_email' => $receiver_email, 'type' => $notification_type));
}
예제 #4
0
파일: functions.php 프로젝트: yonkon/diplom
function assign_order_to_manager($Frm, $Err)
{
    if (!$Err) {
        $order_id = $Frm->GetNmValueI("order_id");
        $manager_id = $Frm->GetNmValueI("manager_id");
        Order::update($order_id, array('manager_id' => $manager_id));
        $do_msg = \Components\Entity\EmailNotificationType::isPersistable(\Components\Entity\EmailNotification::TO_MANAGERS_ON_MANAGER_CHANGE);
        if ($do_msg) {
            $message_id = mls_Send("u" . $manager_id, "u" . $_SESSION["user"]["data"]["id"], "На вас назначен заказ №" . $order_id, "На вас назначен заказ №" . $order_id, 1, 0);
            Author::enqueue_message_to_email($message_id, array($manager_id), \Components\Entity\EmailNotification::TO_MANAGERS_ON_MANAGER_CHANGE);
        }
        $old_manager_id = $Frm->GetNmValueI("old_manager_id");
        if ($do_msg && $old_manager_id != 0) {
            $message_id = mls_Send("u" . $old_manager_id, "u" . $_SESSION["user"]["data"]["id"], "Вы сняты с заказа №" . $order_id, "Вас сняли с заказа №" . $order_id . "<br>Причина: " . $Frm->GetNmValueH("reason"), 1, 0);
            Author::enqueue_message_to_email($message_id, array($old_manager_id), \Components\Entity\EmailNotification::TO_MANAGERS_ON_MANAGER_CHANGE);
        }
        $txt = "Заказ закреплен";
        if ($do_msg) {
            $txt .= ", уведомления отправлены";
        }
        $Frm->_gui->OK($txt);
        page_reloadAll();
    }
}