From 5978010dd25aeb9045f42e2106c8041c7c3ea89e Mon Sep 17 00:00:00 2001 From: skodak Date: Sun, 23 Sep 2007 16:05:41 +0000 Subject: [PATCH] MDL-11358 final grade from gradebook is now shown in assignments - students see only final grades from gradebook --- mod/assignment/index.php | 9 +- mod/assignment/lib.php | 185 ++++++++++++------ mod/assignment/styles.php | 12 +- .../type/offline/assignment.class.php | 46 +++-- 4 files changed, 160 insertions(+), 92 deletions(-) diff --git a/mod/assignment/index.php b/mod/assignment/index.php index 6f5d82721b..cdd1295946 100644 --- a/mod/assignment/index.php +++ b/mod/assignment/index.php @@ -2,6 +2,7 @@ require_once("../../config.php"); require_once("lib.php"); + require_once($CFG->libdir.'/gradelib.php'); $id = required_param('id', PARAM_INT); // course @@ -62,12 +63,8 @@ $submitted = $assignmentinstance->submittedlink(); - $grade = '-'; - if ($submission = $assignmentinstance->get_submission($USER->id)) { - if ($submission->timemarked) { - $grade = $assignmentinstance->display_grade($submission->grade); - } - } + $grading_info = grade_get_grades($course->id, 'mod', 'assignment', $assignment->id, $USER->id); + $grade = $grading_info->items[0]->grades[$USER->id]->str_grade; $type = $types[$assignment->assignmenttype]; diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php index 07b81962c5..740b1438c0 100644 --- a/mod/assignment/lib.php +++ b/mod/assignment/lib.php @@ -228,34 +228,58 @@ class assignment_base { * @param $submission object The submission object or NULL in which case it will be loaded */ function view_feedback($submission=NULL) { - global $USER; + global $USER, $CFG; + require_once($CFG->libdir.'/gradelib.php'); + + if (!has_capability('mod/assignment:submit', $this->context, $USER->id, false)) { + // can not submit assignments -> no feedback + return; + } if (!$submission) { /// Get submission for this assignment $submission = $this->get_submission($USER->id); } - if (empty($submission->timemarked)) { /// Nothing to show, so print nothing + $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, $USER->id); + $item = $grading_info->items[0]; + $grade = $item->grades[$USER->id]; + + if ($grade->hidden or $grade->grade === false) { // hidden or error + return; + } + + if ($grade->grade === null and empty($feedback)) { /// Nothing to show yet return; } - /// We need the teacher info - if (! $teacher = get_record('user', 'id', $submission->teacher)) { - error('Could not find the teacher'); + if ($grade->overridden) { + $graded_date = $grade->overridden; + $graded_by = $grade->usermodified; + } else { + $graded_date = $submission->timemarked; + $graded_by = $submission->teacher; } + /// We need the teacher info + $teacher = get_record('user', 'id', $graded_by); + /// Print the feedback - print_heading(get_string('feedbackfromteacher', 'assignment', $this->course->teacher)); + print_heading(get_string('feedbackfromteacher', 'assignment', $this->course->teacher)); // TODO: fix teacher string echo ''; echo ''; echo ''; echo ''; echo ''; @@ -263,15 +287,13 @@ class assignment_base { echo ''; echo ''; echo ''; @@ -684,12 +706,18 @@ class assignment_base { $output.= 'opener.document.getElementById("up'.$submission->userid.'").innerHTML="'.addslashes_js($button).'";'; } - if (!empty($CFG->enableoutcomes) and empty($SESSION->flextable['mod-assignment-submissions']->collapse['outcomes'])) { - $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, $submission->userid); + $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, $submission->userid); + + if (empty($SESSION->flextable['mod-assignment-submissions']->collapse['finalgrade'])) { + $output.= 'opener.document.getElementById("finalgrade_'.$submission->userid. + '").innerHTML="'.$grading_info->items[0]->grades[$submission->userid]->str_grade.'";'."\n"; + } + + if (!empty($CFG->enableoutcomes) and empty($SESSION->flextable['mod-assignment-submissions']->collapse['outcome'])) { if (!empty($grading_info->outcomes)) { foreach($grading_info->outcomes as $n=>$outcome) { - if ($data->locked) { + if ($outcome->grades[$submission->userid]->locked) { continue; } @@ -775,6 +803,9 @@ class assignment_base { $subtype = 'assignmentold'; } + $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, array($user->id)); + $disabled = $grading_info->items[0]->grades[$userid]->locked || $grading_info->items[0]->grades[$userid]->overridden; + /// construct SQL, using current offset to find the data of the next student $course = $this->course; $assignment = $this->assignment; @@ -864,13 +895,14 @@ class assignment_base { echo ''; } echo '
'; - choose_from_menu(make_grades_menu($this->assignment->grade), 'grade', $submission->grade, get_string('nograde'), '', -1); + choose_from_menu(make_grades_menu($this->assignment->grade), 'grade', $submission->grade, get_string('nograde'), '', -1, false, $disabled); echo '
'; + echo '
'; + echo '
'.get_string('finalgrade', 'grades').': '.$grading_info->items[0]->grades[$userid]->str_grade.'
'; echo '
'; if (!empty($CFG->enableoutcomes)) { - $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, $submission->userid); foreach($grading_info->outcomes as $n=>$outcome) { echo '
'; $options = make_grades_menu(-$outcome->scaleid); @@ -888,15 +920,19 @@ class assignment_base { $this->preprocess_submission($submission); - print_textarea($this->usehtmleditor, 14, 58, 0, 0, 'submissioncomment', $submission->submissioncomment, $this->course->id); + if ($disabled) { + echo '
'.$grading_info->items[0]->grades[$userid]->str_feedback.'
'; - if ($this->usehtmleditor) { - echo ''; } else { - echo '
'; - choose_from_menu(format_text_menu(), "format", $submission->format, ""); - helpbutton("textformat", get_string("helpformatting")); - echo '
'; + print_textarea($this->usehtmleditor, 14, 58, 0, 0, 'submissioncomment', $submission->submissioncomment, $this->course->id); + if ($this->usehtmleditor) { + echo ''; + } else { + echo '
'; + choose_from_menu(format_text_menu(), "format", $submission->format, ""); + helpbutton("textformat", get_string("helpformatting")); + echo '
'; + } } ///Print Buttons in Single View @@ -939,7 +975,7 @@ class assignment_base { echo '
'; - print_user_picture($teacher->id, $this->course->id, $teacher->picture); + if ($teacher) { + print_user_picture($teacher->id, $this->course->id, $teacher->picture); + } echo ''; echo '
'; - echo '
'.fullname($teacher).'
'; - echo '
'.userdate($submission->timemarked).'
'; + if ($teacher) { + echo '
'.fullname($teacher).'
'; + } + echo '
'.userdate($graded_date).'
'; echo '
'; echo '
 '; - if ($this->assignment->grade) { - echo '
'; - echo get_string("grade").': '.$this->display_grade($submission->grade); - echo '
'; - echo '
'; - } + echo '
'; + echo get_string("grade").': '.$grade->str_grade; + echo '
'; + echo '
'; echo '
'; - echo format_text($submission->submissioncomment, $submission->format); + echo $grade->str_feedback; echo '
'; echo '
'; - if ($this->usehtmleditor) { + if (!$disabled and $this->usehtmleditor) { use_html_editor(); } @@ -1032,12 +1068,12 @@ class assignment_base { if (!empty($CFG->enablegroupings) && !empty($cm->groupingid)) { $groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id'); $users = array_intersect($users, array_keys($groupingusers)); - + } - $tablecolumns = array('picture', 'fullname', 'grade', 'submissioncomment', 'timemodified', 'timemarked', 'status'); + $tablecolumns = array('picture', 'fullname', 'grade', 'submissioncomment', 'timemodified', 'timemarked', 'status', 'finalgrade'); if ($uses_outcomes) { - $tablecolumns[] = ''; // no sorting based on outcomes column + $tablecolumns[] = 'outcome'; // no sorting based on outcomes column } $tableheaders = array('', @@ -1046,9 +1082,10 @@ class assignment_base { get_string('comment', 'assignment'), get_string('lastmodified').' ('.$course->student.')', get_string('lastmodified').' ('.$course->teacher.')', - get_string('status')); + get_string('status'), + get_string('finalgrade', 'grades')); if ($uses_outcomes) { - $tableheaders[] = get_string('outcomes', 'grades'); + $tableheaders[] = get_string('outcome', 'grades'); } require_once($CFG->libdir.'/tablelib.php'); @@ -1072,8 +1109,9 @@ class assignment_base { $table->column_class('timemodified', 'timemodified'); $table->column_class('timemarked', 'timemarked'); $table->column_class('status', 'status'); + $table->column_class('finalgrade', 'finalgrade'); if ($uses_outcomes) { - $table->column_class('outcomes', 'outcomes'); + $table->column_class('outcome', 'outcome'); } $table->set_attribute('cellspacing', '0'); @@ -1082,6 +1120,9 @@ class assignment_base { $table->set_attribute('width', '90%'); //$table->set_attribute('align', 'center'); + $table->no_sorting('finalgrade'); + $table->no_sorting('outcome'); + // Start working -- this is necessary as soon as the niceties are over $table->setup(); @@ -1133,6 +1174,7 @@ class assignment_base { if (($ausers = get_records_sql($select.$sql.$sort, $table->get_page_start(), $table->get_page_size())) !== false) { $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, array_keys($ausers)); foreach ($ausers as $auser) { + $final_grade = $grading_info->items[0]->grades[$auser->id]; /// Calculate user status $auser->status = ($auser->timemarked > 0) && ($auser->timemarked >= $auser->timemodified); $picture = print_user_picture($auser->id, $course->id, $auser->picture, false, true); @@ -1155,7 +1197,9 @@ class assignment_base { if ($auser->timemarked > 0) { $teachermodified = '
'.userdate($auser->timemarked).'
'; - if ($quickgrade) { + if ($final_grade->locked or $final_grade->overridden) { + $grade = '
'.$final_grade->str_grade.'
'; + } else if ($quickgrade) { $menu = choose_from_menu(make_grades_menu($this->assignment->grade), 'menu['.$auser->id.']', $auser->grade, get_string('nograde'),'',-1,true,false,$tabindex++); @@ -1166,7 +1210,9 @@ class assignment_base { } else { $teachermodified = '
 
'; - if ($quickgrade) { + if ($final_grade->locked or $final_grade->overridden) { + $grade = '
'.$final_grade->str_grade.'
'; + } else if ($quickgrade) { $menu = choose_from_menu(make_grades_menu($this->assignment->grade), 'menu['.$auser->id.']', $auser->grade, get_string('nograde'),'',-1,true,false,$tabindex++); @@ -1176,7 +1222,10 @@ class assignment_base { } } ///Print Comment - if ($quickgrade) { + if ($final_grade->locked or $final_grade->overridden) { + $comment = '
'.shorten_text(strip_tags($final_grade->str_feedback),15).'
'; + + } else if ($quickgrade) { $comment = '
' . '
'; @@ -1188,7 +1237,9 @@ class assignment_base { $teachermodified = '
 
'; $status = '
 
'; - if ($quickgrade) { // allow editing + if ($final_grade->locked or $final_grade->overridden) { + $grade = '
'.$final_grade->str_grade.'
'; + } else if ($quickgrade) { // allow editing $menu = choose_from_menu(make_grades_menu($this->assignment->grade), 'menu['.$auser->id.']', $auser->grade, get_string('nograde'),'',-1,true,false,$tabindex++); @@ -1197,7 +1248,9 @@ class assignment_base { $grade = '
-
'; } - if ($quickgrade) { + if ($final_grade->locked or $final_grade->overridden) { + $comment = '
'.$final_grade->str_feedback.'
'; + } else if ($quickgrade) { $comment = '
' . '
'; @@ -1222,6 +1275,8 @@ class assignment_base { $status = '
'.$button.'
'; + $finalgrade = ''.$final_grade->str_grade.''; + $outcomes = ''; if ($uses_outcomes) { @@ -1243,7 +1298,7 @@ class assignment_base { } - $row = array($picture, fullname($auser), $grade, $comment, $studentmodified, $teachermodified, $status); + $row = array($picture, fullname($auser), $grade, $comment, $studentmodified, $teachermodified, $status, $finalgrade); if ($uses_outcomes) { $row[] = $outcomes; } @@ -1314,8 +1369,8 @@ class assignment_base { * @return object The updated submission object */ function process_feedback() { - - global $USER; + global $CFG, $USER; + require_once($CFG->libdir.'/gradelib.php'); if (!$feedback = data_submitted()) { // No incoming data? return false; @@ -1332,34 +1387,40 @@ class assignment_base { return false; } + $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, $feedback->userid); + // store outcomes if needed $this->process_outcomes($feedback->userid); $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(); + if (!$grading_info->items[0]->grades[$feedback->userid]->locked and + !$grading_info->items[0]->grades[$feedback->userid]->overridden) { - unset($submission->data1); // Don't need to update this. - unset($submission->data2); // Don't need to update this. + $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(); - if (empty($submission->timemodified)) { // eg for offline assignments - // $submission->timemodified = time(); - } + unset($submission->data1); // Don't need to update this. + unset($submission->data2); // Don't need to update this. - if (! update_record('assignment_submissions', $submission)) { - return false; - } + if (empty($submission->timemodified)) { // eg for offline assignments + // $submission->timemodified = time(); + } - // triger grade event - $this->update_grade($submission); + 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); + // triger grade event + $this->update_grade($submission); + + 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; @@ -2020,7 +2081,7 @@ function assignment_get_user_grades($assignment, $userid=0) { $user = $userid ? "AND u.id = $userid" : ""; - $sql = "SELECT u.id, u.id AS userid, s.grade AS rawgrade, s.submissioncomment AS feedback, s.format AS feedbackformat + $sql = "SELECT u.id, u.id AS userid, s.grade AS rawgrade, s.submissioncomment AS feedback, s.format AS feedbackformat, s.teacher AS usermodified FROM {$CFG->prefix}user u, {$CFG->prefix}assignment_submissions s WHERE u.id = s.userid AND s.assignment = $assignment->id $user"; diff --git a/mod/assignment/styles.php b/mod/assignment/styles.php index 3419d539a6..ccdcf3f0fa 100644 --- a/mod/assignment/styles.php +++ b/mod/assignment/styles.php @@ -14,12 +14,15 @@ padding:5px; } -.mod-assignment .feedback .grade { +.mod-assignment .feedback .grade, +.mod-assignment .feedback .outcome, +.mod-assignment .feedback .finalgrade { float: right; } -.mod-assignment .feedback .outcome { - float: right; +.mod-assignment .feedback .disabledfeedback { + width: 500px; + height: 250px; } .mod-assignment .feedback .from { @@ -89,7 +92,8 @@ text-align: center; } -#mod-assignment-submissions .submissions .outcome { +#mod-assignment-submissions .submissions .outcome, +#mod-assignment-submissions .submissions .finalgrade { text-align: right; } diff --git a/mod/assignment/type/offline/assignment.class.php b/mod/assignment/type/offline/assignment.class.php index 8e86d9133b..9e3f0564b2 100644 --- a/mod/assignment/type/offline/assignment.class.php +++ b/mod/assignment/type/offline/assignment.class.php @@ -37,8 +37,8 @@ class assignment_offline extends assignment_base { // needed for the timemodified override function process_feedback() { - - global $USER; + global $CFG, $USER; + require_once($CFG->libdir.'/gradelib.php'); if (!$feedback = data_submitted()) { // No incoming data? return false; @@ -55,34 +55,40 @@ class assignment_offline extends assignment_base { return false; } + $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, $feedback->userid); + // store outcomes if needed $this->process_outcomes($feedback->userid); $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(); + if (!$grading_info->items[0]->grades[$feedback->userid]->locked and + !$grading_info->items[0]->grades[$feedback->userid]->overridden) { - unset($submission->data1); // Don't need to update this. - unset($submission->data2); // Don't need to update this. + $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(); - if (empty($submission->timemodified)) { // eg for offline assignments - $submission->timemodified = time(); - } + unset($submission->data1); // Don't need to update this. + unset($submission->data2); // Don't need to update this. - if (! update_record('assignment_submissions', $submission)) { - return false; - } + if (empty($submission->timemodified)) { // eg for offline assignments + $submission->timemodified = time(); + } + + if (! update_record('assignment_submissions', $submission)) { + return false; + } - // triger grade event - $this->update_grade($submission); + // triger grade event + $this->update_grade($submission); - add_to_log($this->course->id, 'assignment', 'update grades', - 'submissions.php?id='.$this->assignment->id.'&user='.$feedback->userid, $feedback->userid, $this->cm->id); + 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; -- 2.39.5