• Модуль: 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);
	}
}