• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/lib/monitor/report/timelinereport.php
  • Класс: BitrixTimemanMonitorReportTimelineReport
  • Вызов: TimelineReport::modifyChartDataForReport
private function modifyChartDataForReport($chartDataByUser)
{
	foreach ($chartDataByUser as $userId => $reportsByDate)
	{
		foreach ($reportsByDate as $date => $reportByDesktopCode)
		{
			foreach ($reportByDesktopCode as $desktopCode => $intervals)
			{
				if (count($intervals) < 4)
				{
					continue;
				}

				$intervalsCount = count($chartDataByUser[$userId][$date][$desktopCode]);
				$isLastIntervalInactive =
					$chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 1]['type'] === Group::INACTIVE
				;
				$isPenultimateIntervalPersonal =
					$chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 2]['type'] === Group::PERSONAL
				;

				if (!($isLastIntervalInactive && $isPenultimateIntervalPersonal))
				{
					continue;
				}

				$chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 1]['start'] =
					$chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 3]['finish']
				;

				unset($chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 2]);

				$chartDataByUser[$userId][$date][$desktopCode] =
					array_values($chartDataByUser[$userId][$date][$desktopCode])
				;

				$intervalsCount = count($chartDataByUser[$userId][$date][$desktopCode]);
				$isLastIntervalInactive =
					$chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 1]['type'] === Group::INACTIVE
				;
				$isPenultimateIntervalInactive =
					$chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 2]['type'] === Group::INACTIVE
				;

				if (
					$isLastIntervalInactive
					&& $isPenultimateIntervalInactive
				)
				{
					$chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 2]['finish'] =
						$chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 1]['finish']
					;

					$chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 2]['type'] =
						Group::INACTIVE
					;

					unset($chartDataByUser[$userId][$date][$desktopCode][$intervalsCount - 1]);

					$chartDataByUser[$userId][$date][$desktopCode] =
						array_values($chartDataByUser[$userId][$date][$desktopCode])
					;
				}
			}
		}
	}

	return $chartDataByUser;
}