ILIAS  Release_4_2_x_branch Revision 61807
 All Data Structures Namespaces Files Functions Variables Groups Pages
ilLPStatusCollection Class Reference
+ Inheritance diagram for ilLPStatusCollection:
+ Collaboration diagram for ilLPStatusCollection:

Public Member Functions

 ilLPStatusCollection ($a_obj_id)
 _getNotAttempted ($a_obj_id)
 _getInProgress ($a_obj_id)
 _getCompleted ($a_obj_id)
 Get completed users New handling for optional grouped assignments.
 _getFailed ($a_obj_id)
 _getStatusInfo ($a_obj_id)
 _getTypicalLearningTime ($a_obj_id)
 determineStatus ($a_obj_id, $a_user_id, $a_obj=null)
 Determine status.
- Public Member Functions inherited from ilLPStatus
 ilLPStatus ($a_obj_id)
 _getCountNotAttempted ($a_obj_id)
 _getCountInProgress ($a_obj_id)
 _getCountCompleted ($a_obj_id)
 _getCountFailed ()
 _updateStatus ($a_obj_id, $a_usr_id, $a_obj=null)
 New status handling (st: status, nr: accesses, p: percentage, t: time spent, m: mark)
 determinePercentage ($a_obj_id, $a_usr_id, $a_obj=null)
 Determine percentage.
 refreshStatus ($a_obj_id, $a_users=null)
 Refresh status.
 _lookupStatus ($a_obj_id, $a_user_id)
 Lookup status.
 _lookupStatusChanged ($a_obj_id, $a_user_id)
 Lookup status changed.

Static Public Member Functions

static determineGroupingStatus ($status, $gr_info, $user_id, $is_grouping)
 Determine grouping status $ilObjDataCache.
- Static Public Member Functions inherited from ilLPStatus
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.
static writeStatus ($a_obj_id, $a_user_id, $a_status, $a_percentage=false, $a_force_per=false)
 Write status for user and object.
static setInProgressIfNotAttempted ($a_obj_id, $a_user_id)
 This function shoudl be clalled for normal "read events".
static setAllDirty ()
 Sets all status to dirty.
static setDirty ($a_obj_id)
 Sets status of an object to dirty.

Additional Inherited Members

- Data Fields inherited from ilLPStatus
 $obj_id = null
 $db = null

Detailed Description

Definition at line 36 of file class.ilLPStatusCollection.php.

Member Function Documentation

ilLPStatusCollection::_getCompleted (   $a_obj_id)

Get completed users New handling for optional grouped assignments.

<type> $ilBench <type> $ilObjDataCache <type> $tree

Parameters
int$a_obj_id
Returns
array users

Reimplemented from ilLPStatus.

Definition at line 167 of file class.ilLPStatusCollection.php.

References $ilBench, ilObject\_getAllReferences(), ilLPStatusWrapper\_getFailed(), ilGroupParticipants\_getInstanceByObjId(), ilCourseParticipants\_getInstanceByObjId(), ilObject\_lookupObjId(), and ilLPCollectionCache\getGroupedItems().

{
include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
global $ilBench,$ilObjDataCache,$tree;
$ilBench->start('LearningProgress','9173_LPStatusCollection_completed');
// New handling for optional assignments
$counter = 0;
$users = array();
foreach(ilLPCollectionCache::getGroupedItems($a_obj_id, true) as $grouping_id => $grouping)
{
$isGrouping = $grouping_id ? true : false;
$grouping_completed = array();
$grouping_completed_users_num = array();
foreach((array) $grouping['items'] as $item)
{
$item_id = $ilObjDataCache->lookupObjId($item);
$tmp_users = ilLPStatusWrapper::_getCompleted($item_id);
if($isGrouping)
{
// Iterated through all grouped items and count the number of fullfiled items
foreach($tmp_users as $tmp_user_id)
{
++$grouping_completed_users_num[$tmp_user_id];
}
}
else
{
if(!$counter++)
{
$users = $tmp_users;
}
else
{
$users = array_intersect($users,$tmp_users);
}
}
}
if($isGrouping)
{
// Iterate through all "grouping_completed_users_num"
// All users with completed items greater equal than "num_obligatory" are completed
foreach($grouping_completed_users_num as $tmp_user_id => $grouping_num_completed)
{
if($grouping_num_completed >= $grouping['num_obligatory'])
{
$grouping_completed[] = $tmp_user_id;
}
}
// build intersection of users
if(!$counter++)
{
$users = $grouping_completed;
}
else
{
$users = array_intersect($users,$grouping_completed);
}
}
}
switch($ilObjDataCache->lookupType($a_obj_id))
{
case 'crs':
// Exclude all non members
include_once './Modules/Course/classes/class.ilCourseParticipants.php';
$users = array_intersect($member_obj->getMembers(),(array) $users);
break;
case 'grp':
include_once 'Modules/Group/classes/class.ilGroupParticipants.php';
$member_obj = ilGroupParticipants::_getInstanceByObjId($a_obj_id);
$members = $member_obj->getMembers();
$users = array_intersect($members,(array) $users);
break;
case 'fold':
$folder_ref_ids = ilObject::_getAllReferences($a_obj_id);
$folder_ref_id = current($folder_ref_ids);
if($crs_id = $tree->checkForParentType($folder_ref_id,'crs'))
{
include_once './Modules/Course/classes/class.ilCourseParticipants.php';
$users = array_intersect($members_obj->getMembers(),(array) $users);
}
break;
}
$users = array_diff($users,ilLPStatusWrapper::_getFailed($a_obj_id));
$ilBench->stop('LearningProgress','9173_LPStatusCollection_completed');
return (array) $users;
}

+ Here is the call graph for this function:

ilLPStatusCollection::_getFailed (   $a_obj_id)

Reimplemented from ilLPStatus.

Definition at line 263 of file class.ilLPStatusCollection.php.

References ilObject\_getAllReferences(), ilGroupParticipants\_getInstanceByObjId(), ilCourseParticipants\_getInstanceByObjId(), ilObject\_lookupObjId(), and ilLPCollectionCache\getGroupedItems().

{
global $ilObjDataCache,$tree;
include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
$users = array();
foreach(ilLPCollectionCache::getGroupedItems($a_obj_id, true) as $grouping_id => $grouping)
{
$isGrouping = $grouping_id ? true : false;
$gr_failed = array();
$gr_failed_users_num = array();
$counter = 0;
foreach((array) $grouping['items'] as $item)
{
$item_id = $ilObjDataCache->lookupObjId($item);
$tmp_users = ilLPStatusWrapper::_getFailed($item_id);
if($isGrouping)
{
foreach($tmp_users as $tmp_user_id)
{
++$gr_failed_users_num[$tmp_user_id];
}
}
else
{
// One item failed is sufficient for status failed.
$gr_failed = array_merge($gr_failed,$tmp_users);
}
$counter++;
}
if($isGrouping)
{
$allowed_failed = count($grouping['items']) - $grouping['num_obligatory'];
// Itereate over all failed users and check whether the allowd_failed value exceeded
foreach($gr_failed_users_num as $tmp_user_id => $num_failed)
{
if($num_failed > $allowed_failed)
{
$gr_failed[] = $tmp_user_id;
}
}
}
$users = array_unique(array_merge($users, $gr_failed));
}
switch($ilObjDataCache->lookupType($a_obj_id))
{
case 'crs':
// Exclude all non members
include_once './Modules/Course/classes/class.ilCourseParticipants.php';
$members_obj = ilCourseParticipants::_getInstanceByObjId($a_obj_id);
$members = $members_obj->getMembers();
$users = array_intersect($members,(array) $users);
break;
case 'grp':
include_once 'Modules/Group/classes/class.ilGroupParticipants.php';
$member_obj = ilGroupParticipants::_getInstanceByObjId($a_obj_id);
$members = $member_obj->getMembers();
$users = array_intersect($members,(array) $users);
break;
case 'fold':
$folder_ref_ids = ilObject::_getAllReferences($a_obj_id);
$folder_ref_id = current($folder_ref_ids);
if($crs_id = $tree->checkForParentType($folder_ref_id,'crs'))
{
$members = $members_obj->getMembers();
$users = array_intersect($members,(array) $users);
}
break;
}
return array_unique($users);
}

+ Here is the call graph for this function:

ilLPStatusCollection::_getInProgress (   $a_obj_id)

Reimplemented from ilLPStatus.

Definition at line 97 of file class.ilLPStatusCollection.php.

References $ilBench, ilObject\_getAllReferences(), ilLPStatusWrapper\_getCompleted(), ilLPStatusWrapper\_getFailed(), ilLPStatusWrapper\_getInProgress(), ilGroupParticipants\_getInstanceByObjId(), ilCourseParticipants\_getInstanceByObjId(), ilLPCollectionCache\_getItems(), ilObject\_lookupObjId(), and ilChangeEvent\lookupUsersInProgress().

{
global $tree;
include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
global $ilBench,$ilObjDataCache;
$ilBench->start('LearningProgress','9172_LPStatusCollection_inProgress');
$in_progress = 0;
include_once './Services/Tracking/classes/class.ilChangeEvent.php';
foreach(ilLPCollectionCache::_getItems($a_obj_id, true) as $item_id)
{
$item_id = $ilObjDataCache->lookupObjId($item_id);
// merge arrays of users with status 'in progress'
$users = array_unique(array_merge((array) $users,ilLPStatusWrapper::_getInProgress($item_id)));
$users = array_unique(array_merge((array) $users,ilLPStatusWrapper::_getCompleted($item_id)));
}
// Exclude all users with status completed.
$users = array_diff((array) $users,ilLPStatusWrapper::_getCompleted($a_obj_id));
// Exclude all users with status failed.
$users = array_diff((array) $users,ilLPStatusWrapper::_getFailed($a_obj_id));
switch($ilObjDataCache->lookupType($a_obj_id))
{
case 'crs':
// Exclude all non members
include_once './Modules/Course/classes/class.ilCourseParticipants.php';
$members_obj = ilCourseParticipants::_getInstanceByObjId($a_obj_id);
$members = $members_obj->getMembers();
$users = array_intersect($members,(array) $users);
break;
case 'grp':
include_once 'Modules/Group/classes/class.ilGroupParticipants.php';
$member_obj = ilGroupParticipants::_getInstanceByObjId($a_obj_id);
$members = $member_obj->getMembers();
$users = array_intersect($members,(array) $users);
break;
case 'fold':
$folder_ref_ids = ilObject::_getAllReferences($a_obj_id);
$folder_ref_id = current($folder_ref_ids);
if($crs_id = $tree->checkForParentType($folder_ref_id,'crs'))
{
include_once './Modules/Course/classes/class.ilCourseParticipants.php';
$members = $members_obj->getMembers();
$users = array_intersect($members,(array) $users);
}
break;
}
$ilBench->stop('LearningProgress','9172_LPStatusCollection_inProgress');
return $users;
}

+ Here is the call graph for this function:

ilLPStatusCollection::_getNotAttempted (   $a_obj_id)

Reimplemented from ilLPStatus.

Definition at line 47 of file class.ilLPStatusCollection.php.

References ilObject\_getAllReferences(), ilLPStatusWrapper\_getCompleted(), ilLPStatusWrapper\_getFailed(), ilLPStatusWrapper\_getInProgress(), ilGroupParticipants\_getInstanceByObjId(), ilCourseParticipants\_getInstanceByObjId(), and ilObject\_lookupObjId().

{
global $ilObjDataCache,$tree;
switch($ilObjDataCache->lookupType($a_obj_id))
{
case 'crs':
include_once 'Modules/Course/classes/class.ilCourseParticipants.php';
$members = $member_obj->getMembers();
// diff in progress and completed (use stored result in LPStatusWrapper)
$users = array_diff((array) $members, ilLPStatusWrapper::_getInProgress($a_obj_id));
$users = array_diff((array) $users, ilLPStatusWrapper::_getCompleted($a_obj_id));
$users = array_diff((array) $users, ilLPStatusWrapper::_getFailed($a_obj_id));
return $users;
case 'grp':
include_once 'Modules/Group/classes/class.ilGroupParticipants.php';
$member_obj = ilGroupParticipants::_getInstanceByObjId($a_obj_id);
$members = $member_obj->getMembers();
// diff in progress and completed (use stored result in LPStatusWrapper)
$users = array_diff((array) $members, ilLPStatusWrapper::_getInProgress($a_obj_id));
$users = array_diff((array) $users, ilLPStatusWrapper::_getCompleted($a_obj_id));
$users = array_diff((array) $users, ilLPStatusWrapper::_getFailed($a_obj_id));
return $users;
case 'fold':
$folder_ref_ids = ilObject::_getAllReferences($a_obj_id);
$folder_ref_id = current($folder_ref_ids);
if($crs_id = $tree->checkForParentType($folder_ref_id,'crs'))
{
include_once 'Modules/Course/classes/class.ilCourseParticipants.php';
$members = $member_obj->getMembers();
// diff in progress and completed (use stored result in LPStatusWrapper)
$users = array_diff((array) $members,ilLPStatusWrapper::_getInProgress($a_obj_id));
$users = array_diff((array) $users, ilLPStatusWrapper::_getCompleted($a_obj_id));
$users = array_diff((array) $users, ilLPStatusWrapper::_getFailed($a_obj_id));
return $users;
}
// fallthrough
default:
return array();
}
}

+ Here is the call graph for this function:

ilLPStatusCollection::_getStatusInfo (   $a_obj_id)

Reimplemented from ilLPStatus.

Definition at line 346 of file class.ilLPStatusCollection.php.

References ilLPCollectionCache\_getItems().

Referenced by _getTypicalLearningTime().

{
include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
$status_info['collections'] = ilLPCollectionCache::_getItems($a_obj_id);
$status_info['num_collections'] = count($status_info['collections']);
return $status_info;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilLPStatusCollection::_getTypicalLearningTime (   $a_obj_id)

Reimplemented from ilLPStatus.

Definition at line 355 of file class.ilLPStatusCollection.php.

References _getStatusInfo().

{
global $ilObjDataCache;
if($ilObjDataCache->lookupType($a_obj_id) == 'sahs')
{
}
$status_info = ilLPStatusWrapper::_getStatusInfo($a_obj_id);
foreach($status_info['collections'] as $item)
{
$tlt += ilLPStatusWrapper::_getTypicalLearningTime($ilObjDataCache->lookupObjId($item));
}
return $tlt;
}

+ Here is the call graph for this function:

static ilLPStatusCollection::determineGroupingStatus (   $status,
  $gr_info,
  $user_id,
  $is_grouping 
)
static

Determine grouping status $ilObjDataCache.

Parameters
array$status
array$items
int$user_id
boolean$is_grouping
Returns
boolean

Definition at line 432 of file class.ilLPStatusCollection.php.

References $failed, ilLPStatusWrapper\_determineStatus(), LP_STATUS_COMPLETED_NUM, and LP_STATUS_FAILED_NUM.

Referenced by determineStatus().

{
global $ilObjDataCache;
$items = $gr_info['items'];
if($is_grouping)
{
$max_allowed_failed = count($items) - $gr_info['num_obligatory'];
$required_completed = $gr_info['num_obligatory'];
}
else
{
$max_allowed_failed = 0;
$required_completed = count($items);
}
// Required for grouping with a number of obligatory items
$num_failed = 0;
$num_completed = 0;
include_once("./Services/Tracking/classes/class.ilLPCollectionCache.php");
foreach($items as $item_id)
{
$item_id = $ilObjDataCache->lookupObjId($item_id);
$gr_status = ilLPStatusWrapper::_determineStatus($item_id, $user_id);
if($gr_status == LP_STATUS_FAILED_NUM)
{
if(++$failed > $max_allowed_failed)
{
$status['failed'] = true;
$status['completed'] = false;
return $status;
}
}
if($gr_status == LP_STATUS_COMPLETED_NUM)
{
if(++$num_completed >= $required_completed)
{
return $status;
}
}
}
// Not completed since returned above
$status['completed'] = false;
return $status;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilLPStatusCollection::determineStatus (   $a_obj_id,
  $a_user_id,
  $a_obj = null 
)

Determine status.

Parameters
integerobject id
integeruser id
objectobject (optional depends on object type)
Returns
integer status

Reimplemented from ilLPStatus.

Definition at line 380 of file class.ilLPStatusCollection.php.

References $ilDB, determineGroupingStatus(), ilLPCollectionCache\getGroupedItems(), ilChangeEvent\hasAccessed(), LP_STATUS_COMPLETED_NUM, LP_STATUS_FAILED_NUM, LP_STATUS_IN_PROGRESS_NUM, and LP_STATUS_NOT_ATTEMPTED_NUM.

{
global $ilObjDataCache, $ilDB;
$status['completed'] = true;
$status['failed'] = false;
$status['in_progress'] = false;
$status['not_attempted'] = true;
switch ($ilObjDataCache->lookupType($a_obj_id))
{
case "crs":
case "fold":
case "grp":
include_once "./Services/Tracking/classes/class.ilChangeEvent.php";
if (ilChangeEvent::hasAccessed($a_obj_id, $a_user_id))
{
$status['in_progress'] = true;
}
include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
foreach(ilLPCollectionCache::getGroupedItems($a_obj_id, true) as $grouping_id => $grouping)
{
$isGrouping = $grouping_id ? true : false;
$status = self::determineGroupingStatus($status,$grouping,$a_user_id,$isGrouping);
}
if($status['completed'])
{
}
if($status['failed'])
{
}
if($status['in_progress'])
{
}
}
}

+ Here is the call graph for this function:

ilLPStatusCollection::ilLPStatusCollection (   $a_obj_id)

Definition at line 39 of file class.ilLPStatusCollection.php.

References $ilDB, and ilLPStatus\ilLPStatus().

{
global $ilDB;
parent::ilLPStatus($a_obj_id);
$this->db =& $ilDB;
}

+ Here is the call graph for this function:


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