• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/lib/update/timemanversion18user.php
  • Класс: BitrixTimemanUpdateTimemanVersion18User
  • Вызов: TimemanVersion18User::_GetSettings
protected function _GetSettings()
{
	global $USER_FIELD_MANAGER;

	$arRes = [];

	$arRes = $this->_GetPersonalSettings();
	if ($arRes)
	{
		if ($arRes['UF_TIMEMAN'] === 'N')
		{
			return ['UF_TIMEMAN' => false];
		}

		$cnt = 0;
		if ($arRes['UF_TIMEMAN'] !== 'Y')
		{
			$cnt++;
		}
		foreach ($arRes as $fld => $value)
		{
			if (!$arRes[$fld] || $arRes[$fld] == '00:00')
			{
				$cnt++;
			}
		}

		if ($cnt > 0)
		{
			if (is_array($this->UF_DEPARTMENT) && count($this->UF_DEPARTMENT) > 0)
			{
				$allSet = [
					'UF_TIMEMAN' => $arRes['UF_TIMEMAN'] ? $arRes['UF_TIMEMAN'] : false,
					'UF_TM_MAX_START' => 86401,
					'UF_TM_MIN_FINISH' => false,
					'UF_TM_MIN_DURATION' => false,
					'UF_TM_REPORT_REQ' => false,
					'UF_REPORT_PERIOD' => $arRes['UF_REPORT_PERIOD'],
					'UF_TM_REPORT_DATE' => $arRes['UF_TM_REPORT_DATE'],
					'UF_TM_TIME' => $arRes['UF_TM_TIME'],
					'UF_TM_DAY' => $arRes['UF_TM_DAY'],
					'UF_TM_REPORT_TPL' => [],
					'UF_TM_FREE' => false,
					'UF_TM_ALLOWED_DELTA' => -1,
				];

				foreach ($this->UF_DEPARTMENT as $dpt)
				{
					$dptSet = static::GetSectionSettings($dpt);

					if ($allSet['UF_TIMEMAN'] !== 'Y' && $dptSet['UF_TIMEMAN'])
					{
						$allSet['UF_TIMEMAN'] = $dptSet['UF_TIMEMAN'];
					}
					if ($dptSet['UF_TM_MAX_START'])
					{
						$allSet['UF_TM_MAX_START'] = min($dptSet['UF_TM_MAX_START'], $allSet['UF_TM_MAX_START']);
					}

					$allSet['UF_TM_MAX_START'] = min($dptSet['UF_TM_MAX_START'], $allSet['UF_TM_MAX_START']);
					$allSet['UF_TM_MIN_FINISH'] = max($dptSet['UF_TM_MIN_FINISH'], $allSet['UF_TM_MIN_FINISH']);
					$allSet['UF_TM_MIN_DURATION'] = max($dptSet['UF_TM_MIN_DURATION'], $allSet['UF_TM_MIN_DURATION']);

					if ($dptSet['UF_TM_REPORT_REQ'])
					{
						$allSet['UF_TM_REPORT_REQ'] = $dptSet['UF_TM_REPORT_REQ'];
					}

					if ((!is_array($allSet['UF_TM_REPORT_TPL']) || count($allSet['UF_TM_REPORT_TPL']) <= 0) && $dptSet['UF_TM_REPORT_TPL'])
					{
						$allSet['UF_TM_REPORT_TPL'] = $dptSet['UF_TM_REPORT_TPL'];
					}

					if ($dptSet['UF_TM_FREE'])
					{
						$allSet['UF_TM_FREE'] = $dptSet['UF_TM_FREE'];
					}

					if ($dptSet['UF_TM_ALLOWED_DELTA'])
					{
						if ($allSet['UF_TM_ALLOWED_DELTA'] == -1 || $dptSet['UF_TM_ALLOWED_DELTA'] < $allSet['UF_TM_ALLOWED_DELTA'])
						{
							$allSet['UF_TM_ALLOWED_DELTA'] = $dptSet['UF_TM_ALLOWED_DELTA'];
						}
					}
				}

				//report fields
				$allSet["UF_REPORT_PERIOD"] = (!$allSet["UF_REPORT_PERIOD"] && $dptSet["UF_REPORT_PERIOD"]) ? $dptSet["UF_REPORT_PERIOD"] : $allSet["UF_REPORT_PERIOD"];
				$allSet["UF_TM_TIME"] = (!$allSet["UF_TM_TIME"] && $dptSet["UF_TM_TIME"]) ? $dptSet["UF_TM_TIME"] : $allSet["UF_TM_TIME"];
				$allSet["UF_TM_DAY"] = (!$allSet["UF_TM_DAY"] && $dptSet["UF_TM_DAY"]) ? $dptSet["UF_TM_DAY"] : $allSet["UF_TM_DAY"];
				$allSet["UF_TM_REPORT_DATE"] = (!$allSet["UF_TM_REPORT_DATE"] && $dptSet["UF_TM_REPORT_DATE"]) ? $dptSet["UF_TM_REPORT_DATE"] : $allSet["UF_TM_REPORT_DATE"];

				if ($arRes['UF_TM_ALLOWED_DELTA'] === '0')
				{
					unset($allSet['UF_TM_ALLOWED_DELTA']);
				}
				foreach ($allSet as $key => $value)
				{
					if (!$arRes[$key] || $arRes[$key] === '00:00')
					{
						$arRes[$key] = $value;
					}
				}

				if ($arRes['UF_TIMEMAN'] === 'N')
				{
					return ($arRes = ['UF_TIMEMAN' => false]);
				}
			}
			elseif ($arRes['UF_TIMEMAN'] !== 'Y')
			{
				// if user is not attached to company structure tm can be allowed only in his own profile
				return ($arRes = ['UF_TIMEMAN' => false]);
			}
		} //if ($cnt > 0)

		$arRes['UF_TIMEMAN'] = true; // it can be only Y|null at this moment
		$arRes['UF_TM_MAX_START'] = $arRes['UF_TM_MAX_START'];
		$arRes['UF_TM_MAX_START'] = $arRes['UF_TM_MAX_START'] > 0
			? $arRes['UF_TM_MAX_START']
			: COption::GetOptionInt('timeman', 'workday_max_start', 33300);
		$arRes['UF_TM_MIN_FINISH'] = $arRes['UF_TM_MIN_FINISH'];
		$arRes['UF_TM_MIN_FINISH'] = $arRes['UF_TM_MIN_FINISH'] > 0
			? $arRes['UF_TM_MIN_FINISH']
			: COption::GetOptionInt('timeman', 'workday_min_finish', 63900);
		$arRes['UF_TM_MIN_DURATION'] = $arRes['UF_TM_MIN_DURATION'];
		$arRes['UF_TM_MIN_DURATION'] = $arRes['UF_TM_MIN_DURATION'] > 0
			? $arRes['UF_TM_MIN_DURATION']
			: COption::GetOptionInt('timeman', 'workday_min_duration', 28800);
		$arRes['UF_TM_REPORT_REQ'] = $arRes['UF_TM_REPORT_REQ']
			? $arRes['UF_TM_REPORT_REQ']
			: COption::GetOptionString('timeman', 'workday_report_required', 'A');
		$arRes['UF_TM_REPORT_TPL'] = $arRes['UF_TM_REPORT_TPL']
			? $arRes['UF_TM_REPORT_TPL']
			: [];
		$arRes['UF_TM_FREE'] = $arRes['UF_TM_FREE']
			? $arRes['UF_TM_FREE'] == 'Y'
			: false;
		$arRes['UF_TM_ALLOWED_DELTA'] = $arRes['UF_TM_ALLOWED_DELTA'] > -1
			? $arRes['UF_TM_ALLOWED_DELTA']
			: COption::GetOptionInt('timeman', 'workday_allowed_delta', '900');
	}
	else
	{
		return ['UF_TIMEMAN' => false];
	}

	return $arRes;
}