• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/handlers.php
  • Класс: CIntranetEventHandlers
  • Вызов: CIntranetEventHandlers::OnBeforeUserUpdate
static function OnBeforeUserUpdate(&$fields)
{
	if (
		!is_array($fields)
		|| !isset($fields['ID'])
		|| intval($fields['ID']) <= 0
	)
	{
		return;
	}

	$userId = intval($fields['ID']);

	$res = CUser::getList("id", "asc", array("ID_EQUAL_EXACT" => $userId), array("SELECT" => array("UF_DEPARTMENT"), "FIELDS" => array("ID", "ACTIVE")));
	if ($user = $res->fetch())
	{
		self::$userDepartmentCache[$userId] = $user["UF_DEPARTMENT"];
		self::$userActiveCache = $user["ACTIVE"];
	}

	if (!defined('BX_COMP_MANAGED_CACHE') || !BX_COMP_MANAGED_CACHE)
	{
		return;
	}

	global $CACHE_MANAGER;

	$queryObject = CUser::getList(
		"id", "asc",
		["ID_EQUAL_EXACT" => intval($fields['ID'])],
		['SELECT' => ['UF_DEPARTMENT']]
	);
	if ($oldFields = $queryObject->fetch())
	{
		if (
			isset($fields['UF_DEPARTMENT'])
			&& is_array($fields['UF_DEPARTMENT'])
			&& $fields['UF_DEPARTMENT'] != $oldFields['UF_DEPARTMENT']
		)
		{
			if (!is_array($oldFields['UF_DEPARTMENT']))
			{
				$oldFields['UF_DEPARTMENT'] = [];
			}

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

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