• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/component/userprofile/grats.php
  • Класс: BitrixIntranetComponentUserProfileGrats
  • Вызов: Grats::getGratitudes
public function getGratitudes()
{
	global $CACHE_MANAGER;

	$result = array();

	if(
		(
			!Loader::includeModule("extranet")
			|| CExtranet::isIntranetUser(SITE_ID, $this->getProfileId())
		)
		&& Loader::includeModule("iblock")
	)
	{
		$badgesData = array();

		$cache = new CPHPCache;
		$cacheTime = (defined("BX_COMP_MANAGED_CACHE") ? 2592000 : 600);
		$cacheId = $this->getProfileId();
		$cachePath = "/user_grat_".intval($this->getProfileId() / TAGGED_user_card_size);

		if ($cache->initCache($cacheTime, $cacheId, $cachePath))
		{
			$vars = $cache->getVars();
			$badgesData = $vars['BADGES_DATA'];
			$postIdList = $vars['POSTS_ID'];
			$authorsList = $vars['AUTHORS_DATA'];
		}
		else
		{
			$cache->startDataCache($cacheTime, $cacheId, $cachePath);
			if (defined("BX_COMP_MANAGED_CACHE"))
			{
				$CACHE_MANAGER->startTagCache($cachePath);
				$CACHE_MANAGER->registerTag("BLOG_POST_GRATITUDE_TO_".$this->getProfileId());
			}

			$badgesData = [];
			$iblockElementsIdList = [];
			$authorsList = [];

			if (Loader::includeModule('socialnetwork'))
			{
				$gratitudesData = BitrixSocialnetworkComponentLogList::getGratitudesIblockData([
					'userId' => $this->getProfileId()
				]);
				$badgesData = $gratitudesData['BADGES_DATA'];
				$iblockElementsIdList = $gratitudesData['ELEMENT_ID_LIST'];
			}

			$authorsIdList = [];
			$postIdList = [];
			if (!empty($iblockElementsIdList))
			{
				$gratitudesData = BitrixSocialnetworkComponentLogList::getGratitudesBlogData([
					'iblockElementsIdList' => $iblockElementsIdList
				]);
				$iblockElementsIdList = $gratitudesData['ELEMENT_ID_LIST'];
				$authorsIdList = $gratitudesData['AUTHOR_ID_LIST'];
				$postIdList = $gratitudesData['POST_ID_LIST'];
			}

			foreach($badgesData as $badgeEnumId => $badgeData)
			{
				foreach($badgeData['ID'] as $key => $elementId)
				{
					if (in_array($elementId, $iblockElementsIdList))
					{
						$badgesData[$badgeEnumId]['COUNT']++;
					}
					else
					{
						unset($badgesData[$badgeEnumId]['ID'][$key]);
					}
				}
				$badgesData[$badgeEnumId]['ID'] = array_values($badgesData[$badgeEnumId]['ID']);
			}

			if (!empty($authorsIdList))
			{
				$res = BitrixMainUserTable::getList(array(
					'filter' => array(
						'@ID' => $authorsIdList,
					),
					'select' => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'PERSONAL_PHOTO')
				));
				while($userFields = $res->fetch())
				{
					$authorsList[$userFields['ID']] = array_merge($userFields, array(
						'NAME_FORMATTED' => CUser::formatName(CSite::getNameFormat(), $userFields, true, false),
						'PHOTO' => BitrixIntranetComponentUserProfile::getUserPhoto($userFields["PERSONAL_PHOTO"], 100),
						'URL' => CComponentEngine::makePathFromTemplate($this->getPathToUser(), array('user_id' => $userFields['ID']))
					));
				}
			}

			if(defined("BX_COMP_MANAGED_CACHE"))
			{
				$CACHE_MANAGER->EndTagCache();
			}

			$cache->endDataCache(array(
				'BADGES_DATA' => $badgesData,
				'POSTS_ID' => $postIdList,
				'AUTHORS_DATA' => $authorsList
			));
		}

		$result = array(
			'BADGES' => $badgesData,
			'POSTS_ID' => $postIdList,
			'AUTHORS' => $authorsList
		);
	}

	return $result;
}