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
4include_once('./Services/Table/classes/class.ilTable2GUI.php');
5require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionPreviewGUI.php';
6require_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}
$column
Definition: 39dropdown.php:62
if(!isset( $_REQUEST[ 'ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
static _getGUIClassNameForId($a_q_id)
static sumTimesInISO8601FormatH_i_s_Extended($time1, $time2)
static _getQuestionTypeName($type_tag)
Return the translation for a given question type tag.
User interface class for advanced drop-down selection lists.
const CMD_SHOW_LIST
command constants
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false)
Format a date @access public.
@classDescription Date and time handling
static _getQuestionTypes($all_tags=false, $fixOrder=false)
getSelectableColumns()
Get selectable columns.
__construct($a_parent_obj, $a_parent_cmd, $a_write_access=false, $confirmdelete=false, $taxIds=array())
Constructor.
This class represents a selection list property in a property form.
ILIAS Setting Class.
Class ilTable2GUI.
getSelectedColumns()
Get selected columns.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
addMultiCommand($a_cmd, $a_text)
Add Command button.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
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.
setId($a_val)
Set id.
setFormName($a_formname="")
Set Form name.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setFilterCommand($a_val, $a_caption=null)
Set filter command.
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
disable($a_module_name)
diesables particular modules of table
setStyle($a_element, $a_style)
enable($a_module_name)
enables particular modules of table
Select taxonomy nodes input GUI.
This class represents a text property in a property form.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
$key
Definition: croninfo.php:18
global $ilCtrl
Definition: ilias.php:18
$ilUser
Definition: imgupload.php:18
$cols
Definition: xhr_table.php:11