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