1<?php
2
3/* Copyright (c) 1998-2019 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5
6/**
7 * Class ilCmiXapiSettingsGUI
8 *
9 * @author      Uwe Kohnle <kohnle@internetlehrer-gmbh.de>
10 * @author      Björn Heyser <info@bjoernheyser.de>
11 * @author      Stefan Schneider <info@eqsoft.de>
12 *
13 * @package     Module/CmiXapi
14 *
15 * @ilCtrl_Calls ilCmiXapiSettingsGUI: ilCertificateGUI
16 */
17class ilCmiXapiSettingsGUI
18{
19    const CMD_SHOW = 'show';
20    const CMD_DELIVER_CERTIFICATE = 'deliverCertificate';
21
22    const CMD_SAVE = 'save';
23
24    const DEFAULT_CMD = self::CMD_SHOW;
25
26    const SUBTAB_ID_SETTINGS = 'settings';
27    const SUBTAB_ID_CERTIFICATE = 'certificate';
28
29    /**
30     * @var ilObjCmiXapi
31     */
32    protected $object;
33
34    /**
35     * @param ilObjCmiXapi $object
36     */
37    public function __construct(ilObjCmiXapi $object)
38    {
39        $this->object = $object;
40    }
41
42    public function initSubtabs()
43    {
44        global $DIC; /* @var \ILIAS\DI\Container $DIC */
45
46        $DIC->tabs()->addSubTab(
47            self::SUBTAB_ID_SETTINGS,
48            $DIC->language()->txt(self::SUBTAB_ID_SETTINGS),
49            $DIC->ctrl()->getLinkTarget($this, self::CMD_SHOW)
50        );
51
52        $validator = new ilCertificateActiveValidator();
53
54        if ($validator->validate()) {
55            $DIC->tabs()->addSubTab(
56                self::SUBTAB_ID_CERTIFICATE,
57                $DIC->language()->txt(self::SUBTAB_ID_CERTIFICATE),
58                $DIC->ctrl()->getLinkTargetByClass(ilCertificateGUI::class, 'certificateEditor')
59            );
60        }
61    }
62
63    public function executeCommand()
64    {
65        global $DIC; /* @var \ILIAS\DI\Container $DIC */
66
67        $this->initSubtabs();
68
69        switch ($DIC->ctrl()->getNextClass()) {
70            case strtolower(ilCertificateGUI::class):
71
72                $validator = new ilCertificateActiveValidator();
73
74                if (!$validator->validate()) {
75                    throw new ilCmiXapiException('access denied!');
76                }
77
78                $DIC->tabs()->activateSubTab(self::SUBTAB_ID_CERTIFICATE);
79
80                $guiFactory = new ilCertificateGUIFactory();
81                $gui = $guiFactory->create($this->object);
82
83                $DIC->ctrl()->forwardCommand($gui);
84
85                break;
86
87            default:
88                $command = $DIC->ctrl()->getCmd(self::DEFAULT_CMD) . 'Cmd';
89                $this->{$command}();
90        }
91    }
92
93    protected function saveCmd()
94    {
95        global $DIC; /* @var \ILIAS\DI\Container $DIC */
96
97        $form = $this->buildForm();
98
99        if ($form->checkInput()) {
100            $this->saveSettings($form);
101
102            ilUtil::sendSuccess($DIC->language()->txt('msg_obj_modified'), true);
103            $DIC->ctrl()->redirect($this, self::CMD_SHOW);
104        }
105
106        $this->showCmd($form);
107    }
108
109    protected function showCmd(ilPropertyFormGUI $form = null)
110    {
111        global $DIC; /* @var \ILIAS\DI\Container $DIC */
112
113        $DIC->tabs()->activateSubTab(self::SUBTAB_ID_SETTINGS);
114
115        $form = $this->buildForm();
116
117        $DIC->ui()->mainTemplate()->setContent($form->getHTML());
118    }
119
120    protected function buildForm()
121    {
122        global $DIC;
123        /* @var \ILIAS\DI\Container $DIC */
124
125        include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
126        $form = new ilPropertyFormGUI();
127        $form->setFormAction($DIC->ctrl()->getFormAction($this));
128
129        $ne = new ilNonEditableValueGUI($DIC->language()->txt('type'), "");
130        $ne->setValue($DIC->language()->txt('type_'.$this->object->getContentType()));
131        $form->addItem($ne);
132
133        $ne = new ilNonEditableValueGUI($DIC->language()->txt('cmix_lrs_type'), "");
134        $ne->setValue($this->object->getLrsType()->getTitle());
135        $form->addItem($ne);
136
137        $item = new ilTextInputGUI($DIC->language()->txt('title'), 'title');
138        $item->setSize(40);
139        $item->setMaxLength(128);
140        $item->setRequired(true);
141        $item->setInfo($DIC->language()->txt('title_info'));
142        $item->setValue($this->object->getTitle());
143        $form->addItem($item);
144
145        $item = new ilTextAreaInputGUI($DIC->language()->txt('description'), 'description');
146        $item->setInfo($DIC->language()->txt('description_info'));
147        $item->setRows(2);
148        $item->setCols(80);
149        $item->setValue($this->object->getDescription());
150        $form->addItem($item);
151
152        $item = new ilTextInputGUI($DIC->language()->txt('activity_id'), 'activity_id');
153        $item->setRequired(true);
154        $item->setSize(40);
155        $item->setMaxLength(128);
156        // $item->setRequired(true);
157        $item->setInfo($DIC->language()->txt('activity_id_info'));
158        $item->setValue($this->object->getActivityId());
159        $form->addItem($item);
160
161        $item = new ilCheckboxInputGUI($DIC->language()->txt('online'), 'online');
162        $item->setInfo($DIC->language()->txt("online_info"));
163        $item->setValue("1");
164        if (!$this->object->getOfflineStatus()) {
165            $item->setChecked(true);
166        }
167        $form->addItem($item);
168
169        if (!$this->object->isSourceTypeExternal()) {
170            $item = new ilFormSectionHeaderGUI();
171            $item->setTitle($DIC->language()->txt("launch_options"));
172            $form->addItem($item);
173
174            if ($this->object->isSourceTypeRemote()) {
175                $item = new ilTextInputGUI($DIC->language()->txt('launch_url'), 'launch_url');
176                $item->setSize(40);
177                $item->setMaxLength(128);
178                $item->setRequired(true);
179                $item->setInfo($DIC->language()->txt('launch_url_info'));
180                $item->setValue($this->object->getLaunchUrl());
181                $form->addItem($item);
182            }
183
184            if ($this->object->getContentType() != ilObjCmiXapi::CONT_TYPE_CMI5) {
185                $item = new ilCheckboxInputGUI($DIC->language()->txt('use_fetch'), 'use_fetch');
186                $item->setInfo($DIC->language()->txt("use_fetch_info"));
187                $item->setValue("1");
188
189                if ($this->object->isAuthFetchUrlEnabled()) {
190                    $item->setChecked(true);
191                }
192                $form->addItem($item);
193            }
194
195            $display = new ilRadioGroupInputGUI($DIC->language()->txt('launch_options'), 'display');
196            $display->setRequired(true);
197            $display->setValue($this->object->getLaunchMethod());
198            $optOwnWindow = new ilRadioOption($DIC->language()->txt('conf_own_window'), ilObjCmiXapi::LAUNCH_METHOD_OWN_WIN);
199            $optOwnWindow->setInfo($DIC->language()->txt('conf_own_window_info'));
200            $display->addOption($optOwnWindow);
201            $optAnyWindow = new ilRadioOption($DIC->language()->txt('conf_new_window'), ilObjCmiXapi::LAUNCH_METHOD_NEW_WIN);
202            $optAnyWindow->setInfo($DIC->language()->txt('conf_new_window_info'));
203            $display->addOption($optAnyWindow);
204            $form->addItem($display);
205
206            $launchMode = new ilRadioGroupInputGUI($DIC->language()->txt('conf_launch_mode'), 'launch_mode');
207            $launchMode->setRequired(true);
208            $launchMode->setValue($this->object->getLaunchMode());
209            $optNormal = new ilRadioOption($DIC->language()->txt('conf_launch_mode_normal'), ilObjCmiXapi::LAUNCH_MODE_NORMAL);
210            $optNormal->setInfo($DIC->language()->txt('conf_launch_mode_normal_info'));
211            $launchMode->addOption($optNormal);
212            $optBrowse = new ilRadioOption($DIC->language()->txt('conf_launch_mode_browse'), ilObjCmiXapi::LAUNCH_MODE_BROWSE);
213            $optBrowse->setInfo($DIC->language()->txt('conf_launch_mode_browse_info'));
214            $launchMode->addOption($optBrowse);
215            $optReview = new ilRadioOption($DIC->language()->txt('conf_launch_mode_review'), ilObjCmiXapi::LAUNCH_MODE_REVIEW);
216            $optReview->setInfo($DIC->language()->txt('conf_launch_mode_review_info'));
217            $launchMode->addOption($optReview);
218            $form->addItem($launchMode);
219        }
220
221        $lpDeterioration = new ilCheckboxInputGUI($DIC->language()->txt('conf_keep_lp'), 'avoid_lp_deterioration');
222        $lpDeterioration->setInfo($DIC->language()->txt('conf_keep_lp_info'));
223        if ($this->object->isKeepLpStatusEnabled()) {
224            $lpDeterioration->setChecked(true);
225        }
226        if (!$this->object->isSourceTypeExternal()) {
227            $optNormal->addSubItem($lpDeterioration);
228        } else {
229            $form->addItem($lpDeterioration);
230        }
231
232        if ($this->object->getContentType() == ilObjCmiXapi::CONT_TYPE_CMI5) {
233            $switchMode = new ilCheckboxInputGUI($DIC->language()->txt('conf_switch_to_review'), 'switch_to_review');
234            $switchMode->setInfo($DIC->language()->txt("conf_switch_to_review_info"));
235            if ($this->object->isSwitchToReviewEnabled()) {
236                $switchMode->setChecked(true);
237            }
238            $optNormal->addSubItem($switchMode);
239
240            $masteryScore = new ilNumberInputGUI($DIC->language()->txt('conf_mastery_score'), 'mastery_score');
241            $masteryScore->setInfo($DIC->language()->txt('conf_mastery_score_info'));
242            $masteryScore->setSuffix('%');
243            $masteryScore->allowDecimals(true);
244            $masteryScore->setDecimals(2);
245            $masteryScore->setMinvalueShouldBeGreater(false);
246            $masteryScore->setMinValue(0);
247            $masteryScore->setMaxvalueShouldBeLess(false);
248            $masteryScore->setMaxValue(100);
249            $masteryScore->setSize(4);
250            if (empty($this->object->getMasteryScore())) {
251                $this->object->setMasteryScorePercent(ilObjCmiXapi::LMS_MASTERY_SCORE);
252            }
253            $masteryScore->setValue($this->object->getMasteryScorePercent());
254            $optNormal->addSubItem($masteryScore);
255        }
256
257        if (!$this->object->isSourceTypeExternal()) {
258            if ($this->object->getContentType() != ilObjCmiXapi::CONT_TYPE_CMI5) {
259                $sectionHeader = new ilFormSectionHeaderGUI();
260                $sectionHeader->setTitle($DIC->language()->txt('sect_learning_progress_options'));
261                $form->addItem($sectionHeader);
262                $bypassProxy = new ilRadioGroupInputGUI($DIC->language()->txt('conf_bypass_proxy'), 'bypass_proxy');
263                $bypassProxy->setInfo($DIC->language()->txt('conf_bypass_proxy_info'));
264                $bypassProxy->setValue($this->object->isBypassProxyEnabled());
265                $opt1 = new ilRadioOption($DIC->language()->txt('conf_bypass_proxy_disabled'), 0);
266                $bypassProxy->addOption($opt1);
267                $opt2 = new ilRadioOption($DIC->language()->txt('conf_bypass_proxy_enabled'), 1);
268                $bypassProxy->addOption($opt2);
269                $form->addItem($bypassProxy);
270                if ($this->object->getLrsType()->isBypassProxyEnabled()) {
271                    $bypassProxy->setDisabled(true);
272                }
273            }
274
275            $item = new ilFormSectionHeaderGUI();
276            $item->setTitle($DIC->language()->txt("privacy_options"));
277            $form->addItem($item);
278
279            $userIdent = new ilRadioGroupInputGUI($DIC->language()->txt('conf_privacy_ident'), 'privacy_ident');
280            $op = new ilRadioOption(
281                $DIC->language()->txt('conf_privacy_ident_il_uuid_user_id'),
282                ilCmiXapiLrsType::PRIVACY_IDENT_IL_UUID_USER_ID
283            );
284            $op->setInfo($DIC->language()->txt('conf_privacy_ident_il_uuid_user_id_info'));
285            $userIdent->addOption($op);
286            $op = new ilRadioOption(
287                $DIC->language()->txt('conf_privacy_ident_il_uuid_login'),
288                ilCmiXapiLrsType::PRIVACY_IDENT_IL_UUID_LOGIN
289            );
290            $op->setInfo($DIC->language()->txt('conf_privacy_ident_il_uuid_login_info'));
291            $userIdent->addOption($op);
292            $op = new ilRadioOption(
293                $DIC->language()->txt('conf_privacy_ident_il_uuid_ext_account'),
294                ilCmiXapiLrsType::PRIVACY_IDENT_IL_UUID_EXT_ACCOUNT
295            );
296            $op->setInfo($DIC->language()->txt('conf_privacy_ident_il_uuid_ext_account_info'));
297            $userIdent->addOption($op);
298            $op = new ilRadioOption(
299                $DIC->language()->txt('conf_privacy_ident_il_uuid_random'),
300                ilCmiXapiLrsType::PRIVACY_IDENT_IL_UUID_RANDOM
301            );
302            $op->setInfo($DIC->language()->txt('conf_privacy_ident_il_uuid_random_info'));
303            $userIdent->addOption($op);
304            $op = new ilRadioOption(
305                $DIC->language()->txt('conf_privacy_ident_real_email'),
306                ilCmiXapiLrsType::PRIVACY_IDENT_REAL_EMAIL
307            );
308            $op->setInfo($DIC->language()->txt('conf_privacy_ident_real_email_info'));
309            $userIdent->addOption($op);
310            $userIdent->setValue($this->object->getPrivacyIdent());
311            $userIdent->setInfo(
312                $DIC->language()->txt('conf_privacy_ident_info') . ' ' . ilCmiXapiUser::getIliasUuid()
313            );
314            $userIdent->setRequired(false);
315            $form->addItem($userIdent);
316
317            $userName = new ilRadioGroupInputGUI($DIC->language()->txt('conf_privacy_name'), 'privacy_name');
318            $op = new ilRadioOption($DIC->language()->txt('conf_privacy_name_none'), ilCmiXapiLrsType::PRIVACY_NAME_NONE);
319            $op->setInfo($DIC->language()->txt('conf_privacy_name_none_info'));
320            $userName->addOption($op);
321            $op = new ilRadioOption($DIC->language()->txt('conf_privacy_name_firstname'), ilCmiXapiLrsType::PRIVACY_NAME_FIRSTNAME);
322            $op->setInfo($DIC->language()->txt('conf_privacy_name_firstname_info'));
323            $userName->addOption($op);
324            $op = new ilRadioOption($DIC->language()->txt('conf_privacy_name_lastname'), ilCmiXapiLrsType::PRIVACY_NAME_LASTNAME);
325            $op->setInfo($DIC->language()->txt('conf_privacy_name_lastname_info'));
326            $userName->addOption($op);
327            $op = new ilRadioOption($DIC->language()->txt('conf_privacy_name_fullname'), ilCmiXapiLrsType::PRIVACY_NAME_FULLNAME);
328            $op->setInfo($DIC->language()->txt('conf_privacy_name_fullname_info'));
329            $userName->addOption($op);
330            $userName->setValue($this->object->getPrivacyName());
331            $userName->setInfo($DIC->language()->txt('conf_privacy_name_info'));
332            $userName->setRequired(false);
333            $form->addItem($userName);
334
335            if ($this->object->getLrsType()->getForcePrivacySettings()) {
336                $userIdent->setDisabled(true);
337                $userName->setDisabled(true);
338            }
339
340            // $item = new ilCheckboxInputGUI($DIC->language()->txt('only_moveon_label'), 'only_moveon');
341            // $item->setInfo($DIC->language()->txt('only_moveon_info'));
342            // $item->setChecked($this->object->getOnlyMoveon());
343
344            // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('achieved_label'), 'achieved');
345            // $subitem->setInfo($DIC->language()->txt('achieved_info'));
346            // $subitem->setChecked($this->object->getAchieved());
347            // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
348            // $item->addSubItem($subitem);
349
350            // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('answered_label'), 'answered');
351            // $subitem->setInfo($DIC->language()->txt('answered_info'));
352            // $subitem->setChecked($this->object->getAnswered());
353            // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
354            // $item->addSubItem($subitem);
355
356            // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('completed_label'), 'completed');
357            // $subitem->setInfo($DIC->language()->txt('completed_info'));
358            // $subitem->setChecked($this->object->getCompleted());
359            // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
360            // $item->addSubItem($subitem);
361
362            // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('failed_label'), 'failed');
363            // $subitem->setInfo($DIC->language()->txt('failed_info'));
364            // $subitem->setChecked($this->object->getFailed());
365            // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
366            // $item->addSubItem($subitem);
367
368            // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('initialized_label'), 'initialized');
369            // $subitem->setInfo($DIC->language()->txt('initialized_info'));
370            // $subitem->setChecked($this->object->getInitialized());
371            // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
372            // $item->addSubItem($subitem);
373
374            // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('passed_label'), 'passed');
375            // $subitem->setInfo($DIC->language()->txt('passed_info'));
376            // $subitem->setChecked($this->object->getPassed());
377            // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
378            // $item->addSubItem($subitem);
379
380            // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('progressed_label'), 'progressed');
381            // $subitem->setInfo($DIC->language()->txt('progressed_info'));
382            // $subitem->setChecked($this->object->getProgressed());
383            // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
384            // $item->addSubItem($subitem);
385            // if ($this->object->getContentType() != ilObjCmiXapi::CONT_TYPE_CMI5) {
386                // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('satisfied_label'), 'satisfied');
387                // $subitem->setInfo($DIC->language()->txt('satisfied_info'));
388                // $subitem->setChecked($this->object->getSatisfied());
389                // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
390                // $item->addSubItem($subitem);
391
392                // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('terminated_label'), 'terminated');
393                // $subitem->setInfo($DIC->language()->txt('terminated_info'));
394                // $subitem->setChecked($this->object->getTerminated());
395                // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
396                // $item->addSubItem($subitem);
397            // }
398            // if ($this->object->getLrsType()->getForcePrivacySettings()) $item->setDisabled(true);
399            // $form->addItem($item);
400
401            // $item = new ilCheckboxInputGUI($DIC->language()->txt('hide_data_label'), 'hide_data');
402            // $item->setInfo($DIC->language()->txt('hide_data_info'));
403            // $item->setChecked($this->object->getHideData());
404
405            // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('timestamp_label'), 'timestamp');
406            // $subitem->setInfo($DIC->language()->txt('timestamp_info'));
407            // $subitem->setChecked($this->object->getTimestamp());
408            // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
409            // $item->addSubItem($subitem);
410
411            // $subitem = new ilCheckboxInputGUI($DIC->language()->txt('duration_label'), 'duration');
412            // $subitem->setInfo($DIC->language()->txt('duration_info'));
413            // $subitem->setChecked($this->object->getDuration());
414            // if ($this->object->getLrsType()->getForcePrivacySettings()) $subitem->setDisabled(true);
415            // $item->addSubItem($subitem);
416
417            // if ($this->object->getLrsType()->getForcePrivacySettings()) $item->setDisabled(true);
418            // $form->addItem($item);
419
420            // $item = new ilCheckboxInputGUI($DIC->language()->txt('no_substatements_label'), 'no_substatements');
421            // $item->setInfo($DIC->language()->txt('no_substatements_info'));
422            // $item->setChecked($this->object->getNoSubstatements());
423            // if ($this->object->getLrsType()->getForcePrivacySettings()) $item->setDisabled(true);
424            // $form->addItem($item);
425
426        }
427
428        $item = new ilFormSectionHeaderGUI();
429        $item->setTitle($DIC->language()->txt("log_options"));
430        $form->addItem($item);
431
432        $item = new ilCheckboxInputGUI($DIC->language()->txt('show_debug'), 'show_debug');
433        $item->setInfo($DIC->language()->txt("show_debug_info"));
434        $item->setValue("1");
435        if ($this->object->isStatementsReportEnabled()) {
436            $item->setChecked(true);
437        }
438        $form->addItem($item);
439
440        $highscore = new ilCheckboxInputGUI($DIC->language()->txt("highscore_enabled"), "highscore_enabled");
441        $highscore->setValue(1);
442        $highscore->setChecked($this->object->getHighscoreEnabled());
443        $highscore->setInfo($DIC->language()->txt("highscore_description"));
444        $form->addItem($highscore);
445        $highscore_tables = new ilRadioGroupInputGUI($DIC->language()->txt('highscore_mode'), 'highscore_mode');
446        $highscore_tables->setRequired(true);
447        $highscore_tables->setValue($this->object->getHighscoreMode());
448        $highscore_table_own = new ilRadioOption($DIC->language()->txt('highscore_own_table'), ilObjCmiXapi::HIGHSCORE_SHOW_OWN_TABLE);
449        $highscore_table_own->setInfo($DIC->language()->txt('highscore_own_table_description'));
450        $highscore_tables->addOption($highscore_table_own);
451        $highscore_table_other = new ilRadioOption($DIC->language()->txt('highscore_top_table'), ilObjCmiXapi::HIGHSCORE_SHOW_TOP_TABLE);
452        $highscore_table_other->setInfo($DIC->language()->txt('highscore_top_table_description'));
453        $highscore_tables->addOption($highscore_table_other);
454        $highscore_table_other = new ilRadioOption($DIC->language()->txt('highscore_all_tables'), ilObjCmiXapi::HIGHSCORE_SHOW_ALL_TABLES);
455        $highscore_table_other->setInfo($DIC->language()->txt('highscore_all_tables_description'));
456        $highscore_tables->addOption($highscore_table_other);
457        $highscore->addSubItem($highscore_tables);
458        $highscore_top_num = new ilNumberInputGUI($DIC->language()->txt("highscore_top_num"), "highscore_top_num");
459        $highscore_top_num->setSize(4);
460        $highscore_top_num->setRequired(true);
461        $highscore_top_num->setMinValue(1);
462        $highscore_top_num->setSuffix($DIC->language()->txt("highscore_top_num_unit"));
463        $highscore_top_num->setValue($this->object->getHighscoreTopNum(null));
464        $highscore_top_num->setInfo($DIC->language()->txt("highscore_top_num_description"));
465        $highscore->addSubItem($highscore_top_num);
466        $highscore_achieved_ts = new ilCheckboxInputGUI($DIC->language()->txt("highscore_achieved_ts"), "highscore_achieved_ts");
467        $highscore_achieved_ts->setValue(1);
468        $highscore_achieved_ts->setChecked($this->object->getHighscoreAchievedTS());
469        $highscore_achieved_ts->setInfo($DIC->language()->txt("highscore_achieved_ts_description"));
470        $highscore->addSubItem($highscore_achieved_ts);
471        $highscore_percentage = new ilCheckboxInputGUI($DIC->language()->txt("highscore_percentage"), "highscore_percentage");
472        $highscore_percentage->setValue(1);
473        $highscore_percentage->setChecked($this->object->getHighscorePercentage());
474        $highscore_percentage->setInfo($DIC->language()->txt("highscore_percentage_description"));
475        $highscore->addSubItem($highscore_percentage);
476        $highscore_wtime = new ilCheckboxInputGUI($DIC->language()->txt("highscore_wtime"), "highscore_wtime");
477        $highscore_wtime->setValue(1);
478        $highscore_wtime->setChecked($this->object->getHighscoreWTime());
479        $highscore_wtime->setInfo($DIC->language()->txt("highscore_wtime_description"));
480        $highscore->addSubItem($highscore_wtime);
481
482
483        $form->setTitle($DIC->language()->txt('settings'));
484        $form->addCommandButton(self::CMD_SAVE, $DIC->language()->txt("save"));
485        $form->addCommandButton(self::CMD_SHOW, $DIC->language()->txt("cancel"));
486
487        return $form;
488    }
489
490    protected function saveSettings(ilPropertyFormGUI $form)
491    {
492        $this->object->setTitle($form->getInput('title'));
493        $this->object->setDescription($form->getInput('description'));
494
495        $this->object->setActivityId($form->getInput('activity_id'));
496        $this->object->setOfflineStatus(!(bool) $form->getInput('online'));
497
498        if (!$this->object->isSourceTypeExternal()) {
499            $this->object->setLaunchMethod($form->getInput('display'));
500
501            $this->object->setLaunchMode($form->getInput('launch_mode'));
502
503            if ($this->object->getLaunchMode() == ilObjCmiXapi::LAUNCH_MODE_NORMAL) {
504                if ($this->object->getContentType() == ilObjCmiXapi::CONT_TYPE_CMI5) {
505                    $this->object->setMasteryScorePercent($form->getInput('mastery_score'));
506                }
507                $this->object->setKeepLpStatusEnabled((bool) $form->getInput('avoid_lp_deterioration'));
508                $this->object->setSwitchToReviewEnabled((bool) $form->getInput('switch_to_review'));
509            }
510            else {
511                $this->object->setKeepLpStatusEnabled(true);
512                $this->object->setSwitchToReviewEnabled(false);
513            }
514
515            if ($this->object->isSourceTypeRemote()) {
516                $this->object->setLaunchUrl($form->getInput('launch_url'));
517            }
518
519            if ($this->object->getContentType() == ilObjCmiXapi::CONT_TYPE_CMI5) {
520                $this->object->setAuthFetchUrlEnabled(true);
521            } else {
522                $this->object->setAuthFetchUrlEnabled((bool) $form->getInput('use_fetch'));
523            }
524
525            if (!$this->object->getLrsType()->isBypassProxyEnabled()) {
526                if ($this->object->getContentType() == ilObjCmiXapi::CONT_TYPE_CMI5) {
527                    $this->object->setBypassProxyEnabled(false);
528                }
529                else {
530                    $this->object->setBypassProxyEnabled((bool) $form->getInput('bypass_proxy'));
531                }
532            }
533
534            if (!$this->object->getLrsType()->getForcePrivacySettings()) {
535                $this->object->setPrivacyIdent($form->getInput('privacy_ident'));
536                $this->object->setPrivacyName($form->getInput('privacy_name'));
537                // $this->object->setOnlyMoveon((bool)$form->getInput("only_moveon"));
538                // $this->object->setAchieved((bool)$form->getInput("achieved"));
539                // $this->object->setAnswered((bool)$form->getInput("answered"));
540                // $this->object->setCompleted((bool)$form->getInput("completed"));
541                // $this->object->setFailed((bool)$form->getInput("failed"));
542                // $this->object->setInitialized((bool)$form->getInput("initialized"));
543                // $this->object->setPassed((bool)$form->getInput("passed"));
544                // $this->object->setProgressed((bool)$form->getInput("progressed"));
545                // if ($this->object->getContentType() == ilObjCmiXapi::CONT_TYPE_CMI5) {
546                    // $this->object->setSatisfied(true);
547                    // $this->object->setTerminated(true);
548                // } else {
549                    // $this->object->setSatisfied((bool)$form->getInput("satisfied"));
550                    // $this->object->setTerminated((bool)$form->getInput("terminated"));
551                // }
552                // $this->object->setHideData((bool)$form->getInput("hide_data"));
553                // $this->object->setTimestamp((bool)$form->getInput("timestamp"));
554                // $this->object->setDuration((bool)$form->getInput("duration"));
555                // $this->object->setNoSubstatements((bool)$form->getInput("no_substatements"));
556            }
557        } else { //SourceTypeExternal
558            $this->object->setBypassProxyEnabled(true);
559            $this->object->setKeepLpStatusEnabled((bool) $form->getInput('avoid_lp_deterioration'));
560        }
561
562        $this->object->setStatementsReportEnabled((bool) $form->getInput('show_debug'));
563
564        $this->object->setHighscoreEnabled((bool) $form->getInput('highscore_enabled'));
565        if ($this->object->getHighscoreEnabled()) {
566            // highscore settings
567            $this->object->setHighscoreEnabled((bool) $form->getInput('highscore_enabled'));
568            $this->object->setHighscoreAchievedTS((bool) $form->getInput('highscore_achieved_ts'));
569            $this->object->setHighscorePercentage((bool) $form->getInput('highscore_percentage'));
570            $this->object->setHighscoreWTime((bool) $form->getInput('highscore_wtime'));
571            $this->object->setHighscoreMode((int) $form->getInput('highscore_mode'));
572            $this->object->setHighscoreTopNum((int) $form->getInput('highscore_top_num'));
573        }
574
575        $this->object->update();
576    }
577
578    protected function deliverCertificateCmd()
579    {
580        global $DIC; /* @var \ILIAS\DI\Container $DIC */
581
582        $validator = new ilCertificateDownloadValidator();
583
584        if (!$validator->isCertificateDownloadable((int) $DIC->user()->getId(), (int) $this->object->getId())) {
585            ilUtil::sendFailure($DIC->language()->txt("permission_denied"), true);
586            $DIC->ctrl()->redirectByClass(ilObjCmiXapiGUI::class, ilObjCmiXapiGUI::CMD_INFO_SCREEN);
587        }
588
589        $repository = new ilUserCertificateRepository();
590
591        $certLogger = $DIC->logger()->cert();
592        $pdfGenerator = new ilPdfGenerator($repository, $certLogger);
593
594        $pdfAction = new ilCertificatePdfAction(
595            $certLogger,
596            $pdfGenerator,
597            new ilCertificateUtilHelper(),
598            $DIC->language()->txt('error_creating_certificate_pdf')
599        );
600
601        $pdfAction->downloadPdf((int) $DIC->user()->getId(), (int) $this->object->getId());
602    }
603}
604