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