• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskitem.php
  • Класс: CTaskItem
  • Вызов: CTaskItem::proceedActionEdit
private function proceedActionEdit($arActionArguments, $arTaskData)
{
	$this->lastOperationResultData['UPDATE'] = array();

	$arFields = $arActionArguments['FIELDS'];
	$arParams = $arActionArguments['PARAMETERS'];
	if(!is_array($arParams))
	{
		$arParams = array();
	}

	$actionChangeDeadlineFields = ['ID', 'DEADLINE', 'START_DATE_PLAN', 'END_DATE_PLAN', 'DURATION'];
	$arGivenFieldsNames = array_keys($arFields);

	$newTask = BitrixTasksAccessModelTaskModel::createFromArray($arFields, $arTaskData);

	if ($arGivenFieldsNames === array_intersect($arGivenFieldsNames, $actionChangeDeadlineFields))
	{
		if (!$this->checkAccess(ActionDictionary::ACTION_TASK_DEADLINE))
		{
			throw new TasksException(
				GetMessage('TASKS_ACCESS_DENIED_TO_DEADLINE_UPDATE'),
				TasksException::TE_ACTION_NOT_ALLOWED
			);
		}
	}
	elseif (!$this->checkAccess(ActionDictionary::ACTION_TASK_SAVE, $newTask))
	{
		throw new TasksException(
			GetMessage('TASKS_ACCESS_DENIED_TO_TASK_UPDATE'),
			TasksException::TE_ACTION_NOT_ALLOWED
		);
	}

	if (isset($arFields['ID']))
	{
		unset($arFields['ID']);
	}

	$arParams = array_merge($arParams, array(
		'USER_ID'               => $this->executiveUserId,
		'CHECK_RIGHTS_ON_FILES' => true
	));

	$prevGroupId = (int) $arTaskData['GROUP_ID'];

	$this->checkProjectDates($arTaskData, $arFields); //

	$this->markCacheAsDirty();

	$o = new CTasks();
	/** @noinspection PhpDeprecationInspection */
	if ($o->update($this->taskId, $arFields, $arParams) !== true)
	{
		$this->markCacheAsDirty();
		static::throwExceptionVerbose($o->GetErrors());
	}
	$this->markCacheAsDirty();
	$this->lastOperationResultData['UPDATE'] = $o->getLastOperationResultData();

	if (
		($arActionArguments['SUBTASKS_CHANGE_GROUP'] ?? null) !== false
		&& array_key_exists('GROUP_ID', $arFields)
		&& $prevGroupId !== (int) $arFields['GROUP_ID']
	)
	{
		$this->moveSubTasksToGroup($arFields['GROUP_ID']);
	}

	return;
}