Изменить настройки Мессенжера Битрикс 24

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Речь идет о коробке Битрикс 24

Задача была изменить дефолтные настройки Мессенжера ( по факту не только его ) у пользователей.

  1. Отключить отправку уведомлений на почту, по дефолту, у всех новых пользователей.

  2. Отключить чтобы при открытии чата в браузере не запускалось десктопное приложение. Причем даже если пользователь включит эту опцию она вернулась назад.

Храниться вся эта прелесть в таблице b_im_option_state в ней используются не ID пользователей а так называемых групп.
Таблица с этими группами b_im_option_group там уже есть привязка к Пользователю ( По факту 1 пользователь одна группа )

Настройки эти создаются только тогда - когда настройки были первый раз изменены. До этого видимо применяются значения по умолчанию в самих скриптах обработчиках
В стиле "В базе ничего нет, значит будет так..."

  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/


Интересные статьи

Интересные статьи

Привет! Меня зовут Сергей Востриков, я руковожу направлением Маркет и интеграций в Битрикс. Моя команда развивает решения для разработчиков тиражных решений и индивидуальных кастомизаций. Сегодня я хо...
В мире видеоигр эмуляторы стали настоящей находкой для поклонников классических проектов. PPSSPP — один из самых популярных эмуляторов для PlayStation Portable (PSP), который позволяет нам вновь окуну...
В данной статье мы рассмотрим правильный подход к Frontend разработки в Bitrix. А именно разделение на расширения которые сможем подключать в любой момент времени. + напишем SPA приложение на React.
Привет, Хабр! Меня зовут Макс Баюров, я PHP-разработчик в компании AGIMA. Мне хотелось бы поделиться с вами опытом расширения уровней доступа к функционалу сайта. Если вам еще не приходилось с этим ст...
Всем привет! Меня зовут Ульяна, я тестирую сервисы Selectel. На Хабре уже не одна компания рассказывала о том, как у них устроена система тестирования новых продуктов и фич. Интересно, что, несмотря...