Уведомления при заказе группам пользователей — различия между версиями
Материал из Umicms
Alexei (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9.5''' Задача - при оформлении заказа отправлять уведомления всем по…») |
Mad grant (обсуждение | вклад) м (переименовал «Отправление уведомления при заказе определенным группам пользователей» в «[[Уведомления при заказе группам пользователе) |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
'''Актуально для версии 2.9.5''' | '''Актуально для версии 2.9.5''' | ||
− | Задача | + | '''Задача''' |
− | Решение | + | При оформлении заказа отправлять уведомления всем пользователям, которые входят в определенные группы. |
+ | |||
+ | '''Решение''' | ||
+ | |||
+ | В файл classes/modules/emarket/__custom.php необходимо вставить следующий код: | ||
+ | <source lang="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(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | В переменную $manager_groups_id передаются id групп пользователей, которым нужно отправлять уведомление. После этого необходимо добавить событие | ||
+ | <source lang="php"> | ||
+ | <?php | ||
+ | new umiEventListener('order-status-changed', 'emarket', 'sendManagersNotifications'); | ||
+ | ?> | ||
+ | </source> | ||
+ | в файл classes/modules/emarket/custom_event.php | ||
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:API]][[Категория:Модуль Интернет магазин]] | [[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:API]][[Категория:Модуль Интернет магазин]] |
Текущая версия на 12:41, 31 марта 2014
Актуально для версии 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