From 56a800aac5cd7eeba20fa70f533387ed2054489a Mon Sep 17 00:00:00 2001 From: rkingdon <rkingdon> Date: Mon, 12 May 2003 21:18:21 +0000 Subject: [PATCH] Correcting bugs in agreement of assessment and for self assessed submissions --- mod/workshop/assessments.php | 11 +- mod/workshop/lib.php | 233 +++++++++++++++++++++++++++-------- mod/workshop/submissions.php | 73 ++++++++++- mod/workshop/view.php | 2 +- 4 files changed, 259 insertions(+), 60 deletions(-) diff --git a/mod/workshop/assessments.php b/mod/workshop/assessments.php index 35afcdb3ce..75fccb3b1c 100644 --- a/mod/workshop/assessments.php +++ b/mod/workshop/assessments.php @@ -113,8 +113,8 @@ /*************** agree (to) assessment (by student) ***************************/ elseif ($action == 'agreeassessment') { $timenow = time(); - - if (!$assessment = get_record("workshop_assessments", "id", $_GET['aid'])) { + // assessment id comes from link or hidden form variable + if (!$assessment = get_record("workshop_assessments", "id", $_REQUEST['aid'])) { error("Assessment : agree assessment failed"); } //save time of agreement @@ -690,8 +690,11 @@ // update the time of the assessment record (may be re-edited)... set_field("workshop_assessments", "timecreated", $timenow, "id", $assessment->id); - // if the workshop does NOT have allow peer agreement then set timeagreed - if (!$workshop->agreeassessments) { + // if the workshop does NOT have allow peer agreement or it's self assessment then set timeagreed + if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { + error ("Updateassessment: submission record not found"); + } + if (!$workshop->agreeassessments or ($submission->userid == $USER->id)) { set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id); } set_field("workshop_assessments", "grade", $grade, "id", $assessment->id); diff --git a/mod/workshop/lib.php b/mod/workshop/lib.php index 284bc02824..dbc9842304 100644 --- a/mod/workshop/lib.php +++ b/mod/workshop/lib.php @@ -275,7 +275,7 @@ function workshop_cron () { $posthtml .= "<HR><FONT FACE=sans-serif>"; $posthtml .= "<P>$msg</P>"; $posthtml .= "<P>You can see it <A HREF=\"$CFG->wwwroot/mod/workshop/view.php?a=$workshop->id\">"; - $posthtml .= "in to your peer graded assignment</A>.</P></FONT><HR>"; + $posthtml .= "in your workshop assignment</A>.</P></FONT><HR>"; } else { $posthtml = ""; } @@ -357,7 +357,7 @@ function workshop_cron () { $posthtml .= "<HR><FONT FACE=sans-serif>"; $posthtml .= "<P>$msg</P>"; $posthtml .= "<P>You can see it <A HREF=\"$CFG->wwwroot/mod/workshop/view.php?a=$workshop->id\">"; - $posthtml .= "in to your workshop assignment</A>.</P></FONT><HR>"; + $posthtml .= "in your workshop assignment</A>.</P></FONT><HR>"; } else { $posthtml = ""; @@ -397,7 +397,7 @@ function workshop_cron () { $posthtml .= "<HR><FONT FACE=sans-serif>"; $posthtml .= "<P>$msg</P>"; $posthtml .= "<P>You can see it <A HREF=\"$CFG->wwwroot/mod/workshop/view.php?a=$workshop->id\">"; - $posthtml .= "in to your workshop assignment</A>.</P></FONT><HR>"; + $posthtml .= "in your workshop assignment</A>.</P></FONT><HR>"; } else { $posthtml = ""; @@ -484,7 +484,7 @@ function workshop_cron () { $posthtml .= "<HR><FONT FACE=sans-serif>"; $posthtml .= "<P>$msg</P>"; $posthtml .= "<P>You can see it <A HREF=\"$CFG->wwwroot/mod/workshop/view.php?a=$workshop->id\">"; - $posthtml .= "in to your peer graded assignment</A>.</P></FONT><HR>"; + $posthtml .= "in your workshop assignment</A>.</P></FONT><HR>"; } else { $posthtml = ""; } @@ -658,6 +658,7 @@ function workshop_count_teacher_submissions_for_assessment($workshop, $user) { function workshop_count_ungraded_assessments_student($workshop) { function workshop_count_ungraded_assessments_teacher($workshop) { +function workshop_delete_submitted_files($workshop, $submission) { function workshop_delete_user_files($workshop, $user, $exception) { function workshop_file_area($workshop, $submission) { @@ -890,6 +891,24 @@ function workshop_count_ungraded_assessments_teacher($workshop) { } +function workshop_delete_submitted_files($workshop, $submission) { +// Deletes the files in the workshop area for this submission + + if ($basedir = workshop_file_area($workshop, $submission)) { + if ($files = get_directory_list($basedir)) { + foreach ($files as $file) { + if (unlink("$basedir/$file")) { + notify("Existing file '$file' has been deleted!"); + } + else { + notify("Attempt to delete file $basedir/$file has failed!"); + } + } + } + } + } + + function workshop_delete_user_files($workshop, $user, $exception) { // Deletes all the user files in the workshop area for a user // EXCEPT for any file named $exception @@ -974,16 +993,24 @@ function workshop_get_student_submission_assessments($workshop) { } -function workshop_get_student_submissions($workshop) { +function workshop_get_student_submissions($workshop, $order = "title") { // Return all ENROLLED student submissions global $CFG; - return get_records_sql("SELECT s.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}user_students u + if ($order = "title") { + $order = "s.title"; + } + if ($order == "name") { + $order = "firstname, lastname"; + } + return get_records_sql("SELECT s.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}user_students u, + {$CFG->prefix}user WHERE u.course = $workshop->course AND s.userid = u.userid + AND user.id = u.userid AND s.workshopid = $workshop->id AND s.timecreated > 0 - ORDER BY s.title"); + ORDER BY $order"); } @@ -1011,7 +1038,7 @@ function workshop_get_teacher_submissions($workshop) { // Return all teacher submissions, ordered by title global $CFG; - return get_records_sql("SELECT s.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}user_teachers u + return get_records_sql("SELECT s.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}user_teachers u WHERE u.course = $workshop->course AND s.userid = u.userid AND s.workshopid = $workshop->id @@ -1129,7 +1156,7 @@ function workshop_list_all_submissions($workshop, $user) { error("Course is misconfigured"); } $table->head = array (get_string("title", "workshop"), get_string("action", "workshop"), get_string("comment", "workshop")); - $table->align = array ("LEFT", "LEFT", "LEFT"); + $table->align = array ("left", "left", "left"); $table->size = array ("*", "*", "*"); $table->cellpadding = 2; $table->cellspacing = 0; @@ -1420,6 +1447,102 @@ function workshop_list_student_submissions($workshop, $user) { } +function workshop_list_submissions_for_admin($workshop, $order) { + // list the teacher sublmissions first + global $CFG, $USER; + + if (! $course = get_record("course", "id", $workshop->course)) { + error("Course is misconfigured"); + } + + $table->head = array (get_string("title", "workshop"), get_string("submittedby", "workshop"), get_string("action", "workshop")); + $table->align = array ("left", "left", "left"); + $table->size = array ("*", "*", "*"); + $table->cellpadding = 2; + $table->cellspacing = 0; + + if ($submissions = workshop_get_teacher_submissions($workshop)) { + foreach ($submissions as $submission) { + // has user already assessed this submission + if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id + AND userid = $USER->id")) { + $curtime = time(); + if (($curtime - $assessment->timecreated) > $CFG->maxeditingtime) { + $action = "<a href=\"assessments.php?action=assesssubmission&a=$workshop->id&aid=$assessment->id\">" + .get_string("reassess", "workshop")."</a>"; + } + else { // there's still time left to edit... + $action = "<a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">". + get_string("edit", "workshop")."</a>"; + } + } + else { // user has not graded this submission + $action = "<a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">". + get_string("assess", "workshop")."</a>"; + } + if ($assessments = workshop_get_assessments($submission)) { + $action .= " | "."<a href=\"assessments.php?action=adminlist&a=$workshop->id&sid=$submission->id\">". + get_string("listassessments", "workshop")."</a>"; + } + $action .= " | "."<a href=\"submissions.php?action=adminconfirmdelete&a=$workshop->id&sid=$submission->id\">". + get_string("delete", "workshop")."</a>"; + $table->data[] = array(workshop_print_submission_title($workshop, $submission), $course->teacher, $action); + } + print_table($table); + } + + echo "<CENTER><P><B>".get_string("studentsubmissions", "workshop", $course->student)."</B></CENTER><BR>\n"; + unset($table); + switch ($order) { + case "title" : + $table->head = array (get_string("title", "workshop"), "<a href=\"submissions.php?action=adminlist&a=$workshop->id&order=name\">". + get_string("submittedby", "workshop")."</a>", get_string("action", "workshop")); + break; + case "name" : + $table->head = array ("<a href=\"submissions.php?action=adminlist&a=$workshop->id&order=title\">". + get_string("title", "workshop")."</a>", get_string("submittedby", "workshop"), get_string("action", "workshop")); + break; + } + $table->align = array ("left", "left", "left"); + $table->size = array ("*", "*", "*"); + $table->cellpadding = 2; + $table->cellspacing = 0; + + if ($submissions = workshop_get_student_submissions($workshop, $order)) { + foreach ($submissions as $submission) { + if (!$user = get_record("user", "id", $submission->userid)) { + error("workshop_list_submissions_for_admin: failure to get user record"); + } + // has teacherer already assessed this submission + if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id + AND userid = $USER->id")) { + $curtime = time(); + if (($curtime - $assessment->timecreated) > $CFG->maxeditingtime) { + $action = "<a href=\"assessments.php?action=assesssubmission&a=$workshop->id&aid=$assessment->id\">". + get_string("reassess", "workshop")."</a>"; + } + else { // there's still time left to edit... + $action = "<a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">". + get_string("edit", "workshop")."</a>"; + } + } + else { // user has not assessed this submission + $action = "<a href=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">". + get_string("assess", "workshop")."</a>"; + } + if ($assessments = workshop_get_assessments($submission)) { + $action .= " | <a href=\"assessments.php?action=adminlist&a=$workshop->id&sid=$submission->id\">". + get_string("listassessments", "workshop")."</a>"; + } + $action .= " | <a href=\"submissions.php?action=adminconfirmdelete&a=$workshop->id&sid=$submission->id\">". + get_string("delete", "workshop")."</a>"; + $table->data[] = array(workshop_print_submission_title($workshop, $submission), "$user-firstname $user->lastname", $action); + } + print_table($table); + } + } + + function workshop_list_teacher_assessments($workshop, $user) { global $CFG; @@ -1479,59 +1602,59 @@ function workshop_list_teacher_submissions($workshop, $user) { // get the number of assessments this user has done $nassessed = count_records_select("workshop_assessments", "workshopid = $workshop->id AND userid = $user->id"); - + // count the number of assessments for each teacher submission if ($submissions = workshop_get_teacher_submissions($workshop)) { foreach ($submissions as $submission) { + $n = count_records("workshop_assessments", "submissionid", $submission->id); + // OK to have zero + $nassessments[$submission->id] = $n; + } + + // put the submissions with the lowest number of assessments first + asort($nassessments); + reset($nassessments); + $comment = ""; + foreach ($nassessments as $submissionid => $n) { $comment = ''; - // has user already assessed this submission - if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id - AND userid = $user->id AND timecreated > 0")) { - $timenow = time(); + $submission = get_record("workshop_submissions", "id", $submissionid); + // add if user has NOT already assessed this submission + if (!$assessment = get_record_select("workshop_assessments", "submissionid = $submissionid + AND userid = $user->id")) { + if ($nassessed < $workshop->ntassessments) { + $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">". + get_string("assess", "workshop")."</A>"; + $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment); + $nassessed++; + } + else { + break; + } + } + } + // now list user's assessments + if ($assessments = workshop_get_user_assessments($workshop, $user)) { + $timenow = time(); + foreach ($assessments as $assessment) { + if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { + error ("workshop_list_teacher_submissions: unable to get submission"); + } + $comment = ''; if (($timenow - $assessment->timecreated) > $CFG->maxeditingtime) { - $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">". - get_string("view", "workshop")."</A>"; - // has teacher graded user's assessment and is it cooked? - if ($assessment->timegraded and ($timenow - $assessment->timegraded > $CFG->maxeditingtime)) { - // add teacher's comment to action string - $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">". - get_string("view", "workshop")." ".get_string("teacherscomment", "workshop")."</A>"; - // show user the teacher's assessment and if they failed allow them to resubmit assessment - $percentage = number_format($assessment->gradinggrade*100/COMMENTSCALE, 0); - $comment = get_string("assessmentgrade", "workshop", $percentage )."%" ; - // is there a teacher's assessment, if so show a link to it - $otherassessments = workshop_get_assessments($submission); - foreach ($otherassessments as $otherassessment) { - if (isteacher($workshop->course, $otherassessment->userid) ) { - $comment .= " <A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$otherassessment->id\">". - get_string("viewassessmentofteacher", "workshop", $course->teacher)."</A>"; - } - } - // has user failed? - if ($assessment->gradinggrade < COMMENTSCALE*0.4) { - $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">". - get_string("edit", "workshop")."</A>"; + $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">" + .get_string("view", "workshop")."</A>"; + // has teacher graded user's assessment? + if ($assessment->timegraded) { + if (($timenow - $assessment->timegraded) > $CFG->maxeditingtime) { + $comment .= get_string("gradedbyteacher", "workshop", $course->teacher); } } - else { // teacher has not graded this assessment yet - $comment = get_string("awaitinggradingbyteacher", "workshop", $course->teacher); - } } else { // there's still time left to edit... $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">". get_string("edit", "workshop")."</A>"; } + $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment); } - else { // user has not graded this submission - if ($nassessed < $workshop->ntassessments) { - $action = "<A HREF=\"assessments.php?action=assesssubmission&a=$workshop->id&sid=$submission->id\">". - get_string("assess", "workshop")."</A>"; - } - else { - $action = "<A HREF=\"assessments.php?action=viewassessment&a=$workshop->id&aid=$assessment->id\">". - get_string("view", "workshop")."</A>"; - } - } - $table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment); } print_table($table); } @@ -1693,7 +1816,8 @@ function workshop_print_assessment($workshop, $assessment = FALSE, $showcommentl if ($assessment) { // set the internal flag is necessary - if (($assessment->userid == $USER->id) and !$assessment->timeagreed) { + if (($assessment->userid == $USER->id) and (($timenow - $assessment->timecreated) < $CFG->maxeditingtime) or + !$assessment->timeagreed) { $allowchanges = true; } if ($allowchanges or !$workshop->agreeassessments or !$workshop->hidegrades or $assessment->timeagreed) { @@ -2130,11 +2254,12 @@ function workshop_print_assessment($workshop, $assessment = FALSE, $showcommentl // ...and close the table, show submit button if needed... echo "</TABLE>\n"; if ($assessment) { - if ($allowchanges and ($assessment->userid == $USER->id)) { // second test is OK as dummy assessment record is created + if ($allowchanges) { echo "<INPUT TYPE=\"submit\" VALUE=\"".get_string("savemyassessment", "workshop")."\">\n"; } - // ...if user is author, assessment not agreed and there are no comments then show some buttons - if (($submission->userid == $USER->id) and !$assessment->timeagreed and !$comments) { + // ...if user is author, assessment not agreed and there are no comments and it's not self assessment then show some buttons + if (($submission->userid == $USER->id) and !$assessment->timeagreed and !$comments and + $submission->userid != $assessment->userid) { echo "<INPUT TYPE=button VALUE=\"".get_string("agreetothisassessment", "workshop")."\" ONCLICK=\"document.assessmentform.action.value='agreeassessment';document.assessmentform.submit();\">\n"; echo "<INPUT TYPE=submit VALUE=\"".get_string("disagreewiththisassessment", "workshop")."\" diff --git a/mod/workshop/submissions.php b/mod/workshop/submissions.php index 3cac81f38d..a05c4f4cce 100644 --- a/mod/workshop/submissions.php +++ b/mod/workshop/submissions.php @@ -4,6 +4,9 @@ /************************************************* ACTIONS handled are: + adminconfirmdelete + admindelete + adminlist calculatefinalgrades displayfinalgrades (teachers only) displayfinalweights @@ -69,8 +72,76 @@ } + /******************* admin confirm delete ************************************/ + if ($action == 'adminconfirmdelete' ) { + + if (!isteacher($course->id)) { + error("Only teachers can look at this page"); + } + if (!isset($_GET['sid'])) { + error("Admin confirm delete: submission id missing"); + } + + notice_yesno(get_string("confirmdeletionofthisitem","workshop"), + "submissions.php?action=admindelete&id=$cm->id&sid=$_GET[sid]", "submissions.php?id=$cm->id&action=adminlist"); + } + + + /******************* admin delete ************************************/ + elseif ($action == 'admindelete' ) { + + if (!isteacher($course->id)) { + error("Only teachers can look at this page"); + } + if (!$sid = isset($_GET['sid'])) { + error("Admin delete: submission id missing"); + } + if (!$submission = get_record("workshop_submissions", "id", $sid)) { + error("Admin delete: can not get submission record"); + } + print_string("deleting", "workshop"); + // first get any assessments... + if ($assessments = workshop_get_assessments($submission)) { + foreach($assessments as $assessment) { + // ...and all the associated records... + delete_records("workshop_comments", "assessmentid", $assessment->id); + delete_records("workshop_grades", "assessmentid", $assessment->id); + echo "."; + } + // ...now delete the assessments... + delete_records("workshop_assessments", "submissionid", $submission->id); + } + // ...and the submission record... + delete_records("workshop_submissions", "id", $submission->id); + // ..and finally the submitted file + workshop_delete_submitted_files($workshop, $submission); + + print_continue("submissions.php?id=$cm->id&action=adminlist"); + } + + + /******************* list all submissions ************************************/ + elseif ($action == 'adminlist' ) { + + if (!isteacher($course->id)) { + error("Only teachers can look at this page"); + } + if (empty($_GET['order'])) { + $order = "title"; + } + else { + $order = $_GET['order']; + } + + print_heading(get_string("listofallsubmissions", "workshop").":", "center"); + workshop_list_submissions_for_admin($workshop, $order); + print_continue("view.php?id=$cm->id"); + + } + + /*************** calculate final grades (by teacher) ***************************/ - if ($action == 'calculatefinalgrades') { + elseif ($action == 'calculatefinalgrades') { $form = (object)$_POST; diff --git a/mod/workshop/view.php b/mod/workshop/view.php index 091e9a9d80..c033176a0e 100644 --- a/mod/workshop/view.php +++ b/mod/workshop/view.php @@ -484,7 +484,7 @@ echo "<P><B><A HREF=\"view.php?id=$cm->id&action=makefinalgradesunavailable\">(". get_string("returnto", "workshop")." ".get_string("phase3", "workshop").")</A></B></P>"; } - echo "<P><B><A HREF=\"submissions.php?id=$cm->id&action=listallsubmissions\">". + echo "<P><B><A HREF=\"submissions.php?id=$cm->id&action=adminlist\">". get_string("listofallsubmissions", "workshop")."</A></B></P>\n"; } -- 2.39.5