• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/comments/task/commentposter.php
  • Класс: BitrixTasksCommentsTaskCommentPoster
  • Вызов: CommentPoster::prepareChangeComments
private function prepareChangeComments(array $oldFields, array $newFields, array $changes): array
{
	unset($changes['STATUS']);

	if (empty($changes))
	{
		return [];
	}

	$changeComments = [];

	if (!($changeComment = $this->getCommentByType(Comment::TYPE_UPDATE)))
	{
		$changeComment = $this->getNewChangeComment();
		$changeComments[] = $changeComment;
	}

	$appendCrmFields = false;
	$appendUserFields = false;

	foreach ($changes as $field => $values)
	{
		$liveParams = [];

		switch ($field)
		{
			case 'UF_TASK_WEBDAV_FILES':
				$field = 'FILES';
				break;

			case 'UF_CRM_TASK':
				$appendCrmFields = true;
				continue 2;

			case 'DEADLINE':
				$liveParams = $this->prepareChangeCommentLiveParams(array_merge($oldFields, $newFields));
				break;

			default:
				if (mb_strpos($field, 'UF_') === 0)
				{
					$appendUserFields = true;
					continue 2;
				}
				break;
		}

		$values = $this->getFieldValues($field, $values);
		if ($values['NEW'] === false)
		{
			continue;
		}

		$fieldKey = "COMMENT_POSTER_COMMENT_TASK_UPDATE_CHANGES_FIELD_{$field}";
		$fieldKey = $this->getLastVersionedMessageKey($fieldKey);
		$fieldReplaces = [
			'#OLD_VALUE#' => $values['OLD'],
			'#NEW_VALUE#' => $values['NEW'],
		];
		$changeComment->appendPartData('changes', [$fieldKey, array_merge($fieldReplaces, $liveParams)]);

		$field = (Loc::getMessage($fieldKey, $fieldReplaces) ?: $field);
		$changeComment->appendPartText('changes', $field."n");
	}

	if ($appendCrmFields)
	{
		$this->appendCrmElementChangesMessage($changeComment, $changes);
	}
	if ($appendUserFields)
	{
		$this->appendUserFieldChangesMessage($changeComment, $changes);
	}

	$deadlineChanged = array_key_exists('DEADLINE', $changes);
	$responsibleChanged = array_key_exists('RESPONSIBLE_ID', $changes);

	if (
		($deadlineChanged && !$newFields['DEADLINE'])
		|| ($responsibleChanged && !$deadlineChanged && !$oldFields['DEADLINE'])
	)
	{
		$partName = 'deadline';
		$deadlineMessageKey = 'COMMENT_POSTER_COMMENT_TASK_UPDATE_CHANGES_DEADLINE';
		$deadlineMessageKey = $this->getLastVersionedMessageKey($deadlineMessageKey);
		$liveParams = $this->prepareChangeCommentLiveParams(array_merge($oldFields, $newFields));
		$changeComment->addPart($partName, Loc::getMessage($deadlineMessageKey), [[$deadlineMessageKey, $liveParams]]);
	}

	return $changeComments;
}