- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/comments/task/commentreader.php
- Класс: BitrixTasksCommentsTaskCommentReader
- Вызов: CommentReader::getUsersToSkipReading
private function getUsersToSkipReading(): array
{
$usersToSkipReading = [];
foreach ($this->comment->getData() as $part)
{
if (!is_array($part) || empty($part))
{
continue;
}
[$code, $replaces] = $part;
switch ($code)
{
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_CHANGES_FIELD_DEADLINE_V2':
case 'COMMENT_POSTER_COMMENT_TASK_EXPIRED_V2':
foreach ($this->members as $member)
{
if ($member['TYPE'] !== MemberTable::MEMBER_TYPE_AUDITOR)
{
$usersToSkipReading[] = $member['USER_ID'];
}
}
break;
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_CHANGES_FIELD_RESPONSIBLE_ID':
foreach ($this->members as $member)
{
if ($member['TYPE'] === MemberTable::MEMBER_TYPE_RESPONSIBLE)
{
$usersToSkipReading[] = $member['USER_ID'];
}
}
break;
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_CHANGES_FIELD_CREATED_BY':
foreach ($this->members as $member)
{
if ($member['TYPE'] === MemberTable::MEMBER_TYPE_ORIGINATOR)
{
$usersToSkipReading[] = $member['USER_ID'];
}
}
break;
case 'COMMENT_POSTER_COMMENT_TASK_EXPIRED_SOON_V2':
case 'COMMENT_POSTER_COMMENT_TASK_EXPIRED_SOON_NO_MEMBERS_V2':
case 'COMMENT_POSTER_COMMENT_TASK_PINGED_STATUS':
$rolesToSkip = [
MemberTable::MEMBER_TYPE_RESPONSIBLE,
MemberTable::MEMBER_TYPE_ACCOMPLICE,
];
foreach ($this->members as $member)
{
if (in_array($member['TYPE'], $rolesToSkip, true))
{
$usersToSkipReading[] = $member['USER_ID'];
}
}
break;
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_CHANGES_FIELD_ACCOMPLICES':
$ids = [];
preg_match_all('/(?<=[USER=)d+(?=])/', $replaces['#NEW_VALUE#'], $ids);
$usersToSkipReading = array_merge($usersToSkipReading, array_map('intval', $ids[0]));
break;
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_STATUS_2_RENEW_V2':
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_STATUS_2_RENEW_NO_MEMBERS_V2':
$members = $this->getMembersByRole();
$createdBy = current($members[MemberTable::MEMBER_TYPE_ORIGINATOR]);
$responsibleMembers = array_merge(
$members[MemberTable::MEMBER_TYPE_RESPONSIBLE],
$members[MemberTable::MEMBER_TYPE_ACCOMPLICE]
);
if ($this->comment->getAuthorId() === $createdBy)
{
$usersToSkipReading = array_merge($usersToSkipReading, $responsibleMembers);
}
else
{
$usersToSkipReading = array_merge(
$usersToSkipReading,
$responsibleMembers,
$members[MemberTable::MEMBER_TYPE_ORIGINATOR]
);
}
break;
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_STATUS_4_V2':
$members = $this->getMembersByRole();
$createdBy = current($members[MemberTable::MEMBER_TYPE_ORIGINATOR]);
$responsibleMembers = array_merge(
$members[MemberTable::MEMBER_TYPE_RESPONSIBLE],
$members[MemberTable::MEMBER_TYPE_ACCOMPLICE]
);
$usersToSkipReading[] = $createdBy;
if (!in_array($this->comment->getAuthorId(), $responsibleMembers, true))
{
$usersToSkipReading = array_merge($usersToSkipReading, $responsibleMembers);
}
break;
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_STATUS_5_V2':
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_STATUS_5_APPROVE_V2':
case 'COMMENT_POSTER_COMMENT_TASK_UPDATE_CHANGES_FIELD_AUDITORS':
default:
break;
}
}
return array_unique($usersToSkipReading);
}