19 declare(strict_types=1);
    34         $this->tree = $DIC->repositoryTree();
    41         $members = self::getMembers($a_obj_id);
    66         $collection = $olp->getCollectionInstance();
    68             foreach ($collection->getItems() as $item_id) {
    72                 $users = array_unique(
    78                 $users = array_unique(
    97             $users = array_intersect(self::getMembers($a_obj_id), $users);
   114         $collection = $olp->getCollectionInstance();
   117             $grouped_items = $collection->getGroupedItemsForLPStatus();
   119         if (!count($grouped_items)) {
   126             foreach ($grouped_items as $grouping_id => $grouping) {
   127                 $isGrouping = $grouping_id ? true : 
false;
   128                 $grouping_completed = array();
   129                 $grouping_completed_users_num = array();
   130                 foreach ((array) $grouping[
'items'] as $item) {
   135                         foreach ($tmp_users as $tmp_user_id) {
   136                             $grouping_completed_users_num[$tmp_user_id] =
   137                                 ($grouping_completed_users_num[$tmp_user_id] ?? 0) + 1;
   139                     } elseif (!$counter++) {
   142                         $users = array_intersect($users, $tmp_users);
   148                     foreach ($grouping_completed_users_num as $tmp_user_id => $grouping_num_completed) {
   149                         if ($grouping_num_completed >= $grouping[
'num_obligatory']) {
   150                             $grouping_completed[] = $tmp_user_id;
   156                         $users = $grouping_completed;
   158                         $users = array_intersect($users, $grouping_completed);
   168             $users = array_intersect(self::getMembers($a_obj_id), $users);
   171         return (array) $users;
   183         $collection = $olp->getCollectionInstance();
   185             foreach ($collection->getGroupedItemsForLPStatus(
   186             ) as $grouping_id => $grouping) {
   187                 $isGrouping = $grouping_id ? true : 
false;
   189                 $gr_failed = array();
   190                 $gr_failed_users_num = array();
   192                 foreach ((array) $grouping[
'items'] as $item) {
   197                         foreach ($tmp_users as $tmp_user_id) {
   198                             $gr_failed_users_num[$tmp_user_id] =
   199                                 ($gr_failed_users_num[$tmp_user_id] ?? 0) + 1;
   203                         $gr_failed = array_merge($gr_failed, $tmp_users);
   208                     $allowed_failed = count(
   210                     ) - $grouping[
'num_obligatory'];
   212                     foreach ($gr_failed_users_num as $tmp_user_id => $num_failed) {
   213                         if ($num_failed > $allowed_failed) {
   214                             $gr_failed[] = $tmp_user_id;
   218                 $users = array_unique(array_merge($users, $gr_failed));
   224             $users = array_intersect(self::getMembers($a_obj_id), $users);
   227         return array_unique($users);
   232         $status_info = array();
   235         $collection = $olp->getCollectionInstance();
   237             $status_info[
'collections'] = $collection->getItems();
   238             $status_info[
'num_collections'] = count(
   239                 $status_info[
'collections']
   253             return parent::_getTypicalLearningTime($a_obj_id);
   258         foreach ($status_info[
'collections'] as $item) {
   275         $status[
'completed'] = 
true;
   276         $status[
'failed'] = 
false;
   277         $status[
'in_progress'] = 
false;
   279         switch ($this->ilObjDataCache->lookupType($a_obj_id)) {
   285                     $status[
'in_progress'] = 
true;
   289                 $collection = $olp->getCollectionInstance();
   292                     $grouped_items = $collection->getGroupedItemsForLPStatus();
   294                 if (!count($grouped_items)) {
   296                     $status[
'completed'] = 
false;
   298                     foreach ($grouped_items as $grouping_id => $grouping) {
   299                         $isGrouping = $grouping_id ? true : 
false;
   300                         $status = self::determineGroupingStatus(
   309                 if ($status[
'completed']) {
   310                     if (!$this->
isMember((
int) $a_obj_id, (
int) $a_usr_id)) {
   311                         return self::LP_STATUS_IN_PROGRESS_NUM;
   314                     return self::LP_STATUS_COMPLETED_NUM;
   317                 if ($status[
'failed']) {
   318                     return self::LP_STATUS_FAILED_NUM;
   321                 if ($status[
'in_progress']) {
   322                     return self::LP_STATUS_IN_PROGRESS_NUM;
   326         return self::LP_STATUS_NOT_ATTEMPTED_NUM;
   342         $items = $gr_info[
'items'];
   344             $max_allowed_failed = count($items) - $gr_info[
'num_obligatory'];
   345             $required_completed = $gr_info[
'num_obligatory'];
   347             $max_allowed_failed = 0;
   348             $required_completed = count($items);
   355         foreach ($items as $item_id) {
   362             if ($gr_status == self::LP_STATUS_FAILED_NUM) {
   363                 if (++$num_failed > $max_allowed_failed) {
   364                     $status[
'failed'] = 
true;
   365                     $status[
'completed'] = 
false;
   369             if ($gr_status == self::LP_STATUS_COMPLETED_NUM) {
   370                 if (++$num_completed >= $required_completed) {
   376         $status[
'completed'] = 
false;
   387         switch ($this->ilObjDataCache->lookupType($objId)) {
   390                 return $participants->isMember();
   394                 return $participants->isMember($usrId);
   398                 $folderRefId = current($folderRefIds);
   399                 if ($crsRefId = $this->tree->checkForParentType($folderRefId, 
'crs')) {
   401                     return $participants->isMember();
   404                 if ($grpRefId = $this->tree->checkForParentType($folderRefId, 
'grp')) {
   406                     return $participants->isMember($usrId);
   412                 return $participants->isMember($usrId);
   428         $tree = $DIC[
'tree'];
   435                 return $member_obj->getMembers();
   441                 return $member_obj->getMembers();
   445                 $folder_ref_id = current($folder_ref_ids);
   453                     return $member_obj->getMembers();
   461                 return $member_obj->getMembers();
   473         ?array $a_user_ids = null
   476             $a_user_ids = self::getMembers($a_obj_id);
   481         return self::_lookupStatusForObject(
   483             self::LP_STATUS_COMPLETED_NUM,
   493         ?array $a_user_ids = null
   496             $a_user_ids = self::getMembers($a_obj_id);
   501         return self::_lookupStatusForObject(
   503             self::LP_STATUS_FAILED_NUM,
   513         ?array $a_user_ids = null
   516             $a_user_ids = self::getMembers($a_obj_id);
   521         return self::_lookupStatusForObject(
   523             self::LP_STATUS_IN_PROGRESS_NUM,
 static _getFailed(int $a_obj_id)
 
static _getInstanceByObjId(int $obj_id)
 
static _getCompleted(int $a_obj_id)
Static function to read the users who have the status 'completed'. 
 
determineStatus(int $a_obj_id, int $a_usr_id, object $a_obj=null)
 
static _getStatusInfo(int $a_obj_id)
Reads informations about the object e.g test results, tlt, number of visits. 
 
static _getInstanceByObjId(int $a_obj_id, int $a_usr_id)
 
static _getAllReferences(int $id)
get all reference ids for object ID 
 
static _getCompleted(int $a_obj_id)
Get completed users New handling for optional grouped assignments. 
 
static hasAccessed(int $a_obj_id, int $a_usr_id)
Has accessed. 
 
static _getTypicalLearningTime(int $a_obj_id)
 
isMember(int $objId, int $usrId)
 
static _getInProgress(int $a_obj_id)
Static function to read users who have the status 'in_progress'. 
 
static _getStatusInfo(int $a_obj_id)
 
static _lookupObjId(int $ref_id)
 
static lookupUsersInProgress(int $a_obj_id)
 
static determineGroupingStatus(array $status, array $gr_info, int $user_id, bool $is_grouping)
Determine grouping status. 
 
checkForParentType(int $a_ref_id, string $a_type, bool $a_exclude_source_check=false)
Check for parent type e.g check if a folder (ref_id 3) is in a parent course obj => checkForParentTyp...
 
__construct(int $a_obj_id)
 
static _getInstanceByObjId(int $a_obj_id)
 
static _getFailed(int $a_obj_id)
Static function to read the users who have the status 'completed'. 
 
static getMembers(int $a_obj_id)
Get members for object. 
 
static _getTypicalLearningTime(int $a_obj_id)
Reads Typical learning time. 
 
ilObjectDataCache $ilObjDataCache
 
static _lookupCompletedForObject(int $a_obj_id, ?array $a_user_ids=null)
Get completed users for object. 
 
static _getInProgress(int $a_obj_id)
 
static _lookupInProgressForObject(int $a_obj_id, ?array $a_user_ids=null)
Get in progress users for object. 
 
static _getInstanceByObjId(int $a_obj_id)
Get singleton instance. 
 
static _determineStatus(int $a_obj_id, int $a_usr_id)
 
static _lookupFailedForObject(int $a_obj_id, ?array $a_user_ids=null)
Get failed users for object. 
 
static getInstance(int $obj_id)
 
static _getNotAttempted(int $a_obj_id)