ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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 
24 include_once('./Services/Table/classes/class.ilTable2GUI.php');
25 include_once './Modules/Course/classes/class.ilCourseObjective.php';
26 include_once('./Modules/Course/classes/class.ilCourseObjectiveMaterials.php');
27 include_once('./Modules/Course/classes/class.ilCourseObjectiveQuestion.php');
28 include_once './Modules/Course/classes/Objectives/class.ilLOUtils.php';
29 
30 // begin-patch lok
31 include_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 $lng,$ilCtrl;
59 
60  $this->course_obj = $a_course_obj;
61 
62  // begin-patch lok
63  $this->settings = ilLOSettings::getInstanceByObjId($this->course_obj->getId());
64  // end-patch lok
65 
66  $this->lng = $lng;
67  $this->lng->loadLanguageModule('crs');
68  $this->ctrl = $ilCtrl;
69 
70  parent::__construct($a_parent_obj,'listObjectives');
71  $this->setFormName('objectives');
72  $this->addColumn('','f',"1px");
73  $this->addColumn($this->lng->txt('position'),'position','10em');
74  $this->addColumn($this->lng->txt('title'),'title','20%');
75  $this->addColumn($this->lng->txt('crs_objective_assigned_materials'),'materials');
76  // begin-patch lok
77  if($this->getSettings()->worksWithInitialTest())
78  {
79  $this->addColumn($this->lng->txt('crs_objective_self_assessment'),'self');
80  }
81  // end-patch lok
82  if($this->getSettings()->getQualifyingTestType() == ilLOSettings::TYPE_QUALIFYING_SELECTED)
83  {
84  $this->addColumn($this->lng->txt('crs_objective_tbl_col_final_tsts'),'final');
85  }
86  else
87  {
88  $this->addColumn($this->lng->txt('crs_objective_final_test'),'final');
89  }
90  $this->addColumn($this->lng->txt('actions'),'5em');
91 
92  $this->setFormAction($this->ctrl->getFormAction($a_parent_obj));
93  $this->setRowTemplate("tpl.crs_objectives_table_row.html","Modules/Course");
94  $this->disable('sort');
95  $this->enable('header');
96  $this->disable('numinfo');
97  $this->enable('select_all');
98  // begin-patch lok
99  $this->setSelectAllCheckbox('objective');
100  // end-patch lok
101  $this->setLimit(200);
102 
103  // begin-patch lo
104  $this->addMultiCommand('activateObjectives', $this->lng->txt('set_online'));
105  $this->addMultiCommand('deactivateObjectives', $this->lng->txt('set_offline'));
106  $this->addMultiCommand('askDeleteObjectives',$this->lng->txt('delete'));
107  // end-patch lok
108  $this->addCommandButton('saveSorting',$this->lng->txt('sorting_save'));
109  // $this->addCommandButton('create',$this->lng->txt('crs_add_objective'));
110  }
111 
112  // begin-patch lok
117  public function getSettings()
118  {
119  return $this->settings;
120  }
121  // end-patch lok
122 
123 
131  protected function fillRow($a_set)
132  {
133  $GLOBALS['ilLog']->write(__METHOD__.': '.print_r($a_set,TRUE));
134 
135  $this->tpl->setVariable('VAL_ID',$a_set['id']);
136  $this->tpl->setVariable('VAL_POSITION',$a_set['position']);
137 
138  // begin-patch lok
139  if($a_set['online'])
140  {
141  $this->tpl->setVariable('VAL_ONOFFLINE',$this->lng->txt('online'));
142  $this->tpl->setVariable('ONOFFLINE_CLASS','smallgreen');
143  }
144  else
145  {
146  $this->tpl->setVariable('VAL_ONOFFLINE',$this->lng->txt('offline'));
147  $this->tpl->setVariable('ONOFFLINE_CLASS','smallred');
148  }
149 
150  if($a_set['passes'])
151  {
152  $this->tpl->setVariable('PASSES_TXT',$this->lng->txt('crs_loc_passes_info'));
153  $this->tpl->setVariable('PASSES_VAL',$a_set['passes']);
154  }
155 
156 
157  // begin-patch lok
158  $this->ctrl->setParameterByClass('ilcourseobjectivesgui','objective_id',$a_set['id']);
159  $this->tpl->setVariable('VAL_TITLE_LINKED',$this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui','edit'));
160  // end-patch lok
161 
162  $this->tpl->setVariable('VAL_TITLE',$a_set['title']);
163  if(strlen($a_set['description']))
164  {
165  $this->tpl->setVariable('VAL_DESC',$a_set['description']);
166  }
167 
168  // materials
169  foreach($a_set['materials'] as $ref_id => $data)
170  {
171  if($data['items'])
172  {
173  $this->tpl->touchBlock('ul_begin');
174  foreach($data['items'] as $pg_st)
175  {
176  $this->tpl->setCurrentBlock('st_pg');
177  $this->tpl->setVariable('MAT_IMG',ilObject::_getIcon($pg_st['obj_id'],"tiny", $pg_st['type']));
178  $this->tpl->setVariable('MAT_ALT',$this->lng->txt('obj_'.$pg_st['type']));
179  include_once('Modules/LearningModule/classes/class.ilLMObject.php');
180  $title = ilLMObject::_lookupTitle($pg_st['obj_id']);
181  $this->tpl->setVariable('MAT_TITLE',$title);
182  $this->tpl->parseCurrentBlock();
183  }
184  $this->tpl->touchBlock('ul_end');
185  }
186  else
187  {
188  $this->tpl->touchBlock('new_line');
189  }
190  $this->tpl->setCurrentBlock('mat_row');
191  $this->tpl->setVariable('LM_IMG',ilObject::_getIcon($data['obj_id'],"tiny", $data['type']));
192  $this->tpl->setVariable('LM_ALT',$this->lng->txt('obj_'.$data['type']));
193 
194  if($data['type'] == 'catr' or $data['type'] == 'crsr' or $data['type'] == 'grpr')
195  {
196  include_once './Services/ContainerReference/classes/class.ilContainerReference.php';
197  $this->tpl->setVariable(
198  'LM_TITLE',
200  );
201  }
202  else
203  {
204  $this->tpl->setVariable('LM_TITLE',ilObject::_lookupTitle($data['obj_id']));
205  }
206  $this->tpl->parseCurrentBlock();
207  }
208 
209  // self assessment
210  // begin-patch lok
211  if($this->getSettings()->worksWithInitialTest())
212  {
213  if($this->getSettings()->hasSeparateInitialTests())
214  {
215  if($a_set['initial'])
216  {
217  include_once './Services/Link/classes/class.ilLink.php';
218  $obj_id = ilObject::_lookupObjId($a_set['initial']);
219  $this->tpl->setCurrentBlock('initial_test_per_objective');
220  $this->tpl->setVariable('IT_IMG', ilObject::_getIcon($obj_id, 'tiny'));
221  $this->tpl->setVariable('IT_ALT', $this->lng->txt('obj_tst'));
222  $this->tpl->setVariable('IT_TITLE',ilObject::_lookupTitle($obj_id));
223  $this->tpl->setVariable('IT_TITLE_LINK', ilLink::_getLink($a_set['initial']));
224 
225  include_once './Services/Link/classes/class.ilLink.php';
226  $this->ctrl->setParameterByClass('ilobjtestgui','ref_id',$a_set['initial']);
227  $this->ctrl->setParameterByClass('ilobjtestgui','cmd','questionsTabGateway');
228  $this->tpl->setVariable(
229  'IT_TITLE_LINK',
230  $this->ctrl->getLinkTargetByClass('ilobjtestgui')
231  );
232 
233  $this->tpl->parseCurrentBlock();
234  }
235  else
236  {
237  $this->tpl->touchBlock('initial_test_per_objective');
238  }
239  }
240  else
241  {
242  foreach($a_set['self'] as $test)
243  {
244  // begin-patch lok
245  foreach((array) $test['questions'] as $question)
246  {
247  $this->tpl->setCurrentBlock('self_qst_row');
248  $this->tpl->setVariable('SELF_QST_TITLE',$question['title']);
249  $this->tpl->parseCurrentBlock();
250  }
251  // end-patch lok
252  }
253  // begin-patch lok
254  if(!count($a_set['self']))
255  {
256  $this->tpl->touchBlock('self_qst_row');
257  }
258  }
259 
260  // end-patch lok
261  }
262  // end-patch lok
263 
264  // final test questions
265  if($this->getSettings()->getQualifyingTestType() == ilLOSettings::TYPE_QUALIFYING_SELECTED)
266  {
267  if($a_set['final'])
268  {
269  $obj_id = ilObject::_lookupObjId($a_set['final']);
270  $this->tpl->setCurrentBlock('final_test_per_objective');
271  $this->tpl->setVariable('FT_IMG', ilObject::_getIcon($obj_id, 'tiny'));
272  $this->tpl->setVariable('FT_ALT', $this->lng->txt('obj_tst'));
273  $this->tpl->setVariable('FT_TITLE',ilObject::_lookupTitle($obj_id));
274 
275  include_once './Services/Link/classes/class.ilLink.php';
276  $this->ctrl->setParameterByClass('ilobjtestgui','ref_id',$a_set['final']);
277  $this->ctrl->setParameterByClass('ilobjtestgui','cmd','questionsTabGateway');
278  $this->tpl->setVariable(
279  'FT_TITLE_LINK',
280  $this->ctrl->getLinkTargetByClass('ilobjtestgui')
281  );
282 
283 
284  $this->tpl->parseCurrentBlock();
285  }
286  else
287  {
288  $this->tpl->touchBlock('final_test_per_objective');
289  }
290  }
291  else
292  {
293  foreach((array) $a_set['final'] as $test)
294  {
295  foreach((array) $test['questions'] as $question)
296  {
297  $this->tpl->setCurrentBlock('final_qst_row');
298  $this->tpl->setVariable('FINAL_QST_TITLE',$question['title']);
299  $this->tpl->parseCurrentBlock();
300  }
301  // begin-patch lok
302  #$this->tpl->setCurrentBlock('final_test_row');
303  #$this->tpl->setVariable('FINAL_TST_IMG',ilUtil::getImagePath('icon_tst_s.png'));
304  #$this->tpl->setVariable('FINAL_TST_ALT',$this->lng->txt('obj_tst'));
305  #$this->tpl->setVariable('FINAL_TST_TITLE',ilObject::_lookupTitle($test['obj_id']));
306  #$this->tpl->parseCurrentBlock();
307  // end-patch lok
308  }
309  }
310 
311  // begin-patch lok
312  // Edit Link
313  #$this->ctrl->setParameterByClass(get_class($this->getParentObject()),'objective_id',$a_set['id']);
314  $this->ctrl->setParameterByClass('ilcourseobjectivesgui','objective_id',$a_set['id']);
315  #$this->tpl->setVariable('EDIT_LINK',$this->ctrl->getLinkTargetByClass(get_class($this->getParentObject()),'edit'));
316  $this->tpl->setVariable('EDIT_LINK',$this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui','edit'));
317  // end-patch lok
318  $this->tpl->setVariable('TXT_EDIT',$this->lng->txt('edit'));
319 
320  include_once("./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
321  $alist = new ilAdvancedSelectionListGUI();
322  $alist->setId($a_set['id']);
323  //$alist->setListTitle($this->lng->txt("actions"));
324 
325  $alist->addItem(
326  $this->lng->txt('edit'),
327  '',
328  $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'edit')
329  );
330  // materials
331  $alist->addItem(
332  $this->lng->txt('crs_objective_action_materials'),
333  '',
334  $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'materialAssignment')
335  );
336  // itest
337  if($this->getSettings()->worksWithInitialTest() && !$this->getSettings()->hasSeparateInitialTests())
338  {
339  $alist->addItem(
340  $this->lng->txt('crs_objective_action_itest'),
341  '',
342  $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'selfAssessmentAssignment')
343  );
344  }
345  // qtest
346  if($this->getSettings()->hasSeparateQualifiedTests())
347  {
348  #$alist->addItem(
349  # $this->lng->txt('crs_objective_action_qtest_sep'),
350  # '',
351  # $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'finalSeparatedTestAssignment')
352  #);
353  }
354  else
355  {
356  $alist->addItem(
357  $this->lng->txt('crs_objective_action_qtest'),
358  '',
359  $this->ctrl->getLinkTargetByClass('ilcourseobjectivesgui', 'finalTestAssignment')
360  );
361 
362  }
363 
364  $this->ctrl->setParameterByClass('illopagegui','objective_id',$a_set['id']);
365  $alist->addItem(
366  $this->lng->txt('crs_edit_lo_introduction'),
367  '',
368  $this->ctrl->getLinkTargetByClass('illopagegui', 'edit')
369  );
370 
371 
372  $this->tpl->setVariable('VAL_ACTIONS',$alist->getHTML());
373 
374  // end-patch lok
375  }
376 
377 
384  public function parse($a_objective_ids)
385  {
386  $position = 1;
387  foreach($a_objective_ids as $objective_id)
388  {
389  $objective = new ilCourseObjective($this->course_obj,$objective_id);
390 
391  $objective_data['id'] = $objective_id;
392  $objective_data['position'] = sprintf("%.1f",$position++) * 10;
393  $objective_data['title'] = $objective->getTitle();
394  $objective_data['description'] = $objective->getDescription();
395 
396  // begin-patch lok
397  $objective_data['online'] = $objective->isActive();
398  $objective_data['passes'] = $objective->getPasses();
399  // end-patch lok
400 
401  // assigned materials
402  $materials = array();
403  $ass_materials = new ilCourseObjectiveMaterials($objective_id);
404  foreach($ass_materials->getMaterials() as $material)
405  {
406  $materials[$material['ref_id']]['obj_id'] = $obj_id = ilObject::_lookupObjId($material['ref_id']);
407  $materials[$material['ref_id']]['type'] = ilObject::_lookupType($obj_id);
408 
409  switch($material['type'])
410  {
411  case 'pg':
412  case 'st':
413  $materials[$material['ref_id']]['items'][] = $material;
414  break;
415  default:
416 
417  }
418 
419 
420  }
421  $objective_data['materials'] = $materials;
422  $question_obj = new ilCourseObjectiveQuestion($objective_id);
423 
424  // self assessment questions
425  // begin-patch lok
426  if($this->getSettings()->worksWithInitialTest())
427  {
428  if($this->getSettings()->hasSeparateInitialTests())
429  {
430  include_once './Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
431  $assignments = ilLOTestAssignments::getInstance($this->course_obj->getId());
432  $assignment = $assignments->getAssignmentByObjective($objective_id, ilLOSettings::TYPE_TEST_INITIAL);
433 
434  $objective_data['initial'] = 0;
435  if($assignment instanceof ilLOTestAssignment)
436  {
437  $test_id = $assignment->getTestRefId();
438 
439  include_once './Services/Object/classes/class.ilObjectFactory.php';
440  $factory = new ilObjectFactory();
441  $test_candidate = $factory->getInstanceByRefId($test_id,FALSE);
442  if($test_candidate instanceof ilObjTest)
443  {
444  $objective_data['initial'] = $test_id;
445  }
446  }
447  }
448  elseif(ilLOUtils::lookupRandomTest(ilObject::_lookupObjId($this->getSettings()->getInitialTest())))
449  {
450  $test = array();
451  include_once './Modules/Course/classes/Objectives/class.ilLORandomTestQuestionPools.php';
452  $rnd = new ilLORandomTestQuestionPools(
453  $this->course_obj->getId(),
454  $objective_id,
456  );
457  $test['obj_id'] = ilObject::_lookupObjId($this->getSettings()->getInitialTest());
458  $qst = ilLOUtils::lookupQplBySequence($this->getSettings()->getInitialTest(), $rnd->getQplSequence());
459  if($qst)
460  {
461  $test['questions'][] = array('title' => $qst);
462  }
463  $objective_data['self'] = array($test);
464  }
465  else
466  {
467  $tests = array();
468  foreach($question_obj->getSelfAssessmentTests() as $test)
469  {
470  $questions = array();
471  foreach($question_obj->getQuestionsOfTest($test['obj_id']) as $qst)
472  {
473  $questions[] = $qst;
474  }
475  $tmp_test = $test;
476  $tmp_test['questions'] = $questions;
477 
478  $tests[] = $tmp_test;
479  }
480  $objective_data['self'] = $tests;
481  }
482  }
483  // end-patch lok
484 
485  // final test questions
486  // begin-patch lok
487  // single test assignments
488  if($this->getSettings()->getQualifyingTestType() == ilLOSettings::TYPE_QUALIFYING_SELECTED)
489  {
490  include_once './Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
491  $assignments = ilLOTestAssignments::getInstance($this->course_obj->getId());
492  $assignment = $assignments->getAssignmentByObjective($objective_id, ilLOSettings::TYPE_TEST_QUALIFIED);
493 
494  $objective_data['final'] = 0;
495  if($assignment instanceof ilLOTestAssignment)
496  {
497  $test_id = $assignment->getTestRefId();
498 
499  include_once './Services/Object/classes/class.ilObjectFactory.php';
500  $factory = new ilObjectFactory();
501  $test_candidate = $factory->getInstanceByRefId($test_id,FALSE);
502  if($test_candidate instanceof ilObjTest)
503  {
504  $objective_data['final'] = $test_id;
505  }
506  }
507  }
508  elseif($this->getSettings()->getQualifiedTest())
509  {
510  if(ilLOUtils::lookupRandomTest(ilObject::_lookupObjId($this->getSettings()->getQualifiedTest())))
511  {
512  $test = array();
513  include_once './Modules/Course/classes/Objectives/class.ilLORandomTestQuestionPools.php';
514  $rnd = new ilLORandomTestQuestionPools(
515  $this->course_obj->getId(),
516  $objective_id,
518  );
519  $test['obj_id'] = ilObject::_lookupObjId($this->getSettings()->getQualifiedTest());
520  $qst = ilLOUtils::lookupQplBySequence($this->getSettings()->getQualifiedTest(), $rnd->getQplSequence());
521  if($qst)
522  {
523  $test['questions'][] = array('title' => $qst);
524  }
525  $objective_data['final'] = array($test);
526  }
527  else
528  {
529  $tests = array();
530  foreach($question_obj->getFinalTests() as $test)
531  {
532  $questions = array();
533  foreach($question_obj->getQuestionsOfTest($test['obj_id']) as $qst)
534  {
535  $questions[] = $qst;
536  }
537  $tmp_test = $test;
538  $tmp_test['questions'] = $questions;
539 
540  $tests[] = $tmp_test;
541  }
542  $objective_data['final'] = $tests;
543  }
544 
545  }
546  // end-patch lok
547  $objectives[] = (array) $objective_data;
548  }
549  $this->setData($objectives ? $objectives : array());
550  }
551 
552 }
553 ?>
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
static getInstanceByObjId($a_obj_id)
get singleton instance
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
static getInstance($a_container_id)
Get instance by container id.
Class ilObjectFactory.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
static _lookupTitle($a_id)
lookup object title
static _lookupTitle($a_obj_id)
Lookup title.
global $ilCtrl
Definition: ilias.php:18
class ilCourseObjectiveMaterials
Class ilTable2GUI.
__construct($a_parent_obj, $a_course_obj)
Constructor.
static lookupRandomTest($a_test_obj_id)
Check if test is a random test.
class ilcourseobjective
static _lookupObjId($a_id)
addMultiCommand($a_cmd, $a_text)
Add Command button.
enable($a_module_name)
enables particular modules of table
static _lookupTargetTitle($a_obj_id)
Lookup target title.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
User interface class for advanced drop-down selection lists.
Settings for LO courses.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
settings()
Definition: settings.php:2
disable($a_module_name)
diesables particular modules of table
$ref_id
Definition: sahs_server.php:39
setFormName($a_formname="")
Set Form name.
global $lng
Definition: privfeed.php:17
const TYPE_QUALIFYING_SELECTED
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all 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.
class ilcourseobjectiveQuestion
static lookupQplBySequence($a_test_ref_id, $a_sequence_id)
Lookup assigned qpl name (including taxonomy) by sequence.
setLimit($a_limit=0, $a_default_limit=0)
$test
Definition: Utf8Test.php:84