19 declare(strict_types=1);
44 $this->file_delivery->legacyDelivery()->attached(
52 public function write(): ?string
54 $global_certificate_prerequisites = new \ilCertificateActiveValidator();
55 if (!$global_certificate_prerequisites->validate()) {
56 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'permission_denied'));
60 $path_factory = new \ilCertificatePathFactory();
61 $obj_id = $this->
object->getId();
62 $zip_action = new \ilUserCertificateZip(
64 $path_factory->create($this->object)
67 $archive_dir = $zip_action->createArchiveDirectory();
69 $this->
object->setAccessFilteredParticipantList(
70 $this->
object->buildStatisticsAccessFilteredParticipantList()
73 $certificate_repo = new \ilUserCertificateRepository($this->db);
74 $pdf_generator = new \ilPdfGenerator($certificate_repo);
76 $total_users = $this->
object->evalTotalPersonsArray();
77 if (count($total_users) === 0) {
78 $this->tpl->setOnScreenMessage(
80 $this->
lng->txt(
'export_cert_no_users'),
86 $cert_validator = new \ilCertificateDownloadValidator();
89 $ignored_usr_ids = [];
90 $failed_pdf_generation_usr_ids = [];
91 foreach ($total_users as $active_id => $name) {
94 if (!$cert_validator->isCertificateDownloadable(
$user_id, $obj_id)) {
97 'No certificate available for user %s in test %s ' .
98 '(Check if: \ilServer is enabled / Certificates are enabled globally / ' .
99 'A Certificate is issued for the user)',
108 $pdf_action = new \ilCertificatePdfAction(
111 $this->
lng->txt(
'error_creating_certificate_pdf')
114 $pdf = $pdf_action->createPDF(
$user_id, $obj_id);
116 $zip_action->addPDFtoArchiveDirectory(
125 'The certificate service could not create a PDF for user %s and test %s',
130 $failed_pdf_generation_usr_ids[] =
$user_id;
134 $zip_file_dir =
null;
137 $zip_file_dir = $zip_action->zipCertificatesInArchiveDirectory($archive_dir,
false);
139 $this->
logger->error($e->getMessage());
140 $this->
logger->error($e->getTraceAsString());
141 $this->tpl->setOnScreenMessage(
143 $this->
lng->txt(
'error_creating_certificate_zip_empty'),
150 if ($ignored_usr_ids !== []) {
153 if ($failed_pdf_generation_usr_ids !== []) {
157 $this->tpl->setOnScreenMessage(
'info', implode(
'<br>',
$components),
true);
160 return $zip_file_dir;
166 $nr_ignored_users = count($ignored_user_ids);
167 if ($nr_ignored_users === 1) {
169 $this->
lng->txt(
'export_cert_ignored_for_users_s'),
170 $ignored_user_logins[0]
174 $this->
lng->txt(
'export_cert_ignored_for_users_p'),
176 implode(
', ', $ignored_user_logins)
182 $failed_pdf_generation_logins = $this->
getLoginsForIds($failed_pdf_generation_ids);
183 $nr_failed_pdf_generation = count($failed_pdf_generation_ids);
184 if ($nr_failed_pdf_generation === 1) {
186 $this->
lng->txt(
'export_cert_failed_for_users_s'),
187 $failed_pdf_generation_logins[0]
192 $this->
lng->txt(
'export_cert_failed_for_users_p'),
193 $nr_failed_pdf_generation,
194 implode(
', ', $failed_pdf_generation_logins)
201 function ($usr_id):
string {
206 return $this->
lng->txt(
'deleted_user');
getLoginsForIds(array $user_ids)
Interface Observer Contains several chained tasks and infos about them.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getASCIIFilename(string $a_filename)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static _getUserIdFromActiveId(int $active_id)
__construct(private readonly Language $lng, private readonly \ilDBInterface $db, private readonly TestLogger $logger, private \ilGlobalTemplateInterface $tpl, private FileDeliveryServices $file_delivery, private readonly \ilObjTest $object)
buildFailedGenerationMessage(array $failed_pdf_generation_ids)
buildIgnoredUsersMessage(array $ignored_user_ids)
static _lookupLogin(int $a_user_id)