ILIAS  release_7 Revision v7.30-3-g800a261c036
ilSoapTestAdministration Class Reference
+ Inheritance diagram for ilSoapTestAdministration:
+ Collaboration diagram for ilSoapTestAdministration:

Public Member Functions

 isAllowedCall ($sid, $active_id, $saveaction=true)
 
 saveQuestion ($sid, $active_id, $question_id, $pass, $solution)
 
 saveQuestionSolution ($sid, $active_id, $question_id, $pass, $solution)
 Save the solution of a question. More...
 
 getQuestionSolution ($sid, $active_id, $question_id, $pass)
 Get the the answers of a given question and pass for a given user. More...
 
 getTestUserData ($sid, $active_id)
 get active user data More...
 
 getPositionOfQuestion ($sid, $active_id, $question_id, $pass)
 get active user data More...
 
 getPreviousReachedPoints ($sid, $active_id, $question_id, $pass)
 Returns the previous reached points in a given pass. More...
 
 getNrOfQuestionsInPass ($sid, $active_id, $pass)
 Get the number of questions in a given pass for a given user. More...
 
 removeTestResults ($sid, $test_ref_id, $a_user_ids)
 Remove test results for the chosen test and users. More...
 
 getTestResults ($sid, $test_ref_id, $sum_only)
 get results of test More...
 
- Public Member Functions inherited from ilSoapAdministration
 __construct ($use_nusoap=true)
 Constructor. More...
 
 initErrorWriter ()
 Overwrite error handler. More...
 
 __explodeSid ($sid)
 
 __setMessage ($a_str)
 
 __getMessage ()
 
 __appendMessage ($a_str)
 
 __setMessageCode ($a_code)
 
 __getMessageCode ()
 
 initAuth ($sid)
 Init authentication. More...
 
 initIlias ()
 
 __initAuthenticationObject ($a_auth_mode=AUTH_LOCAL)
 
 __raiseError ($a_message, $a_code)
 
 getNIC ($sid)
 get client information from current as xml result set More...
 
 isFault ($object)
 
 checkObjectAccess ($ref_id, $expected_type, $permission, $returnObject=false)
 check access for ref id: expected type, permission, return object instance if returnobject is true More...
 
 getInstallationInfoXML ()
 
 getClientInfoXML ($clientid)
 

Protected Member Functions

 checkManageParticipantsAccess ($refId)
 
 checkParticipantsResultsAccess ($refId)
 
 getTestAccess ($refId)
 

Private Member Functions

 hasWritePermissionForTest ($active_id)
 

Additional Inherited Members

- Static Public Member Functions inherited from ilSoapAdministration
static return_bytes ($val)
 calculate bytes from K,M,G modifiers e.g: 8M = 8 * 1024 * 1024 bytes More...
 
- Data Fields inherited from ilSoapAdministration
 $sauth = null
 
 $error_method = null
 
- Protected Attributes inherited from ilSoapAdministration
 $soap_check = true
 

Detailed Description

Definition at line 35 of file class.ilSoapTestAdministration.php.

Member Function Documentation

◆ checkManageParticipantsAccess()

ilSoapTestAdministration::checkManageParticipantsAccess (   $refId)
protected
Parameters
$refId
Returns
bool

Definition at line 779 of file class.ilSoapTestAdministration.php.

780 {
781 return $this->getTestAccess($refId)->checkManageParticipantsAccess();
782 }
$refId
Definition: xapitoken.php:40

References $refId, and getTestAccess().

Referenced by removeTestResults().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ checkParticipantsResultsAccess()

ilSoapTestAdministration::checkParticipantsResultsAccess (   $refId)
protected
Parameters
$refId
Returns
bool

Definition at line 788 of file class.ilSoapTestAdministration.php.

789 {
790 return $this->getTestAccess($refId)->checkParticipantsResultsAccess();
791 }

References $refId, and getTestAccess().

Referenced by getTestResults().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getNrOfQuestionsInPass()

ilSoapTestAdministration::getNrOfQuestionsInPass (   $sid,
  $active_id,
  $pass 
)

Get the number of questions in a given pass for a given user.

Parameters
string$sidSession ID
long$active_idActive user ID
integer$passTest pass
Returns
integer Question position in the given test pass

Definition at line 532 of file class.ilSoapTestAdministration.php.

533 {
534 $this->initAuth($sid);
535 $this->initIlias();
536
537 if (!$this->__checkSession($sid)) {
538 return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
539 }
540 if (!$this->isAllowedCall($sid, $active_id, false)) {
541 return $this->__raiseError("The required user information is only available for active users.", "");
542 }
543
544 global $DIC;
545
546 $lng = $DIC['lng'];
547 $ilDB = $DIC['ilDB'];
548
549 $result = $ilDB->queryF(
550 "SELECT tst_tests.random_test FROM tst_active, tst_tests WHERE tst_active.active_id = %s AND tst_tests.test_id = tst_active.test_fi",
551 array('integer'),
552 array($active_id)
553 );
554 if ($result->numRows() != 1) {
555 return 0;
556 }
557 $row = $ilDB->fetchAssoc($result);
558 $is_random = $row["random_test"];
559
560 include_once "./Modules/Test/classes/class.ilTestSequence.php";
561 $sequence = new ilTestSequence($active_id, $pass, $is_random);
562 return $sequence->getUserQuestionCount();
563 }
$result
initAuth($sid)
Init authentication.
__raiseError($a_message, $a_code)
isAllowedCall($sid, $active_id, $saveaction=true)
Test sequence handler.
global $DIC
Definition: goto.php:24
$lng
global $ilDB

References $DIC, $ilDB, $lng, $pass, $result, ilSoapAdministration\__getMessage(), ilSoapAdministration\__getMessageCode(), ilSoapAdministration\__raiseError(), ilSoapAdministration\initAuth(), ilSoapAdministration\initIlias(), and isAllowedCall().

+ Here is the call graph for this function:

◆ getPositionOfQuestion()

ilSoapTestAdministration::getPositionOfQuestion (   $sid,
  $active_id,
  $question_id,
  $pass 
)

get active user data

Parameters
string$sidSession ID
long$active_idActive user ID
integer$question_idQuestion ID
integer$passTest pass
Returns
integer Question position in the given test pass

Definition at line 426 of file class.ilSoapTestAdministration.php.

427 {
428 $this->initAuth($sid);
429 $this->initIlias();
430
431 if (!$this->__checkSession($sid)) {
432 return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
433 }
434 if (!$this->isAllowedCall($sid, $active_id, false)) {
435 return $this->__raiseError("The required user information is only available for active users.", "");
436 }
437
438 global $DIC;
439
440 $lng = $DIC['lng'];
441 $ilDB = $DIC['ilDB'];
442
443 $result = $ilDB->queryF(
444 "SELECT tst_tests.random_test FROM tst_active, tst_tests WHERE tst_active.active_id = %s AND tst_tests.test_id = tst_active.test_fi",
445 array('integer'),
446 array($active_id)
447 );
448 if ($result->numRows() != 1) {
449 return -1;
450 }
451 $row = $ilDB->fetchAssoc($result);
452 $is_random = $row["random_test"];
453
454 include_once "./Modules/Test/classes/class.ilTestSequence.php";
455 $sequence = new ilTestSequence($active_id, $pass, $is_random);
456 return $sequence->getSequenceForQuestion($question_id);
457 }

References $DIC, $ilDB, $lng, $pass, $result, ilSoapAdministration\__getMessage(), ilSoapAdministration\__getMessageCode(), ilSoapAdministration\__raiseError(), ilSoapAdministration\initAuth(), ilSoapAdministration\initIlias(), and isAllowedCall().

+ Here is the call graph for this function:

◆ getPreviousReachedPoints()

ilSoapTestAdministration::getPreviousReachedPoints (   $sid,
  $active_id,
  $question_id,
  $pass 
)

Returns the previous reached points in a given pass.

Parameters
string$sidSession ID
long$active_idActive user ID
integer$question_idQuestion ID
integer$passTest pass
Returns
array Reached points of the previous questions in this pass

Definition at line 469 of file class.ilSoapTestAdministration.php.

470 {
471 $this->initAuth($sid);
472 $this->initIlias();
473
474 if (!$this->__checkSession($sid)) {
475 return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
476 }
477 if (!$this->isAllowedCall($sid, $active_id, false)) {
478 return $this->__raiseError("The required user information is only available for active users.", "");
479 }
480
481 global $DIC;
482
483 $lng = $DIC['lng'];
484 $ilDB = $DIC['ilDB'];
485
486 $result = $ilDB->queryF(
487 "SELECT tst_tests.random_test FROM tst_active, tst_tests WHERE tst_active.active_id = %s AND tst_tests.test_id = tst_active.test_fi",
488 array('integer'),
489 array($active_id)
490 );
491 if ($result->numRows() != 1) {
492 return -1;
493 }
494 $row = $ilDB->fetchAssoc($result);
495 $is_random = $row["random_test"];
496
497 include_once "./Modules/Test/classes/class.ilTestSequence.php";
498 $sequence = new ilTestSequence($active_id, $pass, $is_random);
499 $result = $ilDB->queryF(
500 "SELECT question_fi, points FROM tst_test_result WHERE active_fi = %s AND pass = %s",
501 array('integer', 'integer'),
502 array($active_id, $pass)
503 );
504 $reachedpoints = array();
505 while ($row = $ilDB->fetchAssoc($result)) {
506 $reachedpoints[$row["question_fi"]] = $row["points"];
507 }
508 $atposition = false;
509 $pointsforposition = array();
510 foreach ($sequence->getUserSequence() as $seq) {
511 if (!$atposition) {
512 $qid = $sequence->getQuestionForSequence($seq);
513 if ($qid == $question_id) {
514 $atposition = true;
515 } else {
516 array_push($pointsforposition, $reachedpoints[$qid]);
517 }
518 }
519 }
520 return $pointsforposition;
521 }

References $DIC, $ilDB, $lng, $pass, $result, ilSoapAdministration\__getMessage(), ilSoapAdministration\__getMessageCode(), ilSoapAdministration\__raiseError(), ilSoapAdministration\initAuth(), ilSoapAdministration\initIlias(), and isAllowedCall().

+ Here is the call graph for this function:

◆ getQuestionSolution()

ilSoapTestAdministration::getQuestionSolution (   $sid,
  $active_id,
  $question_id,
  $pass 
)

Get the the answers of a given question and pass for a given user.

Parameters
string$sidSession ID
long$active_idActive user ID
integer$question_idQuestion ID
integer$passTest pass
Returns
array String array containing the question solution (in triplets of value1, value2, points)

Definition at line 280 of file class.ilSoapTestAdministration.php.

281 {
282 $this->initAuth($sid);
283 $this->initIlias();
284
285 if (!$this->__checkSession($sid)) {
286 return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
287 }
288 if (!$this->isAllowedCall($sid, $active_id, false)) {
289 return $this->__raiseError("The required user information is only available for active users.", "");
290 }
291 $solution = array();
292 // Include main header
293 global $DIC;
294
295 $ilDB = $DIC['ilDB'];
296
297 $use_previous_answers = 1;
298
299 $result = $ilDB->queryF(
300 "SELECT tst_tests.use_previous_answers FROM tst_tests, tst_active WHERE tst_tests.test_id = tst_active.test_fi AND tst_active.active_id = %s",
301 array('integer'),
302 array($active_id)
303 );
304 if ($result->numRows()) {
305 $row = $ilDB->fetchAssoc($result);
306 $use_previous_answers = $row["use_previous_answers"];
307 }
308 $lastpass = 0;
309 if ($use_previous_answers) {
310 $result = $ilDB->queryF(
311 "SELECT MAX(pass) maxpass FROM tst_test_result WHERE active_fi = %s AND question_fi = %s",
312 array('integer', 'integer'),
313 array($active_id, $question_id)
314 );
315 if ($result->numRows() == 1) {
316 $row = $ilDB->fetchAssoc($result);
317 $lastpass = $row["maxpass"];
318 }
319 } else {
320 $lastpass = $pass;
321 }
322
323 if (($active_id > 0) && ($question_id > 0) && (strlen($lastpass) > 0)) {
324 $result = $ilDB->queryF(
325 "SELECT * FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s",
326 array('integer', 'integer', 'integer'),
327 array($active_id, $question_id, $lastpass)
328 );
329 if ($result->numRows()) {
330 while ($row = $ilDB->fetchAssoc($result)) {
331 array_push($solution, $row["value1"]);
332 array_push($solution, $row["value2"]);
333 array_push($solution, $row["points"]);
334 }
335 }
336 }
337 return $solution;
338 }

References $DIC, $ilDB, $pass, $result, ilSoapAdministration\__getMessage(), ilSoapAdministration\__getMessageCode(), ilSoapAdministration\__raiseError(), ilSoapAdministration\initAuth(), ilSoapAdministration\initIlias(), and isAllowedCall().

+ Here is the call graph for this function:

◆ getTestAccess()

ilSoapTestAdministration::getTestAccess (   $refId)
protected
Parameters
$refId
Returns
ilTestAccess

Definition at line 797 of file class.ilSoapTestAdministration.php.

798 {
799 require_once 'Modules/Test/classes/class.ilTestAccess.php';
800
802
803 return new ilTestAccess($refId, $testId);
804 }
static _getTestIDFromObjectID($object_id)
Returns the ILIAS test id for a given object id.
static _lookupObjectId($a_ref_id)
lookup object id

References $refId, ilObjTestAccess\_getTestIDFromObjectID(), and ilObject\_lookupObjectId().

Referenced by checkManageParticipantsAccess(), and checkParticipantsResultsAccess().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getTestResults()

ilSoapTestAdministration::getTestResults (   $sid,
  $test_ref_id,
  $sum_only 
)

get results of test

Parameters
string$sid
int$test_ref_id
boolean$sum_only
Returns
XMLResultSet with columns sum only = true: user_id, login, firstname, lastname, matriculation, maximum points, received points sum only = false: user_id, login, firstname, lastname, matriculation, question id, question title, question points, received points

Definition at line 641 of file class.ilSoapTestAdministration.php.

642 {
643 $this->initAuth($sid);
644 $this->initIlias();
645
646 if (!$this->__checkSession($sid)) {
647 return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
648 }
649 if (!strlen($test_ref_id)) {
650 return $this->__raiseError(
651 'No test id given. Aborting!',
652 'Client'
653 );
654 }
655 global $DIC;
656
657 $rbacsystem = $DIC['rbacsystem'];
658 $tree = $DIC['tree'];
659 $ilLog = $DIC['ilLog'];
660
661 if (ilObject::_isInTrash($test_ref_id)) {
662 return $this->__raiseError(
663 'Test is trashed. Aborting!',
664 'Client'
665 );
666 }
667
668 // get obj_id
669 if (!$obj_id = ilObject::_lookupObjectId($test_ref_id)) {
670 return $this->__raiseError(
671 'No test found for id: ' . $test_ref_id,
672 'Client'
673 );
674 }
675
676
677 // Check access
678 $permission_ok = false;
679 foreach ($ref_ids = ilObject::_getAllReferences($obj_id) as $ref_id) {
680 if ($rbacsystem->checkAccess('write', $ref_id)) {
681 $permission_ok = true;
682 break;
683 }
684 }
685 if (!$permission_ok && $this->checkParticipantsResultsAccess($test_ref_id)) {
686 $permission_ok = $this->checkParticipantsResultsAccess($test_ref_id);
687 }
688
689 if (!$permission_ok) {
690 return $this->__raiseError(
691 'No permission to edit the object with id: ' . $test_ref_id,
692 'Server'
693 );
694 }
695 // store into xml result set
696 include_once './webservice/soap/classes/class.ilXMLResultSet.php';
697 include_once './webservice/soap/classes/class.ilXMLResultSetWriter.php';
698
699 $xmlResultSet = new ilXMLResultSet();
700 $xmlResultSet->addColumn("user_id");
701 $xmlResultSet->addColumn("login");
702 $xmlResultSet->addColumn("firstname");
703 $xmlResultSet->addColumn("lastname");
704 $xmlResultSet->addColumn("matriculation");
705
706 include_once './Modules/Test/classes/class.ilObjTest.php';
707 $test_obj = new ilObjTest($obj_id, false);
708 $participants = $test_obj->getTestParticipants();
709
710 require_once 'Modules/Test/classes/class.ilTestParticipantAccessFilter.php';
711 require_once 'Modules/Test/classes/class.ilTestParticipantList.php';
713 $participantList = new ilTestParticipantList($test_obj);
714 $participantList->initializeFromDbRows($participants);
715 $participantList = $participantList->getAccessFilteredList($accessFilter);
716 $participantList = $participantList->getScoredParticipantList();
717 foreach ($participants as $activeId => $part) {
718 if ($participantList->isActiveIdInList($activeId)) {
719 $participants[$activeId]['passed'] = $participantList->getParticipantByActiveId($activeId)->getScoring()->isPassed();
720 continue;
721 }
722
723 unset($participants[$activeId]);
724 }
725
726 if ($sum_only) {
727 $data = $test_obj->getAllTestResults($participants, false);
728 // create xml
729 $xmlResultSet->addColumn("maximum_points");
730 $xmlResultSet->addColumn("received_points");
731 $xmlResultSet->addColumn("passed");
732 // skip titles
733 $titles = array_shift($data);
734 foreach ($data as $row) {
735 $xmlRow = new ilXMLResultSetRow();
736 $xmlRow->setValue(0, $row["user_id"]);
737 $xmlRow->setValue(1, $row["login"]);
738 $xmlRow->setValue(2, $row["firstname"]);
739 $xmlRow->setValue(3, $row["lastname"]);
740 $xmlRow->setValue(4, $row["matriculation"]);
741 $xmlRow->setValue(5, $row["max_points"]);
742 $xmlRow->setValue(6, $row["reached_points"]);
743 $xmlRow->setValue(7, $row["passed"]);
744 $xmlResultSet->addRow($xmlRow);
745 }
746 } else {
747 $data = $test_obj->getDetailedTestResults($participants);
748 // create xml
749 $xmlResultSet->addColumn("question_id");
750 $xmlResultSet->addColumn("question_title");
751 $xmlResultSet->addColumn("maximum_points");
752 $xmlResultSet->addColumn("received_points");
753 $xmlResultSet->addColumn("passed");
754 foreach ($data as $row) {
755 $xmlRow = new ilXMLResultSetRow();
756 $xmlRow->setValue(0, $row["user_id"]);
757 $xmlRow->setValue(1, $row["login"]);
758 $xmlRow->setValue(2, $row["firstname"]);
759 $xmlRow->setValue(3, $row["lastname"]);
760 $xmlRow->setValue(4, $row["matriculation"]);
761 $xmlRow->setValue(5, $row["question_id"]);
762 $xmlRow->setValue(6, $row["question_title"]);
763 $xmlRow->setValue(7, $row["max_points"]);
764 $xmlRow->setValue(8, $row["reached_points"]);
765 $xmlRow->setValue(9, $row["passed"]);
766 $xmlResultSet->addRow($xmlRow);
767 }
768 }
769 // create writer
770 $xmlWriter = new ilXMLResultSetWriter($xmlResultSet);
771 $xmlWriter->start();
772 return $xmlWriter->getXML();
773 }
static _getAllReferences($a_id)
get all reference ids of object
static _isInTrash($a_ref_id)
checks wether object is in trash
XML Writer for XMLResultSet.
$data
Definition: storeScorm.php:23

References $data, $DIC, ilSoapAdministration\__getMessage(), ilSoapAdministration\__getMessageCode(), ilSoapAdministration\__raiseError(), ilObject\_getAllReferences(), ilObject\_isInTrash(), ilObject\_lookupObjectId(), checkParticipantsResultsAccess(), ilTestParticipantAccessFilter\getAccessResultsUserFilter(), ilSoapAdministration\initAuth(), and ilSoapAdministration\initIlias().

+ Here is the call graph for this function:

◆ getTestUserData()

ilSoapTestAdministration::getTestUserData (   $sid,
  $active_id 
)

get active user data

Parameters
string$sid
long$active_id
Returns
array String array containing fullname, title, firstname, lastname, login

Definition at line 348 of file class.ilSoapTestAdministration.php.

349 {
350 $this->initAuth($sid);
351 $this->initIlias();
352
353 if (!$this->__checkSession($sid)) {
354 return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
355 }
356 if (!$this->isAllowedCall($sid, $active_id, false)) {
357 if (!$this->checkActiveIdResultsAccess($active_id)) {
358 return $this->__raiseError("The required user information is only available for active users.", "");
359 }
360 }
361
362 global $DIC;
363
364 $lng = $DIC['lng'];
365 $ilDB = $DIC['ilDB'];
366
367 $result = $ilDB->queryF(
368 "SELECT user_fi, test_fi FROM tst_active WHERE active_id = %s",
369 array('integer'),
370 array($active_id)
371 );
372 $row = $ilDB->fetchAssoc($result);
373 $user_id = $row["user_fi"];
374 $test_id = $row["test_fi"];
375
376 $result = $ilDB->queryF(
377 "SELECT anonymity FROM tst_tests WHERE test_id = %s",
378 array('integer'),
379 array($test_id)
380 );
381 $row = $ilDB->fetchAssoc($result);
382 $anonymity = $row["anonymity"];
383
384 $result = $ilDB->queryF(
385 "SELECT firstname, lastname, title, login FROM usr_data WHERE usr_id = %s",
386 array('integer'),
387 array($user_id)
388 );
389
390 $userdata = array();
391 if ($result->numRows() == 0) {
392 $userdata["fullname"] = $lng->txt("deleted_user");
393 $userdata["title"] = "";
394 $userdata["firstname"] = "";
395 $userdata["lastname"] = $lng->txt("anonymous");
396 $userdata["login"] = "";
397 } else {
398 $data = $ilDB->fetchAssoc($result);
399 if (($user_id == ANONYMOUS_USER_ID) || ($anonymity)) {
400 $userdata["fullname"] = $lng->txt("anonymous");
401 $userdata["title"] = "";
402 $userdata["firstname"] = "";
403 $userdata["lastname"] = $lng->txt("anonymous");
404 $userdata["login"] = "";
405 } else {
406 $userdata["fullname"] = trim($data["title"] . " " . $data["firstname"] . " " . $data["lastname"]);
407 $userdata["title"] = $data["title"];
408 $userdata["firstname"] = $data["firstname"];
409 $userdata["lastname"] = $data["lastname"];
410 $userdata["login"] = $data["login"];
411 }
412 }
413 return array_values($userdata);
414 }
const ANONYMOUS_USER_ID
Definition: constants.php:25

References $data, $DIC, $ilDB, $lng, $result, ilSoapAdministration\__getMessage(), ilSoapAdministration\__getMessageCode(), ilSoapAdministration\__raiseError(), ANONYMOUS_USER_ID, ilSoapAdministration\initAuth(), ilSoapAdministration\initIlias(), and isAllowedCall().

+ Here is the call graph for this function:

◆ hasWritePermissionForTest()

ilSoapTestAdministration::hasWritePermissionForTest (   $active_id)
private

Definition at line 37 of file class.ilSoapTestAdministration.php.

38 {
39 global $DIC;
40
41 $ilDB = $DIC['ilDB'];
42 global $DIC;
43
44 $ilAccess = $DIC['ilAccess'];
45
46 $permission_ok = false;
47 $result = $ilDB->queryF(
48 "SELECT tst_tests.obj_fi FROM tst_active, tst_tests WHERE tst_active.active_id = %s AND tst_active.test_fi = tst_tests.test_id",
49 array('integer'),
50 array($active_id)
51 );
52 $row = $ilDB->fetchAssoc($result);
53 if ($row['obj_fi']) {
54 $obj_id = $row['obj_fi'];
55 foreach ($ref_ids = ilObject::_getAllReferences($obj_id) as $ref_id) {
56 if ($ilAccess->checkAccess("write", "", $ref_id)) {
57 $permission_ok = true;
58 break;
59 }
60 }
61 }
62 return $permission_ok;
63 }

References $DIC, $ilDB, $result, and ilObject\_getAllReferences().

Referenced by isAllowedCall().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isAllowedCall()

ilSoapTestAdministration::isAllowedCall (   $sid,
  $active_id,
  $saveaction = true 
)

Definition at line 65 of file class.ilSoapTestAdministration.php.

66 {
67 global $DIC;
68
69 $ilDB = $DIC['ilDB'];
70 global $DIC;
71
72 $ilUser = $DIC['ilUser'];
73
74 if ($this->hasWritePermissionForTest($active_id)) {
75 return true;
76 }
77
78 if ($saveaction) {
79 $result = $ilDB->queryF(
80 "SELECT * FROM tst_times WHERE active_fi = %s ORDER BY started DESC",
81 array('integer'),
82 array($active_id)
83 );
84 if ($result->numRows()) {
85 $row = $ilDB->fetchAssoc($result);
86 if (preg_match("/(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})/", $row["started"], $matches)) {
87 $time = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
88 $now = time();
89 $diff = $now - $time;
90 $client = explode("::", $sid);
91 global $DIC;
92
93 $ilClientIniFile = $DIC['ilClientIniFile'];
94 $expires = $ilClientIniFile->readVariable('session', 'expire');
95 if ($diff <= $expires) {
96 return true;
97 } else {
98 return false;
99 }
100 } else {
101 return false;
102 }
103 } else {
104 return false;
105 }
106 } else {
107 $result = $ilDB->queryF(
108 "SELECT user_fi FROM tst_active WHERE active_id = %s",
109 array('integer'),
110 array($active_id)
111 );
112 $row = $ilDB->fetchAssoc($result);
113 if ($row['user_fi'] == $ilUser->getId()) {
114 return true;
115 } else {
116 return false;
117 }
118 }
119 }
if($_SERVER['argc']< 4) $client
Definition: cron.php:12
$ilUser
Definition: imgupload.php:18

References $client, $DIC, $ilDB, $ilUser, $result, and hasWritePermissionForTest().

Referenced by getNrOfQuestionsInPass(), getPositionOfQuestion(), getPreviousReachedPoints(), getQuestionSolution(), getTestUserData(), saveQuestion(), and saveQuestionSolution().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ removeTestResults()

ilSoapTestAdministration::removeTestResults (   $sid,
  $test_ref_id,
  $a_user_ids 
)

Remove test results for the chosen test and users.

Parameters
string$sid
int$test_ref_id
array$a_user_ids
Returns
bool

Definition at line 572 of file class.ilSoapTestAdministration.php.

573 {
574 $this->initAuth($sid);
575 $this->initIlias();
576
577 if (!$this->__checkSession($sid)) {
578 return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
579 }
580 if (!strlen($test_ref_id)) {
581 return $this->__raiseError(
582 'No test id given. Aborting!',
583 'Client'
584 );
585 }
586 global $DIC;
587
588 $rbacsystem = $DIC['rbacsystem'];
589 $tree = $DIC['tree'];
590 $ilLog = $DIC['ilLog'];
591
592 if (!$this->checkManageParticipantsAccess($test_ref_id)) {
593 return $this->__raiseError('no permission. Aborting!', 'Client');
594 }
595
596 if (ilObject::_isInTrash($test_ref_id)) {
597 return $this->__raiseError(
598 'Test is trashed. Aborting!',
599 'Client'
600 );
601 }
602
603 if (!$tst = ilObjectFactory::getInstanceByRefId($test_ref_id, false)) {
604 return $this->__raiseError('No test found for id: ' . $test_ref_id, 'Client');
605 }
606 if ($tst->getType() != 'tst') {
607 return $this->__raiseError('Object with ref_id ' . $test_ref_id . ' is not of type test. Aborting', 'Client');
608 }
609
610 // Dirty hack
611 if (isset($a_user_ids['item'])) {
612 $a_user_ids = $a_user_ids['item'];
613 }
614
615 include_once './Modules/Test/classes/class.ilObjTest.php';
616 include_once './Modules/Test/classes/class.ilTestParticipantData.php';
617 require_once 'Modules/Test/classes/class.ilTestParticipantAccessFilter.php';
618 $part = new ilTestParticipantData($GLOBALS['DIC']['ilDB'], $GLOBALS['DIC']['lng']);
619 $part->setParticipantAccessFilter(
621 );
622 $part->setUserIdsFilter((array) $a_user_ids);
623 $part->load($tst->getTestId());
624 $tst->removeTestResults($part);
625
626 return true;
627 }
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id

References $DIC, $GLOBALS, ilSoapAdministration\__getMessage(), ilSoapAdministration\__getMessageCode(), ilSoapAdministration\__raiseError(), ilObject\_isInTrash(), checkManageParticipantsAccess(), ilObjectFactory\getInstanceByRefId(), ilTestParticipantAccessFilter\getManageParticipantsUserFilter(), ilSoapAdministration\initAuth(), and ilSoapAdministration\initIlias().

+ Here is the call graph for this function:

◆ saveQuestion()

ilSoapTestAdministration::saveQuestion (   $sid,
  $active_id,
  $question_id,
  $pass,
  $solution 
)

Definition at line 121 of file class.ilSoapTestAdministration.php.

122 {
123 $this->initAuth($sid);
124 $this->initIlias();
125
126 if (!$this->__checkSession($sid)) {
127 return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
128 }
129 if (!$this->isAllowedCall($sid, $active_id)) {
130 return $this->__raiseError("The required user information is only available for active users.", "");
131 }
132
133 if (is_array($solution) && (array_key_exists("item", $solution))) {
134 $solution = $solution["item"];
135 }
136
137 global $DIC;
138
139 $ilDB = $DIC['ilDB'];
140 $ilUser = $DIC['ilUser'];
141
142 require_once 'Modules/TestQuestionPool/classes/class.ilAssQuestionProcessLockerFactory.php';
143 $processLockerFactory = new ilAssQuestionProcessLockerFactory(new ilSetting('assessment'), $ilDB);
144 $processLockerFactory->setQuestionId($question_id);
145 $processLockerFactory->setUserId($ilUser->getId());
146 include_once("./Modules/Test/classes/class.ilObjAssessmentFolder.php");
147 $processLockerFactory->setAssessmentLogEnabled(ilObjAssessmentFolder::_enabledAssessmentLogging());
148 $processLocker = $processLockerFactory->getLocker();
149
150 $totalrows = 0;
151
152 $processLocker->executePersistWorkingStateLockOperation(function () use (&$totalrows, $processLocker, $active_id, $question_id, $pass, $solution) {
153 $processLocker->executeUserSolutionUpdateLockOperation(function () use (&$totalrows, $active_id, $question_id, $pass, $solution) {
154 $ilDB = $GLOBALS['DIC']['ilDB'];
155 if (($active_id > 0) && ($question_id > 0) && (strlen($pass) > 0)) {
156 $affectedRows = $ilDB->manipulateF(
157 "DELETE FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s",
158 array('integer', 'integer', 'integer'),
159 array($active_id, $question_id, $pass)
160 );
161 }
162 for ($i = 0; $i < count($solution); $i += 3) {
163 $next_id = $ilDB->nextId('tst_solutions');
164 $affectedRows = $ilDB->insert("tst_solutions", array(
165 "solution_id" => array("integer", $next_id),
166 "active_fi" => array("integer", $active_id),
167 "question_fi" => array("integer", $question_id),
168 "value1" => array("clob", $solution[$i]),
169 "value2" => array("clob", $solution[$i+1]),
170 "points" => array("float", $solution[$i+2]),
171 "pass" => array("integer", $pass),
172 "tstamp" => array("integer", time())
173 ));
174 $totalrows += $affectedRows;
175 }
176 });
177
178 if ($totalrows != 0) {
179 include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
180 $question = assQuestion::_instanciateQuestion($question_id);
181 $question->setProcessLocker($processLocker);
182 $question->calculateResultsFromSolution($active_id, $pass);
183 }
184 });
185
186 if ($totalrows == 0) {
187 return $this->__raiseError(
188 "Wrong solution data. ILIAS did not execute any database queries: Solution data: " . print_r($solution, true),
189 'No result'
190 );
191 }
192
193 return true;
194 }
static _instanciateQuestion($question_id)
Creates an instance of a question with a given question id.
static _enabledAssessmentLogging()
check wether assessment logging is enabled or not
ILIAS Setting Class.
$i
Definition: metadata.php:24

References $DIC, $GLOBALS, $i, $ilDB, $ilUser, $pass, ilSoapAdministration\__getMessage(), ilSoapAdministration\__getMessageCode(), ilSoapAdministration\__raiseError(), ilObjAssessmentFolder\_enabledAssessmentLogging(), assQuestion\_instanciateQuestion(), ilSoapAdministration\initAuth(), ilSoapAdministration\initIlias(), and isAllowedCall().

+ Here is the call graph for this function:

◆ saveQuestionSolution()

ilSoapTestAdministration::saveQuestionSolution (   $sid,
  $active_id,
  $question_id,
  $pass,
  $solution 
)

Save the solution of a question.

Parameters
string$sidSession ID
long$active_idActive user ID
integer$question_idQuestion ID
integer$passTest pass
string$solutionXML string containing the solution
Returns
array String array containing the question solution (in triplets of value1, value2, points)

Definition at line 207 of file class.ilSoapTestAdministration.php.

208 {
209 $this->initAuth($sid);
210 $this->initIlias();
211
212 if (!$this->__checkSession($sid)) {
213 return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
214 }
215 if (!$this->isAllowedCall($sid, $active_id)) {
216 return $this->__raiseError("The required user information is only available for active users.", "");
217 }
218
219 $solutions = array();
220 if (preg_match("/<values>(.*?)<\/values>/is", $solution, $matches)) {
221 if (preg_match_all("/<value>(.*?)<\/value><value>(.*?)<\/value><points>(.*?)<\/points>/is", $solution, $matches, PREG_SET_ORDER)) {
222 foreach ($matches as $match) {
223 if (count($match) == 4) {
224 for ($i = 1; $i < count($match); $i++) {
225 array_push($solutions, trim($match[$i]));
226 }
227 }
228 }
229 }
230 }
231
232 if (count($solutions) == 0) {
233 return $this->__raiseError("Wrong solution data. ILIAS did not find one or more solution triplets: $solution", "");
234 }
235
236 // Include main header
237 $ilDB = $GLOBALS['DIC']['ilDB'];
238 if (($active_id > 0) && ($question_id > 0) && (strlen($pass) > 0)) {
239 $affectedRows = $ilDB->manipulateF(
240 "DELETE FROM tst_solutions WHERE active_fi = %s AND question_fi = %s AND pass = %s",
241 array('integer', 'integer', 'integer'),
242 array($active_id, $question_id, $pass)
243 );
244 }
245 $totalrows = 0;
246 for ($i = 0; $i < count($solutions); $i += 3) {
247 $next_id = $ilDB->nextId('tst_solutions');
248 $affectedRows = $ilDB->insert("tst_solutions", array(
249 "solution_id" => array("integer", $next_id),
250 "active_fi" => array("integer", $active_id),
251 "question_fi" => array("integer", $question_id),
252 "value1" => array("clob", $solutions[$i]),
253 "value2" => array("clob", $solutions[$i+1]),
254 "points" => array("float", $solutions[$i+2]),
255 "pass" => array("integer", $pass),
256 "tstamp" => array("integer", time())
257 ));
258 $totalrows += $affectedRows;
259 }
260 if (count($totalrows) == 0) {
261 return $this->__raiseError("Wrong solution data. ILIAS did not execute any database queries");
262 } else {
263 include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
264 $question = assQuestion::_instanciateQuestion($question_id);
265 $question->calculateResultsFromSolution($active_id, $pass);
266 }
267 return "TRUE";
268 }

References $GLOBALS, $i, $ilDB, $pass, ilSoapAdministration\__getMessage(), ilSoapAdministration\__getMessageCode(), ilSoapAdministration\__raiseError(), assQuestion\_instanciateQuestion(), ilSoapAdministration\initAuth(), ilSoapAdministration\initIlias(), and isAllowedCall().

+ Here is the call graph for this function:

The documentation for this class was generated from the following file: