• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_destination.php
  • Класс: CSocNetLogDestination
  • Вызов: CSocNetLogDestination::GetExtranetUser
static function GetExtranetUser(array $arParams = array())
{
	global $USER, $CACHE_MANAGER;

	static $resultCache = array();

	$userId = (int)$USER->getID();

	if(!isset($resultCache[$userId]))
	{
		$arUsers = Array();

		if (CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser())
		{
			$cacheTtl = 3153600;
			$cacheId = 'socnet_destination_getusers_'.md5(serialize($arParams)).'_'.$userId;
			$cacheDir = '/socnet/dest_extranet/' . (int)($userId / 100) . '/' . $userId . '/';

			$obCache = new CPHPCache;
			if($obCache->initCache($cacheTtl, $cacheId, $cacheDir))
			{
				$arUsers = $obCache->getVars();
			}
			else
			{
				$obCache->startDataCache();
				if(defined("BX_COMP_MANAGED_CACHE"))
				{
					$CACHE_MANAGER->StartTagCache($cacheDir);
				}

				if(defined("BX_COMP_MANAGED_CACHE"))
				{
					$CACHE_MANAGER->registerTag("sonet_user2group_U".$userId);
				}

				$workgroupIdList = [];
				$res = CSocNetUserToGroup::getList(
					array(),
					array(
						"USER_ID" => $userId,
						"<=ROLE" => SONET_ROLES_USER,
						"GROUP_SITE_ID" => 's1',
						"GROUP_ACTIVE" => "Y",
						"!GROUP_CLOSED" => "Y"
					),
					false,
					false,
					array("ID", "GROUP_ID")
				);
				while($relationFields = $res->fetch())
				{
					$workgroupIdList[] = (int)$relationFields["GROUP_ID"];
					if(defined("BX_COMP_MANAGED_CACHE"))
					{
						$CACHE_MANAGER->registerTag("sonet_user2group_G".$relationFields["GROUP_ID"]);
					}
				}

				$arUsers = [];

				if (!empty($workgroupIdList))
				{
					$arUsers = self::getUsersAll([
						'RETURN_FULL_LIST' => 'Y'
					]);

					if (defined("BX_COMP_MANAGED_CACHE"))
					{
						foreach($arUsers as $userData)
						{
							$CACHE_MANAGER->registerTag("USER_NAME_".(int)$userData['entityId']);
						}
					}
				}

				$obCache->endDataCache($arUsers);
			}
		}

		$resultCache[$userId] = $arUsers;
	}

	return $resultCache[$userId];
}