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