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