• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/scrum/controllers/calendar.php
  • Класс: BitrixTasksScrumControllersCalendar
  • Вызов: Calendar::getUpcomingEventsForThisProject
private function getUpcomingEventsForThisProject(int $groupId): array
{
	$listEvents = [];

	$defaultSprintDuration = $this->getDefaultSprintDuration($groupId) + 86400;

	$sections = CCalendarSect::getList([
		'arFilter' => [
			'OWNER_ID'=> $groupId,
			'ACTIVE' => 'Y',
			'CAL_TYPE' => 'group',
		],
		'checkPermissions' => true
	]);
	foreach ($sections as $section)
	{
		$events = CCalendarEvent::getList(
			[
				'arFilter' => [
					'SECTION_ID' => $section['ID'],
					'OWNER_ID' => $groupId,
					'CAL_TYPE' => 'group',
					'DELETED' => 'N',
					'FROM_LIMIT' => CCalendar::date(time(), false),
					'TO_LIMIT' => CCalendar::date(time() + $defaultSprintDuration, false),
				],
				'parseRecursion' => true,
				'preciseLimits' => true,
				'fetchAttendees' => true,
				'checkPermissions' => true,
				'setDefaultLimit' => false
			]
		);
		foreach ($events as $event)
		{
			$fromTs = CCalendar::timestamp($event['DATE_FROM']);
			$toTs = CCalendar::timestamp($event['DATE_TO']);

			//$fromTs += CCalendar::getTimezoneOffset($event['TZ_FROM'], $fromTs);
			//$toTs += CCalendar::getTimezoneOffset($event['TZ_TO'], $toTs);

			$fromTs = $fromTs + date('Z', $fromTs);
			$toTs = $toTs + date('Z', $toTs);

			$currentTs = time();

			if ($fromTs > $currentTs)
			{
				if (!isset($listEvents[$event['ID']]))
				{
					$listEvents[$event['ID']] = [
						'id' => $event['ID'],
						'name' => $event['NAME'],
						'from' => $fromTs,
						'to' => $toTs,
						'color' => $event['COLOR'],
						'repeatable' => $event['RRULE'] !== '',
					];
				}
			}
		}
	}

	return array_values($listEvents);
}