ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilCourseObjectivesTableGUI.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +-----------------------------------------------------------------------------+
22*/
23
24include_once('./Services/Table/classes/class.ilTable2GUI.php');
25include_once './Modules/Course/classes/class.ilCourseObjective.php';
26include_once('./Modules/Course/classes/class.ilCourseObjectiveMaterials.php');
27include_once('./Modules/Course/classes/class.ilCourseObjectiveQuestion.php');
28include_once './Modules/Course/classes/Objectives/class.ilLOUtils.php';
29
30// begin-patch lok
31include_once './Modules/Course/classes/Objectives/class.ilLOSettings.php';
32// end-patch lok
33
42{
43 protected $course_obj = null;
44
45 // begin-patch lok
46 protected $settings = null;
47 // end-patch lok
48
56 public function __construct($a_parent_obj, $a_course_obj)
57 {
58 global $DIC;
59
60 $lng = $DIC['lng'];
61 $ilCtrl = $DIC['ilCtrl'];
62
63 $this->course_obj = $a_course_obj;
64
65 // begin-patch lok
66 $this->settings = ilLOSettings::getInstanceByObjId($this->course_obj->getId());
67 // end-patch lok
68
69 $this->lng = $lng;
70 $this->lng->loadLanguageModule('crs');
71 $this->ctrl = $ilCtrl;
72
73 parent::__construct($a_parent_obj, 'listObjectives');
74 $this->setFormName('objectives');
75 $this->addColumn('', 'f', "1px");
76 $this->addColumn($this->lng->txt('position'), 'position', '10em');
77 $this->addColumn($this->lng->txt('title'), 'title', '20%');
78 $this->addColumn($this->lng->txt('crs_objective_assigned_materials'), 'materials');
79 // begin-patch lok
80 if ($this->getSettings()->worksWithInitialTest()) {
81 $this->addColumn($this->lng->txt('crs_objective_self_assessment'), 'self');
82 }
83 // end-patch lok
84 if ($this->getSettings()->getQualifyingTestType() == ilLOSettings::TYPE_QUALIFYING_SELECTED) {
85 $this->addColumn($this->lng->txt('crs_objective_tbl_col_final_tsts'), 'final');
86 } else {
87 $this->addColumn($this->lng->txt('crs_objective_final_test'), 'final');
88 }
89 $this->addColumn($this->lng->txt('actions'), '5em');
90
91 $this->setFormAction($this->ctrl->getFormAction($a_parent_obj));
92 $this->setRowTemplate("tpl.crs_objectives_table_row.html", "Modules/Course");
93 $this->disable('sort');
94 $this->enable('header');
95 $this->disable('numinfo');
96 $this->enable('select_all');
97 // begin-patch lok
98 $this->setSelectAllCheckbox('objective');
99 // end-patch lok
100 $this->setLimit(200);
101
102 // begin-patch lo
103 $this->addMultiCommand('activateObjectives', $this->lng->txt('set_online'));
104 $this->addMultiCommand('deactivateObjectives', $this->lng->txt('set_offline'));
105 $this->addMultiCommand('askDeleteObjectives', $this->lng->txt('delete'));
106 // end-patch lok
107 $this->addCommandButton('saveSorting', $this->lng->txt('sorting_save'));
108 // $this->addCommandButton('create',$this->lng->txt('crs_add_objective'));
109 }
110
111 // begin-patch lok
116 public function getSettings()
117 {
118 return $this->settings;
119 }
120 // end-patch lok
121
122
130 protected function fillRow($a_set)
131 {
132 $this->tpl->setVariable('VAL_ID', $a_set['id']);
133 $this->tpl->setVariable('VAL_POSITION', $a_set['position']);
134
135 // begin-patch lok
136 if ($a_set['online']) {
137 $this->tpl->setVariable('VAL_ONOFFLINE', $this->lng->txt('online'));
138 $this->tpl->setVariable('ONOFFLINE_CLASS', 'smallgreen');
139 } else {
140 $this->tpl->setVariable('VAL_ONOFFLINE', $this->lng->txt('offline'));
141 $this->tpl->setVariable('ONOFFLINE_CLASS', 'smallred');
142 }
143
144 if ($a_set['passes']) {
145 $this->tpl->setVariable('PASSES_TXT', $this->lng->txt('crs_loc_passes_info'));
146 $this->tpl->setVariable('PASSES_VAL', $a_set['passes']);
147 }
148
149
150 // begin-patch lok
151 $this->ctrl->setParameterByClass('ilcourseobjectivesgui', 'objective_id', $a_set['id']);
152 $this->tpl->setVariable('VAL_TITLE_LINKED', $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'edit'));
153 // end-patch lok
154
155 $this->tpl->setVariable('VAL_TITLE', $a_set['title']);
156 if (strlen($a_set['description'])) {
157 $this->tpl->setVariable('VAL_DESC', $a_set['description']);
158 }
159
160 // materials
161 foreach ($a_set['materials'] as $ref_id => $data) {
162 if ($data['items']) {
163 $this->tpl->touchBlock('ul_begin');
164 foreach ($data['items'] as $pg_st) {
165 $this->tpl->setCurrentBlock('st_pg');
166 $this->tpl->setVariable('MAT_IMG', ilObject::_getIcon($pg_st['obj_id'], "tiny", $pg_st['type']));
167 $this->tpl->setVariable('MAT_ALT', $this->lng->txt('obj_' . $pg_st['type']));
168 include_once('Modules/LearningModule/classes/class.ilLMObject.php');
169 $title = ilLMObject::_lookupTitle($pg_st['obj_id']);
170 $this->tpl->setVariable('MAT_TITLE', $title);
171 $this->tpl->parseCurrentBlock();
172 }
173 $this->tpl->touchBlock('ul_end');
174 } else {
175 $this->tpl->touchBlock('new_line');
176 }
177 $this->tpl->setCurrentBlock('mat_row');
178 $this->tpl->setVariable('LM_IMG', ilObject::_getIcon($data['obj_id'], "tiny", $data['type']));
179 $this->tpl->setVariable('LM_ALT', $this->lng->txt('obj_' . $data['type']));
180
181 if ($data['type'] == 'catr' or $data['type'] == 'crsr' or $data['type'] == 'grpr') {
182 include_once './Services/ContainerReference/classes/class.ilContainerReference.php';
183 $this->tpl->setVariable(
184 'LM_TITLE',
186 );
187 } else {
188 $this->tpl->setVariable('LM_TITLE', ilObject::_lookupTitle($data['obj_id']));
189 }
190 $this->tpl->parseCurrentBlock();
191 }
192
193 // self assessment
194 // begin-patch lok
195 if ($this->getSettings()->worksWithInitialTest()) {
196 if ($this->getSettings()->hasSeparateInitialTests()) {
197 if ($a_set['initial']) {
198 include_once './Services/Link/classes/class.ilLink.php';
199 $obj_id = ilObject::_lookupObjId($a_set['initial']);
200 $this->tpl->setCurrentBlock('initial_test_per_objective');
201 $this->tpl->setVariable('IT_IMG', ilObject::_getIcon($obj_id, 'tiny'));
202 $this->tpl->setVariable('IT_ALT', $this->lng->txt('obj_tst'));
203 $this->tpl->setVariable('IT_TITLE', ilObject::_lookupTitle($obj_id));
204 $this->tpl->setVariable('IT_TITLE_LINK', ilLink::_getLink($a_set['initial']));
205
206 include_once './Services/Link/classes/class.ilLink.php';
207 $this->ctrl->setParameterByClass('ilobjtestgui', 'ref_id', $a_set['initial']);
208 $this->ctrl->setParameterByClass('ilobjtestgui', 'cmd', 'questionsTabGateway');
209 $this->tpl->setVariable(
210 'IT_TITLE_LINK',
211 $this->ctrl->getLinkTargetByClass('ilobjtestgui')
212 );
213
214 $this->tpl->parseCurrentBlock();
215 } else {
216 $this->tpl->touchBlock('initial_test_per_objective');
217 }
218 } else {
219 foreach ($a_set['self'] as $test) {
220 // begin-patch lok
221 foreach ((array) $test['questions'] as $question) {
222 $this->tpl->setCurrentBlock('self_qst_row');
223 $this->tpl->setVariable('SELF_QST_TITLE', $question['title']);
224 $this->tpl->parseCurrentBlock();
225 }
226 // end-patch lok
227 }
228 // begin-patch lok
229 if (!count($a_set['self'])) {
230 $this->tpl->touchBlock('self_qst_row');
231 }
232 }
233
234 // end-patch lok
235 }
236 // end-patch lok
237
238 // final test questions
239 if ($this->getSettings()->getQualifyingTestType() == ilLOSettings::TYPE_QUALIFYING_SELECTED) {
240 if ($a_set['final']) {
241 $obj_id = ilObject::_lookupObjId($a_set['final']);
242 $this->tpl->setCurrentBlock('final_test_per_objective');
243 $this->tpl->setVariable('FT_IMG', ilObject::_getIcon($obj_id, 'tiny'));
244 $this->tpl->setVariable('FT_ALT', $this->lng->txt('obj_tst'));
245 $this->tpl->setVariable('FT_TITLE', ilObject::_lookupTitle($obj_id));
246
247 include_once './Services/Link/classes/class.ilLink.php';
248 $this->ctrl->setParameterByClass('ilobjtestgui', 'ref_id', $a_set['final']);
249 $this->ctrl->setParameterByClass('ilobjtestgui', 'cmd', 'questionsTabGateway');
250 $this->tpl->setVariable(
251 'FT_TITLE_LINK',
252 $this->ctrl->getLinkTargetByClass('ilobjtestgui')
253 );
254
255
256 $this->tpl->parseCurrentBlock();
257 } else {
258 $this->tpl->touchBlock('final_test_per_objective');
259 }
260 } else {
261 foreach ((array) $a_set['final'] as $test) {
262 foreach ((array) $test['questions'] as $question) {
263 $this->tpl->setCurrentBlock('final_qst_row');
264 $this->tpl->setVariable('FINAL_QST_TITLE', $question['title']);
265 $this->tpl->parseCurrentBlock();
266 }
267 // begin-patch lok
268 #$this->tpl->setCurrentBlock('final_test_row');
269 #$this->tpl->setVariable('FINAL_TST_IMG',ilUtil::getImagePath('icon_tst_s.png'));
270 #$this->tpl->setVariable('FINAL_TST_ALT',$this->lng->txt('obj_tst'));
271 #$this->tpl->setVariable('FINAL_TST_TITLE',ilObject::_lookupTitle($test['obj_id']));
272 #$this->tpl->parseCurrentBlock();
273 // end-patch lok
274 }
275 }
276
277 // begin-patch lok
278 // Edit Link
279 #$this->ctrl->setParameterByClass(get_class($this->getParentObject()),'objective_id',$a_set['id']);
280 $this->ctrl->setParameterByClass('ilcourseobjectivesgui', 'objective_id', $a_set['id']);
281 #$this->tpl->setVariable('EDIT_LINK',$this->ctrl->getLinkTargetByClass(get_class($this->getParentObject()),'edit'));
282 $this->tpl->setVariable('EDIT_LINK', $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'edit'));
283 // end-patch lok
284 $this->tpl->setVariable('TXT_EDIT', $this->lng->txt('edit'));
285
286 include_once("./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
287 $alist = new ilAdvancedSelectionListGUI();
288 $alist->setId($a_set['id']);
289 //$alist->setListTitle($this->lng->txt("actions"));
290
291 $alist->addItem(
292 $this->lng->txt('edit'),
293 '',
294 $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'edit')
295 );
296 // materials
297 $alist->addItem(
298 $this->lng->txt('crs_objective_action_materials'),
299 '',
300 $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'materialAssignment')
301 );
302 // itest
303 if ($this->getSettings()->worksWithInitialTest() && !$this->getSettings()->hasSeparateInitialTests()) {
304 $alist->addItem(
305 $this->lng->txt('crs_objective_action_itest'),
306 '',
307 $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'selfAssessmentAssignment')
308 );
309 }
310 // qtest
311 if ($this->getSettings()->hasSeparateQualifiedTests()) {
312 #$alist->addItem(
313 # $this->lng->txt('crs_objective_action_qtest_sep'),
314 # '',
315 # $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'finalSeparatedTestAssignment')
316 #);
317 } else {
318 $alist->addItem(
319 $this->lng->txt('crs_objective_action_qtest'),
320 '',
321 $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'finalTestAssignment')
322 );
323 }
324
325 $this->ctrl->setParameterByClass('illopagegui', 'objective_id', $a_set['id']);
326 $alist->addItem(
327 $this->lng->txt('crs_edit_lo_introduction'),
328 '',
329 $this->ctrl->getLinkTargetByClass('illopagegui', 'edit')
330 );
331
332
333 $this->tpl->setVariable('VAL_ACTIONS', $alist->getHTML());
334
335 // end-patch lok
336 }
337
338
345 public function parse($a_objective_ids)
346 {
347 $position = 1;
348 foreach ($a_objective_ids as $objective_id) {
349 $objective = new ilCourseObjective($this->course_obj, $objective_id);
350
351 $objective_data = [];
352 $objective_data['id'] = $objective_id;
353 $objective_data['position'] = sprintf("%.1f", $position++) * 10;
354 $objective_data['title'] = $objective->getTitle();
355 $objective_data['description'] = $objective->getDescription();
356
357 // begin-patch lok
358 $objective_data['online'] = $objective->isActive();
359 $objective_data['passes'] = $objective->getPasses();
360 // end-patch lok
361
362 // assigned materials
363 $materials = array();
364 $ass_materials = new ilCourseObjectiveMaterials($objective_id);
365 foreach ($ass_materials->getMaterials() as $material) {
366 $materials[$material['ref_id']]['obj_id'] = $obj_id = ilObject::_lookupObjId($material['ref_id']);
367 $materials[$material['ref_id']]['type'] = ilObject::_lookupType($obj_id);
368
369 switch ($material['type']) {
370 case 'pg':
371 case 'st':
372 $materials[$material['ref_id']]['items'][] = $material;
373 break;
374 default:
375
376 }
377 }
378 $objective_data['materials'] = $materials;
379 $question_obj = new ilCourseObjectiveQuestion($objective_id);
380
381 // self assessment questions
382 // begin-patch lok
383 if ($this->getSettings()->worksWithInitialTest()) {
384 if ($this->getSettings()->hasSeparateInitialTests()) {
385 include_once './Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
386 $assignments = ilLOTestAssignments::getInstance($this->course_obj->getId());
387 $assignment = $assignments->getAssignmentByObjective($objective_id, ilLOSettings::TYPE_TEST_INITIAL);
388
389 $objective_data['initial'] = 0;
390 if ($assignment instanceof ilLOTestAssignment) {
391 $test_id = $assignment->getTestRefId();
392
393 include_once './Services/Object/classes/class.ilObjectFactory.php';
395 $test_candidate = $factory->getInstanceByRefId($test_id, false);
396 if ($test_candidate instanceof ilObjTest) {
397 $objective_data['initial'] = $test_id;
398 }
399 }
400 } elseif (ilLOUtils::lookupRandomTest(ilObject::_lookupObjId($this->getSettings()->getInitialTest()))) {
401 $test = array();
402 $objective_data['self'] = [];
404 $this->course_obj->getId(),
405 $objective_id,
406 ilObject::_lookupObjId($this->getSettings()->getInitialTest()),
408 ) as $sequence_id
409 ) {
410 $test['obj_id'] = ilObject::_lookupObjId($this->getSettings()->getInitialTest());
411 $qst = ilLOUtils::lookupQplBySequence($this->getSettings()->getInitialTest(), $sequence_id);
412 if ($qst) {
413 $test['questions'][] = array('title' => $qst);
414 }
415 $objective_data['self'] = array($test);
416 }
417 } else {
418 $tests = array();
419 foreach ($question_obj->getSelfAssessmentTests() as $test) {
420 $questions = array();
421 foreach ($question_obj->getQuestionsOfTest($test['obj_id']) as $qst) {
422 $questions[] = $qst;
423 }
424 $tmp_test = $test;
425 $tmp_test['questions'] = $questions;
426
427 $tests[] = $tmp_test;
428 }
429 $objective_data['self'] = $tests;
430 }
431 }
432 // end-patch lok
433
434 // final test questions
435 // begin-patch lok
436 // single test assignments
437 if ($this->getSettings()->getQualifyingTestType() == ilLOSettings::TYPE_QUALIFYING_SELECTED) {
438 include_once './Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
439 $assignments = ilLOTestAssignments::getInstance($this->course_obj->getId());
440 $assignment = $assignments->getAssignmentByObjective($objective_id, ilLOSettings::TYPE_TEST_QUALIFIED);
441
442 $objective_data['final'] = 0;
443 if ($assignment instanceof ilLOTestAssignment) {
444 $test_id = $assignment->getTestRefId();
445
446 include_once './Services/Object/classes/class.ilObjectFactory.php';
448 $test_candidate = $factory->getInstanceByRefId($test_id, false);
449 if ($test_candidate instanceof ilObjTest) {
450 $objective_data['final'] = $test_id;
451 }
452 }
453 } elseif ($this->getSettings()->getQualifiedTest()) {
454 if (ilLOUtils::lookupRandomTest(ilObject::_lookupObjId($this->getSettings()->getQualifiedTest()))) {
455 $test = array();
457 $this->course_obj->getId(),
458 $objective_id,
459 ilObject::_lookupObjId($this->getSettings()->getQualifiedTest()),
461 ) as $sequence_id
462 ) {
463 $test['obj_id'] = ilObject::_lookupObjId($this->getSettings()->getQualifiedTest());
464 $qst = ilLOUtils::lookupQplBySequence($this->getSettings()->getQualifiedTest(), $sequence_id);
465 if ($qst) {
466 $test['questions'][] = array('title' => $qst);
467 }
468 $objective_data['final'] = array($test);
469 }
470 } else {
471 $tests = array();
472 foreach ($question_obj->getFinalTests() as $test) {
473 $questions = array();
474 foreach ($question_obj->getQuestionsOfTest($test['obj_id']) as $qst) {
475 $questions[] = $qst;
476 }
477 $tmp_test = $test;
478 $tmp_test['questions'] = $questions;
479
480 $tests[] = $tmp_test;
481 }
482 $objective_data['final'] = $tests;
483 }
484 }
485 // end-patch lok
486 $objectives[] = (array) $objective_data;
487 }
488 $this->setData($objectives ? $objectives : array());
489 }
490}
$factory
Definition: metadata.php:43
$test
Definition: Utf8Test.php:84
An exception for terminatinating execution or to throw for unit testing.
User interface class for advanced drop-down selection lists.
static _lookupTargetTitle($a_obj_id)
Lookup target title.
class ilCourseObjectiveMaterials
class ilcourseobjectiveQuestion
class ilcourseobjective
__construct($a_parent_obj, $a_course_obj)
Constructor.
static _lookupTitle($a_obj_id)
Lookup title.
static lookupSequencesByType($a_container_id, $a_objective_id, $a_test_id, $a_test_type)
Lookup sequence ids @global type $ilDB.
const TYPE_QUALIFYING_SELECTED
static getInstanceByObjId($a_obj_id)
get singleton instance
Settings for LO courses.
static getInstance($a_container_id)
Get instance by container id.
static lookupRandomTest($a_test_obj_id)
Check if test is a random test.
static lookupQplBySequence($a_test_ref_id, $a_sequence_id)
Lookup assigned qpl name (including taxonomy) by sequence.
Class ilObjectFactory.
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
static _lookupType($a_id, $a_reference=false)
lookup object type
Class ilTable2GUI.
setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top=false)
Set the name of the checkbox that should be toggled with a select all button.
setData($a_data)
set table data @access public
setRowTemplate($a_template, $a_template_dir="")
Set row template.
setLimit($a_limit=0, $a_default_limit=0)
set max.
addMultiCommand($a_cmd, $a_text)
Add Command button.
addColumn( $a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
setFormName($a_formname="")
Set Form name.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
disable($a_module_name)
diesables particular modules of table
enable($a_module_name)
enables particular modules of table
$tests
Definition: bench.php:104
global $ilCtrl
Definition: ilias.php:18
global $DIC
Definition: saml.php:7
settings()
Definition: settings.php:2