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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «'''Актуально для версии 2.9.5''' Задача - при оформлении заказа отправлять уведомления всем по…»)
 
м (переименовал «Отправление уведомления при заказе определенным группам пользователей» в «[[Уведомления при заказе группам пользователе)
 
(не показаны 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