42                $this->obj_id = $a_obj_id;
 
   87                include_once 
'Services/MetaData/classes/class.ilMDEducational.php';
 
  195        function _updateStatus($a_obj_id, $a_usr_id, $a_obj = 
null, $a_percentage = 
false, $a_force_raise = 
false)
 
  204                if(
$changed || (
bool)$a_force_raise) 
 
  249                $sql = 
"SELECT usr_id FROM ut_lp_marks WHERE ".
 
  250                        " obj_id = ".$ilDB->quote($a_obj_id, 
"integer").
" AND ".
 
  251                        " status_dirty = ".$ilDB->quote(1, 
"integer");
 
  252                if(is_array($a_users) && count($a_users) > 0)
 
  254                        $sql .= 
" AND ".$ilDB->in(
"usr_id", $a_users, 
false, 
"integer");        
 
  256                $set = 
$ilDB->query($sql);
 
  258                if ($rec = 
$ilDB->fetchAssoc($set))
 
  265                if (!$dirty && is_array($a_users) && count($a_users) > 0)
 
  267                        $set = 
$ilDB->query(
"SELECT count(usr_id) cnt FROM ut_lp_marks WHERE ".
 
  268                                " obj_id = ".
$ilDB->quote($a_obj_id, 
"integer").
" AND ".
 
  269                                $ilDB->in(
"usr_id", $a_users, 
false, 
"integer"));
 
  271                        if (
$r[
"cnt"] < count($a_users))
 
  278                if ($dirty || $missing)
 
  280                        require_once 
"Services/Tracking/classes/class.ilLPStatusFactory.php"; 
 
  282                        $trac_obj->refreshStatus($a_obj_id, $a_users);
 
  286        protected function raiseEvent($a_obj_id, $a_usr_id, $a_status, $a_percentage)
 
  288                global $ilAppEventHandler;
 
  290                $ilAppEventHandler->raise(
"Services/Tracking", 
"updateStatus", array(
 
  291                        "obj_id" => $a_obj_id,
 
  292                        "usr_id" => $a_usr_id,
 
  293                        "status" => $a_status,
 
  294                        "percentage" => $a_percentage
 
  306                include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
 
  308                foreach ($not_attempted as $user_id)
 
  311                        if(self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, $percentage, 
true))
 
  313                                self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, $percentage);
 
  317                foreach ($in_progress as $user_id)
 
  320                        if(self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_IN_PROGRESS_NUM, $percentage, 
true))
 
  322                                self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_IN_PROGRESS_NUM, $percentage);
 
  326                foreach ($completed as $user_id)
 
  329                        if(self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_COMPLETED_NUM, $percentage, 
true))
 
  331                                self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_COMPLETED_NUM, $percentage);
 
  338                        if(self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_FAILED_NUM, $percentage, 
true))
 
  340                                self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_FAILED_NUM, $percentage);
 
  345                        $missing_users = array_diff($a_users, $not_attempted+$in_progress+$completed+
$failed);                  
 
  348                                foreach ($missing_users as $user_id)
 
  362        static function writeStatus($a_obj_id, $a_user_id, $a_status, $a_percentage = 
false, $a_force_per = 
false)
 
  366                $update_collections = 
false;
 
  369                $set = 
$ilDB->query(
"SELECT usr_id,status,status_dirty FROM ut_lp_marks WHERE ".
 
  370                        " obj_id = ".
$ilDB->quote($a_obj_id, 
"integer").
" AND ".
 
  371                        " usr_id = ".$ilDB->quote($a_user_id, 
"integer")
 
  373                $rec = 
$ilDB->fetchAssoc($set); 
 
  379                        if ($rec[
"status"] != $a_status)
 
  381                                $ret = 
$ilDB->manipulate(
"UPDATE ut_lp_marks SET ".
 
  382                                        " status = ".
$ilDB->quote($a_status, 
"integer").
",".
 
  383                                        " status_changed = ".$ilDB->now().
",".
 
  384                                        " status_dirty = ".$ilDB->quote(0, 
"integer").
 
  385                                        " WHERE usr_id = ".$ilDB->quote($a_user_id, 
"integer").
 
  386                                        " AND obj_id = ".$ilDB->quote($a_obj_id, 
"integer")
 
  390                                        $update_collections = 
true;
 
  394                        else if ($rec[
"status_dirty"])
 
  396                                $ilDB->manipulate(
"UPDATE ut_lp_marks SET ".
 
  397                                        " status_dirty = ".
$ilDB->quote(0, 
"integer").
 
  398                                        " WHERE usr_id = ".$ilDB->quote($a_user_id, 
"integer").
 
  399                                        " AND obj_id = ".$ilDB->quote($a_obj_id, 
"integer")
 
  418                        $ilDB->replace(
"ut_lp_marks",
 
  420                                        "obj_id" => array(
"integer", $a_obj_id),
 
  421                                        "usr_id" => array(
"integer", $a_user_id)
 
  424                                        "status" => array(
"integer", $a_status),
 
  425                                        "status_changed" => array(
"timestamp", date(
"Y-m-d H:i:s")), 
 
  426                                        "status_dirty" => array(
"integer", 0)
 
  430                        $update_collections = 
true;
 
  434                if ($a_percentage !== 
false || $a_force_per)
 
  436                        $a_percentage = max(0, (
int) $a_percentage);
 
  437                        $a_percentage = min(100, $a_percentage);
 
  438                        $ret = 
$ilDB->manipulate(
"UPDATE ut_lp_marks SET ".
 
  439                                " percentage = ".
$ilDB->quote($a_percentage, 
"integer").
 
  440                                " WHERE usr_id = ".$ilDB->quote($a_user_id, 
"integer").
 
  441                                " AND obj_id = ".$ilDB->quote($a_obj_id, 
"integer")
 
  446                if ($update_collections)
 
  449                        include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
 
  452                        $set = 
$ilDB->query(
"SELECT ut_lp_collections.obj_id obj_id FROM ".
 
  453                                "object_reference JOIN ut_lp_collections ON ".
 
  454                                "(object_reference.obj_id = ".
$ilDB->quote($a_obj_id, 
"integer").
 
  455                                " AND object_reference.ref_id = ut_lp_collections.item_id)");
 
  456                        while ($rec = 
$ilDB->fetchAssoc($set))
 
  468                return $update_collections;
 
  482                $needs_update = 
false;
 
  484                $set = 
$ilDB->query(
"SELECT usr_id, status FROM ut_lp_marks WHERE ".
 
  485                        " obj_id = ".
$ilDB->quote($a_obj_id, 
"integer").
" AND ".
 
  486                        " usr_id = ".$ilDB->quote($a_user_id, 
"integer")
 
  488                if ($rec = 
$ilDB->fetchAssoc($set))
 
  491                        if($rec[
"status"] == self::LP_STATUS_NOT_ATTEMPTED_NUM)
 
  493                                $needs_update = 
true;
 
  499                        $needs_update = 
true;
 
  504                        require_once 
"Services/Tracking/classes/class.ilLPStatusWrapper.php";
 
  519                $ilDB->manipulate(
"UPDATE ut_lp_marks SET ".
 
  520                        " status_dirty = ".
$ilDB->quote(1, 
"integer")
 
  535                $ilDB->manipulate(
"UPDATE ut_lp_marks SET ".
 
  536                        " status_dirty = ".
$ilDB->quote(1, 
"integer").
 
  537                        " WHERE obj_id = ".$ilDB->quote($a_obj_id, 
"integer")
 
  548        public static function _lookupStatus($a_obj_id, $a_user_id, $a_create = 
true)
 
  552                $set = 
$ilDB->query(
"SELECT status FROM ut_lp_marks WHERE ".
 
  553                        " status_dirty = ".
$ilDB->quote(0, 
"integer").
 
  554                        " AND usr_id = ".$ilDB->quote($a_user_id, 
"integer").
 
  555                        " AND obj_id = ".$ilDB->quote($a_obj_id, 
"integer")
 
  557                if ($rec = 
$ilDB->fetchAssoc($set))
 
  559                        return $rec[
"status"];
 
  561                else if((
bool)$a_create)
 
  563                        include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
 
  565                        $set = 
$ilDB->query(
"SELECT status FROM ut_lp_marks WHERE ".
 
  566                                " status_dirty = ".
$ilDB->quote(0, 
"integer").
 
  567                                " AND usr_id = ".$ilDB->quote($a_user_id, 
"integer").
 
  568                                " AND obj_id = ".$ilDB->quote($a_obj_id, 
"integer")
 
  570                        if ($rec = 
$ilDB->fetchAssoc($set))
 
  572                                return $rec[
"status"];
 
  587                $set = 
$ilDB->query(
"SELECT percentage FROM ut_lp_marks WHERE ".
 
  588                        " status_dirty = ".
$ilDB->quote(0, 
"integer").
 
  589                        " AND usr_id = ".$ilDB->quote($a_user_id, 
"integer").
 
  590                        " AND obj_id = ".$ilDB->quote($a_obj_id, 
"integer")
 
  592                if ($rec = 
$ilDB->fetchAssoc($set))
 
  594                        return $rec[
"percentage"];
 
  607                return (self::_lookupStatus($a_obj_id, $a_user_id) == self::LP_STATUS_COMPLETED_NUM);
 
  620                $set = 
$ilDB->query(
"SELECT status_changed FROM ut_lp_marks WHERE ".
 
  621                        " status_dirty = ".
$ilDB->quote(0, 
"integer").
 
  622                        " AND usr_id = ".$ilDB->quote($a_user_id, 
"integer").
 
  623                        " AND obj_id = ".$ilDB->quote($a_obj_id, 
"integer")
 
  625                if ($rec = 
$ilDB->fetchAssoc($set))
 
  627                        return $rec[
"status_changed"];
 
  631                        include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
 
  633                        $set = 
$ilDB->query(
"SELECT status_changed FROM ut_lp_marks WHERE ".
 
  634                                " status_dirty = ".
$ilDB->quote(0, 
"integer").
 
  635                                " AND usr_id = ".$ilDB->quote($a_user_id, 
"integer").
 
  636                                " AND obj_id = ".$ilDB->quote($a_obj_id, 
"integer")
 
  638                        if ($rec = 
$ilDB->fetchAssoc($set))
 
  640                                return $rec[
"status_changed"];
 
  657                $sql = 
"SELECT usr_id, status, status_dirty FROM ut_lp_marks".
 
  658                        " WHERE obj_id = ".$ilDB->quote($a_obj_id, 
"integer").
 
  659                        " AND status = ".$ilDB->quote($a_status, 
"integer");
 
  662                        $sql .= 
" AND ".$ilDB->in(
"usr_id", $a_user_ids, 
"", 
"integer");
 
  665                $set = 
$ilDB->query($sql);
 
  667                while($rec = 
$ilDB->fetchAssoc($set))
 
  669                        if(
$res[
"status_dirty"])
 
  672                                if(self::_lookupStatus($a_obj_id, $rec[
"usr_id"]) != $a_status)
 
  677                        $res[] = $rec[
"usr_id"];
 
  734                $lp_invalid = array();
 
  736                include_once 
"Services/Object/classes/class.ilObjectLP.php";                    
 
  738                foreach($memberships as 
$obj_id => $status)
 
  746                return array_diff($a_obj_ids, $lp_invalid);
 
  760                include_once 
"Services/Tracking/classes/collection/class.ilLPCollection.php";   
 
  763                include_once 
"Services/Tracking/classes/class.ilLPObjSettings.php";                     
 
  767                foreach($existing as 
$obj_id => $obj_mode)
 
  773                                if(in_array($obj_mode, $coll_modes))
 
  781                include_once 
"Services/Object/classes/class.ilObjectLP.php";                    
 
  782                if(
sizeof($existing) != 
sizeof($a_obj_ids))
 
  784                        foreach(array_diff($a_obj_ids, $existing) as 
$obj_id)
 
  787                                $mode = $olp->getCurrentMode();
 
  797                                        if(in_array($mode, $coll_modes))
 
  806                return array_values(
$valid);
 
  823                $sql = 
"SELECT status, status_dirty, obj_id FROM ut_lp_marks".                  
 
  824                        " WHERE ".$ilDB->in(
"obj_id", $a_obj_ids, 
"", 
"integer").
 
  825                        " AND usr_id = ".$ilDB->quote($a_user_id, 
"integer");
 
  826                $set = 
$ilDB->query($sql);
 
  829                        if(!
$row[
"status_dirty"])
 
  863                include_once(
"Services/Tracking/classes/class.ilObjUserTracking.php");
 
  864                if(
$ilUser->getId() != ANONYMOUS_USER_ID &&
 
  875                        $coll_obj_ids = array();
 
  887                        $lng->loadLanguageModule(
"trac");               
 
  888                        include_once(
"./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php");
 
  897                self::$list_gui_cache = 
$res;           
 
  902                return self::$list_gui_cache[$a_obj_id];
 
static getCollectionModes()
const LP_MODE_DEACTIVATED
static _lookupDBModeForObjects(array $a_obj_ids)
_getInstance($a_obj_id, $a_mode=NULL)
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
_getCompleted($a_obj_id)
Static function to read the users who have the status 'completed'.
_getNotAttempted($a_obj_id)
Static function to read the number of user who have the status 'not_attempted'.
static _removeStatusCache($a_obj_id, $a_usr_id)
_getFailed($a_obj_id)
Static function to read the users who have the status 'completed'.
_getInProgress($a_obj_id)
Static function to read users who have the status 'in_progress'.
Abstract class ilLPStatus for all learning progress modes E.g ilLPStatusManual, ilLPStatusObjectives ...
_getNotAttempted($a_obj_id)
const LP_STATUS_COMPLETED_NUM
_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)
static _lookupStatusForObject($a_obj_id, $a_status, $a_user_ids=null)
Get users with given status for object.
const LP_STATUS_NOT_PARTICIPATED
raiseEvent($a_obj_id, $a_usr_id, $a_status, $a_percentage)
static preloadListGUIData($a_obj_ids)
determineStatus($a_obj_id, $a_usr_id, $a_obj=null)
Determine status.
static _lookupStatus($a_obj_id, $a_user_id, $a_create=true)
Lookup status.
determinePercentage($a_obj_id, $a_usr_id, $a_obj=null)
Determine percentage.
const LP_STATUS_COMPLETED
_lookupStatusChanged($a_obj_id, $a_user_id)
Lookup status changed.
static _lookupInProgressForObject($a_obj_id, $a_user_ids=null)
Get in progress users for object.
static setInProgressIfNotAttempted($a_obj_id, $a_user_id)
This function shoudl be clalled for normal "read events".
_getCountInProgress($a_obj_id)
static _lookupFailedForObject($a_obj_id, $a_user_ids=null)
Get failed users for object.
const LP_STATUS_NOT_REGISTERED
const LP_STATUS_PARTICIPATED
_getStatusInfo($a_obj_id)
const LP_STATUS_IN_PROGRESS_NUM
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...
_getCountNotAttempted($a_obj_id)
static _hasUserCompleted($a_obj_id, $a_user_id)
Lookup user object completion.
const LP_STATUS_NOT_ATTEMPTED_NUM
const LP_STATUS_REGISTERED
_getCountCompleted($a_obj_id)
static checkLPModesForObjects($a_obj_ids, array &$a_coll_obj_ids)
Process lp modes for given objects.
refreshStatus($a_obj_id, $a_users=null)
Refresh status.
static setAllDirty()
Sets all status to dirty.
static getLPStatusForObjects($a_user_id, $a_obj_ids)
Get LP status for given objects (and user)
_getTypicalLearningTime($a_obj_id)
_getInProgress($a_obj_id)
static _lookupCompletedForObject($a_obj_id, $a_user_ids=null)
Get completed users for object.
static setDirty($a_obj_id)
Sets status of an object to dirty.
const LP_STATUS_FAILED_NUM
static validateLPForObjects($a_user_id, $a_obj_ids, $a_parent_ref_id)
Process given objects for lp-relevance.
static _lookupPercentage($a_obj_id, $a_user_id)
Lookup percentage.
static getListGUIStatus($a_obj_id)
const LP_STATUS_NOT_ATTEMPTED
const LP_STATUS_IN_PROGRESS
static writeStatus($a_obj_id, $a_user_id, $a_status, $a_percentage=false, $a_force_per=false)
Write status for user and object.
_getImagePathForStatus($a_status)
Get image path for status.
_getStatusText($a_status, $a_lng=null)
Get status alt text.
_getTypicalLearningTimeSeconds($a_rbac_id, $a_obj_id=0)
static _hasLearningProgressListGUI()
static _hasLearningProgressLearner()
static _enabledLearningProgress()
check wether learing progress is enabled or not
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)
static getInstance($a_obj_id)
static _lookupType($a_id, $a_reference=false)
lookup object type
static img($a_src, $a_alt="", $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.