function _getInProgress($a_obj_id)
 {
     include_once './Services/Tracking/classes/class.ilChangeEvent.php';
     $users = ilChangeEvent::lookupUsersInProgress($a_obj_id);
     include_once './Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance($a_obj_id);
     $collection = $olp->getCollectionInstance();
     if ($collection) {
         foreach ($collection->getItems() as $item_id) {
             $item_id = ilObject::_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));
     if ($users) {
         // Exclude all non members
         $users = array_intersect(self::getMembers($a_obj_id), (array) $users);
     }
     return $users;
 }
 function _getInProgress($a_obj_id)
 {
     include_once './Services/Tracking/classes/class.ilChangeEvent.php';
     $users = ilChangeEvent::lookupUsersInProgress($a_obj_id);
     // Exclude all users with status completed.
     $users = array_diff((array) $users, ilLPStatusWrapper::_getCompleted($a_obj_id));
     return $users;
 }
 /**
  * get in progress
  *
  * @access public
  * @param int object id
  * @return array int Array of user ids
  */
 public function _getInProgress($a_obj_id)
 {
     include_once './Services/Tracking/classes/class.ilChangeEvent.php';
     $users = ilChangeEvent::lookupUsersInProgress($a_obj_id);
     // Exclude all users with status completed.
     $users = array_diff((array) $users, ilLPStatusWrapper::_getCompleted($a_obj_id));
     if ($users) {
         // Exclude all non members
         $users = array_intersect(self::getMembers($a_obj_id), (array) $users);
     }
     return $users;
 }
 function _getInProgress($a_obj_id)
 {
     include_once './Modules/Exercise/classes/class.ilExerciseMembers.php';
     include_once './Services/Tracking/classes/class.ilChangeEvent.php';
     $users = ilExerciseMembers::_getReturned($a_obj_id);
     $all = ilChangeEvent::lookupUsersInProgress($a_obj_id);
     $users = $users + $all;
     $users = array_diff($users, ilLPStatusWrapper::_getCompleted($a_obj_id));
     $users = array_diff($users, ilLPStatusWrapper::_getFailed($a_obj_id));
     if ($users) {
         // Exclude all non members
         $users = array_intersect(self::getMembers($a_obj_id), (array) $users);
     }
     return $users;
 }
 function _getCompleted($a_obj_id)
 {
     $usr_ids = array();
     include_once './Services/Tracking/classes/class.ilChangeEvent.php';
     $users = ilChangeEvent::lookupUsersInProgress($a_obj_id);
     include_once "Modules/LearningModule/classes/class.ilLMTracker.php";
     foreach ($users as $user_id) {
         // :TODO: this ought to be optimized
         $tracker = ilLMTracker::getInstanceByObjId($a_obj_id, $user_id);
         if ($tracker->getAllQuestionsCorrect()) {
             $usr_ids[] = $user_id;
         }
     }
     return $usr_ids;
 }
 function _getStatusInfo($a_obj_id)
 {
     global $ilDB;
     include_once 'Modules/Course/classes/class.ilCourseObjective.php';
     $status_info = array();
     $status_info['user_status'] = array();
     $status_info['objectives'] = ilCourseObjective::_getObjectiveIds($a_obj_id, true);
     $status_info['num_objectives'] = count($status_info['objectives']);
     if ($status_info['num_objectives']) {
         $in = $ilDB->in('objective_id', $status_info['objectives'], false, 'integer');
         include_once "Modules/Course/classes/Objectives/class.ilLOUserResults.php";
         foreach (ilLOUserResults::getSummarizedObjectiveStatusForLP($a_obj_id, $status_info['objectives']) as $user_id => $user_status) {
             $status_info['user_status'][$user_status][] = $user_id;
         }
         // change event should lead to "in progress" - see determineStatus()
         include_once "./Services/Tracking/classes/class.ilChangeEvent.php";
         foreach (ilChangeEvent::lookupUsersInProgress($a_obj_id) as $user_id) {
             if (!is_array($status_info['user_status'][ilLPStatus::LP_STATUS_IN_PROGRESS_NUM]) || !in_array($user_id, $status_info['user_status'][ilLPStatus::LP_STATUS_IN_PROGRESS_NUM])) {
                 $status_info['user_status'][ilLPStatus::LP_STATUS_IN_PROGRESS_NUM][] = $user_id;
             }
         }
         // Read title/description
         $query = "SELECT * FROM crs_objectives WHERE " . $in;
         $res = $ilDB->query($query);
         while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
             $status_info['objective_title'][$row->objective_id] = $row->title;
             $status_info['objective_description'][$row->objective_id] = $row->description;
         }
     }
     return $status_info;
 }