• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/rest.php
  • Класс: CSocNetLogRestService
  • Вызов: CSocNetLogRestService::createGroup
static function createGroup($fields)
{
	if (!is_array($fields))
	{
		throw new ArgumentTypeException('Incorrect input data');
	}

	foreach ($fields as $key => $value)
	{
		if (in_array(mb_substr($key, 0, 1), [ '~', '=' ]))
		{
			unset($fields[$key]);
		}
	}

	if (isset($fields['IMAGE_FILE_ID']) && Loader::includeModule('disk'))
	{
		if (
			(($imageFileId = (int)$fields['IMAGE_FILE_ID']) > 0)
			&& ($file = File::loadById($imageFileId))
			&& $file->canRead($file->getStorage()->getSecurityContext(self::getCurrentUserId()))
		)
		{
			$image = CFile::MakeFileArray($file->getFileId());
			$image['del'] = 'N';
			CFile::ResizeImage($image, ['width' => 300, 'height' => 300]);
			$fields['IMAGE_ID'] = $image;

			unset($fields['IMAGE']);
		}
		else
		{
			unset($fields['IMAGE_FILE_ID']);
		}
	}

	if (isset($fields['IMAGE']))
	{
		$fields['IMAGE_ID'] = CRestUtil::saveFile($fields['IMAGE']);
		if (!$fields['IMAGE_ID'])
		{
			unset($fields['IMAGE_ID']);
		}
		unset($fields['IMAGE']);
	}

	if (!isset($fields['SITE_ID']))
	{
		$siteIdForCheck = SITE_ID;
		$fields['SITE_ID'] = [ $siteIdForCheck ];
	}
	elseif (!is_array($fields['SITE_ID']))
	{
		$siteIdForCheck = ((string)$fields['SITE_ID'] === '' ? SITE_ID : $fields['SITE_ID']);
		$fields['SITE_ID'] = [ $siteIdForCheck ];
	}
	else
	{
		$siteIdForCheck = $fields['SITE_ID'][0];
	}

	if (
		Loader::includeModule('extranet')
		&& !CExtranet::isIntranetUser()
	)
	{
		$siteIdForCheck = self::getExtranetSiteId();
		$fields['SITE_ID'][] = $siteIdForCheck;
		$fields['VISIBLE'] = 'N';
		$fields['OPENED'] = 'N';
	}

	if (!BitrixSocialnetworkHelperWorkgroup::canCreate([
		'siteId' => $siteIdForCheck,
		'checkAdminSession' => false,
	]))
	{
		throw new AccessDeniedException('You have no permissions to create a group');
	}

	if (
		!is_set($fields, "SUBJECT_ID")
		|| (int)$fields["SUBJECT_ID"] <= 0
	)
	{
		$rsSubject = CSocNetGroupSubject::GetList(
			array("SORT" => "ASC"),
			array("SITE_ID" => $fields["SITE_ID"]),
			false,
			false,
			array("ID")
		);
		if ($arSubject = $rsSubject->Fetch())
		{
			$fields["SUBJECT_ID"] = $arSubject["ID"];
		}
	}

	$initiatePerms = [
		UserToGroupTable::ROLE_OWNER,
		UserToGroupTable::ROLE_MODERATOR,
		UserToGroupTable::ROLE_USER,
	];
	if (
		!isset($fields['INITIATE_PERMS'])
		|| !in_array($fields['INITIATE_PERMS'], $initiatePerms, true)
	)
	{
		$isExtranetInstalled =  (
			ModuleManager::isModuleInstalled('intranet')
			&& ModuleManager::isModuleInstalled('extranet')
			&& !empty(Option::get('extranet', 'extranet_site'))
		);
		$isExtranet = (
			$isExtranetInstalled
			&& Loader::includeModule('extranet')
			&& CExtranet::IsExtranetSite()
		);

		$fields['INITIATE_PERMS'] = ($isExtranet ? UserToGroupTable::ROLE_MODERATOR : UserToGroupTable::ROLE_USER);
	}

	if (!empty($fields['PROJECT_DATE_START']))
	{
		$fields['PROJECT_DATE_START'] = CRestUtil::unConvertDate($fields['PROJECT_DATE_START']);
	}
	if (!empty($fields['PROJECT_DATE_FINISH']))
	{
		$fields['PROJECT_DATE_FINISH'] = CRestUtil::unConvertDate($fields['PROJECT_DATE_FINISH']);
	}

	$ownerId = (
		!empty($fields['OWNER_ID'])
		&& (int)$fields['OWNER_ID'] > 0
		&& self::isCurrentUserAdmin()
			? (int)$fields['OWNER_ID']
			: self::getCurrentUserId()
	);

	Workgroup::mutateScrumFormFields($fields);

	$groupId = CSocNetGroup::createGroup($ownerId, $fields, false);

	if ($groupId <= 0)
	{
		throw new SystemException('Cannot create group');
	}

	CSocNetFeatures::SetFeature(
		SONET_ENTITY_GROUP,
		$groupId,
		'files',
		true
	);

	if (
		isset($fields['GROUP_THEME_ID'])
		&& Loader::includeModule('intranet')
	)
	{
		$siteTemplateId = 'bitrix24';

		if ($themePicker = new ThemePicker($siteTemplateId, SITE_ID, self::getCurrentUserId(), ThemePicker::ENTITY_TYPE_SONET_GROUP, $groupId))
		{
			if (empty($fields['GROUP_THEME_ID']))
			{
				$themesList = $themePicker->getPatternThemes();
				$themePickerData = $themesList[array_rand($themesList)];
				$fields['GROUP_THEME_ID'] = $themePickerData['id'];
			}

			try
			{
				$themePicker->setCurrentThemeId($fields['GROUP_THEME_ID']);
				unset($themePicker);
			}
			catch (ArgumentException $exception)
			{

			}
		}
	}

	return $groupId;
}