- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/lib/helper/workgroup.php
- Класс: BitrixSocialnetworkHelperWorkgroup
- Вызов: Workgroup::setModerators
static function setModerators(array $fields = []): bool
{
$groupId = (int)($fields['groupId'] ?? 0);
$userIds = array_map('intval', array_filter($fields['userIds'] ?? []));
if ($groupId <= 0)
{
throw new ArgumentException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_WRONG_GROUP_ID'));
}
$currentUserId = User::getCurrentUserId();
$isCurrentUserModuleAdmin = static::isCurrentUserModuleAdmin();
$groupPerms = static::getPermissions(['groupId' => $groupId]);
if (!$groupPerms || (!$groupPerms['UserCanModifyGroup'] && !$isCurrentUserModuleAdmin))
{
throw new AccessDeniedException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_NO_PERMS'));
}
$currentModeratorRelations = static::getCurrentModeratorRelations($groupId);
$moderatorsToAdd = array_diff($userIds, array_keys($currentModeratorRelations));
$moderatorsToRemove = array_diff_key($currentModeratorRelations, array_fill_keys($userIds, true));
if (!empty($moderatorsToRemove))
{
CSocNetUserToGroup::TransferModerator2Member(
$currentUserId,
$groupId,
$moderatorsToRemove
);
}
if (!empty($moderatorsToAdd))
{
[$ownerRelations, $memberRelations, $otherRelations] = static::getUserRelations($groupId, $moderatorsToAdd);
if (!empty($memberRelations))
{
CSocNetUserToGroup::transferMember2Moderator(
$currentUserId,
$groupId,
$memberRelations
);
}
$moderatorsToAdd = array_diff($moderatorsToAdd, array_keys($memberRelations), array_keys($ownerRelations));
foreach ($moderatorsToAdd as $userId)
{
if (array_key_exists($userId, $otherRelations))
{
$relationId = static::transferToModerators($otherRelations[$userId]);
}
else
{
$relationId = static::addToModerators($userId, $groupId);
}
if ($relationId)
{
static::sendNotifications($userId, $groupId, $relationId);
}
}
}
return true;
}