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