Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

MDL-37781 Allocate workshop submissions without waiting for cron

Now we are checking for the need to execute the allocator every time the
main view.php is displayed to any user. Previously this was done by cron
only.
  • Loading branch information...
commit 337c3fa74cb92a571112f498ae7cf36674b3589c 1 parent 351aeee
@mudrd8mz mudrd8mz authored
View
40 mod/workshop/allocation/scheduled/db/events.php
@@ -0,0 +1,40 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Defines event handlers
+ *
+ * @package workshopallocation_scheduled
+ * @subpackage mod_workshop
+ * @category event
+ * @copyright 2013 David Mudrak <david@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+$handlers = array(
+
+ // The workshop main page is displayed to the user
+ 'workshop_viewed' => array(
+ 'handlerfile' => '/mod/workshop/allocation/scheduled/lib.php',
+ 'handlerfunction' => 'workshopallocation_scheduled_workshop_viewed',
+ 'schedule' => 'instant',
+ 'internal' => 1,
+ ),
+
+);
View
47 mod/workshop/allocation/scheduled/lib.php
@@ -285,3 +285,50 @@ function workshopallocation_scheduled_cron() {
// todo inform the teachers about the results
}
}
+
+////////////////////////////////////////////////////////////////////////////////
+// Events API
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Handler for the 'workshop_viewed' event
+ *
+ * This does the same job as {@link workshopallocation_scheduled_cron()} but for the
+ * single workshop. The idea is that we do not need to wait forcron to execute.
+ * Displaying the workshop main view.php can trigger the scheduled allocation, too.
+ *
+ * @param stdClass $event event data
+ * @return bool
+ */
+function workshopallocation_scheduled_workshop_viewed($event) {
+ global $DB;
+
+ $workshop = $event->workshop;
+ $now = time();
+
+ // Non-expensive check to see if the scheduled allocation can even happen.
+ if ($workshop->phase == workshop::PHASE_SUBMISSION and $workshop->submissionend > 0 and $workshop->submissionend < $now) {
+
+ // Make sure the scheduled allocation has been configured for this workshop, that it has not
+ // been executed yet and that the passed workshop record is still valid.
+ $sql = "SELECT a.id
+ FROM {workshopallocation_scheduled} a
+ JOIN {workshop} w ON a.workshopid = w.id
+ WHERE w.id = :workshopid
+ AND a.enabled = 1
+ AND w.phase = :phase
+ AND w.submissionend > 0
+ AND w.submissionend < :now
+ AND (a.timeallocated IS NULL OR a.timeallocated < w.submissionend)";
+ $params = array('workshopid' => $workshop->id, 'phase' => workshop::PHASE_SUBMISSION, 'now' => $now);
+
+ if ($DB->record_exists_sql($sql, $params)) {
+ // Allocate submissions for assessments.
+ $allocator = $workshop->allocator_instance('scheduled');
+ $result = $allocator->execute();
+ // todo inform the teachers about the results
+ }
+ }
+
+ return true;
+}
View
2  mod/workshop/allocation/scheduled/version.php
@@ -27,7 +27,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'workshopallocation_scheduled';
-$plugin->version = 2012112900;
+$plugin->version = 2012112901;
$plugin->requires = 2012112900;
$plugin->dependencies = array(
'workshopallocation_random' => 2012112900,
Please sign in to comment.
Something went wrong with that request. Please try again.