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