• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/manager/task/template.php
  • Класс: BitrixTasksManagerTaskTemplate
  • Вызов: Template::manageTaskReplication
static function manageTaskReplication($userId, $taskId, array $taskData = array(), array $parameters = array('PUBLIC_MODE' => false, 'MODE' => self::MODE_ADD))
{
	$errors = static::ensureHaveErrorCollection($parameters);
	$result = array(
		'ERRORS' => $errors
	);

	$templateKey = static::getCode(true);
	$replicateKey = 'REPLICATE';

	if(!array_key_exists($templateKey, $taskData) && !array_key_exists($replicateKey, $taskData))
	{
		return $result; // nothing to do
	}

	$data = array();

	$replicate = $taskData[$replicateKey] == 'Y';
	$templateResult = array(
		'ID' => 0,
		'ERRORS' => array()
	);

	if($replicate) // replication was changed to true
	{
		if(array_key_exists($templateKey, $taskData)) // replication data defined
		{
			$templateData = array(
				'REPLICATE' => $taskData[$replicateKey],
				'CREATED_BY' => $taskData['CREATED_BY'],
				'REPLICATE_PARAMS' => $taskData[$templateKey]['REPLICATE_PARAMS']
			);
			$replicateParams = (new ReplicateParamsCorrector((int)$userId))->correctReplicateParamsByTemplateData($templateData);
			$taskData[$templateKey]['REPLICATE_PARAMS'] = $replicateParams;

			if($parameters['MODE'] == static::MODE_ADD) // task add, replicate = y
			{
				// then add template
				$templateResult = static::addTemplateByTask($userId, $taskId, $taskData);
			}
			elseif($parameters['MODE'] == static::MODE_UPDATE) // task update, replicate = y
			{
				$template = static::getByParentTask(false, $taskId);
				if(intval($template['DATA']['ID'])) // then update template
				{
					static::update(
						$userId,
						intval($template['DATA']['ID']),
						array(
							'REPLICATE_PARAMS' => $replicateParams,
							'REPLICATE' => 'Y' // required for agent re-creation by update()
						),
						$parameters
					);

					$templateResult['ID'] = intval($template['DATA']['ID']);
				}
				else // no template? add!
				{
					$templateResult = static::addTemplateByTask($userId, $taskId, $taskData);
				}
			}
		}
	}
	else if ($parameters['MODE'] == static::MODE_UPDATE)
	{
		$template = static::getByParentTask(false, $taskId);
		if ((int)($template['DATA']['ID'] ?? null)) // then update template
		{
			$templateInstance = new CTaskTemplates();
			$templateInstance->delete((int)$template['DATA']['ID']);
		}
	}

	if ($templateResult['ID'])
	{
		$data['ID'] = $templateResult['ID'];
	}
	elseif (!empty($templateResult['ERRORS']))
	{
		$result['ERRORS']->addWarning('SAVE_AS_TEMPLATE_ERROR', $templateResult['ERRORS'][0]);
	}

	$result['DATA'] = $data;

	return $result;
}