Отправка писем менеджерам в зависимости от домена
Если на одной UMI.CMS создается два Интернет магазина, то вполне возможно, что в обработке поступающих заказов на сайт будут принимать участие два менеджера. И необходимо, чтобы в зависимости от того на каком домене был произведен заказ, письмо с уведомлением приходило одному или другому менеджеру. Для реализации описанной выше задачи воспользуемся событием order-status-changed и уже существующим кодом метода sendManagerNotification. В папке classes/modules/emarket/ создадим файл custom_events.php следующего содержания:
<?php new umiEventListener('order-status-changed', 'emarket', 'onStatusChangedDomain'); ?>
Само событие прописано в методе setOrderStatus (order.php):
$event = new umiEventPoint('order-status-changed');
$event->addRef('order', $this);
$event->setParam('old-status-id', $oldStatusId);
$event->setParam('new-status-id', $newStatusId);
...
$event->setMode('after');
$event->call();
В файле classes/modules/emarket/__custom.php, после слов //TODO: Write here your own macroses добавим следующий метод:
public function onStatusChangedDomain(iUmiEventPoint $event) {
if($event->getMode() == "after" &&
$event->getParam("old-status-id") != $event->getParam("new-status-id")) {
$order = $event->getRef("order");
$statusId = $order->getValue("status_id");
$codeName = order::getCodeByStatus($statusId);
if($codeName != 'waiting') return;
$regedit = regedit::getInstance();
$domain_name = $order->domain_id;
$domain_id = domainsCollection::getInstance()->getDomainId($domain_name);
$mail_arr = array();
// Индекс элемента массива должен быть равен id домена
$mail_arr['1'] = array('umi1@umi.ru');
$mail_arr['2'] = array('umi2@umi.ru', 'umi3@umi.ru');
$xslTemplater = xslTemplater::getInstance();
$xslInited = $xslTemplater->setIsInited(false);
list($template) = def_module::loadTemplates("tpls/emarket/mail/default.tpl", "neworder_notification");
try {
$payment = payment::get($order->payment_id);
$paymentName = $payment->name;
$paymentStatus = order::getCodeByStatus($order->getPaymentStatus());
} catch(coreException $e) {
$paymentName = "";
$paymentStatus = "";
}
$content = def_module::parseTemplate($template, array("order_id" => $order->id,
"order_name" => $order->name,
"order_number" => $order->number,
"payment_type" => $paymentName,
"payment_status" => $paymentStatus,
"price" => $order->getActualPrice(),
));
$langs = cmsController::getInstance()->langs;
foreach($mail_arr[$domain_id] as $email){
$letter = new umiMail();
$letter->addRecipient($email);
$letter->setFrom($regedit->getVal('//modules/emarket/from-email'),
$regedit->getVal('//modules/emarket/from-name'));
$letter->setSubject($langs['notification-neworder-subject'] . " (#{$order->number})");
$letter->setContent($content);
$letter->commit();
$letter->send();
$xslTemplater->setIsInited($xslInited);
}
}
}
В методе прописаны следующие строки:
// Индекс элемента массива должен быть равен id домена $mail_arr['1'] = array('umi1@umi.ru'); $mail_arr['2'] = array('umi2@umi.ru', 'umi3@umi.ru');
их необходимо отредактировать под вашу задачу, прописав электронные адреса для каждого id домена. Узнать id доменов можно по следующей ссылке: _http://ваш_сайт/admin/config/domains/.xml
В итоге, в зависимости от того на каком сайте был оформлен заказ, письма будут приходить определенным менеджерам.