ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilTestQuestionsTableGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once('./Services/Table/classes/class.ilTable2GUI.php');
5 require_once 'Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php';
6 
17 {
18  protected $writeAccess = false;
19  protected $totalPoints = 0;
20  protected $totalWorkingTime = '00:00:00';
21  protected $checked_move = false;
22  protected $total = 0;
23  protected $position = 0;
24 
28  protected $visibleOptionalColumns = array();
29 
33  protected $optionalColumns = array();
34 
42  public function __construct($a_parent_obj, $a_parent_cmd, $a_write_access = false, $a_checked_move = false, $a_total = 0)
43  {
44  $this->setId('tst_qst_lst_'.$a_parent_obj->object->getRefId());
45 
46  parent::__construct($a_parent_obj, $a_parent_cmd);
47 
48  global $lng, $ilCtrl;
49 
50  $this->lng = $lng;
51  $this->ctrl = $ilCtrl;
52  $this->total = $a_total;
53 
54  $this->setWriteAccess($a_write_access);
55  $this->setCheckedMove($a_checked_move);
56 
57  $this->setFormName('questionbrowser');
58  $this->setStyle('table', 'fullwidth');
59  $this->addColumn('','f','1%', true);
60  $this->addColumn('','f','1%');
61  $this->visibleOptionalColumns = (array)$this->getSelectedColumns();
62  $this->optionalColumns = (array)$this->getSelectableColumns();
63  if(isset($this->visibleOptionalColumns['qid']))
64  {
65  $this->addColumn($this->optionalColumns['qid']['txt'],'qid', '');
66  }
67  $this->addColumn($this->lng->txt("tst_question_title"),'title', '');
68  //$this->addColumn($this->lng->txt("tst_sequence"),'sequence', '');
69  if( $a_parent_obj->object->areObligationsEnabled() )
70  {
71  $this->addColumn($this->lng->txt("obligatory"),'obligatory', '');
72  }
73  if(isset($this->visibleOptionalColumns['description']))
74  {
75  $this->addColumn($this->optionalColumns['description']['txt'],'description', '');
76  }
77  $this->addColumn($this->lng->txt("tst_question_type"),'type', '');
78  $this->addColumn($this->lng->txt("points"),'', '');
79  if(isset($this->visibleOptionalColumns['author']))
80  {
81  $this->addColumn($this->optionalColumns['author']['txt'],'author', '');
82  }
83  if(isset($this->visibleOptionalColumns['working_time']))
84  {
85  $this->addColumn($this->optionalColumns['working_time']['txt'],'working_time', '');
86  }
87  $this->addColumn($this->lng->txt("qpl"),'qpl', '');
88 
89  $this->setSelectAllCheckbox('q_id');
90 
91  $this->setExternalSegmentation(true);
92 
93  if ($this->getWriteAccess() && !$this->getTotal())
94  {
95  $this->addMultiCommand('removeQuestions', $this->lng->txt('remove_question'));
96  $this->addMultiCommand('moveQuestions', $this->lng->txt('move'));
97  if ($this->checked_move)
98  {
99  $this->addMultiCommand('insertQuestionsBefore', $this->lng->txt('insert_before'));
100  $this->addMultiCommand('insertQuestionsAfter', $this->lng->txt('insert_after'));
101  }
102  //$this->addMultiCommand('copyToQuestionpool', $this->lng->txt('copy_to_questionpool'));
103  $this->addMultiCommand('copyQuestion', $this->lng->txt('copy'));
104  $this->addMultiCommand('copyAndLinkToQuestionpool', $this->lng->txt('copy_and_link_to_questionpool'));
105 
106  }
107 
108 
109  $this->setRowTemplate("tpl.il_as_tst_questions_row.html", "Modules/Test");
110 
111  $this->setFormAction($this->ctrl->getFormAction($a_parent_obj, $a_parent_cmd));
112 
113  if( $a_parent_obj->object->areObligationsEnabled() )
114  {
115  $this->addCommandButton('saveOrderAndObligations', $this->lng->txt('saveOrderAndObligations'));
116  }
117  else
118  {
119  $this->addCommandButton('saveOrderAndObligations', $this->lng->txt('saveOrder'));
120  }
121 
122  $this->disable('sort');
123  $this->enable('header');
124  $this->enable('select_all');
125  }
126 
130  public function getSelectableColumns()
131  {
132  $cols = array(
133  'qid' => array('txt' => $this->lng->txt('question_id'), 'default' => true),
134  'description' => array('txt' => $this->lng->txt('description'), 'default' => false),
135  'author' => array('txt' => $this->lng->txt('author'), 'default' => false),
136  'working_time'=> array('txt' => $this->lng->txt('working_time'), 'default' => false)
137  );
138 
139  return $cols;
140  }
141 
142  function fillHeader()
143  {
144  foreach ($this->column as $key => $column)
145  {
146  if (strcmp($column['text'], $this->lng->txt("points")) == 0)
147  {
148  $this->column[$key]['text'] = $this->lng->txt("points") . "&nbsp;(" . $this->totalPoints . ")";
149  }
150  elseif (strcmp($column['text'], $this->lng->txt("working_time")) == 0)
151  {
152  $this->column[$key]['text'] = $this->lng->txt("working_time") . "&nbsp;(" . $this->totalWorkingTime . ")";
153  }
154  }
156  }
157 
165  public function fillRow($data)
166  {
167  global $ilUser,$ilAccess;
168 
169  $q_id = $data["question_id"];
170 
171  $this->tpl->setVariable("QUESTION_ID", $q_id);
172  if(isset($this->visibleOptionalColumns['qid']))
173  {
174  $this->tpl->setVariable("QUESTION_ID_PRESENTATION", $q_id);
175  }
176  if ($this->getWriteAccess() && !$this->getTotal() && $data["obj_fi"] > 0)
177  {
178  if (!$data['complete']) {
179  $this->tpl->setVariable("IMAGE_WARNING", ilUtil::getImagePath("icon_alert.svg"));
180  $this->tpl->setVariable("ALT_WARNING", $this->lng->txt("warning_question_not_complete"));
181  $this->tpl->setVariable("TITLE_WARNING", $this->lng->txt("warning_question_not_complete"));
182  }
183 
184 
185  $qpl_ref_id = current(ilObject::_getAllReferences($data["obj_fi"]));
186  $this->tpl->setVariable("QUESTION_TITLE", "<a href=\"" . $this->ctrl->getLinkTarget($this->getParentObject(), "questions") . "&eqid=$q_id&eqpl=$qpl_ref_id" . "\">" . $data["title"] . "</a>");
187 
188  // obligatory checkbox (when obligation is possible)
189  if( $data["obligationPossible"] )
190  {
191  $CHECKED = $data["obligatory"] ? "checked=\"checked\" " : "";
192  $OBLIGATORY = "<input type=\"checkbox\" name=\"obligatory[$q_id]\" value=\"1\" $CHECKED/>";
193  }
194  else
195  {
196  $OBLIGATORY = "";
197  }
198  }
199  else
200  {
201  global $lng;
202 
203  $this->tpl->setVariable("QUESTION_TITLE", $data["title"]);
204 
205  // obligatory icon
206  if( $data["obligatory"] )
207  {
208  $OBLIGATORY = "<img src=\"".ilUtil::getImagePath("obligatory.gif", "Modules/Test").
209  "\" alt=\"".$lng->txt("question_obligatory").
210  "\" title=\"".$lng->txt("question_obligatory")."\" />";
211  }
212  else $OBLIGATORY = '';
213  }
214 
215  if( $this->parent_obj->object->areObligationsEnabled() )
216  {
217  $this->tpl->setVariable("QUESTION_OBLIGATORY", $OBLIGATORY);
218  }
219 
220  $this->tpl->setVariable("QUESTION_SEQUENCE", $this->lng->txt("tst_sequence"));
221 
222  if ($this->getWriteAccess() && !$this->getTotal())
223  {
224  if ($data["sequence"] != 1)
225  {
226  $this->tpl->setVariable("BUTTON_UP", "<a href=\"" . $this->ctrl->getLinkTarget($this->getParentObject(), "questions") . "&up=".$data["question_id"]."\">" . ilGlyphGUI::get(ilGlyphGUI::UP, $this->lng->txt('up')) . "</a>");
227  }
228  if ($data["sequence"] != count($this->getData()))
229  {
230  $this->tpl->setVariable("BUTTON_DOWN", "<a href=\"" . $this->ctrl->getLinkTarget($this->getParentObject(), "questions") . "&down=".$data["question_id"]."\">" . ilGlyphGUI::get(ilGlyphGUI::DOWN, $this->lng->txt('down')) . "</a>");
231  }
232  }
233 
234  if(isset($this->visibleOptionalColumns['description']))
235  {
236  if($data["description"])
237  {
238  $this->tpl->setVariable("QUESTION_COMMENT", $data["description"] ? $data["description"] : '&nbsp;');
239  }
240  else
241  {
242  $this->tpl->touchBlock('question_comment_block');
243  }
244  }
245  include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
246  $this->tpl->setVariable("QUESTION_TYPE", assQuestion::_getQuestionTypeName($data["type_tag"]));
247  $this->tpl->setVariable("QUESTION_POINTS", $data["points"]);
248  $this->totalPoints += $data["points"];
249  $this->totalWorkingTime = assQuestion::sumTimesInISO8601FormatH_i_s_Extended($this->totalWorkingTime,$data['working_time']);
250  if(isset($this->visibleOptionalColumns['author']))
251  {
252  $this->tpl->setVariable("QUESTION_AUTHOR", $data["author"]);
253  }
254  if(isset($this->visibleOptionalColumns['working_time']))
255  {
256  $this->tpl->setVariable("QUESTION_WORKING_TIME", $data["working_time"]);
257  }
258  if (ilObject::_lookupType($data["orig_obj_fi"]) == 'qpl') {
259  $this->tpl->setVariable("QUESTION_POOL", ilObject::_lookupTitle($data["orig_obj_fi"]));
260  }
261  else {
262  $this->tpl->setVariable("QUESTION_POOL", $this->lng->txt('tst_question_not_from_pool_info'));
263  }
264 
265 
266  $this->position += 10;
267  $field = "<input type=\"text\" name=\"order[q_".$data["question_id"].
268  "]\" value=\"".$this->position."\" maxlength=\"3\" style=\"width:30px\" />";
269  $this->tpl->setVariable("QUESTION_POSITION", $field);
270  }
271 
272  public function setWriteAccess($value)
273  {
274  $this->writeAccess = $value;
275  }
276 
277  public function getWriteAccess()
278  {
279  return $this->writeAccess;
280  }
281 
282  public function setCheckedMove($value)
283  {
284  $this->checked_move = $value;
285  }
286 
287  public function getCheckedMove()
288  {
289  return $this->checked_move;
290  }
291 
292  public function setTotal($value)
293  {
294  $this->total = $value;
295  }
296 
297  public function getTotal()
298  {
299  return $this->total;
300  }
301 }
302 ?>