- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/internals/counter/collector/usercollector.php
- Класс: BitrixTasksInternalsCounterCollectorUserCollector
- Вызов: UserCollector::recountExpired
private function recountExpired(string $taskFilter, array $mutedTasks): array
{
$connection = Application::getConnection();
$helper = $connection->getSqlHelper();
$expiredTime = Deadline::getExpiredTime()->format('Y-m-d H:i:s');
$statuses = implode(',', [Status::PENDING, Status::IN_PROGRESS]);
$sql = "
SELECT
T.ID,
T.GROUP_ID,
TM.TYPE,
'1' as " . $helper->quote('COUNT') . "
FROM b_tasks T
INNER JOIN ". MemberTable::getTableName() ." TM
ON TM.TASK_ID = T.ID
AND TM.USER_ID = {$this->userId}
WHERE
{$taskFilter}
AND T.DEADLINE < '{$expiredTime}'
AND T.STATUS IN ({$statuses})
";
$res = $connection->query($sql);
$rows = $res->fetchAll();
$responsibleTasks = [];
foreach ($rows as $row)
{
if ($row['TYPE'] === MemberTable::MEMBER_TYPE_RESPONSIBLE)
{
$responsibleTasks[] = $row['ID'];
}
}
$counters = [];
foreach ($rows as $row)
{
$type = $row['TYPE'];
if (!array_key_exists($type, CounterDictionary::MAP_EXPIRED))
{
continue;
}
if (
$type === MemberTable::MEMBER_TYPE_ORIGINATOR
&& in_array($row['ID'], $responsibleTasks)
)
{
continue;
}
$counters[] = [
'USER_ID' => $this->userId,
'TASK_ID' => (int) $row['ID'],
'GROUP_ID' => (int) $row['GROUP_ID'],
'TYPE' => in_array($row['ID'], $mutedTasks)
? CounterDictionary::MAP_MUTED_EXPIRED[$type]
: CounterDictionary::MAP_EXPIRED[$type],
'VALUE' => (int) $row['COUNT']
];
}
return $counters;
}