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