From 285b8f7fef12c9fefe983ad6716a65fb53a6a281 Mon Sep 17 00:00:00 2001 From: rkingdon Date: Mon, 1 Dec 2003 12:19:48 +0000 Subject: [PATCH] New version (2003113000), Analysis of Assessments added. --- mod/workshop/db/mysql.php | 12 +- mod/workshop/db/mysql.sql | 3 + mod/workshop/lib.php | 59 ++-- mod/workshop/submissions.php | 536 ++++++++++++++++++++++++++++++++--- mod/workshop/version.php | 2 +- mod/workshop/view.php | 2 + 6 files changed, 559 insertions(+), 55 deletions(-) diff --git a/mod/workshop/db/mysql.php b/mod/workshop/db/mysql.php index afbbe0305c..44c35dfefa 100644 --- a/mod/workshop/db/mysql.php +++ b/mod/workshop/db/mysql.php @@ -65,7 +65,17 @@ function workshop_upgrade($oldversion) { execute_sql("INSERT INTO `{$CFG->prefix}log_display` VALUES ('workshop', 'view', 'workshop', 'name')"); execute_sql("INSERT INTO `{$CFG->prefix}log_display` VALUES ('workshop', 'update', 'workshop', 'name')"); } - + + if ($oldversion < 2003113000) { + execute_sql("ALTER TABLE `{$CFG->prefix}workshop` ADD `teacherloading` tinyint(3) unsigned + NOT NULL default '5'"); + execute_sql("ALTER TABLE `{$CFG->prefix}workshop` ADD `assessmentstodrop` tinyint(3) unsigned + NOT NULL default '0'"); + execute_sql("ALTER TABLE `{$CFG->prefix}workshop_assessments` ADD `donotuse` tinyint(3) unsigned + NOT NULL default '0' AFTER `resubmission`"); + execute_sql("ALTER TABLE `{$CFG->prefix}workshop_grades` ADD INDEX (`assessmentid`)"); + } + return true; } diff --git a/mod/workshop/db/mysql.sql b/mod/workshop/db/mysql.sql index 5c0bd39ab3..356ff53043 100644 --- a/mod/workshop/db/mysql.sql +++ b/mod/workshop/db/mysql.sql @@ -30,6 +30,8 @@ CREATE TABLE `prefix_workshop` ( `biasweight` tinyint(3) unsigned NOT NULL default '5', `reliabilityweight` tinyint(3) unsigned NOT NULL default '5', `gradingweight` tinyint(3) unsigned NOT NULL default '5', + `teacherloading` tinyint(3) unsigned NOT NULL default '5', + `assessmentstodrop` tinyint(3) unsigned NOT NULL default '0', `showleaguetable` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`id`) ) COMMENT='Defines workshop'; @@ -73,6 +75,7 @@ CREATE TABLE `prefix_workshop_assessments` ( `gradinggrade` int(3) NOT NULL default '0', `mailed` tinyint(3) unsigned NOT NULL default '0', `resubmission` tinyint(3) unsigned NOT NULL default '0', + `donotuse` tinyint(3) unsigned NOT NULL default '0', `generalcomment` text NOT NULL, `teachercomment` text NOT NULL, PRIMARY KEY (`id`) diff --git a/mod/workshop/lib.php b/mod/workshop/lib.php index c2ea3023f6..fc0a2a753b 100644 --- a/mod/workshop/lib.php +++ b/mod/workshop/lib.php @@ -46,7 +46,7 @@ $WORKSHOP_EWEIGHTS = array( 0 => -4.0, 1 => -2.0, 2 => -1.5, 3 => -1.0, 4 => -0 14 => 4.0); $WORKSHOP_FWEIGHTS = array( 0 => 0, 1 => 0.1, 2 => 0.25, 3 => 0.5, 4 => 0.75, 5 => 1.0, 6 => 1.5, - 7 => 2.0, 8 => 3.0, 9 => 5.0, 10 => 7.5, 11=> 10.0); + 7 => 2.0, 8 => 3.0, 9 => 5.0, 10 => 7.5, 11=> 10.0, 12=>50.0); if (!defined("COMMENTSCALE")) { define("COMMENTSCALE", 20); @@ -3384,38 +3384,57 @@ function workshop_print_submission_assessments($workshop, $submission, $type) { case "teacher" : if ($submission->teachergrade) { // if there's a final teacher's grade... $str = "$submission->teachergrade "; - } + } foreach ($assessments as $assessment) { if (isteacher($workshop->course, $assessment->userid)) { - $str .= "id&aid=$assessment->id\">["; + + $str .= "id&aid=$assessment->id\">"; + if ($assessment->donotuse) { + $str .= "<"; + } else { + $str .= "["; + } $str .= number_format($assessment->grade, 0); if ($assessment->gradinggrade) { // funny, teacher is grading self! $str .= "/".number_format($assessment->gradinggrade*100/COMMENTSCALE, 0)."%"; - } - $str .= "] "; } + if ($assessment->donotuse) { + $str .= "> "; + } else { + $str .= "] "; + } } + } break; case "student" : if ($submission->peergrade) { // if there's a final peer grade... $str = "$submission->peergrade "; - } + } foreach ($assessments as $assessment) { if (isstudent($workshop->course, $assessment->userid)) { - $str .= "id&aid=$assessment->id\">{"; + $str .= "id&aid=$assessment->id\">"; + if ($assessment->donotuse) { + $str .= "<"; + } else { + $str .= "{"; + } $str .= number_format($assessment->grade, 0); if ($assessment->gradinggrade) { $str .= "/".number_format($assessment->gradinggrade*100/COMMENTSCALE, 0)."%"; - } - $str .= "} "; } + if ($assessment->donotuse) { + $str .= "> "; + } else { + $str .= "} "; + } } + } break; - } } + } if (!$str) { $str = " "; // be kind to Mozilla browsers! - } + } return $str; } @@ -3569,7 +3588,7 @@ function workshop_print_upload_form($workshop) { function workshop_print_user_assessments($workshop, $user) { // Returns the number of assessments and a hyperlinked list of grading grades for the assessments made by this user - if ($assessments = workshop_get_user_assessments($workshop, $user)) { + if ($assessments = workshop_get_user_assessments_done($workshop, $user)) { $n = count($assessments); $str = "$n ("; foreach ($assessments as $assessment) { @@ -3577,19 +3596,23 @@ function workshop_print_user_assessments($workshop, $user) { $gradingscaled = intval($assessment->gradinggrade * $workshop->grade / COMMENTSCALE); $str .= "id&aid=$assessment->id\">"; $str .= "$gradingscaled "; - } + } else { $str .= "id&aid=$assessment->id\">"; - $str .= "- "; - } + if ($assessment->donotuse) { + $str .= "<".number_format($assessment->grade, 0)."> "; + } else { + $str .= number_format($assessment->grade, 0)." "; + } } - $str .= ")"; } + $str .= ")"; + } else { $str ="0"; - } - return $str; } + return $str; +} ////////////////////////////////////////////////////////////////////////////////////// diff --git a/mod/workshop/submissions.php b/mod/workshop/submissions.php index 0cf473289f..1af57ad8ff 100644 --- a/mod/workshop/submissions.php +++ b/mod/workshop/submissions.php @@ -6,6 +6,7 @@ adminconfirmdelete admindelete adminlist + analysisofassessments calculatefinalgrades displayfinalgrades (teachers only) displayfinalweights @@ -96,9 +97,9 @@ \n"; - echo "

". get_string("title", "workshop").":

\n"; - echo " \n"; + echo "\n"; + echo "

". get_string("title", "workshop").":

\n"; + echo " \n"; echo " title\">\n"; echo " \n"; echo "\n"; @@ -192,6 +193,455 @@ } + /*************** analysis of assessments (by teacher) ***************************/ + elseif ($action == 'analysisofassessments') { + + // timeout after 10 minutes + set_time_limit(600); + + if (!isteacher($course->id)) { + error("Only teachers can look at this page"); + } + + // this analysis does not use bias or reliability... + set_field("workshop", "biasweight", 0, "id", $workshop->id); + set_field("workshop", "reliabilityweight", 0, "id", $workshop->id); + // ...and unity weights for teacher and peer assessments + set_field("workshop", "teacherweight", 5, "id", $workshop->id); + set_field("workshop", "peerweight", 5, "id", $workshop->id); + + echo "
\n"; + echo "id\">\n"; + echo "\n"; + + // get the options from the database... + $teacherloading = get_field("workshop", "teacherloading", "id", $workshop->id); + $gradingweight = get_field("workshop", "gradingweight", "id", $workshop->id); + $assessmentstodrop = get_field("workshop", "assessmentstodrop", "id", $workshop->id); + + // ...now show the options used in a table + print_heading_with_help(get_string("analysisofassessments", "workshop"), "analysisofassessments", + "workshop"); + echo "
\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
cellheading2\">
". + get_string("optionsusedinanalysis", "workshop")."
".get_string("loadingforteacherassessments", "workshop", + $course->teacher).":"; + workshop_choose_from_menu($WORKSHOP_FWEIGHTS, "teacherloading", $teacherloading, ""); + echo "
".get_string("weightforgradingofassessments", "workshop").":"; + workshop_choose_from_menu($WORKSHOP_FWEIGHTS, "gradingweight", $gradingweight, ""); + echo "
".get_string("percentageofassessments", "workshop").":"; + for ($i = 0; $i <= 100; $i++) { + $numbers[$i] = $i; + } + choose_from_menu($numbers, "assessmentstodrop", $assessmentstodrop, ""); + echo "

\n"; + echo "\n"; + echo "\n"; + + + // set up the array of users who have made assessments + if (!$students = get_course_students($course->id, "u.lastname, u.firstname")) { + print_heading(get_string("nostudentsyet")); + print_footer($course); + exit; + } + $teachers = get_course_teachers($course->id); + $users = array_merge($students, $teachers); + $nassessments = 0; + foreach ($users as $user) { + if ($assessments = workshop_get_user_assessments_done($workshop, $user)) { + // the value put into the array element is not particularly important at this stage + // it will hold the user's assessment error after the first iteration + $n = count($assessments); + $assessors[$user->id] = $n; + $nassessments += $n; + } + } + + $ntodrop = intval(($assessmentstodrop * $nassessments / 100.0) + 0.5); + + // set minumim value for the variance (of the elements) + $minvar = 0.05; + + flush(); + // we now do up to five iterations, the first with all users. The second and subsequent if + // the number of assessors is not the full set. Two or three iterations with the reduced set + // should be enough to stablise the list of dropped assessments. + if ($ntodrop == 0) { + $loopcount = 1; + } else { + $loopcount = 7; // max loops, should finish before that loop + } + for ($loop = 0; $loop < $loopcount; $loop++) { + // calculate the means for each submission using just the "good" assessments + // on the first iteration all the assessments are included + unset($num); + unset($sum); + foreach ($assessors as $userid => $error) { + if (!$user = get_record("user", "id", $userid)) { + error("Analysis of assessments: User record not found"); + } + $assessments = workshop_get_user_assessments_done($workshop, $user); + foreach ($assessments as $assessment) { + if (isset($drop[$assessment->id])) { + continue; + } + if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { + error("Analysis of Assessments: submission record not found"); + } + if (isset($num[$submission->id])) { + if (isteacher($course->id, $userid)) { + $num[$submission->id] += $WORKSHOP_FWEIGHTS[$workshop->teacherloading]; + } else { + $num[$submission->id]++; + } + } else { + if (isteacher($course->id, $userid)) { + $num[$submission->id] = $WORKSHOP_FWEIGHTS[$workshop->teacherloading]; + } else { + $num[$submission->id] = 1; + } + } + for ($i = 0; $i < $workshop->nelements; $i++) { + $grade = get_field("workshop_grades", "grade", + "assessmentid", $assessment->id, "elementno", $i); + if (isset($sum[$submission->id][$i])) { + if (isteacher($course->id, $userid)) { + $sum[$submission->id][$i] += $grade * $WORKSHOP_FWEIGHTS[$workshop->teacherloading]; + } else { + $sum[$submission->id][$i] += $grade; + } + } else { + if (isteacher($course->id, $userid)) { + $sum[$submission->id][$i] = $grade * $WORKSHOP_FWEIGHTS[$workshop->teacherloading]; + } else { + $sum[$submission->id][$i] = $grade; + } + } + } + } + } + reset($num); + if (!$loop) { + echo "

".get_string("numberofsubmissions", "workshop", count($num))."

\n"; + } + + // (re)calculate the means for each submission + foreach ($num as $submissionid => $n) { + for ($i = 0; $i < $workshop->nelements; $i++) { + $mean[$submissionid][$i] = $sum[$submissionid][$i] / $n; + // echo "Submission: $submissionid; Element: $i; Mean: {$mean[$submissionid][$i]}
\n"; + } + } + + // only calculate the sd's and the error from guessing once + if (!$loop) { + // now get an estimate of the standard deviation of each element in the assessment + $n = 0; + for ($i = 0; $i < $workshop->nelements; $i++) { + $var[$i] = 0; + } + foreach ($assessors as $userid => $error) { + if (!$user = get_record("user", "id", $userid)) { + error("Submissions: User record not found"); + } + $assessments = workshop_get_user_assessments_done($workshop, $user); + foreach ($assessments as $assessment) { + if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { + error("Analysis of Assessments: submission record not found"); + } + $n++; + for ($i = 0; $i < $workshop->nelements; $i++) { + $grade = get_field("workshop_grades", "grade", + "assessmentid", $assessment->id, "elementno", $i); + $temp = $mean[$submission->id][$i] - $grade; + $var[$i] += $temp * $temp; + } + } + } + for ($i = 0; $i < $workshop->nelements; $i++) { + $sd[$i] = sqrt($var[$i] / ($n - 1)); + echo get_string("standarddeviation", "workshop", $i+1)."$sd[$i]
"; + if ($sd[$i] <= $minvar) { + get_string("standarddeviationnote", "workshop")."
\n"; + } + } + + // calculate the mean variance (error) if just guessing + // first get the assignment elements for maxscores... + $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC"); + foreach ($elementsraw as $element) { + $maxscore[] = $element->maxscore; // to renumber index 0,1,2... + $weight[] = $element->weight; // to renumber index 0,1,2... + } + $n = 0; + $totvar = 0; + foreach ($assessors as $userid => $error) { + if (!$user = get_record("user", "id", $userid)) { + error("Submissions: User record not found"); + } + $assessments = workshop_get_user_assessments_done($workshop, $user); + foreach ($assessments as $assessment) { + if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { + error("Analysis of Assessments: submission record not found"); + } + $n++; + for ($i = 0; $i < $workshop->nelements; $i++) { + $grade = mt_rand(0, $maxscore[$i]); + if ($sd[$i] > $minvar) { + $temp = ($mean[$submission->id][$i] - $grade) * + $WORKSHOP_EWEIGHTS[$weight[$i]] / $sd[$i]; + } else { + $temp = 0; + } + $totvar += $temp * $temp; + } + } + } + // take the average of these variances + $varguess = $totvar / $n; + } + + // calculate the variance (error) for each assessment (adjusted after the first loop) + // and work out the user's average error with all their assessments and without + // the dropped assessments (their "good" assessments) + foreach ($assessors as $userid => $error) { + if (!$user = get_record("user", "id", $userid)) { + error("Submissions: User record not found"); + } + $assessments = workshop_get_user_assessments_done($workshop, $user); + $n = 0; + $ngood = 0; + $totvar = 0; + $totvargood = 0; + foreach ($assessments as $assessment) { + if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { + error("Analysis of Assessments: submission record not found"); + } + $n++; + $var = 0; + for ($i = 0; $i < $workshop->nelements; $i++) { + $grade = get_field("workshop_grades", "grade", + "assessmentid", $assessment->id, "elementno", $i); + if ($sd[$i] > $minvar) { + $temp = ($mean[$submission->id][$i] - $grade) * + $WORKSHOP_EWEIGHTS[$weight[$i]] / $sd[$i]; + } else { + $temp = 0; + } + $var += $temp * $temp; + } + // the variances are adjusted by the user's overall error (once it's calculated) + if ($loop) { + $assessmentvar[$assessment->id] = $var * $error; + } else { + $assessmentvar[$assessment->id] = $var; + } + $totvar += $var; + if (empty($drop[$assessment->id])) { + $ngood++; + $totvargood += $var; + } + } + $nsubmissions[$userid] = $n; + $newassessors[$userid] = $totvar / $n; + if ($ngood) { + $vargood[$userid] = $totvargood / $ngood; + } else { + $vargood[$userid] = 0; + } + // echo "$user->firstname $user->lastname Error: {$newassessors[$userid]}; n: $n
\n"; + } + + // echo "
\n"; + + + // now drop the assessments with the largest (adjusted) variances + $nchanged = 0; + if ($ntodrop) { + asort($assessmentvar); + $n = 1; + foreach ($assessmentvar as $assessmentid => $adjvar) { + if ($n <= ($nassessments - $ntodrop)) { + if (isset($drop[$assessmentid])) { + unset($drop[$assessmentid]); + $nchanged++; + } + } else { + if (empty($drop[$assessmentid])) { + $drop[$assessmentid] = 1; + $nchanged++; + } + } + $n++; + } + } + + // reset the assessors array + $assessors = $newassessors; + // put the assessors in order (for the next iteration, if there is one) + asort($assessors); + reset($assessors); + $i = $loop + 1; + echo get_string("iteration", "workshop", "$i / $loopcount")."
\n"; + echo get_string("numberofassessmentschanged", "workshop", $nchanged)."
\n"; + flush(); + if (!$nchanged) { + break; + } + } // end of iteration loop + + // flag the assessments which were classed as outliers + // but first clear any existing flags + execute_sql("UPDATE {$CFG->prefix}workshop_assessments SET donotuse = 0 + WHERE workshopid = $workshop->id", false); + if ($ntodrop) { + foreach ($drop as $assessmentid => $flag) { + if (!set_field("workshop_assessments", "donotuse", 1, "id", $assessmentid)) { + error("Analysis of assessments: unable to set donotuse field"); + } + $userid = get_field("workshop_assessments", "userid", "id", $assessmentid); + if (empty($ndropped[$userid])) { + $ndropped[$userid] = 1; + } else { + $ndropped[$userid]++; + } + } + } + + // echo "

".get_string("expectederror", "workshop", $varguess)."

\n"; + print_heading(get_string("errortable", "workshop")); + $table->head = array(" ",get_string("name"), get_string("averageerror", "workshop"), + get_string("averageerror", "workshop")."
". + get_string("excludingdroppedassessments", "workshop"), + get_string("numberofassessments", "workshop")); + $table->align = array ("left","left", "center", "center", "center"); + $table->size = array ("*", "*", "*", "*", "*"); + $table->cellpadding = 2; + $table->cellspacing = 0; + $n = 1; + foreach ($assessors as $userid => $error) { + if (!$user = get_record("user", "id", $userid)) { + error("Assessment analysis: user record not found"); + } + if ($vargood[$userid]) { + $vargoodtext = number_format($vargood[$userid] * 100 / $varguess, 2)."%"; + } else { + $vargoodtext = "-"; + } + if (empty($ndropped[$userid])) { + $numtext = "$nsubmissions[$userid]"; + } else { + $numtext = "$nsubmissions[$userid] <$ndropped[$userid]>"; + } + $table->data[] = array($n, "$user->firstname $user->lastname", + number_format($error * 100 / $varguess, 2)."%", $vargoodtext, + $numtext); + $n++; + } + print_table($table); + echo "

< > ".get_string("assessmentsexcluded", "workshop", $course->student)."

\n"; + echo "

".get_string("submissionsused", "workshop", count($num))."

\n";; + + // display student grades + print_heading(get_string("gradetable", "workshop")); + unset($table); + $table->head = array(get_string("name"), get_string("submission", "workshop"), + get_string("assessmentsdone", "workshop"), get_string("assessments", "workshop"), + get_string("studentassessments", "workshop", $course->teacher), + get_string("studentassessments", "workshop", $course->student), + get_string("submission", "workshop"), get_string("overallgrade", "workshop")); + $table->align = array ("left", "center", "center", "center", "center", "center", "center", "center"); + $table->size = array ("*", "*", "*", "*", "*", "*", "*", "*"); + $table->cellpadding = 2; + $table->cellspacing = 0; + $table->data[] = array("".get_string("weight", "workshop")."", " ", " ", + "".$WORKSHOP_FWEIGHTS[$workshop->gradingweight]."", " ", " ","1", " "); + $maxassessments = $workshop->nsassessments + $workshop->ntassessments; + foreach ($students as $user) { + if ($assessments = workshop_get_user_assessments_done($workshop, $user)) { + $n = 0; + foreach ($assessments as $assessment) { + if (!$assessment->donotuse) { + $n++; + } + } + if ($maxassessments) { + $assessmentgrade = ($n / $maxassessments) * $workshop->grade; + } else { + $assessmentgrade = 0; + } + } else { + // no assessments + $assessmentgrade = 0; + } + if ($submissions = workshop_get_user_submissions($workshop, $user)) { + foreach ($submissions as $submission) { + $submissiongrade = 0; + $n = 0; + if ($assessments = workshop_get_assessments($submission)) { + $sum = 0; + foreach ($assessments as $assessment) { + if (!$assessment->donotuse) { + $n++; + $sum += $assessment->grade; + } + } + if ($n) { + $submissiongrade = $sum / $n; + } + } + $totalgrade = ($assessmentgrade * $WORKSHOP_FWEIGHTS[$workshop->gradingweight] + + $submissiongrade) / ($WORKSHOP_FWEIGHTS[$workshop->gradingweight] + 1.0); + if ($n) { + $table->data[] = array("$user->firstname $user->lastname", + workshop_print_submission_title($workshop, $submission), + workshop_print_user_assessments($workshop, $user), + number_format($assessmentgrade, 2), + workshop_print_submission_assessments($workshop, $submission, "teacher"), + workshop_print_submission_assessments($workshop, $submission, "student"), + number_format($submissiongrade, 2), + number_format($totalgrade, 2)); + } else { + $table->data[] = array("$user->firstname $user->lastname", + workshop_print_submission_title($workshop, $submission), + workshop_print_user_assessments($workshop, $user), + number_format($assessmentgrade, 2), + workshop_print_submission_assessments($workshop, $submission, "teacher"), + workshop_print_submission_assessments($workshop, $submission, "student"), + "".get_string("noassessments", "workshop")."", + number_format($totalgrade, 2)); + } + // save grades in submission record + set_field("workshop_submissions", "finalgrade", $submissiongrade, "id", $submission->id); + set_field("workshop_submissions", "gradinggrade", $assessmentgrade, "id", + $submission->id); + } + } else { + // no submissions + $totalgrade = ($assessmentgrade * $WORKSHOP_FWEIGHTS[$workshop->gradingweight]) / + ($WORKSHOP_FWEIGHTS[$workshop->gradingweight] + 1.0); + $table->data[] = array("$user->firstname $user->lastname", + "-", workshop_print_user_assessments($workshop, $user), + number_format($assessmentgrade, 2), "-", "-", + get_string("nosubmission", "workshop"), + number_format($totalgrade,2)); + } + } + print_table($table); + echo "

< > ".get_string("assessmentdropped", "workshop")."

\n"; + echo "
"; + print_continue("view.php?a=$workshop->id"); + } + + /*************** calculate final grades (by teacher) ***************************/ elseif ($action == 'calculatefinalgrades') { @@ -643,11 +1093,11 @@ /*************** display final grades (by teacher) ***************************/ elseif ($action == 'displayfinalgrades') { // Get all the students - if (!$users = get_course_students($course->id, "u.firstname, u.lastname")) { + if (!$users = get_course_students($course->id, "u.lastname, u.firstname")) { print_heading(get_string("nostudentsyet")); print_footer($course); exit; - } + } // get the final weights from the database $teacherweight = get_field("workshop","teacherweight", "id", $workshop->id); @@ -660,82 +1110,82 @@ // teacher grades? if ($workshop->gradingstrategy and $teacherweight) { $useteachersgrades = 1; - } + } else { $useteachersgrades = 0; - } + } // peergrades? if ($workshop->gradingstrategy and $workshop->nsassessments and $peerweight) { $usepeergrades = 1; - } + } else { $usepeergrades = 0; - } + } // bias grades? if ((($workshop->ntassessments >= 3) or ($workshop->nsassessments >= 3)) and ($useteachersgrades or $usepeergrades) and $biasweight ) { $usebiasgrades = 1; - } + } else { $usebiasgrades = 0; - } + } // reliability grades? if ((($workshop->ntassessments >= 3) or ($workshop->nsassessments >= 3)) and ($useteachersgrades or $usepeergrades) and $reliabilityweight ) { $usereliabilitygrades = 1; - } + } else { $usereliabilitygrades = 0; - } + } // grading grades? if (($workshop->ntassessments or $workshop->nsassessments) and $gradingweight ) { $usegradinggrades = 1; - } + } else { $usegradinggrades = 0; - } + } // show the final grades as stored in the tables... print_heading_with_help(get_string("displayoffinalgrades", "workshop"), "finalgrades", "workshop"); echo "
"; - echo ""; + echo ""; if ($useteachersgrades) { echo ""; - } + } if ($usepeergrades) { echo ""; - } + } echo ""; if ($usebiasgrades) { echo ""; - } + } if ($usereliabilitygrades) { echo ""; - } + } if ($usegradinggrades) { echo ""; - } + } echo "\n"; // now the weights echo ""; echo "\n"; if ($useteachersgrades) { echo "\n"; - } + } if ($usepeergrades) { echo "\n"; - } + } echo "\n"; if ($usebiasgrades) { echo "\n"; - } + } if ($usereliabilitygrades) { echo "\n"; - } + } if ($usegradinggrades) { echo "\n"; - } + } echo "\n"; foreach ($users as $user) { if ($submissions = workshop_get_user_submissions($workshop, $user)) { @@ -744,34 +1194,34 @@ echo "\n"; if ($useteachersgrades) { echo ""; - } + } if ($usepeergrades) { echo ""; - } + } echo ""; if ($usebiasgrades) { - echo ""; - } + echo ""; + } if ($usereliabilitygrades) { echo ""; - } + } if ($usegradinggrades) { echo ""; - } - echo "\n"; } + echo "\n"; } } + } echo "
cellheading2\">".$course->student."cellheading2\">".get_string("submissions", "workshop")."cellheading2\">".get_string("submission", "workshop")."cellheading2\" align=\"center\">".get_string("assessmentsby", "workshop", $course->teachers)."cellheading2\" align=\"center\">".get_string("assessmentsby", "workshop", $course->students)."cellheading2\" align=\"center\">".get_string("assessmentsdone", "workshop")."cellheading2\" align=\"center\">".get_string("gradeforbias", "workshop")."cellheading2\" align=\"center\">".get_string("gradeforreliability", "workshop")."cellheading2\" align=\"center\">".get_string("gradeforassessments", "workshop")."cellheading2\" align=\"center\">".get_string("overallgrade", "workshop")."
cellheading2\">".get_string("weights", "workshop")."cellheading2\" align=\"center\"> cellheading2\" align=\"center\">$WORKSHOP_FWEIGHTS[$teacherweight]cellheading2\" align=\"center\">$WORKSHOP_FWEIGHTS[$peerweight]cellheading2\" align=\"center\"> cellheading2\" align=\"center\">$WORKSHOP_FWEIGHTS[$biasweight]cellheading2\" align=\"center\">$WORKSHOP_FWEIGHTS[$reliabilityweight]cellheading2\" align=\"center\">$WORKSHOP_FWEIGHTS[$gradingweight]cellheading2\"> 
".workshop_print_submission_title($workshop, $submission)."".workshop_print_submission_assessments($workshop, $submission, "teacher")."".workshop_print_submission_assessments($workshop, $submission, "student")."".workshop_print_user_assessments($workshop, $user)."$submission->biasgrade$submission->biasgrade$submission->reliabilitygrade$submission->gradinggrade$submission->finalgrade
$submission->finalgrade

\n"; if ($workshop->showleaguetable) { workshop_print_league_table($workshop); if ($workshop->anonymous) { echo "

".get_string("namesnotshowntostudents", "workshop", $course->students)."

\n"; - } } + } echo "

".get_string("allgradeshaveamaximumof", "workshop", $workshop->grade)."

\n"; print_continue("view.php?a=$workshop->id"); - } + } /*************** display final weights (by teacher) ***************************/ @@ -904,6 +1354,22 @@ } + /******************* save analysis options (for teachers only) ************************************/ + elseif ($action == 'saveanalysisoptions' ) { + + if (!isteacher($course->id)) { + error("Only teachers can look at this page"); + } + + set_field("workshop", "teacherloading", $_POST['teacherloading'], "id", "$workshop->id"); + set_field("workshop", "gradingweight", $_POST['gradingweight'], "id", "$workshop->id"); + set_field("workshop", "assessmentstodrop", $_POST['assessmentstodrop'], "id", "$workshop->id"); + redirect("submissions.php?id=$cm->id&action=analysisofassessments", + get_string("savedok", "workshop")); + + } + + /*************** update over allocation (by teacher) ***************************/ elseif ($action == 'updateoverallocation') { diff --git a/mod/workshop/version.php b/mod/workshop/version.php index 7551b750ab..42326d7383 100644 --- a/mod/workshop/version.php +++ b/mod/workshop/version.php @@ -5,7 +5,7 @@ // This fragment is called by /admin/index.php //////////////////////////////////////////////////////////////////////////////// -$module->version = 2003100800; +$module->version = 2003113000; $module->cron = 60; ?> diff --git a/mod/workshop/view.php b/mod/workshop/view.php index fbbf3b09f7..47c875acdd 100644 --- a/mod/workshop/view.php +++ b/mod/workshop/view.php @@ -514,6 +514,8 @@ get_string("studentsubmissionsforassessment", "workshop"), "workshop"); print_heading("id&action=displayfinalweights\">". get_string("calculationoffinalgrades", "workshop").""); + print_heading("id&action=analysisofassessments\">". + get_string("analysisofassessments", "workshop").""); break; case 6: // show final grades -- 2.39.5