]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-9632; MDL-9545 basic assignment grading support - event triggers implemented...
authorskodak <skodak>
Mon, 28 May 2007 08:55:15 +0000 (08:55 +0000)
committerskodak <skodak>
Mon, 28 May 2007 08:55:15 +0000 (08:55 +0000)
13 files changed:
lib/gradelib.php
mod/assignment/db/upgrade.php
mod/assignment/details.php [deleted file]
mod/assignment/lib.php
mod/assignment/type/common.html [deleted file]
mod/assignment/type/common_end.html [deleted file]
mod/assignment/type/offline/assignment.class.php
mod/assignment/type/online/assignment.class.php
mod/assignment/type/postdata.html [deleted file]
mod/assignment/type/upload/assignment.class.php
mod/assignment/type/uploadsingle/assignment.class.php
mod/assignment/version.php
version.php

index 70e672829faf08fbf4217b77bf6db185e250b436..b8f1855b9743b67cb9943d7bf3458070d0488576 100644 (file)
@@ -283,7 +283,7 @@ function standardise_score($gradevalue, $source_min, $source_max, $target_min, $
 }
 
 
-/*
+/**
  * Handles all grade_added and grade_updated events
  *
  * @param object $eventdata contains all the data for the event
@@ -291,33 +291,67 @@ function standardise_score($gradevalue, $source_min, $source_max, $target_min, $
  *
  */
 function grade_handler($eventdata) {
+    $eventdata = (array)$eventdata;
+
+/// each grade must belong to some user
+    if (empty($eventdata['userid'])) {
+        debugging('Missing user id in event data!');
+        return true;
+    }
 
 /// First let's make sure a grade_item exists for this grade
-    $gradeitem = new grade_item($eventdata);
-    
-    if (empty($gradeitem->id)) {                      // Doesn't exist yet
-        if (!$gradeitem->id = $gradeitem->insert()) { // Try to create a new item...
-            debugging('Could not create a grade_item!');
-            return false;
+    if (!empty($eventdata['itemid'])) { // if itemid specified, do not use searching
+        $gradeitem = new grade_item(array('id'=>$eventdata['itemid']));
+
+        if (empty($gradeitem->id)) { // Item with itemid doesn't exist yet
+            debugging('grade_item does not exist! id:'.$eventdata['itemid']);
+             // this $eventadata can not be fixed, do not block the queue
+             // we should log the error somewhere on production servers
+            return true;
+        }
+
+    } else {
+        $gradeitem = new grade_item($eventdata);
+        if (empty($gradeitem->id)) {                      // Doesn't exist yet
+            if (!$gradeitem->id = $gradeitem->insert()) { // Try to create a new item...
+                debugging('Could not create a new grade_item!');
+                // do we need false here? - it would stop all other grades indefinitelly!
+                // we shouuld not IMO block other events, one silly bug in 3rd party module would disable all grading
+                // if we return false we must to notify admin and add some gui to fix the trouble
+                // skodak
+                return true; //for now
+            }
         }
     }
 
-    $eventdata->itemid = $gradeitem->id;
+    $rawgrade = new grade_grades_raw(array('itemid'=>$gradeitem->id, 'userid'=>$eventdata['userid'])); 
+    $rawgrade->grade_item = &$gradeitem; // we already have it, so let's use it
 
-/// Grade_item exists, now we can insert the new raw grade
+    // store these to keep track of original grade item settings
+    $rawgrade->grademax = $gradeitem->grademax;
+    $rawgrade->grademin = $gradeitem->grademin;
+    $rawgrade->scaleid  = $gradeitem->scaleid;
 
-    $rawgrade = new grade_grades_raw($eventdata); 
+    if (isset($eventdata['feedback'])) {
+        $rawgrade->feedback = $eventdata['feedback'];
+        if (isset($eventdata['feedbackformat'])) {
+            $rawgrade->feedbackformat = $eventdata['feedbackformat'];
+        } else {
+            $rawgrade->feedbackformat = FORMAT_PLAIN;
+        }
 
+    }
+    if (!isset($eventdata['gradevalue'])) {
+        $eventdata['gradevalue'] = null; // means no grade yet
+    }
     if ($rawgrade->id) {
-        $rawgrade->update($eventdata->gradevalue, 'event');
+        $rawgrade->update($eventdata['gradevalue'], 'event');
     } else {
+        $rawgrade->gradevalue = $eventdata['gradevalue'];
         $rawgrade->insert();
     }
-    
-    // Check how it went
-
-/// Are there other checks to do?
 
+    // everything ok :-)
     return true;
 
 }
index ab0222532181e8095d384f29b64641771bb8b687..bb6c8247771fc97144c34d10666752014b095931 100644 (file)
@@ -23,14 +23,38 @@ function xmldb_assignment_upgrade($oldversion=0) {
 
     $result = true;
 
-/// And upgrade begins here. For each one, you'll need one 
-/// block of code similar to the next one. Please, delete 
-/// this comment lines once this file start handling proper
-/// upgrade code.
-
-/// if ($result && $oldversion < YYYYMMDD00) { //New version in version.php
-///     $result = result of "/lib/ddllib.php" function calls
-/// }
+    if ($result && $oldversion < 2007052700) {
+        require_once $CFG->dirroot.'/mod/assignment/lib.php';
+        // we do not want grade items for orphaned activities
+        $sql = "SELECT a.*, cm.idnumber as cmidnumber, a.course as courseid FROM {$CFG->prefix}assignment a, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m
+                WHERE m.name='assignment' AND m.id=cm.module AND cm.instance=a.id";
+        if ($rs = get_recordset_sql($sql)) {
+            $db->debug = false;
+            if ($rs->RecordCount() > 0) {
+                while ($assignment = rs_fetch_next_record($rs)) {
+                    $item = grade_get_items($assignment->course, 'grade', 'mod', 'assignment', $assignment->id);
+                    if (!empty($item)) {
+                        //already converted, it should not happen - probably interrupted upgrade?
+                        continue;
+                    }
+                    $itemid = assignment_base::create_grade_item($assignment);
+                    if ($rs2 = get_recordset('assignment_submissions', 'assignment', $assignment->id)) {
+                        while ($sub = rs_fetch_next_record($rs2)) {
+                            if ($sub->grade != -1 or !empty($sub->submissioncomment)) {
+                                if ($sub->grade <0 ) {
+                                    $sub->grade = null;
+                                }
+                                events_trigger('grade_added', array('itemid'=>$itemid, 'gradevalue'=>$sub->grade, 'userid'=>$sub->userid, 'feedback'=>$sub->submissioncomment, 'feedbackformat'=>$sub->format));
+                            }
+                        }
+                        rs_close($rs2);
+                    }
+                }
+            }
+            $db->debug = true;
+            rs_close($rs);
+        }
+    }
 
     return $result;
 }
diff --git a/mod/assignment/details.php b/mod/assignment/details.php
deleted file mode 100644 (file)
index 6559d7b..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php // $Id$
-      // This script prints the setup screen for any assignment
-      // It does this by calling the setup method in the appropriate class
-
-    require_once("../../config.php");
-    require_once("lib.php");
-
-    if (!$form = data_submitted($CFG->wwwroot.'/course/mod.php')) {
-        error("This script was called wrongly");
-    }
-
-    if (!$course = get_record('course', 'id', $form->course)) {
-        error("Non-existent course!");
-    }
-
-    require_login($course->id);
-
-    if (!has_capability('moodle/course:manageactivities', get_context_instance(CONTEXT_COURSE, $form->course))) {
-        redirect($CFG->wwwroot.'/course/view.php?id='.$course->id);
-    }
-
-    $form->assignmenttype = clean_param($form->assignmenttype, PARAM_SAFEDIR);
-
-    require_once("$CFG->dirroot/mod/assignment/type/$form->assignmenttype/assignment.class.php");
-
-    $assignmentclass = "assignment_$form->assignmenttype";
-
-    $assignmentinstance = new $assignmentclass();
-
-    echo $assignmentinstance->setup($form);     /// The actual form is all printed here
-
-
-?>
index 80044c713760394c980e21cb9da11b877ae0a4fd..a851a7429851727daa92609a4cdab8a789d5957b 100644 (file)
@@ -5,6 +5,8 @@
  * This class provides all the functionality for an assignment
  */
 
+require_once($CFG->libdir.'/gradelib.php');
+
 DEFINE ('ASSIGNMENT_COUNT_WORDS', 1);
 DEFINE ('ASSIGNMENT_COUNT_LETTERS', 2);
 
@@ -47,53 +49,59 @@ class assignment_base {
      * @param cm   object, usually null, but if we have it we pass it to save db access
      * @param course   object, usually null, but if we have it we pass it to save db access
      */
-    function assignment_base($cmid=0, $assignment=NULL, $cm=NULL, $course=NULL) {
+    function assignment_base($cmid='staticonly', $assignment=NULL, $cm=NULL, $course=NULL) {
+        if ($cmid == 'staticonly') {
+            //use static functions only!
+            return;
+        }
 
         global $CFG;
 
-        if ($cmid) {
-            if ($cm) {
-                $this->cm = $cm;
-            } else if (! $this->cm = get_coursemodule_from_id('assignment', $cmid)) {
-                error('Course Module ID was incorrect');
-            }
+        if ($cm) {
+            $this->cm = $cm;
+        } else if (! $this->cm = get_coursemodule_from_id('assignment', $cmid)) {
+            debugging('grr');
+            error('Course Module ID was incorrect');
+        }
 
-            $this->context = get_context_instance(CONTEXT_MODULE,$this->cm->id);
+        $this->context = get_context_instance(CONTEXT_MODULE,$this->cm->id);
 
-            if ($course) {
-                $this->course = $course;
-            } else if (! $this->course = get_record('course', 'id', $this->cm->course)) {
-                error('Course is misconfigured');
-            }
+        if ($course) {
+            $this->course = $course;
+        } else if (! $this->course = get_record('course', 'id', $this->cm->course)) {
+            error('Course is misconfigured');
+        }
 
-            if ($assignment) {
-                $this->assignment = $assignment;
-            } else if (! $this->assignment = get_record('assignment', 'id', $this->cm->instance)) {
-                error('assignment ID was incorrect');
-            }
+        if ($assignment) {
+            $this->assignment = $assignment;
+        } else if (! $this->assignment = get_record('assignment', 'id', $this->cm->instance)) {
+            error('assignment ID was incorrect');
+        }
+
+        $this->assignment->cmidnumber = $cm->id;     // compatibility with modedit assignment obj
+        $this->assignment->courseid   = $course->id; // compatibility with modedit assignment obj
 
-            $this->strassignment = get_string('modulename', 'assignment');
-            $this->strassignments = get_string('modulenameplural', 'assignment');
-            $this->strsubmissions = get_string('submissions', 'assignment');
-            $this->strlastmodified = get_string('lastmodified');
+        $this->strassignment = get_string('modulename', 'assignment');
+        $this->strassignments = get_string('modulenameplural', 'assignment');
+        $this->strsubmissions = get_string('submissions', 'assignment');
+        $this->strlastmodified = get_string('lastmodified');
+        
+        $this->navigation[] = array('name' => $this->strassignments, 'link' => "index.php?id={$this->course->id}", 'type' => 'activity');
+                  
+        $this->pagetitle = strip_tags($this->course->shortname.': '.$this->strassignment.': '.format_string($this->assignment->name,true));
+
+        // visibility
+        $context = get_context_instance(CONTEXT_MODULE, $cmid);
+        if (!$this->cm->visible and !has_capability('moodle/course:viewhiddenactivities', $context)) {
+            $pagetitle = strip_tags($this->course->shortname.': '.$this->strassignment);
+            $this->navigation[] = array('name' => $this->strassignment, 'link' => '', 'type' => 'activityinstance');
+            $navigation = build_navigation($this->navigation);
             
-            $this->navigation[] = array('name' => $this->strassignments, 'link' => "index.php?id={$this->course->id}", 'type' => 'activity');
-                      
-            $this->pagetitle = strip_tags($this->course->shortname.': '.$this->strassignment.': '.format_string($this->assignment->name,true));
-
-            // visibility
-            $context = get_context_instance(CONTEXT_MODULE, $cmid);
-            if (!$this->cm->visible and !has_capability('moodle/course:viewhiddenactivities', $context)) {
-                $pagetitle = strip_tags($this->course->shortname.': '.$this->strassignment);
-                $this->navigation[] = array('name' => $this->strassignment, 'link' => '', 'type' => 'activityinstance');
-                $navigation = build_navigation($this->navigation);
-                
-                print_header($pagetitle, $this->course->fullname, "$this->navigation $this->strassignment", 
-                             "", "", true, '', navmenu($this->course, $this->cm));
-                notice(get_string("activityiscurrentlyhidden"), "$CFG->wwwroot/course/view.php?id={$this->course->id}");
-            }
-            $this->currentgroup = get_current_group($this->course->id);
+            print_header($pagetitle, $this->course->fullname, "$this->navigation $this->strassignment", 
+                         "", "", true, '', navmenu($this->course, $this->cm));
+            notice(get_string("activityiscurrentlyhidden"), "$CFG->wwwroot/course/view.php?id={$this->course->id}");
         }
+        $this->currentgroup = get_and_set_current_group($this->course, groupmode($this->course, $this->cm));
 
     /// Set up things for a HTML editor if it's needed
         if ($this->usehtmleditor = can_use_html_editor()) {
@@ -155,7 +163,11 @@ class assignment_base {
                      true, update_module_button($this->cm->id, $this->course->id, $this->strassignment), 
                      navmenu($this->course, $this->cm));
 
+        $groupmode = groupmode($this->course, $this->cm);
+        $currentgroup = setup_and_print_groups($this->course, $groupmode, 'view.php?id=' . $this->cm->id);
+        
         echo '<div class="reportlink">'.$this->submittedlink().'</div>';
+        echo '<div class="clearer"></div>';
     }
 
 
@@ -316,82 +328,6 @@ class assignment_base {
         
     }
 
-    /**
-     * Print the setup form for the current assignment type
-     *
-     * Includes common.html and the assignment type's mod.html
-     * This will be suitable for all assignment types
-     *
-     * @param $form object The object used to fill the form
-     * @param $action url Default destination for this form
-     */
-    function setup(&$form, $action='') {
-        global $CFG, $THEME;
-
-        if (empty($this->course)) {
-            if (! $this->course = get_record("course", "id", $form->course)) {
-                error("Course is misconfigured");
-            }
-        }
-
-        if (empty($action)) {   // Default destination for this form
-            $action = $CFG->wwwroot.'/course/mod.php';
-        }
-
-        if (empty($form->assignmenttype)) {
-            $form->assignmenttype = '';
-        } else {
-            $form->assignmenttype = clean_param($form->assignmenttype, PARAM_SAFEDIR);
-        }
-
-        if (empty($form->name)) {
-            $form->name = '';
-        } else {
-            $form->name = stripslashes($form->name);
-        }
-
-        if (empty($form->description)) {
-            $form->description = '';
-        } else {
-            $form->description = stripslashes($form->description);
-        }
-
-        $strname    = get_string('name');
-        $strassignments = get_string('modulenameplural', 'assignment');
-        $strheading = empty($form->name) ? get_string("type$form->assignmenttype",'assignment') : s(format_string(stripslashes($form->name),true));
-        
-        print_header($this->course->shortname.': '.$strheading, $this->course->fullname,
-                "<a href=\"$CFG->wwwroot/course/view.php?id={$this->course->id}\">{$this->course->shortname} </a> -> ".
-                "<a href=\"$CFG->wwwroot/mod/assignment/index.php?id={$this->course->id}\">$strassignments</a> -> $strheading");
-
-        print_simple_box_start('center', '70%');
-        print_heading(get_string('type'.$form->assignmenttype,'assignment'));
-        print_simple_box(get_string('help'.$form->assignmenttype, 'assignment'), 'center');
-        include("$CFG->dirroot/mod/assignment/type/common.html");
-
-        include("$CFG->dirroot/mod/assignment/type/".$form->assignmenttype."/mod.html");
-        $this->setup_end(); 
-    }
-
-    /**
-     * Print the end of the setup form for the current assignment type
-     *
-     * Includes common_end.html
-     */
-    function setup_end() {
-        global $CFG;
-
-        include($CFG->dirroot.'/mod/assignment/type/common_end.html');
-
-        print_simple_box_end();
-
-        if ($this->usehtmleditor) {
-            use_html_editor();
-        }
-
-        print_footer($this->course);
-    }
-
     /**
      * Create a new assignment activity
      *
@@ -406,13 +342,16 @@ class assignment_base {
      * @return int The id of the assignment
      */
     function add_instance($assignment) {
+        global $COURSE;
 
         $assignment->timemodified = time();
+        $assignment->courseid = $assignment->course;
 
         if ($returnid = insert_record("assignment", $assignment)) {
+            $assignment->id = $returnid;
 
             if ($assignment->timedue) {
-                $event = NULL;
+                $event = new object();
                 $event->name        = $assignment->name;
                 $event->description = $assignment->description;
                 $event->courseid    = $assignment->course;
@@ -426,8 +365,13 @@ class assignment_base {
 
                 add_event($event);
             }
+
+            $assignment = stripslashes_recursive($assignment);
+            assignment_base::create_grade_item($assignment);
+
         }
 
+
         return $returnid;
     }
 
@@ -485,44 +429,134 @@ class assignment_base {
      * @return int The assignment id
      */
     function update_instance($assignment) {
+        global $COURSE;
 
         $assignment->timemodified = time();
 
         $assignment->id = $assignment->instance;
+        $assignment->courseid = $assignment->course;
 
-        if ($returnid = update_record('assignment', $assignment)) {
+        if (!update_record('assignment', $assignment)) {
+            return false;
+        }
 
-            if ($assignment->timedue) {
-                $event = NULL;
+        if ($assignment->timedue) {
+            $event = new object();
 
-                if ($event->id = get_field('event', 'id', 'modulename', 'assignment', 'instance', $assignment->id)) {
+            if ($event->id = get_field('event', 'id', 'modulename', 'assignment', 'instance', $assignment->id)) {
 
-                    $event->name        = $assignment->name;
-                    $event->description = $assignment->description;
-                    $event->timestart   = $assignment->timedue;
+                $event->name        = $assignment->name;
+                $event->description = $assignment->description;
+                $event->timestart   = $assignment->timedue;
 
-                    update_event($event);
-                } else {
-                    $event = NULL;
-                    $event->name        = $assignment->name;
-                    $event->description = $assignment->description;
-                    $event->courseid    = $assignment->course;
-                    $event->groupid     = 0;
-                    $event->userid      = 0;
-                    $event->modulename  = 'assignment';
-                    $event->instance    = $assignment->id;
-                    $event->eventtype   = 'due';
-                    $event->timestart   = $assignment->timedue;
-                    $event->timeduration = 0;
-
-                    add_event($event);
-                }
+                update_event($event);
             } else {
-                delete_records('event', 'modulename', 'assignment', 'instance', $assignment->id);
+                $event = new object();
+                $event->name        = $assignment->name;
+                $event->description = $assignment->description;
+                $event->courseid    = $assignment->course;
+                $event->groupid     = 0;
+                $event->userid      = 0;
+                $event->modulename  = 'assignment';
+                $event->instance    = $assignment->id;
+                $event->eventtype   = 'due';
+                $event->timestart   = $assignment->timedue;
+                $event->timeduration = 0;
+
+                add_event($event);
             }
+        } else {
+            delete_records('event', 'modulename', 'assignment', 'instance', $assignment->id);
         }
 
-        return $returnid;
+        // get existing grade item
+        $assignment = stripslashes_recursive($assignment);
+        $grade_item = assignment_base::get_grade_item($assignment);
+        $grade_item->idnumber = $assignment->cmidnumber;
+
+        if ($assignment->grade > 0) { 
+            $grade_item->gradetype = GRADE_TYPE_VALUE;
+            $grade_item->grademax  = $assignment->grade;
+            $grade_item->grademin  = 0;
+            $grade_item->scaleid   = 0;
+            $grade_item->update();
+
+        } else if ($assignment->grade < 0) {
+            $grade_item->gradetype = GRADE_TYPE_SCALE;
+            $grade_item->scaleid   = -$assignment->grade;
+            $grade_item->update();
+
+        } else {
+            //how to indicate no grading?
+            $grade_item->gradetype = GRADE_TYPE_TEXT; 
+            $grade_item->grademax  = 0;
+            $grade_item->grademin  = 0;
+            $grade_item->scaleid   = 0;
+            $grade_item->update();
+        }
+
+        return true;
+    }
+
+    /**
+     * Creates grade item for assignment.
+     * Static method - do not override!
+     */
+    function create_grade_item($assignment) {
+        $params = array('courseid'=>$assignment->courseid,
+                        'itemname'=>'assignment',
+                        'itemtype'=>'mod',
+                        'itemmodule'=>'assignment',
+                        'iteminstance'=>$assignment->id,
+                        'idnumber'=>$assignment->cmidnumber);
+
+        if ($assignment->grade > 0) {
+            $params['gradetype'] = GRADE_TYPE_VALUE; 
+            $params['grademax']  = $assignment->grade;
+
+        } else if ($assignment->grade < 0) {
+            $params['gradetype'] = GRADE_TYPE_SCALE; 
+            $params['scaleid']   = -$assignment->grade;
+
+        } else {
+            //how to indicate no grading?
+            $params['gradetype'] = GRADE_TYPE_TEXT; 
+            $params['grademax']  = $assignment->grade;
+            $params['grademax']  = 0;
+            $params['grademin']  = 0;
+        }
+
+        $itemid = grade_create_item($params);
+        return $itemid;
+    }
+
+    /**
+     * Returns grade item for assignment.
+     * Final static method - do not override!
+     */
+    function get_grade_item($assignment) {
+        if ($items = grade_get_items($assignment->courseid, NULL, 'mod', 'assignment', $assignment->id)) {
+            $grade_item = reset($items);
+            return $grade_item;
+        }
+        // create new one
+        if (!$itemid = assignment_base::create_grade_item($assignment)) {
+            error('Can not create grade item!');
+        }
+        return grade_item::fetch('id', $itemid);
+    }
+
+    /**
+     * Update grade item for assignment.
+     * Final static method - do not override!
+     */
+    function update_grade($sid) {
+        $grade_item = assignment_base::get_grade_item($this->assignment);
+        $sub = get_record('assignment_submissions', 'id', $sid);
+        if ($sub->grade <0 ) {
+            $sub->grade = null;
+        }
+        events_trigger('grade_added', array('itemid'=>$grade_item->id, 'gradevalue'=>$sub->grade, 'userid'=>$sub->userid, 'feedback'=>$sub->submissioncomment, 'feedbackformat'=>$sub->format));
     }
 
     /**
@@ -620,14 +654,19 @@ class assignment_base {
 
                     if ($updatedb){
                         if ($newsubmission) {
-                            if (!insert_record('assignment_submissions', $submission)) {
+                            if (!$sid = insert_record('assignment_submissions', $submission)) {
                                 return false;
                             }
+                            $submission->id = $sid;
                         } else {
                             if (!update_record('assignment_submissions', $submission)) {
                                 return false;
                             }
-                        }            
+                        }
+
+                        // triger grade event
+                        $this->update_grade($submission->id);
+
                         //add to log only if updating
                         add_to_log($this->course->id, 'assignment', 'update grades', 
                                    'submissions.php?id='.$this->assignment->id.'&user='.$submission->userid, 
@@ -795,16 +834,11 @@ class assignment_base {
         $cm         = $this->cm;
         $context    = get_context_instance(CONTEXT_MODULE, $cm->id);
 
-    /// Get all teachers and students
+        /// Get all ppl that can submit assignments
 
-        $currentgroup = get_current_group($course->id);
+        $currentgroup = get_and_set_current_group($course, groupmode($course, $cm));
 
-        if ($currentgroup) {
-            $users = get_group_users($currentgroup);
-        } else {
-            $users = get_users_by_capability($context, 'mod/assignment:submit', 'u.id, u.id', '',
-                                 '', '', '', '', false);
-        }
+        $users = get_users_by_capability($context, 'mod/assignment:submit', 'u.id, u.id', '', '', '', $currentgroup, '', false);
 
         $select = 'SELECT u.id, u.firstname, u.lastname, u.picture,
                           s.id AS submissionid, s.grade, s.submissioncomment, 
@@ -1001,45 +1035,15 @@ class assignment_base {
         $navigation = build_navigation($crumbs);
         
         print_header_simple(format_string($this->assignment->name,true), "", $navigation, '', '', true, update_module_button($cm->id, $course->id, $this->strassignment), navmenu($course, $cm));
-    
-    ///Position swapped
-    /*
-        if ($groupmode = groupmode($course, $cm)) {   // Groups are being used
-            $currentgroup = setup_and_print_groups($course, $groupmode, 'submissions.php?id='.$this->cm->id);
-        } else {
-            $currentgroup = false;
-        }
-    */
-        
-        /// copied code from assignment module, if this is not the way to do this please change it
-        /// the above code does not work
-        /// set_and_print_groups() is not fully implemented as function groups_instance_print_grouping_selector()
-        /// and function groups_instance_print_group_selector() are missing.
-       
+
         $context = get_context_instance(CONTEXT_MODULE, $cm->id);
-        $changegroup = optional_param('group', -1, PARAM_INT);   // choose the current group
+
+        /// find out current groups mode
         $groupmode = groupmode($course, $cm);
-        $currentgroup = get_and_set_current_group($course, $groupmode, $changegroup);   
-    
-        /// Now we need a menu for separategroups as well!
-        if ($groupmode == VISIBLEGROUPS || ($groupmode
-            && has_capability('moodle/site:accessallgroups', $context))) {
-        
-            //the following query really needs to change
-            if ($groups = groups_get_groups_names($course->id)) { //TODO:
-                print_box_start('groupmenu');
-                print_group_menu($groups, $groupmode, $currentgroup, 'submissions.php?id='.$this->cm->id);
-                print_box_end(); // groupmenu
-            }
-        }
-   
-    /// Get all teachers and students
-        if ($currentgroup) {
-            $users = get_group_users($currentgroup);
-        } else {
-            $context = get_context_instance(CONTEXT_MODULE, $cm->id);
-            $users = get_users_by_capability($context, 'mod/assignment:submit'); // everyone with this capability set to non-prohibit
-        }
+        $currentgroup = setup_and_print_groups($course, $groupmode, 'submissions.php?id=' . $this->cm->id);
+
+        /// Get all ppl that are allowed to submit assignments
+        $users = get_users_by_capability($context, 'mod/assignment:submit', '', '', '', '', $currentgroup, '', false);
 
         $tablecolumns = array('picture', 'fullname', 'grade', 'submissioncomment', 'timemodified', 'timemarked', 'status');
         $tableheaders = array('', get_string('fullname'), get_string('grade'), get_string('comment', 'assignment'), get_string('lastmodified').' ('.$course->student.')', get_string('lastmodified').' ('.$course->teacher.')', get_string('status'));
@@ -1301,6 +1305,9 @@ class assignment_base {
             return false;
         }
 
+        // triger grade event
+        $this->update_grade($submission->id);
+
         add_to_log($this->course->id, 'assignment', 'update grades', 
                    'submissions.php?id='.$this->assignment->id.'&user='.$feedback->userid, $feedback->userid, $this->cm->id);
         
@@ -1426,8 +1433,8 @@ class assignment_base {
      */
     function get_graders($user) {
         //potential graders
-        $potgraders = get_users_by_capability($this->context, 'mod/assignment:grade', $fields='', $sort='', $limitfrom='', 
-                                               $limitnum='', $groups='', $exceptions='', $doanything=false, $view=false);
+        $potgraders = get_users_by_capability($this->context, 'mod/assignment:grade', '', '', '', '', '', '', false, false);
+
         $graders = array();
         if (groupmode($this->course, $this->cm) == SEPARATEGROUPS) {   // Separate groups are being used
             if ($groups = user_group($this->course->id, $user->id)) {  // Try to find all groups
@@ -2253,7 +2260,7 @@ function assignment_count_real_submissions($assignment, $groupid=0) {
     global $CFG;
 
     if ($groupid) {     /// How many in a particular group?
-        return count_records_sql("SELECT COUNT(DISTINCT g.userid, g.groupid)
+        return count_records_sql("SELECT COUNT(DISTINCT gm.userid, gm.groupid)
                                      FROM {$CFG->prefix}assignment_submissions a,
                                           ".groups_members_from_sql()."
                                     WHERE a.assignment = $assignment->id 
@@ -2264,7 +2271,7 @@ function assignment_count_real_submissions($assignment, $groupid=0) {
         $context = get_context_instance(CONTEXT_MODULE, $cm->id);
 
         // this is all the users with this capability set, in this context or higher
-        if ($users = get_users_by_capability($context, 'mod/assignment:submit')) {
+        if ($users = get_users_by_capability($context, 'mod/assignment:submit', '', '', '', '', 0, '', false)) {
             foreach ($users as $user) {
                 $array[] = $user->id;
             }
@@ -2483,8 +2490,8 @@ function assignment_print_overview($courses, &$htmlarray) {
             
             // count how many people can submit
             $submissions = 0; // init
-            if ($students = get_users_by_capability($context, 'mod/assignment:submit')) {
-                foreach ($students as $student) {
+            if ($students = get_users_by_capability($context, 'mod/assignment:submit', '', '', '', '', 0, '', false)) {
+                 foreach ($students as $student) {
                     if (get_records_sql("SELECT id,id FROM {$CFG->prefix}assignment_submissions
                                          WHERE assignment = $assignment->id AND
                                                userid = $student->id AND
diff --git a/mod/assignment/type/common.html b/mod/assignment/type/common.html
deleted file mode 100644 (file)
index e5dc1c8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<form id="form" method="post" action="<?php p($action) ?>">
-<fieldset class="invisiblefieldset">
-<?php
-   $form->sesskey = sesskey();
-
-   // Pass variables through
-   foreach ($form as $assname => $assvalue) {
-       echo '<input type="hidden" name="'.$assname.'" value="'.s($assvalue).'" />'."\n";
-   }
-
-?>
diff --git a/mod/assignment/type/common_end.html b/mod/assignment/type/common_end.html
deleted file mode 100644 (file)
index 61578b4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-</fieldset>
-</form>
index 69affda69961036808f0803ce42e89ce12b9337e..bb7d155ab92cbb9b04716701d207e4d637044a9f 100644 (file)
@@ -6,8 +6,8 @@
  */
 class assignment_offline extends assignment_base {
 
-    function assignment_offline($cmid=0) {
-        parent::assignment_base($cmid);
+    function assignment_offline($cmid='staticonly', $assignment=NULL, $cm=NULL, $course=NULL) {
+        parent::assignment_base($cmid, $assignment, $cm, $course);
     }
 
     function display_lateness($timesubmitted) {
@@ -75,6 +75,9 @@ class assignment_offline extends assignment_base {
             return false;
         }
 
+        // triger grade event
+        $this->update_grade($submission->id);
+
         add_to_log($this->course->id, 'assignment', 'update grades', 
                    'submissions.php?id='.$this->assignment->id.'&user='.$feedback->userid, $feedback->userid, $this->cm->id);
         
index 63088a7dd205ca3e95a9e111909aa2cffb961d70..b8e9b11d2bde1f2d0d06e70ec121a32908e95e3b 100644 (file)
@@ -7,8 +7,8 @@ require_once($CFG->libdir.'/formslib.php');
  */
 class assignment_online extends assignment_base {
 
-    function assignment_online($cmid=0) {
-        parent::assignment_base($cmid);
+    function assignment_online($cmid='staticonly', $assignment=NULL, $cm=NULL, $course=NULL) {
+        parent::assignment_base($cmid, $assignment, $cm, $course);
     }
 
     function view() {
diff --git a/mod/assignment/type/postdata.html b/mod/assignment/type/postdata.html
deleted file mode 100644 (file)
index 7c19c58..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<input type="hidden" name=grade      value="<?php p($form->grade) ?>" />
-<input type="hidden" name=course     value="<?php p($form->course) ?>" />
-<input type="hidden" name=coursemodule  value="<?php p($form->coursemodule) ?>" />
-<input type="hidden" name=section       value="<?php p($form->section) ?>" />
-<input type="hidden" name=module     value="<?php p($form->module) ?>" />
-<input type="hidden" name=modulename value="<?php p($form->modulename) ?>" />
-<input type="hidden" name=instance   value="<?php p($form->instance) ?>" />
-<input type="hidden" name=mode       value="<?php p($form->mode) ?>" />
-
-<input type="hidden" name=name       value="<?php p($form->name) ?>" />
-<input type="hidden" name=description       value="<?php p($form->description) ?>" />
-<input type="hidden" name=format       value="<?php p($form->format) ?>" />
-<input type="hidden" name=type       value="<?php p($form->type) ?>" />
-<input type="hidden" name=closestate       value="<?php p($form->closestate) ?>" />
-<input type="hidden" name=availableday       value="<?php p($form->availableday) ?>" />
-<input type="hidden" name=availablemonth     value="<?php p($form->availablemonth) ?>" />
-<input type="hidden" name=availableyear       value="<?php p($form->availableyear) ?>" />
-<input type="hidden" name=availablehour       value="<?php p($form->availablehour) ?>" />
-<input type="hidden" name=availableminute       value="<?php p($form->availableminute) ?>" />
-<input type="hidden" name=dueday       value="<?php p($form->dueday) ?>" />
-<input type="hidden" name=duemonth     value="<?php p($form->duemonth) ?>" />
-<input type="hidden" name=dueyear       value="<?php p($form->dueyear) ?>" />
-<input type="hidden" name=duehour       value="<?php p($form->duehour) ?>" />
-<input type="hidden" name=dueminute       value="<?php p($form->dueminute) ?>" />
-
-
index 3bbb8234b16dd53bc637096a42faea4352da12fb..252087d5abf95b10d165d4b5da5d2e832d74b09b 100644 (file)
@@ -9,8 +9,8 @@ define('ASSIGNMENT_STATUS_SUBMITTED', 'submitted');
  */
 class assignment_upload extends assignment_base {
 
-    function assignment_upload($cmid=0) {
-        parent::assignment_base($cmid);
+    function assignment_upload($cmid='staticonly', $assignment=NULL, $cm=NULL, $course=NULL) {
+        parent::assignment_base($cmid, $assignment, $cm, $course);
 
     }
 
index 1fe3befaf50076b7dee5e712a445644efe80fb26..b74dcbc14d49dbb3c79909dd03f7652b11f61215 100644 (file)
@@ -39,8 +39,8 @@ class assignment_uploadsingle extends assignment_base {
         return $output;    
     }
 
-    function assignment_uploadsingle($cmid=0) {
-        parent::assignment_base($cmid);
+    function assignment_uploadsingle($cmid='staticonly', $assignment=NULL, $cm=NULL, $course=NULL) {
+        parent::assignment_base($cmid, $assignment, $cm, $course);
 
     }
 
index cfd42f4fc494836c05f256c5432815096c74486c..9c31402c3fd69c510039e65d96ffd506d4aac42e 100644 (file)
@@ -5,8 +5,8 @@
 //  This fragment is called by /admin/index.php
 ////////////////////////////////////////////////////////////////////////////////
 
-$module->version  = 2007020200;
-$module->requires = 2007020200;  // Requires this Moodle version
+$module->version  = 2007052700;
+$module->requires = 2007052700;  // Requires this Moodle version
 $module->cron     = 60;
 
 ?>
index 478c13f22b1d7aa6ad4f8f0280784371e93e41f8..122ffcc8b8ccd244b61093c74b16cf39b4e0e447 100644 (file)
@@ -6,7 +6,7 @@
 // This is compared against the values stored in the database to determine
 // whether upgrades should be performed (see lib/db/*.php)
 
-   $version = 2007052200;  // YYYYMMDD = date
+   $version = 2007052700;  // YYYYMMDD = date
                            //       XY = increments within a single day
 
    $release = '1.9 dev';    // Human-friendly version name