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;
}