• Модуль: 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;
}