protected function after_execute()
 {
     global $DB;
     // Add attendanceregister related files, no need to match by itemname (just internally handled context)
     $this->add_related_files('mod_attendanceregister', 'intro', null);
     // Execute recalculate all
     $register = $DB->get_record('attendanceregister', array('id' => $this->task->get_activityid()), '*', MUST_EXIST);
     $this->log('Recalculating Session of restored AttendanceRegister (id:' . $this->task->get_activityid() . ')', LOG_INFO);
     attendanceregister_force_recalc_all($register);
 }
Пример #2
0
/**
 * 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;
}