ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilTestExpressPageObjectGUI.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 "./Modules/TestQuestionPool/classes/class.ilAssQuestionPageGUI.php";
5include_once 'Modules/Test/classes/class.ilTestExpressPage.php';
6
25{
26 public function nextQuestion()
27 {
28 $obj = new ilObjTest($_REQUEST['ref_id']);
29 $questions = array_keys($obj->getQuestionTitlesAndIndexes());
30
31 $pos = array_search($_REQUEST['q_id'], $questions);
32
33 if ($pos !== false) {
34 $next = $questions[$pos + 1];
35 } else {
36 $next = $questions[0];
37 }
38
39 $this->ctrl->setParameter($this, 'q_id', $next);
40 $link = $this->ctrl->getLinkTarget($this, 'edit', '', '', false);
41
42 ilUtil::redirect($link);
43 }
44
45 public function prevQuestion()
46 {
47 $obj = new ilObjTest($_REQUEST['ref_id']);
48 $questions = array_keys($obj->getQuestionTitlesAndIndexes());
49
50 $pos = array_search($_REQUEST['q_id'], $questions);
51
52 if ($pos !== false) {
53 $next = $questions[$pos - 1];
54 } else {
55 $next = $questions[0];
56 }
57
58 $this->ctrl->setParameter($this, 'q_id', $next);
59 $link = $this->ctrl->getLinkTarget($this, 'edit', '', '', false);
60
61 ilUtil::redirect($link);
62 }
63
64 public function __construct($a_id = 0, $a_old_nr = 0)
65 {
66 parent::__construct($a_id, $a_old_nr);
67 }
68
69 public function executeCommand()
70 {
71 global $DIC; /* @var ILIAS\DI\Container $DIC */
72 $ilCtrl = $DIC['ilCtrl'];
73 $ilTabs = $DIC['ilTabs'];
74 $ilUser = $DIC['ilUser'];
75 $lng = $DIC['lng'];
76
77 $next_class = $this->ctrl->getNextClass($this);
78 $cmd = $this->ctrl->getCmd();
79
80 switch ($next_class) {
81 case 'ilobjquestionpoolgui':
82
83 $nodeParts = explode(':', $_GET['cmdNode']);
84
85 $params = array(
86 'ref_id' => $_GET['ref_id'],
87 'calling_test' => $_GET['ref_id'],
88 'q_id' => $_GET['q_id'],
89 'cmd' => $_GET['cmd'],
90 'cmdClass' => $_GET['cmdClass'],
91 'baseClass' => 'ilObjQuestionPoolGUI',
92 'test_express_mode' => '1'
93 );
94
97 '?' . http_build_query($params, null, '&'),
98 'cmdNode=' . ($nodeParts[count($nodeParts) - 2] . ':' . $nodeParts[count($nodeParts) - 1])
99 )
100 );
101
102 break;
103
104 case "ilpageeditorgui":
105
106 if (!$this->getEnableEditing()) {
107 ilUtil::sendFailure($lng->txt("permission_denied"), true);
108 $ilCtrl->redirect($this, "preview");
109 }
110
111 $page_editor = new ilPageEditorGUI($this->getPageObject(), $this);
112 $page_editor->setLocator($this->locator);
113 $page_editor->setHeader($this->getHeader());
114 $page_editor->setPageBackTitle($this->page_back_title);
115 $page_editor->setIntLinkReturn($this->int_link_return);
116
117 $this->ctrl->saveParameterByClass('ilpageeditorgui', 'q_mode');
118
119 $ret = $this->ctrl->forwardCommand($page_editor);
120 if ($ret != "") {
121 $this->tpl->setContent($ret);
122 }
123 break;
124
125 case '':
126 case 'iltestexpresspageobjectgui':
127
128 include_once 'Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
129
130 if ($cmd == 'view') {
131 $cmd = 'showPage';
132 $ilCtrl->setCmd($cmd);
133 }
134
135 $q_gui = assQuestionGUI::_getQuestionGUI('', (int) $_REQUEST["q_id"]);
136
137 if ($q_gui->object) {
138 $obj = ilObjectFactory::getInstanceByRefId((int) $_REQUEST['ref_id']);
139 $q_gui->object->setObjId($obj->getId());
140 }
141
142 $cmds = array(
143 'handleToolbarCommand',
144 'addQuestion',
145 'questions',
146 'insertQuestions',
147 'browseForQuestions',
148 'filterAvailableQuestions',
149 'resetfilterAvailableQuestions'
150 );
151
152 if (in_array($cmd, $cmds)) {
153 return $this->$cmd();
154 } elseif ($q_gui->object) {
155 $total = $this->test_object->evalTotalPersons();
156
158
159 if ($total != 0) {
160 $link = $DIC->ui()->factory()->link()->standard(
161 $DIC->language()->txt("test_has_datasets_warning_page_view_link"),
162 $DIC->ctrl()->getLinkTargetByClass(array('ilTestResultsGUI', 'ilParticipantsTestResultsGUI'))
163 );
164
165 $message = $DIC->language()->txt("test_has_datasets_warning_page_view");
166
167 $msgBox = $DIC->ui()->factory()->messageBox()->info($message)->withLinks(array($link));
168
169 $DIC->ui()->mainTemplate()->setCurrentBlock('mess');
170 $DIC->ui()->mainTemplate()->setVariable(
171 'MESSAGE',
172 $DIC->ui()->renderer()->render($msgBox)
173 );
174 $DIC->ui()->mainTemplate()->parseCurrentBlock();
175 }
176
177 if ((in_array($cmd, array('view', 'showPage')) || $cmd == 'edit') && $this->test_object->evalTotalPersons()) {
178 return $this->showPage();
179 }
180
181 return parent::executeCommand();
182 }
183
184 break;
185
186 default:
188
189 if (!$_GET['q_id']) {
190 $q_gui = $this->addPageOfQuestions(preg_replace('/(.*?)gui/i', '$1', $_GET['sel_question_types']));
191 $q_gui->setQuestionTabs();
192
193 $this->ctrl->forwardCommand($q_gui);
194 break;
195 }
196
197 $this->ctrl->setReturn($this, "questions");
198
199 require_once 'Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
200 $q_gui = assQuestionGUI::_getQuestionGUI($type, (int) $_GET['q_id']);
201 if ($q_gui->object) {
203 $q_gui->object->setObjId($obj->getId());
204 }
205
206 $this->ctrl->saveParameterByClass('ilpageeditorgui', 'q_id');
207 $this->ctrl->saveParameterByClass('ilpageeditorgui', 'q_mode');
208
209 $q_gui->setQuestionTabs();
210 $this->ctrl->forwardCommand($q_gui);
211 break;
212 }
213 }
214
215 public function addPageOfQuestions($type = '')
216 {
217 global $DIC;
218 $ilCtrl = $DIC['ilCtrl'];
219
220 if (!$type) {
221 $qtype = $_REQUEST['qtype'];
222 $pool = new ilObjQuestionPool();
224 }
225
226 $this->ctrl->setReturn($this, "questions");
227
228 include_once "./Modules/TestQuestionPool/classes/class.assQuestionGUI.php";
230
232
233 $q_gui->object->setObjId($obj->getId());
234
235 return $q_gui;
236 }
237
238 public function handleToolbarCommand()
239 {
240 global $DIC;
241 $ilCtrl = $DIC['ilCtrl'];
242
243 include_once "./Modules/TestQuestionPool/classes/class.assQuestionGUI.php";
244
245 if ($_REQUEST['qtype']) {
246 include_once 'Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php';
247 $questionType = ilObjQuestionPool::getQuestionTypeByTypeId($_REQUEST['qtype']);
248 } elseif ($_REQUEST['sel_question_types']) {
249 $questionType = $_REQUEST['sel_question_types'];
250 }
251
252 include_once 'Modules/Test/classes/class.ilObjAssessmentFolder.php';
254 $addContEditMode = $_REQUEST['add_quest_cont_edit_mode'];
255 } else {
257 }
258
259 $q_gui = &assQuestionGUI::_getQuestionGUI($questionType);
260
261 $q_gui->object->setObjId(ilObject::_lookupObjectId($_GET['ref_id']));
262 $q_gui->object->setAdditionalContentEditingMode($addContEditMode);
263
264 $q_gui->object->createNewQuestion();
265
266 $previousQuestionId = $_REQUEST['position'];
267
268 switch ($_REQUEST['usage']) {
269 case 3: // existing pool
270
271 $ilCtrl->setParameterByClass('ilobjtestgui', 'sel_qpl', $_REQUEST['sel_qpl']);
272 $ilCtrl->setParameterByClass('ilobjtestgui', 'sel_question_types', $questionType);
273 $ilCtrl->setParameterByClass('ilobjtestgui', 'q_id', $q_gui->object->getId());
274 $ilCtrl->setParameterByClass('ilobjtestgui', 'prev_qid', $previousQuestionId);
275
276 if ($_REQUEST['test_express_mode']) {
277 $ilCtrl->setParameterByClass('ilobjtestgui', 'test_express_mode', 1);
278 }
279
280 if (isset($_REQUEST['add_quest_cont_edit_mode'])) {
281 $ilCtrl->setParameterByClass(
282 'ilobjtestgui',
283 'add_quest_cont_edit_mode',
284 $_REQUEST['add_quest_cont_edit_mode']
285 );
286 }
287
288 $ilCtrl->setParameterByClass('ilobjtestgui', 'usage', 3);
289 $ilCtrl->setParameterByClass('ilobjtestgui', 'calling_test', $this->test_object->getId());
290
291 $link = $ilCtrl->getLinkTargetByClass('ilobjtestgui', 'executeCreateQuestion', false, false, false);
292
293 ilUtil::redirect($link);
294
295 break;
296
297 case 2: // new pool
298
299 $ilCtrl->setParameterByClass('ilobjtestgui', 'txt_qpl', $_REQUEST['txt_qpl']);
300 $ilCtrl->setParameterByClass('ilobjtestgui', 'sel_question_types', $questionType);
301 $ilCtrl->setParameterByClass('ilobjtestgui', 'q_id', $q_gui->object->getId());
302 $ilCtrl->setParameterByClass('ilobjtestgui', 'prev_qid', $previousQuestionId);
303
304 if ($_REQUEST['test_express_mode']) {
305 $ilCtrl->setParameterByClass('ilobjtestgui', 'test_express_mode', 1);
306 }
307
308 if (isset($_REQUEST['add_quest_cont_edit_mode'])) {
309 $ilCtrl->setParameterByClass(
310 'ilobjtestgui',
311 'add_quest_cont_edit_mode',
312 $_REQUEST['add_quest_cont_edit_mode']
313 );
314 }
315
316 $ilCtrl->setParameterByClass('ilobjtestgui', 'usage', 2);
317 $ilCtrl->setParameterByClass('ilobjtestgui', 'calling_test', $this->test_object->getId());
318
319 $link = $ilCtrl->getLinkTargetByClass('ilobjtestgui', 'executeCreateQuestion', false, false, false);
320 ilUtil::redirect($link);
321
322 break;
323
324 case 1: // no pool
325 default:
326
327 $this->redirectToQuestionEditPage($questionType, $q_gui->object->getId(), $previousQuestionId);
328
329 break;
330 }
331 }
332
333 public function addQuestion()
334 {
335 global $DIC;
336 $lng = $DIC['lng'];
337 $ilCtrl = $DIC['ilCtrl'];
338 $tpl = $DIC['tpl'];
339 global $DIC; /* @var \ILIAS\DI\Container $DIC */
340 $ilHelp = $DIC['ilHelp']; /* @var ilHelpGUI $ilHelp */
341
342 $subScreenId = array('createQuestion');
343
344 include_once "Services/Form/classes/class.ilPropertyFormGUI.php";
345
346 $ilCtrl->setParameter($this, 'qtype', $_REQUEST['qtype']);
347
348 $form = new ilPropertyFormGUI();
349
350 $ilCtrl->setParameter($this, 'test_express_mode', 1);
351
352 $form->setFormAction($ilCtrl->getFormAction($this, "handleToolbarCommand"));
353 $form->setTitle($lng->txt("ass_create_question"));
354 include_once 'Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php';
355
356 $pool = new ilObjQuestionPool();
357 $questionTypes = $pool->getQuestionTypes(false, true, false);
358 $options = array();
359
360 // question type
361 foreach ($questionTypes as $label => $data) {
362 $options[$data['question_type_id']] = $label;
363 }
364
365 include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
366 $si = new ilSelectInputGUI($lng->txt("question_type"), "qtype");
367 $si->setOptions($options);
368 $form->addItem($si, true);
369
370 // position
371 $questions = $this->test_object->getQuestionTitlesAndIndexes();
372 if ($questions) {
373 $si = new ilSelectInputGUI($lng->txt("position"), "position");
374 $options = array('0' => $lng->txt('first'));
375 foreach ($questions as $key => $title) {
376 $options[$key] = $lng->txt('behind') . ' ' . $title . ' [' . $this->lng->txt('question_id_short') . ': ' . $key . ']';
377 }
378 $si->setOptions($options);
379 $si->setValue($_REQUEST['q_id']);
380 $form->addItem($si, true);
381 }
382
383 // content editing mode
385 $subScreenId[] = 'editMode';
386
387 $ri = new ilRadioGroupInputGUI($lng->txt("tst_add_quest_cont_edit_mode"), "add_quest_cont_edit_mode");
388
389 $option_ipe = new ilRadioOption(
390 $lng->txt('tst_add_quest_cont_edit_mode_IPE'),
392 );
393 $option_ipe->setInfo($lng->txt('tst_add_quest_cont_edit_mode_IPE_info'));
394 $ri->addOption($option_ipe);
395
396 $option_rte = new ilRadioOption(
397 $lng->txt('tst_add_quest_cont_edit_mode_RTE'),
399 );
400 $option_rte->setInfo($lng->txt('tst_add_quest_cont_edit_mode_RTE_info'));
401 $ri->addOption($option_rte);
402
404
405 $form->addItem($ri, true);
406 } else {
407 $hi = new ilHiddenInputGUI("question_content_editing_type");
409 $form->addItem($hi, true);
410 }
411
412 if ($this->test_object->getPoolUsage()) {
413 $subScreenId[] = 'poolSelect';
414
415 // use pool
416 $usage = new ilRadioGroupInputGUI($this->lng->txt("assessment_pool_selection"), "usage");
417 $usage->setRequired(true);
418 $no_pool = new ilRadioOption($this->lng->txt("assessment_no_pool"), 1);
419 $usage->addOption($no_pool);
420 $existing_pool = new ilRadioOption($this->lng->txt("assessment_existing_pool"), 3);
421 $usage->addOption($existing_pool);
422 $new_pool = new ilRadioOption($this->lng->txt("assessment_new_pool"), 2);
423 $usage->addOption($new_pool);
424 $form->addItem($usage);
425
426 $usage->setValue(1);
427
428 $questionpools = ilObjQuestionPool::_getAvailableQuestionpools(false, false, true, false, false, "write");
429 $pools_data = array();
430 foreach ($questionpools as $key => $p) {
431 $pools_data[$key] = $p['title'];
432 }
433 $pools = new ilSelectInputGUI($this->lng->txt("select_questionpool"), "sel_qpl");
434 $pools->setOptions($pools_data);
435 $existing_pool->addSubItem($pools);
436
437 $name = new ilTextInputGUI($this->lng->txt("name"), "txt_qpl");
438 $name->setSize(50);
439 $name->setMaxLength(50);
440 $new_pool->addSubItem($name);
441 }
442
443 $form->addCommandButton("handleToolbarCommand", $lng->txt("create"));
444 $form->addCommandButton("questions", $lng->txt("cancel"));
445
446 $ilHelp->setSubScreenId(implode('_', $subScreenId));
447
448 return $form->getHTML();
449 }
450
451 public function questions()
452 {
453 global $DIC;
454 $ilCtrl = $DIC['ilCtrl'];
455
456 $ilCtrl->saveParameterByClass('ilobjtestgui', 'q_id');
457
458 $ilCtrl->redirectByClass('ilobjtestgui', 'showPage');
459 }
460
461 private function redirectToQuestionEditPage($questionType, $qid, $prev_qid)
462 {
463 $cmdClass = $questionType . 'GUI';
464
465 $this->ctrl->setParameterByClass($cmdClass, 'ref_id', $_GET['ref_id']);
466 $this->ctrl->setParameterByClass($cmdClass, 'sel_question_types', $questionType);
467 $this->ctrl->setParameterByClass($cmdClass, 'test_ref_id', $_GET['ref_id']);
468 $this->ctrl->setParameterByClass($cmdClass, 'calling_test', $_GET['ref_id']);
469 $this->ctrl->setParameterByClass($cmdClass, 'q_id', $qid);
470 $this->ctrl->setParameterByClass($cmdClass, 'prev_qid', $prev_qid);
471
472 if ($_REQUEST['test_express_mode']) {
473 $this->ctrl->setParameterByClass($cmdClass, 'test_express_mode', 1);
474 }
475
476 $this->ctrl->redirectByClass(
477 array('ilRepositoryGUI', 'ilObjTestGUI', $questionType . "GUI"),
478 'editQuestion'
479 );
480 }
481
482 private function redirectToQuestionPoolSelectionPage($questionType, $qid, $prev_qid)
483 {
484 $this->ctrl->setParameterByClass('ilObjTestGUI', 'ref_id', $_REQUEST['ref_id']);
485 $this->ctrl->setParameterByClass('ilObjTestGUI', 'q_id', $qid);
486 $this->ctrl->setParameterByClass('ilObjTestGUI', 'sel_question_types', $questionType);
487 $this->ctrl->setParameterByClass('ilObjTestGUI', 'prev_qid', $prev_qid);
488 $redir = $this->ctrl->getLinkTargetByClass('ilObjTestGUI', 'createQuestion', '', false, false);
489
490 ilUtil::redirect($redir);
491 }
492
493 public function insertQuestions()
494 {
495 $selected_array = (is_array($_POST['q_id'])) ? $_POST['q_id'] : array();
496 if (!count($selected_array)) {
497 ilUtil::sendInfo($this->lng->txt("tst_insert_missing_question"), true);
498 $this->ctrl->redirect($this, "browseForQuestions");
499 } else {
500 include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
501 $manscoring = false;
502
503 global $DIC;
504 $tree = $DIC['tree'];
505 $ilDB = $DIC['ilDB'];
506 $ilPluginAdmin = $DIC['ilPluginAdmin'];
507
508 require_once 'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
509 $testQuestionSetConfigFactory = new ilTestQuestionSetConfigFactory($tree, $ilDB, $ilPluginAdmin, $this->test_object);
510 $testQuestionSetConfig = $testQuestionSetConfigFactory->getQuestionSetConfig();
511
512 foreach ($selected_array as $key => $value) {
513 $last_question_id = $this->test_object->insertQuestion($testQuestionSetConfig, $value);
514
515 if (!$manscoring) {
516 $manscoring = $manscoring | assQuestion::_needsManualScoring($value);
517 }
518 }
519 $this->test_object->saveCompleteStatus($testQuestionSetConfig);
520 if ($manscoring) {
521 ilUtil::sendInfo($this->lng->txt("manscoring_hint"), true);
522 } else {
523 ilUtil::sendSuccess($this->lng->txt("tst_questions_inserted"), true);
524 }
525
526 $this->ctrl->setParameter($this, 'q_id', $last_question_id);
527 $this->ctrl->redirect($this, "showPage");
528 return;
529 }
530 }
531}
$total
Definition: Utf8Test.php:87
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
static _getQuestionGUI($question_type, $question_id=-1)
Creates a question gui representation and returns the alias to the question gui note: please do not u...
const ADDITIONAL_CONTENT_EDITING_MODE_RTE
constant for additional content editing mode "default"
const ADDITIONAL_CONTENT_EDITING_MODE_IPE
constant for additional content editing mode "pageobject"
static _needsManualScoring($question_id)
Question page GUI class.
showPage()
display content of page
This class represents a hidden form property in a property form.
static isAdditionalQuestionContentEditingModePageObjectEnabled()
returns the fact wether content editing with ilias page editor is enabled for questions or not
static getQuestionTypeByTypeId($type_id)
static _getAvailableQuestionpools($use_object_id=false, $equal_points=false, $could_be_offline=false, $showPath=false, $with_questioncount=false, $permission="read", $usr_id="")
Returns the available question pools for the active user.
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
static _lookupObjectId($a_ref_id)
lookup object id
Page Editor GUI class.
setOutputMode($a_mode=self::PRESENTATION)
Set Output Mode.
getPageObject()
Get Page Object.
getEnableEditing()
Get Enable Editing.
This class represents a property form user interface.
This class represents a property in a property form.
This class represents an option in a radio group.
This class represents a selection list property in a property form.
@ilCtrl_Calls ilTestExpressPageObjectGUI: assMultipleChoiceGUI, assClozeTestGUI, assMatchingQuestionG...
__construct($a_id=0, $a_old_nr=0)
Constructor.
redirectToQuestionPoolSelectionPage($questionType, $qid, $prev_qid)
redirectToQuestionEditPage($questionType, $qid, $prev_qid)
This class represents a text property in a property form.
static appendUrlParameterString($a_url, $a_par, $xml_style=false)
append URL parameter string ("par1=value1&par2=value2...") to given URL string
static redirect($a_script)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
global $DIC
Definition: goto.php:24
$ilUser
Definition: imgupload.php:18
if($format !==null) $name
Definition: metadata.php:230
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$ret
Definition: parser.php:6
$type
global $ilDB
$data
Definition: storeScorm.php:23
$message
Definition: xapiexit.php:14