Убираем лишнее из ЖЛ
Живая лента — действительно очень клёвая штука для отслеживания рабочей активности. Но иногда приходят они — Обновления. И что-то начинает работать не так, как хотелось бы:-) В этот раз, например, пришло нововведение в модуле соцсетей (12.5.2
*) с изменённой логикой вывода уведомлений задач в живую ленту. Если ранее записи попадали только в ленту пользователей, причастных к этой задаче, то теперь список получателей расширен в соответствии с настройкой группы:

У нас, например, любой сотрудник по умолчанию может посмотреть задачи любой открытой группы без вступления в неё. В итоге получилось, что в ЖЛ стали попадать совершенно чужие задачи из всех групп. С одной стороны, вполне логично, с другой — неудобно. На помощь, как всегда, пришло событие — socialnetwork.OnBeforeSocNetLogRightsAdd. Оно позволяет убрать «лишние» права с уведомлений и вернуть всё как было ранее. Конкретно наш кейс решается следующим обработчиком:
static public function disableNotificationForAllUsers($logId, $groupCode)
{
static $arLogEntry;
if (empty($logId)) {
return;
}
if ($arLogEntry['ID'] != $logId) {
$arLogEntry = CSocNetLog::GetByID($logId);
}
// Проверка типа записи - нужна задача из группы
if (!($arLogEntry['EVENT_ID'] == 'tasks' && $arLogEntry['ENTITY_TYPE'] == 'G')) {
return;
}
// "Авторизованные пользователи"
if ($groupCode == 'AU') {
return false;
}
} |
После создания любой записи в ЖЛ на неё назначаются права, которые и можно ограничить в событии, возвращая false в нужные моменты (обработчик вызывается для каждого права доступа отдельно). Таким же образом можно не выводить новые статьи в открытых вики групп для всех пользователей, убирать системные уведомления (например, «пользователь вступил в группу» — кейс из жизни, у клиента ими порой вся страница забита) и т.п.
* версия, конечно, не такая и свежая — ещё от конца апреля, но мы не ставим сразу каждый апдейт, если всё хорошо работает.
Назад в раздел