События - подписка на рассылки при регистрации пользователя

Материал из Umicms
Версия от 09:24, 17 мая 2019; Vitaliks (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Задача

В форме регистрации пользователя добавить версткой поле типа чек-бокс, при установке которого будет происходить подписка на рассылки, для только что зарегистрировавшегося пользователя.

Решение

В форму регистрации добавим поле:

Подписаться на рассылки: <input type="checkbox"  name="autoSubscribe" />

В папку classes/modules/dispatches/ добавим файл permissions.custom.php:

<?php
  $permissions = Array('subscribe' => Array('autoSubscribe'));
?>

Потом, в эту же папку добавим файл custom_events.php следующего содержания:

<?php
new umiEventListener('users_registrate', 'dispatches', 'autoSubscribe'); 
?>

А в файл classes/modules/dispatches/__custom.php, после слов "//TODO: Write here your own macroses" метод autoSubscribe:

  public function autoSubscribe(umiEventPoint $event) {
    if ($event->getMode() == "after") {      
       $user_id  = $event->getParam('user_id');
       $objects = umiObjectsCollection::getInstance();
       $user = $objects->getObject($user_id);
       $email = $user->getValue('e-mail');
       $fname = $user->fname;
       $lname = $user->lname;
       if(getRequest("autoSubscribe")) {
	   return $subscriber_id = $this->import_subscriber($email, $fname, $lname);
	} else {
	   return false;
       }
    }
  }

этот метод использует событие users_registrate:

$oEventPoint = new umiEventPoint("users_registrate");
$oEventPoint->setMode("after");
$oEventPoint->setParam("user_id", $object_id);
$this->setEventPoint($oEventPoint);

которое находится в методе registrate_do(), файл classes/modules/users/__register.php.

Когда пользователь регистрируется, он сможет поставить галку для поля "Подписаться на рассылки", тогда после регистрации он автоматически подпишется на рассылки.