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