ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilLOUtils.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
10 class ilLOUtils
11 {
12 
16  public static function isCompleted($a_cont_oid, $a_test_rid, $a_objective_id, $max_points, $reached, $limit_perc)
17  {
18  include_once './Modules/Course/classes/Objectives/class.ilLOSettings.php';
19  $settings = ilLOSettings::getInstanceByObjId($a_cont_oid);
20 
21  if (self::lookupRandomTest(ilObject::_lookupObjId($a_test_rid))) {
22  if (!$max_points) {
23  return true;
24  } else {
25  return ($reached / $max_points * 100) >= $limit_perc;
26  }
27  } else {
28  $required_perc = self::lookupObjectiveRequiredPercentage($a_cont_oid, $a_objective_id, $a_test_rid, $max_points);
29 
30  if (!$max_points) {
31  return true;
32  } else {
33  return ($reached / $max_points * 100) >= $required_perc;
34  }
35  }
36  }
37 
44  public static function lookupObjectiveRequiredPercentage($a_container_id, $a_objective_id, $a_test_ref_id, $a_max_points)
45  {
46  include_once './Modules/Course/classes/Objectives/class.ilLOSettings.php';
47  $settings = ilLOSettings::getInstanceByObjId($a_container_id);
48 
49  include_once './Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
50  $assignments = ilLOTestAssignments::getInstance($a_container_id);
51  $a_test_type = $assignments->getTypeByTest($a_test_ref_id);
52 
53  if ($assignments->isSeparateTest($a_test_ref_id)) {
54  include_once './Services/Object/classes/class.ilObjectFactory.php';
55  $factory = new ilObjectFactory();
56  $tst = $factory->getInstanceByRefId($a_test_ref_id, false);
57  if ($tst instanceof ilObjTest) {
58  $schema = $tst->getMarkSchema();
59  foreach ($schema->getMarkSteps() as $mark) {
60  if ($mark->getPassed()) {
61  return (int) $mark->getMinimumLevel();
62  }
63  }
64  }
65  }
66 
67 
68 
69  $tst_ref_id = $a_test_ref_id;
70  if (self::lookupRandomTest(ilObject::_lookupObjId($tst_ref_id))) {
71  include_once './Modules/Course/classes/Objectives/class.ilLORandomTestQuestionPools.php';
72  return (int) ilLORandomTestQuestionPools::lookupLimit($a_container_id, $a_objective_id, $a_test_type);
73  } else {
74  include_once './Modules/Course/classes/class.ilCourseObjectiveQuestion.php';
75  $limit = ilCourseObjectiveQuestion::loookupTestLimit(ilObject::_lookupObjId($tst_ref_id), $a_objective_id);
76  return $limit;
77  }
78  }
79 
87  public static function lookupMaxAttempts($a_container_id, $a_objective_id, $a_test_ref_id)
88  {
89  global $DIC;
90 
91  $ilDB = $DIC['ilDB'];
92 
93  include_once './Modules/Course/classes/Objectives/class.ilLOTestAssignments.php';
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 
118  public static function lookupRandomTest($a_test_obj_id)
119  {
120  include_once './Modules/Test/classes/class.ilObjTest.php';
121  return ilObjTest::_lookupRandomTest($a_test_obj_id);
122  }
123 
130  public static function lookupQplBySequence($a_test_ref_id, $a_sequence_id)
131  {
132  if (!$a_sequence_id) {
133  return '';
134  }
135  $tst = ilObjectFactory::getInstanceByRefId($a_test_ref_id, false);
136  if (!$tst instanceof ilObjTest) {
137  return '';
138  }
139  include_once './Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionList.php';
140  include_once './Modules/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinitionFactory.php';
142  $GLOBALS['DIC']['ilDB'],
143  $tst,
145  $GLOBALS['DIC']['ilDB'],
146  $tst
147  )
148  );
149 
150  $list->loadDefinitions();
151 
152  include_once './Modules/Test/classes/class.ilTestTaxonomyFilterLabelTranslater.php';
154  $translator->loadLabels($list);
155 
156  $title = '';
157  foreach ($list as $definition) {
158  if ($definition->getId() != $a_sequence_id) {
159  continue;
160  }
161  $title = self::buildQplTitleByDefinition($definition, $translator);
162  }
163  return $title;
164  }
165 
171  {
172  $title = $def->getPoolTitle();
173  // fau: taxFilter/typeFilter - get title for extended filter conditions
174  $filterTitle = array();
175  $filterTitle[] = $trans->getTaxonomyFilterLabel($def->getMappedTaxonomyFilter());
176  $filterTitle[] = $trans->getTypeFilterLabel($def->getTypeFilter());
177  if (!empty($filterTitle)) {
178  $title .= ' -> ' . implode(' / ', $filterTitle);
179  }
180  #$tax_id = $def->getMappedFilterTaxId();
181  #if($tax_id)
182  #{
183  # $title .= (' -> '. $trans->getTaxonomyTreeLabel($tax_id));
184  #}
185  #$tax_node = $def->getMappedFilterTaxNodeId();
186  #if($tax_node)
187  #{
188  # $title .= (' -> ' .$trans->getTaxonomyNodeLabel($tax_node));
189  #}
190  // fau.
191  return $title;
192  }
193 
194  public static function hasActiveRun($a_container_id, $a_test_ref_id, $a_objective_id)
195  {
196  return false;
197 
198  // check if pass exists
199  include_once './Modules/Test/classes/class.ilObjTest.php';
200  if (
202  $a_test_ref_id,
203  $GLOBALS['DIC']['ilUser']->getId()
204  )
205  ) {
206  return false;
207  }
208 
209  // check if multiple pass exists
210  include_once './Modules/Course/classes/Objectives/class.ilLOTestRun.php';
211  $last_objectives = ilLOTestRun::lookupObjectives(
212  $a_container_id,
213  $GLOBALS['DIC']['ilUser']->getId(),
214  ilObject::_lookupObjId($a_test_ref_id)
215  );
216 
217  if (count((array) $last_objectives) and in_array((int) $a_objective_id, (array) $last_objectives)) {
218  return true;
219  }
220  return false;
221  }
222 
223  public static function getTestResultLinkForUser($a_test_ref_id, $a_user_id)
224  {
225  global $DIC;
226 
227  $ilCtrl = $DIC['ilCtrl'];
228  $ilUser = $DIC['ilUser'];
229  $ilAccess = $DIC['ilAccess'];
230 
231  if ($ilUser->getId() == ANONYMOUS_USER_ID) {
232  return;
233  }
234 
235  $valid = $tutor = false;
236  if ($a_user_id == $ilUser->getId()) {
237  $valid = $ilAccess->checkAccess('read', '', $a_test_ref_id);
238  }
239  if (!$valid) {
240  $valid = $ilAccess->checkAccess('write', '', $a_test_ref_id);
241  $tutor = true;
242  }
243  if ($valid) {
244  $testObjId = ilObject::_lookupObjId($a_test_ref_id);
245  if (!$tutor) {
246  require_once 'Modules/Test/classes/class.ilObjTestAccess.php';
247  if (ilObjTestAccess::visibleUserResultExists($testObjId, $a_user_id)) {
248  $ilCtrl->setParameterByClass('ilObjTestGUI', 'ref_id', $a_test_ref_id);
249  $ctrlClasses = array('ilRepositoryGUI', 'ilObjTestGUI', 'ilTestResultsGUI');
250  $link = $ilCtrl->getLinkTargetByClass($ctrlClasses);
251  $ilCtrl->setParameterByClass('ilObjTestGUI', 'ref_id', '');
252  return $link;
253  }
254  } else {
255  include_once 'Modules/Test/classes/class.ilObjTest.php';
256  $testId = ilObjTest::_getTestIDFromObjectID($testObjId);
257  if ($testId) {
258  $userActiveId = ilObjTest::_getActiveIdOfUser($a_user_id, $testId);
259  if ($userActiveId) {
260  $ilCtrl->setParameterByClass('ilTestEvaluationGUI', 'ref_id', $a_test_ref_id);
261  $ilCtrl->setParameterByClass('ilTestEvaluationGUI', 'active_id', $userActiveId);
262  $link = $ilCtrl->getLinkTargetByClass(array('ilRepositoryGUI', 'ilObjTestGUI', 'ilTestEvaluationGUI'), 'outParticipantsResultsOverview');
263  $ilCtrl->setParameterByClass('ilTestEvaluationGUI', 'ref_id', '');
264  $ilCtrl->setParameterByClass('ilTestEvaluationGUI', 'active_id', '');
265  return $link;
266  }
267  }
268  }
269  }
270  }
271 }
static isCompleted($a_cont_oid, $a_test_rid, $a_objective_id, $max_points, $reached, $limit_perc)
Check if objective is completed.
static getInstanceByObjId($a_obj_id)
get singleton instance
static loookupTestLimit($a_test_id, $a_objective_id)
static getInstance($a_container_id)
Get instance by container id.
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41
Class ilObjectFactory.
global $DIC
Definition: saml.php:7
static _lookupRandomTest($a_obj_id)
Returns the fact wether the test with passed obj id is a random questions test or not...
$valid
$factory
Definition: metadata.php:43
getTaxonomyFilterLabel($filter=array(), $filterDelimiter='+', $taxNodeDelimiter=':', $nodesDelimiter=', ')
Get the label for a taxonomy filter.
static hasActiveRun($a_container_id, $a_test_ref_id, $a_objective_id)
global $ilCtrl
Definition: ilias.php:18
static lookupObjectives($a_container_id, $a_user_id, $a_test_id)
foreach($_POST as $key=> $value) $res
static visibleUserResultExists($testObjId, $userId)
static lookupRandomTest($a_test_obj_id)
Check if test is a random test.
static _lookupObjId($a_id)
$ilUser
Definition: imgupload.php:18
$query
static lookupObjectiveRequiredPercentage($a_container_id, $a_objective_id, $a_test_ref_id, $a_max_points)
static _getTestIDFromObjectID($object_id)
Returns the ILIAS test id for a given object id.
getTypeFilterLabel($filter=array())
Get the label for a type filter.
Settings for LO courses.
$row
static getTestResultLinkForUser($a_test_ref_id, $a_user_id)
global $ilDB
$def
Definition: croninfo.php:21
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
static lookupLimit($a_container_id, $a_objective_id, $a_test_type)
lookup limit type $ilDB
static isParticipantsLastPassActive($testRefId, $userId)
$translator
Definition: getconsent.php:119
static lookupQplBySequence($a_test_ref_id, $a_sequence_id)
Lookup assigned qpl name (including taxonomy) by sequence.
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
static _getActiveIdOfUser($user_id="", $test_id="")
Gets the active id of the tst_active table for the active user.
static buildQplTitleByDefinition(ilTestRandomQuestionSetSourcePoolDefinition $def, ilTestTaxonomyFilterLabelTranslater $trans)
build title by definition