ILIAS  trunk Revision v11.0_alpha-1713-gd8962da2f67
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
class.ilLOUtils.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=0);
24 class ilLOUtils
25 {
29  public static function isCompleted(
30  int $a_cont_oid,
31  int $a_test_rid,
32  int $a_objective_id,
33  int $max_points,
34  int $reached,
35  int $limit_perc
36  ): bool {
37  $settings = ilLOSettings::getInstanceByObjId($a_cont_oid);
38 
39  if (self::lookupRandomTest(ilObject::_lookupObjId($a_test_rid))) {
40  if ($max_points === 0) {
41  return true;
42  } else {
43  return ($reached / $max_points * 100) >= $limit_perc;
44  }
45  } else {
46  $required_perc = self::lookupObjectiveRequiredPercentage(
47  $a_cont_oid,
48  $a_objective_id,
49  $a_test_rid,
50  $max_points
51  );
52 
53  if ($max_points === 0) {
54  return true;
55  } else {
56  return ($reached / $max_points * 100) >= $required_perc;
57  }
58  }
59  }
60 
61  public static function lookupObjectiveRequiredPercentage(
62  int $a_container_id,
63  int $a_objective_id,
64  int $a_test_ref_id,
65  int $a_max_points
66  ): int {
67  $settings = ilLOSettings::getInstanceByObjId($a_container_id);
68  $assignments = ilLOTestAssignments::getInstance($a_container_id);
69  $a_test_type = $assignments->getTypeByTest($a_test_ref_id);
70 
71  if ($assignments->isSeparateTest($a_test_ref_id)) {
72  $factory = new ilObjectFactory();
73  $tst = $factory->getInstanceByRefId($a_test_ref_id, false);
74  if ($tst instanceof ilObjTest) {
75  $schema = $tst->getMarkSchema();
76  foreach ($schema->getMarkSteps() as $mark) {
77  if ($mark->getPassed()) {
78  return (int) $mark->getMinimumLevel();
79  }
80  }
81  }
82  }
83  $tst_ref_id = $a_test_ref_id;
84  if (self::lookupRandomTest(ilObject::_lookupObjId($tst_ref_id))) {
85  return ilLORandomTestQuestionPools::lookupLimit($a_container_id, $a_objective_id, $a_test_type);
86  } else {
87  return ilCourseObjectiveQuestion::loookupTestLimit(ilObject::_lookupObjId($tst_ref_id), $a_objective_id);
88  }
89  }
90 
91  public static function lookupMaxAttempts(int $a_container_id, int $a_objective_id, int $a_test_ref_id): int
92  {
93  global $DIC;
94 
95  $ilDB = $DIC->database();
96 
97  $assignments = ilLOTestAssignments::getInstance($a_container_id);
98  if (!$assignments->isSeparateTest($a_test_ref_id)) {
99  // no limit of tries for tests assigned to multiple objectives.
100  return 0;
101  }
102 
103  $query = 'SELECT nr_of_tries FROM tst_tests ' .
104  'WHERE obj_fi = ' . $ilDB->quote(ilObject::_lookupObjId($a_test_ref_id), 'integer');
105  $res = $ilDB->query($query);
106  while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
107  return (int) $row->nr_of_tries;
108  }
109  return 0;
110  }
111 
112  public static function lookupRandomTest(int $a_test_obj_id): bool
113  {
114  return ilObjTest::_lookupRandomTest($a_test_obj_id);
115  }
116 
120  public static function lookupQplBySequence(int $a_test_ref_id, int $a_sequence_id): string
121  {
123  global $DIC;
124 
125  if (!$a_sequence_id) {
126  return '';
127  }
128  $tst = ilObjectFactory::getInstanceByRefId($a_test_ref_id, false);
129  if (!$tst instanceof ilObjTest) {
130  return '';
131  }
133  $DIC->database(),
134  $tst,
136  $DIC->database(),
137  $tst
138  )
139  );
140 
141  $list->loadDefinitions();
142 
143  $translator = new ilTestQuestionFilterLabelTranslator($DIC['ilDB'], $DIC['lng']);
144  $translator->loadLabels($list);
145 
146  $title = '';
147  foreach ($list as $definition) {
148  if ($definition->getId() != $a_sequence_id) {
149  continue;
150  }
151  $title = self::buildQplTitleByDefinition($definition, $translator);
152  }
153  return $title;
154  }
155 
156  protected static function buildQplTitleByDefinition(
159  ): string {
160  $title = $def->getPoolTitle();
161  $filterTitle = array();
162  $filterTitle[] = $trans->getTaxonomyFilterLabel($def->getMappedTaxonomyFilter());
163  $filterTitle[] = $trans->getTypeFilterLabel($def->getTypeFilter());
164  if (!empty($filterTitle)) {
165  $title .= ' -> ' . implode(' / ', $filterTitle);
166  }
167  return $title;
168  }
169 
170  public static function hasActiveRun(int $a_container_id, int $a_test_ref_id, int $a_objective_id): bool
171  {
172  return false;
173  }
174 
175  public static function getTestResultLinkForUser(int $a_test_ref_id, int $a_user_id): string
176  {
177  global $DIC;
178 
179  $ilCtrl = $DIC->ctrl();
180  $ilUser = $DIC->user();
181  $ilAccess = $DIC->access();
182 
183  if ($ilUser->getId() == ANONYMOUS_USER_ID) {
184  return '';
185  }
186 
187  $valid = $tutor = false;
188  if ($a_user_id == $ilUser->getId()) {
189  $valid = $ilAccess->checkAccess('read', '', $a_test_ref_id);
190  }
191  if (!$valid) {
192  $valid = $ilAccess->checkAccess('write', '', $a_test_ref_id);
193  $tutor = true;
194  }
195  if ($valid) {
196  $testObjId = ilObject::_lookupObjId($a_test_ref_id);
197  if (!$tutor) {
198  if (ilObjTestAccess::visibleUserResultExists($testObjId, $a_user_id)) {
199  $ilCtrl->setParameterByClass('ilObjTestGUI', 'ref_id', $a_test_ref_id);
200  $ctrlClasses = array('ilRepositoryGUI', 'ilObjTestGUI', 'ilTestResultsGUI');
201  $link = $ilCtrl->getLinkTargetByClass($ctrlClasses);
202  $ilCtrl->setParameterByClass('ilObjTestGUI', 'ref_id', '');
203  return $link;
204  }
205  } else {
206  $testId = ilObjTest::_getTestIDFromObjectID($testObjId);
207  if ($testId) {
208  $userActiveId = ilObjTest::_getActiveIdOfUser($a_user_id, $testId);
209  if ($userActiveId) {
210  $ilCtrl->setParameterByClass('ilTestEvaluationGUI', 'ref_id', $a_test_ref_id);
211  $ilCtrl->setParameterByClass('ilTestEvaluationGUI', 'active_id', $userActiveId);
212  $link = $ilCtrl->getLinkTargetByClass(array('ilRepositoryGUI',
213  'ilObjTestGUI',
214  'ilTestEvaluationGUI'
215  ), 'outParticipantsResultsOverview');
216  $ilCtrl->setParameterByClass('ilTestEvaluationGUI', 'ref_id', '');
217  $ilCtrl->setParameterByClass('ilTestEvaluationGUI', 'active_id', '');
218  return $link;
219  }
220  }
221  }
222  }
223  return '';
224  }
225 }
static hasActiveRun(int $a_container_id, int $a_test_ref_id, int $a_objective_id)
static lookupLimit(int $a_container_id, int $a_objective_id, int $a_test_type)
$res
Definition: ltiservices.php:66
static buildQplTitleByDefinition(ilTestRandomQuestionSetSourcePoolDefinition $def, ilTestQuestionFilterLabelTranslator $trans)
const ANONYMOUS_USER_ID
Definition: constants.php:27
$valid
static _lookupRandomTest(int $obj_id)
static loookupTestLimit(int $a_test_id, int $a_objective_id)
static lookupObjectiveRequiredPercentage(int $a_container_id, int $a_objective_id, int $a_test_ref_id, int $a_max_points)
static _lookupObjId(int $ref_id)
static getTestResultLinkForUser(int $a_test_ref_id, int $a_user_id)
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
global $DIC
Definition: shib_login.php:22
getTaxonomyFilterLabel(array $filter=[], string $filter_delimiter='+', string $tax_node_delimiter=':', string $nodes_delimiter=', ')
static _getTestIDFromObjectID($object_id)
Returns the ILIAS test id for a given object id.
Settings for LO courses.
static isCompleted(int $a_cont_oid, int $a_test_rid, int $a_objective_id, int $max_points, int $reached, int $limit_perc)
Check if objective is completed.
static getInstanceByObjId(int $a_obj_id)
static lookupRandomTest(int $a_test_obj_id)
static getInstance(int $a_container_id)
static lookupMaxAttempts(int $a_container_id, int $a_objective_id, int $a_test_ref_id)
static _getActiveIdOfUser($user_id="", $test_id="")
static visibleUserResultExists($test_obj_id, $user_id)