• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/util/replicator/task.php
  • Класс: BitrixTasksUtilReplicatorTask
  • Вызов: Task::produce
public function produce($source, $userId = 0, array $parameters = array())
{
	if (Loader::includeModule('disk'))
	{
		BitrixDiskUfFileUserType::setValueForAllowEdit('TASKS_TASK', true);
	}

	$result = new Result();

	ItemTask::enterBatchState();

	// create ROOT task
	$srcInstance = $this->getSourceInstance($source, $userId);
	$dstInstance = null;
	$dataMixin = array_merge(is_array($parameters['OVERRIDE_DATA']) ? $parameters['OVERRIDE_DATA'] : array(), $this->getStaticDataMixin());

	if($this->isMultitaskSource($srcInstance, $parameters)) // in case of multitasking there will be several "root" tasks
	{
		$dataMixin['RESPONSIBLE_ID'] = $srcInstance['CREATED_BY'];
	}

	$saveResult = $this->saveItemFromSource($source, $dataMixin, $userId);
	if($saveResult->isSuccess())
	{
		$dstInstance = $saveResult->getInstance();
		$result->setInstance($dstInstance);
	}

	$result->getErrors()->load($saveResult->getErrors());

	// create SUB tasks
	if($dstInstance && $result->isSuccess())
	{
		// the result of creating sub-items
		$subResult = $this->produceSub($srcInstance, $dstInstance, $parameters, $userId);
		$sIResults = $subResult->getData();

		if($sIResults)
		{
			// save sub-item collection
			$result->setSubInstanceResult($sIResults);
		}

		// get all errors from $subResult, but as warnings
		$result->loadErrors($subResult->getErrors()->transform(array('TYPE' => Error::TYPE_WARNING)));
	}

	ItemTask::leaveBatchState();

	return $result;
}