/**
  * Constructor
  * Load all tracked User's and their summaris
  * Load list of tracked Courses
  * @param object $register
  * @param attendanceregister_user_capablities $userCapabilities
  */
 function __construct($register, attendanceregister_user_capablities $userCapabilities)
 {
     $this->register = $register;
     $this->userCapabilities = $userCapabilities;
     $this->users = attendanceregister_get_tracked_users($register);
     $this->trackedCourses = new attendanceregister_tracked_courses($register);
     $trackedUsersIds = attendanceregister__extract_property($this->users, 'id');
     // Retrieve Aggregates summaries
     $aggregates = attendanceregister__get_all_users_aggregate_summaries($register);
     // Remap in an array of attendanceregister_user_aggregates_summary, mapped by userId
     $this->usersSummaryAggregates = array();
     foreach ($aggregates as $aggregate) {
         // Retain only tracked users
         if (in_array($aggregate->userid, $trackedUsersIds)) {
             // Create User's attendanceregister_user_aggregates_summary instance if not exists
             if (!isset($this->usersSummaryAggregates[$aggregate->userid])) {
                 $this->usersSummaryAggregates[$aggregate->userid] = new attendanceregister_user_aggregates_summary();
             }
             // Populate attendanceregister_user_aggregates_summary fields
             if ($aggregate->grandtotal) {
                 $this->usersSummaryAggregates[$aggregate->userid]->grandTotalDuration = $aggregate->duration;
                 $this->usersSummaryAggregates[$aggregate->userid]->lastSassionLogout = $aggregate->lastsessionlogout;
             } else {
                 if ($aggregate->total && $aggregate->onlinesess == 1) {
                     $this->usersSummaryAggregates[$aggregate->userid]->onlineTotalDuration = $aggregate->duration;
                 } else {
                     if ($aggregate->total && $aggregate->onlinesess == 0) {
                         $this->usersSummaryAggregates[$aggregate->userid]->offlineTotalDuration = $aggregate->duration;
                     }
                 }
             }
         }
     }
 }
         if (!$register->pendingrecalc) {
             attendanceregister_set_pending_recalc($register, true);
         }
     }
     //// Recalculate Session for all User
     if ($doRecalculate) {
         // Reset peding recalc, if set
         if ($register->pendingrecalc) {
             attendanceregister_set_pending_recalc($register, false);
         }
         // Turn off time limit: recalculation can be slow
         set_time_limit(0);
         // Cleanup all online Sessions & Aggregates before recalculating [issue #14]
         attendanceregister_delete_all_users_online_sessions_and_aggregates($register);
         // Reload tracked Users list before Recalculating [issue #14]
         $newTrackedUsers = attendanceregister_get_tracked_users($register);
         // Iterate each user and recalculate Sessions
         foreach ($newTrackedUsers as $user) {
             // Recalculate Session for one User
             $progressbar = new progress_bar('recalcbar_' . $user->id, 500, true);
             attendanceregister_force_recalc_user_sessions($register, $user->id, $progressbar, false);
             // No delete needed, having done before [issue #14]
         }
         // Reload All Users Sessions
         $trackedUsers = new attendanceregister_tracked_users($register, $userCapabilities);
     }
 }
 // Notification & Continue button
 if ($doRecalculate || $doScheduleRecalc) {
     $notificationStr = get_string($doRecalculate ? 'recalc_complete' : 'recalc_scheduled', 'attendanceregister');
     echo $OUTPUT->notification($notificationStr, 'notifysuccess');
Пример #3
0
/**
 * Force Recalculating all User's Sessions
 * Executes quietly (no Progress Bar)
 * (called after Restore and by Cron)
 * @param object $register
 */
function attendanceregister_force_recalc_all($register)
{
    $users = attendanceregister_get_tracked_users($register);
    // Iterate each user and recalculate Sessions
    foreach ($users as $user) {
        attendanceregister_force_recalc_user_sessions($register, $user->id);
    }
}