• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasklog.php
  • Класс: CTaskLog
  • Вызов: CTaskLog::GetChanges
static function GetChanges($currentFields, $newFields)
{
	$changes = [];

	array_walk($currentFields, ['CTaskLog', 'UnifyFields']);
	array_walk($newFields, ['CTaskLog', 'UnifyFields']);

	if (array_key_exists('REAL_STATUS', $currentFields))
	{
		$currentFields['STATUS'] = $currentFields['REAL_STATUS'];
	}

	if (array_key_exists('TITLE', $currentFields))
	{
		$currentFields['TITLE'] = Emoji::encode($currentFields['TITLE']);
	}
	if (array_key_exists('DESCRIPTION', $currentFields))
	{
		$currentFields['DESCRIPTION'] = Emoji::encode($currentFields['DESCRIPTION']);
	}
	if (array_key_exists('TITLE', $newFields))
	{
		$newFields['TITLE'] = Emoji::encode($newFields['TITLE']);
	}
	if (array_key_exists('DESCRIPTION', $newFields))
	{
		$newFields['DESCRIPTION'] = Emoji::encode($newFields['DESCRIPTION']);
	}

	$comparedFields = static::getTrackedFields();

	foreach ($newFields as $key => $value)
	{
		if (array_key_exists($key, $comparedFields) && ($currentFields[$key] ?? null) != ($newFields[$key] ?? null))
		{
			if (!array_key_exists($key, $currentFields) || !array_key_exists($key, $newFields))
			{
				continue;
			}

			if ($key === 'FILES')
			{
				$filesChanges = static::getFilesChanges($currentFields[$key], $value);

				if (array_key_exists('DELETED_FILES', $filesChanges))
				{
					$changes['DELETED_FILES'] = $filesChanges['DELETED_FILES'];
				}
				if (array_key_exists('NEW_FILES', $filesChanges))
				{
					$changes['NEW_FILES'] = $filesChanges['NEW_FILES'];
				}
			}
			elseif ($key === 'STAGE_ID')
			{
				$oldGroupId = $currentFields['GROUP_ID'];
				$newGroupId = (array_key_exists('GROUP_ID', $newFields) ? $newFields['GROUP_ID'] : $oldGroupId);
				$stageChanges = static::getStageChanges($currentFields[$key], $value, $oldGroupId, $newGroupId);
				if (!empty($stageChanges))
				{
					$changes['STAGE'] = $stageChanges;
				}
			}
			elseif ($key === 'UF_CRM_TASK')
			{
				if (!empty($added = implode(',', array_diff($value, $currentFields[$key]))))
				{
					$changes['UF_CRM_TASK_ADDED'] = [
						'FROM_VALUE' => false,
						'TO_VALUE' => $added,
					];
				}
				if (!empty($deleted = implode(',', array_diff($currentFields[$key], $value))))
				{
					$changes['UF_CRM_TASK_DELETED'] = [
						'FROM_VALUE' => $deleted,
						'TO_VALUE' => false,
					];
				}
			}
			else
			{
				if ($comparedFields[$key]['TYPE'] === 'text')
				{
					$currentFields[$key] = false;
					$newFields[$key] = false;
				}
				elseif ($comparedFields[$key]['TYPE'] === 'array')
				{
					$currentFields[$key] = implode(',', $currentFields[$key]);
					$newFields[$key] = implode(',', $value);
				}

				$changes[$key] = [
					'FROM_VALUE' => ($currentFields[$key] || $key === 'PRIORITY' ? $currentFields[$key] : false),
					'TO_VALUE' => ($newFields[$key] || $key === 'PRIORITY' ? $newFields[$key] : false),
				];
			}
		}
	}

	return $changes;
}