. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Tools\Pdf\Data; use Espo\ORM\Entity; use Espo\Core\Utils\Metadata; use Espo\Core\InjectableFactory; use Espo\Tools\Pdf\AttachmentProvider; use Espo\Tools\Pdf\Data; use Espo\Tools\Pdf\Params; class DataLoaderManager { public function __construct( private Metadata $metadata, private InjectableFactory $injectableFactory, ) {} public function load(Entity $entity, ?Params $params = null, ?Data $data = null): Data { if (!$params) { $params = Params::create(); } if (!$data) { $data = Data::create(); } $defs = $this->metadata->get("pdfDefs.{$entity->getEntityType()}") ?? []; /** @var class-string[] $loaderClassList */ $loaderClassList = $defs['dataLoaderClassNameList'] ?? []; foreach ($loaderClassList as $className) { $loadedData = $this->createLoader($className) ->load($entity, $params); $data = $data->withAdditionalTemplateData($loadedData); } /** @var class-string>[] $attachmentProviderClassList */ $attachmentProviderClassList = $defs['attachmentProviderClassNameList'] ?? []; foreach ($attachmentProviderClassList as $className) { $provider = $this->createProvider($className); $attachments = $provider->get($entity, $params); $data = $data->withAttachmentsAdded($attachments); } return $data; } /** * @param class-string $className */ private function createLoader(string $className): DataLoader { return $this->injectableFactory->create($className); } /** * @param class-string> $className * @return AttachmentProvider */ private function createProvider(string $className): AttachmentProvider { /** @var AttachmentProvider */ return $this->injectableFactory->create($className); } }