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