• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/handlers.php
  • Класс: CIntranetEventHandlers
  • Вызов: CIntranetEventHandlers::ClearSingleUserCache
static function ClearSingleUserCache($arFields)
{
	if (!defined('BX_COMP_MANAGED_CACHE') || !BX_COMP_MANAGED_CACHE) return true;

	global $CACHE_MANAGER;

	$dbRes = CUser::GetList(
		"id", "asc",
		array("ID_EQUAL_EXACT" => intval($arFields['ID'])),
		array('SELECT' => array('UF_DEPARTMENT'))
	);

	$arRecacheFields = array('ACTIVE', 'LAST_NAME');

	$bRecache = false;
	if ($arOldFields = $dbRes->Fetch())
	{
		if (
			isset($arFields['PERSONAL_BIRTHDAY'])
			&& $arOldFields['PERSONAL_BIRTHDAY'] != $arFields['PERSONAL_BIRTHDAY']
		)
			$CACHE_MANAGER->ClearByTag("intranet_birthday");

		if (
			isset($arFields['UF_DEPARTMENT'])
			&& is_array($arFields['UF_DEPARTMENT'])
			&& $arFields['UF_DEPARTMENT'] != $arOldFields['UF_DEPARTMENT']
		)
		{
			if (!is_array($arOldFields['UF_DEPARTMENT']))
				$arOldFields['UF_DEPARTMENT'] = array();

			$arDepts = array_merge($arFields['UF_DEPARTMENT'], $arOldFields['UF_DEPARTMENT']);
			if(count($arDepts) > 0)
			{
				$CACHE_MANAGER->ClearByTag('intranet_department_structure');

				foreach ($arDepts as $dpt)
				{
					$CACHE_MANAGER->ClearByTag('intranet_department_'.$dpt);
				}
			}
		}

		foreach ($arRecacheFields as $fld)
		{
			if (isset($arFields[$fld]) && $arOldFields[$fld] != $arFields[$fld])
			{
				$bRecache = true;
				break;
			}
		}
	}

	$fieldsForClearComposite = [
		"NAME", "LAST_NAME", "SECOND_NAME", "ACTIVE", "LOGIN", "EMAIL", "PERSONAL_GENDER", "PERSONAL_PHOTO",
		"WORK_POSITION", "PERSONAL_PROFESSION", "PERSONAL_WWW", "PERSONAL_BIRTHDAY", "TITLE",
		"EXTERNAL_AUTH_ID", "UF_DEPARTMENT", "AUTO_TIME_ZONE", "TIME_ZONE", "TIME_ZONE_OFFSET"
	];

	$clearComposite = false;
	foreach ($fieldsForClearComposite as $code)
	{
		if (isset($arFields[$code]) && $arOldFields[$code] != $arFields[$code])
		{
			$clearComposite = true;
			break;
		}
	}

	if ($clearComposite && CHTMLPagesCache::IsOn())
	{
		BitrixIntranetCompositeCacheProvider::deleteUserCache(intval($arFields['ID']));
	}

	if ($bRecache)
		CIntranetEventHandlers::ClearAllUsersCache($arFields['ID']);
	else
		$CACHE_MANAGER->ClearByTag("intranet_user_".$arFields['ID']);

	return true;
}