- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/lib/item/usertogroup.php
- Класс: BitrixSocialnetworkItemUserToGroup
- Вызов: UserToGroup::addModerators
static function addModerators($params = []): bool
{
global $USER;
$result = false;
if (
!is_array($params)
|| !isset($params['group_id'], $params['user_id'])
|| (int)$params['group_id'] <= 0
|| empty($params['user_id'])
)
{
return $result;
}
$groupId = (int)$params['group_id'];
$userIdList = (
is_array($params['user_id'])
? $params['user_id']
: [ $params['user_id'] ]
);
$currentUserId = (
isset($params['current_user_id'])
&& (int)$params['current_user_id'] > 0
? (int)$params['current_user_id']
: (
is_object($USER)
&& $USER->isAuthorized()
? $USER->getId()
: false
)
);
if (!$currentUserId)
{
return $result;
}
$ownerRelationIdList = [];
$memberRelationIdList = [];
$otherRelationIdList = [];
$resRelation = UserToGroupTable::getList([
'filter' => [
'GROUP_ID' => $groupId,
'@USER_ID' => $userIdList
],
'select' => [ 'ID', 'USER_ID', 'ROLE' ],
]);
while ($relation = $resRelation->fetch())
{
if ($relation['ROLE'] === UserToGroupTable::ROLE_USER)
{
$memberRelationIdList[$relation['USER_ID']] = $relation['ID'];
}
elseif ($relation['ROLE'] === UserToGroupTable::ROLE_OWNER)
{
$ownerRelationIdList[$relation['USER_ID']] = $relation['ID'];
}
else // ban, request
{
$otherRelationIdList[$relation['USER_ID']] = $relation['ID'];
}
}
if (!empty($memberRelationIdList))
{
CSocNetUserToGroup::transferMember2Moderator($currentUserId, $groupId, $memberRelationIdList);
}
foreach ($userIdList as $userId)
{
if (
!array_key_exists($userId, $memberRelationIdList)
&& !array_key_exists($userId, $ownerRelationIdList)
)
{
if (array_key_exists($userId, $otherRelationIdList))
{
$relationId = CSocNetUserToGroup::update($otherRelationIdList[$userId], [
'ROLE' => UserToGroupTable::ROLE_MODERATOR,
'=DATE_UPDATE' => CDatabase::CurrentTimeFunction(),
]);
}
else
{
$relationId = CSocNetUserToGroup::add([
'USER_ID' => $userId,
'GROUP_ID' => $groupId,
'ROLE' => UserToGroupTable::ROLE_MODERATOR,
'=DATE_CREATE' => CDatabase::CurrentTimeFunction(),
'=DATE_UPDATE' => CDatabase::CurrentTimeFunction(),
'MESSAGE' => '',
'INITIATED_BY_TYPE' => UserToGroupTable::INITIATED_BY_GROUP,
'INITIATED_BY_USER_ID' => $currentUserId,
'SEND_MAIL' => 'N',
]);
}
if ($relationId)
{
CSocNetUserToGroup::notifyModeratorAdded([
'userId' => $currentUserId,
'groupId' => $groupId,
'relationId' => $relationId
]);
}
}
}
return true;
}