ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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 
18 {
19  protected $editable = true;
20  protected $writeAccess = false;
21  protected $totalPoints = 0;
22  protected $totalWorkingTime = '00:00:00';
23  protected $confirmdelete;
24 
25  protected $taxIds = array();
26 
34  public function __construct($a_parent_obj, $a_parent_cmd, $a_write_access = false, $confirmdelete = false, $taxIds = array())
35  {
36  // Bugfix: #0019539
37  if($confirmdelete)
38  {
39  $this->setId("qpl_confirm_del_". $a_parent_obj->object->getRefId());
40  }
41  else
42  {
43  $this->setId("qpl_qst_brows_" . $a_parent_obj->object->getRefId());
44  }
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 
53  $this->confirmdelete = $confirmdelete;
54  $this->setWriteAccess($a_write_access);
55  $this->taxIds = $taxIds;
56 
57  $qplSetting = new ilSetting("qpl");
58 
59  $this->setFormName('questionbrowser');
60  $this->setStyle('table', 'fullwidth');
61  if (!$confirmdelete)
62  {
63  $this->addColumn('','','1%');
64  $this->addColumn($this->lng->txt("title"),'title', '');
65  $this->addColumn('','', '');
66  $this->addColumn('','', '');
67  foreach ($this->getSelectedColumns() as $c)
68  {
69  if (strcmp($c, 'description') == 0) $this->addColumn($this->lng->txt("description"),'description', '');
70  if (strcmp($c, 'type') == 0) $this->addColumn($this->lng->txt("question_type"),'ttype', '');
71  // According to mantis #12713
72  if (strcmp($c, 'points') == 0) $this->addColumn($this->lng->txt("points"),'points', '', false, 'ilCenterForced');
73  if (strcmp($c, 'statistics') == 0) $this->addColumn($this->lng->txt('statistics'),'', '');
74  if (strcmp($c, 'author') == 0) $this->addColumn($this->lng->txt("author"),'author', '');
75  if (strcmp($c, 'created') == 0) $this->addColumn($this->lng->txt("create_date"),'created', '');
76  if (strcmp($c, 'tstamp') == 0) $this->addColumn($this->lng->txt("last_update"),'tstamp', '');
77  if (strcmp($c, 'working_time') == 0) $this->addColumn($this->lng->txt("working_time"),'working_time', '');
78  }
79  $this->setSelectAllCheckbox('q_id');
80  }
81  else
82  {
83  $this->addColumn($this->lng->txt("title"),'title', '');
84  $this->addColumn('','f','1%');
85  foreach ($this->getSelectedColumns() as $c)
86  {
87  if (strcmp($c, 'description') == 0) $this->addColumn($this->lng->txt("description"),'description', '');
88  if (strcmp($c, 'type') == 0) $this->addColumn($this->lng->txt("question_type"),'ttype', '');
89  }
90  }
91 
92  if ($this->getWriteAccess())
93  {
94  if ($confirmdelete)
95  {
96  $this->addCommandButton('confirmDeleteQuestions', $this->lng->txt('confirm'));
97  $this->addCommandButton('cancelDeleteQuestions', $this->lng->txt('cancel'));
98  }
99  else
100  {
101  $this->addMultiCommand('copy', $this->lng->txt('copy'));
102  $this->addMultiCommand('move', $this->lng->txt('move'));
103  $this->addMultiCommand('exportQuestion', $this->lng->txt('export'));
104  $this->addMultiCommand('deleteQuestions', $this->lng->txt('delete'));
105 
106  $this->addCommandButton('importQuestions', $this->lng->txt('import'));
107 
108  if (array_key_exists("qpl_clipboard", $_SESSION) && count($_SESSION['qpl_clipboard']))
109  {
110  $this->addCommandButton('paste', $this->lng->txt('paste'));
111  }
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  {
125  $this->disable('sort');
126  $this->disable('select_all');
127  }
128  else
129  {
130  $this->enable('sort');
131  $this->enable('header');
132  $this->enable('select_all');
133  $this->setFilterCommand('filterQuestionBrowser');
134  $this->setResetCommand('resetQuestionBrowser');
135  $this->initFilter();
136  }
137 
138  }
139 
141  {
142  global $lng;
143  $cols["description"] = array(
144  "txt" => $lng->txt("description"),
145  "default" => true
146  );
147  $cols["type"] = array(
148  "txt" => $lng->txt("question_type"),
149  "default" => true
150  );
151  if (!$this->confirmdelete)
152  {
153  $cols["points"] = array(
154  "txt" => $lng->txt("points"),
155  "default" => true
156  );
157  $cols["statistics"] = array(
158  "txt" => $lng->txt("statistics"),
159  "default" => true
160  );
161  $cols["author"] = array(
162  "txt" => $lng->txt("author"),
163  "default" => true
164  );
165  $cols["created"] = array(
166  "txt" => $lng->txt("create_date"),
167  "default" => true
168  );
169  $cols["tstamp"] = array(
170  "txt" => $lng->txt("last_update"),
171  "default" => true
172  );
173  $cols["working_time"] = array(
174  "txt" => $lng->txt("working_time"),
175  "default" => true
176  );
177  }
178  return $cols;
179  }
180 
184  function initFilter()
185  {
186  global $lng, $rbacreview, $ilUser;
187 
188  // title
189  include_once("./Services/Form/classes/class.ilTextInputGUI.php");
190  $ti = new ilTextInputGUI($lng->txt("title"), "title");
191  $ti->setMaxLength(64);
192  $ti->setValidationRegexp('/^[^%]+$/is');
193  $ti->setSize(20);
194  $this->addFilterItem($ti);
195  $ti->readFromSession();
196  $this->filter["title"] = $ti->getValue();
197 
198  // description
199  $ti = new ilTextInputGUI($lng->txt("description"), "description");
200  $ti->setMaxLength(64);
201  $ti->setSize(20);
202  $ti->setValidationRegexp('/^[^%]+$/is');
203  $this->addFilterItem($ti);
204  $ti->readFromSession();
205  $this->filter["description"] = $ti->getValue();
206 
207  if (!$this->confirmdelete)
208  {
209  // author
210  $ti = new ilTextInputGUI($lng->txt("author"), "author");
211  $ti->setMaxLength(64);
212  $ti->setSize(20);
213  $ti->setValidationRegexp('/^[^%]+$/is');
214  $this->addFilterItem($ti);
215  $ti->readFromSession();
216  $this->filter["author"] = $ti->getValue();
217  }
218  // questiontype
219  include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
220  include_once("./Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php");
222  $options = array();
223  $options[""] = $lng->txt('filter_all_question_types');
224  foreach ($types as $translation => $row)
225  {
226  $options[$row['type_tag']] = $translation;
227  }
228 
229  $si = new ilSelectInputGUI($this->lng->txt("question_type"), "type");
230  $si->setOptions($options);
231  $this->addFilterItem($si);
232  $si->readFromSession();
233  $this->filter["type"] = $si->getValue();
234 
235  if( $this->parent_obj->object->getShowTaxonomies() )
236  {
237  require_once 'Services/Taxonomy/classes/class.ilTaxSelectInputGUI.php';
238 
239  foreach($this->taxIds as $taxId)
240  {
241  if( $taxId == $this->parent_obj->object->getNavTaxonomyId() )
242  {
243  continue;
244  }
245 
246  $postvar = "tax_$taxId";
247 
248  $inp = new ilTaxSelectInputGUI($taxId, $postvar, true);
249  $this->addFilterItem($inp);
250  $inp->readFromSession();
251  $this->filter[$postvar] = $inp->getValue();
252  }
253  }
254 
255  }
256 
257  function fillHeader()
258  {
259  foreach ($this->column as $key => $column)
260  {
261  if (strcmp($column['text'], $this->lng->txt("points")) == 0)
262  {
263  $this->column[$key]['text'] = $this->lng->txt("points") . "&nbsp;(" . $this->totalPoints . ")";
264  }
265  elseif (strcmp($column['text'], $this->lng->txt("working_time")) == 0)
266  {
267  $this->column[$key]['text'] = $this->lng->txt("working_time") . "&nbsp;(" . $this->totalWorkingTime . ")";
268  }
269  }
270  parent::fillHeader();
271  }
272 
280  public function fillRow($data)
281  {
282  global $ilUser,$ilAccess;
283  include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
284  include_once "./Modules/TestQuestionPool/classes/class.assQuestionGUI.php";
285  $class = strtolower(assQuestionGUI::_getGUIClassNameForId($data["question_id"]));
286  $this->ctrl->setParameterByClass("ilAssQuestionPageGUI", "q_id", $data["question_id"]);
287  $this->ctrl->setParameterByClass("ilAssQuestionPreviewGUI", "q_id", $data["question_id"]);
288  $this->ctrl->setParameterByClass($class, "q_id", $data["question_id"]);
289  $points = 0;
290 
291  if (!$this->confirmdelete)
292  {
293  $this->tpl->setCurrentBlock('checkbox');
294  $this->tpl->setVariable('CB_QUESTION_ID', $data["question_id"]);
295  $this->tpl->parseCurrentBlock();
296 
297  if ($this->getEditable())
298  {
299  //$href = $this->ctrl->getLinkTargetByClass("ilAssQuestionPageGUI", "edit");
300  $href = $this->ctrl->getLinkTargetByClass($data['type_tag'].'GUI', 'editQuestion');
301 
302  $this->tpl->setCurrentBlock("edit_link");
303  $this->tpl->setVariable("TXT_EDIT", $this->lng->txt("edit"));
304  $this->tpl->setVariable("LINK_EDIT", $href);
305  $this->tpl->parseCurrentBlock();
306  }
307  if ($data["complete"] == 0)
308  {
309  $this->tpl->setCurrentBlock("qpl_warning");
310  $this->tpl->setVariable("IMAGE_WARNING", ilUtil::getImagePath("icon_alert.svg"));
311  $this->tpl->setVariable("ALT_WARNING", $this->lng->txt("warning_question_not_complete"));
312  $this->tpl->setVariable("TITLE_WARNING", $this->lng->txt("warning_question_not_complete"));
313  $this->tpl->parseCurrentBlock();
314  }
315  else
316  {
317  $points = $data["points"];
318  $this->totalWorkingTime = assQuestion::sumTimesInISO8601FormatH_i_s_Extended($this->totalWorkingTime,$data['working_time']);
319  }
320  $this->totalPoints += $points;
321 
322  foreach ($this->getSelectedColumns() as $c)
323  {
324  if (strcmp($c, 'points') == 0)
325  {
326  $this->tpl->setCurrentBlock('points');
327  $this->tpl->setVariable("QUESTION_POINTS", $points);
328  $this->tpl->parseCurrentBlock();
329  }
330  if (strcmp($c, 'statistics') == 0)
331  {
332  $this->tpl->setCurrentBlock('statistics');
333  $this->tpl->setVariable("LINK_ASSESSMENT", $this->ctrl->getLinkTargetByClass($class, "assessment"));
334  $this->tpl->setVariable("TXT_ASSESSMENT", $this->lng->txt("statistics"));
335  include_once "./Services/Utilities/classes/class.ilUtil.php";
336  $this->tpl->setVariable("IMG_ASSESSMENT", ilUtil::getImagePath("assessment.gif", "Modules/TestQuestionPool"));
337  $this->tpl->parseCurrentBlock();
338  }
339  if (strcmp($c, 'author') == 0)
340  {
341  $this->tpl->setCurrentBlock('author');
342  $this->tpl->setVariable("QUESTION_AUTHOR", $data["author"]);
343  $this->tpl->parseCurrentBlock();
344  }
345  if(strcmp($c, 'created') == 0)
346  {
347  $this->tpl->setCurrentBlock('created');
348  $this->tpl->setVariable('QUESTION_CREATED', ilDatePresentation::formatDate(new ilDateTime($data['created'], IL_CAL_UNIX)));
349  $this->tpl->parseCurrentBlock();
350  }
351  if(strcmp($c, 'tstamp') == 0)
352  {
353  $this->tpl->setCurrentBlock('updated');
354  $this->tpl->setVariable('QUESTION_UPDATED', ilDatePresentation::formatDate(new ilDateTime($data['tstamp'], IL_CAL_UNIX)));
355  $this->tpl->parseCurrentBlock();
356  }
357  if(strcmp($c, 'working_time') == 0)
358  {
359  $this->tpl->setCurrentBlock('working_time');
360  $this->tpl->setVariable('WORKING_TIME', $data["working_time"]);
361  $this->tpl->parseCurrentBlock();
362  }
363  }
364 
365  $this->tpl->setCurrentBlock('preview');
366  $this->tpl->setVariable("TXT_PREVIEW", $this->lng->txt("preview"));
367  $this->tpl->setVariable("LINK_PREVIEW", $this->ctrl->getLinkTargetByClass('ilAssQuestionPreviewGUI', ilAssQuestionPreviewGUI::CMD_SHOW));
368  $this->tpl->parseCurrentBlock();
369  }
370  else
371  {
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  {
379  if (strcmp($c, 'description') == 0)
380  {
381  $this->tpl->setCurrentBlock('description');
382  $this->tpl->setVariable("QUESTION_COMMENT", (strlen($data["description"])) ? $data["description"] : "&nbsp;");
383  $this->tpl->parseCurrentBlock();
384  }
385  if (strcmp($c, 'type') == 0)
386  {
387  $this->tpl->setCurrentBlock('type');
388  $this->tpl->setVariable("QUESTION_TYPE", assQuestion::_getQuestionTypeName($data["type_tag"]));
389  $this->tpl->parseCurrentBlock();
390  }
391  }
392  $this->tpl->setVariable('QUESTION_ID', $data["question_id"]);
393  $this->tpl->setVariable("QUESTION_TITLE", $data["title"]);
394  }
395 
396  public function setEditable($value)
397  {
398  $this->editable = $value;
399  }
400 
401  public function getEditable()
402  {
403  return $this->editable;
404  }
405 
406  public function setWriteAccess($value)
407  {
408  $this->writeAccess = $value;
409  }
410 
411  public function getWriteAccess()
412  {
413  return $this->writeAccess;
414  }
415 
420  public function numericOrdering($column)
421  {
422  if(in_array($column, array('points', 'created', 'tstamp')))
423  {
424  return true;
425  }
426 
427  return false;
428  }
429 }
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
ILIAS Setting Class.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
static sumTimesInISO8601FormatH_i_s_Extended($time1, $time2)
Select taxonomy nodes input GUI.
$_SESSION["AccountId"]
This class represents a selection list property in a property form.
setStyle($a_element, $a_style)
static _getGUIClassNameForId($a_q_id)
static _getQuestionTypes($all_tags=FALSE, $fixOrder=false)
static _getQuestionTypeName($type_tag)
Return the translation for a given question type tag.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
const IL_CAL_UNIX
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.
if(!is_array($argv)) $options
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.
static formatDate(ilDateTime $date)
Format a date public.
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.
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.
global $lng
Definition: privfeed.php:17
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.
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.
setFilterCommand($a_val, $a_caption=null)
Set filter command.