- Модуль: documentgenerator
- Путь к файлу: ~/bitrix/modules/documentgenerator/lib/controller/template.php
- Класс: BitrixDocumentGeneratorControllerTemplate
- Вызов: Template::add
protected function add(array $templateData, array $providers = [], array $users = [])
{
$result = new Result();
$id = intval($templateData['ID'] ?? 0);
if($id > 0 && !Driver::getInstance()->getUserPermissions()->canModifyTemplate($id))
{
$result->addError(new Error('You do not have permissions to modify this template'));
}
if($result->isSuccess())
{
if($id > 0)
{
$template = BitrixDocumentGeneratorTemplate::loadById($id);
if($template)
{
unset($templateData['CREATED_BY']);
unset($templateData['ID']);
$templateData['UPDATE_TIME'] = new DateTime();
$templateData['UPDATED_BY'] = Driver::getInstance()->getUserId();
$result = TemplateTable::update($id, $templateData);
}
else
{
$result->addError(new Error(Loc::getMessage('DOCGEN_CONTROLLER_TEMPLATE_NOT_FOUND')));
}
}
else
{
if(empty($templateData['NUMERATOR_ID']))
{
$templateData['NUMERATOR_ID'] = $this->createNumerator($templateData['NAME']);
}
$result = TemplateTable::add($templateData);
}
}
if(!$result->isSuccess())
{
return $result;
}
$templateId = $result->getId();
if(!empty($providers))
{
TemplateProviderTable::deleteByTemplateId($templateId);
foreach($providers as $provider)
{
if (
DataProviderManager::checkProviderName(
TemplateProviderTable::getClassNameFromFilterString($provider),
$templateData['MODULE_ID']
)
)
{
$providerResult = TemplateProviderTable::add([
'TEMPLATE_ID' => $templateId,
'PROVIDER' => $provider,
]);
if(!$providerResult->isSuccess())
{
$result->addErrors($providerResult->getErrors());
}
}
}
}
if(!empty($users))
{
TemplateUserTable::delete($templateId);
foreach($users as $code)
{
$userResult = TemplateUserTable::add([
'TEMPLATE_ID' => $templateId,
'ACCESS_CODE' => $code,
]);
if(!$userResult->isSuccess())
{
$result->addErrors($userResult->getErrors());
}
}
}
$template = BitrixDocumentGeneratorTemplate::loadById($templateId);
$result->setData($this->getAction($template));
return $result;
}