ILIAS  trunk Revision v11.0_alpha-1866-gfa368f7776e
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
ilCertificateTemplatePreviewAction.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
23 
28 {
29  private readonly ilObjUser $user;
34 
35  public function __construct(
36  private readonly ilCertificateTemplateRepository $templateRepository,
37  private readonly ilCertificatePlaceholderValues $placeholderValuesObject,
38  private readonly IRSS $irss,
39  private readonly string $rootDirectory = CLIENT_WEB_DIR,
40  ?ilObjUser $user = null,
41  ?ilCertificateUtilHelper $utilHelper = null,
42  ?ilCertificateUserDefinedFieldsHelper $userDefinedFieldsHelper = null,
43  ?ilCertificateRpcClientFactoryHelper $rpcClientFactoryHelper = null,
44  ?ilCertificatePdfFileNameFactory $pdfFileNameFactory = null
45  ) {
46  global $DIC;
47  if (null === $user) {
48  $user = $DIC->user();
49  }
50  $this->user = $user;
51 
52  if (null === $utilHelper) {
53  $utilHelper = new ilCertificateUtilHelper();
54  }
55  $this->utilHelper = $utilHelper;
56 
57  if (null === $userDefinedFieldsHelper) {
58  $userDefinedFieldsHelper = new ilCertificateUserDefinedFieldsHelper();
59  }
60  $this->userDefinedFieldsHelper = $userDefinedFieldsHelper;
61 
62  if (null === $rpcClientFactoryHelper) {
63  $rpcClientFactoryHelper = new ilCertificateRpcClientFactoryHelper();
64  }
65  $this->rpcClientFactoryHelper = $rpcClientFactoryHelper;
66 
67  if (null === $pdfFileNameFactory) {
68  $pdfFileNameFactory = new ilCertificatePdfFileNameFactory($DIC->language());
69  }
70  $this->pdfFileNameFactory = $pdfFileNameFactory;
71  }
72 
76  public function createPreviewPdf(int $objectId): void
77  {
78  $template = $this->templateRepository->fetchCurrentlyUsedCertificate($objectId);
79 
80  $xslfo = $template->getCertificateContent();
81 
82  $xslfo = $this->exchangeCertificateVariables($xslfo, $template, $objectId);
83 
84  $pdf_base64 = $this->rpcClientFactoryHelper
85  ->ilFO2PDF('RPCTransformationHandler', $xslfo)
86  ;
87 
88  $pdfPresentation = new ilUserCertificatePresentation(
89  $template->getObjId(),
90  $template->getObjType(),
91  null,
92  '',
93  ''
94  );
95 
96  $this->utilHelper->deliverData(
97  $pdf_base64->scalar,
98  $this->pdfFileNameFactory->create($pdfPresentation),
99  'application/pdf'
100  );
101  }
102 
109  string $certificate_text,
110  ilCertificateTemplate $template,
111  int $objectId
112  ): string {
113  $insert_tags = $this->placeholderValuesObject->getPlaceholderValuesForPreview($this->user->getId(), $objectId);
114 
115  foreach ($this->getCustomCertificateFields() as $value) {
116  $insert_tags[$value['ph']] = $this->utilHelper->prepareFormOutput($value['name']);
117  }
118 
119  foreach ($insert_tags as $placeholderVariable => $value) {
120  $certificate_text = str_replace('[' . $placeholderVariable . ']', $value, $certificate_text);
121  }
122 
123  $certificate_text = str_replace(
124  '[CLIENT_WEB_DIR]',
125  'file://' . $this->rootDirectory,
126  $certificate_text
127  );
128 
129  $identification = $this->irss->manage()->find($template->getBackgroundImageIdentification());
130  if ($identification instanceof ResourceIdentification) {
131  $backgroundImagePath = $this->irss->consume()->src($identification)->getSrc(true);
132  }
133 
134  return str_replace(
135  '[BACKGROUND_IMAGE]',
136  $backgroundImagePath ?? '',
137  $certificate_text
138  );
139  }
140 
144  private function getCustomCertificateFields(): array
145  {
146  $user_field_definitions = $this->userDefinedFieldsHelper->createInstance();
147  $fds = $user_field_definitions->getDefinitions();
148 
149  $fields = [];
150  foreach ($fds as $f) {
151  if ($f['certificate']) {
152  $fields[$f['field_id']] = [
153  'name' => $f['field_name'],
154  'ph' => '[#' . str_replace(' ', '_', strtoupper($f['field_name'])) . ']'
155  ];
156  }
157  }
158 
159  return $fields;
160  }
161 }
exchangeCertificateVariables(string $certificate_text, ilCertificateTemplate $template, int $objectId)
Exchanges the variables in the certificate text with given values.
readonly ilCertificateRpcClientFactoryHelper $rpcClientFactoryHelper
__construct(private readonly ilCertificateTemplateRepository $templateRepository, private readonly ilCertificatePlaceholderValues $placeholderValuesObject, private readonly IRSS $irss, private readonly string $rootDirectory=CLIENT_WEB_DIR, ?ilObjUser $user=null, ?ilCertificateUtilHelper $utilHelper=null, ?ilCertificateUserDefinedFieldsHelper $userDefinedFieldsHelper=null, ?ilCertificateRpcClientFactoryHelper $rpcClientFactoryHelper=null, ?ilCertificatePdfFileNameFactory $pdfFileNameFactory=null)
readonly ilCertificateUserDefinedFieldsHelper $userDefinedFieldsHelper
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
readonly ilCertificatePdfFileNameFactory $pdfFileNameFactory
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: shib_login.php:22
const CLIENT_WEB_DIR
Definition: constants.php:47