ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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';
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
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 {
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}
$_SESSION["AccountId"]
const IL_CAL_UNIX
static sumTimesInISO8601FormatH_i_s_Extended($time1, $time2)
static _getQuestionTypeName($type_tag)
Return the translation for a given question type tag.
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
& _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.
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.
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.
setFormName($a_formname)
Set Form name.
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.
setId($a_val)
Set id.
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)
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:40
if(!is_array($argv)) $options
global $ilUser
Definition: imgupload.php:15