static function getSocnetGroup($arParams = array(), &$limitReached = false)
{
global $USER;
static $staticCache = array();
$userId = (int)$USER->GetID();
$arSocnetGroups = [];
$arSelect = [];
if (isset($arParams['id']))
{
if (empty($arParams['id']))
{
return $arSocnetGroups;
}
foreach ($arParams['id'] as $value)
{
$arSelect[] = intval($value);
}
}
$siteId = (
isset($arParams['site_id'])
&& $arParams['site_id'] <> ''
? $arParams['site_id']
: SITE_ID
);
$limit = (isset($arParams["limit"]) && intval($arParams["limit"]) > 0 ? intval($arParams["limit"]) : 500);
$hash = md5(serialize($arParams).$userId.$siteId);
if (isset($staticCache[$hash]))
{
$arSocnetGroups = $staticCache[$hash];
}
else
{
$arSocnetGroupsTmp = array();
$tmpList = array();
$extranetGroupsIdList = BitrixSocialnetworkComponentHelper::getExtranetSonetGroupIdList();
if (
!isset($arParams["ALL"])
|| $arParams["ALL"] !== "Y"
)
{
$filter = array(
"USER_ID" => $userId,
"GROUP_ID" => $arSelect,
"<=ROLE" => UserToGroupTable::ROLE_USER,
"GROUP_SITE_ID" => $siteId,
"GROUP_ACTIVE" => "Y"
);
if (
!empty($arParams['landing'])
&& $arParams['landing'] === 'Y'
)
{
$filter["GROUP_LANDING"] = $arParams['landing'];
}
if(isset($arParams['GROUP_CLOSED']))
{
$filter['GROUP_CLOSED'] = $arParams['GROUP_CLOSED'];
}
$res = CSocNetUserToGroup::getList(
array("GROUP_NAME" => "ASC"),
$filter,
false,
array("nTopCount" => $limit),
array("ID", "GROUP_ID", "GROUP_NAME", "GROUP_DESCRIPTION", "GROUP_IMAGE_ID", "GROUP_PROJECT")
);
while($relation = $res->fetch())
{
$tmpList[] = array(
"id" => $relation["GROUP_ID"],
"entityId" => $relation["GROUP_ID"],
"name" => htmlspecialcharsbx(Emoji::decode($relation["GROUP_NAME"])),
"desc" => htmlspecialcharsbx(Emoji::decode($relation["GROUP_DESCRIPTION"])),
"imageId" => $relation["GROUP_IMAGE_ID"],
"project" => ($relation["GROUP_PROJECT"] === 'Y' ? 'Y' : 'N'),
"isExtranet" => (in_array($relation["GROUP_ID"], $extranetGroupsIdList) ? 'Y' : 'N')
);
}
}
else
{
$filter = array(
"CHECK_PERMISSIONS" => $USER->GetID(),
"SITE_ID" => $siteId,
"ACTIVE" => "Y",
"ID" => $arSelect,
);
if(isset($arParams['GROUP_CLOSED']))
{
$filter['CLOSED'] = $arParams['GROUP_CLOSED'];
}
if(
!empty($arParams['landing'])
&& $arParams['landing'] === 'Y'
)
{
$filter['LANDING'] = $arParams['landing'];
}
$res = CSocnetGroup::getList(
array("NAME" => "ASC"),
$filter,
false,
array("nTopCount" => $limit),
array("ID", "NAME", "DESCRIPTION", "IMAGE_ID", "PROJECT")
);
while ($group = $res->Fetch())
{
$tmpList[] = array(
"id" => $group["ID"],
"entityId" => $group["ID"],
"name" => htmlspecialcharsbx(Emoji::decode($group["NAME"])),
"desc" => htmlspecialcharsbx(Emoji::decode($group["DESCRIPTION"])),
"imageId" => $group["IMAGE_ID"],
"project" => ($group["PROJECT"] === 'Y' ? 'Y' : 'N'),
"isExtranet" => (in_array($group["ID"], $extranetGroupsIdList) ? 'Y' : 'N')
);
}
}
$limitReached = (count($tmpList) == $limit);
foreach ($tmpList as $group)
{
if($group["imageId"])
{
$imageFile = CFile::GetFileArray($group["imageId"]);
if ($imageFile !== false)
{
$arFileTmp = CFile::ResizeImageGet(
$imageFile,
[
"width" => ((int) ($arParams["THUMBNAIL_SIZE_WIDTH"] ?? 0) > 0
? $arParams["THUMBNAIL_SIZE_WIDTH"]
: 100
),
"height" => ((int) ($arParams["THUMBNAIL_SIZE_HEIGHT"] ?? 0) > 0
? $arParams["THUMBNAIL_SIZE_HEIGHT"]
: 100
)
],
);
$group["avatar"] = $arFileTmp["src"];
}
}
unset($group["imageId"]);
$arSocnetGroupsTmp[$group['id']] = $group;
}
if (isset($arParams['features']) && !empty($arParams['features']))
{
self::getSocnetGroupFilteredByFeaturePerms($arSocnetGroupsTmp, $arParams['features']);
}
if (isset($arParams['initiate']) && $arParams['initiate'] === 'Y')
{
self::getSocnetGroupFilteredByInitiatePerms($arSocnetGroupsTmp);
}
foreach ($arSocnetGroupsTmp as $value)
{
$value['id'] = 'SG'.$value['id'];
$arSocnetGroups[$value['id']] = $value;
}
$staticCache[$hash] = $arSocnetGroups;
}
if (isset($arParams['useProjects']) && $arParams['useProjects'] === 'Y')
{
$groupsList = $projectsList = array();
foreach($arSocnetGroups as $key => $value)
{
if (
isset($value['project'])
&& $value['project'] === 'Y'
)
{
$projectsList[$key] = $value;
}
else
{
$groupsList[$key] = $value;
}
}
return array(
'SONETGROUPS' => $groupsList,
'PROJECTS' => $projectsList
);
}
return $arSocnetGroups;
}