ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilPCVerificationGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
27{
28 private const SUPPORTED_TYPES = ['excv', 'tstv', 'crsv', 'cmxv', 'ltiv', 'scov'];
29 protected ilObjUser $user;
30
31 public function __construct(
32 ilPageObject $a_pg_obj,
33 ?ilPCVerification $a_content_obj,
34 string $a_hier_id = '0',
35 string $a_pc_id = ""
36 ) {
37 global $DIC;
38
39 $this->user = $DIC->user();
40 parent::__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id);
41 }
42
43 public function executeCommand(): void
44 {
45 $cmd = $this->ctrl->getCmd();
46 $this->$cmd();
47 }
48
49 public function insert(?ilPropertyFormGUI $a_form = null): void
50 {
52
53 if (!$a_form) {
54 $a_form = $this->initForm(true);
55 }
56 $this->tpl->setContent($a_form->getHTML());
57 }
58
59 public function edit(?ilPropertyFormGUI $a_form = null): void
60 {
62
63 if (!$a_form) {
64 $a_form = $this->initForm();
65 }
66 $this->tpl->setContent($a_form->getHTML());
67 }
68
73 {
74 $nodes = [];
75
76 $tree = new ilWorkspaceTree($this->user->getId());
77 $root = $tree->getRootId();
78 if ($root) {
79 $root = $tree->getNodeData($root);
80 foreach ($tree->getSubTree($root) as $node) {
81 if (in_array($node['type'], self::SUPPORTED_TYPES, true)) {
82 $nodes[$node['obj_id']] = $node;
83 }
84 }
85 }
86
87 return $nodes;
88 }
89
94 private function getValidCertificateByIdMap(): array
95 {
96 $certificates = [];
97
98 $repository = new ilUserCertificateRepository();
99 $activeCertificates = $repository->fetchActiveCertificates($this->user->getId());
100 foreach ($activeCertificates as $certificate) {
101 $certificates[$certificate->getObjId()] = $certificate;
102 }
103
104 return $certificates;
105 }
106
107 protected function initForm(bool $a_insert = false): ilPropertyFormGUI
108 {
109 $this->lng->loadLanguageModule('wsp');
110
111 $form = new ilPropertyFormGUI();
112 $form->setFormAction($this->ctrl->getFormAction($this));
113
114 $data = [];
115 if ($a_insert) {
116 $form->setTitle($this->lng->txt('cont_insert_verification'));
117 $form->addCommandButton('create_verification', $this->lng->txt('save'));
118 $form->addCommandButton('cancelCreate', $this->lng->txt('cancel'));
119 } else {
120 $form->setTitle($this->lng->txt('cont_update_verification'));
121 $form->addCommandButton('update', $this->lng->txt('save'));
122 $form->addCommandButton('cancelUpdate', $this->lng->txt('cancel'));
123 $data = $this->content_obj->getData();
124 }
125
126 $certificateOptions = [];
127 foreach ($this->getValidCertificateByIdMap() as $certificate) {
128 $userCertificate = $certificate->getUserCertificate();
130 $userCertificate->getAcquiredTimestamp(),
132 ));
133
134 $type = $this->lng->txt('wsp_type_' . $userCertificate->getObjType() . 'v');
135 if ('sahs' === $userCertificate->getObjType()) {
136 $type = $this->lng->txt('wsp_type_scov');
137 }
138 $additionalInformation = ' (' . $type . ' / ' . $dateTime . ')';
139 $certificateOptions[$userCertificate->getObjId()] = $certificate->getObjectTitle() . $additionalInformation;
140 }
141
142 if ($a_insert || (isset($data['type']) && 'crta' === $data['type'])) {
143 $certificate = new ilSelectInputGUI($this->lng->txt('certificate'), 'persistent_object');
144 $certificate->setRequired(true);
145 $certificate->setOptions($certificateOptions);
146 $form->addItem($certificate);
147 if (isset($data['id'])) {
148 $certificate->setValue($data['id']);
149 }
150
151 return $form;
152 }
153
154 $certificateSource = new ilRadioGroupInputGUI(
155 $this->lng->txt('certificate_selection'),
156 'certificate_selection'
157 );
158
159 $workspaceRadioButton = new ilRadioOption(
160 $this->lng->txt('certificate_workspace_option'),
161 'certificate_workspace_option'
162 );
163 $persistentRadioButton = new ilRadioOption(
164 $this->lng->txt('certificate_persistent_option'),
165 'certificate_persistent_option'
166 );
167
168 $workspaceCertificates = new ilSelectInputGUI($this->lng->txt('cont_verification_object'), 'object');
169 $workspaceCertificates->setRequired(true);
170 $workspaceOptions = [];
171 foreach ($this->getValidWorkspaceCertificateNodeByIdMap() as $node) {
172 $workspaceOptions[$node['obj_id']] = $node['title'] . ' (' . $this->lng->txt('wsp_type_' . $node['type']) . ')';
173 }
174 asort($workspaceOptions);
175 $workspaceCertificates->setOptions($workspaceOptions);
176
177 $certificate = new ilSelectInputGUI($this->lng->txt('cont_verification_object'), 'persistent_object');
178 $certificate->setRequired(true);
179 $certificate->setOptions($certificateOptions);
180 $persistentRadioButton->addSubItem($certificate);
181 $workspaceRadioButton->addSubItem($workspaceCertificates);
182
183 $certificateSource->addOption($persistentRadioButton);
184 $certificateSource->addOption($workspaceRadioButton);
185
186 $form->addItem($certificateSource);
187
188 $certificateSource->setValue('certificate_workspace_option');
189 $workspaceCertificates->setValue($data['id']);
190
191 return $form;
192 }
193
194 public function create_verification(): void
195 {
196 $this->create();
197 }
198
199 public function create(): void
200 {
201 $form = $this->initForm(true);
202 if ($form->checkInput()) {
203 $objectId = (int) $form->getInput('persistent_object');
204 $userId = $this->user->getId();
205
206 $certificateFileService = new ilPortfolioCertificateFileService();
207 try {
208 $certificateFileService->createCertificateFile($userId, $objectId);
209 } catch (\ILIAS\Filesystem\Exception\FileAlreadyExistsException $e) {
210 $this->tpl->setOnScreenMessage('info', $this->lng->txt('certificate_file_not_found_error'), true);
211 $this->log->warning($e->getMessage());
212 } catch (\ILIAS\Filesystem\Exception\IOException $e) {
213 $this->tpl->setOnScreenMessage('info', $this->lng->txt('certificate_file_input_output_error'), true);
214 $this->log->error($e->getMessage());
215 $this->ctrl->redirect($this, 'initForm');
216 } catch (ilException $e) {
217 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('error_creating_certificate_pdf'), true);
218 $this->log->error($e->getMessage());
219 $this->ctrl->redirect($this, 'initForm');
220 }
221
222 $this->content_obj = new ilPCVerification($this->getPage());
223 $this->content_obj->create($this->pg_obj, $this->hier_id, $this->pc_id);
224 $this->content_obj->setData('crta', $objectId);
225
226 $this->updated = $this->pg_obj->update();
227 if ($this->updated === true) {
228 $this->ctrl->returnToParent($this, 'jump' . $this->hier_id);
229 }
230
231 $this->log->info('File could not be created');
232 }
233
234 $this->insert($form);
235 }
236
241 public function update(): void
242 {
243 $form = $this->initForm();
244 if ($form->checkInput()) {
245 $option = 'certificate_persistent_option';
246 if ($form->getItemByPostVar('certificate_selection')) {
247 $option = $form->getInput('certificate_selection');
248 }
249
250 $oldContentData = $this->content_obj->getData();
251
252 if ('certificate_workspace_option' === $option) {
253 $objectId = (int) $form->getInput('object');
254 $validWorkSpaceCertificates = $this->getValidWorkspaceCertificateNodeByIdMap();
255
256 if (isset($validWorkSpaceCertificates[$objectId])) {
257 $this->content_obj->setData($validWorkSpaceCertificates[$objectId]['type'], $objectId);
258 }
259 } elseif ('certificate_persistent_option' === $option) {
260 try {
261 $objectId = (int) $form->getInput('persistent_object');
262 $validCertificates = $this->getValidCertificateByIdMap();
263
264 if (isset($validCertificates[$objectId])) {
265 $certificateFileService = new ilPortfolioCertificateFileService();
266 $certificateFileService->createCertificateFile(
267 $this->user->getId(),
268 $objectId
269 );
270 $this->content_obj->setData('crta', $objectId);
271 }
272 } catch (\ILIAS\Filesystem\Exception\FileNotFoundException | \ILIAS\Filesystem\Exception\FileAlreadyExistsException $e) {
273 $this->tpl->setOnScreenMessage('info', $this->lng->txt('certificate_file_not_found_error'), true);
274 $this->log->warning($e->getMessage());
275 } catch (\ILIAS\Filesystem\Exception\IOException $e) {
276 $this->tpl->setOnScreenMessage('info', $this->lng->txt('certificate_file_input_output_error'), true);
277 $this->log->warning($e->getMessage());
278 } catch (ilException $e) {
279 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('error_creating_certificate_pdf'), true);
280 $this->log->error($e->getMessage());
281 $this->ctrl->redirect($this, 'initForm');
282 }
283 }
284
285 if ('crta' === $oldContentData['type']) {
286 try {
287 $certificateFileService = new ilPortfolioCertificateFileService();
288 $certificateFileService->deleteCertificateFile(
289 $this->user->getId(),
290 (int) $oldContentData['id']
291 );
292 } catch (\ILIAS\Filesystem\Exception\FileNotFoundException $e) {
293 $this->tpl->setOnScreenMessage('info', $this->lng->txt('certificate_file_not_found_error'));
294 $this->log->warning($e->getMessage());
295 } catch (\ILIAS\Filesystem\Exception\IOException $e) {
296 $this->tpl->setOnScreenMessage('info', $this->lng->txt('certificate_file_input_output_error'));
297 $this->log->warning($e->getMessage());
298 }
299 }
300
301 $this->updated = $this->pg_obj->update();
302 if ($this->updated === true) {
303 $this->ctrl->returnToParent($this, 'jump' . $this->hier_id);
304 }
305 }
306
307 $this->pg_obj->addHierIDs();
308 $this->edit($form);
309 }
310}
const IL_CAL_UNIX
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
@classDescription Date and time handling
Base class for ILIAS Exception handling.
User class.
Class ilPCVerificationGUI Handles user commands on verifications.
insert(?ilPropertyFormGUI $a_form=null)
__construct(ilPageObject $a_pg_obj, ?ilPCVerification $a_content_obj, string $a_hier_id='0', string $a_pc_id="")
edit(?ilPropertyFormGUI $a_form=null)
initForm(bool $a_insert=false)
Class ilPCVerification Verification content object (see ILIAS DTD)
User Interface for Editing of Page Content Objects (Paragraphs, Tables, ...)
Class ilPageObject Handles PageObjects of ILIAS Learning Modules (see ILIAS DTD)
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.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
global $DIC
Definition: shib_login.php:26