- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/internals/counter/collector/projectcollector.php
- Класс: BitrixTasksInternalsCounterCollectorProjectCollector
- Вызов: ProjectCollector::recountExpired
private function recountExpired(array $groupIds = [], array $taskIds = [], array $userIds = []): array
{
$expiredTime = Deadline::getExpiredTime()->format('Y-m-d H:i:s');
$joinFilter[] = "SU.GROUP_ID = T.GROUP_ID";
if (count($userIds) === 1)
{
$joinFilter[] = 'SU.USER_ID = '. (int) array_shift($userIds);
}
elseif (count($userIds) > 1)
{
$joinFilter[] = 'SU.USER_ID IN ('. implode(',', $userIds) .')';
}
$filter = [];
if (!empty($taskIds))
{
$filter[] = 'T.ID IN ('. implode(',', $taskIds) .')';
}
if (count($groupIds) === 1)
{
$groupId = (int) array_shift($groupIds);
$filter[] = 'T.GROUP_ID = '. $groupId;
$joinFilter[] = 'SU.GROUP_ID = '. $groupId;
}
elseif (count($groupIds) > 1)
{
$filter[] = 'T.GROUP_ID IN ('. implode(',', $groupIds) .')';
$joinFilter[] = 'SU.GROUP_ID IN ('. implode(',', $groupIds) .')';
}
$filter[] = "T.DEADLINE < '". $expiredTime ."'";
$filter[] = 'T.STATUS IN ('. implode(',', [Status::PENDING, Status::IN_PROGRESS]) .')';
$filter = implode(' AND ', $filter);
$joinFilter = implode(' AND ', $joinFilter);
$sql = "
SELECT
T.ID,
T.GROUP_ID,
SU.USER_ID
FROM b_tasks T
INNER JOIN b_sonet_user2group SU
ON {$joinFilter}
WHERE
{$filter}
";
$res = Application::getConnection()->query($sql);
$rows = $res->fetchAll();
$counters = [];
foreach ($rows as $row)
{
$counters[] = [
'USER_ID' => (int) $row['USER_ID'],
'TASK_ID' => (int) $row['ID'],
'GROUP_ID' => (int) $row['GROUP_ID'],
'TYPE' => CounterDictionary::COUNTER_GROUP_EXPIRED,
'VALUE' => 1
];
}
return $counters;
}