ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
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
103 $background_rid = $this->irss->manage()->find($certificate->getBackgroundImageIdentification());
104 if ($background_rid instanceof ResourceIdentification) {
105 $background_src = $this->irss->consume()->src($background_rid)->getSrc(true);
106
107 $content = str_replace(
108 ['[BACKGROUND_IMAGE]'],
109 [$background_src],
110 $content
111 );
112 }
113
114 $pdf_base64 = $this->rpc->ilFO2PDF('RPCTransformationHandler', $content);
115
116 $size = strlen(base64_decode($pdf_base64->scalar, true));
117 $this->logger?->debug(
118 'Received generated PDF with size {size} bytes for certificate id {certificate_id} (user {user_id} and object {object_id}) from ilServer',
119 [
120 'size' => $size,
121 'certificate_id' => $certificate->getCertificateId()->asString(),
122 'user_id' => $certificate->getUserId(),
123 'object_id' => $certificate->getObjId()
124 ]
125 );
126
127
128 return $pdf_base64->scalar;
129 }
130}
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