ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilQuestionBrowserTableGUI.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 'Modules/TestQuestionPool/classes/class.ilAssQuestionPreviewGUI.php';
6 require_once 'Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php';
7 
19 {
20  protected $editable = true;
21  protected $writeAccess = false;
22  protected $totalPoints = 0;
23  protected $totalWorkingTime = '00:00:00';
24  protected $confirmdelete;
25 
26  protected $taxIds = array();
27 
35  public function __construct($a_parent_obj, $a_parent_cmd, $a_write_access = false, $confirmdelete = false, $taxIds = array())
36  {
37  // Bugfix: #0019539
38  if ($confirmdelete) {
39  $this->setId("qpl_confirm_del_" . $a_parent_obj->object->getRefId());
40  } else {
41  $this->setId("qpl_qst_brows_" . $a_parent_obj->object->getRefId());
42  }
43 
44  parent::__construct($a_parent_obj, $a_parent_cmd);
45 
46  global $lng, $ilCtrl;
47 
48  $this->lng = $lng;
49  $this->ctrl = $ilCtrl;
50 
51  $this->confirmdelete = $confirmdelete;
52  $this->setWriteAccess($a_write_access);
53  $this->taxIds = $taxIds;
54 
55  $qplSetting = new ilSetting("qpl");
56 
57  $this->setFormName('questionbrowser');
58  $this->setStyle('table', 'fullwidth');
59  if (!$confirmdelete) {
60  $this->addColumn('', '', '1%');
61  $this->addColumn($this->lng->txt("title"), 'title', '');
62  foreach ($this->getSelectedColumns() as $c) {
63  if (strcmp($c, 'description') == 0) {
64  $this->addColumn($this->lng->txt("description"), 'description', '');
65  }
66  if (strcmp($c, 'type') == 0) {
67  $this->addColumn($this->lng->txt("question_type"), 'ttype', '');
68  }
69  // According to mantis #12713
70  if (strcmp($c, 'points') == 0) {
71  $this->addColumn($this->lng->txt("points"), 'points', '', false, 'ilCenterForced');
72  }
73  if (strcmp($c, 'statistics') == 0) {
74  $this->addColumn($this->lng->txt('statistics'), '', '');
75  }
76  if (strcmp($c, 'author') == 0) {
77  $this->addColumn($this->lng->txt("author"), 'author', '');
78  }
79  if (strcmp($c, 'created') == 0) {
80  $this->addColumn($this->lng->txt("create_date"), 'created', '');
81  }
82  if (strcmp($c, 'tstamp') == 0) {
83  $this->addColumn($this->lng->txt("last_update"), 'tstamp', '');
84  }
85  if (strcmp($c, 'working_time') == 0) {
86  $this->addColumn($this->lng->txt("working_time"), 'working_time', '');
87  }
88  }
89  $this->addColumn($this->lng->txt('actions'), '');
90  $this->setSelectAllCheckbox('q_id');
91  } else {
92  $this->addColumn($this->lng->txt("title"), 'title', '');
93  foreach ($this->getSelectedColumns() as $c) {
94  if (strcmp($c, 'description') == 0) {
95  $this->addColumn($this->lng->txt("description"), 'description', '');
96  }
97  if (strcmp($c, 'type') == 0) {
98  $this->addColumn($this->lng->txt("question_type"), 'ttype', '');
99  }
100  }
101  }
102 
103  if ($this->getWriteAccess()) {
104  if ($confirmdelete) {
105  $this->addCommandButton('confirmDeleteQuestions', $this->lng->txt('confirm'));
106  $this->addCommandButton('cancelDeleteQuestions', $this->lng->txt('cancel'));
107  } else {
108  $this->addMultiCommand('copy', $this->lng->txt('copy'));
109  $this->addMultiCommand('move', $this->lng->txt('move'));
110  $this->addMultiCommand('exportQuestion', $this->lng->txt('export'));
111  $this->addMultiCommand('deleteQuestions', $this->lng->txt('delete'));
112  }
113  }
114 
115  $this->setRowTemplate("tpl.il_as_qpl_questionbrowser_row.html", "Modules/TestQuestionPool");
116 
117  $this->setFormAction($this->ctrl->getFormAction($a_parent_obj, $a_parent_cmd));
118  $this->setDefaultOrderField("title");
119  $this->setDefaultOrderDirection("asc");
120 
121  $this->setShowRowsSelector(true);
122 
123  if ($confirmdelete) {
124  $this->disable('sort');
125  $this->disable('select_all');
126  } else {
127  $this->enable('sort');
128  $this->enable('header');
129  $this->enable('select_all');
130  $this->setFilterCommand('filterQuestionBrowser');
131  $this->setResetCommand('resetQuestionBrowser');
132  $this->initFilter();
133  }
134  }
135 
136  public function getSelectableColumns()
137  {
138  global $lng;
139  $cols["description"] = array(
140  "txt" => $lng->txt("description"),
141  "default" => true
142  );
143  $cols["type"] = array(
144  "txt" => $lng->txt("question_type"),
145  "default" => true
146  );
147  if (!$this->confirmdelete) {
148  $cols["points"] = array(
149  "txt" => $lng->txt("points"),
150  "default" => true
151  );
152  $cols["statistics"] = array(
153  "txt" => $lng->txt("statistics"),
154  "default" => true
155  );
156  $cols["author"] = array(
157  "txt" => $lng->txt("author"),
158  "default" => true
159  );
160  $cols["created"] = array(
161  "txt" => $lng->txt("create_date"),
162  "default" => true
163  );
164  $cols["tstamp"] = array(
165  "txt" => $lng->txt("last_update"),
166  "default" => true
167  );
168  $cols["working_time"] = array(
169  "txt" => $lng->txt("working_time"),
170  "default" => true
171  );
172  }
173  return $cols;
174  }
175 
179  public function initFilter()
180  {
181  global $lng, $rbacreview, $ilUser;
182 
183  // title
184  include_once("./Services/Form/classes/class.ilTextInputGUI.php");
185  $ti = new ilTextInputGUI($lng->txt("title"), "title");
186  $ti->setMaxLength(64);
187  $ti->setValidationRegexp('/^[^%]+$/is');
188  $ti->setSize(20);
189  $this->addFilterItem($ti);
190  $ti->readFromSession();
191  $this->filter["title"] = $ti->getValue();
192 
193  // description
194  $ti = new ilTextInputGUI($lng->txt("description"), "description");
195  $ti->setMaxLength(64);
196  $ti->setSize(20);
197  $ti->setValidationRegexp('/^[^%]+$/is');
198  $this->addFilterItem($ti);
199  $ti->readFromSession();
200  $this->filter["description"] = $ti->getValue();
201 
202  if (!$this->confirmdelete) {
203  // author
204  $ti = new ilTextInputGUI($lng->txt("author"), "author");
205  $ti->setMaxLength(64);
206  $ti->setSize(20);
207  $ti->setValidationRegexp('/^[^%]+$/is');
208  $this->addFilterItem($ti);
209  $ti->readFromSession();
210  $this->filter["author"] = $ti->getValue();
211  }
212  // questiontype
213  include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
214  include_once("./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php");
216  $options = array();
217  $options[""] = $lng->txt('filter_all_question_types');
218  foreach ($types as $translation => $row) {
219  $options[$row['type_tag']] = $translation;
220  }
221 
222  $si = new ilSelectInputGUI($this->lng->txt("question_type"), "type");
223  $si->setOptions($options);
224  $this->addFilterItem($si);
225  $si->readFromSession();
226  $this->filter["type"] = $si->getValue();
227 
228  if ($this->parent_obj->object->getShowTaxonomies()) {
229  require_once 'Services/Taxonomy/classes/class.ilTaxSelectInputGUI.php';
230 
231  foreach ($this->taxIds as $taxId) {
232  if ($taxId == $this->parent_obj->object->getNavTaxonomyId()) {
233  continue;
234  }
235 
236  $postvar = "tax_$taxId";
237 
238  $inp = new ilTaxSelectInputGUI($taxId, $postvar, true);
239  $this->addFilterItem($inp);
240  $inp->readFromSession();
241  $this->filter[$postvar] = $inp->getValue();
242  }
243  }
244  }
245 
246  public function fillHeader()
247  {
248  foreach ($this->column as $key => $column) {
249  if (strcmp($column['text'], $this->lng->txt("points")) == 0) {
250  $this->column[$key]['text'] = $this->lng->txt("points") . "&nbsp;(" . $this->totalPoints . ")";
251  } elseif (strcmp($column['text'], $this->lng->txt("working_time")) == 0) {
252  $this->column[$key]['text'] = $this->lng->txt("working_time") . "&nbsp;(" . $this->totalWorkingTime . ")";
253  }
254  }
255  parent::fillHeader();
256  }
257 
265  public function fillRow($data)
266  {
267  global $ilUser,$ilAccess;
268  include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
269  include_once "./Modules/TestQuestionPool/classes/class.assQuestionGUI.php";
270  $class = strtolower(assQuestionGUI::_getGUIClassNameForId($data["question_id"]));
271  $this->ctrl->setParameterByClass("ilAssQuestionPageGUI", "q_id", $data["question_id"]);
272  $this->ctrl->setParameterByClass("ilAssQuestionPreviewGUI", "q_id", $data["question_id"]);
273  $this->ctrl->setParameterByClass($class, "q_id", $data["question_id"]);
274  $points = 0;
275 
276  $actions = new ilAdvancedSelectionListGUI();
277  $actions->setId('qst' . $data["question_id"]);
278  $actions->setListTitle($this->lng->txt('actions'));
279 
280  if (!$this->confirmdelete) {
281  $this->tpl->setCurrentBlock('checkbox');
282  $this->tpl->setVariable('CB_QUESTION_ID', $data["question_id"]);
283  $this->tpl->parseCurrentBlock();
284 
285  if ($data["complete"] == 0) {
286  $this->tpl->setCurrentBlock("qpl_warning");
287  $this->tpl->setVariable("IMAGE_WARNING", ilUtil::getImagePath("icon_alert.svg"));
288  $this->tpl->setVariable("ALT_WARNING", $this->lng->txt("warning_question_not_complete"));
289  $this->tpl->setVariable("TITLE_WARNING", $this->lng->txt("warning_question_not_complete"));
290  $this->tpl->parseCurrentBlock();
291  } else {
292  $points = $data["points"];
293  $this->totalWorkingTime = assQuestion::sumTimesInISO8601FormatH_i_s_Extended($this->totalWorkingTime, $data['working_time']);
294  }
295  $this->totalPoints += $points;
296 
297  foreach ($this->getSelectedColumns() as $c) {
298  if (strcmp($c, 'points') == 0) {
299  $this->tpl->setCurrentBlock('points');
300  $this->tpl->setVariable("QUESTION_POINTS", $points);
301  $this->tpl->parseCurrentBlock();
302  }
303  if (strcmp($c, 'statistics') == 0) {
304  $this->tpl->setCurrentBlock('statistics');
305  $this->tpl->setVariable("LINK_ASSESSMENT", $this->ctrl->getLinkTargetByClass($class, "assessment"));
306  $this->tpl->setVariable("TXT_ASSESSMENT", $this->lng->txt("statistics"));
307  include_once "./Services/Utilities/classes/class.ilUtil.php";
308  $this->tpl->setVariable("IMG_ASSESSMENT", ilUtil::getImagePath("assessment.gif", "Modules/TestQuestionPool"));
309  $this->tpl->parseCurrentBlock();
310  }
311  if (strcmp($c, 'author') == 0) {
312  $this->tpl->setCurrentBlock('author');
313  $this->tpl->setVariable("QUESTION_AUTHOR", $data["author"]);
314  $this->tpl->parseCurrentBlock();
315  }
316  if (strcmp($c, 'created') == 0) {
317  $this->tpl->setCurrentBlock('created');
318  $this->tpl->setVariable('QUESTION_CREATED', ilDatePresentation::formatDate(new ilDateTime($data['created'], IL_CAL_UNIX)));
319  $this->tpl->parseCurrentBlock();
320  }
321  if (strcmp($c, 'tstamp') == 0) {
322  $this->tpl->setCurrentBlock('updated');
323  $this->tpl->setVariable('QUESTION_UPDATED', ilDatePresentation::formatDate(new ilDateTime($data['tstamp'], IL_CAL_UNIX)));
324  $this->tpl->parseCurrentBlock();
325  }
326  if (strcmp($c, 'working_time') == 0) {
327  $this->tpl->setCurrentBlock('working_time');
328  $this->tpl->setVariable('WORKING_TIME', $data["working_time"]);
329  $this->tpl->parseCurrentBlock();
330  }
331  }
332 
333  $actions->addItem($this->lng->txt('preview'), '', $this->ctrl->getLinkTargetByClass('ilAssQuestionPreviewGUI', ilAssQuestionPreviewGUI::CMD_SHOW));
334  if ($this->getEditable()) {
335  $editHref = $this->ctrl->getLinkTargetByClass($data['type_tag'] . 'GUI', 'editQuestion');
336  $actions->addItem($this->lng->txt('edit_question'), '', $editHref);
337 
338  $editPageHref = $this->ctrl->getLinkTargetByClass('ilAssQuestionPageGUI', 'edit');
339  $actions->addItem($this->lng->txt('edit_page'), '', $editPageHref);
340  }
341 
342  if ($this->getWriteAccess()) {
343  $this->ctrl->setParameter($this->parent_obj, 'q_id', $data['question_id']);
344  $moveHref = $this->ctrl->getLinkTarget($this->parent_obj, 'move');
345  $this->ctrl->setParameter($this->parent_obj, 'q_id', null);
346  $actions->addItem($this->lng->txt('move'), '', $moveHref);
347 
348  $this->ctrl->setParameter($this->parent_obj, 'q_id', $data['question_id']);
349  $copyHref = $this->ctrl->getLinkTarget($this->parent_obj, 'copy');
350  $this->ctrl->setParameter($this->parent_obj, 'q_id', null);
351  $actions->addItem($this->lng->txt('copy'), '', $copyHref);
352 
353  $this->ctrl->setParameter($this->parent_obj, 'q_id', $data['question_id']);
354  $deleteHref = $this->ctrl->getLinkTarget($this->parent_obj, 'deleteQuestions');
355  $this->ctrl->setParameter($this->parent_obj, 'q_id', null);
356  $actions->addItem($this->lng->txt('delete'), '', $deleteHref);
357  }
358 
359  if ($this->getEditable()) {
360  require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionFeedbackEditingGUI.php';
361  $this->ctrl->setParameterByClass('ilAssQuestionFeedbackEditingGUI', 'q_id', $data['question_id']);
362  $feedbackHref = $this->ctrl->getLinkTargetByClass('ilAssQuestionFeedbackEditingGUI', ilAssQuestionFeedbackEditingGUI::CMD_SHOW);
363  $this->ctrl->setParameterByClass('ilAssQuestionFeedbackEditingGUI', 'q_id', null);
364  $actions->addItem($this->lng->txt('tst_feedback'), '', $feedbackHref);
365 
366  $this->ctrl->setParameterByClass('ilAssQuestionHintsGUI', 'q_id', $data['question_id']);
367  $hintsHref = $this->ctrl->getLinkTargetByClass('ilAssQuestionHintsGUI', ilAssQuestionHintsGUI::CMD_SHOW_LIST);
368  $this->ctrl->setParameterByClass('ilAssQuestionHintsGUI', 'q_id', null);
369  $actions->addItem($this->lng->txt('tst_question_hints_tab'), '', $hintsHref);
370  }
371  } else {
372  $this->tpl->setCurrentBlock('hidden');
373  $this->tpl->setVariable('HIDDEN_QUESTION_ID', $data["question_id"]);
374  $this->tpl->parseCurrentBlock();
375  }
376 
377  foreach ($this->getSelectedColumns() as $c) {
378  if (strcmp($c, 'description') == 0) {
379  $this->tpl->setCurrentBlock('description');
380  $this->tpl->setVariable("QUESTION_COMMENT", (strlen($data["description"])) ? $data["description"] : "&nbsp;");
381  $this->tpl->parseCurrentBlock();
382  }
383  if (strcmp($c, 'type') == 0) {
384  $this->tpl->setCurrentBlock('type');
385  $this->tpl->setVariable("QUESTION_TYPE", assQuestion::_getQuestionTypeName($data["type_tag"]));
386  $this->tpl->parseCurrentBlock();
387  }
388  }
389  $this->tpl->setVariable('QUESTION_ID', $data["question_id"]);
390  if (!$this->confirmdelete) {
391  $this->tpl->setVariable('QUESTION_HREF_LINKED', $this->ctrl->getLinkTargetByClass('ilAssQuestionPreviewGUI', ilAssQuestionPreviewGUI::CMD_SHOW));
392  $this->tpl->setVariable('QUESTION_TITLE_LINKED', $data['title']);
393  $this->tpl->setVariable('ACTIONS', $actions->getHTML());
394  } else {
395  $this->tpl->setVariable('QUESTION_ID_UNLINKED', $data['question_id']);
396  $this->tpl->setVariable('QUESTION_TITLE_UNLINKED', $data['title']);
397  }
398  }
399 
400  public function setEditable($value)
401  {
402  $this->editable = $value;
403  }
404 
405  public function getEditable()
406  {
407  return $this->editable;
408  }
409 
410  public function setWriteAccess($value)
411  {
412  $this->writeAccess = $value;
413  }
414 
415  public function getWriteAccess()
416  {
417  return $this->writeAccess;
418  }
419 
424  public function numericOrdering($column)
425  {
426  if (in_array($column, array('points', 'created', 'tstamp'))) {
427  return true;
428  }
429 
430  return false;
431  }
432 }
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
static sumTimesInISO8601FormatH_i_s_Extended($time1, $time2)
Select taxonomy nodes input GUI.
This class represents a selection list property in a property form.
setStyle($a_element, $a_style)
static _getGUIClassNameForId($a_q_id)
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false)
Format a date public.
static _getQuestionTypeName($type_tag)
Return the translation for a given question type tag.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
static _getQuestionTypes($all_tags=false, $fixOrder=false)
const IL_CAL_UNIX
const CMD_SHOW_LIST
command constants
setId($a_val)
Set id.
global $ilCtrl
Definition: ilias.php:18
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
Class ilTable2GUI.
$column
Definition: 39dropdown.php:62
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
addMultiCommand($a_cmd, $a_text)
Add Command button.
enable($a_module_name)
enables particular modules of table
This class represents a text property in a property form.
Date and time handling
$ilUser
Definition: imgupload.php:18
getSelectedColumns()
Get selected columns.
setMaxLength($a_maxlength)
Set Max Length.
__construct($a_parent_obj, $a_parent_cmd, $a_write_access=false, $confirmdelete=false, $taxIds=array())
Constructor.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
User interface class for advanced drop-down selection lists.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
disable($a_module_name)
diesables particular modules of table
setFormName($a_formname="")
Set Form name.
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.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
Set thin black border outline around column
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
$key
Definition: croninfo.php:18
$cols
Definition: xhr_table.php:11
if(!isset($_REQUEST['ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
setFilterCommand($a_val, $a_caption=null)
Set filter command.