ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
ilLPStatus Class Reference

Abstract class ilLPStatus for all learning progress modes E.g ilLPStatusManual, ilLPStatusObjectives ... More...

+ Inheritance diagram for ilLPStatus:
+ Collaboration diagram for ilLPStatus:

Public Member Functions

 __construct ($a_obj_id)
 
 _updateStatus ($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
 New status handling (st: status, nr: accesses, p: percentage, t: time spent, m: mark) More...
 
 determinePercentage ($a_obj_id, $a_usr_id, $a_obj=null)
 Determine percentage. More...
 
 determineStatus ($a_obj_id, $a_usr_id, $a_obj=null)
 Determine status. More...
 
 refreshStatus ($a_obj_id, $a_users=null)
 Refresh status. More...
 

Static Public Member Functions

static _getCountNotAttempted ($a_obj_id)
 
static _getNotAttempted ($a_obj_id)
 
static _getCountInProgress ($a_obj_id)
 
static _getInProgress ($a_obj_id)
 
static _getCountCompleted ($a_obj_id)
 
static _getCompleted ($a_obj_id)
 
static _getFailed ($a_obj_id)
 
static _getCountFailed ()
 
static _getStatusInfo ($a_obj_id)
 
static _getTypicalLearningTime ($a_obj_id)
 
static checkStatusForObject ($a_obj_id, $a_users=false)
 This function checks whether the status for a given number of users is dirty and must be recalculated. More...
 
static writeStatus ($a_obj_id, $a_user_id, $a_status, $a_percentage=false, $a_force_per=false)
 Write status for user and object. More...
 
static setInProgressIfNotAttempted ($a_obj_id, $a_user_id)
 This function shoudl be clalled for normal "read events". More...
 
static setAllDirty ()
 Sets all status to dirty. More...
 
static setDirty ($a_obj_id)
 Sets status of an object to dirty. More...
 
static _lookupStatus ($a_obj_id, $a_user_id, $a_create=true)
 Lookup status. More...
 
static _lookupPercentage ($a_obj_id, $a_user_id)
 Lookup percentage. More...
 
static _hasUserCompleted ($a_obj_id, $a_user_id)
 Lookup user object completion. More...
 
static _lookupStatusChanged ($a_obj_id, $a_user_id)
 Lookup status changed. More...
 
static _lookupCompletedForObject ($a_obj_id, $a_user_ids=null)
 Get completed users for object. More...
 
static _lookupFailedForObject ($a_obj_id, $a_user_ids=null)
 Get failed users for object. More...
 
static _lookupInProgressForObject ($a_obj_id, $a_user_ids=null)
 Get in progress users for object. More...
 
static preloadListGUIData ($a_obj_ids)
 
static getListGUIStatus ($a_obj_id)
 

Data Fields

 $obj_id = null
 
 $db = null
 
const LP_STATUS_NOT_ATTEMPTED = 'trac_no_attempted'
 
const LP_STATUS_IN_PROGRESS = 'trac_in_progress'
 
const LP_STATUS_COMPLETED = 'trac_completed'
 
const LP_STATUS_FAILED = 'trac_failed'
 
const LP_STATUS_NOT_ATTEMPTED_NUM = 0
 
const LP_STATUS_IN_PROGRESS_NUM = 1
 
const LP_STATUS_COMPLETED_NUM = 2
 
const LP_STATUS_FAILED_NUM = 3
 
const LP_STATUS_REGISTERED = 'trac_registered'
 
const LP_STATUS_NOT_REGISTERED = 'trac_not_registered'
 
const LP_STATUS_PARTICIPATED = 'trac_participated'
 
const LP_STATUS_NOT_PARTICIPATED = 'trac_not_participated'
 

Static Public Attributes

static $list_gui_cache
 

Static Protected Member Functions

static raiseEvent ($a_obj_id, $a_usr_id, $a_status, $a_percentage)
 
static _lookupStatusForObject ($a_obj_id, $a_status, $a_user_ids=null)
 Get users with given status for object. More...
 
static validateLPForObjects ($a_user_id, $a_obj_ids, $a_parent_ref_id)
 Process given objects for lp-relevance. More...
 
static checkLPModesForObjects ($a_obj_ids, array &$a_coll_obj_ids)
 Process lp modes for given objects. More...
 
static getLPStatusForObjects ($a_user_id, $a_obj_ids)
 Get LP status for given objects (and user) More...
 

Detailed Description

Abstract class ilLPStatus for all learning progress modes E.g ilLPStatusManual, ilLPStatusObjectives ...

Author
Stefan Meyer meyer.nosp@m.@lei.nosp@m.fos.c.nosp@m.om
Version
$Id$

Definition at line 15 of file class.ilLPStatus.php.

Constructor & Destructor Documentation

◆ __construct()

ilLPStatus::__construct (   $a_obj_id)

Definition at line 38 of file class.ilLPStatus.php.

References $ilDB.

39  {
40  global $ilDB;
41 
42  $this->obj_id = $a_obj_id;
43  $this->db = $ilDB;
44  }
global $ilDB

Member Function Documentation

◆ _getCompleted()

static ilLPStatus::_getCompleted (   $a_obj_id)
static

Definition at line 71 of file class.ilLPStatus.php.

References array.

72  {
73  return array();
74  }
Create styles array
The data for the language used.

◆ _getCountCompleted()

static ilLPStatus::_getCountCompleted (   $a_obj_id)
static

Definition at line 66 of file class.ilLPStatus.php.

67  {
68  return 0;
69  }

◆ _getCountFailed()

static ilLPStatus::_getCountFailed ( )
static

Definition at line 81 of file class.ilLPStatus.php.

82  {
83  return 0;
84  }

◆ _getCountInProgress()

static ilLPStatus::_getCountInProgress (   $a_obj_id)
static

Definition at line 56 of file class.ilLPStatus.php.

57  {
58  return 0;
59  }

◆ _getCountNotAttempted()

static ilLPStatus::_getCountNotAttempted (   $a_obj_id)
static

Definition at line 46 of file class.ilLPStatus.php.

47  {
48  return 0;
49  }

◆ _getFailed()

static ilLPStatus::_getFailed (   $a_obj_id)
static

Definition at line 76 of file class.ilLPStatus.php.

References array.

77  {
78  return array();
79  }
Create styles array
The data for the language used.

◆ _getInProgress()

static ilLPStatus::_getInProgress (   $a_obj_id)
static

Definition at line 61 of file class.ilLPStatus.php.

References array.

62  {
63  return array();
64  }
Create styles array
The data for the language used.

◆ _getNotAttempted()

static ilLPStatus::_getNotAttempted (   $a_obj_id)
static

Definition at line 51 of file class.ilLPStatus.php.

References array.

52  {
53  return array();
54  }
Create styles array
The data for the language used.

◆ _getStatusInfo()

static ilLPStatus::_getStatusInfo (   $a_obj_id)
static

Definition at line 86 of file class.ilLPStatus.php.

References array.

87  {
88  return array();
89  }
Create styles array
The data for the language used.

◆ _getTypicalLearningTime()

static ilLPStatus::_getTypicalLearningTime (   $a_obj_id)
static

Definition at line 91 of file class.ilLPStatus.php.

References ilMDEducational\_getTypicalLearningTimeSeconds().

92  {
93  include_once 'Services/MetaData/classes/class.ilMDEducational.php';
95  }
static _getTypicalLearningTimeSeconds($a_rbac_id, $a_obj_id=0)
+ Here is the call graph for this function:

◆ _hasUserCompleted()

static ilLPStatus::_hasUserCompleted (   $a_obj_id,
  $a_user_id 
)
static

Lookup user object completion.

Parameters
int$a_obj_id
int$a_user_id
Returns
bool

Definition at line 625 of file class.ilLPStatus.php.

Referenced by ilConditionHandler\_checkCondition(), ilObjSAHSLearningModuleAccess\_lookupUserCertificate(), ilTimingCache\_showWarning(), ilObjSAHSLearningModuleAccess\checkCondition(), ilObjStudyProgramme\getCompletedCourses(), ilSCORMVerificationTableGUI\getItems(), ilContainerStartObjects\isFullfilled(), and ilCourseStart\isFullfilled().

626  {
627  return (self::_lookupStatus($a_obj_id, $a_user_id) == self::LP_STATUS_COMPLETED_NUM);
628  }
+ Here is the caller graph for this function:

◆ _lookupCompletedForObject()

static ilLPStatus::_lookupCompletedForObject (   $a_obj_id,
  $a_user_ids = null 
)
static

Get completed users for object.

Parameters
int$a_obj_id
array$a_user_ids
Returns
array

Definition at line 710 of file class.ilLPStatus.php.

711  {
712  return self::_lookupStatusForObject($a_obj_id, self::LP_STATUS_COMPLETED_NUM, $a_user_ids);
713  }

◆ _lookupFailedForObject()

static ilLPStatus::_lookupFailedForObject (   $a_obj_id,
  $a_user_ids = null 
)
static

Get failed users for object.

Parameters
int$a_obj_id
array$a_user_ids
Returns
array

Definition at line 722 of file class.ilLPStatus.php.

723  {
724  return self::_lookupStatusForObject($a_obj_id, self::LP_STATUS_FAILED_NUM, $a_user_ids);
725  }

◆ _lookupInProgressForObject()

static ilLPStatus::_lookupInProgressForObject (   $a_obj_id,
  $a_user_ids = null 
)
static

Get in progress users for object.

Parameters
int$a_obj_id
array$a_user_ids
Returns
array

Definition at line 734 of file class.ilLPStatus.php.

735  {
736  return self::_lookupStatusForObject($a_obj_id, self::LP_STATUS_IN_PROGRESS_NUM, $a_user_ids);
737  }

◆ _lookupPercentage()

static ilLPStatus::_lookupPercentage (   $a_obj_id,
  $a_user_id 
)
static

Lookup percentage.

Parameters
int$a_obj_idobject id
int$a_user_iduser id

Definition at line 603 of file class.ilLPStatus.php.

References $ilDB.

Referenced by ilLearningProgressBaseGUI\__appendLPDetails(), and ilObjSCORMLearningModule\importRaw().

604  {
605  global $ilDB;
606 
607  $set = $ilDB->query("SELECT percentage FROM ut_lp_marks WHERE ".
608  " status_dirty = ".$ilDB->quote(0, "integer").
609  " AND usr_id = ".$ilDB->quote($a_user_id, "integer").
610  " AND obj_id = ".$ilDB->quote($a_obj_id, "integer")
611  );
612  if ($rec = $ilDB->fetchAssoc($set))
613  {
614  return $rec["percentage"];
615  }
616  }
global $ilDB
+ Here is the caller graph for this function:

◆ _lookupStatus()

static ilLPStatus::_lookupStatus (   $a_obj_id,
  $a_user_id,
  $a_create = true 
)
static

Lookup status.

Parameters
int$a_obj_idobject id
int$a_user_iduser id
bool$a_create

Definition at line 568 of file class.ilLPStatus.php.

References $ilDB, and ilLPStatusWrapper\_updateStatus().

Referenced by ilLearningProgressBaseGUI\__readStatus(), ilObjSAHSLearningModuleAccess\checkCondition(), ilObjCourse\checkLPStatusSync(), ilCourseLPBadge\evaluate(), ilCourseMailTemplateTutorContext\getDescription(), ilScormMailTemplateLPContext\getDescription(), ilSoapSCORMAdministration\getSCORMCompletionStatus(), ilObjSCORMInitData\getStatus(), ilObjSCORMLearningModule\importRaw(), ilLearningProgressBaseGUI\initEditUserForm(), and ilTestPassFinishTasks\updateLearningProgressAfterPassFinishedIsWritten().

569  {
570  global $ilDB;
571 
572  $set = $ilDB->query("SELECT status FROM ut_lp_marks WHERE ".
573  " status_dirty = ".$ilDB->quote(0, "integer").
574  " AND usr_id = ".$ilDB->quote($a_user_id, "integer").
575  " AND obj_id = ".$ilDB->quote($a_obj_id, "integer")
576  );
577  if ($rec = $ilDB->fetchAssoc($set))
578  {
579  return $rec["status"];
580  }
581  else if((bool)$a_create)
582  {
583  include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
584  ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id);
585  $set = $ilDB->query("SELECT status FROM ut_lp_marks WHERE ".
586  " status_dirty = ".$ilDB->quote(0, "integer").
587  " AND usr_id = ".$ilDB->quote($a_user_id, "integer").
588  " AND obj_id = ".$ilDB->quote($a_obj_id, "integer")
589  );
590  if ($rec = $ilDB->fetchAssoc($set))
591  {
592  return $rec["status"];
593  }
594  }
595  }
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
global $ilDB
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _lookupStatusChanged()

static ilLPStatus::_lookupStatusChanged (   $a_obj_id,
  $a_user_id 
)
static

Lookup status changed.

Parameters
int$a_obj_idobject id
int$a_user_iduser id

Definition at line 636 of file class.ilLPStatus.php.

References $ilDB, and ilLPStatusWrapper\_updateStatus().

Referenced by ilCertificateAdapter\getUserCompletionDate().

637  {
638  global $ilDB;
639 
640  $set = $ilDB->query("SELECT status_changed FROM ut_lp_marks WHERE ".
641  " status_dirty = ".$ilDB->quote(0, "integer").
642  " AND usr_id = ".$ilDB->quote($a_user_id, "integer").
643  " AND obj_id = ".$ilDB->quote($a_obj_id, "integer")
644  );
645  if ($rec = $ilDB->fetchAssoc($set))
646  {
647  return $rec["status_changed"];
648  }
649  else
650  {
651  include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
652  ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id);
653  $set = $ilDB->query("SELECT status_changed FROM ut_lp_marks WHERE ".
654  " status_dirty = ".$ilDB->quote(0, "integer").
655  " AND usr_id = ".$ilDB->quote($a_user_id, "integer").
656  " AND obj_id = ".$ilDB->quote($a_obj_id, "integer")
657  );
658  if ($rec = $ilDB->fetchAssoc($set))
659  {
660  return $rec["status_changed"];
661  }
662  }
663  }
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
global $ilDB
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _lookupStatusForObject()

static ilLPStatus::_lookupStatusForObject (   $a_obj_id,
  $a_status,
  $a_user_ids = null 
)
staticprotected

Get users with given status for object.

Parameters
int$a_obj_id
int$a_status
array$a_user_ids
Returns
array

Definition at line 673 of file class.ilLPStatus.php.

References $ilDB, $res, and array.

674  {
675  global $ilDB;
676 
677  $sql = "SELECT usr_id, status, status_dirty FROM ut_lp_marks".
678  " WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer").
679  " AND status = ".$ilDB->quote($a_status, "integer");
680  if($a_user_ids)
681  {
682  $sql .= " AND ".$ilDB->in("usr_id", $a_user_ids, "", "integer");
683  }
684 
685  $set = $ilDB->query($sql);
686  $res = array();
687  while($rec = $ilDB->fetchAssoc($set))
688  {
689  if($res["status_dirty"])
690  {
691  // update status and check again
692  if(self::_lookupStatus($a_obj_id, $rec["usr_id"]) != $a_status)
693  {
694  continue;
695  }
696  }
697  $res[] = $rec["usr_id"];
698  }
699 
700  return $res;
701  }
Create styles array
The data for the language used.
global $ilDB

◆ _updateStatus()

ilLPStatus::_updateStatus (   $a_obj_id,
  $a_usr_id,
  $a_obj = null,
  $a_percentage = false,
  $a_force_raise = false 
)

New status handling (st: status, nr: accesses, p: percentage, t: time spent, m: mark)

Learning progress:

Added determine Status to:

Updating the status:

- ilLearningProgress->_tracProgress() added to:

  • ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id); added to: – ilInfoScreenGUI->saveProgress() – ilLMPresentation->ilPage() – ilLPListOfObjectsGUI->updateUser() – ilCourseObjectiveResult->reset() – ilCourseObjectiveResult->__updatePassed() – ilEventParticipants->updateUser() – ilEventParticipants->_updateParticipation() – ilEventParticipants->_register() – ilEventParticipants->_unregister() – ilExerciseMembers->assignMember() – ilExerciseMembers->deassignMember() – ilExerciseMembers->ilClone() – ilExerciseMembers->writeStatus() – ilExerciseMembers->writeReturned() – ilSCORM13Player->writeGObjective() – ilObjSCORM2004LearningModule->deleteTrackingDataOfUsers() – ilObjSCORM2004LearningModule->importSuccess() – ilObjSCORM2004LearningModuleGUI->confirmedDeleteTracking() – ilSCORM13Player->removeCMIData() – ilSCORM13Player->setCMIData() – ilObjSCORMLearningModule->importSuccess() – ilObjSCORMLearningModule->importRaw() – ilObjSCORMLearningModuleGUI->confirmedDelete() – ilObjSCORMLearningModuleGUI->decreaseAttempt() – ilObjSCORMTracking->store() – ilObjSCORMTracking-> _insertTrackData() – ilSCORMPresentationGUI->increase_attemptAndsave_module_version() – ilTestScoringGUI->setPointsManual() – ilTestSession->increaseTestPass() – ilTestSession->saveToDb()
  • ilLPStatusWrapper::_refreshStatus($a_ojb_id); aufgenommen in: – ilCourseObjective->add() – ilCourseObjective->delete() – ilCourseObjective->deleteAll() – ilExerciseMembers->delete() – ilSCORM13Package->removeCMIData() – ilAICCCourse->delete() – ilAICCUnit->delete() – ilObjAICCLearningModule->delete() – ilSCORMItem->delete() – ilLPStatusWrapper->update() – ilLPListOfSettingsGUI->assign() – ilLPListOfSettingsGUI->deassign() – ilLPListOfSettingsGUI->groupMaterials() – ilLPListOfSettingsGUI->releaseMaterials() – ilObjTestGUI->confirmDeleteAllUserResultsObject move to ilObjTest but this can ba called for each single question – ilConditionHandlerGUI->updateCondition()
  • external time/access values for read events ilChangeEvent::_recordReadEvent($a_obj_id, $a_user_id, false, $attempts, $time); – ilObjSCORMTracking->_syncReadEvent in ilObjSCORMTracking->store() (add to refresh) – ilSCORM2004Tracking->_syncReadEvent in ilSCORM13Player->setCMIData() Write status
Parameters

Definition at line 201 of file class.ilLPStatus.php.

References $changed, $log, determinePercentage(), determineStatus(), and ilLoggerFactory\getLogger().

202  {
204  $log->debug("obj_id: ".$a_obj_id.", user id: ".$a_usr_id.", object: ".
205  get_class($a_obj));
206 
207  $status = $this->determineStatus($a_obj_id, $a_usr_id, $a_obj);
208  $percentage = $this->determinePercentage($a_obj_id, $a_usr_id, $a_obj);
209  $changed = self::writeStatus($a_obj_id, $a_usr_id, $status, $percentage);
210 
211  // ak: I don't think that this is a good way to fix 15529, we should not
212  // raise the event, if the status does not change imo.
213  // for now the changes in the next line just prevent the event being raised twice
214  if(!$changed && (bool)$a_force_raise) // #15529
215  {
216  self::raiseEvent($a_obj_id, $a_usr_id, $status, $percentage);
217  }
218  }
determineStatus($a_obj_id, $a_usr_id, $a_obj=null)
Determine status.
static getLogger($a_component_id)
Get component logger.
determinePercentage($a_obj_id, $a_usr_id, $a_obj=null)
Determine percentage.
+ Here is the call graph for this function:

◆ checkLPModesForObjects()

static ilLPStatus::checkLPModesForObjects (   $a_obj_ids,
array $a_coll_obj_ids 
)
staticprotected

Process lp modes for given objects.

Parameters
array$a_obj_ids
Returns
array

Definition at line 775 of file class.ilLPStatus.php.

References $obj_id, $valid, ilLPObjSettings\_lookupDBModeForObjects(), array, ilLPCollection\getCollectionModes(), ilObjectLP\getInstance(), ilLPObjSettings\LP_MODE_DEACTIVATED, and ilLPObjSettings\LP_MODE_UNDEFINED.

776  {
777  $valid = array();
778 
779  // all lp modes with collections (gathered separately)
780  include_once "Services/Tracking/classes/collection/class.ilLPCollection.php";
781  $coll_modes = ilLPCollection::getCollectionModes();
782 
783  include_once "Services/Tracking/classes/class.ilLPObjSettings.php";
784 
785  // check if objects have LP activated at all (DB entries)
786  $existing = ilLPObjSettings::_lookupDBModeForObjects($a_obj_ids);
787  foreach($existing as $obj_id => $obj_mode)
788  {
789  if($obj_mode != ilLPObjSettings::LP_MODE_DEACTIVATED)
790  {
792 
793  if(in_array($obj_mode, $coll_modes))
794  {
795  $a_coll_obj_ids[] = $obj_id;
796  }
797  }
798  }
799 
800  // missing objects in DB (default mode)
801  include_once "Services/Object/classes/class.ilObjectLP.php";
802  if(sizeof($existing) != sizeof($a_obj_ids))
803  {
804  foreach(array_diff($a_obj_ids, $existing) as $obj_id)
805  {
806  $olp = ilObjectLP::getInstance($obj_id);
807  $mode = $olp->getCurrentMode();
809  {
810  // #11141
811  unset($valid[$obj_id]);
812  }
813  else if($mode != ilLPObjSettings::LP_MODE_UNDEFINED)
814  {
816 
817  if(in_array($mode, $coll_modes))
818  {
819  $a_coll_obj_ids[] = $obj_id;
820  }
821  }
822  }
823  unset($existing);
824  }
825 
826  return array_values($valid);
827  }
$valid
static _lookupDBModeForObjects(array $a_obj_ids)
Create styles array
The data for the language used.
static getInstance($a_obj_id)
+ Here is the call graph for this function:

◆ checkStatusForObject()

static ilLPStatus::checkStatusForObject (   $a_obj_id,
  $a_users = false 
)
static

This function checks whether the status for a given number of users is dirty and must be recalculated.

"Missing" records are not inserted!

Parameters

Definition at line 250 of file class.ilLPStatus.php.

References $ilDB, $r, and ilLPStatusFactory\_getInstance().

Referenced by ilTrQuery\refreshObjectsStatus().

251  {
252  global $ilDB;
253 
254 //@todo: there maybe the need to add extra handling for sessions here, since the
255 // "in progress" status is time dependent here. On the other hand, if they registered
256 // to the session, they already accessed the course and should have a "in progress"
257 // anyway. But the status on the session itself may not be correct.
258 
259  $sql = "SELECT usr_id FROM ut_lp_marks WHERE ".
260  " obj_id = ".$ilDB->quote($a_obj_id, "integer")." AND ".
261  " status_dirty = ".$ilDB->quote(1, "integer");
262  if(is_array($a_users) && count($a_users) > 0)
263  {
264  $sql .= " AND ".$ilDB->in("usr_id", $a_users, false, "integer");
265  }
266  $set = $ilDB->query($sql);
267  $dirty = false;
268  if ($rec = $ilDB->fetchAssoc($set))
269  {
270  $dirty = true;
271  }
272 
273  // check if any records are missing
274  $missing = false;
275  if (!$dirty && is_array($a_users) && count($a_users) > 0)
276  {
277  $set = $ilDB->query("SELECT count(usr_id) cnt FROM ut_lp_marks WHERE ".
278  " obj_id = ".$ilDB->quote($a_obj_id, "integer")." AND ".
279  $ilDB->in("usr_id", $a_users, false, "integer"));
280  $r = $ilDB->fetchAssoc($set);
281  if ($r["cnt"] < count($a_users))
282  {
283  $missing = true;
284  }
285  }
286 
287  // refresh status, if records are dirty or missing
288  if ($dirty || $missing)
289  {
290  require_once "Services/Tracking/classes/class.ilLPStatusFactory.php"; // #13330
291  $trac_obj = ilLPStatusFactory::_getInstance($a_obj_id);
292  $trac_obj->refreshStatus($a_obj_id, $a_users);
293  }
294  }
$r
Definition: example_031.php:79
static _getInstance($a_obj_id, $a_mode=NULL)
global $ilDB
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ determinePercentage()

ilLPStatus::determinePercentage (   $a_obj_id,
  $a_usr_id,
  $a_obj = null 
)

Determine percentage.

Parameters

Definition at line 226 of file class.ilLPStatus.php.

Referenced by _updateStatus(), and refreshStatus().

227  {
228  return false;
229  }
+ Here is the caller graph for this function:

◆ determineStatus()

ilLPStatus::determineStatus (   $a_obj_id,
  $a_usr_id,
  $a_obj = null 
)

Determine status.

Parameters

Definition at line 237 of file class.ilLPStatus.php.

Referenced by ilLPStatusDownloaded\_getCompleted(), and _updateStatus().

238  {
239  return false;
240  }
+ Here is the caller graph for this function:

◆ getListGUIStatus()

static ilLPStatus::getListGUIStatus (   $a_obj_id)
static

Definition at line 920 of file class.ilLPStatus.php.

Referenced by ilObjectListGUI\insertProperties().

921  {
922  return self::$list_gui_cache[$a_obj_id];
923  }
+ Here is the caller graph for this function:

◆ getLPStatusForObjects()

static ilLPStatus::getLPStatusForObjects (   $a_user_id,
  $a_obj_ids 
)
staticprotected

Get LP status for given objects (and user)

Parameters
int$a_user_id
array$a_obj_ids
Returns
array

Definition at line 836 of file class.ilLPStatus.php.

References $ilDB, $obj_id, $res, $row, and array.

837  {
838  global $ilDB;
839 
840  $res = array();
841 
842  // get user lp data
843  $sql = "SELECT status, status_dirty, obj_id FROM ut_lp_marks".
844  " WHERE ".$ilDB->in("obj_id", $a_obj_ids, "", "integer").
845  " AND usr_id = ".$ilDB->quote($a_user_id, "integer");
846  $set = $ilDB->query($sql);
847  while($row = $ilDB->fetchAssoc($set))
848  {
849  if(!$row["status_dirty"])
850  {
851  $res[$row["obj_id"]] = $row["status"];
852  }
853  else
854  {
855  $res[$row["obj_id"]] = self::_lookupStatus($row["obj_id"], $a_user_id);
856  }
857  }
858 
859  // process missing user entries (same as dirty entries, see above)
860  foreach($a_obj_ids as $obj_id)
861  {
862  if(!isset($res[$obj_id]))
863  {
864  $res[$obj_id] = self::_lookupStatus($obj_id, $a_user_id);
865  if($res[$obj_id] === null)
866  {
867  $res[$obj_id] = self::LP_STATUS_NOT_ATTEMPTED_NUM;
868  }
869  }
870  }
871 
872  return $res;
873  }
Create styles array
The data for the language used.
global $ilDB

◆ preloadListGUIData()

static ilLPStatus::preloadListGUIData (   $a_obj_ids)
static

Definition at line 875 of file class.ilLPStatus.php.

References $_GET, $ilUser, $lng, $obj_id, $path, $res, $text, ilObjUserTracking\_enabledLearningProgress(), ilLearningProgressBaseGUI\_getImagePathForStatus(), ilLearningProgressBaseGUI\_getStatusText(), ilObjUserTracking\_hasLearningProgressLearner(), ilObjUserTracking\_hasLearningProgressListGUI(), array, and ilUtil\img().

Referenced by ilObjectListGUIPreloader\preload().

876  {
877  global $ilUser, $lng;
878 
879  $user_id = $ilUser->getId();
880 
881  $res = array();
882 
883  include_once("Services/Tracking/classes/class.ilObjUserTracking.php");
884  if($ilUser->getId() != ANONYMOUS_USER_ID &&
888  {
889  // -- validate
890 
891  // :TODO: we need the parent ref id, but this is awful
892  $a_obj_ids = self::validateLPForObjects($user_id, $a_obj_ids, (int)$_GET["ref_id"]);
893 
894  // we are not handling the collections differently yet
895  $coll_obj_ids = array();
896  $a_obj_ids = self::checkLPModesForObjects($a_obj_ids, $coll_obj_ids);
897 
898 
899  // -- gather
900 
901  $res = self::getLPStatusForObjects($user_id, $a_obj_ids);
902 
903 
904  // -- render
905 
906  // value to icon
907  $lng->loadLanguageModule("trac");
908  include_once("./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php");
909  foreach($res as $obj_id => $status)
910  {
914  }
915  }
916 
917  self::$list_gui_cache = $res;
918  }
$path
Definition: aliased.php:25
static _getImagePathForStatus($a_status)
Get image path for status.
$_GET["client_id"]
static _getStatusText($a_status, $a_lng=null)
Get status alt text.
static _enabledLearningProgress()
check wether learing progress is enabled or not
$ilUser
Definition: imgupload.php:18
Create styles array
The data for the language used.
static img($a_src, $a_alt="", $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
global $lng
Definition: privfeed.php:17
$text
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ raiseEvent()

static ilLPStatus::raiseEvent (   $a_obj_id,
  $a_usr_id,
  $a_status,
  $a_percentage 
)
staticprotected

Definition at line 296 of file class.ilLPStatus.php.

References $log, array, and ilLoggerFactory\getLogger().

297  {
298  global $ilAppEventHandler;
299 
301  $log->debug("obj_id: ".$a_obj_id.", user id: ".$a_usr_id.", status: ".
302  $a_status.", percentage: ".$a_percentage);
303 
304  $ilAppEventHandler->raise("Services/Tracking", "updateStatus", array(
305  "obj_id" => $a_obj_id,
306  "usr_id" => $a_usr_id,
307  "status" => $a_status,
308  "percentage" => $a_percentage
309  ));
310  }
Create styles array
The data for the language used.
static getLogger($a_component_id)
Get component logger.
+ Here is the call graph for this function:

◆ refreshStatus()

ilLPStatus::refreshStatus (   $a_obj_id,
  $a_users = null 
)

Refresh status.

Parameters

Definition at line 318 of file class.ilLPStatus.php.

References $failed, ilLPStatusWrapper\_getCompleted(), ilLPStatusWrapper\_getFailed(), ilLPStatusWrapper\_getInProgress(), ilLPStatusWrapper\_getNotAttempted(), ilLPStatusWrapper\_updateStatus(), and determinePercentage().

319  {
320  include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
321  $not_attempted = ilLPStatusWrapper::_getNotAttempted($a_obj_id);
322  foreach ($not_attempted as $user_id)
323  {
324  $percentage = $this->determinePercentage($a_obj_id, $user_id);
325  if(self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, $percentage, true))
326  {
327  //self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, $percentage);
328  }
329  }
330  $in_progress = ilLPStatusWrapper::_getInProgress($a_obj_id);
331  foreach ($in_progress as $user_id)
332  {
333  $percentage = $this->determinePercentage($a_obj_id, $user_id);
334  if(self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_IN_PROGRESS_NUM, $percentage, true))
335  {
336  //self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_IN_PROGRESS_NUM, $percentage);
337  }
338  }
339  $completed = ilLPStatusWrapper::_getCompleted($a_obj_id);
340  foreach ($completed as $user_id)
341  {
342  $percentage = $this->determinePercentage($a_obj_id, $user_id);
343  if(self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_COMPLETED_NUM, $percentage, true))
344  {
345  //self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_COMPLETED_NUM, $percentage);
346  }
347  }
349  foreach ($failed as $user_id)
350  {
351  $percentage = $this->determinePercentage($a_obj_id, $user_id);
352  if(self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_FAILED_NUM, $percentage, true))
353  {
354  //self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_FAILED_NUM, $percentage);
355  }
356  }
357  if($a_users)
358  {
359  $missing_users = array_diff($a_users, $not_attempted+$in_progress+$completed+$failed);
360  if($missing_users)
361  {
362  foreach ($missing_users as $user_id)
363  {
364  ilLPStatusWrapper::_updateStatus($a_obj_id, $user_id);
365  }
366  }
367  }
368  }
static _getInProgress($a_obj_id)
Static function to read users who have the status &#39;in_progress&#39;.
static _getCompleted($a_obj_id)
Static function to read the users who have the status &#39;completed&#39;.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
static _getNotAttempted($a_obj_id)
Static function to read the number of user who have the status &#39;not_attempted&#39;.
static _getFailed($a_obj_id)
Static function to read the users who have the status &#39;completed&#39;.
$failed
Definition: Utf8Test.php:85
determinePercentage($a_obj_id, $a_usr_id, $a_obj=null)
Determine percentage.
+ Here is the call graph for this function:

◆ setAllDirty()

static ilLPStatus::setAllDirty ( )
static

Sets all status to dirty.

For testing puproses.

Parameters

Definition at line 535 of file class.ilLPStatus.php.

References $ilDB.

536  {
537  global $ilDB;
538 
539  $ilDB->manipulate("UPDATE ut_lp_marks SET ".
540  " status_dirty = ".$ilDB->quote(1, "integer")
541  );
542 
543  }
global $ilDB

◆ setDirty()

static ilLPStatus::setDirty (   $a_obj_id)
static

Sets status of an object to dirty.

Parameters
integerobject id
Returns

Definition at line 551 of file class.ilLPStatus.php.

References $ilDB.

552  {
553  global $ilDB;
554 
555  $ilDB->manipulate("UPDATE ut_lp_marks SET ".
556  " status_dirty = ".$ilDB->quote(1, "integer").
557  " WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer")
558  );
559  }
global $ilDB

◆ setInProgressIfNotAttempted()

static ilLPStatus::setInProgressIfNotAttempted (   $a_obj_id,
  $a_user_id 
)
static

This function shoudl be clalled for normal "read events".

The "in progress" status is only written, if current status is "NOT ATTEMPTED"

Definition at line 496 of file class.ilLPStatus.php.

References $ilDB, and ilLPStatusWrapper\_updateStatus().

Referenced by ilLearningProgress\_tracProgress().

497  {
498  global $ilDB;
499 
500  // #11513
501 
502  $needs_update = false;
503 
504  $set = $ilDB->query("SELECT usr_id, status FROM ut_lp_marks WHERE ".
505  " obj_id = ".$ilDB->quote($a_obj_id, "integer")." AND ".
506  " usr_id = ".$ilDB->quote($a_user_id, "integer")
507  );
508  if ($rec = $ilDB->fetchAssoc($set))
509  {
510  // current status is not attempted, so we need to update
511  if($rec["status"] == self::LP_STATUS_NOT_ATTEMPTED_NUM)
512  {
513  $needs_update = true;
514  }
515  }
516  else
517  {
518  // no ut_lp_marks yet, we should update
519  $needs_update = true;
520  }
521 
522  if($needs_update)
523  {
524  require_once "Services/Tracking/classes/class.ilLPStatusWrapper.php";
525  ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id);
526  }
527  }
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
global $ilDB
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ validateLPForObjects()

static ilLPStatus::validateLPForObjects (   $a_user_id,
  $a_obj_ids,
  $a_parent_ref_id 
)
staticprotected

Process given objects for lp-relevance.

Parameters
int$a_user_id
array$a_obj_ids
int$a_parent_ref_id
Returns
arraye

Definition at line 752 of file class.ilLPStatus.php.

References $obj_id, array, and ilObjectLP\getLPMemberships().

753  {
754  $lp_invalid = array();
755 
756  include_once "Services/Object/classes/class.ilObjectLP.php";
757  $memberships = ilObjectLP::getLPMemberships($a_user_id, $a_obj_ids, $a_parent_ref_id);
758  foreach($memberships as $obj_id => $status)
759  {
760  if(!$status)
761  {
762  $lp_invalid[] = $obj_id;
763  }
764  }
765 
766  return array_diff($a_obj_ids, $lp_invalid);
767  }
Create styles array
The data for the language used.
static getLPMemberships($a_usr_id, array $a_obj_ids, $a_parent_ref_id=null, $a_mapped_ref_ids=false)
Get all objects where given user is member (from LP POV)
+ Here is the call graph for this function:

◆ writeStatus()

static ilLPStatus::writeStatus (   $a_obj_id,
  $a_user_id,
  $a_status,
  $a_percentage = false,
  $a_force_per = false 
)
static

Write status for user and object.

Parameters

Definition at line 376 of file class.ilLPStatus.php.

References $ilDB, $log, $ret, ilObject\_lookupType(), ilLPStatusWrapper\_removeStatusCache(), ilLPStatusWrapper\_updateStatus(), array, date, and ilLoggerFactory\getLogger().

Referenced by ilLPStatusSCORMPackage\refreshStatus(), ilLPStatusSCORM\refreshStatus(), ilObjSCORMTracking\syncGlobalStatus(), and ilSCORM2004StoreData\syncGlobalStatus().

377  {
378  global $ilDB;
379 
381  $log->debug("obj_id: ".$a_obj_id.", user id: ".$a_user_id.", status: ".
382  $a_status.", percentage: ".$a_percentage.", force: ".$a_force_per);
383 
384  $update_collections = false;
385 
386  // get status in DB
387  $set = $ilDB->query("SELECT usr_id,status,status_dirty FROM ut_lp_marks WHERE ".
388  " obj_id = ".$ilDB->quote($a_obj_id, "integer")." AND ".
389  " usr_id = ".$ilDB->quote($a_user_id, "integer")
390  );
391  $rec = $ilDB->fetchAssoc($set);
392 
393  // update
394  if ($rec)
395  {
396  // status has changed: update
397  if ($rec["status"] != $a_status)
398  {
399  $ret = $ilDB->manipulate("UPDATE ut_lp_marks SET ".
400  " status = ".$ilDB->quote($a_status, "integer").",".
401  " status_changed = ".$ilDB->now().",".
402  " status_dirty = ".$ilDB->quote(0, "integer").
403  " WHERE usr_id = ".$ilDB->quote($a_user_id, "integer").
404  " AND obj_id = ".$ilDB->quote($a_obj_id, "integer")
405  );
406  if ($ret != 0)
407  {
408  $update_collections = true;
409  }
410  }
411  // status has not changed: reset dirty flag
412  else if ($rec["status_dirty"])
413  {
414  $ilDB->manipulate("UPDATE ut_lp_marks SET ".
415  " status_dirty = ".$ilDB->quote(0, "integer").
416  " WHERE usr_id = ".$ilDB->quote($a_user_id, "integer").
417  " AND obj_id = ".$ilDB->quote($a_obj_id, "integer")
418  );
419  }
420  }
421  // insert
422  else
423  {
424  /*
425  $ilDB->manipulate("INSERT INTO ut_lp_marks ".
426  "(status, status_changed, usr_id, obj_id, status_dirty) VALUES (".
427  $ilDB->quote($a_status, "integer").",".
428  $ilDB->now().",".
429  $ilDB->quote($a_user_id, "integer").",".
430  $ilDB->quote($a_obj_id, "integer").",".
431  $ilDB->quote(0, "integer").
432  ")");
433  */
434 
435  // #13783
436  $ilDB->replace("ut_lp_marks",
437  array(
438  "obj_id" => array("integer", $a_obj_id),
439  "usr_id" => array("integer", $a_user_id)
440  ),
441  array(
442  "status" => array("integer", $a_status),
443  "status_changed" => array("timestamp", date("Y-m-d H:i:s")), // was $ilDB->now()
444  "status_dirty" => array("integer", 0)
445  )
446  );
447 
448  $update_collections = true;
449  }
450 
451  // update percentage
452  if ($a_percentage !== false || $a_force_per)
453  {
454  $a_percentage = max(0, (int) $a_percentage);
455  $a_percentage = min(100, $a_percentage);
456  $ret = $ilDB->manipulate("UPDATE ut_lp_marks SET ".
457  " percentage = ".$ilDB->quote($a_percentage, "integer").
458  " WHERE usr_id = ".$ilDB->quote($a_user_id, "integer").
459  " AND obj_id = ".$ilDB->quote($a_obj_id, "integer")
460  );
461  }
462 
463  // update collections
464  if ($update_collections)
465  {
466  // a change occured - remove existing cache entry
467  include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
468  ilLPStatusWrapper::_removeStatusCache($a_obj_id, $a_user_id);
469 
470  $set = $ilDB->query("SELECT ut_lp_collections.obj_id obj_id FROM ".
471  "object_reference JOIN ut_lp_collections ON ".
472  "(object_reference.obj_id = ".$ilDB->quote($a_obj_id, "integer").
473  " AND object_reference.ref_id = ut_lp_collections.item_id)");
474  while ($rec = $ilDB->fetchAssoc($set))
475  {
476  if (in_array(ilObject::_lookupType($rec["obj_id"]), array("crs", "grp", "fold")))
477  {
478  // just to make sure - remove existing cache entry
479  ilLPStatusWrapper::_removeStatusCache($rec["obj_id"], $a_user_id);
480 
481  ilLPStatusWrapper::_updateStatus($rec["obj_id"], $a_user_id);
482  }
483  }
484 
485  self::raiseEvent($a_obj_id, $a_user_id, $a_status, $a_percentage);
486  }
487 
488  return $update_collections;
489  }
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
static _removeStatusCache($a_obj_id, $a_usr_id)
global $ilDB
$ret
Definition: parser.php:6
static getLogger($a_component_id)
Get component logger.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $db

ilLPStatus::$db = null

Definition at line 19 of file class.ilLPStatus.php.

◆ $list_gui_cache

ilLPStatus::$list_gui_cache
static

Definition at line 21 of file class.ilLPStatus.php.

◆ $obj_id

ilLPStatus::$obj_id = null

◆ LP_STATUS_COMPLETED

◆ LP_STATUS_COMPLETED_NUM

const ilLPStatus::LP_STATUS_COMPLETED_NUM = 2

Definition at line 30 of file class.ilLPStatus.php.

Referenced by ilLPObjectStatisticsLPTableGUI\__construct(), ilLearningProgressBaseGUI\__readStatus(), ilLearningProgressBaseGUI\_getImagePathForStatus(), ilLearningProgressBaseGUI\_getStatusText(), ilLMExplorerGUI\checkLPIcon(), ilObjCourse\checkLPStatusSync(), ilLPStatusSurveyFinished\determineStatus(), ilLPStatusStudyProgramme\determineStatus(), ilCourseLPBadge\evaluate(), ilTrSummaryTableGUI\fillHeaderCSV(), ilTrSummaryTableGUI\fillHeaderExcel(), ilLPProgressTableGUI\fillRow(), ilTrObjectUsersPropsTableGUI\fillRow(), ilTrMatrixTableGUI\fillRow(), ilLPObjectStatisticsLPTableGUI\getGraph(), ilIndividualAssessmentMembersTableGUI\getImagetPathForStatus(), ilTrMatrixTableGUI\getItems(), ilTrSummaryTableGUI\getItems(), ilLOUserResults\getObjectiveStatusForLP(), ilTrQuery\getObjectsDataForUser(), ilSoapSCORMAdministration\getSCORMCompletionStatus(), ilLOUserResults\getSummarizedObjectiveStatusForLP(), ilTrQuery\getUserObjectiveMatrix(), ilBadgeAppEventListener\handleEvent(), ilCourseAppEventListener\handleEvent(), ilObjSCORM2004LearningModule\importSuccess(), ilObjSCORMLearningModule\importSuccess(), ilLearningProgressGUI\initCollectionManualForm(), ilLearningProgressBaseGUI\initEditUserForm(), ilTrSummaryTableGUI\initFilter(), ilTrObjectUsersPropsTableGUI\initFilter(), ilStudyProgrammeLeafMock\markCompletedFor(), ilStudyProgrammeAppEventListener\onServiceTrackingUpdateStatus(), ilLearningProgressGUI\showtlt(), ilStudyProgrammeLPTest\testMarkAccredited(), and ilStudyProgrammeLPTest\testUnmarkAccredited().

◆ LP_STATUS_FAILED

◆ LP_STATUS_FAILED_NUM

◆ LP_STATUS_IN_PROGRESS

◆ LP_STATUS_IN_PROGRESS_NUM

const ilLPStatus::LP_STATUS_IN_PROGRESS_NUM = 1

◆ LP_STATUS_NOT_ATTEMPTED

◆ LP_STATUS_NOT_ATTEMPTED_NUM

◆ LP_STATUS_NOT_PARTICIPATED

const ilLPStatus::LP_STATUS_NOT_PARTICIPATED = 'trac_not_participated'

◆ LP_STATUS_NOT_REGISTERED

const ilLPStatus::LP_STATUS_NOT_REGISTERED = 'trac_not_registered'

◆ LP_STATUS_PARTICIPATED

const ilLPStatus::LP_STATUS_PARTICIPATED = 'trac_participated'

◆ LP_STATUS_REGISTERED

const ilLPStatus::LP_STATUS_REGISTERED = 'trac_registered'

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