• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/manager/task/template.php
  • Класс: BitrixTasksManagerTaskTemplate
  • Вызов: Template::addTemplateByTask
static function addTemplateByTask($userId, $taskId, $data)
{
	$id = 0;
	$errors = [];

	$task = new ItemTask($taskId, $userId);
	$conversionResult = $task->transformToTemplate();

	if ($conversionResult->isSuccess())
	{
		$template = $conversionResult->getInstance();

		$responsibles = [];
		if (is_array($data['SE_RESPONSIBLE']))
		{
			foreach($data['SE_RESPONSIBLE'] as $user)
			{
				if (intval($user['ID']))
				{
					$responsibles[] = intval($user['ID']);
				}
			}
		}

		if (count($responsibles))
		{
			$template['RESPONSIBLES'] = $responsibles;
		}
		$template['SE_CHECKLIST'] = new ItemTaskCheckList();
		$template['REPLICATE_PARAMS'] = $data[static::getCode(true)]['REPLICATE_PARAMS'];

		$saveResult = $template->save();

		if ($saveResult->isSuccess())
		{
			$id = $template->getId();

			$checkListItems = TaskCheckListFacade::getByEntityId($taskId);
			$checkListItems = array_map(
				function($item)
				{
					$item['COPIED_ID'] = $item['ID'];
					unset($item['ID']);
					return $item;
				},
				$checkListItems
			);

			$checkListRoots = TemplateCheckListFacade::getObjectStructuredRoots($checkListItems, $id, $userId);
			foreach ($checkListRoots as $root)
			{
				$checkListSaveResult = $root->save();
				if (!$checkListSaveResult->isSuccess())
				{
					$conversionResult->abortConversion();
					$errors = $checkListSaveResult->getErrors()->getMessages();
				}
			}
		}
		else
		{
			$conversionResult->abortConversion();
			$errors = $saveResult->getErrors()->getMessages();
		}
	}
	else
	{
		$errors[] = Loc::getMessage('TASKS_MANAGER_TASK_TEMPLATE_CONVERSION_ERROR');
	}

	if (!$id && empty($errors))
	{
		$errors[] = Loc::getMessage('TASKS_MANAGER_TASK_TEMPLATE_UNKNOWN_ERROR');
	}

	return [
		'ID' => $id,
		'ERRORS' => $errors,
	];
}