- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/manager/task/template.php
- Класс: Bitrix\Tasks\Manager\Task\Template
- Вызов: Template::add
static function add($userId, array $data, array $parameters = array('PUBLIC_MODE' => false))
{
$userId = Assert::expectIntegerPositive($userId, '$userId');
$errors = static::ensureHaveErrorCollection($parameters);
if($parameters['PUBLIC_MODE'])
{
$data = static::filterData($data, array(), $errors);
}
if($errors->checkNoFatals())
{
$responsibles = Responsible::extractPrimaryIndexes($data[Responsible::getCode(true)]);
// todo: temporal adapters, implement model object with array access and lazy adaptation
static::adaptSet($data);
// serialize some...
$data["ACCOMPLICES"] = Type::serializeArray($data["ACCOMPLICES"], true);
$data["AUDITORS"] = Type::serializeArray($data["AUDITORS"], true);
$data["RESPONSIBLES"] = Type::serializeArray($responsibles, true);
$data["TAGS"] = Type::serializeArray($data["TAGS"], true);
$data["REPLICATE_PARAMS"] = Type::serializeArray($data["REPLICATE_PARAMS"], true);
if(count($responsibles) > 1) // template represents multitask in case of multiple responsibles
{
$data['MULTITASK'] = 'Y';
}
// todo: CTaskTemplates::add() hates unknown fields in $data. Improve CTaskTemplates::add() to make it ignore garbage in input
$dataToAdd = $data;
unset($dataToAdd['DEPENDS_ON']);
foreach($dataToAdd as $key => $v)
{
if(mb_strpos($key, static::SE_PREFIX) === 0)
{
unset($dataToAdd[$key]);
}
}
$templateInstance = new \CTaskTemplates();
$itemId = $templateInstance->add($dataToAdd);
if($itemId)
{
$subEntityParams = array_merge(
$parameters, array('MODE' => static::MODE_ADD)
);
if(is_array($data[static::SE_PREFIX.'CHECKLIST']))
{
Template\Checklist::manageSet($userId, $itemId, $data[static::SE_PREFIX.'CHECKLIST'], $subEntityParams);
}
}
$resultErrors = $templateInstance->getErrors();
if(!empty($resultErrors))
{
$errors->load($resultErrors);
}
}
return array(
'DATA' => array('ID' => $itemId),
'ERRORS' => $errors,
);
}