Уведомления при заказе группам пользователей
Материал из Umicms
Актуально для версии 2.9.5
Задача
При оформлении заказа отправлять уведомления всем пользователям, которые входят в определенные группы.
Решение
В файл classes/modules/emarket/__custom.php необходимо вставить следующий код:
public function sendManagersNotifications(iUmiEventPoint $event) {
if($event->getMode() == "after" && $event->getParam("old-status-id") != $event->getParam("new-status-id")) {
if ($event->getParam("new-status-id") == order::getStatusByCode('canceled') || $event->getParam("new-status-id") ==
order::getStatusByCode('rejected')) {
self::returnBonus($event->getRef("order")->getId());
}
$order = $event->getRef("order");
if($event->getParam("old-status-id") != $event->getParam("new-status-id")) {
if ($event->getParam("new-status-id") == order::getStatusByCode('ready')) {
$emarketTop = new emarketTop();
$emarketTop->addOrder($order);
}
if ($event->getParam("old-status-id") == order::getStatusByCode('ready')) {
$emarketTop = new emarketTop();
$emarketTop->delOrder($order);
}
}
$changedProperty = "status_id";
$order->need_export = true;
if($changedProperty == "status_id") {
$order->status_change_date = new umiDate();
}
if(order::getCodeByStatus($order->getPaymentStatus()) == "accepted" && !$order->delivery_allow_date) {
$sel = new selector('objects');
$sel->types('object-type')->name('emarket', 'delivery');
if($sel->length) {
$order->delivery_allow_date = new umiDate();
}
}
$statusId = $order->getValue($changedProperty);
$codeName = order::getCodeByStatus($statusId);
if($changedProperty == 'status_id' && $codeName == 'waiting') {
$regedit = regedit::getInstance();
$letter = new umiMail();
$cmsController = cmsController::getInstance();
$domains = domainsCollection::getInstance();
$domainId = $cmsController->getCurrentDomain()->getId();
$defaultDomainId = $domains->getDefaultDomain()->getId();
$langs = cmsController::getInstance()->langs;
$manager_groups_id = array(1,892);
$users = new selector('objects');
$users->types('object-type')->name('users', 'user');
$users->where('groups')->equals($manager_groups_id);
foreach($users as $user){
$letter->addRecipient($user->getValue('e-mail'));
}
if ($regedit->getVal("//modules/emarket/from-email/{$domainId}")) {
$fromMail = $regedit->getVal("//modules/emarket/from-email/{$domainId}");
$fromName = $regedit->getVal("//modules/emarket/from-name/{$domainId}");
} elseif ($regedit->getVal("//modules/emarket/from-email/{$defaultDomainId}")) {
$fromMail = $regedit->getVal("//modules/emarket/from-email/{$defaultDomainId}");
$fromName = $regedit->getVal("//modules/emarket/from-name/{$defaultDomainId}");
} else {
$fromMail = $regedit->getVal("//modules/emarket/from-email");
$fromName = $regedit->getVal("//modules/emarket/from-name");
}
list($template) = def_module::loadTemplatesForMail("emarket/mail/default", "neworder_notification");
try {
$payment = payment::get($order->payment_id);
$paymentName = $payment->name;
$paymentStatus = order::getCodeByStatus($order->getPaymentStatus());
} catch(coreException $e) {
$paymentName = "";
$paymentStatus = "";
}
$param = array();
$param["order_id"] = $order->id;
$param["order_name"] = $order->name;
$param["order_number"] = $order->number;
$param["payment_type"] = $paymentName;
$param["payment_status"] = $paymentStatus;
$param["price"] = $order->getActualPrice();
$param["domain"] = cmsController::getInstance()->getCurrentDomain()->getCurrentHostName();
$content = def_module::parseTemplateForMail($template, $param);
$letter->setFrom($fromMail, $fromName);
$letter->setSubject($langs['notification-neworder-subject'] . " (#{$order->number})");
$letter->setContent($content);
$letter->commit();
$letter->send();
}
}
}
В переменную $manager_groups_id передаются id групп пользователей, которым нужно отправлять уведомление. После этого необходимо добавить событие
<?php
new umiEventListener('order-status-changed', 'emarket', 'sendManagersNotifications');
?>
в файл classes/modules/emarket/custom_event.php