• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/watcher/membership/handler/department.php
  • Класс: BitrixCalendarWatcherMembershipHandlerDepartment
  • Вызов: Department::onBeforeUserUpdate
static function onBeforeUserUpdate($arFields): void
{
	if (
		(!isset($arFields['UF_DEPARTMENT']) && !isset($arFields['ACTIVE']))
		|| empty($arFields['ID'])
		|| !Loader::includeModule("iblock")
	)
	{
		return;
	}

	$departmentIBlockId = (int)BitrixMainConfigOption::get('intranet', 'iblock_structure', 0);
	if ($departmentIBlockId <= 0)
	{
		return;
	}

	$user = CUser::GetByID($arFields['ID'])->Fetch();

	if (!isset($user['UF_DEPARTMENT']))
	{
		$oldDepartments = [];
	}
	elseif (is_array($user['UF_DEPARTMENT']))
	{
		$oldDepartments = $user['UF_DEPARTMENT'];
	}
	else
	{
		$oldDepartments = [$user['UF_DEPARTMENT']];
	}

	if (is_array($arFields['UF_DEPARTMENT']))
	{
		$newDepartments = $arFields['UF_DEPARTMENT'];
	}
	else
	{
		$newDepartments = [$arFields['UF_DEPARTMENT']];
	}

	if (!self::isUserDepartmentsUpdated($oldDepartments, $newDepartments))
	{
		return;
	}

	$departments = array_unique(
		array_merge(
			$newDepartments,
			$oldDepartments,
		)
	);

	self::$storedData = self::getAffectedDepartments($departments, $departmentIBlockId);
}