ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
class.ilPdfGenerator.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
23
25{
26 private ?ilLogger $logger = null;
27
28 public function __construct(
29 private readonly ilUserCertificateRepository $repository,
30 private ?IRSS $irss = null,
31 private ?ilCertificateRpcClientFactoryHelper $rpc = null,
32 private ?ilCertificatePdfFileNameFactory $filename_factory = null,
33 ?ilLanguage $lng = null
34 ) {
35 global $DIC;
36
37 $this->irss = $irss ?? $DIC->resourceStorage();
38 $this->rpc = $rpc ?? new ilCertificateRpcClientFactoryHelper();
39 $this->filename_factory = $filename_factory ?? new ilCertificatePdfFileNameFactory(
40 $lng ?? $DIC->language()
41 );
42 }
43
44 public function withLogger(ilLogger $logger): self
45 {
46 $clone = clone $this;
47 $clone->logger = $logger;
48
49 return $clone;
50 }
51
55 public function generate(int $userCertificateId): string
56 {
57 $certificate = $this->repository->fetchCertificate($userCertificateId);
58
59 return $this->createPDFScalar($certificate);
60 }
61
65 public function generateCurrentActiveCertificate(int $userId, int $objId): string
66 {
67 $certificate = $this->repository->fetchActiveCertificate($userId, $objId);
68
69 return $this->createPDFScalar($certificate);
70 }
71
77 public function generateFileName(int $userId, int $objId): string
78 {
79 $certificate = $this->repository->fetchActiveCertificateForPresentation($userId, $objId);
80
82 if (!$user instanceof ilObjUser) {
83 throw new ilException(sprintf('The usr_id "%s" does NOT reference a user', $userId));
84 }
85
86 return $this->filename_factory->create($certificate);
87 }
88
89 private function createPDFScalar(ilUserCertificate $certificate): string
90 {
91 $content = $certificate->getCertificateContent();
92
93 $this->logger?->debug(
94 'Delegating certificate PDF generation for certificate id {certificate_id} (user {user_id} and object {object_id}) to ilServer',
95 [
96 'certificate_id' => $certificate->getCertificateId()->asString(),
97 'user_id' => $certificate->getUserId(),
98 'object_id' => $certificate->getObjId()
99 ]
100 );
101
102 $background_rid = $this->irss->manage()->find($certificate->getBackgroundImageIdentification());
103 if ($background_rid instanceof ResourceIdentification) {
104 $background_src = $this->irss->consume()->src($background_rid)->getSrc(true);
105
106 $content = str_replace(
107 ['[BACKGROUND_IMAGE]'],
108 [$background_src],
109 $content
110 );
111 }
112
113 $pdf_base64 = $this->rpc->ilFO2PDF('RPCTransformationHandler', $content);
114 if (!is_string($pdf_base64->scalar)) {
115 $this->logger?->error(
116 'ilServer returned invalid PDF content for certificate id {certificate_id} ' .
117 '(user {user_id} and object {object_id})',
118 [
119 'certificate_id' => $certificate->getCertificateId()->asString(),
120 'user_id' => $certificate->getUserId(),
121 'object_id' => $certificate->getObjId()
122 ]
123 );
124
125 throw new ilException('ilServer returned invalid PDF content');
126 }
127
128 $this->logger?->debug(
129 'Received generated PDF with size {size} bytes for certificate id {certificate_id} (user {user_id} ' .
130 'and object {object_id}) from ilServer',
131 [
132 'size' => strlen($pdf_base64->scalar),
133 'certificate_id' => $certificate->getCertificateId()->asString(),
134 'user_id' => $certificate->getUserId(),
135 'object_id' => $certificate->getObjId()
136 ]
137 );
138
139 return $pdf_base64->scalar;
140 }
141}
Base class for ILIAS Exception handling.
language handling
Component logger with individual log levels by component id.
User class.
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
createPDFScalar(ilUserCertificate $certificate)
generate(int $userCertificateId)
__construct(private readonly ilUserCertificateRepository $repository, private ?IRSS $irss=null, private ?ilCertificateRpcClientFactoryHelper $rpc=null, private ?ilCertificatePdfFileNameFactory $filename_factory=null, ?ilLanguage $lng=null)
generateCurrentActiveCertificate(int $userId, int $objId)
generateFileName(int $userId, int $objId)
withLogger(ilLogger $logger)
global $lng
Definition: privfeed.php:31
global $DIC
Definition: shib_login.php:26
$objId
Definition: xapitoken.php:55