MDL-31284: Backported team assignment fixes from stable branch
authorDamyon Wiese <damyon.wiese@netspot.com.au>
Mon, 3 Sep 2012 02:31:20 +0000 (10:31 +0800)
committerDamyon Wiese <damyon.wiese@netspot.com.au>
Mon, 3 Sep 2012 02:54:14 +0000 (10:54 +0800)
mod/assign/gradingtable.php
mod/assign/locallib.php
mod/assign/renderer.php

index 6032fe1..a5dbd35 100644 (file)
@@ -52,6 +52,11 @@ class assign_grading_table extends table_sql implements renderable {
     private $quickgrading = false;
     /** @var boolean $hasgrantextension - Only do the capability check once for the entire table */
     private $hasgrantextension = false;
+    /** @var array $groupsubmissions - A static cache of group submissions */
+    private $groupsubmissions = array();
+    /** @var array $submissiongroups - A static cache of submission groups */
+    private $submissiongroups = array();
+
 
     /**
      * overridden constructor keeps a reference to the assignment class that is displaying this table
@@ -274,7 +279,9 @@ class assign_grading_table extends table_sql implements renderable {
      * @return string The team name
      */
     function col_team(stdClass $row) {
-        $group = $this->assignment->get_submission_group($row->id);
+        $submission = false;
+        $group = false;
+        $this->get_group_and_submission($row->id, $group, $submission);
         if ($group) {
             return $group->name;
         }
@@ -282,13 +289,46 @@ class assign_grading_table extends table_sql implements renderable {
     }
 
     /**
-     * Get the team info for this user
+     * Use a static cache to try and reduce DB calls.
+     *
+     * @param int $userid The user id for this submission
+     * @param int $groupid The groupid (returned)
+     * @param mixed $submission The stdClass submission or false (returned)
+     */
+    function get_group_and_submission($userid, &$group, &$submission) {
+        $group = false;
+        if (isset($this->submissiongroups[$userid])) {
+            $group = $this->submissiongroups[$userid];
+        } else {
+            $group = $this->assignment->get_submission_group($userid, false);
+            $this->submissiongroups[$userid] = $group;
+        }
+
+        $groupid = 0;
+        if ($group) {
+            $groupid = $group->id;
+        }
+
+        if (isset($this->groupsubmissions[$groupid])) {
+            $submission = $this->groupsubmissions[$groupid];
+        } else {
+            $submission = $this->assignment->get_group_submission($userid, $groupid, false);
+            $this->groupsubmissions[$groupid] = $submission;
+        }
+    }
+
+
+    /**
+     * Get the team status for this user
      *
      * @param stdClass $row
      * @return string The team name
      */
     function col_teamstatus(stdClass $row) {
-        $submission = $this->assignment->get_group_submission($row->id, 0, false);
+        $submission = false;
+        $group = false;
+        $this->get_group_and_submission($row->id, $group, $submission);
+
         $status = '';
         if ($submission) {
             $status = $submission->status;
@@ -648,7 +688,15 @@ class assign_grading_table extends table_sql implements renderable {
             $plugin = $this->assignment->get_submission_plugin_by_type(substr($colname, strlen('assignsubmission_')));
 
             if ($plugin->is_visible() && $plugin->is_enabled()) {
-                if ($row->submissionid) {
+                if ($this->assignment->get_instance()->teamsubmission) {
+                    $group = false;
+                    $submission = false;
+                    $this->get_group_and_submission($row->id, $group, $submission);
+                    if ($submission) {
+                        return $this->format_plugin_summary_with_link($plugin, $submission, 'grading', array());
+                    }
+                } else if ($row->submissionid) {
+
                     $submission = new stdClass();
                     $submission->id = $row->submissionid;
                     $submission->timecreated = $row->firstsubmission;
index 3a7deb6..02529ae 100644 (file)
@@ -2702,7 +2702,14 @@ class assign {
         if (!is_enrolled($this->get_course_context(), $userid)) {
             return false;
         }
-        if ($submission = $this->get_user_submission($userid, false)) {
+        $submission = false;
+        if ($this->get_instance()->teamsubmission) {
+            $submission = $this->get_group_submission($USER->id, 0, false);
+        } else {
+            $submission = $this->get_user_submission($USER->id, false);
+        }
+        if ($submission) {
+
             if ($this->get_instance()->submissiondrafts && $submission->status == ASSIGN_SUBMISSION_STATUS_SUBMITTED) {
                 // drafts are tracked and the student has submitted the assignment
                 return false;
index 058048c..30308a3 100644 (file)
@@ -573,7 +573,7 @@ class mod_assign_renderer extends plugin_renderer_base {
         // Links.
         if ($status->view == assign_submission_status::STUDENT_VIEW) {
             if ($status->canedit) {
-                if (!$status->submission) {
+                if (!$submission) {
                     $urlparams = array('id' => $status->coursemoduleid, 'action' => 'editsubmission');
                     $o .= $this->output->single_button(new moodle_url('/mod/assign/view.php', $urlparams),
                                                        get_string('addsubmission', 'assign'), 'get');