Николай Савин

Николай Савин

Был в сети 29 июня 2026, 12:35
Заказы принимаю
Спасибо @Евгений Webinmd — он делает почти все самые важные вещи. А именно придумывает большинство идей, и ежедневно без выходных пинает меня, чтобы работал. По праздникам еще и сам присылает обновления (когда прислал, тогда и праздник)
Да верно. Мы заменяем хук email. Насчет хука FormItAutoResponder…
В сниппете send_email в список выполняемых хуков нужно просто добавить все нужные хуки.

Чтобы письма отправлялись в разное время, нужно просто перебрать email и каждому поставить свою задачу. Перепишем кусок поставновки задачи вот так:

// Перечисляем какие поля вы заполняете в сниппете, из тех что требуются для отправки писем
$fields = [
    'emailTo',
    'emailSubject',
    'successMessage',
    'fields'
];
$params = [];
foreach($fields as $key) {
    if (!empty($scriptProperties[$key])) {
        $params[$key] = $scriptProperties[$key];
    }
}

if ($task instanceof sTask) {
    $emails = $params['emailTo'];
    unset($params['emailTo']);
    $emails = array_map('trim', explode(',', $emails));
    foreach($emails as $email) {
        $params['emailTo'] = $email;
        // Здесь можете указать через какое время выполнить задание. 

        switch($email) {
            case 'bigboss@mail.ru':
                //   Этому отправляем сразу
                $task->schedule('+1 second', $params);
            case 'smallboss@mail.ru':
                //   Этому отправляем через 5 минут
                $task->schedule('+5 minutes', $params);
            break;
        }  
    }
   
}
Обратите внимание, я передаю в плагин через сессию идентификатор сессии, это связано с тем, что у меня на сайте авторизация происходит не через процессор, а с помощью метода addSessionContext(), который меняет id сессии, а нужен тот id, который был до авторизации. Возможно, при авторизации через процессор, такого не происходит, но я не проверял.
Процессор использует ровно тот же метод addSessionContext, добавляя еще проверку прав, запуск событий и т.п. Так что все идентично по факту. И да — addSessionContext меняет id сессии. Способа бороться с этим нет.
Я для себя делаю так

$_SESSION['prev_session_id'] = session_id();
$user->addSessionContext();
И далее запрос в базу избранного можно строить используя текущий обновленный session_id и одновременно старый из сессии.