ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilLPStatus.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
16 {
17  public $obj_id = null;
18 
19  public $db = null;
20 
21  public static $list_gui_cache;
22 
23  const LP_STATUS_NOT_ATTEMPTED = 'trac_no_attempted';
24  const LP_STATUS_IN_PROGRESS = 'trac_in_progress';
25  const LP_STATUS_COMPLETED = 'trac_completed';
26  const LP_STATUS_FAILED = 'trac_failed';
27 
32 
33  const LP_STATUS_REGISTERED = 'trac_registered';
34  const LP_STATUS_NOT_REGISTERED = 'trac_not_registered';
35  const LP_STATUS_PARTICIPATED = 'trac_participated';
36  const LP_STATUS_NOT_PARTICIPATED = 'trac_not_participated';
37 
38  public function __construct($a_obj_id)
39  {
40  global $ilDB;
41 
42  $this->obj_id = $a_obj_id;
43  $this->db = $ilDB;
44  }
45 
46  public static function _getCountNotAttempted($a_obj_id)
47  {
48  return 0;
49  }
50 
51  public static function _getNotAttempted($a_obj_id)
52  {
53  return array();
54  }
55 
56  public static function _getCountInProgress($a_obj_id)
57  {
58  return 0;
59  }
60 
61  public static function _getInProgress($a_obj_id)
62  {
63  return array();
64  }
65 
66  public static function _getCountCompleted($a_obj_id)
67  {
68  return 0;
69  }
70 
71  public static function _getCompleted($a_obj_id)
72  {
73  return array();
74  }
75 
76  public static function _getFailed($a_obj_id)
77  {
78  return array();
79  }
80 
81  public static function _getCountFailed()
82  {
83  return 0;
84  }
85 
86  public static function _getStatusInfo($a_obj_id)
87  {
88  return array();
89  }
90 
91  public static function _getTypicalLearningTime($a_obj_id)
92  {
93  include_once 'Services/MetaData/classes/class.ilMDEducational.php';
95  }
96 
97 
201  public function _updateStatus($a_obj_id, $a_usr_id, $a_obj = null, $a_percentage = false, $a_force_raise = false)
202  {
204  $log->debug(sprintf(
205  "obj_id: %s, user id: %s, object: %s",
206  $a_obj_id,
207  $a_usr_id,
208  (is_object($a_obj) ? get_class($a_obj) : 'null')
209  ));
210 
211  $status = $this->determineStatus($a_obj_id, $a_usr_id, $a_obj);
212  $percentage = $this->determinePercentage($a_obj_id, $a_usr_id, $a_obj);
213  $changed = self::writeStatus($a_obj_id, $a_usr_id, $status, $percentage);
214 
215  // ak: I don't think that this is a good way to fix 15529, we should not
216  // raise the event, if the status does not change imo.
217  // for now the changes in the next line just prevent the event being raised twice
218  if (!$changed && (bool) $a_force_raise) { // #15529
219  self::raiseEvent($a_obj_id, $a_usr_id, $status, $percentage);
220  }
221  }
222 
229  public function determinePercentage($a_obj_id, $a_usr_id, $a_obj = null)
230  {
231  return false;
232  }
233 
240  public function determineStatus($a_obj_id, $a_usr_id, $a_obj = null)
241  {
242  return false;
243  }
244 
245 
253  public static function checkStatusForObject($a_obj_id, $a_users = false)
254  {
255  global $ilDB;
256 
257  //@todo: there maybe the need to add extra handling for sessions here, since the
258  // "in progress" status is time dependent here. On the other hand, if they registered
259  // to the session, they already accessed the course and should have a "in progress"
260  // anyway. But the status on the session itself may not be correct.
261 
262  $sql = "SELECT usr_id FROM ut_lp_marks WHERE " .
263  " obj_id = " . $ilDB->quote($a_obj_id, "integer") . " AND " .
264  " status_dirty = " . $ilDB->quote(1, "integer");
265  if (is_array($a_users) && count($a_users) > 0) {
266  $sql .= " AND " . $ilDB->in("usr_id", $a_users, false, "integer");
267  }
268  $set = $ilDB->query($sql);
269  $dirty = false;
270  if ($rec = $ilDB->fetchAssoc($set)) {
271  $dirty = true;
272  }
273 
274  // check if any records are missing
275  $missing = false;
276  if (!$dirty && is_array($a_users) && count($a_users) > 0) {
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  $missing = true;
283  }
284  }
285 
286  // refresh status, if records are dirty or missing
287  if ($dirty || $missing) {
288  require_once "Services/Tracking/classes/class.ilLPStatusFactory.php"; // #13330
289  $trac_obj = ilLPStatusFactory::_getInstance($a_obj_id);
290  $trac_obj->refreshStatus($a_obj_id, $a_users);
291  }
292  }
293 
294  protected static function raiseEvent($a_obj_id, $a_usr_id, $a_status, $a_percentage)
295  {
296  global $ilAppEventHandler;
297 
299  $log->debug("obj_id: " . $a_obj_id . ", user id: " . $a_usr_id . ", status: " .
300  $a_status . ", percentage: " . $a_percentage);
301 
302  $ilAppEventHandler->raise("Services/Tracking", "updateStatus", array(
303  "obj_id" => $a_obj_id,
304  "usr_id" => $a_usr_id,
305  "status" => $a_status,
306  "percentage" => $a_percentage
307  ));
308  }
309 
316  public function refreshStatus($a_obj_id, $a_users = null)
317  {
318  include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
319  $not_attempted = ilLPStatusWrapper::_getNotAttempted($a_obj_id);
320  foreach ($not_attempted as $user_id) {
321  $percentage = $this->determinePercentage($a_obj_id, $user_id);
322  if (self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, $percentage, true)) {
323  //self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, $percentage);
324  }
325  }
326  $in_progress = ilLPStatusWrapper::_getInProgress($a_obj_id);
327  foreach ($in_progress as $user_id) {
328  $percentage = $this->determinePercentage($a_obj_id, $user_id);
329  if (self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_IN_PROGRESS_NUM, $percentage, true)) {
330  //self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_IN_PROGRESS_NUM, $percentage);
331  }
332  }
333  $completed = ilLPStatusWrapper::_getCompleted($a_obj_id);
334  foreach ($completed as $user_id) {
335  $percentage = $this->determinePercentage($a_obj_id, $user_id);
336  if (self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_COMPLETED_NUM, $percentage, true)) {
337  //self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_COMPLETED_NUM, $percentage);
338  }
339  }
341  foreach ($failed as $user_id) {
342  $percentage = $this->determinePercentage($a_obj_id, $user_id);
343  if (self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_FAILED_NUM, $percentage, true)) {
344  //self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_FAILED_NUM, $percentage);
345  }
346  }
347  if ($a_users) {
348  $missing_users = array_diff($a_users, $not_attempted+$in_progress+$completed+$failed);
349  if ($missing_users) {
350  foreach ($missing_users as $user_id) {
351  ilLPStatusWrapper::_updateStatus($a_obj_id, $user_id);
352  }
353  }
354  }
355  }
356 
363  public static function writeStatus($a_obj_id, $a_user_id, $a_status, $a_percentage = false, $a_force_per = false)
364  {
365  global $ilDB;
366 
368  $log->debug("obj_id: " . $a_obj_id . ", user id: " . $a_user_id . ", status: " .
369  $a_status . ", percentage: " . $a_percentage . ", force: " . $a_force_per);
370 
371  $update_collections = false;
372 
373  // get status in DB
374  $set = $ilDB->query(
375  "SELECT usr_id,status,status_dirty FROM ut_lp_marks WHERE " .
376  " obj_id = " . $ilDB->quote($a_obj_id, "integer") . " AND " .
377  " usr_id = " . $ilDB->quote($a_user_id, "integer")
378  );
379  $rec = $ilDB->fetchAssoc($set);
380 
381  // update
382  if ($rec) {
383  // status has changed: update
384  if ($rec["status"] != $a_status) {
385  $ret = $ilDB->manipulate(
386  "UPDATE ut_lp_marks SET " .
387  " status = " . $ilDB->quote($a_status, "integer") . "," .
388  " status_changed = " . $ilDB->now() . "," .
389  " status_dirty = " . $ilDB->quote(0, "integer") .
390  " WHERE usr_id = " . $ilDB->quote($a_user_id, "integer") .
391  " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")
392  );
393  if ($ret != 0) {
394  $update_collections = true;
395  }
396  }
397  // status has not changed: reset dirty flag
398  elseif ($rec["status_dirty"]) {
399  $ilDB->manipulate(
400  "UPDATE ut_lp_marks SET " .
401  " status_dirty = " . $ilDB->quote(0, "integer") .
402  " WHERE usr_id = " . $ilDB->quote($a_user_id, "integer") .
403  " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")
404  );
405  }
406  }
407  // insert
408  else {
409  /*
410  $ilDB->manipulate("INSERT INTO ut_lp_marks ".
411  "(status, status_changed, usr_id, obj_id, status_dirty) VALUES (".
412  $ilDB->quote($a_status, "integer").",".
413  $ilDB->now().",".
414  $ilDB->quote($a_user_id, "integer").",".
415  $ilDB->quote($a_obj_id, "integer").",".
416  $ilDB->quote(0, "integer").
417  ")");
418  */
419 
420  // #13783
421  $ilDB->replace(
422  "ut_lp_marks",
423  array(
424  "obj_id" => array("integer", $a_obj_id),
425  "usr_id" => array("integer", $a_user_id)
426  ),
427  array(
428  "status" => array("integer", $a_status),
429  "status_changed" => array("timestamp", date("Y-m-d H:i:s")), // was $ilDB->now()
430  "status_dirty" => array("integer", 0)
431  )
432  );
433 
434  $update_collections = true;
435  }
436 
437  // update percentage
438  if ($a_percentage !== false || $a_force_per) {
439  $a_percentage = max(0, (int) $a_percentage);
440  $a_percentage = min(100, $a_percentage);
441  $ret = $ilDB->manipulate(
442  "UPDATE ut_lp_marks SET " .
443  " percentage = " . $ilDB->quote($a_percentage, "integer") .
444  " WHERE usr_id = " . $ilDB->quote($a_user_id, "integer") .
445  " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")
446  );
447  }
448 
449  // update collections
450  if ($update_collections) {
451  // a change occured - remove existing cache entry
452  include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
453  ilLPStatusWrapper::_removeStatusCache($a_obj_id, $a_user_id);
454 
455  $set = $ilDB->query("SELECT ut_lp_collections.obj_id obj_id FROM " .
456  "object_reference JOIN ut_lp_collections ON " .
457  "(object_reference.obj_id = " . $ilDB->quote($a_obj_id, "integer") .
458  " AND object_reference.ref_id = ut_lp_collections.item_id)");
459  while ($rec = $ilDB->fetchAssoc($set)) {
460  if (in_array(ilObject::_lookupType($rec["obj_id"]), array("crs", "grp", "fold"))) {
461  // just to make sure - remove existing cache entry
462  ilLPStatusWrapper::_removeStatusCache($rec["obj_id"], $a_user_id);
463 
464  ilLPStatusWrapper::_updateStatus($rec["obj_id"], $a_user_id);
465  }
466  }
467 
468  self::raiseEvent($a_obj_id, $a_user_id, $a_status, $a_percentage);
469  }
470 
471  return $update_collections;
472  }
473 
479  public static function setInProgressIfNotAttempted($a_obj_id, $a_user_id)
480  {
481  global $ilDB;
482 
483  // #11513
484 
485  $needs_update = false;
486 
487  $set = $ilDB->query(
488  "SELECT usr_id, status FROM ut_lp_marks WHERE " .
489  " obj_id = " . $ilDB->quote($a_obj_id, "integer") . " AND " .
490  " usr_id = " . $ilDB->quote($a_user_id, "integer")
491  );
492  if ($rec = $ilDB->fetchAssoc($set)) {
493  // current status is not attempted, so we need to update
494  if ($rec["status"] == self::LP_STATUS_NOT_ATTEMPTED_NUM) {
495  $needs_update = true;
496  }
497  } else {
498  // no ut_lp_marks yet, we should update
499  $needs_update = true;
500  }
501 
502  if ($needs_update) {
503  require_once "Services/Tracking/classes/class.ilLPStatusWrapper.php";
504  ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id);
505  }
506  }
507 
514  public static function setAllDirty()
515  {
516  global $ilDB;
517 
518  $ilDB->manipulate(
519  "UPDATE ut_lp_marks SET " .
520  " status_dirty = " . $ilDB->quote(1, "integer")
521  );
522  }
523 
530  public static function setDirty($a_obj_id)
531  {
532  global $ilDB;
533 
534  $ilDB->manipulate(
535  "UPDATE ut_lp_marks SET " .
536  " status_dirty = " . $ilDB->quote(1, "integer") .
537  " WHERE obj_id = " . $ilDB->quote($a_obj_id, "integer")
538  );
539  }
540 
548  public static function _lookupStatus($a_obj_id, $a_user_id, $a_create = true)
549  {
550  global $ilDB;
551 
552  $set = $ilDB->query(
553  "SELECT status FROM ut_lp_marks WHERE " .
554  " status_dirty = " . $ilDB->quote(0, "integer") .
555  " AND usr_id = " . $ilDB->quote($a_user_id, "integer") .
556  " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")
557  );
558  if ($rec = $ilDB->fetchAssoc($set)) {
559  return $rec["status"];
560  } elseif ((bool) $a_create) {
561  include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
562  ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id);
563  $set = $ilDB->query(
564  "SELECT status FROM ut_lp_marks WHERE " .
565  " status_dirty = " . $ilDB->quote(0, "integer") .
566  " AND usr_id = " . $ilDB->quote($a_user_id, "integer") .
567  " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")
568  );
569  if ($rec = $ilDB->fetchAssoc($set)) {
570  return $rec["status"];
571  }
572  }
573  }
574 
581  public static function _lookupPercentage($a_obj_id, $a_user_id)
582  {
583  global $ilDB;
584 
585  $set = $ilDB->query(
586  "SELECT percentage FROM ut_lp_marks WHERE " .
587  " status_dirty = " . $ilDB->quote(0, "integer") .
588  " AND usr_id = " . $ilDB->quote($a_user_id, "integer") .
589  " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")
590  );
591  if ($rec = $ilDB->fetchAssoc($set)) {
592  return $rec["percentage"];
593  }
594  }
595 
603  public static function _hasUserCompleted($a_obj_id, $a_user_id)
604  {
605  return (self::_lookupStatus($a_obj_id, $a_user_id) == self::LP_STATUS_COMPLETED_NUM);
606  }
607 
614  public static function _lookupStatusChanged($a_obj_id, $a_user_id)
615  {
616  global $ilDB;
617 
618  $set = $ilDB->query(
619  "SELECT status_changed FROM ut_lp_marks WHERE " .
620  " status_dirty = " . $ilDB->quote(0, "integer") .
621  " AND usr_id = " . $ilDB->quote($a_user_id, "integer") .
622  " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")
623  );
624  if ($rec = $ilDB->fetchAssoc($set)) {
625  return $rec["status_changed"];
626  } else {
627  include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
628  ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id);
629  $set = $ilDB->query(
630  "SELECT status_changed FROM ut_lp_marks WHERE " .
631  " status_dirty = " . $ilDB->quote(0, "integer") .
632  " AND usr_id = " . $ilDB->quote($a_user_id, "integer") .
633  " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")
634  );
635  if ($rec = $ilDB->fetchAssoc($set)) {
636  return $rec["status_changed"];
637  }
638  }
639  }
640 
649  protected static function _lookupStatusForObject($a_obj_id, $a_status, $a_user_ids = null)
650  {
651  global $ilDB;
652 
653  $sql = "SELECT usr_id, status, status_dirty FROM ut_lp_marks" .
654  " WHERE obj_id = " . $ilDB->quote($a_obj_id, "integer") .
655  " AND status = " . $ilDB->quote($a_status, "integer");
656  if ($a_user_ids) {
657  $sql .= " AND " . $ilDB->in("usr_id", $a_user_ids, "", "integer");
658  }
659 
660  $set = $ilDB->query($sql);
661  $res = array();
662  while ($rec = $ilDB->fetchAssoc($set)) {
663  if ($res["status_dirty"]) {
664  // update status and check again
665  if (self::_lookupStatus($a_obj_id, $rec["usr_id"]) != $a_status) {
666  continue;
667  }
668  }
669  $res[] = $rec["usr_id"];
670  }
671 
672  return $res;
673  }
674 
682  public static function _lookupCompletedForObject($a_obj_id, $a_user_ids = null)
683  {
684  return self::_lookupStatusForObject($a_obj_id, self::LP_STATUS_COMPLETED_NUM, $a_user_ids);
685  }
686 
694  public static function _lookupFailedForObject($a_obj_id, $a_user_ids = null)
695  {
696  return self::_lookupStatusForObject($a_obj_id, self::LP_STATUS_FAILED_NUM, $a_user_ids);
697  }
698 
706  public static function _lookupInProgressForObject($a_obj_id, $a_user_ids = null)
707  {
708  return self::_lookupStatusForObject($a_obj_id, self::LP_STATUS_IN_PROGRESS_NUM, $a_user_ids);
709  }
710 
711 
712  //
713  // LIST GUI
714  //
715 
724  protected static function validateLPForObjects($a_user_id, $a_obj_ids, $a_parent_ref_id)
725  {
726  $lp_invalid = array();
727 
728  include_once "Services/Object/classes/class.ilObjectLP.php";
729  $memberships = ilObjectLP::getLPMemberships($a_user_id, $a_obj_ids, $a_parent_ref_id);
730  foreach ($memberships as $obj_id => $status) {
731  if (!$status) {
732  $lp_invalid[] = $obj_id;
733  }
734  }
735 
736  return array_diff($a_obj_ids, $lp_invalid);
737  }
738 
745  protected static function checkLPModesForObjects($a_obj_ids, array &$a_coll_obj_ids)
746  {
747  $valid = array();
748 
749  // all lp modes with collections (gathered separately)
750  include_once "Services/Tracking/classes/collection/class.ilLPCollection.php";
751  $coll_modes = ilLPCollection::getCollectionModes();
752 
753  include_once "Services/Tracking/classes/class.ilLPObjSettings.php";
754 
755  // check if objects have LP activated at all (DB entries)
756  $existing = ilLPObjSettings::_lookupDBModeForObjects($a_obj_ids);
757  foreach ($existing as $obj_id => $obj_mode) {
758  if ($obj_mode != ilLPObjSettings::LP_MODE_DEACTIVATED) {
760 
761  if (in_array($obj_mode, $coll_modes)) {
762  $a_coll_obj_ids[] = $obj_id;
763  }
764  }
765  }
766 
767  // missing objects in DB (default mode)
768  include_once "Services/Object/classes/class.ilObjectLP.php";
769  if (sizeof($existing) != sizeof($a_obj_ids)) {
770  foreach (array_diff($a_obj_ids, $existing) as $obj_id) {
771  $olp = ilObjectLP::getInstance($obj_id);
772  $mode = $olp->getCurrentMode();
774  // #11141
775  unset($valid[$obj_id]);
776  } elseif ($mode != ilLPObjSettings::LP_MODE_UNDEFINED) {
778 
779  if (in_array($mode, $coll_modes)) {
780  $a_coll_obj_ids[] = $obj_id;
781  }
782  }
783  }
784  unset($existing);
785  }
786 
787  return array_values($valid);
788  }
789 
797  protected static function getLPStatusForObjects($a_user_id, $a_obj_ids)
798  {
799  global $ilDB;
800 
801  $res = array();
802 
803  // get user lp data
804  $sql = "SELECT status, status_dirty, obj_id FROM ut_lp_marks" .
805  " WHERE " . $ilDB->in("obj_id", $a_obj_ids, "", "integer") .
806  " AND usr_id = " . $ilDB->quote($a_user_id, "integer");
807  $set = $ilDB->query($sql);
808  while ($row = $ilDB->fetchAssoc($set)) {
809  if (!$row["status_dirty"]) {
810  $res[$row["obj_id"]] = $row["status"];
811  } else {
812  $res[$row["obj_id"]] = self::_lookupStatus($row["obj_id"], $a_user_id);
813  }
814  }
815 
816  // process missing user entries (same as dirty entries, see above)
817  foreach ($a_obj_ids as $obj_id) {
818  if (!isset($res[$obj_id])) {
819  $res[$obj_id] = self::_lookupStatus($obj_id, $a_user_id);
820  if ($res[$obj_id] === null) {
821  $res[$obj_id] = self::LP_STATUS_NOT_ATTEMPTED_NUM;
822  }
823  }
824  }
825 
826  return $res;
827  }
828 
829  public static function preloadListGUIData($a_obj_ids)
830  {
831  global $ilUser, $lng;
832 
833  $user_id = $ilUser->getId();
834 
835  $res = array();
836 
837  include_once("Services/Tracking/classes/class.ilObjUserTracking.php");
838  if ($ilUser->getId() != ANONYMOUS_USER_ID &&
842  // -- validate
843 
844  // :TODO: we need the parent ref id, but this is awful
845  $a_obj_ids = self::validateLPForObjects($user_id, $a_obj_ids, (int) $_GET["ref_id"]);
846 
847  // we are not handling the collections differently yet
848  $coll_obj_ids = array();
849  $a_obj_ids = self::checkLPModesForObjects($a_obj_ids, $coll_obj_ids);
850 
851 
852  // -- gather
853 
854  $res = self::getLPStatusForObjects($user_id, $a_obj_ids);
855 
856 
857  // -- render
858 
859  // value to icon
860  $lng->loadLanguageModule("trac");
861  include_once("./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php");
862  foreach ($res as $obj_id => $status) {
866  }
867  }
868 
869  self::$list_gui_cache = $res;
870  }
871 
872  public static function getListGUIStatus($a_obj_id, $a_image_only = false)
873  {
874  if ($a_image_only) {
875  $image = '';
876  if (isset(self::$list_gui_cache[$a_obj_id]["image"])) {
877  $image = self::$list_gui_cache[$a_obj_id]["image"];
878  }
879 
880  return $image;
881  }
882  return self::$list_gui_cache[$a_obj_id];
883  }
884 }
const LP_STATUS_COMPLETED_NUM
static _getCountFailed()
static _getInProgress($a_obj_id)
Static function to read users who have the status &#39;in_progress&#39;.
static _lookupFailedForObject($a_obj_id, $a_user_ids=null)
Get failed users for object.
refreshStatus($a_obj_id, $a_users=null)
Refresh status.
determineStatus($a_obj_id, $a_usr_id, $a_obj=null)
Determine status.
static _getCompleted($a_obj_id)
Static function to read the users who have the status &#39;completed&#39;.
static _getTypicalLearningTimeSeconds($a_rbac_id, $a_obj_id=0)
static _getImagePathForStatus($a_status)
Get image path for status.
static $list_gui_cache
static raiseEvent($a_obj_id, $a_usr_id, $a_status, $a_percentage)
static preloadListGUIData($a_obj_ids)
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...
$_GET["client_id"]
const LP_STATUS_PARTICIPATED
const LP_STATUS_NOT_ATTEMPTED
static _getStatusText($a_status, $a_lng=null)
Get status alt text.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
$valid
static _lookupPercentage($a_obj_id, $a_user_id)
Lookup percentage.
static validateLPForObjects($a_user_id, $a_obj_ids, $a_parent_ref_id)
Process given objects for lp-relevance.
const LP_STATUS_IN_PROGRESS_NUM
__construct($a_obj_id)
static _getInstance($a_obj_id, $a_mode=null)
static _getNotAttempted($a_obj_id)
static _getTypicalLearningTime($a_obj_id)
const LP_STATUS_IN_PROGRESS
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;.
static _getCompleted($a_obj_id)
static _enabledLearningProgress()
check wether learing progress is enabled or not
const LP_STATUS_NOT_PARTICIPATED
$r
Definition: example_031.php:79
const LP_STATUS_FAILED
foreach($_POST as $key=> $value) $res
static _getStatusInfo($a_obj_id)
static _hasUserCompleted($a_obj_id, $a_user_id)
Lookup user object completion.
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
static _getCountInProgress($a_obj_id)
static _getCountNotAttempted($a_obj_id)
$text
Definition: errorreport.php:18
$ilUser
Definition: imgupload.php:18
static _lookupStatusForObject($a_obj_id, $a_status, $a_user_ids=null)
Get users with given status for object.
static _lookupStatusChanged($a_obj_id, $a_user_id)
Lookup status changed.
static checkLPModesForObjects($a_obj_ids, array &$a_coll_obj_ids)
Process lp modes for given objects.
_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) ...
$failed
Definition: Utf8Test.php:85
static _lookupDBModeForObjects(array $a_obj_ids)
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
static _getInProgress($a_obj_id)
static _removeStatusCache($a_obj_id, $a_usr_id)
const LP_STATUS_NOT_ATTEMPTED_NUM
static _lookupInProgressForObject($a_obj_id, $a_user_ids=null)
Get in progress users for object.
const LP_STATUS_REGISTERED
static writeStatus($a_obj_id, $a_user_id, $a_status, $a_percentage=false, $a_force_per=false)
Write status for user and object.
static setDirty($a_obj_id)
Sets status of an object to dirty.
static img($a_src, $a_alt="", $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
static getLPStatusForObjects($a_user_id, $a_obj_ids)
Get LP status for given objects (and user)
global $lng
Definition: privfeed.php:17
static setInProgressIfNotAttempted($a_obj_id, $a_user_id)
This function shoudl be clalled for normal "read events".
global $ilDB
static _getCountCompleted($a_obj_id)
$ret
Definition: parser.php:6
Abstract class ilLPStatus for all learning progress modes E.g ilLPStatusManual, ilLPStatusObjectives ...
static _getFailed($a_obj_id)
static _lookupCompletedForObject($a_obj_id, $a_user_ids=null)
Get completed users for object.
static getLogger($a_component_id)
Get component logger.
determinePercentage($a_obj_id, $a_usr_id, $a_obj=null)
Determine percentage.
static getListGUIStatus($a_obj_id, $a_image_only=false)
static setAllDirty()
Sets all status to dirty.
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)
const LP_STATUS_COMPLETED
static getInstance($a_obj_id)
const LP_STATUS_NOT_REGISTERED
static _lookupStatus($a_obj_id, $a_user_id, $a_create=true)
Lookup status.
const LP_STATUS_FAILED_NUM