Уведомления при заказе группам пользователей

Материал из 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