ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilLPObjSettings.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
15{
16 public $db = null;
17
18 public $obj_id = null;
19 public $obj_type = null;
20 public $obj_mode = null;
21 public $visits = null;
22
23 public $is_stored = false;
24
26 const LP_MODE_TLT = 1;
27 const LP_MODE_VISITS = 2;
28 const LP_MODE_MANUAL = 3;
31 const LP_MODE_SCORM = 6;
35 const LP_MODE_EVENT = 10;
39 const LP_MODE_PLUGIN = 14;
55
56 const LP_DEFAULT_VISITS = 30; // ???
57
59
61
62 protected static $map = array(
63
64 self::LP_MODE_DEACTIVATED => array('ilLPStatus',
65 'trac_mode_deactivated', 'trac_mode_deactivated_info_new')
66
67 ,self::LP_MODE_TLT => array('ilLPStatusTypicalLearningTime',
68 'trac_mode_tlt', 'trac_mode_tlt_info') // info has dynamic part!
69
70 ,self::LP_MODE_VISITS => array('ilLPStatusVisits',
71 'trac_mode_visits', 'trac_mode_visits_info')
72
73 ,self::LP_MODE_MANUAL => array('ilLPStatusManual',
74 'trac_mode_manual', 'trac_mode_manual_info')
75
76 ,self::LP_MODE_OBJECTIVES => array('ilLPStatusObjectives',
77 'trac_mode_objectives', 'trac_mode_objectives_info')
78
79 ,self::LP_MODE_COLLECTION => array('ilLPStatusCollection',
80 'trac_mode_collection', 'trac_mode_collection_info')
81
82 ,self::LP_MODE_SCORM => array('ilLPStatusSCORM',
83 'trac_mode_scorm', 'trac_mode_scorm_info')
84
85 ,self::LP_MODE_TEST_FINISHED => array('ilLPStatusTestFinished',
86 'trac_mode_test_finished', 'trac_mode_test_finished_info')
87
88 ,self::LP_MODE_TEST_PASSED => array('ilLPStatusTestPassed',
89 'trac_mode_test_passed', 'trac_mode_test_passed_info')
90
91 ,self::LP_MODE_EXERCISE_RETURNED => array('ilLPStatusExerciseReturned',
92 'trac_mode_exercise_returned', 'trac_mode_exercise_returned_info')
93
94 ,self::LP_MODE_EVENT => array('ilLPStatusEvent',
95 'trac_mode_event', 'trac_mode_event_info')
96
97 ,self::LP_MODE_MANUAL_BY_TUTOR => array('ilLPStatusManualByTutor',
98 'trac_mode_manual_by_tutor', 'trac_mode_manual_by_tutor_info')
99
100 ,self::LP_MODE_SCORM_PACKAGE => array('ilLPStatusSCORMPackage',
101 'trac_mode_scorm_package', 'trac_mode_scorm_package_info')
102
103 ,self::LP_MODE_UNDEFINED => null
104
105 ,self::LP_MODE_PLUGIN => array('ilLPStatusPlugin',
106 'trac_mode_plugin', '') // no settings screen, so no info needed
107
108 ,self::LP_MODE_COLLECTION_TLT => array('ilLPStatusCollectionTLT',
109 'trac_mode_collection_tlt', 'trac_mode_collection_tlt_info')
110
111 ,self::LP_MODE_COLLECTION_MANUAL => array('ilLPStatusCollectionManual',
112 'trac_mode_collection_manual', 'trac_mode_collection_manual_info')
113
114 ,self::LP_MODE_QUESTIONS => array('ilLPStatusQuestions',
115 'trac_mode_questions', 'trac_mode_questions_info')
116
117 ,self::LP_MODE_SURVEY_FINISHED => array('ilLPStatusSurveyFinished',
118 'trac_mode_survey_finished', 'trac_mode_survey_finished_info')
119
120 ,self::LP_MODE_VISITED_PAGES => array('ilLPStatusVisitedPages',
121 'trac_mode_visited_pages', 'trac_mode_visited_pages_info')
122
123 ,self::LP_MODE_CONTENT_VISITED => array('ilLPStatusContentVisited',
124 'trac_mode_content_visited', 'trac_mode_content_visited_info')
125
126 ,self::LP_MODE_COLLECTION_MOBS => array('ilLPStatusCollectionMobs',
127 'trac_mode_collection_mobs', 'trac_mode_collection_mobs_info')
128
129 ,self::LP_MODE_STUDY_PROGRAMME => array('ilLPStatusStudyProgramme',
130 'trac_mode_study_programme', '')
131
132 ,self::LP_MODE_INDIVIDUAL_ASSESSMENT => array('ilLPStatusIndividualAssessment',
133 'trac_mode_individual_assessment', 'trac_mode_individual_assessment_info')
134
135 ,self::LP_MODE_CMIX_COMPLETED => array(ilLPStatusCmiXapiCompleted::class,
136 'trac_mode_cmix_completed', 'trac_mode_cmix_completed_info')
137
138 ,self::LP_MODE_CMIX_COMPL_WITH_FAILED => array(ilLPStatusCmiXapiCompletedWithFailed::class,
139 'trac_mode_cmix_compl_with_failed', 'trac_mode_cmix_compl_with_failed_info')
140
141 ,self::LP_MODE_CMIX_PASSED => array(ilLPStatusCmiXapiPassed::class,
142 'trac_mode_cmix_passed', 'trac_mode_cmix_passed_info')
143
144 ,self::LP_MODE_CMIX_PASSED_WITH_FAILED => array(ilLPStatusCmiXapiPassedWithFailed::class,
145 'trac_mode_cmix_passed_with_failed', 'trac_mode_cmix_passed_with_failed_info')
146
147 ,self::LP_MODE_CMIX_COMPLETED_OR_PASSED => array(ilLPStatusCmiXapiCompletedOrPassed::class,
148 'trac_mode_cmix_completed_or_passed', 'trac_mode_cmix_completed_or_passed_info')
149
150 ,self::LP_MODE_CMIX_COMPL_OR_PASSED_WITH_FAILED => array(ilLPStatusCmiXapiCompletedOrPassedWithFailed::class,
151 'trac_mode_cmix_compl_or_passed_with_failed', 'trac_mode_cmix_compl_or_passed_with_failed_info')
152
153 ,self::LP_MODE_LTI_OUTCOME => array(ilLPStatusLtiOutcome::class,
154 'trac_mode_lti_outcome', 'trac_mode_lti_outcome_info')
155
156 ,self::LP_MODE_COURSE_REFERENCE => [
157 'ilLPStatusCourseReference',
158 'trac_mode_course_reference',
159 'trac_mode_course_reference_info'
160 ]
161 );
162
167 public function __construct($a_obj_id)
168 {
169 global $DIC;
170
171 $ilObjDataCache = $DIC['ilObjDataCache'];
172 $ilDB = $DIC['ilDB'];
173
174 $this->db = $ilDB;
175 $this->obj_id = $a_obj_id;
176
177 if (!$this->__read()) {
178 $this->obj_type = $ilObjDataCache->lookupType($this->obj_id);
179
180 include_once "Services/Object/classes/class.ilObjectLP.php";
181 $olp = ilObjectLP::getInstance($this->obj_id);
182 $this->obj_mode = $olp->getDefaultMode();
183 }
184 }
185
193 public function cloneSettings($a_new_obj_id)
194 {
195 global $DIC;
196
197 $ilDB = $DIC['ilDB'];
198
199 $query = "INSERT INTO ut_lp_settings (obj_id,obj_type,u_mode,visits) " .
200 "VALUES( " .
201 $this->db->quote($a_new_obj_id, 'integer') . ", " .
202 $this->db->quote($this->getObjType(), 'text') . ", " .
203 $this->db->quote($this->getMode(), 'integer') . ", " .
204 $this->db->quote($this->getVisits(), 'integer') .
205 ")";
206 $res = $ilDB->manipulate($query);
207 return true;
208 }
209
210 public function getVisits()
211 {
212 return (int) $this->visits ? $this->visits : self::LP_DEFAULT_VISITS;
213 }
214
215 public function setVisits($a_visits)
216 {
217 $this->visits = $a_visits;
218 }
219
220 public function setMode($a_mode)
221 {
222 $this->obj_mode = $a_mode;
223 }
224
225 public function getMode()
226 {
227 return $this->obj_mode;
228 }
229
230 public function getObjId()
231 {
232 return (int) $this->obj_id;
233 }
234
235 public function getObjType()
236 {
237 return $this->obj_type;
238 }
239
240 public function __read()
241 {
242 $res = $this->db->query("SELECT * FROM ut_lp_settings WHERE obj_id = " .
243 $this->db->quote($this->obj_id, 'integer'));
244 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
245 $this->is_stored = true;
246 $this->obj_type = $row->obj_type;
247 $this->obj_mode = $row->u_mode;
248 $this->visits = $row->visits;
249
250 return true;
251 }
252
253 return false;
254 }
255
256 public function update($a_refresh_lp = true)
257 {
258 global $DIC;
259
260 $ilDB = $DIC['ilDB'];
261
262 if (!$this->is_stored) {
263 return $this->insert();
264 }
265 $query = "UPDATE ut_lp_settings SET u_mode = " . $ilDB->quote($this->getMode(), 'integer') . ", " .
266 "visits = " . $ilDB->quote($this->getVisits(), 'integer') . " " .
267 "WHERE obj_id = " . $ilDB->quote($this->getObjId(), 'integer');
268 $res = $ilDB->manipulate($query);
269 $this->__read();
270
271 if ($a_refresh_lp) {
272 $this->doLPRefresh();
273 }
274
275 return true;
276 }
277
278 public function insert()
279 {
280 global $DIC;
281
282 $ilDB = $DIC['ilDB'];
283
284 $query = "INSERT INTO ut_lp_settings (obj_id,obj_type,u_mode,visits) " .
285 "VALUES(" .
286 $ilDB->quote($this->getObjId(), 'integer') . ", " .
287 $ilDB->quote($this->getObjType(), 'text') . ", " .
288 $ilDB->quote($this->getMode(), 'integer') . ", " .
289 $ilDB->quote($this->getVisits(), 'integer') . // #12482
290 ")";
291 $res = $ilDB->manipulate($query);
292 $this->__read();
293
294 $this->doLPRefresh();
295
296 return true;
297 }
298
299 protected function doLPRefresh()
300 {
301 // refresh learning progress
302 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
304 }
305
306 public static function _delete($a_obj_id)
307 {
308 global $DIC;
309
310 $ilDB = $DIC['ilDB'];
311
312 $query = "DELETE FROM ut_lp_settings WHERE obj_id = " . $ilDB->quote($a_obj_id, 'integer');
313 $res = $ilDB->manipulate($query);
314
315 return true;
316 }
317
318
319 // Static
320
321 public static function _lookupVisits($a_obj_id)
322 {
323 global $DIC;
324
325 $ilDB = $DIC['ilDB'];
326
327 $query = "SELECT visits FROM ut_lp_settings " .
328 "WHERE obj_id = " . $ilDB->quote($a_obj_id, 'integer');
329
330 $res = $ilDB->query($query);
331 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
332 return $row->visits;
333 }
335 }
336
337 public static function _lookupDBModeForObjects(array $a_obj_ids)
338 {
339 global $DIC;
340
341 $ilDB = $DIC['ilDB'];
342
343 // this does NOT handle default mode!
344
345 $res = array();
346
347 $query = "SELECT obj_id, u_mode FROM ut_lp_settings" .
348 " WHERE " . $ilDB->in("obj_id", $a_obj_ids, "", "integer");
349 $set = $ilDB->query($query);
350 while ($row = $set->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
351 $res[$row->obj_id] = $row->u_mode;
352 }
353
354 return $res;
355 }
356
357 public static function _lookupDBMode($a_obj_id)
358 {
359 global $DIC;
360
361 $ilDB = $DIC['ilDB'];
362
363 // this does NOT handle default mode!
364
365 $query = "SELECT u_mode FROM ut_lp_settings" .
366 " WHERE obj_id = " . $ilDB->quote($a_obj_id, "integer");
367 $set = $ilDB->query($query);
368 $row = $ilDB->fetchAssoc($set);
369 if (is_array($row)) {
370 return $row['u_mode'];
371 }
372 }
373
374 public static function _mode2Text($a_mode)
375 {
376 global $DIC;
377
378 $lng = $DIC['lng'];
379
380 if (array_key_exists($a_mode, self::$map) &&
381 is_array(self::$map[$a_mode])) {
382 return $lng->txt(self::$map[$a_mode][1]);
383 }
384 }
385
386 public static function _mode2InfoText($a_mode)
387 {
388 global $DIC;
389
390 $lng = $DIC['lng'];
391
392 if (array_key_exists($a_mode, self::$map) &&
393 is_array(self::$map[$a_mode])) {
394 $info = $lng->txt(self::$map[$a_mode][2]);
395
396 if ($a_mode == self::LP_MODE_TLT) {
397 // dynamic content
398 include_once 'Services/Tracking/classes/class.ilObjUserTracking.php';
399 $info = sprintf($info, ilObjUserTracking::_getValidTimeSpan());
400 }
401
402 return $info;
403 }
404 }
405
406 public static function getClassMap()
407 {
408 $res = array();
409 foreach (self::$map as $mode => $item) {
410 $res[$mode] = $item[0];
411 }
412 return $res;
413 }
414
415 public static function _deleteByObjId($a_obj_id)
416 {
417 global $DIC;
418
419 $ilDB = $DIC['ilDB'];
420
421 // we are only removing settings for now
422 // invalid ut_lp_collections-entries are filtered
423 // ut_lp_marks is deemed private user data
424
425 $ilDB->manipulate("DELETE FROM ut_lp_settings" .
426 " WHERE obj_id = " . $ilDB->quote($a_obj_id, "integer"));
427 }
428}
An exception for terminatinating execution or to throw for unit testing.
update($a_refresh_lp=true)
cloneSettings($a_new_obj_id)
Clone settings.
static _lookupVisits($a_obj_id)
static _deleteByObjId($a_obj_id)
const LP_MODE_CMIX_COMPL_OR_PASSED_WITH_FAILED
static _mode2Text($a_mode)
__construct($a_obj_id)
ilLPObjSettings constructor.
static _lookupDBMode($a_obj_id)
static _delete($a_obj_id)
static _lookupDBModeForObjects(array $a_obj_ids)
static _mode2InfoText($a_mode)
static _refreshStatus($a_obj_id, $a_users=null)
Set dirty.
static getInstance($a_obj_id)
global $DIC
Definition: goto.php:24
$query
$lng
foreach($_POST as $key=> $value) $res
global $ilDB