• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar.php
  • Класс: CCalendar
  • Вызов: CCalendar::getTaskList
static function getTaskList($params = [])
{
	$res = [];
	if (Loader::includeModule('tasks'))
	{
		$userSettings = BitrixCalendarUserSettings::get();

		$arFilter = [
			'!STATUS' => [
				Status::DEFERRED,
			],
			'CHECK_PERMISSIONS' => 'Y',
		];

		if ($userSettings['showCompletedTasks'] === 'N')
		{
			$arFilter['!STATUS'][] = Status::COMPLETED;
		}

		if ($params['type'] === 'user')
		{
			$arFilter['DOER'] = $params['ownerId'];
		}
		elseif ($params['type'] === 'group')
		{
			$arFilter['GROUP_ID'] = $params['ownerId'];
		}

		$tzEnabled = CTimeZone::Enabled();
		if ($tzEnabled)
		{
			CTimeZone::Disable();
		}

		$mgrResult = BitrixTasksManagerTask::getList(
			BitrixTasksUtilUser::getId(),
			[
				'order' => ["START_DATE_PLAN" => "ASC"],
				'select' => [
					"ID",
					"TITLE",
					"DESCRIPTION",
					"CREATED_DATE",
					"DEADLINE",
					"START_DATE_PLAN",
					"END_DATE_PLAN",
					"DATE_START",
					"CLOSED_DATE",
					"STATUS_CHANGED_DATE",
					"STATUS",
					"REAL_STATUS",
				],
				'legacyFilter' => $arFilter,
			],
			[]
		);

		$offset = self::GetOffset();
		foreach ($mgrResult['DATA'] as $task)
		{
			$dtFrom = null;
			$dtTo = null;

			$skipFromOffset = false;
			$skipToOffset = false;

			if (isset($task["START_DATE_PLAN"]) && $task["START_DATE_PLAN"])
			{
				$dtFrom = self::CutZeroTime($task["START_DATE_PLAN"]);
			}

			if (isset($task["END_DATE_PLAN"]) && $task["END_DATE_PLAN"])
			{
				$dtTo = self::CutZeroTime($task["END_DATE_PLAN"]);
			}

			if (!isset($dtFrom) && isset($task["DATE_START"]))
			{
				$dtFrom = self::CutZeroTime($task["DATE_START"]);
			}

			if (!isset($dtTo) && isset($task["CLOSED_DATE"]))
			{
				$dtTo = self::CutZeroTime($task["CLOSED_DATE"]);
			}

			//Task statuses: 1 - New, 2 - Pending, 3 - In Progress, 4 - Supposedly completed, 5 - Completed, 6 - Deferred, 7 - Declined
			if (!isset($dtTo) &&
				isset($task["STATUS_CHANGED_DATE"]) &&
				in_array($task["REAL_STATUS"], ['4', '5', '6', '7']))
			{
				$dtTo = self::CutZeroTime($task["STATUS_CHANGED_DATE"]);
			}

			if (isset($dtTo))
			{
				$ts = self::Timestamp($dtTo); // Correction display logic for harmony with Tasks interfaces
				if (date("H:i", $ts) == '00:00')
				{
					$dtTo = self::Date($ts - 24 * 60 * 60);
				}
			}
			elseif (isset($task["DEADLINE"]))
			{
				$dtTo = self::CutZeroTime($task["DEADLINE"]);
				$ts = self::Timestamp($dtTo); // Correction display logic for harmony with Tasks interfaces
				if (date("H:i", $ts) == '00:00')
				{
					$dtTo = self::Date($ts - 24 * 60 * 60);
				}

				if (!isset($dtFrom))
				{
					$skipFromOffset = true;
					$dtFrom = self::Date(time(), false);
				}
			}

			if (!isset($dtTo))
			{
				$dtTo = self::Date(time(), false);
			}

			if (!isset($dtFrom))
			{
				$dtFrom = $dtTo;
			}

			$dtFromTS = self::Timestamp($dtFrom);
			$dtToTS = self::Timestamp($dtTo);

			if ($dtToTS < $dtFromTS)
			{
				$dtToTS = $dtFromTS;
				$dtTo = self::Date($dtToTS, true);
			}

			$skipTime = date("H:i", $dtFromTS) == '00:00' && date("H:i", $dtToTS) == '00:00';
			if (!$skipTime && $offset != 0)
			{
				if (!$skipFromOffset)
				{
					$dtFromTS += $offset;
					$dtFrom = self::Date($dtFromTS, true);
				}

				if (!$skipToOffset)
				{
					$dtToTS += $offset;
					$dtTo = self::Date($dtToTS, true);
				}
			}

			$res[] = [
				"ID" => $task["ID"],
				"~TYPE" => "tasks",
				"NAME" => $task["TITLE"],
				"DATE_FROM" => $dtFrom,
				"DATE_TO" => $dtTo,
				"DT_SKIP_TIME" => $skipTime ? 'Y' : 'N',
				"CAN_EDIT" => CTasks::CanCurrentUserEdit($task),
			];
		}

		if ($tzEnabled)
		{
			CTimeZone::Enable();
		}
	}

	return $res;
}