ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilLOSettings.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
11{
12 // new settings 5.1
13 const QST_PASSED_FLAG = 1;
14 const QST_PASSED_HIDE = 2;
15
21
24
25 // end new settings
26
30
31 const QT_VISIBLE_ALL = 0;
33
34
35 const LOC_INITIAL_ALL = 1;
36 const LOC_INITIAL_SEL = 2;
37 const LOC_QUALIFIED = 3;
38 const LOC_PRACTISE = 4;
39
42
43
44 private static $instances = array();
45
49 private $logger = null;
50
51
52 // settings 5.1
55
56 private $it_start = false;
57 private $qt_start = false;
58
59 // end settings 5.1
60
61 private $container_id = 0;
62 private $type = 0;
63 private $initial_test = 0;
64 private $qualified_test = 0;
65 private $reset_results = true;
67
68
69 private $entry_exists = false;
70
71
76 protected function __construct($a_cont_id)
77 {
78 $this->logger = $GLOBALS['DIC']->logger()->crs();
79
80 $this->container_id = $a_cont_id;
81 $this->read();
82 }
83
89 public static function getInstanceByObjId($a_obj_id)
90 {
91 if (self::$instances[$a_obj_id]) {
92 return self::$instances[$a_obj_id];
93 }
94 return self::$instances[$a_obj_id] = new ilLOSettings($a_obj_id);
95 }
96
102 {
103 $this->it_type = $a_type;
104 }
105
110 public function getInitialTestType()
111 {
112 return $this->it_type;
113 }
114
118 public function getQualifyingTestType()
119 {
120 return $this->qt_type;
121 }
122
128 {
129 $this->qt_type = $a_type;
130 }
131
137 {
138 $this->it_start = $a_type;
139 }
140
145 public function isInitialTestStart()
146 {
147 return $this->it_start;
148 }
149
155 {
156 $this->qt_start = $a_type;
157 }
158
163 public function isQualifyingTestStart()
164 {
165 return $this->qt_start;
166 }
167
171 public function hasSeparateInitialTests()
172 {
173 return $this->getInitialTestType() == self::TYPE_INITIAL_PLACEMENT_SELECTED || $this->getInitialTestType() == self::TYPE_INITIAL_QUALIFYING_SELECTED;
174 }
175
180 {
182 }
183
187 public function isInitialTestQualifying()
188 {
189 return $this->getInitialTestType() == self::TYPE_INITIAL_QUALIFYING_ALL || $this->getInitialTestType() == self::TYPE_INITIAL_QUALIFYING_SELECTED;
190 }
191
196 public static function isObjectiveTest($a_trst_ref_id)
197 {
198 global $DIC;
199
200 $ilDB = $DIC['ilDB'];
201
202
203 // Check for direct assignment
204 $query = 'SELECT obj_id FROM loc_settings ' .
205 'WHERE itest = ' . $ilDB->quote($a_trst_ref_id, 'integer') . ' ' .
206 'OR qtest = ' . $ilDB->quote($a_trst_ref_id, 'integer');
207 $res = $ilDB->query($query);
208 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
209 return $row->obj_id;
210 }
211
212 include_once './Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
213 return ilLOTestAssignments::lookupContainerForTest($a_trst_ref_id);
214 }
215
222 public static function cloneSettings($a_copy_id, $a_container_id, $a_new_container_id)
223 {
224 include_once './Services/CopyWizard/classes/class.ilCopyWizardOptions.php';
226 $mappings = $options->getMappings();
227
228 $settings = self::getInstanceByObjId($a_container_id);
229 $new_settings = self::getInstanceByObjId($a_new_container_id);
230
231 $new_settings->setType($settings->getType());
232 $new_settings->setInitialTestType($settings->getInitialTestType());
233 $new_settings->setQualifyingTestType($settings->getQualifyingTestType());
234 $new_settings->resetResults($settings->isResetResultsEnabled());
235 $new_settings->setPassedObjectiveMode($settings->getPassedObjectiveMode());
236
237 if ($settings->getInitialTest() and array_key_exists($settings->getInitialTest(), $mappings)) {
238 $new_settings->setInitialTest($mappings[$settings->getInitialTest()]);
239 $new_settings->setInitialTestAsStart($new_settings->isInitialTestStart());
240 }
241
242 if ($settings->getQualifiedTest() and array_key_exists($settings->getQualifiedTest(), $mappings)) {
243 $new_settings->setQualifiedTest($mappings[$settings->getQualifiedTest()]);
244 $new_settings->setQualifyingTestAsStart($settings->isQualifyingTestStart());
245 }
246
247 // update calls create in case of no entry exists.
248 $new_settings->update();
249 }
250
254 public function worksWithStartObjects()
255 {
256 return $this->isInitialTestStart() or $this->isQualifyingTestStart();
257 }
258
259
263 public function worksWithInitialTest()
264 {
266 }
267
273 {
275 }
276
280 public function setGeneralQualifiedTestVisibility($a_stat)
281 {
282 $this->qt_visible_all = $a_stat;
283 return true;
284 }
285
287 {
289 }
290
292 {
293 $this->qt_visible_lo = $a_stat;
294 }
295
296 public function getPassedObjectiveMode()
297 {
298 return $this->passed_objective_mode;
299 }
300
301 public function setPassedObjectiveMode($a_mode)
302 {
303 $this->passed_objective_mode = $a_mode;
304 }
305
311 {
312 return $this->getInitialTestType() == self::TYPE_INITIAL_PLACEMENT_ALL || $this->getInitialTestType() == self::TYPE_INITIAL_QUALIFYING_ALL;
313 }
314
319 public function settingsExist()
320 {
321 return $this->entry_exists;
322 }
323
324 public function getObjId()
325 {
326 return $this->container_id;
327 }
328
329 public function setType($a_type)
330 {
331 $this->type = $a_type;
332 }
333
334 public function getType()
335 {
336 return $this->type;
337 }
338
345 public function getTestByType($a_type)
346 {
347 switch ($a_type) {
349 return $this->getInitialTest();
350
352 return $this->getQualifiedTest();
353 }
354 }
355
361 public function getTests()
362 {
363 $tests = array();
364 if ($this->getInitialTest()) {
365 $tests[] = $this->getInitialTest();
366 }
367 if ($this->getQualifiedTest()) {
368 $tests[] = $this->getQualifiedTest();
369 }
370 return $tests;
371 }
372
379 public function isRandomTestType($a_type)
380 {
381 $tst = $this->getTestByType($a_type);
382 include_once './Modules/Test/classes/class.ilObjTest.php';
384 }
385
391 public function setInitialTest($a_id)
392 {
393 $this->initial_test = $a_id;
394 }
395
401 public function getInitialTest()
402 {
403 return $this->initial_test;
404 }
405
411 public function setQualifiedTest($a_id)
412 {
413 $this->qualified_test = $a_id;
414 }
415
421 public function getQualifiedTest()
422 {
424 }
425
430 public function resetResults($a_status)
431 {
432 $this->reset_results = $a_status;
433 }
434
439 public function isResetResultsEnabled()
440 {
441 return (bool) $this->reset_results;
442 }
443
447 public function create()
448 {
449 global $DIC;
450
451 $ilDB = $DIC['ilDB'];
452
453 $query = 'INSERT INTO loc_settings ' .
454 '(obj_id, it_type,itest,qtest,it_start,qt_type,qt_start,reset_results,passed_obj_mode) VALUES ( ' .
455 $ilDB->quote($this->getObjId(), 'integer') . ', ' .
456 $ilDB->quote($this->getInitialTestType(), 'integer') . ', ' .
457 $ilDB->quote($this->getInitialTest(), 'integer') . ', ' .
458 $ilDB->quote($this->getQualifiedTest(), 'integer') . ', ' .
459 $ilDB->quote($this->isInitialTestStart(), 'integer') . ', ' .
460 $ilDB->quote($this->getQualifyingTestType(), 'integer') . ', ' .
461 $ilDB->quote($this->isQualifyingTestStart(), 'integer') . ', ' .
462 $ilDB->quote($this->isResetResultsEnabled(), 'integer') . ', ' .
463 $ilDB->quote($this->getPassedObjectiveMode(), 'integer') . ' ' .
464 ') ';
465 $ilDB->manipulate($query);
466
467 $this->entry_exists = true;
468 }
469
470
475 public function update()
476 {
477 global $DIC;
478
479 $ilDB = $DIC['ilDB'];
480
481 if (!$this->entry_exists) {
482 return $this->create();
483 }
484
485 $query = 'UPDATE loc_settings ' . ' ' .
486 'SET it_type = ' . $ilDB->quote($this->getInitialTestType(), 'integer') . ', ' .
487 'itest = ' . $ilDB->quote($this->getInitialTest(), 'integer') . ', ' .
488 'qtest = ' . $ilDB->quote($this->getQualifiedTest(), 'integer') . ', ' .
489 'it_start = ' . $ilDB->quote($this->isInitialTestStart(), 'integer') . ', ' .
490 'qt_type = ' . $ilDB->quote($this->getQualifyingTestType(), 'integer') . ', ' .
491 'qt_start = ' . $ilDB->quote($this->isQualifyingTestStart(), 'integer') . ', ' .
492 'reset_results = ' . $ilDB->quote($this->isResetResultsEnabled(), 'integer') . ', ' .
493 'passed_obj_mode = ' . $ilDB->quote($this->getPassedObjectiveMode(), 'integer') . ' ' .
494 'WHERE obj_id = ' . $ilDB->quote($this->getObjId(), 'integer');
495
496 $ilDB->manipulate($query);
497 }
498
506 {
507 if ($this->getInitialTestType() != self::TYPE_INITIAL_NONE) {
508 if ($start->exists($this->getQualifiedTest())) {
509 $start->deleteItem($this->getQualifiedTest());
510 }
511 }
512
513 switch ($this->getInitialTestType()) {
516
517 if ($this->isInitialTestStart()) {
518 if (!$start->exists($this->getInitialTest())) {
519 $start->add($this->getInitialTest());
520 }
521 } else {
522 if ($start->exists($this->getInitialTest())) {
523 $start->deleteItem($this->getInitialTest());
524 }
525 }
526 break;
527
529
530 if ($start->exists($this->getInitialTest())) {
531 $start->deleteItem($this->getInitialTest());
532 }
533 break;
534
535 default:
536
537 $this->logger->debug('Type initial default');
538 if ($start->exists($this->getInitialTest())) {
539 $this->logger->debug('Old start object exists. Trying to delete');
540 $start->deleteItem($this->getInitialTest());
541 }
542 break;
543 }
544
545 switch ($this->getQualifyingTestType()) {
547
548 if ($this->isQualifyingTestStart()) {
549 if (!$start->exists($this->getQualifiedTest())) {
550 $start->add($this->getQualifiedTest());
551 }
552 }
553 break;
554
555 default:
556 if ($start->exists($this->getQualifiedTest())) {
557 $start->deleteItem($this->getQualifiedTest());
558 }
559 break;
560 }
561 return true;
562 }
563
564
568 protected function read()
569 {
570 global $DIC;
571
572 $ilDB = $DIC['ilDB'];
573
574 $query = 'SELECT * FROM loc_settings ' .
575 'WHERE obj_id = ' . $ilDB->quote($this->getObjId(), 'integer');
576 $res = $ilDB->query($query);
577 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
578 $this->entry_exists = true;
579
580 $this->setInitialTestType($row->it_type);
581 $this->setInitialTestAsStart((bool) $row->it_start);
582 $this->setQualifyingTestType($row->qt_type);
583 $this->setQualifyingTestAsStart($row->qt_start);
584
585 #$this->setType($row->type);
586 $this->setInitialTest($row->itest);
587 $this->setQualifiedTest($row->qtest);
588 #$this->setGeneralQualifiedTestVisibility($row->qt_vis_all);
589 #$this->setQualifiedTestPerObjectiveVisibility($row->qt_vis_obj);
590 $this->resetResults($row->reset_results);
591 $this->setPassedObjectiveMode($row->passed_obj_mode);
592 }
593
594 if ($GLOBALS['DIC']['tree']->isDeleted($this->getInitialTest())) {
595 $this->setInitialTest(0);
596 }
597 if ($GLOBALS['DIC']['tree']->isDeleted($this->getQualifiedTest())) {
598 $this->setQualifiedTest(0);
599 }
600 }
601
606 public function toXml(ilXmlWriter $writer)
607 {
608 $writer->xmlElement(
609 'Settings',
610 array(
611 'initialTestType' => (int) $this->getInitialTestType(),
612 'initialTestStart' => (int) $this->isInitialTestStart(),
613 'qualifyingTestType' => (int) $this->getQualifyingTestType(),
614 'qualifyingTestStart' => (int) $this->isQualifyingTestStart(),
615 'resetResults' => (int) $this->isResetResultsEnabled(),
616 'passedObjectivesMode' => (int) $this->getPassedObjectiveMode(),
617 'iTest' => (int) $this->getInitialTest(),
618 'qTest' => (int) $this->getQualifiedTest()
619 )
620 );
621 }
622}
An exception for terminatinating execution or to throw for unit testing.
static _getInstance($a_copy_id)
Get instance of copy wizard options.
Settings for LO courses.
getTests()
Get assigned tests.
const TYPE_INITIAL_QUALIFYING_ALL
setQualifiedTestPerObjectiveVisibility($a_stat)
update()
update settings @global type $ilDB
setQualifyingTestType($a_type)
Set qualifying test type.
const TYPE_INITIAL_PLACEMENT_SELECTED
hasSeparateQualifiedTests()
Check if separate qualified tests are configured.
getInitialTestType()
Get initial test type.
const HIDE_PASSED_OBJECTIVE_QST
isInitialTestQualifying()
Check if initial test is qualifying*.
isInitialTestStart()
Get initial test start.
const TYPE_INITIAL_PLACEMENT_ALL
setGeneralQualifiedTestVisibility($a_stat)
worksWithStartObjects()
Check if start objects are enabled.
isRandomTestType($a_type)
Check if test is of type random test.
setInitialTestType($a_type)
Set Initial test type.
getInitialTest()
get initial test
setInitialTestAsStart($a_type)
const MARK_PASSED_OBJECTIVE_QST
setInitialTest($a_id)
set initial test id
updateStartObjects(ilContainerStartObjects $start)
Update start objects Depends on course objective settings.
resetResults($a_status)
reset results
worksWithInitialTest()
Check if the loc is configured for initial tests.
setPassedObjectiveMode($a_mode)
__construct($a_cont_id)
Constructor.
const TYPE_QUALIFYING_SELECTED
static cloneSettings($a_copy_id, $a_container_id, $a_new_container_id)
Clone settings.
const TYPE_INITIAL_QUALIFYING_SELECTED
isGeneralInitialTestVisible()
Check if initial test for all objectives is visible.
static isObjectiveTest($a_trst_ref_id)
Check if test ref_id is used in an objective course.
isResetResultsEnabled()
check if reset result is enabled
setQualifyingTestAsStart($a_type)
Set qt as start object.
static getInstanceByObjId($a_obj_id)
get singleton instance
isQualifyingTestStart()
Is qt start object.
create()
Create new entry.
hasSeparateInitialTests()
Check if separate initial test are configured.
toXml(ilXmlWriter $writer)
export to xml
setQualifiedTest($a_id)
set qualified test
isGeneralQualifiedTestVisible()
Check if qualified test for all objectives is visible.
getQualifiedTest()
get qualified test
getQualifyingTestType()
Get qualifying test type.
static lookupContainerForTest($a_test_ref_id)
static _lookupRandomTest($a_obj_id)
Returns the fact wether the test with passed obj id is a random questions test or not.
static _lookupObjId($a_id)
XML writer class.
xmlElement($tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
$tests
Definition: bench.php:104
$row
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
$query
global $DIC
Definition: saml.php:7
foreach($_POST as $key=> $value) $res
global $ilDB
$start
Definition: bench.php:8
$a_type
Definition: workflow.php:92