• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/helper/workgroup.php
  • Класс: BitrixSocialnetworkHelperWorkgroup
  • Вызов: Workgroup::setScrumMaster
static function setScrumMaster(array $fields = []): bool
{
	$groupId = (int)($fields['groupId'] ?? 0);
	$newScrumMasterId = (int)($fields['userId'] ?? 0);
	$currentUserId = User::getCurrentUserId();

	if ($groupId <= 0)
	{
		throw new ArgumentException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_WRONG_GROUP_ID'));
	}

	if ($newScrumMasterId <= 0)
	{
		throw new ArgumentException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_WRONG_USER_ID'));
	}

	if (!HelperWorkgroupAccess::canSetScrumMaster([
		'userId' => $newScrumMasterId,
		'groupId' => $groupId,
	]))
	{
		throw new AccessDeniedException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_NO_PERMS'));
	}

	if (!CSocNetGroup::Update($groupId, [
		'SCRUM_MASTER_ID' => $newScrumMasterId,
	]))
	{
		throw new Exception(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_FAILED'), 100);
	}

	$relation = UserToGroupTable::getList([
		'filter' => [
			'USER_ID' => $newScrumMasterId,
			'GROUP_ID' => $groupId,
		],
		'select' => [ 'ID', 'ROLE' ]
	])->fetchObject();

	if ($relation)
	{
		if (
			!in_array($relation->getRole(), [UserToGroupTable::ROLE_OWNER, UserToGroupTable::ROLE_MODERATOR], true)
			&& !CSocNetUserToGroup::Update($relation->getId(), [
				'ROLE' => UserToGroupTable::ROLE_MODERATOR,
			])
		)
		{
			throw new Exception(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_FAILED'), 100);
		}
	}
	else
	{
		static $helper = null;
		if (!$helper)
		{
			$connection = Application::getConnection();
			$helper = $connection->getSqlHelper();
		}

		if (!CSocNetUserToGroup::Add([
			'AUTO_MEMBER' => 'N',
			'USER_ID' => $newScrumMasterId,
			'GROUP_ID' => $groupId,
			'ROLE' => UserToGroupTable::ROLE_MODERATOR,
			'INITIATED_BY_TYPE' => UserToGroupTable::INITIATED_BY_GROUP,
			'INITIATED_BY_USER_ID' => $currentUserId,
			'=DATE_CREATE' => $helper->getCurrentDateTimeFunction(),
			'=DATE_UPDATE' => $helper->getCurrentDateTimeFunction(),
		]))
		{
			throw new RuntimeException(Loc::getMessage('SOCIALNETWORK_HELPER_WORKGROUP_ERROR_OPERATION_FAILED'), 100);
		}
	}

	return true;
}