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 
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 $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) {
184  $obj = ilObjectFactory::getInstanceByRefId((int) $_GET['ref_id']);
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 }
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
$params
Definition: disable.php:11
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.
const IL_PAGE_PREVIEW
getPageObject()
Get Page Object.
This class represents a selection list property in a property form.
This class represents a property form user interface.
$type
global $DIC
Definition: saml.php:7
const ADDITIONAL_CONTENT_EDITING_MODE_PAGE_OBJECT
constant for additional content editing mode "pageobject"
$_GET["client_id"]
static _needsManualScoring($question_id)
static getQuestionTypeByTypeId($type_id)
Question page GUI class.
$total
Definition: Utf8Test.php:87
Page Editor GUI class.
static _lookupObjectId($a_ref_id)
lookup object id
global $ilCtrl
Definition: ilias.php:18
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
This class represents a hidden form property in a property form.
if($format !==null) $name
Definition: metadata.php:146
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.
addOption($a_option)
Add Option.
if(isset($_POST['submit'])) $form
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.
This class represents a text property in a property form.
$ilUser
Definition: imgupload.php:18
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
const IL_PAGE_EDIT
setOptions($a_options)
Set Options.
Create styles array
The data for the language used.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
const ADDITIONAL_CONTENT_EDITING_MODE_DEFAULT
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
redirectToQuestionPoolSelectionPage($questionType, $qid, $prev_qid)
static redirect($a_script)
$key
Definition: croninfo.php:18
ilTestExpressPageObjectGUI: assMultipleChoiceGUI, assClozeTestGUI, assMatchingQuestionGUI ilTestExpr...
$_POST["username"]
setRequired($a_required)
Set Required.
setOutputMode($a_mode=IL_PAGE_PRESENTATION)
Set Output Mode.
if(!isset($_REQUEST['ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20