• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_destination.php
  • Класс: CSocNetLogDestination
  • Вызов: CSocNetLogDestination::getSocnetGroup
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;
}