/** * 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');
/** * 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); } }