attendanceregister_force_recalc_user_sessions($register, $userId, $progressbar); // Reload User's Sessions $userSessions = new attendanceregister_user_sessions($register, $userId, $userCapabilities); } else { //// Schedule Recalculation? if ($doScheduleRecalc) { // Set peding recalc, if set 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
/** * Function run periodically by cron * Execute a Session Update on all Tracked Users of all Registers, if needed */ function attendanceregister_cron() { global $DB; // Remove orphaned Locks [issue #1] $orphanIfTakenOnBefore = time() - ATTENDANCEREGISTER_ORPHANED_LOCKS_DELAY_SECONDS; $locks = $DB->delete_records_select('attendanceregister_lock', 'takenon < :takenon', array('takenon' => $orphanIfTakenOnBefore)); $registers = $DB->get_records('attendanceregister'); foreach ($registers as $register) { // Updates online Sessions mtrace('Updating AttendanceRegister ID ' . $register->id); // Process pending recalculation or update only users that need updating if ($register->pendingrecalc) { mtrace('Force-recalculating AttendanceRegister ID ' . $register->id . '...'); attendanceregister_force_recalc_all($register); // Reset pendingrecalc flag attendanceregister_set_pending_recalc($register, false); } else { mtrace('Calculating new sessions of AttendanceRegister ID ' . $register->id . '...'); $nOfUpdates = attendanceregister_updates_all_users_sessions($register); mtrace($nOfUpdates . ' Users updated on Attendance Register ID ' . $register->id); } } return true; }