Разработка на 1С-Битрикс Михаил Базаров
Форум

Смена группы пользователя по информации из 1С для переключения типа цены

Вопросы и ответы по 1С-Битрикс, разборы реальных задач и обсуждение заметок блога. Задайте вопрос или помогите другим — все сообщения проходят модерацию.

Смена группы пользователя по информации из 1С для переключения типа цены

На сайте созданы две группы пользователей с доступом к разным типам цен: «Розничный покупатель» и «Оптовый покупатель». Принадлежность к оптовым покупателям может постоянно меняться; необходимо изменять группу пользователя  по информации из 1С:УТ.
Пример скрипта если вместо Y/N в HL блоке прямо указана группа в которой должен оказаться пользователь:
Код
Bitrix\Main\Loader::includeModule('highloadblock');

// HL блок с правом на спец цену
$entityDataClass = Bitrix\Highloadblock\HighloadBlockTable::compileEntity(
    Bitrix\Highloadblock\HighloadBlockTable::getById(8)->fetch()
)->getDataClass();

// Проходим по пользователям и получаем не админов
$arrStaff = Bitrix\Main\UserGroupTable::getList([
    'filter' => [
        'GROUP_ID' => [1, 7]
    ],
    'select' => [
        'USER_ID' // Нужен только ID пользователя
    ],
])->fetchAll();

// В $arrStaff ID админов и контент-менеджеров
$arrStaff = array_column($arrStaff, 'USER_ID');

// Получаем всех обычных пользователей
$UsersArray = Bitrix\Main\UserTable::getList([
    'filter' => [
        '!ID' => $arrStaff // Не админы и контентщики
    ],
    'select' => [
        'ID',
        'XML_ID' // Нужны только эти поля пользователей
    ]
])->fetchAll();

// Получаем все записи из HL блока для пользователей
$xmlIds = array_column($UsersArray, 'XML_ID');
$hlData = $entityDataClass::getList([
    'filter' => [
        'UF_KONTRAGENT' => $xmlIds
    ],
    'select' => [
        'UF_KONTRAGENT',
        'UF_GROUP_ID' // Предполагаем, что здесь хранится ID группы
    ]
])->fetchAll();

// Преобразуем данные HL блока в ассоциативный массив для быстрого доступа
$hlDataMap = [];
foreach ($hlData as $data) {
    $hlDataMap[$data['UF_KONTRAGENT']] = $data['UF_GROUP_ID'];
}

$user = new CUser; // объект для работы с пользователями

// Проходим по пользователям
foreach ($UsersArray as $userData) {
    // Массив для временного хранения и обнуления
    $arGroups = array();

    // Проверяем наличие записи в HL блоке
    if (isset($hlDataMap[$userData['XML_ID']])) {
        // Получаем ID группы из HL блока
        $groupId = $hlDataMap[$userData['XML_ID']];
        $arGroups['GROUP_ID'] = [$groupId]; // Устанавливаем группу пользователя
    } else {
        // Если записи нет, переводим в 5-ую группу по умолчанию
        $arGroups['GROUP_ID'] = [5]; // 5 - обычные пользователи
    }

    $user->Update(
        $userData['ID'],
        $arGroups
    );
}
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Загрузить файлы
 
Блог-note

Заметки по 1С-Битрикс