]> git.mjollnir.org Git - moodle.git/commitdiff
merged fix for MDL-8505 and some other assignment issues
authortoyomoyo <toyomoyo>
Thu, 15 Feb 2007 08:16:54 +0000 (08:16 +0000)
committertoyomoyo <toyomoyo>
Thu, 15 Feb 2007 08:16:54 +0000 (08:16 +0000)
mod/assignment/lib.php
mod/assignment/type/offline/assignment.class.php

index 5cb53d3decd38362a5ad80114847e57c32e4ac9c..5819e9451fd667d47e11cbbe224fdb1e476d781b 100644 (file)
@@ -713,7 +713,7 @@ class assignment_base {
         $output .= '<script type="text/javascript">'."\n<!--\n";
         if (empty($SESSION->flextable['mod-assignment-submissions']->collapse['submissioncomment'])) {
             if ($quickgrade){
-                $output.= 'opener.document.getElementById("submissioncomment['.$submission->userid.']").value="'
+                $output.= 'opener.document.getElementById("submissioncomment'.$submission->userid.'").value="'
                 .trim($submission->submissioncomment).'";'."\n";
              } else {
                 $output.= 'opener.document.getElementById("com'.$submission->userid.
@@ -724,8 +724,8 @@ class assignment_base {
         if (empty($SESSION->flextable['mod-assignment-submissions']->collapse['grade'])) {
             //echo optional_param('menuindex');
             if ($quickgrade){
-                $output.= 'opener.document.getElementById("menumenu['.$submission->userid.
-                ']").selectedIndex="'.optional_param('menuindex', 0, PARAM_INT).'";'."\n";
+                $output.= 'opener.document.getElementById("menumenu'.$submission->userid.
+                '").selectedIndex="'.optional_param('menuindex', 0, PARAM_INT).'";'."\n";
             } else {
                 $output.= 'opener.document.getElementById("g'.$submission->userid.'").innerHTML="'.
                 $this->display_grade($submission->grade)."\";\n";
@@ -747,7 +747,7 @@ class assignment_base {
         if (empty($SESSION->flextable['mod-assignment-submissions']->collapse['status'])) {
             $output.= 'opener.document.getElementById("up'.$submission->userid.'").className="s1";';
             $buttontext = get_string('update');
-            $button = link_to_popup_window ('/mod/assignment/submissions.php?id='.$this->cm->id.'&amp;userid='.$submission->userid.'&amp;mode=single'.'&amp;offset='.optional_param('offset', '', PARAM_INT), 
+            $button = link_to_popup_window ('/mod/assignment/submissions.php?id='.$this->cm->id.'&amp;userid='.$submission->userid.'&amp;mode=single'.'&amp;offset='.(optional_param('offset', '', PARAM_INT)-1), 
                       'grade'.$submission->userid, $buttontext, 450, 700, $buttontext, 'none', true, 'button'.$submission->userid);
             $output.= 'opener.document.getElementById("up'.$submission->userid.'").innerHTML="'.addslashes($button).'";';
         }        
@@ -812,7 +812,6 @@ class assignment_base {
         if (!$submission = $this->get_submission($user->id)) {
             $submission = $this->prepare_new_submission($userid);
         }
-
         if ($submission->timemodified > $submission->timemarked) {
             $subtype = 'assignmentnew';
         } else {
@@ -823,7 +822,7 @@ class assignment_base {
         $course     = $this->course;
         $assignment = $this->assignment;
         $cm         = $this->cm;
-    
+        $context    = get_context_instance(CONTEXT_MODULE, $cm->id);
 
     /// Get all teachers and students
 
@@ -832,7 +831,8 @@ class assignment_base {
         if ($currentgroup) {
             $users = get_group_users($currentgroup);
         } else {
-            $users = get_course_users($course->id);
+            $users = get_users_by_capability($context, 'mod/assignment:submit', 'u.id, u.id', '',
+                                 '', '', '', '', false);
         }
 
         $select = 'SELECT u.id, u.id, u.firstname, u.lastname, u.picture,
@@ -853,7 +853,7 @@ class assignment_base {
         if (($auser = get_records_sql($select.$sql.$sort, $offset+1, 1)) !== false) {
             $nextuser = array_shift($auser);
         /// Calculate user status
-            $nextuser->status = ($nextuser->timemarked > 0) && ($nextuser->timemarked >= $nextuser->timemodified);
+            $nextuser->status = ($nextuser->timemarked > 0) && ($nextuser->timemarked >= $nextuser->timemodified);              
             $nextid = $nextuser->id;
         }
 
@@ -866,15 +866,15 @@ class assignment_base {
         
         echo '<script type="text/javascript">'."\n";
         echo 'function setNext(){'."\n";
-        echo 'getElementById(\'submitform\').mode.value=\'next\';'."\n";
-        echo 'getElementById(\'submitform\').userid.value="'.$nextid.'";'."\n";
+        echo 'document.getElementById(\'submitform\').mode.value=\'next\';'."\n";
+        echo 'document.getElementById(\'submitform\').userid.value="'.$nextid.'";'."\n";
         echo '}'."\n";
         
         echo 'function saveNext(){'."\n";
-        echo 'getElementById(\'submitform\').mode.value=\'saveandnext\';'."\n";
-        echo 'getElementById(\'submitform\').userid.value="'.$nextid.'";'."\n";
-        echo 'getElementById(\'submitform\').saveuserid.value="'.$userid.'";'."\n";
-        echo 'getElementById(\'submitform\').menuindex.value = getElementById(\'submitform\').grade.selectedIndex;'."\n";
+        echo 'document.getElementById(\'submitform\').mode.value=\'saveandnext\';'."\n";
+        echo 'document.getElementById(\'submitform\').userid.value="'.$nextid.'";'."\n";
+        echo 'document.getElementById(\'submitform\').saveuserid.value="'.$userid.'";'."\n";
+        echo 'document.getElementById(\'submitform\').menuindex.value = document.getElementById(\'submitform\').grade.selectedIndex;'."\n";
         echo '}'."\n";
             
         echo '</script>'."\n";
@@ -895,7 +895,7 @@ class assignment_base {
         echo '<td class="content">';
         echo '<form id="submitform" action="submissions.php" method="post">';
         echo '<fieldset class="invisiblefieldset">';
-        echo '<input type="hidden" name="offset" value="'.++$offset.'" />';
+        echo '<input type="hidden" name="offset" value="'.($offset+1).'" />';
         echo '<input type="hidden" name="userid" value="'.$userid.'" />';
         echo '<input type="hidden" name="id" value="'.$this->cm->id.'" />';
         echo '<input type="hidden" name="mode" value="grade" />';
@@ -930,7 +930,7 @@ class assignment_base {
 
         ///Print Buttons in Single View
         echo '<div class="buttons">';
-        echo '<input type="submit" name="submit" value="'.get_string('savechanges').'" onclick = "getElementById(\'submitform\').menuindex.value = getElementById(\'submitform\').grade.selectedIndex" />';
+        echo '<input type="submit" name="submit" value="'.get_string('savechanges').'" onclick = "document.getElementById(\'submitform\').menuindex.value = document.getElementById(\'submitform\').grade.selectedIndex" />';
         echo '<input type="submit" name="cancel" value="'.get_string('cancel').'" />';
         //if there are more to be graded.
         if ($nextid) {
@@ -1294,7 +1294,7 @@ class assignment_base {
         unset($submission->data2);  // Don't need to update this.
 
         if (empty($submission->timemodified)) {   // eg for offline assignments
-            $submission->timemodified = time();
+            // $submission->timemodified = time();
         }
 
         if (! update_record('assignment_submissions', $submission)) {
@@ -1346,7 +1346,9 @@ class assignment_base {
         $submission = new Object; 
         $submission->assignment   = $this->assignment->id;
         $submission->userid       = $userid;
-        $submission->timecreated  = time();
+        //$submission->timecreated  = time(); 
+        $submission->timecreated = '';
+        // teachers should not be modifying modified date, except offline assignments
         $submission->timemodified = $submission->timecreated;
         $submission->numfiles     = 0;
         $submission->data1        = '';
index 1bf545cace28c6152c8dc1924c38f8dcb2857d9d..69affda69961036808f0803ce42e89ce12b9337e 100644 (file)
@@ -16,6 +16,71 @@ class assignment_offline extends assignment_base {
     function print_student_answer($studentid){
         return '';//does nothing!
     }
+    
+    function prepare_new_submission($userid) {
+        $submission = new Object; 
+        $submission->assignment   = $this->assignment->id;
+        $submission->userid       = $userid;
+        $submission->timecreated  = time(); // needed for offline assignments
+        $submission->timemodified = $submission->timecreated;
+        $submission->numfiles     = 0;
+        $submission->data1        = '';
+        $submission->data2        = '';
+        $submission->grade        = -1;
+        $submission->submissioncomment      = '';
+        $submission->format       = 0;
+        $submission->teacher      = 0;
+        $submission->timemarked   = 0;
+        $submission->mailed       = 0;
+        return $submission;
+    }
+    
+    // needed for the timemodified override
+    function process_feedback() {
+
+        global $USER;
+
+        if (!$feedback = data_submitted()) {      // No incoming data?
+            return false;
+        }
+
+        ///For save and next, we need to know the userid to save, and the userid to go
+        ///We use a new hidden field in the form, and set it to -1. If it's set, we use this
+        ///as the userid to store
+        if ((int)$feedback->saveuserid !== -1){
+            $feedback->userid = $feedback->saveuserid;
+        }
+
+        if (!empty($feedback->cancel)) {          // User hit cancel button
+            return false;
+        }
+
+        $submission = $this->get_submission($feedback->userid, true);  // Get or make one
+
+        $submission->grade      = $feedback->grade;
+        $submission->submissioncomment    = $feedback->submissioncomment;
+        $submission->format     = $feedback->format;
+        $submission->teacher    = $USER->id;
+        $submission->mailed     = 0;       // Make sure mail goes out (again, even)
+        $submission->timemarked = time();
+
+        unset($submission->data1);  // Don't need to update this.
+        unset($submission->data2);  // Don't need to update this.
+
+        if (empty($submission->timemodified)) {   // eg for offline assignments
+            $submission->timemodified = time();
+        }
+
+        if (! update_record('assignment_submissions', $submission)) {
+            return false;
+        }
+
+        add_to_log($this->course->id, 'assignment', 'update grades', 
+                   'submissions.php?id='.$this->assignment->id.'&user='.$feedback->userid, $feedback->userid, $this->cm->id);
+        
+        return $submission;
+
+    }
 
 }