- Модуль: 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;
}