Exemplo n.º 1
0
 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;
 }
 function _getNotAttempted($a_obj_id)
 {
     $status_info = ilLPStatusWrapper::_getStatusInfo($a_obj_id);
     $users = array();
     $members = self::getMembers($status_info['crs_id'], true);
     if ($members) {
         // 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));
     }
     return $users;
 }
 function _getNotAttempted($a_obj_id)
 {
     $users = array();
     $members = self::getMembers($a_obj_id);
     if ($members) {
         // diff in progress, completed and failed (use stored result in LPStatusWrapper)
         $users = array_diff((array) $members, ilLPStatusWrapper::_getInProgress($a_obj_id));
         $users = array_diff((array) $members, ilLPStatusWrapper::_getCompleted($a_obj_id));
         $users = array_diff((array) $members, ilLPStatusWrapper::_getFailed($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)
 {
     $status_info = ilLPStatusWrapper::_getStatusInfo($a_obj_id);
     $users = array();
     if (is_array($status_info['in_progress'])) {
         foreach ($status_info['in_progress'] as $in_progress) {
             $users = array_merge($users, $in_progress);
         }
         $users = array_unique($users);
     }
     $users = array_diff($users, ilLPStatusWrapper::_getCompleted($a_obj_id));
     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 _getInProgress($a_obj_id)
 {
     $status_info = ilLPStatusWrapper::_getStatusInfo($a_obj_id);
     // find any completed item
     $users = array();
     if (is_array($status_info['completed'])) {
         foreach ($status_info['completed'] as $in_progress) {
             $users = array_merge($users, $in_progress);
         }
         $users = array_unique($users);
     }
     // remove all users which have completed ALL items
     $users = array_diff($users, ilLPStatusWrapper::_getCompleted($a_obj_id));
     return $users;
 }
 function _getInProgress($a_obj_id)
 {
     global $ilDB;
     global $ilBench;
     $ilBench->start('LearningProgress', '9182_LPStatusTestPassed_inProgress');
     include_once './Modules/Test/classes/class.ilObjTestAccess.php';
     $query = "SELECT DISTINCT(user_fi) FROM tst_active " . "WHERE test_fi = '" . ilObjTestAccess::_getTestIDFromObjectID($a_obj_id) . "'";
     $res = $ilDB->query($query);
     while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
         $user_ids[] = $row->user_fi;
     }
     $users = array_diff((array) $user_ids, ilLPStatusWrapper::_getCompleted($a_obj_id));
     $users = array_diff((array) $users, ilLPStatusWrapper::_getFailed($a_obj_id));
     $ilBench->stop('LearningProgress', '9182_LPStatusTestPassed_inProgress');
     return $users ? $users : array();
 }
Exemplo n.º 9
0
 function refreshStatus($a_obj_id)
 {
     parent::refreshStatus($a_obj_id);
     // this is restricted to SCOs in the current collection
     include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php";
     $in_progress = ilLPStatusWrapper::_getInProgress($a_obj_id);
     $completed = ilLPStatusWrapper::_getCompleted($a_obj_id);
     $failed = ilLPStatusWrapper::_getFailed($a_obj_id);
     $all_active_users = array_unique(array_merge($in_progress, $completed, $failed));
     // get all tracked users regardless of SCOs
     include_once './Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php';
     $subtype = ilObjSAHSLearningModule::_lookupSubType($a_obj_id);
     if ($subtype != "scorm2004") {
         include_once "./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMTracking.php";
         $all_tracked_users = ilObjSCORMTracking::_getTrackedUsers($a_obj_id);
     } else {
         include_once "./Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php";
         $all_tracked_users = ilSCORM2004Tracking::_getTrackedUsers($a_obj_id);
     }
     $not_attempted_users = array_diff($all_tracked_users, $all_active_users);
     unset($all_tracked_users);
     unset($all_active_users);
     // reset all users which have no data for the current SCOs
     if ($not_attempted_users) {
         foreach ($not_attempted_users as $usr_id) {
             // this will update any (parent) collections if necessary
             ilLPStatus::writeStatus($a_obj_id, $usr_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, 0);
         }
     }
 }
 /**
  * Static function to read the number of user who have the status 'completed'
  */
 function _getCountCompleted($a_obj_id)
 {
     return count(ilLPStatusWrapper::_getCompleted($a_obj_id));
 }
Exemplo n.º 11
0
 /**
  * Refresh status
  *
  * @param
  * @return
  */
 function refreshStatus($a_obj_id, $a_users = null)
 {
     include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php";
     $not_attempted = ilLPStatusWrapper::_getNotAttempted($a_obj_id);
     foreach ($not_attempted as $user_id) {
         $percentage = $this->determinePercentage($a_obj_id, $user_id);
         if (self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, $percentage, true)) {
             self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, $percentage);
         }
     }
     $in_progress = ilLPStatusWrapper::_getInProgress($a_obj_id);
     foreach ($in_progress as $user_id) {
         $percentage = $this->determinePercentage($a_obj_id, $user_id);
         if (self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_IN_PROGRESS_NUM, $percentage, true)) {
             self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_IN_PROGRESS_NUM, $percentage);
         }
     }
     $completed = ilLPStatusWrapper::_getCompleted($a_obj_id);
     foreach ($completed as $user_id) {
         $percentage = $this->determinePercentage($a_obj_id, $user_id);
         if (self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_COMPLETED_NUM, $percentage, true)) {
             self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_COMPLETED_NUM, $percentage);
         }
     }
     $failed = ilLPStatusWrapper::_getFailed($a_obj_id);
     foreach ($failed as $user_id) {
         $percentage = $this->determinePercentage($a_obj_id, $user_id);
         if (self::writeStatus($a_obj_id, $user_id, self::LP_STATUS_FAILED_NUM, $percentage, true)) {
             self::raiseEvent($a_obj_id, $user_id, self::LP_STATUS_FAILED_NUM, $percentage);
         }
     }
     if ($a_users) {
         $missing_users = array_diff($a_users, $not_attempted + $in_progress + $completed + $failed);
         if ($missing_users) {
             foreach ($missing_users as $user_id) {
                 ilLPStatusWrapper::_updateStatus($a_obj_id, $user_id);
             }
         }
     }
 }
Exemplo n.º 12
0
 /**
  * Get completed users
  * New handling for optional grouped assignments.
  * 
  * @param int $a_obj_id
  * @return array users
  */
 function _getCompleted($a_obj_id)
 {
     global $ilObjDataCache;
     include_once './Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance($a_obj_id);
     $collection = $olp->getCollectionInstance();
     if ($collection) {
         $grouped_items = $collection->getGroupedItemsForLPStatus();
     }
     if (!sizeof($grouped_items)) {
         // #11513 - empty collections cannot be completed
         return array();
     } else {
         // New handling for optional assignments
         $counter = 0;
         $users = array();
         foreach ($grouped_items 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);
                 }
             }
         }
     }
     $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 (array) $users;
 }
 /**
  * Apply progress filter
  * @param int $obj_id
  * @param array $usr_ids
  * @param array $filter
  * 
  * @return array $filtered_users
  */
 protected function applyProgressFilter($obj_id, array $usr_ids, array $filter)
 {
     include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php';
     $all_users = array();
     if (in_array(self::USER_FILTER_ALL, $usr_ids)) {
         $all_users = array_unique(array_merge(ilLPStatusWrapper::_getInProgress($obj_id), ilLPStatusWrapper::_getCompleted($obj_id), ilLPStatusWrapper::_getFailed($obj_id)));
     } else {
         $all_users = $usr_ids;
     }
     if (!$filter or in_array(self::PROGRESS_FILTER_ALL, $filter)) {
         $GLOBALS['log']->write(__METHOD__ . ': Deleting all progress data');
         return $all_users;
     }
     $filter_users = array();
     if (in_array(self::PROGRESS_FILTER_IN_PROGRESS, $filter)) {
         $GLOBALS['log']->write(__METHOD__ . ': Filtering  in progress.');
         $filter_users = array_merge($filter, ilLPStatusWrapper::_getInProgress($obj_id));
     }
     if (in_array(self::PROGRESS_FILTER_COMPLETED, $filter)) {
         $GLOBALS['log']->write(__METHOD__ . ': Filtering  completed.');
         $filter_users = array_merge($filter, ilLPStatusWrapper::_getCompleted($obj_id));
     }
     if (in_array(self::PROGRESS_FILTER_FAILED, $filter)) {
         $GLOBALS['log']->write(__METHOD__ . ': Filtering  failed.');
         $filter_users = array_merge($filter, ilLPStatusWrapper::_getFailed($obj_id));
     }
     // Build intersection
     return array_intersect($all_users, $filter_users);
 }