• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/componenthelper.php
  • Класс: BitrixSocialnetworkComponentHelper
  • Вызов: ComponentHelper::getSonetGroupAvailable
static function getSonetGroupAvailable($params = array(), &$limitReached = false)
{
	global $USER;

	$currentUserId = $USER->getId();
	$limit = (isset($params['limit']) && (int)$params['limit'] > 0 ? (int)$params['limit'] : 500);
	$useProjects = (!empty($params['useProjects']) && $params['useProjects'] === 'Y' ? 'Y' : 'N');
	$siteId = (!empty($params['siteId']) ? $params['siteId'] : SITE_ID);
	$landing = (!empty($params['landing']) && $params['landing'] === 'Y' ? 'Y' : '');

	$currentCache = BitrixMainDataCache::createInstance();

	$cacheTtl = defined("BX_COMP_MANAGED_CACHE") ? 3153600 : 3600*4;
	$cacheId = 'dest_group_'.$siteId.'_'.$currentUserId.'_'.$limit.$useProjects.$landing;
	$cacheDir = '/sonet/dest_sonet_groups/'.$siteId.'/'.$currentUserId;

	if($currentCache->startDataCache($cacheTtl, $cacheId, $cacheDir))
	{
		global $CACHE_MANAGER;

		$limitReached = false;

		$filter = [
			'features' => array("blog", array("premoderate_post", "moderate_post", "write_post", "full_post")),
			'limit' => $limit,
			'useProjects' => $useProjects,
			'site_id' => $siteId,
		];

		if ($landing === 'Y')
		{
			$filter['landing'] = 'Y';
		}

		$groupList = CSocNetLogDestination::getSocnetGroup($filter, $limitReached);

		if(defined("BX_COMP_MANAGED_CACHE"))
		{
			$CACHE_MANAGER->startTagCache($cacheDir);
			foreach($groupList as $group)
			{
				$CACHE_MANAGER->registerTag("sonet_features_G_".$group["entityId"]);
				$CACHE_MANAGER->registerTag("sonet_group_".$group["entityId"]);
			}
			$CACHE_MANAGER->registerTag("sonet_user2group_U".$currentUserId);
			if ($landing === 'Y')
			{
				$CACHE_MANAGER->registerTag("sonet_group");
			}
			$CACHE_MANAGER->endTagCache();
		}
		$currentCache->endDataCache(array(
			'groups' => $groupList,
			'limitReached' => $limitReached
		));
	}
	else
	{
		$tmp = $currentCache->getVars();
		$groupList = $tmp['groups'];
		$limitReached = $tmp['limitReached'];
	}

	if (
		!$limitReached
		&& CSocNetUser::isCurrentUserModuleAdmin()
	)
	{
		$limitReached = true;
	}

	return $groupList;
}