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;
}