- Модуль: documentgenerator
- Путь к файлу: ~/bitrix/modules/documentgenerator/lib/components/viewcomponent.php
- Класс: BitrixDocumentGeneratorComponentsViewComponent
- Вызов: ViewComponent::initDocument
protected function initDocument(): Result
{
Loc::loadLanguageFile(__FILE__);
$result = new Result();
if(!$this->includeModules())
{
$result->addError(new Error('no modules'));
}
else
{
$userPermissions = Driver::getInstance()->getUserPermissions();
if(isset($this->arParams['DOCUMENT_ID']) && $this->arParams['DOCUMENT_ID'] > 0)
{
if(!$userPermissions->canViewDocuments())
{
return $result->addError(new Error(Loc::getMessage('DOCGEN_DOCUMENT_VIEW_PERMISSION_ERROR')));
}
$document = Document::loadById($this->arParams['DOCUMENT_ID']);
if($document)
{
$this->document = $document;
if(!$this->document->hasAccess())
{
return $result->addError(new Error(Loc::getMessage('DOCGEN_DOCUMENT_VIEW_ACCESS_ERROR')));
}
$provider = $this->document->getProvider();
if($provider)
{
$this->value = $provider->getSource();
}
$this->template = $document->getTemplate();
if($this->template && $this->template->MODULE_ID !== $this->getModule())
{
return $result->addError(new Error(Loc::getMessage('DOCGEN_DOCUMENT_VIEW_ACCESS_ERROR')));
}
$queue = ServiceLocator::getInstance()->get('documentgenerator.service.actualizeQueue');
$queue->addTask(
ActualizeQueueTask::createByDocument($document)
->setPosition(ActualizeQueueTask::ACTUALIZATION_POSITION_IMMEDIATELY)
);
}
else
{
$result->addError(new Error(Loc::getMessage('DOCGEN_DOCUMENT_NOT_FOUND_ERROR')));
}
return $result;
}
elseif(isset($this->arParams['TEMPLATE_ID']) && isset($this->arParams['PROVIDER']) && isset($this->arParams['VALUE']))
{
if(!$userPermissions->canModifyDocuments())
{
return $result->addError(new Error(Loc::getMessage('DOCGEN_DOCUMENT_MODIFY_PERMISSION_ERROR')));
}
$template = Template::loadById($this->arParams['TEMPLATE_ID']);
if($template && !$template->isDeleted())
{
$template->setSourceType($this->arParams['PROVIDER']);
if($template->MODULE_ID != $this->getModule())
{
return $result->addError(new Error(Loc::getMessage('DOCGEN_DOCUMENT_VIEW_ACCESS_ERROR')));
}
$this->template = $template;
$this->value = $this->arParams['VALUE'];
$data = [];
if(isset($this->arParams['NUMBER']) && !empty($this->arParams['NUMBER']))
{
$data['NUMBER'] = $this->arParams['NUMBER'];
}
$this->document = Document::createByTemplate($template, $this->value, $data);
if(!$this->document->hasAccess())
{
$result->addError(new Error(Loc::getMessage('DOCGEN_DOCUMENT_VIEW_ACCESS_ERROR')));
return $result;
}
$this->document->setValues($this->arParams['VALUES']);
}
else
{
$result->addError(new Error(Loc::getMessage('DOCGEN_TEMPLATE_NOT_FOUND_ERROR')));
}
}
else
{
$result->addError(new Error(Loc::getMessage('DOCGEN_UNKNOWN_ERROR')));
}
}
return $result;
}