- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/comments/task.php
- Класс: BitrixTasksCommentsTask
- Вызов: Task::isCommentNew
static function isCommentNew(int $taskId, int $userId, int $commentId): bool
{
if (
!$taskId || !$userId || !$commentId
|| !Forum::includeModule()
)
{
return false;
}
try
{
if (!(new CTaskItem($taskId, $userId))->checkCanRead())
{
return false;
}
}
catch (CTaskAssertException $e)
{
return false;
}
$query = (new Query(TaskTable::class))
->setSelect(['COMMENT_ID' => 'FM.ID'])
->registerRuntimeField('TV', new ReferenceField(
'TV',
ViewedTable::getEntity(),
Join::on('this.ID', 'ref.TASK_ID')->where('ref.USER_ID', $userId),
['join_type' => 'left']
))
->registerRuntimeField('FM', new ReferenceField(
'FM',
MessageTable::getEntity(),
Join::on('this.FORUM_TOPIC_ID', 'ref.TOPIC_ID'),
['join_type' => 'inner']
))
->where('ID', $taskId)
->where('FM.ID', $commentId)
->where(
Query::filter()
->logic('or')
->where(
Query::filter()
->whereNotNull('TV.VIEWED_DATE')
->whereColumn('FM.POST_DATE', '>', 'TV.VIEWED_DATE')
)
->where(
Query::filter()
->whereNull('TV.VIEWED_DATE')
->whereColumn('FM.POST_DATE', '>=', 'CREATED_DATE')
)
)
->where('FM.NEW_TOPIC', 'N')
->where('FM.AUTHOR_ID', '<>', $userId)
->where(
Query::filter()
->logic('or')
->whereNull('FM.UF_TASK_COMMENT_TYPE')
->where('FM.UF_TASK_COMMENT_TYPE', '<>', InternalsComment::TYPE_EXPIRED)
)
;
$startCounterDate = COption::GetOptionString("tasks", "tasksDropCommentCounters", null);
if ($startCounterDate)
{
$query->where('FM.POST_DATE', '>', new DateTime($startCounterDate, 'Y-m-d H:i:s'));
}
$commentResult = $query->exec();
return ($comment = $commentResult->fetch()) && (int)$comment['COMMENT_ID'] === $commentId;
}