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 
4 include_once "./Modules/TestQuestionPool/classes/class.ilAssQuestionPageGUI.php";
5 include_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) {
202  $obj = ilObjectFactory::getInstanceByRefId((int) $_GET['ref_id']);
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 }
const ADDITIONAL_CONTENT_EDITING_MODE_IPE
constant for additional content editing mode "pageobject"
This class represents an option in a radio group.
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.
getPageObject()
Get Page Object.
$data
Definition: storeScorm.php:23
This class represents a property form user interface.
$type
$_GET["client_id"]
static _needsManualScoring($question_id)
static getQuestionTypeByTypeId($type_id)
setInfo($a_info)
Set Info.
Question page GUI class.
$total
Definition: Utf8Test.php:87
Page Editor GUI class.
static _lookupObjectId($a_ref_id)
lookup object id
setInfo($a_info)
Set Information Text.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
if($format !==null) $name
Definition: metadata.php:230
This class represents a hidden form 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
This class represents a property in a property form.
setValue($a_value)
Set Value.
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...
getEnableEditing()
Get Enable Editing.
global $DIC
Definition: goto.php:24
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
__construct(Container $dic, ilPlugin $plugin)
const ADDITIONAL_CONTENT_EDITING_MODE_RTE
constant for additional content editing mode "default"
redirectToQuestionEditPage($questionType, $qid, $prev_qid)
global $ilDB
$ret
Definition: parser.php:6
static isAdditionalQuestionContentEditingModePageObjectEnabled()
returns the fact wether content editing with ilias page editor is enabled for questions or not ...
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
$message
Definition: xapiexit.php:14
setOutputMode($a_mode=self::PRESENTATION)
Set Output Mode.
$ilUser
Definition: imgupload.php:18
redirectToQuestionPoolSelectionPage($questionType, $qid, $prev_qid)
static redirect($a_script)
ilTestExpressPageObjectGUI: assMultipleChoiceGUI, assClozeTestGUI, assMatchingQuestionGUI ilTestExpr...
$_POST["username"]
setRequired($a_required)
Set Required.