- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/comments/task/commentposter.php
- Класс: BitrixTasksCommentsTaskCommentPoster
- Вызов: CommentPoster::getFieldValues
private function getFieldValues(string $field, array $values): array
{
$old = $values['FROM_VALUE'];
$new = $values['TO_VALUE'];
$noValue = Loc::getMessage('COMMENT_POSTER_COMMENT_TASK_UPDATE_CHANGES_FIELD_VALUE_NOT_PRESENT_SINGLE_M');
switch ($field)
{
case 'MARK':
case 'PRIORITY':
case 'TASK_CONTROL':
case 'ALLOW_TIME_TRACKING':
case 'ALLOW_CHANGE_DEADLINE':
$new = Loc::getMessage("COMMENT_POSTER_COMMENT_TASK_UPDATE_CHANGES_FIELD_{$field}_{$new}");
break;
case 'PARENT_ID':
$tasks = array_filter(array_unique($values), static function ($taskId) {
return (int)$taskId > 0;
});
$taskNames = $this->getTaskNames($tasks);
$old = ($taskNames[$old] ?? $noValue);
$new = ($taskNames[$new] ?? $noValue);
break;
case 'GROUP_ID':
$groups = array_filter(array_unique($values), static function ($groupId) {
return (int)$groupId > 0;
});
$groupNames = $this->getGroupNames($groups);
$old = ($old ?: 0);
$new = ($new ?: 0);
$old = "[GROUP_ID={$old}]" . ($groupNames[$old] ?? $noValue) . "[/GROUP_ID]";
$new = "[GROUP_ID={$new}]" . ($groupNames[$new] ?? $noValue) . "[/GROUP_ID]";
break;
case 'CREATED_BY':
case 'RESPONSIBLE_ID':
$new = ($this->parseUserToLinked($new) ?: $noValue);
break;
case 'ACCOMPLICES':
case 'AUDITORS':
$userToLinkFunction = function (int $userId) {
return $this->parseUserToLinked($userId);
};
$oldUsers = array_filter((explode(',', (string)$old) ?: []));
$newUsers = array_filter((explode(',', (string)$new) ?: []));
$pureNewUsers = array_unique(array_map('intval', array_diff($newUsers, $oldUsers)));
if (empty($pureNewUsers))
{
$new = false;
break;
}
$new = (implode(', ', array_map($userToLinkFunction, $pureNewUsers)) ?: $noValue);
break;
case 'DEADLINE':
$old = ($old ? "#DEADLINE_START#{$old}#DEADLINE_END#" : $noValue);
$new = ($new ? "#DEADLINE_START#{$new}#DEADLINE_END#" : $noValue);
break;
case 'TAGS':
$new = ($new && $new !== '' ? str_replace(',', ', ', $new) : $noValue);
break;
case 'DEPENDS_ON':
$oldTasks = (explode(',', $old) ?: []);
$newTasks = (explode(',', $new) ?: []);
$tasks = array_filter(array_unique(array_merge($oldTasks, $newTasks)), static function ($taskId) {
return (int)$taskId > 0;
});
$taskNames = $this->getTaskNames($tasks);
$old = (implode(', ', array_intersect_key($taskNames, array_flip($oldTasks))) ?: $noValue);
$new = (implode(', ', array_intersect_key($taskNames, array_flip($newTasks))) ?: $noValue);
break;
case 'TIME_ESTIMATE':
$old = $this->prepareTimeEstimate(($old ?: 0));
$new = $this->prepareTimeEstimate(($new ?: 0));
break;
case 'START_DATE_PLAN':
case 'END_DATE_PLAN':
$old = ($old ?: $noValue);
$new = ($new ?: $noValue);
break;
case 'FILES':
case 'UF_TASK_WEBDAV_FILES':
default:
break;
}
return [
'OLD' => $old,
'NEW' => $new,
];
}