- Модуль: timeman
- Путь к файлу: ~/bitrix/modules/timeman/classes/general/timeman_entry.php
- Класс: CAllTimeManEntry
- Вызов: CAllTimeManEntry::CheckFields
static function CheckFields($action, &$arFields)
{
global $DB, $USER;
$tz_diff = 0;
if ($action == 'UPDATE')
{
$dbRes = CTimeManEntry::GetList([], ['ID' => $arFields['ID']]);
if (!($arEntry = $dbRes->Fetch()))
{
return false;
}
$tz_diff = (MakeTimeStamp($arEntry['DATE_START']) % 86400) - $arEntry['TIME_START'];
if (
isset($arFields["DATE_START"])
|| isset($arFields["DATE_FINISH"])
|| isset($arFields["TIME_START"])
|| isset($arFields["TIME_FINISH"])
)
{
if (!isset($arFields['DATE_START']))
{
if (!isset($arFields['TIME_START']))
{
$arFields['DATE_START'] = $arEntry['DATE_START'];
}
else
{
$arFields['DATE_START'] = ConvertTimeStamp(
MakeTimeStamp($arEntry['DATE_START']) + $arFields['TIME_START'] - $arEntry['TIME_START'] - $tz_diff,
'FULL'
);
}
}
if (!isset($arFields['DATE_FINISH']))
{
if (!isset($arFields['TIME_FINISH']))
{
$arFields['DATE_FINISH'] = $arEntry['DATE_FINISH'];
}
else
{
if ($arEntry['DATE_FINISH'])
{
$arFields['DATE_FINISH'] = ConvertTimeStamp(
MakeTimeStamp($arEntry['DATE_FINISH']) + $arFields['TIME_FINISH'] - $arEntry['TIME_FINISH'] - $tz_diff,
'FULL'
);
}
else
{
$arFields['DATE_FINISH'] = ConvertTimeStamp(
MakeTimeStamp($arFields['DATE_START']) - $arFields['TIME_START'] + $arFields['TIME_FINISH'],
'FULL'
);
}
}
}
}
}
if ($action == 'ADD' && (!$arFields['USER_ID'] || !$arFields['DATE_START']))
{
return false;
}
$ts_start = MakeTimeStamp($arFields['DATE_START'] ?? '');
$ts_finish = MakeTimeStamp($arFields['DATE_FINISH'] ?? '');
if ($ts_start > 0 && $ts_finish > 0)
{
if ($ts_finish < $ts_start)
{
$ts_finish += $ts_start;
$ts_start = $ts_finish - $ts_start;
$ts_finish -= $ts_start;
$arFields['DATE_START'] = ConvertTimeStamp($ts_start, 'FULL');
$arFields['DATE_FINISH'] = ConvertTimeStamp($ts_finish, 'FULL');
}
}
//ts_start and ts_finish are with correct time but for server timezone offset
if ($ts_start > 0 && !isset($arFields['TIME_START']))
{
$arFields['TIME_START'] = (($ts_start + date('Z')) % 86400);
}
if ($ts_finish > 0 && !isset($arFields['TIME_FINISH']))
{
$arFields['TIME_FINISH'] = (($ts_finish + date('Z')) % 86400);
}
if ($action == 'ADD' || isset($arFields['ACTIVE']))
{
$arFields['ACTIVE'] = $arFields['ACTIVE'] == 'N' ? 'N' : 'Y';
}
if ($action == 'ADD' || isset($arFields['PAUSED']))
{
$arFields['PAUSED'] = $arFields['PAUSED'] == 'Y' ? 'Y' : 'N';
}
if (isset($arFields['TASKS']) && is_array($arFields['TASKS']))
{
$arFields['TASKS'] = serialize($arFields['TASKS']);
}
if (isset($arFields['TIME_LEAKS']))
{
$arFields['TIME_LEAKS'] = intval($arFields['TIME_LEAKS']);
}
elseif ($action == 'UPDATE')
{
$arFields['TIME_LEAKS'] = intval($arEntry['TIME_LEAKS']);
}
if ($ts_start > 0 && $ts_finish > 0 && $arFields['PAUSED'] != 'Y' && !isset($arFields['DURATION']))
{
$arFields['DURATION'] = $arFields['TIME_FINISH'] - $arFields['TIME_START'] - $arFields['TIME_LEAKS'];
}
if (isset($arFields['DURATION']))
{
$arFields['DURATION'] = intval($arFields['DURATION']);
}
elseif (
$arFields['DATE_FINISH'] ?? null
&& $arFields['PAUSED'] != 'Y'
)
{
$arFields['DURATION'] = $arFields['TIME_FINISH'] - $arFields['TIME_START'] - $arFields['TIME_LEAKS'];
}
if (isset($arFields['TIME_LEAKS_ADD']))
{
$arFields['TIME_LEAKS'] += intval($arFields['TIME_LEAKS_ADD']);
if ($arFields['DATE_FINISH'])
{
$arFields['DURATION'] -= intval($arFields['TIME_LEAKS_ADD']);
}
unset($arFields['TIME_LEAKS_ADD']);
}
unset($arFields['ID']);
unset($arFields['TIMESTAMP_X']);
$arFields['MODIFIED_BY'] = $USER->GetID();
if (isset($arFields['LAT_OPEN']))
{
$arFields['LAT_OPEN'] = doubleval($arFields['LAT_OPEN']);
}
if (isset($arFields['LON_OPEN']))
{
$arFields['LON_OPEN'] = doubleval($arFields['LON_OPEN']);
}
if (isset($arFields['LAT_CLOSE']))
{
$arFields['LAT_CLOSE'] = doubleval($arFields['LAT_CLOSE']);
}
if (isset($arFields['LON_CLOSE']))
{
$arFields['LON_CLOSE'] = doubleval($arFields['LON_CLOSE']);
}
$arFields['~TIMESTAMP_X'] = $DB->GetNowFunction();
return true;
}