Цитата |
---|
Владислав Голубев написал:
Цитата |
---|
[ex2-t4-8] Уведомление при добавления пользователя в группу |
Есть ещё CUser::SetUserGroup, но по нему есть только событие OnAfterSetUserGroup, т.е. отловить какие группы добавились, а какие удалились не возможно. Получается задача в полном объёме не решаема. |
Имхо, для решения конкретно этого задания достаточно использовать одну функцию-обработчик на события OnBeforeUserAdd и OnBeforeUserUpdate:
1. Проверяем массив $arFields на наличие ключа "GROUP_ID"
2. Если есть, проверяем по этому ключу наличие нужной нам группы
3. Если есть, получаем ID и EMAIL всех пользователей, входящих в эту группу ($arUsers формата "ID" => "EMAIL")
4. При наличии в $arFields поля "ID" (именно так мы определим, что происходит обновление, а не добавление нового пользака) исключим изменяемого пользака из рассылки. Есть два варианта, либо на шаге 3 указать в фильтре "!ID" => $arFields["ID"] или же после шага 3 исключаем текущего пользака из массива unset($arUsers[$arFields["ID"]]); Ни тот ни другой способ запросов к базе не увеличит, поэтому оба безобидны.
5. Формируем строку c email получателей обычным implode()
6. Отправляем уведомлялку
p.s. минусы, которые я вижу - что события onBefore не гарантируют нам успешность выполнения, но этот вопрос уже поднимался, в рамках экзамена на это внимание обращать не стоит.
p.p.s. Что вы имели в виду под "Получается задача в полном объёме не решаема." ? Возможно я что-то упустил - укажите на ошибку?