ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilContainerObjectiveGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4
5
15{
19 private $logger = null;
20
21
25 protected $tabs;
26
30 protected $toolbar;
31
32 protected $force_details = 0;
33
37 protected $loc_settings;
38
39 const MATERIALS_TESTS = 1;
40 const MATERIALS_OTHER = 2;
41
42 private $output_html = '';
43
44 private $test_assignments = null;
45
53 public function __construct($a_container_gui)
54 {
55 global $DIC;
56
57 $this->tabs = $DIC->tabs();
58 $this->access = $DIC->access();
59 $this->user = $DIC->user();
60 $this->settings = $DIC->settings();
61 $this->ctrl = $DIC->ctrl();
62 $this->toolbar = $DIC->toolbar();
63 $lng = $DIC->language();
64
65 $this->logger = $DIC->logger()->crs();
66
67 $this->lng = $lng;
68 parent::__construct($a_container_gui);
69
70 $this->initDetails();
71 $this->initTestAssignments();
72 }
73
78 public function getTestAssignments()
79 {
81 }
82
86 public function getSettings()
87 {
89 }
90
91
92
100 public function getDetailsLevel($a_objective_id)
101 {
102 // no details anymore
103 return self::DETAILS_ALL;
104 }
105
112 public function getMainContent()
113 {
115 $ilTabs = $this->tabs;
116 $ilAccess = $this->access;
119
120 // see bug #7452
121 // $ilTabs->setSubTabActive($this->getContainerObject()->getType().'_content');
122
123
124 include_once 'Services/Object/classes/class.ilObjectListGUIFactory.php';
125
126 $tpl = new ilTemplate("tpl.container_page.html", true, true, "Services/Container");
127
128 if ($ilAccess->checkAccess('write', '', $this->getContainerObject()->getRefId())) {
129 // check for results
130 include_once './Modules/Course/classes/Objectives/class.ilLOUserResults.php';
131 if (ilLOUserResults::hasResults($this->getContainerObject()->getId(), $ilUser->getId())) {
132 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
133 $ilToolbar = new ilToolbarGUI();
134 $ilToolbar->addButton(
135 $lng->txt('crs_reset_results'),
136 $ilCtrl->getLinkTargetByClass(get_class($this->getContainerGUI()), 'reset')
137 );
138 }
139 }
140
141 // Feedback
142 // @todo
143 // $this->__showFeedBack();
144
145 $this->items = $this->getContainerObject()->getSubItems($this->getContainerGUI()->isActiveAdministrationPanel());
146
147 $is_manage = $this->getContainerGUI()->isActiveAdministrationPanel();
148 $is_order = $this->getContainerGUI()->isActiveOrdering();
149
150 include_once './Modules/Course/classes/Objectives/class.ilLOSettings.php';
151 $this->loc_settings = ilLOSettings::getInstanceByObjId($this->getContainerObject()->getId());
152
153 $this->initRenderer();
154
155 if (!$is_manage && !$is_order) {
156 // currently inactive
157 // $this->showStatus($tpl);
158 }
159 if (!$is_manage) {
160 $this->showObjectives($tpl, $is_order);
161
162 // $this->showMaterials($tpl,self::MATERIALS_TESTS, false, !$is_order);
163
164 // check for results
165 include_once './Modules/Course/classes/Objectives/class.ilLOUserResults.php';
166 $has_results = ilLOUserResults::hasResults($this->getContainerObject()->getId(), $ilUser->getId());
167
168 include_once './Modules/Test/classes/class.ilObjTestAccess.php';
169 $tst_obj_id = ilObject::_lookupObjId($this->loc_settings->getInitialTest());
170
171 if (
172 $this->loc_settings->getInitialTest() &&
173 $this->loc_settings->isGeneralInitialTestVisible() &&
174 !$this->loc_settings->isInitialTestStart() &&
176 ) {
177 $this->output_html .= $this->renderTest($this->loc_settings->getInitialTest(), null, true, true);
178 } elseif (
179 $this->loc_settings->getQualifiedTest() &&
180 $this->loc_settings->isGeneralQualifiedTestVisible()
181 ) {
182 $this->output_html .= $this->renderTest($this->loc_settings->getQualifiedTest(), null, false, true);
183 }
184
185 $this->showMaterials($tpl, self::MATERIALS_OTHER, false, !$is_order);
186 } else {
187 $this->showMaterials($tpl, null, $is_manage);
188 }
189
190 // reset results by setting or for admins
191 include_once './Modules/Course/classes/Objectives/class.ilLOSettings.php';
192 if (
193 ilLOSettings::getInstanceByObjId($this->getContainerObject()->getId())->isResetResultsEnabled() or
194 $ilAccess->checkAccess('write', '', $this->getContainerObject()->getRefId())
195 ) {
196 if ($has_results) {
197 if (!$is_manage && !$is_order) {
198 $this->showButton('askReset', $lng->txt('crs_reset_results'));
199 }
200 }
201 }
202
203 $tpl->setVariable('CONTAINER_PAGE_CONTENT', $this->output_html);
204
205 return $tpl->get();
206 }
207
215 public function showStatus($tpl)
216 {
219
220 include_once('./Modules/Course/classes/class.ilCourseObjectiveResultCache.php');
221
222 $status = ilCourseObjectiveResultCache::getStatus($ilUser->getId(), $this->getContainerObject()->getId());
223 if ($status == IL_OBJECTIVE_STATUS_EMPTY) {
224 return;
225 }
226 $info_tpl = new ilTemplate('tpl.crs_objectives_view_info_table.html', true, true, 'Modules/Course');
227 $info_tpl->setVariable("INFO_STRING", $lng->txt('crs_objectives_info_' . $status));
228
229 $this->output_html .= $info_tpl->get();
230 }
231
239 public function showObjectives($a_tpl, $a_is_order = false)
240 {
244
246
247 // get embedded blocks
248 $has_container_page = false;
249 if (!$a_is_order) {
250 $output_html = $this->getContainerGUI()->getContainerPageHTML();
251 if ($output_html != "") {
252 $has_container_page = true;
253 $this->output_html .= $this->insertPageEmbeddedBlocks($output_html);
254 }
255 unset($output_html);
256 }
257
258 // All objectives
259 include_once './Modules/Course/classes/class.ilCourseObjective.php';
260 if (!count($objective_ids = ilCourseObjective::_getObjectiveIds($this->getContainerObject()->getId(), true))) {
261 return false;
262 }
263
264 include_once('./Modules/Course/classes/class.ilCourseObjectiveListGUI.php');
265 $this->objective_list_gui = new ilCourseObjectiveListGUI();
266 $this->objective_list_gui->setContainerObject($this->getContainerGUI());
267 if ($ilSetting->get("icon_position_in_lists") == "item_rows") {
268 $this->objective_list_gui->enableIcon(true);
269 }
270
271 $acc = null;
272 if (!$a_is_order) {
273 include_once "Services/Accordion/classes/class.ilAccordionGUI.php";
274 $acc = new ilAccordionGUI();
275 $acc->setUseSessionStorage(true);
276 $acc->setAllowMultiOpened(true);
277 $acc->setBehaviour(ilAccordionGUI::FIRST_OPEN);
278 $acc->setId("crsobjtv_" . $this->container_obj->getId());
279 } else {
280 $this->renderer->addCustomBlock('lobj', $lng->txt('crs_objectives'));
281 }
282
283 $lur_data = $this->parseLOUserResults();
284
285 $has_initial = ilLOSettings::getInstanceByObjId($this->container_obj->getId())->worksWithInitialTest();
286
287 $has_lo_page = false;
288 $obj_cnt = 0;
289 foreach ($objective_ids as $objective_id) {
290 include_once './Modules/Course/classes/Objectives/class.ilLOUtils.php';
291 if (
292 $has_initial &&
293 (
294 !isset($lur_data[$objective_id]) or
296 $this->container_obj->getId(),
297 ilLOSettings::getInstanceByObjId($this->container_obj->getId())->getInitialTest(),
298 $objective_id
299 )
300 )
301 ) {
302 $lur_data[$objective_id] = array("type" => ilLOSettings::TYPE_TEST_INITIAL);
303 }
304
305 if ($html = $this->renderObjective($objective_id, $has_lo_page, $acc, $lur_data[$objective_id])) {
306 $this->renderer->addItemToBlock('lobj', 'lobj', $objective_id, $html);
307 }
308 $obj_cnt++;
309 }
310
311 // buttons for showing/hiding all objectives
312 if (!$a_is_order && $obj_cnt > 1) {
313 $this->showButton("", $lng->txt("crs_show_all_obj"), "", "crs_show_all_obj_btn");
314 $this->showButton("", $lng->txt("crs_hide_all_obj"), "", "crs_hide_all_obj_btn");
315 $acc->setShowAllElement("crs_show_all_obj_btn");
316 $acc->setHideAllElement("crs_hide_all_obj_btn");
317 }
318
319 if (!$has_container_page && $has_lo_page) {
320 // add core co page css
321 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
322 $tpl->setVariable(
323 "LOCATION_CONTENT_STYLESHEET",
325 );
326 $tpl->setCurrentBlock("SyntaxStyle");
327 $tpl->setVariable(
328 "LOCATION_SYNTAX_STYLESHEET",
330 );
331 $tpl->parseCurrentBlock();
332 }
333
334 // order/block
335 if ($a_is_order) {
336 $this->addFooterRow();
337
338 $this->output_html .= $output_html . $this->renderer->getHTML();
339
340 $this->renderer->resetDetails();
341 }
342 // view/accordion
343 else {
344 $this->output_html .= "<div class='ilCrsObjAcc'>" . $acc->getHTML() . "</div>";
345 }
346 }
347
355 public function addFooterRow()
356 {
357 // no details
358 return;
359
360 /*
361 $ilCtrl = $this->ctrl;
362
363 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $this->getContainerObject()->getRefId());
364 $ilCtrl->setParameterByClass("ilrepositorygui", "details_level", "1");
365 $url = $ilCtrl->getLinkTargetByClass("ilrepositorygui", "");
366 $this->renderer->addDetailsLevel(2, $url, ($this->details_level == self::DETAILS_TITLE));
367
368 $ilCtrl->setParameterByClass("ilrepositorygui", "details_level", "2");
369 $url = $ilCtrl->getLinkTargetByClass("ilrepositorygui", "");
370 $this->renderer->addDetailsLevel(3, $url, ($this->details_level == self::DETAILS_ALL));
371
372 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
373 */
374 }
375
376 protected function renderTest($a_test_ref_id, $a_objective_id, $a_is_initial = false, $a_add_border = false, $a_lo_result = array())
377 {
378 global $DIC;
379
380 $tree = $DIC->repositoryTree();
381
382 $node_data = [];
383 if ($a_test_ref_id) {
384 $node_data = $tree->getNodeData($a_test_ref_id);
385 }
386 if (!$node_data['child']) {
387 return '';
388 }
389
390 // update ti
391 if ($a_objective_id) {
392 if ($a_is_initial) {
393 $title = sprintf($this->lng->txt('crs_loc_itst_for_objective'), ilCourseObjective::lookupObjectiveTitle($a_objective_id));
394 } else {
395 $title = sprintf($this->lng->txt('crs_loc_qtst_for_objective'), ilCourseObjective::lookupObjectiveTitle($a_objective_id));
396 }
397 $node_data['objective_id'] = $a_objective_id;
398 $node_data['objective_status'] =
399 (
400 $a_lo_result['status'] == ilLOUserResults::STATUS_COMPLETED ?
401 false :
402 false
403 );
404 } else {
405 $obj_id = ilObject::_lookupObjId($a_test_ref_id);
407
408 $title .= (
409 ' (' .
410 (
411 $a_is_initial
412 ? $this->lng->txt('crs_loc_itest_info')
413 : $this->lng->txt('crs_loc_qtest_info')
414 ) .
415 ')'
416 );
417 $node_data['objective_id'] = 0;
418 }
419
420 $node_data['title'] = $title;
421
422 return "<div class='ilContObjectivesViewTestItem'>" . $this->renderItem($node_data) . "</div>";
423 }
424
432 public function showMaterials($a_tpl, $a_mode = null, $a_is_manage = false, $a_as_accordion = false)
433 {
434 $ilAccess = $this->access;
436
438
439 if (is_array($this->items["_all"])) {
440 $this->objective_map = $this->buildObjectiveMap();
441
442 // all rows
443 $item_r = array();
444
445 $position = 1;
446 foreach ($this->items["_all"] as $k => $item_data) {
447 if ($a_mode == self::MATERIALS_TESTS and $item_data['type'] != 'tst') {
448 continue;
449 }
450 if ($item_data['type'] == 'itgr') {
451 continue;
452 }
453 if (!$a_is_manage) {
454 // if test object is qualified or initial do not show here
455 include_once './Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
456 include_once './Modules/Course/classes/Objectives/class.ilLOSettings.php';
457 $assignments = ilLOTestAssignments::getInstance($this->getContainerObject()->getId());
458 if ($assignments->getTypeByTest($item_data['child']) != ilLOSettings::TYPE_TEST_UNDEFINED) {
459 continue;
460 }
461 }
462
463 if ($this->rendered_items[$item_data["child"]] !== true &&
464 !$this->renderer->hasItem($item_data["child"])) {
465 $this->rendered_items[$item_data['child']] = true;
466
467 // TODO: Position (DONE ?)
468 $html = $this->renderItem($item_data, $position++, $a_mode == self::MATERIALS_TESTS ? false : true);
469 if ($html != "") {
470 $item_r[] = array("html" => $html, "id" => $item_data["child"], "type" => $item_data["type"]);
471 }
472 }
473 }
474
475 // if we have at least one item, output the block
476 if (count($item_r) > 0) {
477 if (!$a_as_accordion) {
478 $pos = 0;
479
480 switch ($a_mode) {
482 $block_id = "tst";
483 $this->renderer->addTypeBlock($block_id);
484 break;
485
487 $block_id = "oth";
488 $this->renderer->addCustomBlock($block_id, $lng->txt('crs_other_resources'));
489 break;
490
491 // manage
492 default:
493 $block_id = "all";
494 $this->renderer->addCustomBlock($block_id, $lng->txt('content'));
495 break;
496 }
497
498 // :TODO:
499 if ($a_mode != self::MATERIALS_TESTS) {
500 $pos = $this->getItemGroupsHTML();
501 }
502
503 foreach ($item_r as $h) {
504 if (!$this->renderer->hasItem($h["id"])) {
505 $this->renderer->addItemToBlock($block_id, $h["type"], $h["id"], $h["html"]);
506 }
507 }
508
509 $this->output_html .= $this->renderer->getHTML();
510 } else {
511 switch ($a_mode) {
513 $txt = $lng->txt('objs_tst');
514 break;
515
517 $txt = $lng->txt('crs_other_resources');
518 break;
519 }
520
521 include_once "Services/Accordion/classes/class.ilAccordionGUI.php";
522 $acc = new ilAccordionGUI();
523 $acc->setId("crsobjtvmat" . $a_mode . "_" . $this->container_obj->getId());
524
525 $acc_content = array();
526 foreach ($item_r as $h) {
527 $acc_content[] = $h["html"];
528 }
529 $acc->addItem($txt, $this->buildAccordionContent($acc_content));
530
531 $this->output_html .= $acc->getHTML();
532 }
533 }
534 }
535 }
536
537 protected function buildObjectiveMap()
538 {
539 $objective_map = array();
540 include_once './Modules/Course/classes/class.ilCourseObjective.php';
541 // begin-patch lok
542 if (count($objective_ids = ilCourseObjective::_getObjectiveIds($this->getContainerObject()->getId(), true))) {
543 // end-patch lok
544 include_once('./Modules/Course/classes/class.ilCourseObjectiveMaterials.php');
545 foreach ($objective_ids as $objective_id) {
546 foreach (ilCourseObjectiveMaterials::_getAssignedMaterials($objective_id) as $mat_ref_id) {
547 $objective_map["material"][$mat_ref_id][] = $objective_id;
548
549 if (!isset($objective_map["names"][$objective_id])) {
550 $objective = new ilCourseObjective($this->getContainerObject(), $objective_id);
551 $objective_map["names"][$objective_id] = $objective->getTitle();
552 }
553 }
554 }
555
556 // initial/qualifying test
557 $tst = $this->loc_settings->getInitialTest();
558 if ($tst) {
559 $objective_map["test_i"] = $tst;
560 }
561 $tst = $this->loc_settings->getQualifiedTest();
562 if ($tst) {
563 $objective_map["test_q"] = $tst;
564 }
565
566 // objective test assignments
567 include_once 'Modules/Course/classes/Objectives/class.ilLOSettings.php';
568 include_once 'Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
569 $ass_test = new ilLOTestAssignments($this->getContainerObject()->getId());
570 foreach ($ass_test->getAssignmentsByType(ilLOSettings::TYPE_TEST_INITIAL) as $ass) {
571 $title = ilCourseObjective::lookupObjectiveTitle($ass->getObjectiveId());
572 $objective_map["test_ass"][$ass->getTestRefId()][$ass->getAssignmentType()][] = $title;
573 }
574 foreach ($ass_test->getAssignmentsByType(ilLOSettings::TYPE_TEST_QUALIFIED) as $ass) {
575 $title = ilCourseObjective::lookupObjectiveTitle($ass->getObjectiveId());
576 $objective_map["test_ass"][$ass->getTestRefId()][$ass->getAssignmentType()][] = $title;
577 }
578 }
579
580 return $objective_map;
581 }
582
583 protected function addItemDetails(ilObjectListGUI $a_item_list_gui, array $a_item)
584 {
588
589 $item_ref_id = $a_item["ref_id"];
590
591 if (is_array($this->objective_map)) {
592 $details = array();
593 if (isset($this->objective_map["material"][$item_ref_id])) {
594 // #12965
595 foreach ($this->objective_map["material"][$item_ref_id] as $objective_id) {
596 $ilCtrl->setParameterByClass('ilcourseobjectivesgui', 'objective_id', $objective_id);
597 $url = $ilCtrl->getLinkTargetByClass(array('illoeditorgui', 'ilcourseobjectivesgui'), 'edit');
598 $ilCtrl->setParameterByClass('ilcourseobjectivesgui', 'objective_id', '');
599
600 $details[] = array(
601 'desc' => $lng->txt('crs_loc_tab_materials') . ': ',
602 'target' => '_top',
603 'link' => $url,
604 'name' => $this->objective_map["names"][$objective_id]
605 );
606 }
607 }
608 if ($this->objective_map["test_i"] == $item_ref_id) {
609 $ilCtrl->setParameterByClass('illoeditorgui', 'tt', 1);
610 $details[] = array(
611 'desc' => '',
612 'target' => '_top',
613 'link' => $ilCtrl->getLinkTargetByClass('illoeditorgui', 'testOverview'),
614 'name' => $lng->txt('crs_loc_tab_itest')
615 );
616 $ilCtrl->setParameterByClass('illoeditorgui', 'tt', 0);
617 }
618 if ($this->objective_map["test_q"] == $item_ref_id) {
619 $ilCtrl->setParameterByClass('illoeditorgui', 'tt', 2);
620 $details[] = array(
621 'desc' => '',
622 'target' => '_top',
623 'link' => $ilCtrl->getLinkTargetByClass('illoeditorgui', 'testOverview'),
624 'name' => $lng->txt('crs_loc_tab_qtest')
625 );
626 $ilCtrl->setParameterByClass('illoeditorgui', 'tt', 0);
627 }
628
629 // #15367
630 if (is_array($this->objective_map["test_ass"][$item_ref_id])) {
631 foreach ($this->objective_map["test_ass"][$item_ref_id] as $type => $items) {
633 $caption = $lng->txt('crs_loc_tab_itest');
634 $ilCtrl->setParameterByClass('illoeditorgui', 'tt', 1);
635 } else {
636 $caption = $lng->txt('crs_loc_tab_qtest');
637 $ilCtrl->setParameterByClass('illoeditorgui', 'tt', 2);
638 }
639 foreach ($items as $objtv_title) {
640 $details[] = array(
641 'desc' => '',
642 'target' => '_top',
643 'link' => $ilCtrl->getLinkTargetByClass('illoeditorgui', 'testsOverview'),
644 'name' => $caption . " (" . $this->lng->txt("crs_loc_learning_objective") . ": " . $objtv_title . ")"
645 );
646 }
647 $ilCtrl->setParameterByClass('illoeditorgui', 'tt', 0);
648 }
649 }
650
651 if (sizeof($details)) {
652 $a_item_list_gui->enableItemDetailLinks(true);
653 $a_item_list_gui->setItemDetailLinks($details, $lng->txt('crs_loc_settings_tbl') . ': ');
654 } else {
655 $a_item_list_gui->enableItemDetailLinks(false);
656 }
657 }
658
659 // order
660 if ($this->getContainerGUI()->isActiveOrdering()) {
661 $a_item_list_gui->enableCommands(true, true);
662 $a_item_list_gui->enableProperties(false);
663 }
664 // view
665 elseif (!$this->getContainerGUI()->isActiveAdministrationPanel()) {
666 $a_item_list_gui->enableCommands(true, true);
667 $a_item_list_gui->enableProperties(false);
668 }
669
670 if ($a_item['objective_id']) {
671 $a_item_list_gui->setDefaultCommandParameters(array('objective_id' => $a_item['objective_id']));
672
673
674 if ($this->loc_settings->getQualifiedTest() == $a_item['ref_id']) {
675 $a_item_list_gui->setConditionTarget($this->getContainerObject()->getRefId(), $a_item['objective_id'], 'lobj');
676 // check conditions of target
677 include_once './Services/Conditions/classes/class.ilConditionHandler.php';
678 $fullfilled = ilConditionHandler::_checkAllConditionsOfTarget($this->getContainerObject()->getRefId(), $a_item['objective_id'], 'lobj');
679 if (!$fullfilled || $a_item['objective_status']) {
680 $a_item_list_gui->disableTitleLink(true);
681 }
682 }
683 include_once './Modules/Course/classes/Objectives/class.ilLOUserResults.php';
685 $this->getContainerObject()->getId(),
686 $ilUser->getId(),
687 $a_item['objective_id'],
689 );
690
691 $res = $this->updateResult($res, $a_item['ref_id'], $a_item['objective_id'], $ilUser->getId());
692
693 if ($res['is_final']) {
694 $a_item_list_gui->disableTitleLink(true);
695 $a_item_list_gui->enableProperties(true);
696 $a_item_list_gui->addCustomProperty(
697 $this->lng->txt('crs_loc_passes_reached'),
698 '',
699 true
700 );
701 } elseif ($this->loc_settings->getQualifiedTest() == $a_item['ref_id']) {
702 include_once './Modules/Course/classes/class.ilCourseObjective.php';
703 $poss_pass = ilCourseObjective::lookupMaxPasses($a_item['objective_id']);
704
705 if ($poss_pass) {
706 $a_item_list_gui->enableProperties(true);
707 $a_item_list_gui->addCustomProperty(
708 $this->lng->txt('crs_loc_passes_left'),
709 (($poss_pass - $res['tries']) > 0) ? ($poss_pass - $res['tries']) : 1,
710 false
711 );
712 }
713 }
714 }
715 }
716
717 protected function updateResult($a_res, $a_item_ref_id, $a_objective_id, $a_user_id)
718 {
719 if ($this->loc_settings->getQualifiedTest() == $a_item_ref_id) {
720 // Check for existing test run, and decrease tries, reset final if run exists
721 include_once './Modules/Test/classes/class.ilObjTest.php';
722 include_once './Modules/Course/classes/Objectives/class.ilLOSettings.php';
724 $a_item_ref_id,
725 $a_user_id
726 );
727
728 if ($active) {
729 include_once './Modules/Course/classes/Objectives/class.ilLOTestRun.php';
731 ilObject::_lookupObjId($a_item_ref_id),
732 $a_objective_id,
733 $a_user_id
734 )) {
735 ($a_res['tries'] > 0) ? --$a_res['tries'] : 0;
736 $a_res['is_final'] = 0;
737 }
738 }
739 }
740 return $a_res;
741 }
742
753 protected function renderObjective($a_objective_id, &$a_has_lo_page, ilAccordionGUI $a_accordion = null, array $a_lo_result = null)
754 {
757
758 include_once('./Modules/Course/classes/class.ilCourseObjective.php');
759 $objective = new ilCourseObjective($this->getContainerObject(), $a_objective_id);
760
761 include_once('./Services/Container/classes/class.ilContainerSorting.php');
762 include_once('./Services/Object/classes/class.ilObjectActivation.php');
763 $items = ilObjectActivation::getItemsByObjective($a_objective_id);
764
765 // sorting is handled by ilCourseObjectiveMaterials
766 // $items = ilContainerSorting::_getInstance($this->getContainerObject()->getId())->sortSubItems('lobj',$a_objective_id,$items);
767
768 include_once('./Modules/Course/classes/class.ilCourseObjectiveMaterials.php');
769 $objectives_lm_obj = new ilCourseObjectiveMaterials($a_objective_id);
770
771 // #13381 - map material assignment to position
772 $sort_map = array();
773 foreach ($objectives_lm_obj->getMaterials() as $item) {
774 $sort_map[$item["lm_ass_id"]] = $item["position"];
775 }
776
777 $is_manage = $this->getContainerGUI()->isActiveAdministrationPanel();
778 $is_order = $this->getContainerGUI()->isActiveOrdering();
779
780 $sort_content = array();
781
782 foreach ($items as $item) {
783 if ($this->getDetailsLevel($a_objective_id) < self::DETAILS_ALL) {
784 continue;
785 }
786
787 $item_list_gui2 = $this->getItemGUI($item);
788 $item_list_gui2->enableIcon(true);
789
790 if ($is_order || $a_accordion) {
791 $item_list_gui2->enableCommands(true, true);
792 $item_list_gui2->enableProperties(false);
793 }
794
795 $chapters = $objectives_lm_obj->getChapters();
796 if (count($chapters)) {
797 $has_sections = false;
798 foreach ($chapters as $chapter) {
799 if ($chapter['ref_id'] != $item['child']) {
800 continue;
801 }
802 $has_sections = true;
803
804 include_once './Modules/LearningModule/classes/class.ilLMObject.php';
805 $title = $item['title'] .
806 " &rsaquo; " . ilLMObject::_lookupTitle($chapter['obj_id']) .
807 " (" . $lng->txt('obj_' . $chapter['type']) . ")";
808
809 $item_list_gui2->setDefaultCommandParameters(array(
810 "obj_id" => $chapter['obj_id'],
811 "focus_id" => $chapter['obj_id'],
812 "focus_return" => $this->container_obj->getRefId()));
813
814 if ($is_order) {
815 $item_list_gui2->setPositionInputField(
816 "[lobj][" . $a_objective_id . "][" . $chapter['lm_ass_id'] . "]",
817 sprintf('%d', $chapter['position'] * 10)
818 );
819 }
820
821 $sub_item_html = $item_list_gui2->getListItemHTML(
822 $item['ref_id'],
823 $item['obj_id'],
824 $title,
825 $item['description']
826 );
827
828 // #13381 - use materials order
829 $sort_key = str_pad($chapter['position'], 5, 0, STR_PAD_LEFT) . "_" . strtolower($title) . "_" . $chapter['lm_ass_id'];
830 $sort_content[$sort_key] = $sub_item_html;
831 }
832 }
833
834 $this->rendered_items[$item['child']] = true;
835
836 if ($lm_ass_id = $objectives_lm_obj->isAssigned($item['ref_id'], true)) {
837 if ($is_order) {
838 $item_list_gui2->setPositionInputField(
839 "[lobj][" . $a_objective_id . "][" . $lm_ass_id . "]",
840 sprintf('%d', $sort_map[$lm_ass_id] * 10)
841 );
842 }
843
844 $sub_item_html = $item_list_gui2->getListItemHTML(
845 $item['ref_id'],
846 $item['obj_id'],
847 $item['title'],
848 $item['description']
849 );
850
851 // #13381 - use materials order
852 $sort_key = str_pad($sort_map[$lm_ass_id], 5, 0, STR_PAD_LEFT) . "_" . strtolower($item['title']) . "_" . $lm_ass_id;
853 $sort_content[$sort_key] = $sub_item_html;
854 }
855 }
856
857 if ($this->getDetailsLevel($a_objective_id) == self::DETAILS_ALL) {
858 $this->objective_list_gui->enableCommands(false);
859 } else {
860 $this->objective_list_gui->enableCommands(true);
861 }
862
863 if ($is_order) {
864 $this->objective_list_gui->setPositionInputField(
865 "[lobj][" . $a_objective_id . "][0]",
866 $objective->__getPosition() * 10
867 );
868 }
869
870 ksort($sort_content);
871
872 if (!$a_accordion) {
873 foreach ($sort_content as $sub_item_html) {
874 $this->objective_list_gui->addSubItemHTML($sub_item_html);
875 }
876
877 return $this->objective_list_gui->getObjectiveListItemHTML(
878 0,
879 $a_objective_id,
880 $objective->getTitle(),
881 $objective->getDescription(),
882 ($is_manage || $is_order)
883 );
884 } else {
885 $acc_content = $sort_content;
886
887 $initial_shown = false;
888 $initial_test_ref_id = $this->getTestAssignments()->getTestByObjective($a_objective_id, ilLOSettings::TYPE_TEST_INITIAL);
889 $initial_test_obj_id = ilObject::_lookupObjId($initial_test_ref_id);
890 include_once './Modules/Test/classes/class.ilObjTestAccess.php';
891
892 if (
893 $initial_test_obj_id &&
894 $this->getSettings()->hasSeparateInitialTests() &&
896 ) {
897 $acc_content[] = $this->renderTest(
898 $this->getTestAssignments()->getTestByObjective($a_objective_id, ilLOSettings::TYPE_TEST_INITIAL),
899 $a_objective_id,
900 true,
901 false,
902 $a_lo_result
903 );
904 $initial_shown = true;
905 } elseif ($this->getSettings()->hasSeparateQualifiedTests()) {
906 $acc_content[] = $this->renderTest(
907 $this->getTestAssignments()->getTestByObjective($a_objective_id, ilLOSettings::TYPE_TEST_QUALIFIED),
908 $a_objective_id,
909 false,
910 false,
911 $a_lo_result
912 );
913 }
914
915
916 /*
917 if($this->loc_settings->getInitialTest() &&
918 $this->loc_settings->getType() == ilLOSettings::LOC_INITIAL_SEL &&
919 !$a_lo_risult["initial_status"])
920 {
921 $acc_content[] = $this->renderTest($this->loc_settings->getInitialTest(), $a_objective_id, true, false, $a_lo_result);
922 $initial_shown = true;
923 }
924 if(!$initial_shown &&
925 $this->loc_settings->getQualifiedTest() &&
926 $this->loc_settings->isQualifiedTestPerObjectiveVisible())
927 {
928 $acc_content[] = $this->renderTest($this->loc_settings->getQualifiedTest(), $a_objective_id, false, false, $a_lo_result);
929 }
930 */
931
932 $co_page = null;
933 include_once("./Services/COPage/classes/class.ilPageUtil.php");
934 if (ilPageUtil::_existsAndNotEmpty("lobj", $objective->getObjectiveId())) {
935 $a_has_lo_page = true;
936
937 include_once 'Modules/Course/classes/Objectives/class.ilLOPageGUI.php';
938 $page_gui = new ilLOPageGUI($objective->getObjectiveId());
939
940 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
941 $page_gui->setStyleId(ilObjStyleSheet::getEffectiveContentStyleId(0));
942 $page_gui->setPresentationTitle("");
943 $page_gui->setTemplateOutput(false);
944 $page_gui->setHeader("");
945
946 $co_page = "<div class='ilContObjectiveIntro'>" . $page_gui->showPage() . "</div>";
947 }
948
949 $a_accordion->addItem(
950 $this->buildAccordionTitle($objective, $a_lo_result),
951 $co_page .
952 $this->buildAccordionContent($acc_content),
953 (isset($_GET["oobj"]) && (int) $_GET["oobj"] == $objective->getObjectiveId())
954 );
955 }
956 }
957
965 protected function initDetails()
966 {
968
969 // no details
970 return;
971 }
972
973 protected function initTestAssignments()
974 {
975 include_once './Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
976 $this->test_assignments = ilLOTestAssignments::getInstance($this->getContainerObject()->getId());
977 }
978
983 protected function parseLOUserResults()
984 {
986
987 $res = array();
988
989 include_once "Modules/Course/classes/Objectives/class.ilLOTestAssignments.php";
990 $lo_ass = ilLOTestAssignments::getInstance($this->getContainerObject()->getId());
991
992 include_once "Modules/Course/classes/Objectives/class.ilLOUserResults.php";
993 $lur = new ilLOUserResults($this->getContainerObject()->getId(), $ilUser->getId());
994 foreach ($lur->getCourseResultsForUserPresentation() as $objective_id => $types) {
995 // show either initial or qualified for objective
996 if (isset($types[ilLOUserResults::TYPE_INITIAL])) {
997 $initial_status = $types[ilLOUserResults::TYPE_INITIAL]["status"];
998 }
999
1000 // qualified test has priority
1001 if (isset($types[ilLOUserResults::TYPE_QUALIFIED])) {
1004 $result["initial"] = $types[ilLOUserResults::TYPE_INITIAL];
1005 } else {
1008 }
1009
1010 $result["initial_status"] = $initial_status;
1011
1012 $result["itest"] = $lo_ass->getTestByObjective($objective_id, ilLOSettings::TYPE_TEST_INITIAL);
1013 $result["qtest"] = $lo_ass->getTestByObjective($objective_id, ilLOSettings::TYPE_TEST_QUALIFIED);
1014
1015 $res[$objective_id] = $result;
1016 }
1017
1018 return $res;
1019 }
1020
1036 public static function renderProgressBar(
1037 $a_perc_result = null,
1038 $a_perc_limit = null,
1039 $a_css = null,
1040 $a_caption = null,
1041 $a_url = null,
1042 $a_tt_id = null,
1043 $a_tt_txt = null,
1044 $a_next_step = null,
1045 $a_sub = false,
1046 $a_sub_style = 30
1047 ) {
1048 global $DIC;
1049
1050 $tpl = new ilTemplate("tpl.objective_progressbar.html", true, true, "Services/Container");
1051
1052 if ($a_perc_result !== null) {
1053 $tpl->setCurrentBlock("statusbar_bl");
1054 $tpl->setVariable("PERC_STATUS", $a_perc_result);
1055 $tpl->setVariable("PERC_WIDTH", $a_perc_result);
1056 $tpl->setVariable("PERC_COLOR", $a_css);
1057 if ($a_perc_limit) {
1058 // :TODO: magic?
1059 $limit_pos = (99 - (int) $a_perc_limit) * -1;
1060 $tpl->setVariable("LIMIT_POS", $limit_pos);
1061 }
1062 if ($a_tt_txt &&
1063 $a_tt_id) {
1064 $tpl->setVariable("TT_ID", $a_tt_id);
1065 }
1066 $tpl->parseCurrentBlock();
1067 }
1068
1069 if ($a_caption) {
1070 if ($a_url) {
1071 include_once "Services/UIComponent/Button/classes/class.ilLinkButton.php";
1072 $button = ilLinkButton::getInstance();
1073 $button->setCaption($a_caption, false);
1074 $button->setUrl($a_url);
1075
1076 $tpl->setCurrentBlock("statustxt_bl");
1077 $tpl->setVariable("TXT_PROGRESS_STATUS", $button->render());
1078 $tpl->parseCurrentBlock();
1079 } else {
1080 $tpl->setCurrentBlock("statustxt_no_link_bl");
1081 $tpl->setVariable("TXT_PROGRESS_STATUS_NO_LINK", $a_caption);
1082 $tpl->parseCurrentBlock();
1083 }
1084 }
1085
1086
1087 if ($a_next_step) {
1088 $tpl->setCurrentBlock("nstep_bl");
1089 $tpl->setVariable("TXT_NEXT_STEP", $a_next_step);
1090 $tpl->parseCurrentBlock();
1091 }
1092
1093 if ($a_tt_id &&
1094 $a_tt_txt) {
1095 include_once("./Services/UIComponent/Tooltip/classes/class.ilTooltipGUI.php");
1096 ilTooltipGUI::addTooltip($a_tt_id, $a_tt_txt);
1097 }
1098
1099 if ($a_sub) {
1100 $tpl->setVariable("SUB_STYLE", ' style="padding-left: ' . $a_sub_style . 'px;"');
1101 $tpl->setVariable("SUB_INIT", $a_sub);
1102 }
1103
1104 return $tpl->get();
1105 }
1106
1124 public static function renderProgressMeter(
1125 $a_perc_result = null,
1126 $a_perc_limit = null,
1127 $a_compare_value = null,
1128 $a_caption = null,
1129 $a_url = null,
1130 $a_tt_id = null,
1131 $a_tt_txt = null,
1132 $a_next_step = null,
1133 $a_sub = false,
1134 $a_sub_style = 30,
1135 $a_main_text = '',
1136 $a_required_text = ''
1137 ) {
1138 global $DIC;
1139
1140 $tpl = new ilTemplate("tpl.objective_progressmeter.html", true, true, "Services/Container");
1141
1142 $lng = $DIC->language();
1143 $lng->loadLanguageModule('crs');
1144
1145
1146
1147 if (is_numeric($a_perc_result)) {
1148 $uiFactory = $DIC->ui()->factory();
1149 $uiRenderer = $DIC->ui()->renderer();
1150
1151 /*
1152 $pMeter = $uiFactory->chart()->progressMeter()->standard(
1153 100,
1154 (int) $a_perc_result,
1155 (int) $a_perc_limit
1156 );
1157 */
1158
1159 $pMeter = $uiFactory->chart()->progressMeter()->standard(
1160 100,
1161 (int) $a_perc_result,
1162 (int) $a_perc_limit,
1163 (int) $a_compare_value
1164 );
1165
1166 if (strlen($a_main_text)) {
1167 #$pMeter = $pMeter->withMainText($a_main_text);
1168 }
1169 if (strlen($a_required_text)) {
1170 #$pMeter = $pMeter->withRequiredText($a_required_text);
1171 }
1172 $tpl->setVariable('PROGRESS_METER', $uiRenderer->render($pMeter));
1173 }
1174
1175 /*
1176 if($a_caption)
1177 {
1178 if($a_url)
1179 {
1180 include_once "Services/UIComponent/Button/classes/class.ilLinkButton.php";
1181 $button = ilLinkButton::getInstance();
1182 $button->setCaption($a_caption, false);
1183 $button->setUrl($a_url);
1184
1185 $tpl->setCurrentBlock("statustxt_bl");
1186 $tpl->setVariable("TXT_PROGRESS_STATUS", $button->render());
1187 $tpl->parseCurrentBlock();
1188 }
1189 else
1190 {
1191 $tpl->setCurrentBlock("statustxt_no_link_bl");
1192 $tpl->setVariable("TXT_PROGRESS_STATUS_NO_LINK", $a_caption);
1193 $tpl->parseCurrentBlock();
1194 }
1195 }
1196 */
1197
1198 if ($a_tt_id &&
1199 $a_tt_txt) {
1200 include_once("./Services/UIComponent/Tooltip/classes/class.ilTooltipGUI.php");
1201 ilTooltipGUI::addTooltip($a_tt_id, $a_tt_txt);
1202 }
1203
1204 if ($a_sub) {
1205 $tpl->setVariable("SUB_STYLE", ' style="padding-left: ' . $a_sub_style . 'px;"');
1206 $tpl->setVariable("SUB_INIT", $a_sub);
1207 }
1208
1209 return $tpl->get();
1210 }
1211
1220 public static function getObjectiveResultSummary($a_has_initial_test, $a_objective_id, $a_lo_result)
1221 {
1222 global $DIC;
1223
1224 $lng = $DIC->language();
1225 $lng->loadLanguageModule('crs');
1226
1227 $is_qualified =
1228 ($a_lo_result["type"] == ilLOUserResults::TYPE_QUALIFIED);
1229 $is_qualified_initial =
1230 (
1231 $a_lo_result['type'] == ilLOUserResults::TYPE_INITIAL &&
1232 ilLOSettings::getInstanceByObjId($a_lo_result['course_id'])->isInitialTestQualifying()
1233 );
1234 $has_completed =
1235 ($a_lo_result["status"] == ilLOUserResults::STATUS_COMPLETED);
1236
1237 $next_step = $progress_txt = $bar_color = $test_url = $initial_sub = null;
1238
1239 if (
1240 $is_qualified ||
1241 $is_qualified_initial) {
1242 if ($has_completed) {
1243 $next_step = $lng->txt("crs_loc_progress_objective_complete");
1244 } else {
1245 $next_step = $lng->txt("crs_loc_progress_do_qualifying_again");
1246 }
1247 }
1248 // initial test
1249 else {
1250 if ($a_lo_result["status"]) {
1251 $next_step =
1252 $has_completed ?
1253 $lng->txt("crs_loc_progress_do_qualifying") :
1254 $lng->txt("crs_loc_suggested");
1255 } else {
1256 $next_step = (bool) $a_has_initial_test ?
1257 $lng->txt("crs_loc_progress_no_result_do_initial") :
1258 $lng->txt("crs_loc_progress_no_result_no_initial");
1259 }
1260 }
1261 return $next_step;
1262 }
1263
1275 public static function buildObjectiveProgressBar($a_has_initial_test, $a_objective_id, array $a_lo_result, $a_list_mode = false, $a_sub = false, $a_tt_suffix = null)
1276 {
1277 global $DIC;
1278
1279 $lng = $DIC->language();
1280 $lng->loadLanguageModule('crs');
1281
1282 // tooltip (has to be unique!)
1283
1284 $tooltip_id = "crsobjtvusr_" . $a_objective_id . "_" . $a_lo_result["type"] . "_" . ((int) $a_sub);
1285 if ($a_tt_suffix !== null) {
1286 $tooltip_id .= "_" . $a_tt_suffix;
1287 }
1288
1289 $tt_txt = sprintf(
1290 $lng->txt("crs_loc_tt_info"),
1291 $a_lo_result["result_perc"],
1292 $a_lo_result["limit_perc"]
1293 );
1294
1295
1296 include_once './Modules/Course/classes/Objectives/class.ilLOUtils.php';
1297 include_once './Modules/Course/classes/Objectives/class.ilLOSettings.php';
1298
1299 $is_qualified = ($a_lo_result["type"] == ilLOUserResults::TYPE_QUALIFIED);
1300 $is_qualified_initial = ($a_lo_result['type'] == ilLOUserResults::TYPE_INITIAL &&
1301 ilLOSettings::getInstanceByObjId($a_lo_result['course_id'])->isInitialTestQualifying());
1302 $has_completed = ($a_lo_result["status"] == ilLOUserResults::STATUS_COMPLETED);
1303
1304 $next_step = $progress_txt = $bar_color = $test_url = $initial_sub = null;
1305
1306 $compare_value = null;
1307
1308 if ($is_qualified ||
1309 $is_qualified_initial) {
1310 $progress_txt = $lng->txt("crs_loc_progress_result_qtest");
1311 $tt_txt = $lng->txt("crs_loc_tab_qtest") . ": " . $tt_txt;
1312
1313 if ($has_completed) {
1314 $next_step = $lng->txt("crs_loc_progress_objective_complete");
1315 $bar_color = "ilCourseObjectiveProgressBarCompleted";
1316
1317 // render 2nd progressbar if there is also an initial test
1318 if ($is_qualified &&
1319 $a_has_initial_test &&
1320 is_array($a_lo_result["initial"])) {
1321 $a_lo_result["initial"]["itest"] = $a_lo_result["itest"];
1322
1323 // force list mode to get rid of next step
1324 #$initial_sub = self::buildObjectiveProgressBar(true, $a_objective_id, $a_lo_result["initial"], true, true, $a_tt_suffix);
1325 $compare_value = $a_lo_result['initial']['result_perc'];
1326 }
1327 } else {
1328 $next_step = $lng->txt("crs_loc_progress_do_qualifying_again");
1329 $bar_color = "ilCourseObjectiveProgressBarFailed";
1330 }
1331 }
1332 // initial test
1333 else {
1334 if ($a_lo_result["status"]) {
1335 $progress_txt = $lng->txt("crs_loc_progress_result_itest");
1336 $tt_txt = $lng->txt("crs_loc_tab_itest") . ": " . $tt_txt;
1337
1338 $bar_color = "ilCourseObjectiveProgressBarNeutral";
1339 $next_step = $has_completed
1340 ? $lng->txt("crs_loc_progress_do_qualifying")
1341 : $lng->txt("crs_loc_suggested");
1342 }
1343 // not attempted: no progress bar
1344 else {
1345 $next_step = (bool) $a_has_initial_test
1346 ? $lng->txt("crs_loc_progress_no_result_do_initial")
1347 : $lng->txt("crs_loc_progress_no_result_no_initial");
1348 }
1349 }
1350
1351 // link to test results
1352 // - first try to fetch a link for qualifying test results
1353 if ($a_lo_result["qtest"]) {
1354 $test_url = ilLOUtils::getTestResultLinkForUser($a_lo_result["qtest"], $a_lo_result["user_id"]);
1355 }
1356 // - when no qualifiying test results link was fetched, try for initial test
1357 if (!$test_url && $a_lo_result["itest"]) {
1358 $test_url = ilLOUtils::getTestResultLinkForUser($a_lo_result["itest"], $a_lo_result["user_id"]);
1359 }
1360
1361 $main_text = $lng->txt('crs_loc_itest_info');
1362 if ($a_lo_result['type'] == ilLOSettings::TYPE_TEST_QUALIFIED) {
1363 $main_text = $lng->txt('crs_loc_qtest_info');
1364 }
1365
1366
1367
1369 $a_lo_result["result_perc"],
1370 $a_lo_result["limit_perc"],
1371 $compare_value,
1372 $progress_txt,
1373 $test_url,
1374 $tooltip_id,
1375 $tt_txt,
1376 $a_list_mode
1377 ? null
1378 : $next_step,
1379 $initial_sub,
1380 $a_list_mode
1381 ? 30
1382 : 10,
1383 $main_text,
1384 $lng->txt('crs_lobj_pm_min_goal')
1385 );
1386 }
1387
1394 protected function buildAccordionTitle(ilCourseObjective $a_objective, array $a_lo_result = null)
1395 {
1396 global $DIC;
1397
1398 $renderer = $DIC->ui()->renderer();
1399 $ui_factory = $DIC->ui()->factory();
1400
1401 $tpl = new ilTemplate("tpl.objective_accordion_title.html", true, true, "Services/Container");
1402
1403 if ($a_lo_result) {
1404 $tpl->setVariable(
1405 "PROGRESS_BAR",
1406 self::buildObjectiveProgressBar(
1407 (bool) $this->loc_settings->worksWithInitialTest(),
1408 $a_objective->getObjectiveId(),
1409 $a_lo_result
1410 )
1411 );
1412 }
1413
1414 $tpl->setVariable("TITLE", $this->lng->txt("crs_loc_learning_objective") . ": " . trim($a_objective->getTitle()));
1415 $tpl->setVariable("DESCRIPTION", nl2br(trim($a_objective->getDescription())));
1416
1417 $this->logger->dump($a_lo_result);
1418
1419 $initial_res = null;
1420 $initial_lim = null;
1421 if ($this->loc_settings->worksWithInitialTest()) {
1422 if (array_key_exists('initial', $a_lo_result)) {
1423 $initial_res = (int) $a_lo_result['initial']['result_perc'];
1424 $initial_lim = (int) $a_lo_result['initial']['limit_perc'];
1425 }
1426 if (
1427 $a_lo_result['type'] == ilLOUserResults::TYPE_INITIAL &&
1428 isset($a_lo_result['result_perc'])
1429 ) {
1430 $initial_res = (int) $a_lo_result['result_perc'];
1431 $initial_lim = (int) $a_lo_result['limit_perc'];
1432 }
1433 }
1434
1435 if ($initial_res !== null) {
1437 $a_lo_result["itest"],
1438 $a_lo_result["user_id"]
1439 );
1440
1441 if (strlen($link)) {
1442 $tpl->setCurrentBlock('i_with_link');
1443 $tpl->setVariable(
1444 'IBTN',
1445 $renderer->render(
1446 $ui_factory->button()->shy(
1447 $this->lng->txt('crs_objective_result_details'),
1448 $link
1449 )
1450 )
1451 );
1452 $tpl->parseCurrentBlock();
1453 }
1454
1455
1456 $tpl->setCurrentBlock('res_initial');
1457 $tpl->setVariable(
1458 'IRESULT',
1459 sprintf(
1460 $this->lng->txt('crs_objective_result_summary_initial'),
1461 (int) $initial_res . '%',
1462 (int) $initial_lim . '%'
1463 )
1464 );
1465 $tpl->parseCurrentBlock();
1466 }
1467
1468 $qual_res = null;
1469 $qual_lim = null;
1470
1471 if ($a_lo_result['type'] == ilLOUserResults::TYPE_QUALIFIED) {
1472 $qual_res = (int) $a_lo_result['result_perc'];
1473 $qual_lim = (int) $a_lo_result['limit_perc'];
1474 }
1475
1476 if ($qual_res !== null) {
1478 $a_lo_result["qtest"],
1479 $a_lo_result["user_id"]
1480 );
1481
1482 if (strlen($link)) {
1483 $tpl->setCurrentBlock('q_with_link');
1484 $tpl->setVariable(
1485 'QBTN',
1486 $renderer->render(
1487 $ui_factory->button()->shy(
1488 $this->lng->txt('crs_objective_result_details'),
1489 $link
1490 )
1491 )
1492 );
1493 $tpl->parseCurrentBlock();
1494 }
1495 $tpl->setCurrentBlock('res_qualifying');
1496 $tpl->setVariable(
1497 'QRESULT',
1498 sprintf(
1499 $this->lng->txt('crs_objective_result_summary_qualifying'),
1500 (int) $qual_res . '%',
1501 (int) $qual_lim . '%'
1502 )
1503 );
1504 $tpl->parseCurrentBlock();
1505 }
1506
1507 $this->logger->dump($a_lo_result);
1508
1509
1511 (bool) $this->loc_settings->worksWithInitialTest(),
1512 $a_objective->getObjectiveId(),
1513 $a_lo_result
1514 );
1515 if (strlen($summary)) {
1516 $tpl->setCurrentBlock('objective_summary');
1517 $tpl->setVariable('SUMMARY_TXT', $summary);
1518 $tpl->parseCurrentBlock();
1519 }
1520
1521 // #15510
1522 $tpl->setVariable("ANCHOR_ID", "objtv_acc_" . $a_objective->getObjectiveId());
1523
1524 return $tpl->get();
1525 }
1526
1527 protected function buildAccordionContent(array $a_items)
1528 {
1529 $tpl = new ilTemplate("tpl.objective_accordion_content.html", true, true, "Services/Container");
1530 foreach ($a_items as $item) {
1531 $tpl->setCurrentBlock("items_bl");
1532 $tpl->setVariable("ITEM", $item);
1533 $tpl->parseCurrentBlock();
1534 }
1535 return $tpl->get();
1536 }
1537
1545 protected function showButton($a_cmd, $a_text, $a_target = '', $a_id = "")
1546 {
1547 $ilToolbar = $this->toolbar;
1549
1550 // #11842
1551 $ilToolbar->addButton(
1552 $a_text,
1553 $ilCtrl->getLinkTarget($this->getContainerGUI(), $a_cmd),
1554 $a_target,
1555 "",
1556 '',
1557 $a_id
1558 );
1559 }
1560}
$result
user()
Definition: user.php:4
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
const IL_OBJECTIVE_STATUS_EMPTY
Accordion user interface class.
static _checkAllConditionsOfTarget($a_target_ref_id, $a_target_id, $a_target_type="", $a_usr_id=0)
checks wether all conditions of a target object are fulfilled
Parent class of all container content GUIs.
initRenderer()
Init container renderer.
getContainerObject()
Get container object.
getContainerGUI()
Get container GUI object.
renderItem($a_item_data, $a_position=0, $a_force_icon=false, $a_pos_prefix="")
Render an item.
insertPageEmbeddedBlocks($a_output_html)
Insert blocks into container page.
getItemGroupsHTML($a_pos=0)
Get item groups HTML.
getItemGUI($item_data, $a_show_path=false)
Get ListGUI object for item.
clearAdminCommandsDetermination()
cleaer administration commands determination
GUI class for course objective view.
renderObjective($a_objective_id, &$a_has_lo_page, ilAccordionGUI $a_accordion=null, array $a_lo_result=null)
render objective
parseLOUserResults()
Parse learning objective results.
static renderProgressMeter( $a_perc_result=null, $a_perc_limit=null, $a_compare_value=null, $a_caption=null, $a_url=null, $a_tt_id=null, $a_tt_txt=null, $a_next_step=null, $a_sub=false, $a_sub_style=30, $a_main_text='', $a_required_text='')
Render progress bar(s)
buildAccordionTitle(ilCourseObjective $a_objective, array $a_lo_result=null)
showButton($a_cmd, $a_text, $a_target='', $a_id="")
show action button
static buildObjectiveProgressBar($a_has_initial_test, $a_objective_id, array $a_lo_result, $a_list_mode=false, $a_sub=false, $a_tt_suffix=null)
Render progressbar(s) for given objective and result data.
addItemDetails(ilObjectListGUI $a_item_list_gui, array $a_item)
static renderProgressBar( $a_perc_result=null, $a_perc_limit=null, $a_css=null, $a_caption=null, $a_url=null, $a_tt_id=null, $a_tt_txt=null, $a_next_step=null, $a_sub=false, $a_sub_style=30)
Render progress bar(s)
__construct($a_container_gui)
Constructor.
getDetailsLevel($a_objective_id)
get details level
updateResult($a_res, $a_item_ref_id, $a_objective_id, $a_user_id)
showMaterials($a_tpl, $a_mode=null, $a_is_manage=false, $a_as_accordion=false)
Show all other (no assigned tests, no assigned materials) materials.
renderTest($a_test_ref_id, $a_objective_id, $a_is_initial=false, $a_add_border=false, $a_lo_result=array())
showObjectives($a_tpl, $a_is_order=false)
show objectives
getMainContent()
Impementation of abstract method getMainContent.
static getObjectiveResultSummary($a_has_initial_test, $a_objective_id, $a_lo_result)
Get objective result summary.
getTestAssignments()
Get test assignments object.
List gui for course objectives.
class ilCourseObjectiveMaterials
static _getAssignedMaterials($a_objective_id)
get assigned materials
static getStatus($a_usr_id, $a_crs_id)
get status of user
class ilcourseobjective
static lookupObjectiveTitle($a_objective_id, $a_add_description=false)
static lookupMaxPasses($a_objective_id)
static _getObjectiveIds($course_id, $a_activated_only=false)
static _lookupTitle($a_obj_id)
Lookup title.
(Course) learning objective page GUI class
static getInstanceByObjId($a_obj_id)
get singleton instance
Settings for LO courses.
static getInstance($a_container_id)
Get instance by container id.
static lookupRunExistsForObjective($a_test_id, $a_objective_id, $a_user_id)
@global type $ilDB
static hasResults($a_container_id, $a_user_id)
static lookupResult($a_course_obj_id, $a_user_id, $a_objective_id, $a_tst_type)
Lookup user result.
static hasActiveRun($a_container_id, $a_test_ref_id, $a_objective_id)
static getTestResultLinkForUser($a_test_ref_id, $a_user_id)
static getInstance()
Factory.
static getSyntaxStylePath()
get syntax style path
static getEffectiveContentStyleId($a_style_id, $a_type="")
Get effective Style Id.
static getContentStylePath($a_style_id, $add_random=true)
get content style path
static checkCondition($a_obj_id, $a_operator, $a_value, $a_usr_id)
check condition
static isParticipantsLastPassActive($testRefId, $userId)
static getItemsByObjective($a_objective_id)
Get objective items.
Class ilObjectListGUI.
setConditionTarget($a_ref_id, $a_obj_id, $a_target_type)
enableCommands($a_status, $a_std_only=false)
En/disable commands.
setDefaultCommandParameters(array $a_params)
enableProperties($a_status)
En/disable properties.
enableItemDetailLinks($a_status)
enable item detail links E.g Direct links to chapters or pages
addCustomProperty( $a_property="", $a_value="", $a_alert=false, $a_newline=false)
add custom property
setItemDetailLinks($a_detail_links, $a_intro_txt='')
set items detail links
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
static _existsAndNotEmpty($a_parent_type, $a_id, $a_lang="-")
checks whether page exists and is not empty (may return true on some empty pages)
special template class to simplify handling of ITX/PEAR
static addTooltip( $a_el_id, $a_text, $a_container="", $a_my="bottom center", $a_at="top center", $a_use_htmlspecialchars=true)
Adds a tooltip to an HTML element.
$txt
Definition: error.php:11
$html
Definition: example_001.php:87
$h
global $ilCtrl
Definition: ilias.php:18
$summary
Definition: cron.php:24
global $ilSetting
Definition: privfeed.php:17
$type
$url
global $DIC
Definition: saml.php:7
foreach($_POST as $key=> $value) $res
settings()
Definition: settings.php:2
$ilUser
Definition: imgupload.php:18