Merge branch 'MDL-31919-master-2' of git://git.luns.net.uk/moodle
authorSam Hemelryk <sam@moodle.com>
Tue, 13 Mar 2012 01:00:41 +0000 (14:00 +1300)
committerSam Hemelryk <sam@moodle.com>
Tue, 13 Mar 2012 01:00:41 +0000 (14:00 +1300)
1  2 
mod/assignment/lib.php

diff --combined mod/assignment/lib.php
@@@ -1882,29 -1882,13 +1882,29 @@@ class assignment_base 
      }
  
      /**
 -     * Counts all real assignment submissions by ENROLLED students (not empty ones)
 +     * Counts all complete (real) assignment submissions by enrolled students
       *
 -     * @param int $groupid optional If nonzero then count is restricted to this group
 -     * @return int The number of submissions
 +     * @param  int $groupid (optional) If nonzero then count is restricted to this group
 +     * @return int          The number of submissions
       */
      function count_real_submissions($groupid=0) {
 -        return assignment_count_real_submissions($this->cm, $groupid);
 +        global $CFG;
 +        global $DB;
 +
 +        // Grab the context assocated with our course module
 +        $context = get_context_instance(CONTEXT_MODULE, $this->cm->id);
 +
 +        // Get ids of users enrolled in the given course.
 +        list($enroledsql, $params) = get_enrolled_sql($context, 'mod/assignment:view', $groupid);
 +        $params['assignmentid'] = $this->cm->instance;
 +
 +        // Get ids of users enrolled in the given course.
 +        return $DB->count_records_sql("SELECT COUNT('x')
 +                                         FROM {assignment_submissions} s
 +                                    LEFT JOIN {assignment} a ON a.id = s.assignment
 +                                   INNER JOIN ($enroledsql) u ON u.id = s.userid
 +                                        WHERE s.assignment = :assignmentid AND
 +                                              s.timemodified > 0", $params);
      }
  
      /**
@@@ -3490,38 -3474,44 +3490,38 @@@ function assignment_get_unmailed_submis
  }
  
  /**
 - * Counts all real assignment submissions by ENROLLED students (not empty ones)
 + * Counts all complete (real) assignment submissions by enrolled students for the given course modeule.
   *
 - * There are also assignment type methods count_real_submissions() which in the default
 - * implementation simply call this function.
 - * @param $groupid int optional If nonzero then count is restricted to this group
 - * @return int The number of submissions
 + * @deprecated                         Since Moodle 2.2 MDL-abc - Please do not use this function any more.
 + * @param  cm_info $cm                 The course module that we wish to perform the count on.
 + * @param  int     $groupid (optional) If nonzero then count is restricted to this group
 + * @return int                         The number of submissions
   */
  function assignment_count_real_submissions($cm, $groupid=0) {
      global $CFG, $DB;
  
 -    $context = get_context_instance(CONTEXT_MODULE, $cm->id);
 +    // Grab the assignment type for the given course module
 +    $assignmenttype = $DB->get_field($cm->modname, 'assignmenttype', array('id' => $cm->instance), MUST_EXIST);
  
 -    // this is all the users with this capability set, in this context or higher
 -    if ($users = get_enrolled_users($context, 'mod/assignment:view', $groupid, 'u.id')) {
 -        $users = array_keys($users);
 -    }
 +    // Create the expected class file path and class name for the returned assignemnt type
 +    $filename = "{$CFG->dirroot}/mod/assignment/type/{$assignmenttype}/assignment.class.php";
 +    $classname = "assignment_{$assignmenttype}";
  
 -    // if groupmembersonly used, remove users who are not in any group
 -    if ($users and !empty($CFG->enablegroupmembersonly) and $cm->groupmembersonly) {
 -        if ($groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id')) {
 -            $users = array_intersect($users, array_keys($groupingusers));
 -        }
 +    // If the file exists and the class is not already loaded we require the class file
 +    if (file_exists($filename) && !class_exists($classname)) {
 +        require_once($filename);
      }
 -
 -    if (empty($users)) {
 -        return 0;
 +    // If the required class is still not loaded then we revert to assignment base
 +    if (!class_exists($classname)) {
 +        $classname = 'assignment_base';
      }
 +    $instance = new $classname;
  
 -    $userlists = implode(',', $users);
 -
 -    return $DB->count_records_sql("SELECT COUNT('x')
 -                                     FROM {assignment_submissions}
 -                                    WHERE assignment = ? AND
 -                                          timemodified > 0 AND
 -                                          userid IN ($userlists)", array($cm->instance));
 +    // Attach the course module to the assignment type instance and then call the method for counting submissions
 +    $instance->cm = $cm;
 +    return $instance->count_real_submissions($groupid);
  }
  
 -
  /**
   * Return all assignment submissions by ENROLLED students (even empty)
   *
@@@ -3622,6 -3612,7 +3622,7 @@@ function assignment_types() 
  
  function assignment_print_overview($courses, &$htmlarray) {
      global $USER, $CFG, $DB;
+     require_once($CFG->libdir.'/gradelib.php');
  
      if (empty($courses) || !is_array($courses) || count($courses) == 0) {
          return array();
                                        assignment $sqlassignmentids", array_merge(array($USER->id), $assignmentidparams));
  
      foreach ($assignments as $assignment) {
+         $grading_info = grade_get_grades($assignment->course, 'mod', 'assignment', $assignment->id, $USER->id);
+         $final_grade = $grading_info->items[0]->grades[$USER->id];
          $str = '<div class="assignment overview"><div class="name">'.$strassignment. ': '.
                 '<a '.($assignment->visible ? '':' class="dimmed"').
                 'title="'.$strassignment.'" href="'.$CFG->wwwroot.
  
                  $submission = $mysubmissions[$assignment->id];
  
-                 if ($submission->teacher == 0 && $submission->timemarked == 0) {
+                 if ($submission->teacher == 0 && $submission->timemarked == 0 && !$final_grade->grade) {
                      $str .= $strsubmitted . ', ' . $strnotgradedyet;
-                 } else if ($submission->grade <= 0) {
+                 } else if ($submission->grade <= 0 && !$final_grade->grade) {
                      $str .= $strsubmitted . ', ' . $strreviewed;
                  } else {
                      $str .= $strsubmitted . ', ' . $strgraded;