예제 #1
0
/**
 * 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;
}
예제 #2
0
/**
 * 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;
}
예제 #3
0
/**
 * 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;
}