Речь идет о коробке Битрикс 24
Задача была изменить дефолтные настройки Мессенжера (по факту не только его) у пользователей.
-
Отключить отправку уведомлений на почту, по дефолту, у всех новых пользователей.
-
Отключить чтобы при открытии чата в браузере не запускалось десктопное приложение. Причем даже если пользователь включит эту опцию она вернулась назад.
Храниться вся эта прелесть в таблице b_im_option_state в ней используются не ID пользователей а так называемых групп.
Таблица с этими группами b_im_option_group там уже есть привязка к Пользователю (По факту 1 пользователь одна группа).
Настройки эти создаются только тогда — когда настройки были первый раз изменены. До этого видимо применяются значения по умолчанию в самих скриптах обработчиках
В стиле «В базе ничего нет, значит будет так…»
-
Вешаем обработчик на событие создания пользователя.
use \Bitrix\Main\EventManager; // После добавления нового Пользователя EventManager::getInstance()->addEventHandler("main", "OnAfterUserAdd", function(&$arFields) { Loader::includeModule("im"); $userId = $arFields["ID"]; // Получаем массив со всеми настройками $userSettings = CIMSettings::Get($userId); // Меняем только нужный параметр $settings = $userSettings['settings']; // Выбираем общие настройки $settings['notifySchemeSendEmail'] = false; // Устанавливаем параметр // Сохраняем обратно $res = CIMSettings::Set( "settings", // Общие настройки $settings, $userId ); \CIMSettings::ClearCache($userId); });
2.Скрипт cron выполняющийся раз в день, устанавливает нужный параметр для всех новых пользователей и сбрасывает у всех кто его поменял. Можно было делать и через CIMSettings::Set. Но мне данный вариант понравился больше + хотел показать что можно и так. (Да, да в Битрикс работать с базой напрямую нельзя, мы про это помним … и скорбим).
$_SERVER["DOCUMENT_ROOT"] = "/home/bitrix/www"; require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); global $DB; $DB->Query(" UPDATE b_im_option_state SET VALUE = 'N' WHERE NAME = 'se|openDesktopFromPanel' AND VALUE = 'Y' ");
P.S. Кстати в новом мессенжере конкретно этой опции больше нет, в битрикс поняли что она тупая. Но пример я оставил, может кто будет так сносить другую настройку.
ссылка на оригинал статьи https://habr.com/ru/articles/940884/
Добавить комментарий