• Модуль: 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);
}