- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskplannermaintance.php
- Класс: CTaskPlannerMaintance
- Вызов: CTaskPlannerMaintance::getTimemanCloseDayData
static function getTimemanCloseDayData($arParams)
{
if(CModule::IncludeModule('timeman'))
{
$arTasks = array();
$userId = BitrixTasksUtilUser::getId();
$runningTaskId = null;
$taskRunTime = null;
// key features of that info:
// [REPORT_REQ] => 'A' means that day will be closed right now. other variants - just form show.
// [INFO][DATE_START] => 1385459336 - unix timestamp of day start
// [INFO][TIME_START] => 46136 - short timestamp of day start
// [DURATION]
// [TIME_LEAKS]
$arTimemanInfo = CTimeMan::GetRunTimeInfo(true);
if ( ! ($userId > 0) )
{
foreach($arTimemanInfo['PLANNER']['DATA']['TASKS'] as $arTask)
{
$arTask['TIME'] = 0;
$arTasks[] = $arTask;
}
return (array('TASKS' => $arTasks));
}
$unixTsDateStart = (int) $arTimemanInfo['INFO']['DATE_START'];
$oTimer = CTaskTimerManager::getInstance($userId);
$arTimer = $oTimer->getLastTimer();
if ($arTimer && ($arTimer['TIMER_STARTED_AT'] > 0))
{
$runningTaskId = $arTimer['TASK_ID'];
if ($arTimer['TIMER_STARTED_AT'] >= $unixTsDateStart)
$taskRunTime = max(0, time() - (int) $arTimer['TIMER_STARTED_AT']);
else
$taskRunTime = max(0, time() - $unixTsDateStart);
}
$bitrixTimestampDateStart = $unixTsDateStart + CTasksTools::getTimeZoneOffset();
$dateStartAsString = ConvertTimeStamp($bitrixTimestampDateStart, 'FULL');
foreach($arTimemanInfo['PLANNER']['DATA']['TASKS'] as $arTask)
{
$rsElapsedTime = CTaskElapsedTime::getList(
array('ID' => 'ASC'),
array(
'TASK_ID' => $arTask['ID'],
'USER_ID' => $userId,
'>=CREATED_DATE' => $dateStartAsString
),
array('skipJoinUsers' => true)
);
$arTask['TIME'] = 0;
while ($arElapsedTime = $rsElapsedTime->fetch())
$arTask['TIME'] += max(0, $arElapsedTime['SECONDS']);
if ($runningTaskId && ($arTask['ID'] == $runningTaskId))
$arTask['TIME'] += $taskRunTime;
$arTasks[] = $arTask;
}
return array('TASKS' => $arTasks);
}
}