• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/classes/general/timeman_notify.php
  • Класс: CTimeManNotify
  • Вызов: CTimeManNotify::OnAfterUserUpdate
static function OnAfterUserUpdate($arFields)
{
	if (array_key_exists("UF_DEPARTMENT", $arFields))
	{
		$arDept = $arFields["UF_DEPARTMENT"];
		if (!is_array($arDept))
		{
			$arDept = array($arDept);
		}

		foreach ($arDept as $key => $val)
		{
			if (intval($val) <= 0)
			{
				unset($arDept[$key]);
			}
		}

		if (
			!empty($arDept)
			&& CModule::IncludeModule("socialnetwork")
		)
		{
			$arNewRights = self::GetRights($arFields["ID"]);

			$rsLog = CSocNetLog::GetList(
				array(),
				array(
					'ENTITY_TYPE' => SONET_TIMEMAN_ENTRY_ENTITY,
					'ENTITY_ID' => $arFields["ID"],
					'EVENT_ID' => "timeman_entry",
				),
				false,
				false,
				array("ID")
			);

			while ($arLog = $rsLog->Fetch())
			{
				$arOldRights = array();

				$rsLogRight = CSocNetLogRights::GetList(array(), array("LOG_ID" => $arLog["ID"]));
				while ($arLogRight = $rsLogRight->Fetch())
				{
					$arOldRights[] = $arLogRight["GROUP_CODE"];
				}

				$diff1 = array_diff($arNewRights, $arOldRights);
				$diff2 = array_diff($arOldRights, $arNewRights);

				if (
					!empty($diff1)
					|| !empty($diff2)
				)
				{
					CSocNetLogRights::DeleteByLogID($arLog["ID"]);
					CSocNetLogRights::Add($arLog["ID"], $arNewRights);
				}
			}
		}

		if ($arDept)
		{
			$settingKeys = [
				'UF_TIMEMAN',
				'UF_TM_REPORT_REQ',
			];

			$timemanUser = new CTimeManUser($arFields['ID']);

			$currentSettings = $timemanUser->getPersonalSettings($settingKeys);

			$isInheritDepartmentSettings = (
				$currentSettings['UF_TIMEMAN'] === null
				&& $currentSettings['UF_TM_REPORT_REQ'] === null
			);
			if ($isInheritDepartmentSettings)
			{
				$user = new CUser();
				$user->update(
					$arFields['ID'],
					[
						'UF_TIMEMAN' => null,
						'UF_TM_REPORT_REQ' => null,
					]
				);

				if (defined('BX_COMP_MANAGED_CACHE'))
				{
					global $CACHE_MANAGER;

					$CACHE_MANAGER->CleanDir('timeman_structure_'
						. COption::getOptionInt('intranet', 'iblock_structure')
					);
				}
			}
		}
	}
}