/** * Events cron will try to empty the events queue by processing all the queued events handlers * * PUBLIC * * @global object * @param string $eventname empty means all * @return number of dispatched+removed broken events */ function events_cron($eventname = '') { global $DB; $failed = array(); $processed = 0; if ($eventname) { $sql = "SELECT qh.*\n FROM {events_queue_handlers} qh, {events_handlers} h\n WHERE qh.handlerid = h.id AND h.eventname=?\n ORDER BY qh.id"; $params = array($eventname); } else { $sql = "SELECT *\n FROM {events_queue_handlers}\n ORDER BY id"; $params = array(); } if ($rs = $DB->get_recordset_sql($sql, $params)) { foreach ($rs as $qhandler) { if (in_array($qhandler->handlerid, $failed)) { // do not try to dispatch any later events when one already failed continue; } $status = events_process_queued_handler($qhandler); if ($status === false) { $failed[] = $qhandler->handlerid; } else { $processed++; } } $rs->close(); } return $processed; }
/** * Events cron will try to empty the events queue by processing all the queued events handlers * * @access public Part of the public API * @deprecated since Moodle 3.1 * @category event * @param string $eventname empty means all * @return int number of dispatched events */ function events_cron($eventname = '') { global $DB; $failed = array(); $processed = 0; if ($eventname) { $sql = "SELECT qh.*\n FROM {events_queue_handlers} qh, {events_handlers} h\n WHERE qh.handlerid = h.id AND h.eventname=?\n ORDER BY qh.id"; $params = array($eventname); } else { $sql = "SELECT *\n FROM {events_queue_handlers}\n ORDER BY id"; $params = array(); } $rs = $DB->get_recordset_sql($sql, $params); if ($rs->valid()) { debugging('Events API using $handlers array has been deprecated in favour of Events 2 API, please use it instead.', DEBUG_DEVELOPER); } foreach ($rs as $qhandler) { if (isset($failed[$qhandler->handlerid])) { // do not try to dispatch any later events when one already asked for retry or ended with exception continue; } $status = events_process_queued_handler($qhandler); if ($status === false) { // handler is asking for retry, do not send other events to this handler now $failed[$qhandler->handlerid] = $qhandler->handlerid; } else { if ($status === NULL) { // means completely broken handler, event data was purged $failed[$qhandler->handlerid] = $qhandler->handlerid; } else { $processed++; } } } $rs->close(); // remove events that do not have any handlers waiting $sql = "SELECT eq.id\n FROM {events_queue} eq\n LEFT JOIN {events_queue_handlers} qh ON qh.queuedeventid = eq.id\n WHERE qh.id IS NULL"; $rs = $DB->get_recordset_sql($sql); foreach ($rs as $event) { //debugging('Purging stale event '.$event->id); $DB->delete_records('events_queue', array('id' => $event->id)); } $rs->close(); return $processed; }
/** * Events cron will try to empty the events queue by processing all the queued events handlers * @param string eventname - empty means all * @return number of dispatched+removed broken events * * PUBLIC */ function events_cron($eventname = '') { global $CFG; $failed = array(); $processed = 0; if ($eventname) { $sql = "SELECT qh.* FROM {$CFG->prefix}events_queue_handlers qh, {$CFG->prefix}events_handlers h\n WHERE qh.handlerid = h.id AND h.eventname='{$eventname}'\n ORDER BY qh.id"; } else { $sql = "SELECT * FROM {$CFG->prefix}events_queue_handlers\n ORDER BY id"; } if ($rs = get_recordset_sql($sql)) { while ($qhandler = rs_fetch_next_record($rs)) { if (in_array($qhandler->handlerid, $failed)) { // do not try to dispatch any later events when one already failed continue; } $status = events_process_queued_handler($qhandler); if ($status === false) { $failed[] = $qhandler->handlerid; } else { $processed++; } } rs_close($rs); } return $processed; }