ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
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;
29  const LP_MODE_OBJECTIVES = 4;
30  const LP_MODE_COLLECTION = 5;
31  const LP_MODE_SCORM = 6;
35  const LP_MODE_EVENT = 10;
38  const LP_MODE_UNDEFINED = 13;
39  const LP_MODE_PLUGIN = 14;
42  const LP_MODE_QUESTIONS = 17;
51  const LP_MODE_CMIX_PASSED = 26;
55 
56  const LP_DEFAULT_VISITS = 30; // ???
57 
58  const LP_MODE_LTI_OUTCOME = 31;
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  }
334  return self::LP_DEFAULT_VISITS;
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 }
static _delete($a_obj_id)
static _refreshStatus($a_obj_id, $a_users=null)
Set dirty.
update($a_refresh_lp=true)
static _lookupDBMode($a_obj_id)
foreach($_POST as $key=> $value) $res
$lng
$query
static _lookupDBModeForObjects(array $a_obj_ids)
static _mode2InfoText($a_mode)
static _lookupVisits($a_obj_id)
__construct($a_obj_id)
ilLPObjSettings constructor.
const LP_MODE_CMIX_COMPL_OR_PASSED_WITH_FAILED
global $ilDB
$DIC
Definition: xapitoken.php:46
static _deleteByObjId($a_obj_id)
cloneSettings($a_new_obj_id)
Clone settings.
static getInstance($a_obj_id)
static _mode2Text($a_mode)