ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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 $ilCtrl, $ilTabs, $ilUser, $lng;
72
73 $next_class = $this->ctrl->getNextClass($this);
74 $cmd = $this->ctrl->getCmd();
75
76 switch ($next_class) {
77 case 'ilobjquestionpoolgui':
78
79 $nodeParts = explode(':', $_GET['cmdNode']);
80
81 $params = array(
82 'ref_id' => $_GET['ref_id'],
83 'calling_test' => $_GET['ref_id'],
84 'q_id' => $_GET['q_id'],
85 'cmd' => $_GET['cmd'],
86 'cmdClass' => $_GET['cmdClass'],
87 'baseClass' => 'ilObjQuestionPoolGUI',
88 'test_express_mode' => '1'
89 );
90
93 '?' . http_build_query($params, null, '&'),
94 'cmdNode=' . ($nodeParts[count($nodeParts) - 2] . ':' . $nodeParts[count($nodeParts) - 1])
95 )
96 );
97
98 break;
99
100 case "ilpageeditorgui":
101
102 if (!$this->getEnableEditing()) {
103 ilUtil::sendFailure($lng->txt("permission_denied"), true);
104 $ilCtrl->redirect($this, "preview");
105 }
106
107 $page_editor = new ilPageEditorGUI($this->getPageObject(), $this);
108 $page_editor->setLocator($this->locator);
109 $page_editor->setHeader($this->getHeader());
110 $page_editor->setPageBackTitle($this->page_back_title);
111 $page_editor->setIntLinkReturn($this->int_link_return);
112
113 $this->ctrl->saveParameterByClass('ilpageeditorgui', 'q_mode');
114
115 $ret = &$this->ctrl->forwardCommand($page_editor);
116
117 break;
118
119 case '':
120 case 'iltestexpresspageobjectgui':
121
122 include_once 'Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
123
124 if ($cmd == 'view') {
125 $cmd = 'showPage';
126 $ilCtrl->setCmd($cmd);
127 }
128
129 $q_gui = assQuestionGUI::_getQuestionGUI('', (int) $_REQUEST["q_id"]);
130
131 if ($q_gui->object) {
132 $obj = ilObjectFactory::getInstanceByRefId((int) $_REQUEST['ref_id']);
133 $q_gui->object->setObjId($obj->getId());
134 }
135
136 $cmds = array(
137 'handleToolbarCommand',
138 'addQuestion',
139 'questions',
140 'insertQuestions',
141 'browseForQuestions',
142 'filterAvailableQuestions',
143 'resetfilterAvailableQuestions'
144 );
145
146 if (in_array($cmd, $cmds)) {
147 return $this->$cmd();
148 } elseif ($q_gui->object) {
149 $total = $this->test_object->evalTotalPersons();
150
152
153 if ($total != 0) {
154 $link = $ilCtrl->getLinkTargetByClass('ilobjtestgui', "participants");
155 $link = "<a href=\"" . $link . "\">" . $lng->txt("test_has_datasets_warning_page_view_link") . "</a>";
156 ilUtil::sendInfo($lng->txt("test_has_datasets_warning_page_view") . " " . $link);
157 }
158
159 if ((in_array($cmd, array('view', 'showPage')) || $cmd == 'edit') && $this->test_object->evalTotalPersons()) {
160 return $this->showPage();
161 }
162
163 return parent::executeCommand();
164 }
165
166 break;
167
168 default:
170
171 if (!$_GET['q_id']) {
172 $q_gui = $this->addPageOfQuestions(preg_replace('/(.*?)gui/i', '$1', $_GET['sel_question_types']));
173 $q_gui->setQuestionTabs();
174
175 $this->ctrl->forwardCommand($q_gui);
176 break;
177 }
178
179 $this->ctrl->setReturn($this, "questions");
180
181 require_once 'Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
182 $q_gui = assQuestionGUI::_getQuestionGUI($type, (int) $_GET['q_id']);
183 if ($q_gui->object) {
185 $q_gui->object->setObjId($obj->getId());
186 }
187
188 $this->ctrl->saveParameterByClass('ilpageeditorgui', 'q_id');
189 $this->ctrl->saveParameterByClass('ilpageeditorgui', 'q_mode');
190
191 $q_gui->setQuestionTabs();
192 $this->ctrl->forwardCommand($q_gui);
193 break;
194 }
195 }
196
197 public function addPageOfQuestions($type = '')
198 {
199 global $ilCtrl;
200
201 if (!$type) {
202 $qtype = $_REQUEST['qtype'];
203 $pool = new ilObjQuestionPool();
205 }
206
207 $this->ctrl->setReturn($this, "questions");
208
209 include_once "./Modules/TestQuestionPool/classes/class.assQuestionGUI.php";
211
213
214 $q_gui->object->setObjId($obj->getId());
215
216 return $q_gui;
217 }
218
219 public function handleToolbarCommand()
220 {
221 global $ilCtrl;
222
223 include_once "./Modules/TestQuestionPool/classes/class.assQuestionGUI.php";
224
225 if ($_REQUEST['qtype']) {
226 include_once 'Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php';
227 $questionType = ilObjQuestionPool::getQuestionTypeByTypeId($_REQUEST['qtype']);
228 } elseif ($_REQUEST['sel_question_types']) {
229 $questionType = $_REQUEST['sel_question_types'];
230 }
231
232 include_once 'Modules/Test/classes/class.ilObjAssessmentFolder.php';
234 $addContEditMode = $_REQUEST['add_quest_cont_edit_mode'];
235 } else {
237 }
238
239 $q_gui =&assQuestionGUI::_getQuestionGUI($questionType);
240
241 $q_gui->object->setObjId(ilObject::_lookupObjectId($_GET['ref_id']));
242 $q_gui->object->setAdditionalContentEditingMode($addContEditMode);
243
244 $q_gui->object->createNewQuestion();
245
246 $previousQuestionId = $_REQUEST['position'];
247
248 switch ($_REQUEST['usage']) {
249 case 3: // existing pool
250
251 $ilCtrl->setParameterByClass('ilobjtestgui', 'sel_qpl', $_REQUEST['sel_qpl']);
252 $ilCtrl->setParameterByClass('ilobjtestgui', 'sel_question_types', $questionType);
253 $ilCtrl->setParameterByClass('ilobjtestgui', 'q_id', $q_gui->object->getId());
254 $ilCtrl->setParameterByClass('ilobjtestgui', 'prev_qid', $previousQuestionId);
255
256 if ($_REQUEST['test_express_mode']) {
257 $ilCtrl->setParameterByClass('ilobjtestgui', 'test_express_mode', 1);
258 }
259
260 if (isset($_REQUEST['add_quest_cont_edit_mode'])) {
261 $ilCtrl->setParameterByClass(
262 'ilobjtestgui',
263 'add_quest_cont_edit_mode',
264 $_REQUEST['add_quest_cont_edit_mode']
265 );
266 }
267
268 $ilCtrl->setParameterByClass('ilobjtestgui', 'usage', 3);
269 $ilCtrl->setParameterByClass('ilobjtestgui', 'calling_test', $this->test_object->getId());
270
271 $link = $ilCtrl->getLinkTargetByClass('ilobjtestgui', 'executeCreateQuestion', false, false, false);
272
273 ilUtil::redirect($link);
274
275 break;
276
277 case 2: // new pool
278
279 $ilCtrl->setParameterByClass('ilobjtestgui', 'txt_qpl', $_REQUEST['txt_qpl']);
280 $ilCtrl->setParameterByClass('ilobjtestgui', 'sel_question_types', $questionType);
281 $ilCtrl->setParameterByClass('ilobjtestgui', 'q_id', $q_gui->object->getId());
282 $ilCtrl->setParameterByClass('ilobjtestgui', 'prev_qid', $previousQuestionId);
283
284 if ($_REQUEST['test_express_mode']) {
285 $ilCtrl->setParameterByClass('ilobjtestgui', 'test_express_mode', 1);
286 }
287
288 if (isset($_REQUEST['add_quest_cont_edit_mode'])) {
289 $ilCtrl->setParameterByClass(
290 'ilobjtestgui',
291 'add_quest_cont_edit_mode',
292 $_REQUEST['add_quest_cont_edit_mode']
293 );
294 }
295
296 $ilCtrl->setParameterByClass('ilobjtestgui', 'usage', 2);
297 $ilCtrl->setParameterByClass('ilobjtestgui', 'calling_test', $this->test_object->getId());
298
299 $link = $ilCtrl->getLinkTargetByClass('ilobjtestgui', 'executeCreateQuestion', false, false, false);
300 ilUtil::redirect($link);
301
302 break;
303
304 case 1: // no pool
305 default:
306
307 $this->redirectToQuestionEditPage($questionType, $q_gui->object->getId(), $previousQuestionId);
308
309 break;
310 }
311 }
312
313 public function addQuestion()
314 {
315 global $lng, $ilCtrl, $tpl;
316 global $DIC; /* @var \ILIAS\DI\Container $DIC */
317 $ilHelp = $DIC['ilHelp']; /* @var ilHelpGUI $ilHelp */
318
319 $subScreenId = array('createQuestion');
320
321 include_once "Services/Form/classes/class.ilPropertyFormGUI.php";
322
323 $ilCtrl->setParameter($this, 'qtype', $_REQUEST['qtype']);
324
325 $form = new ilPropertyFormGUI();
326
327 $ilCtrl->setParameter($this, 'test_express_mode', 1);
328
329 $form->setFormAction($ilCtrl->getFormAction($this, "handleToolbarCommand"));
330 $form->setTitle($lng->txt("ass_create_question"));
331 include_once 'Modules/TestQuestionPool/classes/class.ilObjQuestionPool.php';
332
333 $pool = new ilObjQuestionPool();
334 $questionTypes = $pool->getQuestionTypes(false, true);
335 $options = array();
336
337 // question type
338 foreach ($questionTypes as $label => $data) {
339 $options[$data['question_type_id']] = $label;
340 }
341
342 include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
343 $si = new ilSelectInputGUI($lng->txt("question_type"), "qtype");
344 $si->setOptions($options);
345 $form->addItem($si, true);
346
347 // position
348 $questions = $this->test_object->getQuestionTitlesAndIndexes();
349 if ($questions) {
350 $si = new ilSelectInputGUI($lng->txt("position"), "position");
351 $options = array('0' => $lng->txt('first'));
352 foreach ($questions as $key => $title) {
353 $options[$key] = $lng->txt('behind') . ' ' . $title . ' [' . $this->lng->txt('question_id_short') . ': ' . $key . ']';
354 }
355 $si->setOptions($options);
356 $si->setValue($_REQUEST['q_id']);
357 $form->addItem($si, true);
358 }
359
360 // content editing mode
362 $subScreenId[] = 'editMode';
363
364 $ri = new ilRadioGroupInputGUI($lng->txt("tst_add_quest_cont_edit_mode"), "add_quest_cont_edit_mode");
365
366 $ri->addOption(new ilRadioOption(
367 $lng->txt('tst_add_quest_cont_edit_mode_default'),
369 ));
370
371 $ri->addOption(new ilRadioOption(
372 $lng->txt('tst_add_quest_cont_edit_mode_page_object'),
374 ));
375
377
378 $form->addItem($ri, true);
379 } else {
380 $hi = new ilHiddenInputGUI("question_content_editing_type");
382 $form->addItem($hi, true);
383 }
384
385 if ($this->test_object->getPoolUsage()) {
386 $subScreenId[] = 'poolSelect';
387
388 // use pool
389 $usage = new ilRadioGroupInputGUI($this->lng->txt("assessment_pool_selection"), "usage");
390 $usage->setRequired(true);
391 $no_pool = new ilRadioOption($this->lng->txt("assessment_no_pool"), 1);
392 $usage->addOption($no_pool);
393 $existing_pool = new ilRadioOption($this->lng->txt("assessment_existing_pool"), 3);
394 $usage->addOption($existing_pool);
395 $new_pool = new ilRadioOption($this->lng->txt("assessment_new_pool"), 2);
396 $usage->addOption($new_pool);
397 $form->addItem($usage);
398
399 $usage->setValue(1);
400
401 $questionpools = ilObjQuestionPool::_getAvailableQuestionpools(false, false, true, false, false, "write");
402 $pools_data = array();
403 foreach ($questionpools as $key => $p) {
404 $pools_data[$key] = $p['title'];
405 }
406 $pools = new ilSelectInputGUI($this->lng->txt("select_questionpool"), "sel_qpl");
407 $pools->setOptions($pools_data);
408 $existing_pool->addSubItem($pools);
409
410 $name = new ilTextInputGUI($this->lng->txt("name"), "txt_qpl");
411 $name->setSize(50);
412 $name->setMaxLength(50);
413 $new_pool->addSubItem($name);
414 }
415
416 $form->addCommandButton("handleToolbarCommand", $lng->txt("create"));
417 $form->addCommandButton("questions", $lng->txt("cancel"));
418
419 $ilHelp->setSubScreenId(implode('_', $subScreenId));
420
421 return $tpl->setContent($form->getHTML());
422 }
423
424 public function questions()
425 {
426 global $ilCtrl;
427
428 $ilCtrl->saveParameterByClass('ilobjtestgui', 'q_id');
429
430 $ilCtrl->redirectByClass('ilobjtestgui', 'showPage');
431 }
432
433 private function redirectToQuestionEditPage($questionType, $qid, $prev_qid)
434 {
435 $cmdClass = $questionType . 'GUI';
436
437 $this->ctrl->setParameterByClass($cmdClass, 'ref_id', $_GET['ref_id']);
438 $this->ctrl->setParameterByClass($cmdClass, 'sel_question_types', $questionType);
439 $this->ctrl->setParameterByClass($cmdClass, 'test_ref_id', $_GET['ref_id']);
440 $this->ctrl->setParameterByClass($cmdClass, 'calling_test', $_GET['ref_id']);
441 $this->ctrl->setParameterByClass($cmdClass, 'q_id', $qid);
442 $this->ctrl->setParameterByClass($cmdClass, 'prev_qid', $prev_qid);
443
444 if ($_REQUEST['test_express_mode']) {
445 $this->ctrl->setParameterByClass($cmdClass, 'test_express_mode', 1);
446 }
447
448 $this->ctrl->redirectByClass(
449 array('ilRepositoryGUI', 'ilObjTestGUI', $questionType . "GUI"),
450 'editQuestion'
451 );
452 }
453
454 private function redirectToQuestionPoolSelectionPage($questionType, $qid, $prev_qid)
455 {
456 $this->ctrl->setParameterByClass('ilObjTestGUI', 'ref_id', $_REQUEST['ref_id']);
457 $this->ctrl->setParameterByClass('ilObjTestGUI', 'q_id', $qid);
458 $this->ctrl->setParameterByClass('ilObjTestGUI', 'sel_question_types', $questionType);
459 $this->ctrl->setParameterByClass('ilObjTestGUI', 'prev_qid', $prev_qid);
460 $redir = $this->ctrl->getLinkTargetByClass('ilObjTestGUI', 'createQuestion', '', false, false);
461
462 ilUtil::redirect($redir);
463 }
464
465 public function insertQuestions()
466 {
467 $selected_array = (is_array($_POST['q_id'])) ? $_POST['q_id'] : array();
468 if (!count($selected_array)) {
469 ilUtil::sendInfo($this->lng->txt("tst_insert_missing_question"), true);
470 $this->ctrl->redirect($this, "browseForQuestions");
471 } else {
472 include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
473 $manscoring = false;
474
475 global $tree, $ilDB, $ilPluginAdmin;
476
477 require_once 'Modules/Test/classes/class.ilTestQuestionSetConfigFactory.php';
478 $testQuestionSetConfigFactory = new ilTestQuestionSetConfigFactory($tree, $ilDB, $ilPluginAdmin, $this->test_object);
479 $testQuestionSetConfig = $testQuestionSetConfigFactory->getQuestionSetConfig();
480
481 foreach ($selected_array as $key => $value) {
482 $last_question_id = $this->test_object->insertQuestion($testQuestionSetConfig, $value);
483
484 if (!$manscoring) {
485 $manscoring = $manscoring | assQuestion::_needsManualScoring($value);
486 }
487 }
488 $this->test_object->saveCompleteStatus($testQuestionSetConfig);
489 if ($manscoring) {
490 ilUtil::sendInfo($this->lng->txt("manscoring_hint"), true);
491 } else {
492 ilUtil::sendSuccess($this->lng->txt("tst_questions_inserted"), true);
493 }
494
495 $this->ctrl->setParameter($this, 'q_id', $last_question_id);
496 $this->ctrl->redirect($this, "showPage");
497 return;
498 }
499 }
500}
$total
Definition: Utf8Test.php:87
if(!isset( $_REQUEST[ 'ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
const IL_PAGE_EDIT
const IL_PAGE_PREVIEW
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_DEFAULT
constant for additional content editing mode "default"
static _needsManualScoring($question_id)
const ADDITIONAL_CONTENT_EDITING_MODE_PAGE_OBJECT
constant for additional content editing mode "pageobject"
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.
getPageObject()
Get Page Object.
setOutputMode($a_mode=IL_PAGE_PRESENTATION)
Set Output Mode.
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 sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
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.
$key
Definition: croninfo.php:18
global $ilCtrl
Definition: ilias.php:18
if($format !==null) $name
Definition: metadata.php:146
$ret
Definition: parser.php:6
$type
if(isset($_POST['submit'])) $form
global $DIC
Definition: saml.php:7
global $ilDB
$ilUser
Definition: imgupload.php:18
$params
Definition: disable.php:11