- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/quickanswers/listsdatamanager.php
- Класс: BitrixImOpenlinesQuickAnswersListsDataManager
- Вызов: ListsDataManager::updateIblockRights
static function updateIblockRights($iblockId)
{
$storages = self::getStorageList();
if(intval($iblockId) <= 0)
{
return false;
}
if(isset($storages[$iblockId]))
{
$users = array();
$configManager = new Config();
$configs = $configManager->getList(array(
'filter' => array(
'QUICK_ANSWERS_IBLOCK_ID' => $iblockId,
),
), array('QUEUE' => 'Y'));
foreach($configs as $config)
{
$users = array_merge($users, $config['QUEUE']);
}
$rolePermissions = RolePermissionTable::getList([
'select' => [
'ROLE_ID'
],
'filter' => [
'=ENTITY' => Permissions::ENTITY_QUICK_ANSWERS,
'=ACTION' => Permissions::ACTION_MODIFY,
'=PERMISSION' => Permissions::PERMISSION_ANY,
]
])->fetchAll();
$roleIds = array_map(function ($item) {
return $item['ROLE_ID'];
}, $rolePermissions);
$roleAccessCodes = RoleAccessTable::getList([
'select' => [
'ACCESS_CODE'
],
'filter' => [
'ROLE_ID' => array_unique($roleIds)
]
])->fetchAll();
$accessCodes = array_map(function ($item) {
return $item['ACCESS_CODE'];
}, $roleAccessCodes);
$accessCodes = array_unique($accessCodes);
$departments = array();
// get all departments of the users
$usersData = UserTable::getList(array(
'select' => array('UF_DEPARTMENT'),
'filter' => array(
'=ID' => $users,
),
))->fetchAll();
foreach($usersData as $userData)
{
if(!is_array($userData['UF_DEPARTMENT']) && $userData['UF_DEPARTMENT'] > 0)
{
$departments[] = $userData['UF_DEPARTMENT'];
}
elseif (is_array($userData['UF_DEPARTMENT']))
{
$departments = array_merge($departments, $userData['UF_DEPARTMENT']);
}
}
$departments = array_unique($departments);
foreach($departments as $department)
{
$users[] = CIntranetUtils::GetDepartmentManagerID($department);
}
$users = array_unique($users);
$fields = array(
'RIGHTS_MODE' => 'E',
'RIGHTS' => self::getRights(self::RIGHTS_IBLOCK_FOR_LINE_QUEUE, $users, 0, $accessCodes)
);
$rightsManager = new CIBlockRights($iblockId);
$currentRights = $rightsManager->GetRights();
foreach($currentRights as $id => $right)
{
if($right['XML_ID'] != self::RIGHTS_XML_ID)
{
$fields['RIGHTS'][$id] = $right;
}
}
$iblock = new CIBlock();
$iblock->Update($iblockId, $fields);
return true;
}
return false;
}