/** * Determine grouping status * @global $ilObjDataCache * @param array $status * @param array $items * @param int $user_id * @param boolean $is_grouping * @return boolean */ public static function determineGroupingStatus($status, $gr_info, $user_id, $is_grouping) { 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; foreach ($items as $item_id) { $item_id = $ilObjDataCache->lookupObjId($item_id); $gr_status = ilLPStatusWrapper::_determineStatus($item_id, $user_id); if ($gr_status == self::LP_STATUS_FAILED_NUM) { if (++$num_failed > $max_allowed_failed) { $status['failed'] = true; $status['completed'] = false; return $status; } } if ($gr_status == self::LP_STATUS_COMPLETED_NUM) { if (++$num_completed >= $required_completed) { return $status; } } } // Not completed since returned above $status['completed'] = false; return $status; }