• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/group.php
  • Класс: CAllSocNetGroup
  • Вызов: CAllSocNetGroup::getById
static function getById($id, $checkPermissions = false, array $options = [])
{
	global $USER, $CACHE_MANAGER;

	$id = (int)$id;

	if (!CSocNetGroup::__ValidateID($id))
	{
		return false;
	}

	$staticCacheKey = implode('_', array_merge([
		($checkPermissions ? 'Y' : 'N'),
	], $options));

	$sonetGroupCache = self::getStaticCache();

	if (
		is_array($sonetGroupCache)
		&& is_array(($sonetGroupCache[$id] ?? null))
		&& is_array(($sonetGroupCache[$id][$staticCacheKey] ?? null))
	)
	{
		return $sonetGroupCache[$id][$staticCacheKey];
	}

	$cache = false;
	$cachePath = false;

	if (!$checkPermissions)
	{
		$cache = new CPHPCache;
		$cacheTime = 31536000;
		$cacheId = implode('_', array_merge([
			'group',
			$id,
			LANGUAGE_ID,
			CTimeZone::getOffset(),
			Context::getCurrent()->getCulture()->getDateTimeFormat()
		], $options));
		$cachePath = '/sonet/group/' . $id . '/';
	}

	if (
		$cache
		&& $cache->initCache($cacheTime, $cacheId, $cachePath)
	)
	{
		$cacheVars = $cache->getVars();
		$result = $cacheVars['FIELDS'];
	}
	else
	{
		if ($cache)
		{
			$cache->startDataCache($cacheTime, $cacheId, $cachePath);
		}

		$filter = [
			'ID' => $id,
		];

		if (
			$checkPermissions
			&& is_object($USER)
			&& ($USER->GetID() > 0)
		)
		{
			$filter['CHECK_PERMISSIONS'] = $USER->getId();
		}

		$select = [
			"ID", "SITE_ID", "NAME", "DESCRIPTION", "DATE_CREATE", "DATE_UPDATE", "ACTIVE", "VISIBLE", "OPENED", "CLOSED", "SUBJECT_ID", "OWNER_ID", "KEYWORDS",
			'IMAGE_ID', 'AVATAR_TYPE',
			"NUMBER_OF_MEMBERS", "NUMBER_OF_MODERATORS",
			"INITIATE_PERMS", "SPAM_PERMS",
			"DATE_ACTIVITY", "SUBJECT_NAME", "UF_*",
		];
		if (ModuleManager::isModuleInstalled('intranet'))
		{
			$select = array_merge($select, [ "PROJECT", "PROJECT_DATE_START", "PROJECT_DATE_FINISH" ]);
		}
		if (ModuleManager::isModuleInstalled('landing'))
		{
			$select = array_merge($select, [ "LANDING" ]);
		}
		if (ModuleManager::isModuleInstalled('tasks'))
		{
			$select = array_merge($select, [ "SCRUM_OWNER_ID", "SCRUM_MASTER_ID", "SCRUM_SPRINT_DURATION", "SCRUM_TASK_RESPONSIBLE" ]);
		}
		$res = CSocNetGroup::getList(
			[],
			$filter,
			false,
			false,
			$select
		);
		if ($result = $res->getNext())
		{
			if (
				defined('BX_COMP_MANAGED_CACHE')
				&& $cache
			)
			{
				$CACHE_MANAGER->StartTagCache($cachePath);
				$CACHE_MANAGER->RegisterTag('sonet_group_' . $id);
				$CACHE_MANAGER->RegisterTag('sonet_group');
			}

			if (!empty($result['NAME']))
			{
				$result['NAME'] = Emoji::decode($result['NAME']);
			}
			if (!empty($result['DESCRIPTION']))
			{
				$result['DESCRIPTION'] = Emoji::decode($result['DESCRIPTION']);
			}

			$result['NAME_FORMATTED'] = $result['NAME'];

			if (($options['getSites'] ?? false))
			{
				$result['SITE_LIST'] = [];
				$res = CSocNetGroup::getSite($id);
				while ($groupSiteFields = $res->fetch())
				{
					$result['SITE_LIST'][] = $groupSiteFields['LID'];
				}
			}

			$result['SCRUM'] = (isset($result['SCRUM_MASTER_ID']) && (int)$result['SCRUM_MASTER_ID'] > 0 ? 'Y' : 'N');
			$result['SCRUM_PROJECT'] = $result['SCRUM'];
		}
		else
		{
			$result = false;
		}

		if ($cache)
		{
			$cacheData = [
				'FIELDS' => $result,
			];
			$cache->EndDataCache($cacheData);
			if (defined('BX_COMP_MANAGED_CACHE'))
			{
				$CACHE_MANAGER->EndTagCache();
			}
		}
	}

	if (!is_array($sonetGroupCache))
	{
		$sonetGroupCache = [];
	}
	if (
		!array_key_exists($id, $sonetGroupCache)
		|| !is_array($sonetGroupCache[$id])
	)
	{
		$sonetGroupCache[$id] = [];
	}
	$sonetGroupCache[$id][$staticCacheKey] = $result;

	self::setStaticCache($sonetGroupCache);

	return $result;
}