ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilObjCertificateSettingsGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
24
34{
35 public const TAB_CERTIFICATES = 'certificates';
36 public const CMD_CERTIFICATES_OVERVIEW = 'certificatesOverview';
37 public const CMD_DOWNLOAD_CERTIFICATE = 'downloadCertificate';
38 private IRSS $irss;
41
43 protected ?ilObject $object;
44 private readonly ilLogger $logger;
47
48 public function __construct(
49 $data,
50 int $id = 0,
51 bool $call_by_reference = true,
52 bool $prepare_output = true,
55 ) {
56 global $DIC;
57
59
60 $this->httpState = $DIC->http();
61 $this->upload = $DIC->upload();
62 $this->logger = $DIC->logger()->root();
63 $this->type = 'cert';
64 $this->lng->loadLanguageModule('certificate');
65 $this->lng->loadLanguageModule('cert');
66 $this->lng->loadLanguageModule('trac');
67
68 $this->irss = $DIC->resourceStorage();
69
70 $this->user_certificate_repo = $user_certificate_repo ?: new ilUserCertificateRepository();
71 $this->certificate_active_validator = $certificate_active_validator ?: new ilCertificateActiveValidator();
72 }
73
74 public function executeCommand(): void
75 {
76 $next_class = $this->ctrl->getNextClass($this) ?? '';
77 $cmd = $this->ctrl->getCmd();
78
79 $this->prepareOutput();
80
81 if (!$this->rbac_system->checkAccess('read', $this->object->getRefId())) {
82 $this->error->raiseError($this->lng->txt('no_permission'), $this->error->WARNING);
83 }
84
85 switch (strtolower($next_class)) {
86 case strtolower(ilPermissionGUI::class):
87 $this->tabs_gui->setTabActive('perm_settings');
88 $perm_gui = new ilPermissionGUI($this);
89 $this->ctrl->forwardCommand($perm_gui);
90
91 break;
92 default:
93 if (!$cmd || $cmd === 'view') {
94 $cmd = 'settings';
95 }
96
97 $this->$cmd();
98
99 break;
100 }
101 }
102
103 public function getAdminTabs(): void
104 {
105 if ($this->certificate_active_validator->validate() && $this->rbac_system->checkAccess('read', $this->object->getRefId())) {
106 $this->tabs_gui->addTab(
107 self::TAB_CERTIFICATES,
108 $this->lng->txt('overview'),
109 $this->ctrl->getLinkTarget($this, self::CMD_CERTIFICATES_OVERVIEW)
110 );
111 }
112
113 if ($this->rbac_system->checkAccess('visible,read', $this->object->getRefId())) {
114 $this->tabs_gui->addTarget(
115 'settings',
116 $this->ctrl->getLinkTarget($this, 'settings'),
117 ['settings', 'view']
118 );
119 }
120
121 if ($this->rbac_system->checkAccess('edit_permission', $this->object->getRefId())) {
122 $this->tabs_gui->addTarget(
123 'perm_settings',
124 $this->ctrl->getLinkTargetByClass(ilPermissionGUI::class, 'perm'),
125 [],
126 strtolower(ilPermissionGUI::class)
127 );
128 }
129 }
130
131 public function settings(): void
132 {
133 $this->tabs_gui->setTabActive('settings');
134 $form_settings = new ilSetting('certificate');
135
136 $form = new ilPropertyFormGUI();
137 $form->setFormAction($this->ctrl->getFormAction($this));
138 $form->setTitle($this->lng->txt('certificate_settings'));
139
140 $active = new ilCheckboxInputGUI($this->lng->txt('active'), 'active');
141 $active->setChecked((bool) $form_settings->get('active', '0'));
142 $form->addItem($active);
143
144 $info = new ilNonEditableValueGUI($this->lng->txt('info'), 'info');
145 $info->setValue($this->lng->txt('certificate_usage'));
146 $form->addItem($info);
147
148 $bgimage = new ilImageFileInputGUI($this->lng->txt('certificate_background_image'), 'background');
149 $bgimage->setRequired(false);
150
151 if (strcmp($this->ctrl->getCmd(), 'save') === 0) {
152 $backgroundDelete = $this->httpState->wrapper()->post()->has('background_delete') && $this->httpState->wrapper()->post()->retrieve(
153 'background_delete',
154 $this->refinery->kindlyTo()->bool()
155 );
156 if ($backgroundDelete) {
157 $this->object->deleteBackgroundImage();
158 }
159 }
160
161 if (
162 $this->upload->hasUploads() &&
163 $this->httpState->request()->getMethod() === 'POST' &&
164 $bgimage->checkInput()
165 ) {
166 if (!$this->upload->hasBeenProcessed()) {
167 $this->upload->process();
168 }
169
170 if (is_array($this->upload->getResults()) && $this->upload->getResults() !== []) {
171 $results = $this->upload->getResults();
172 $file = array_pop($results);
173 if ($file->isOK()) {
174 $result = $this->object->uploadBackgroundImage($file);
175 if ($result === false) {
176 $bgimage->setAlert($this->lng->txt('certificate_error_upload_bgimage'));
177 }
178 }
179 }
180 }
181
182 if ($this->object->hasBackgroundImage()) {
183 $rid = $this->object->getBackgroundImageIdentification();
184 if ($rid instanceof ResourceIdentification) {
185 $bgimage->setImage($this->irss->consume()->src($rid)->getSrc(true));
186 } elseif (is_string($rid)) {
187 $bgimage->setImage($rid);
188 }
189 }
190 $bgimage->setInfo($this->lng->txt('default_background_info'));
191 $form->addItem($bgimage);
192 $format = new ilSelectInputGUI($this->lng->txt('certificate_page_format'), 'pageformat');
193 $defaultformats = [
194 'a4' => $this->lng->txt('certificate_a4'), // (297 mm x 210 mm)
195 'a4landscape' => $this->lng->txt('certificate_a4_landscape'), // (210 mm x 297 mm)',
196 'a5' => $this->lng->txt('certificate_a5'), // (210 mm x 148.5 mm)
197 'a5landscape' => $this->lng->txt('certificate_a5_landscape'), // (148.5 mm x 210 mm)
198 'letter' => $this->lng->txt('certificate_letter'), // (11 inch x 8.5 inch)
199 'letterlandscape' => $this->lng->txt('certificate_letter_landscape') // (11 inch x 8.5 inch)
200 ];
201 $format->setOptions($defaultformats);
202 $format->setValue($form_settings->get('pageformat', ''));
203 $format->setInfo($this->lng->txt('certificate_page_format_info'));
204 $form->addItem($format);
205
206 if ($this->rbac_system->checkAccess('write', $this->object->getRefId())) {
207 $form->addCommandButton('save', $this->lng->txt('save'));
208 }
209
213 $form,
214 $this
215 );
216 }
217
218 $persistentCertificateMode = new ilRadioGroupInputGUI(
219 $this->lng->txt('persistent_certificate_mode'),
220 'persistent_certificate_mode'
221 );
222 $persistentCertificateMode->setRequired(true);
223
224 $cronJobMode = new ilRadioOption(
225 $this->lng->txt('persistent_certificate_mode_cron'),
226 'persistent_certificate_mode_cron'
227 );
228 $cronJobMode->setInfo($this->lng->txt('persistent_certificate_mode_cron_info'));
229
230 $instantMode = new ilRadioOption(
231 $this->lng->txt('persistent_certificate_mode_instant'),
232 'persistent_certificate_mode_instant'
233 );
234 $instantMode->setInfo($this->lng->txt('persistent_certificate_mode_instant_info'));
235
236 $persistentCertificateMode->addOption($cronJobMode);
237 $persistentCertificateMode->addOption($instantMode);
238
239 $persistentCertificateMode->setValue($form_settings->get(
240 'persistent_certificate_mode',
241 'persistent_certificate_mode_cron'
242 ));
243
244 $form->addItem($persistentCertificateMode);
245
246 $this->tpl->setContent($form->getHTML());
247 }
248
249 public function certificatesOverview(): void
250 {
251 if (
252 !$this->certificate_active_validator->validate() ||
253 !$this->rbac_system->checkAccess('read', $this->object->getRefId())
254 ) {
255 $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->WARNING);
256 }
257
258 $this->tabs_gui->activateTab(self::TAB_CERTIFICATES);
259
260 $table = new CertificateOverviewTable();
261
262 $this->tpl->setContent($table->render());
263 }
264
265 public function downloadCertificate(): void
266 {
267 if (
268 !$this->certificate_active_validator->validate() ||
269 !$this->rbac_system->checkAccess('read', $this->object->getRefId())
270 ) {
271 $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->WARNING);
272 }
273
274 $certificate_id = $this->httpState->wrapper()->query()->retrieve(
275 'cert_overview_id',
276 $this->refinery->byTrying([
277 $this->refinery->kindlyTo()->listOf($this->refinery->kindlyTo()->int()),
278 $this->refinery->always([]),
279 ])
280 );
281
282 if ($certificate_id === []) {
283 $this->ctrl->redirect($this, self::CMD_CERTIFICATES_OVERVIEW);
284 }
285
286 // Only one download at a time is possible
287 $certificate_id = $certificate_id[array_key_first($certificate_id)];
288
289 try {
290 $user_certificate = $this->user_certificate_repo->fetchCertificate($certificate_id);
291 if (!$user_certificate->isCurrentlyActive()) {
292 throw new Exception('Certificate is not active');
293 }
294 } catch (Exception $ex) {
295 $this->logger->error('Fetching user certificate for download failed. Ex.: ' . $ex->getMessage());
296 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('error_creating_certificate_pdf'), true);
297 $this->ctrl->redirect($this, self::CMD_CERTIFICATES_OVERVIEW);
298 }
299
300 $pdf_generator = new ilPdfGenerator($this->user_certificate_repo);
301
302 $pdf_action = new ilCertificatePdfAction(
303 $pdf_generator,
305 $this->lng->txt('error_creating_certificate_pdf')
306 );
307
308 $pdf_action->downloadPdf($user_certificate->getUserId(), $user_certificate->getObjId());
309 $this->ctrl->redirect($this, self::CMD_CERTIFICATES_OVERVIEW);
310 }
311
312 public function save(): void
313 {
314 $form_settings = new ilSetting('certificate');
315
316 $mode = $this->httpState->wrapper()->post()->retrieve(
317 'persistent_certificate_mode',
318 $this->refinery->kindlyTo()->string()
319 );
320 $previousMode = $form_settings->get('persistent_certificate_mode', 'persistent_certificate_mode_cron');
321 if ($mode !== $previousMode && $mode === 'persistent_certificate_mode_instant') {
322 $cron = new ilCertificateCron();
323 $cron->init();
324 $cron->run();
325 }
326
327 $form_settings->set(
328 'pageformat',
329 $this->httpState->wrapper()->post()->retrieve('pageformat', $this->refinery->kindlyTo()->string())
330 );
331 $form_settings->set(
332 'active',
333 (string) ($this->httpState->wrapper()->post()->has('active') && $this->httpState->wrapper()->post()->retrieve(
334 'active',
335 $this->refinery->kindlyTo()->bool()
336 ))
337 );
338 $form_settings->set('persistent_certificate_mode', $mode);
339
340 $this->tpl->setOnScreenMessage('success', $this->lng->txt('settings_saved'));
341 $this->settings();
342 }
343}
error(string $a_errmsg)
static addFieldsToForm(int $a_form_id, ilPropertyFormGUI $a_form, ilObjectGUI $a_parent_gui)
Just a wrapper class to create Unit Test for other classes.
This class represents a checkbox property in a property form.
This class represents an image file property in a property form.
Component logger with individual log levels by component id.
This class represents a non editable value in a property form.
__construct( $data, int $id=0, bool $call_by_reference=true, bool $prepare_output=true, ?ilUserCertificateRepository $user_certificate_repo=null, ?ilCertificateActiveValidator $certificate_active_validator=null,)
readonly ilCertificateActiveValidator $certificate_active_validator
readonly ilUserCertificateRepository $user_certificate_repo
getAdminTabs()
administration tabs show only permissions and trash folder
Class ilObjectGUI Basic methods of all Output classes.
prepareOutput(bool $show_sub_objects=true)
Class ilObject Basic functions for all objects.
This class represents a property form user interface.
This class represents a property in a property form.
This class represents an option in a radio group.
This class represents a selection list property in a property form.
ILIAS Setting Class.
$cron
Definition: cron.php:26
$info
Definition: entry_point.php:21
Interface GlobalHttpState.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$results
global $DIC
Definition: shib_login.php:26