in lib.php
workshop_count_all_submissions_for_assessment($workshop, $user) {
workshop_count_assessments($submission) { ---> in lib.php
workshop_count_comments($assessment) {
workshop_count_peer_assessments($workshop, $user) {
workshop_count_self_assessments($workshop, $user) {
workshop_count_student_submissions($workshop) {
workshop_count_student_submissions_for_assessment($workshop, $user) {
workshop_count_teacher_assessments($courseid, $submission) {
workshop_count_teacher_assessments_by_user($workshop, $user) {
workshop_count_teacher_submissions($workshop) {
workshop_count_teacher_submissions_for_assessment($workshop, $user) {
workshop_count_ungraded_assessments($workshop) { --->in lib.php
workshop_count_ungraded_assessments_student($workshop) {
workshop_count_ungraded_assessments_teacher($workshop) {
workshop_count_user_assessments($worshop, $user, $type = "all") { $type is all, student or teacher
workshop_count_user_submissions($workshop, $user) {
workshop_delete_submitted_files($workshop, $submission) {
workshop_delete_user_files($workshop, $user, $exception) {
workshop_file_area($workshop, $submission) { ---> in lib.php
workshop_file_area_name($workshop, $submission) { ---> in lib.php
workshop_get_all_teacher_assessments($workshop) {
workshop_get_assessments($submission, $all = '') { ---> in lib.php
workshop_get_comments($assessment) {
workshop_get_participants($workshopid) {
workshop_get_student_assessments($workshop, $user) {
workshop_get_student_submission($workshop, $user) { ---> in lib.php
workshop_get_student_submission_assessments($workshop) {
workshop_get_student_submissions($workshop) { ---> in lib.php
workshop_get_submission_assessment($submission, $user) {
workshop_get_teacher_assessments($courseid, $submission) {
workshop_get_teacher_submission_assessments($workshop) {
workshop_get_teacher_submissions($workshop) {
workshop_get_ungraded_assessments($workshop) {
workshop_get_unmailed_assessments($cutofftime) {
workshop_get_unmailed_marked_assessments($cutofftime) {
workshop_get_user_assessments($workshop, $user) { ---> in lib.php
workshop_get_user_submissions($workshop, $user) { ---> in lib.php
workshop_get_users_done($workshop) {
workshop_grade_assessments($workshop) { ---> in lib.php
workshop_list_all_submissions($workshop) {
workshop_list_all_ungraded_assessments($workshop) {
workshop_list_assessed_submissions($workshop, $user) {
workshop_list_peer_assessments($workshop, $user) {
workshop_list_student_submissions($workshop, $user) {
workshop_list_submissions_for_admin($workshop, $order) {
workshop_list_teacher_assessments_by_user($workshop, $user) {
workshop_list_teacher_submissions($workshop) {
workshop_list_unassessed_student_submissions($workshop, $user) {
workshop_list_unassessed_teacher_submissions($workshop, $user) {
workshop_list_ungraded_assessments($workshop, $stype) {
workshop_list_user_submissions($workshop, $user) {
workshop_calculate_phase($workshop, $style='') {
workshop_print_assessment($workshop, $assessment, $allowchanges, $showcommentlinks, $returnto)
workshop_print_assessments_by_user_for_admin($workshop, $user) {
workshop_print_assessments_for_admin($workshop, $submission) {
workshop_print_assignment_info($cm, $workshop) {
workshop_print_difference($time) {
workshop_print_feedback($course, $submission) {
workshop_print_league_table($workshop) {
workshop_print_submission_assessments($workshop, $submission, $type) {
workshop_print_submission_title($workshop, $user) {
workshop_print_time_to_deadline($time) {
workshop_print_upload_form($workshop) {
workshop_print_user_assessments($workshop, $user) {
workshop_submission_grade($submission) { ---> in lib.php
workshop_test_user_assessments($workshop, $user) {
***************************************/
///////////////////////////////////////////////////////////////////////////////
function workshop_choose_from_menu ($options, $name, $selected="", $nothing="choose", $script="",
$nothingvalue="0", $return=false) {
/// Given an array of value, creates a popup menu to be part of a form
/// $options["value"]["label"]
if ($nothing == "choose") {
$nothing = get_string("choose")."...";
}
if ($script) {
$javascript = "onChange=\"$script\"";
} else {
$javascript = "";
}
$output = "\n";
if ($nothing) {
$output .= " $label) {
$output .= " workshopid = $assessment->workshopid;
$newassessment->submissionid = $submission->id;
$newassessment->userid = $assessment->userid;
$newassessment->timecreated = $yearfromnow;
$newassessment->grade = $assessment->grade;
if ($withfeedback) {
$newassessment->generalcomment = addslashes($assessment->generalcomment);
$newassessment->teachercomment = addslashes($assessment->teachercomment);
}
if (!$newassessment->id = insert_record("workshop_assessments", $newassessment)) {
error("Copy Assessment: Could not insert workshop assessment!");
}
if ($grades = get_records("workshop_grades", "assessmentid", $assessment->id)) {
foreach ($grades as $grade) {
unset($grade->id); // clear id, insert record now seems to believe it!
if (!$withfeedback) {
$grade->feedback = '';
}
else {
$grade->feedback = addslashes($grade->feedback);
}
$grade->assessmentid = $newassessment->id;
if (!$grade->id = insert_record("workshop_grades", $grade)) {
error("Copy Assessment: Could not insert workshop grade!");
}
}
}
if ($withfeedback) {
// remove the slashes from comments as the new assessment record might be used,
// currently this function is only called in upload which does not!
$newassessment->generalcomment = stripslashes($assessment->generalcomment);
$newassessment->teachercomment = stripslashes($assessment->teachercomment);
}
return $newassessment;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_all_submissions_for_assessment($workshop, $user) {
// looks at all submissions and deducts the number which has been assessed by this user
$n = 0;
if ($submissions = get_records_select("workshop_submissions", "workshopid = $workshop->id AND
timecreated > 0")) {
$n =count($submissions);
foreach ($submissions as $submission) {
$n -= count_records("workshop_assessments", "submissionid", $submission->id, "userid", $user->id);
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_comments($assessment) {
// Return the number of comments for this assessment provided they are newer than the assessment,
return count_records_select("workshop_comments", "(assessmentid = $assessment->id) AND
timecreated > $assessment->timecreated");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_peer_assessments($workshop, $user) {
// returns the number of assessments made by students on user's submissions
$n = 0;
if ($submissions = workshop_get_user_submissions($workshop, $user)) {
foreach ($submissions as $submission) {
if ($assessments = workshop_get_assessments($submission)) {
foreach ($assessments as $assessment) {
// ignore teacher assessments
if (!isteacher($workshop->course, $assessment->userid)) {
$n++;
}
}
}
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_self_assessments($workshop, $user) {
// returns the number of assessments made by user on their own submissions
$n = 0;
if ($submissions = workshop_get_user_submissions($workshop, $user)) {
foreach ($submissions as $submission) {
if ($assessment = get_record_select("workshop_assessments", "userid = $user->id AND
submissionid = $submission->id")) {
$n++;
}
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_student_submissions($workshop) {
global $CFG;
// make sure it works on the site course
$select = "s.course = '$workshop->course' AND";
if ($workshop->course == SITEID) {
$select = '';
}
return count_records_sql("SELECT count(*) FROM {$CFG->prefix}workshop_submissions s,
{$CFG->prefix}user_students u
WHERE $select s.userid = u.userid
AND s.workshopid = $workshop->id
AND timecreated > 0");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_student_submissions_for_assessment($workshop, $user) {
global $CFG;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
error("Course is misconfigured");
}
$timenow = time();
if (groupmode($course, $cm) == SEPARATEGROUPS) {
$groupid = get_current_group($course->id);
} else {
$groupid = 0;
}
$n = 0;
if ($submissions = workshop_get_student_submissions($workshop)) {
foreach ($submissions as $submission) {
// check group membership, if necessary
if ($groupid) {
// check user's group
if (!ismember($groupid, $submission->userid)) {
continue; // skip this user
}
}
// check if submission is cold
if (($submission->timecreated + $CFG->maxeditingtime) > $timenow) {
continue; // skip this submission
}
// has any teacher assessed this submission?
if (!workshop_count_teacher_assessments($course->id, $submission)) {
$n++;
}
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_teacher_assessments($courseid, $submission) {
// Return count of (cold) teacher assessments of a submission
global $CFG;
$timenow = time();
return count_records_sql("SELECT count(*) FROM {$CFG->prefix}workshop_assessments a,
{$CFG->prefix}user_teachers u
WHERE u.course = $courseid
AND a.userid = u.userid
AND a.submissionid = $submission->id
AND $timenow > (a.timecreated + $CFG->maxeditingtime)");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_teacher_assessments_by_user($workshop, $user) {
// returns the number of assessments made by teachers on user's submissions
$n = 0;
if ($submissions = workshop_get_user_submissions($workshop, $user)) {
foreach ($submissions as $submission) {
if ($assessments = workshop_get_assessments($submission)) {
foreach ($assessments as $assessment) {
// count only teacher assessments
if (isteacher($workshop->course, $assessment->userid)) {
$n++;
}
}
}
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_teacher_submissions($workshop) {
global $CFG;
return count_records_sql("SELECT count(*) 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");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_teacher_submissions_for_assessment($workshop, $user) {
$n = 0;
if ($submissions = workshop_get_teacher_submissions($workshop)) {
$n =count($submissions);
foreach ($submissions as $submission) {
$n -= count_records("workshop_assessments", "submissionid", $submission->id, "userid", $user->id);
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_ungraded_assessments_student($workshop) {
// function returns the number of ungraded assessments by students of STUDENT submissions
$n = 0;
if ($submissions = workshop_get_student_submissions($workshop)) {
foreach ($submissions as $submission) {
if ($assessments = workshop_get_assessments($submission)) {
foreach ($assessments as $assessment) {
if ($assessment->timegraded == 0) {
// ignore teacher assessments
if (!isteacher($workshop->course, $assessment->userid)) {
$n++;
}
}
}
}
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_ungraded_assessments_teacher($workshop) {
// function returns the number of ungraded assessments by students of TEACHER submissions
global $CFG;
$timenow = time();
$n = 0;
if ($submissions = workshop_get_teacher_submissions($workshop)) {
foreach ($submissions as $submission) {
if ($assessments = workshop_get_assessments($submission)) {
foreach ($assessments as $assessment) {
if ($assessment->timegraded == 0) {
// ignore teacher assessments
if (!isteacher($workshop->course, $assessment->userid)) {
// must have created a little time ago
if (($timenow - $assessment->timecreated) > $CFG->maxeditingtime) {
$n++;
}
}
}
}
}
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_user_assessments($workshop, $user, $stype = "all") {
// returns the number of assessments allocated/made by a user, all of them, or just those
// for the student or teacher submissions. The student's self assessments are included in the count.
// The maxeditingtime is NOT taken into account here also, allocated assessments which have not yet
// been done are counted as well
$n = 0;
if ($assessments = workshop_get_user_assessments($workshop, $user)) {
foreach ($assessments as $assessment) {
switch ($stype) {
case "all" :
$n++;
break;
case "student" :
$submission = get_record("workshop_submissions", "id", $assessment->submissionid);
if (isstudent($workshop->course, $submission->userid)) {
$n++;
}
break;
case "teacher" :
$submission = get_record("workshop_submissions", "id", $assessment->submissionid);
if (isteacher($workshop->course, $submission->userid)) {
$n++;
}
break;
}
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_user_assessments_done($workshop, $user) {
// returns the number of assessments actually done by a user
// the student's self assessments are included in the count
// the maxeditingtime is NOT taken into account here
$n = 0;
$timenow = time();
if ($assessments = workshop_get_user_assessments($workshop, $user)) {
foreach ($assessments as $assessment) {
if ($assessment->timecreated < $timenow) {
$n++;
}
}
}
return $n;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_count_user_submissions($workshop, $user) {
// returns the number of (real) submissions make by this user
return count_records_select("workshop_submissions", "workshopid = $workshop->id AND
userid = $user->id AND timecreated > 0");
}
//////////////////////////////////////////////////////////////////////////////////////
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
if (!$submissions = workshop_get_submissions($workshop, $user)) {
notify("No submissions!");
return;
}
foreach ($submissions as $submission) {
if ($basedir = workshop_file_area($workshop, $submission)) {
if ($files = get_directory_list($basedir)) {
foreach ($files as $file) {
if ($file != $exception) {
unlink("$basedir/$file");
notify("Existing file '$file' has been deleted!");
}
}
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_all_teacher_assessments($workshop) {
// Return all teacher assessments, ordered by timecreated, oldest first
global $CFG;
return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_assessments a,
{$CFG->prefix}user_teachers u
WHERE u.course = $workshop->course
AND a.userid = u.userid
AND a.workshopid = $workshop->id
ORDER BY a.timecreated");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_comments($assessment) {
// Return all comments for this assessment provided they are newer than the assessment,
// and ordered oldest first, newest last
return get_records_select("workshop_comments", "(assessmentid = $assessment->id) AND
timecreated > $assessment->timecreated",
"timecreated DESC");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_student_assessments($workshop, $user) {
// Return all assessments on the student submissions by a user, order by youngest first, oldest last
global $CFG;
// make sure it works on the site course
$select = "u.course = '$workshop->course' AND";
if ($workshop->course == SITEID) {
$select = '';
}
return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s,
{$CFG->prefix}user_students u,
{$CFG->prefix}workshop_assessments a
WHERE $select s.userid = u.userid
AND s.workshopid = $workshop->id
AND a.submissionid = s.id
AND a.userid = $user->id
ORDER BY a.timecreated DESC");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_student_submission_assessments($workshop) {
// Return all assessments on the student submissions, order by youngest first, oldest last
global $CFG;
// make sure it works on the site course
$select = "u.course = '$workshop->course' AND";
if ($workshop->course == SITEID) {
$select = '';
}
return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s,
{$CFG->prefix}user_students u, {$CFG->prefix}workshop_assessments a
WHERE $select s.userid = u.userid
AND s.workshopid = $workshop->id
AND a.submissionid = s.id
ORDER BY a.timecreated DESC");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_submission_assessment($submission, $user) {
// Return the user's assessment for this submission (cold or warm, not hot)
$timenow = time();
return get_record_select("workshop_assessments", "submissionid = $submission->id AND
userid = $user->id AND timecreated < $timenow");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_teacher_assessments($courseid, $submission) {
// Return teacher assessments of a submission, ordered by timecreated, oldest first
global $CFG;
return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_assessments a,
{$CFG->prefix}user_teachers u
WHERE u.course = $courseid
AND a.userid = u.userid
AND a.submissionid = $submission->id
ORDER BY a.timecreated");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_teacher_submission_assessments($workshop) {
// Return all assessments on the teacher submissions, order by youngest first, oldest last
global $CFG;
return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s,
{$CFG->prefix}user_teachers u, {$CFG->prefix}workshop_assessments a
WHERE u.course = $workshop->course
AND s.userid = u.userid
AND s.workshopid = $workshop->id
AND a.submissionid = s.id
ORDER BY a.timecreated DESC");
}
//////////////////////////////////////////////////////////////////////////////////////
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
WHERE u.course = $workshop->course
AND s.userid = u.userid
AND s.workshopid = $workshop->id
ORDER BY s.title");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_ungraded_assessments($workshop) {
global $CFG;
// Return all assessments which have not been graded or just graded
$cutofftime = time() - $CFG->maxeditingtime;
return get_records_select("workshop_assessments", "workshopid = $workshop->id AND (timegraded = 0 OR
timegraded > $cutofftime)", "timecreated");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_ungraded_assessments_student($workshop) {
global $CFG;
// Return all assessments which have not been graded or just graded of student's submissions
// make sure it works on the site course
$select = "u.course = '$workshop->course' AND";
if ($workshop->course == SITEID) {
$select = '';
}
$cutofftime = time() - $CFG->maxeditingtime;
return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s,
{$CFG->prefix}user_students u, {$CFG->prefix}workshop_assessments a
WHERE $select s.userid = u.userid
AND s.workshopid = $workshop->id
AND a.submissionid = s.id
AND (a.timegraded = 0 OR a.timegraded > $cutofftime)
AND a.timecreated < $cutofftime
ORDER BY a.timecreated ASC");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_ungraded_assessments_teacher($workshop) {
global $CFG;
// Return all assessments which have not been graded or just graded of teacher's submissions
$cutofftime =time() - $CFG->maxeditingtime;
return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s,
{$CFG->prefix}user_teachers u, {$CFG->prefix}workshop_assessments a
WHERE u.course = $workshop->course
AND s.userid = u.userid
AND s.workshopid = $workshop->id
AND a.submissionid = s.id
AND (a.timegraded = 0 OR a.timegraded > $cutofftime)
AND a.timecreated < $cutofftime
ORDER BY a.timecreated ASC");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_user_assessments_done($workshop, $user) {
// Return all the user's assessments, oldest first, newest last (warm and cold ones only)
// ignores maxeditingtime
$timenow = time();
return get_records_select("workshop_assessments", "workshopid = $workshop->id AND userid = $user->id
AND timecreated < $timenow",
"timecreated ASC");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_get_users_done($workshop) {
global $CFG;
// make sure it works on the site course
$select = "s.course = '$workshop->course' AND";
if ($workshop->course == SITEID) {
$select = '';
}
return get_records_sql("SELECT u.*
FROM {$CFG->prefix}user u, {$CFG->prefix}user_students s,
{$CFG->prefix}workshop_submissions a
WHERE $select s.user = u.id
AND u.id = a.user AND a.workshop = '$workshop->id'
ORDER BY a.timemodified DESC");
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_all_submissions($workshop, $user) {
// list the teacher sublmissions first
global $CFG;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
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->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
if ($submissions = workshop_get_teacher_submissions($workshop)) {
foreach ($submissions as $submission) {
if ($submission->userid == $user->id) {
$comment = get_string("ownwork", "workshop")."; ";
}
else {
$comment = "";
}
// 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 = "id&aid=$assessment->id\">"
.get_string("view", "workshop")." ";
// has teacher graded user's assessment?
if ($assessment->timegraded) {
if (($curtime - $assessment->timegraded) > $CFG->maxeditingtime) {
$comment .= get_string("gradedbyteacher", "workshop", $course->teacher);
}
}
}
else { // there's still time left to edit...
$action = "id\">".
get_string("edit", "workshop")." ";
}
}
else { // user has not graded this submission
$action = "id\">".
get_string("assess", "workshop")." ";
}
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action,
$comment);
}
print_table($table);
}
echo "".get_string("studentsubmissions", "workshop", $course->student).
"
\n";
unset($table);
$table->head = array (get_string("title", "workshop"), get_string("action", "workshop"),
get_string("comment", "workshop"));
$table->align = array ("left", "left", "left");
$table->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
if ($submissions = workshop_get_student_submissions($workshop)) {
foreach ($submissions as $submission) {
if ($submission->userid == $user->id) {
$comment = get_string("ownwork", "workshop")."; ";
}
else {
$comment = "";
}
// 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 = "id&aid=$assessment->id\">".
get_string("view", "workshop")." ";
// has teacher graded on user's assessment?
if ($assessment->timegraded) {
if (($curtime - $assessment->timegraded) > $CFG->maxeditingtime) {
$comment .= get_string("gradedbyteacher", "workshop", $course->teacher)."; ";
}
}
$otherassessments = workshop_get_assessments($submission);
if (count($otherassessments) > 1) {
$comment .= "id&sid=$submission->id\">".
get_string("viewotherassessments", "workshop")." ";
}
}
else { // there's still time left to edit...
$action = "id\">".
get_string("edit", "workshop")." ";
}
}
else { // user has not assessed this submission
$action = "id\">".
get_string("assess", "workshop")." ";
}
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action,
$comment);
}
print_table($table);
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_all_ungraded_assessments($workshop) {
// lists all the assessments for comment by teacher
global $CFG;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
$table->head = array (get_string("title", "workshop"), get_string("timeassessed", "workshop"), get_string("action", "workshop"));
$table->align = array ("left", "left", "left");
$table->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
$timenow = time();
if ($assessments = workshop_get_ungraded_assessments($workshop)) {
foreach ($assessments as $assessment) {
if (!isteacher($workshop->course, $assessment->userid)) {
if (($timenow - $assessment->timegraded) < $CFG->maxeditingtime) {
$action = "id&aid=$assessment->id\">".
get_string("edit", "workshop")." ";
}
else {
$action = "id&aid=$assessment->id\">".
get_string("gradeassessment", "workshop")." ";
}
$submission = get_record("workshop_submissions", "id", $assessment->submissionid);
$table->data[] = array(workshop_print_submission_title($workshop, $submission),
userdate($assessment->timecreated), $action);
}
}
if (isset($table->data)) {
print_table($table);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_assessed_submissions($workshop, $user) {
// list the submissions that have been assessed by this user and are COLD
global $CFG, $USER;
$timenow = time();
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
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->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
if ($assessments = workshop_get_student_assessments($workshop, $user)) {
foreach ($assessments as $assessment) {
$comment = "";
$submission = get_record("workshop_submissions", "id", $assessment->submissionid);
// the assessment may be in three states:
// 1. "hot", just created but not completed (timecreated is in the future)
// 2. "warm" just created and still capable of being edited, and
// 3. "cold" after the editing time
if ($assessment->timecreated < ($timenow - $CFG->maxeditingtime)) { // it's cold
if ($workshop->agreeassessments) {
if (!$assessment->timeagreed) {
$action = "id&aid=$assessment->id&".
"allowcomments=$workshop->agreeassessments\">".
get_string("view", "workshop")." ";
$action .= " | id\">".
get_string("reassess", "workshop")." ";
} else {
$action = "id&aid=$assessment->id&".
"allowcomments=false\">".get_string("view", "workshop")." ";
}
} else {
// if it been graded allow student to re-assess, except if it's a self assessment
if ($assessment->timegraded and !($USER->id == $assessment->userid)) {
$action = "id\">".
get_string("reassess", "workshop")." ";
} else {
$action = "id&aid=$assessment->id\">".
get_string("view", "workshop")." ";
}
}
if ($assessment->timecreated < $timenow) { // only show the date if it's in the past (future dates cause confusion)
$comment = get_string("assessedon", "workshop", userdate($assessment->timecreated));
}
else {
$comment = '';
}
if ($submission->userid == $user->id) { // self assessment?
$comment .= "; ".get_string("ownwork", "workshop"); // just in case they don't know!
}
// has assessment been graded?
if ($assessment->timegraded and ($timenow - $assessment->timegraded > $CFG->maxeditingtime)) {
if ($workshop->gradingstrategy) { // supress grading grade if not graded
$comment .= "; ".get_string("thegradeforthisassessmentis", "workshop",
number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0)).
" / $workshop->gradinggrade";
}
}
// if peer agreements show whether agreement has been reached
if ($workshop->agreeassessments) {
if ($assessment->timeagreed) {
$comment .= "; ".get_string("assessmentwasagreedon", "workshop",
userdate($assessment->timeagreed));
}
else {
$comment .= "; ".get_string("assessmentnotyetagreed", "workshop");
}
}
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action,
$comment);
}
}
}
if (isset($table->data)) {
print_table($table);
}
else {
echo "".get_string("noassessmentsdone", "workshop")." \n";
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_peer_assessments($workshop, $user) {
global $CFG;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
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->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
// get user's submissions
if ($submissions = workshop_get_user_submissions($workshop, $user)) {
foreach ($submissions as $submission) {
// get the assessments
if ($assessments = workshop_get_assessments($submission)) {
foreach ($assessments as $assessment) {
// assessments by students only and exclude any self assessments
if (isstudent($workshop->course, $assessment->userid) and
($assessment->userid != $user->id)) {
$timenow = time();
if (($timenow - $assessment->timecreated) > $CFG->maxeditingtime) {
$action = "id&aid=$assessment->id&".
"allowcomments=$workshop->agreeassessments\">".
get_string("view", "workshop")." ";
$comment = get_string("assessedon", "workshop", userdate($assessment->timecreated));
$grade = number_format($assessment->grade * $workshop->grade / 100, 1);
if ($workshop->gradingstrategy) { // supress grade if not graded
$comment .= "; ".get_string("gradeforsubmission", "workshop").
": $grade / $workshop->grade";
}
if ($assessment->timegraded) {
if (!$assessment->gradinggrade) {
// it's a bad assessment
$comment .= "; ".get_string("thisisadroppedassessment", "workshop");
}
}
if (isteacher($workshop->course, $assessment->userid) and $workshop->teacherweight) {
$comment .= "; ".get_string("thisisadroppedassessment", "workshop");
}
// if peer agreements show whether agreement has been reached
if ($workshop->agreeassessments) {
if ($assessment->timeagreed) {
$comment .= "; ".get_string("assessmentwasagreedon", "workshop",
userdate($assessment->timeagreed));
}
else {
$comment .= "; ".get_string("assessmentnotyetagreed", "workshop");
}
}
$table->data[] = array(workshop_print_submission_title($workshop, $submission),
$action, $comment);
}
}
}
}
}
}
if (isset($table->data)) {
print_table($table);
}
else {
echo "".get_string("noassessmentsdone", "workshop")." \n";
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_self_assessments($workshop, $user) {
// list user's submissions for the user to assess
global $CFG;
$timenow = time();
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
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->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
// get the user's submissions
if ($submissions = workshop_get_user_submissions($workshop, $user)) {
foreach ($submissions as $submission) {
$comment = get_string("ownwork", "workshop"); // just in case they don't know!
if (!$assessment = get_record_select("workshop_assessments", "submissionid = $submission->id AND
userid = $user->id")) {
$action = "id\">".
get_string("assess", "workshop")." ";
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
} else {
// may still be warm
if (($assessment->timecreated + $CFG->maxeditingtime) > $timenow) {
$action = "id\">".
get_string("reassess", "workshop")." ";
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
}
}
}
}
if (isset($table->data)) {
echo "
".get_string("pleaseassessyoursubmissions", "workshop", $course->student).
" \n";
print_table($table);
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_student_submissions($workshop, $user) {
// list available submissions for this user to assess, submissions with the least number
// of assessments are show first
global $CFG;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
error("Course is misconfigured");
}
$timenow = time();
// set student's group if workshop is in SEPARATEGROUPS mode
if (groupmode($course, $cm) == SEPARATEGROUPS) {
$groupid = get_current_group($course->id);
} else {
$groupid = 0;
}
$table->head = array (get_string("title", "workshop"), get_string("action", "workshop"), get_string("comment", "workshop"));
$table->align = array ("left", "left", "left");
$table->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
// get the number of assessments this user has done on student submission, deduct self assessments
$nassessed = workshop_count_user_assessments($workshop, $user, "student") -
workshop_count_self_assessments($workshop, $user);
// user hasn't been allocated enough, try and get some more
if ($nassessed < $workshop->nsassessments) {
// count the number of assessments for each student submission
if ($submissions = workshop_get_student_submissions($workshop)) {
// srand ((float)microtime()*1000000); // now done automatically in PHP 4.2.0->
foreach ($submissions as $submission) {
// check group membership, if necessary
if ($groupid) {
// check user's group
if (!ismember($groupid, $submission->userid)) {
continue; // skip this submission
}
}
// process only cold submissions
if (($submission->timecreated + $CFG->maxeditingtime) > $timenow) {
continue;
}
$n = count_records("workshop_assessments", "submissionid", $submission->id);
// ...OK to have zero, we add a small random number to randomise things
$nassessments[$submission->id] = $n + rand(0, 98) / 100;
}
if (isset($nassessments)) { // make sure we end up with something to play with
// put the submissions with the lowest number of assessments first
asort($nassessments);
reset($nassessments);
$nsassessments = $workshop->nsassessments;
foreach ($nassessments as $submissionid =>$n) {
// only use those submissions which fall below the allocation threshold
if ($n < ($workshop->nsassessments + $workshop->overallocation)) {
$comment = "";
$submission = get_record("workshop_submissions", "id", $submissionid);
// skip submission if it belongs to this user
if ($submission->userid != $user->id) {
// add a "hot" assessment record if user has NOT already assessed this submission
if (!get_record("workshop_assessments", "submissionid", $submission->id, "userid",
$user->id)) {
$yearfromnow = time() + 365 * 86400;
// ...create one and set timecreated way in the future, this is reset when record is updated
unset($assessment); // clear previous version object (if any)
$assessment->workshopid = $workshop->id;
$assessment->submissionid = $submission->id;
$assessment->userid = $user->id;
$assessment->grade = -1; // set impossible grade
$assessment->timecreated = $yearfromnow;
if (!$assessment->id = insert_record("workshop_assessments", $assessment)) {
error("List Student submissions: Could not insert workshop assessment!");
}
$nassessed++;
// is user up to quota?
if ($nassessed == $nsassessments) {
break;
}
}
}
}
}
}
}
}
// now list the student submissions this user has been allocated, list only the hot and warm ones,
// the cold ones are listed in the "your assessments list" (_list_assessed submissions)
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_student_submissions: unable to get submission");
}
// submission from a student?
if (isstudent($workshop->course, $submission->userid)) {
$comment = '';
// user assessment has three states: record created but not assessed (date created in the future) [hot];
// just assessed but still editable [warm]; and "static" (may or may not have been graded by teacher, that
// is shown in the comment) [cold]
if ($assessment->timecreated > $timenow) { // user needs to assess this submission
$action = "id\">".
get_string("assess", "workshop")." ";
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
}
elseif ($assessment->timecreated > ($timenow - $CFG->maxeditingtime)) { // there's still time left to edit...
$action = "id\">".
get_string("edit", "workshop")." ";
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
}
}
}
}
if (isset($table->data)) {
echo "
".get_string("pleaseassessthesestudentsubmissions", "workshop", $course->student).
" \n";
print_table($table);
}
else {
echo "
".get_string("nosubmissionsavailableforassessment", "workshop")." \n";
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_submissions_for_admin($workshop, $order) {
// list the teacher sublmissions first
global $CFG, $USER;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
error("Course is misconfigured");
}
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
error("Course Module ID was incorrect");
}
if (groupmode($course, $cm) == SEPARATEGROUPS) {
$groupid = get_current_group($course->id);
} else {
$groupid = 0;
}
workshop_print_assignment_info($workshop);
if (isteacheredit($course->id)) {
// list any teacher submissions
$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) {
$action = "id&sid=$submission->id\">".
get_string("amendtitle", "workshop")." ";
// has user already assessed this submission
if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id
AND userid = $USER->id")) {
$curtime = time();
if ($assessment->timecreated > $curtime) { // it's a "hanging" assessment
$action .= " | id\">".
get_string("assess", "workshop")." ";
}
elseif (($curtime - $assessment->timecreated) > $CFG->maxeditingtime) {
$action .= " | id\">"
.get_string("reassess", "workshop")." ";
}
else { // there's still time left to edit...
$action .= " | id\">".
get_string("edit", "workshop")." ";
}
}
else { // user has not graded this submission
$action .= " | id\">".
get_string("assess", "workshop")." ";
}
if ($assessments = workshop_get_assessments($submission)) {
$action .= " | id&sid=$submission->id\">".
get_string("listassessments", "workshop")." ";
}
if (isteacheredit($course->id)) {
$action .= " | id&sid=$submission->id\">".
get_string("delete", "workshop")." ";
}
$table->data[] = array("id&sid=$submission->id\">$submission->title ", $course->teacher, $action);
}
print_heading(get_string("studentsubmissions", "workshop", $course->teacher), "center");
print_table($table);
}
}
// list student assessments
// Get all the students...
if ($users = get_course_students($course->id, "u.lastname, u.firstname")) {
$timenow = time();
unset($table);
$table->head = array(get_string("name"), get_string("title", "workshop"), get_string("action", "workshop"));
$table->align = array ("left", "left", "left");
$table->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
$nassessments = 0;
foreach ($users as $user) {
// check group membership, if necessary
if ($groupid) {
// check user's group
if (!ismember($groupid, $user->id)) {
continue; // skip this user
}
}
// list the assessments which have been done (exclude the hot ones)
if ($assessments = workshop_get_user_assessments_done($workshop, $user)) {
$title ='';
foreach ($assessments as $assessment) {
if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
error("Workshop_list_submissions_for_admin: Submission $assessment->submissionid not found!");
}
$title .= $submission->title;
if ($workshop->agreeassessments and !$assessment->timeagreed and
isstudent($workshop->course, $submission->userid)) { // agreements for student work only
$title .= " <<".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).")>> ";
} elseif ($assessment->timegraded) {
if ($assessment->gradinggrade) {
// a good assessment
$title .= " {".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).")} ";
} else {
// a poor assessment
$title .= " <".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).")> ";
}
} else {
// not yet graded
$title .= " {".number_format($assessment->grade * $workshop->grade / 100, 0)." ((".
number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0)."))} ";
}
if ($realassessments = workshop_count_user_assessments_done($workshop, $user)) {
$action = "id&userid=$user->id\">".
get_string("liststudentsassessments", "workshop")." ($realassessments) ";
} else {
$action ="";
}
}
$nassessments++;
$table->data[] = array(fullname($user), $title, $action);
}
}
if (isset($table->data)) {
print_heading(get_string("studentassessments", "workshop", $course->student)." [$nassessments]");
print_table($table);
workshop_print_key($workshop);
// grading grade analysis
unset($table);
$table->head = array (get_string("count", "workshop"), get_string("mean", "workshop"),
get_string("standarddeviation", "workshop"), get_string("maximum", "workshop"),
get_string("minimum", "workshop"));
$table->align = array ("center", "center", "center", "center", "center");
$table->size = array ("*", "*", "*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
if ($groupid) {
$stats = get_record_sql("SELECT COUNT(*) as count, AVG(gradinggrade) AS mean,
STDDEV(gradinggrade) AS stddev, MIN(gradinggrade) AS min, MAX(gradinggrade) AS max
FROM {$CFG->prefix}groups_members g, {$CFG->prefix}workshop_assessments a
WHERE g.groupid = $groupid AND a.userid = g.userid AND a.timegraded > 0
AND a.workshopid = $workshop->id");
} else { // no group/all participants
$stats = get_record_sql("SELECT COUNT(*) as count, AVG(gradinggrade) AS mean,
STDDEV(gradinggrade) AS stddev, MIN(gradinggrade) AS min, MAX(gradinggrade) AS max
FROM {$CFG->prefix}workshop_assessments a
WHERE a.timegraded > 0 AND a.workshopid = $workshop->id");
}
$table->data[] = array($stats->count, number_format($stats->mean * $workshop->gradinggrade / 100, 1),
number_format($stats->stddev * $workshop->gradinggrade /100, 1),
number_format($stats->max * $workshop->gradinggrade / 100, 1),
number_format($stats->min* $workshop->gradinggrade / 100, 1));
print_heading(get_string("gradinggrade", "workshop")." ".get_string("analysis", "workshop"));
print_table($table);
echo "id&action=regradestudentassessments\">".
get_string("regradestudentassessments", "workshop")." ";
helpbutton("regrading", get_string("regradestudentassessments", "workshop"), "workshop");
echo "
\n";
}
}
// now the sudent submissions
unset($table);
switch ($order) {
case "title" :
$table->head = array("id&order=name\">".
get_string("submittedby", "workshop")." ", get_string("title", "workshop"),
get_string("submitted", "workshop"), get_string("action", "workshop"));
break;
case "name" :
$table->head = array (get_string("submittedby", "workshop"),
"id&order=title\">".
get_string("title", "workshop")." ", get_string("submitted", "workshop"),
get_string("action", "workshop"));
break;
}
$table->align = array ("left", "left", "left", "left");
$table->size = array ("*", "*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
$nsubmissions = 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");
}
// check group membership, if necessary
if ($groupid) {
// check user's group
if (!ismember($groupid, $user->id)) {
continue; // skip this user
}
}
$datesubmitted = userdate($submission->timecreated);
if ($submission->late) {
$datesubmitted = "".$datesubmitted." ";
}
$action = "id&sid=$submission->id\">".
get_string("amendtitle", "workshop")." ";
// has teacher 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 .= " | id\">".
get_string("reassess", "workshop")." ";
}
else { // there's still time left to edit...
$action .= " | id\">".
get_string("edit", "workshop")." ";
}
}
else { // user has not assessed this submission
$action .= " | id\">".
get_string("assess", "workshop")." ";
}
if ($nassessments = workshop_count_assessments($submission)) {
$action .= " | id&sid=$submission->id\">".
get_string("listassessments", "workshop")." ($nassessments) ";
}
if ($submission->late) {
$action .= " | id&sid=$submission->id\">".
get_string("clearlateflag", "workshop")." ";
}
$action .= " | id&sid=$submission->id\">".
get_string("delete", "workshop")." ";
$nsubmissions++;
$table->data[] = array("$user->firstname $user->lastname", $submission->title.
" (".get_string("grade").": ".workshop_submission_grade($workshop, $submission)." ".
workshop_print_submission_assessments($workshop, $submission, "teacher").
" ".workshop_print_submission_assessments($workshop, $submission, "student").")", $datesubmitted,
$action);
}
print_heading(get_string("studentsubmissions", "workshop", $course->student)." [$nsubmissions]", "center");
print_table($table);
workshop_print_key($workshop);
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_teacher_assessments_by_user($workshop, $user) {
global $CFG;
$timenow = time();
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
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->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
// get user's submissions
if ($submissions = workshop_get_user_submissions($workshop, $user)) {
foreach ($submissions as $submission) {
// get the assessments
if ($assessments = workshop_get_assessments($submission)) {
foreach ($assessments as $assessment) {
if (isteacher($workshop->course, $assessment->userid)) { // assessments by teachers only
$action = "id&aid=$assessment->id\">".
get_string("view", "workshop")." ";
// has teacher commented on teacher's assessment? shouldn't happen but leave test in
if ($assessment->timegraded and ($timenow - $assessment->timegraded > $CFG->maxeditingtime)) {
$comment = get_string("gradedbyteacher", "workshop", $course->teacher);
}
else {
$comment = userdate($assessment->timecreated);
}
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
}
}
}
}
}
if (isset($table->data)) {
print_table($table);
}
else {
echo "".get_string("noassessmentsdone", "workshop")." \n";
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_teacher_submissions($workshop, $user) {
global $CFG;
// set threshold on re-assessments
$reassessthreshold = 80;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
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->size = array ("*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
// get the number of assessments this user has done
$nassessed = count_records_select("workshop_assessments", "workshopid = $workshop->id
AND userid = $user->id");
if ($nassessed < $workshop->ntassessments) {
// if user has not assessed enough, set up "future" assessment records for this user for the teacher submissions...
// ... first count the number of assessments for each teacher submission...
if ($submissions = workshop_get_teacher_submissions($workshop)) {
srand ((float)microtime()*1000000); // initialise random number generator
foreach ($submissions as $submission) {
$n = count_records("workshop_assessments", "submissionid", $submission->id);
// ...OK to have zero, we add a small random number to randomise things...
$nassessments[$submission->id] = $n + rand(0, 99) / 100;
}
// ...put the submissions with the lowest number of assessments first...
asort($nassessments);
reset($nassessments);
foreach ($nassessments as $submissionid => $n) { // break out of loop when we allocated enough assessments...
$submission = get_record("workshop_submissions", "id", $submissionid);
// ... provided the user has NOT already assessed that submission...
if (!get_record("workshop_assessments", "submissionid", $submission->id, "userid",
$user->id)) {
$yearfromnow = time() + 365 * 86400;
// ...create one and set timecreated way in the future, this is reset when record is updated
unset($assessment); // clear previous version of object (if any)
$assessment->workshopid = $workshop->id;
$assessment->submissionid = $submission->id;
$assessment->userid = $user->id;
$assessment->grade = -1; // set impossible grade
$assessment->timecreated = $yearfromnow;
if (!$assessment->id = insert_record("workshop_assessments", $assessment)) {
error("Could not insert workshop assessment!");
}
$nassessed++;
if ($nassessed >= $workshop->ntassessments) {
break;
}
}
}
}
}
// now list user's assessments (but only list those which come from teacher submissions)
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");
}
// submission from a teacher?
if (isteacher($workshop->course, $submission->userid)) {
$comment = '';
// user assessment has two states: record created but not assessed (date created in the future);
// assessed but always available for re-assessment
if ($assessment->timecreated > $timenow) { // user needs to assess this submission
$action = "id\">".
get_string("assess", "workshop")." ";
}
elseif ($assessment->timegraded and ($assessment->gradinggrade < $reassessthreshold)) {
// allow student to improve on their assessment once it's been graded and is below threshold
$action = "id\">".
get_string("reassess", "workshop")." ";
} else {
// allow student just to see their assessment if it hasn't been graded (or above threshold)
$action = "id&aid=$assessment->id\">".
get_string("view", "workshop")." ";
}
// see if the assessment is graded
if ($assessment->timegraded) {
// show grading grade (supressed if workshop not graded)
if ($workshop->gradingstrategy) {
$comment = get_string("thegradeforthisassessmentis", "workshop",
number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 1))." / ".
$workshop->gradinggrade;
}
} elseif ($assessment->timecreated < $timenow) {
$comment = get_string("awaitinggradingbyteacher", "workshop", $course->teacher);
}
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
}
}
}
print_table($table);
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_unassessed_student_submissions($workshop, $user) {
// list the student submissions not assessed by this user
global $CFG;
$timenow = time();
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $workshop->course)) {
error("Course is misconfigured");
}
if (groupmode($course, $cm) == SEPARATEGROUPS) {
$groupid = get_current_group($course->id);
} else {
$groupid = 0;
}
$table->head = array (get_string("title", "workshop"), get_string("submittedby", "workshop"),
get_string("submitted", "workshop"), get_string("action", "workshop"), get_string("comment", "workshop"));
$table->align = array ("left", "left", "left", "left", "left");
$table->size = array ("*", "*", "*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
if ($submissions = workshop_get_student_submissions($workshop, 'time')) { // oldest first
foreach ($submissions as $submission) {
// check group membership, if necessary
if ($groupid) {
// check user's group
if (!ismember($groupid, $submission->userid)) {
continue; // skip this user
}
}
// see if submission is cold
if (($submission->timecreated +$CFG->maxeditingtime) > $timenow) {
continue; // skip this submission
}
$comment = "";
$timegap = get_string("ago", "workshop", format_time($submission->timecreated - $timenow));
// see if user already graded this assessment
if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id
AND userid = $user->id")) {
if (($timenow - $assessment->timecreated < $CFG->maxeditingtime)) {
// last chance salon
$submissionowner = get_record("user", "id", $submission->userid);
$action = "id\">".
get_string("edit", "workshop")." ";
$table->data[] = array(workshop_print_submission_title($workshop, $submission),
fullname($submissionowner), $timegap, $action, $comment);
}
}
else {
// no assessment by this user, if no other teacher has assessed submission then list it
if (!workshop_count_teacher_assessments($course->id, $submission)) {
$submissionowner = get_record("user", "id", $submission->userid);
$action = "id\">".
get_string("assess", "workshop")." ";
$table->data[] = array(workshop_print_submission_title($workshop, $submission),
fullname($submissionowner), $timegap, $action, $comment);
}
}
}
if (isset($table->data)) {
print_table($table);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_unassessed_teacher_submissions($workshop, $user) {
// list the teacher submissions not assessed by this user
global $CFG;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
$table->head = array (get_string("title", "workshop"), get_string("action", "workshop"),
get_string("comment", "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) {
$comment = "";
// see if user already graded this assessment
if ($assessment = get_record_select("workshop_assessments", "submissionid = $submission->id
AND userid = $user->id")) {
$timenow = time();
if (($timenow - $assessment->timecreated < $CFG->maxeditingtime)) {
// last chance salon
$action = "id\">".
get_string("edit", "workshop")." ";
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
}
}
else { // no assessment
$action = "id\">".
get_string("assess", "workshop")." ";
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action, $comment);
}
}
if (isset($table->data)) {
print_table($table);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_ungraded_assessments($workshop, $stype) {
// lists all the assessments of student submissions for grading by teacher
global $CFG;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
$table->head = array (get_string("title", "workshop"), get_string("submittedby", "workshop"),
get_string("assessor", "workshop"), get_string("timeassessed", "workshop"), get_string("action", "workshop"));
$table->align = array ("left", "left", "left", "left");
$table->size = array ("*", "*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
$timenow = time();
switch ($stype) {
case "student" :
$assessments = workshop_get_ungraded_assessments_student($workshop);
break;
case "teacher" :
$assessments = workshop_get_ungraded_assessments_teacher($workshop);
break;
}
if ($assessments) {
foreach ($assessments as $assessment) {
if (!isteacher($workshop->course, $assessment->userid)) { // don't let teacher grade their own assessments
if (($timenow - $assessment->timegraded) < $CFG->maxeditingtime) {
$action = "id&stype=$stype&aid=$assessment->id\">".
get_string("edit", "workshop")." ";
}
else {
$action = "id&stype=$stype&aid=$assessment->id\">".
get_string("grade", "workshop")." ";
}
$submission = get_record("workshop_submissions", "id", $assessment->submissionid);
$submissionowner = get_record("user", "id", $submission->userid);
$assessor = get_record("user", "id", $assessment->userid);
$table->data[] = array(workshop_print_submission_title($workshop, $submission),
fullname($submissionowner), fullname($assessor), userdate($assessment->timecreated), $action);
}
}
if (isset($table->data)) {
print_table($table);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_list_user_submissions($workshop, $user) {
global $CFG;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
$timenow = time();
$table->head = array (get_string("title", "workshop"), get_string("action", "workshop"),
get_string("submitted", "assignment"), get_string("assessments", "workshop"));
$table->align = array ("left", "left", "left", "left");
$table->size = array ("*", "*", "*", "*");
$table->cellpadding = 2;
$table->cellspacing = 0;
if ($submissions = workshop_get_user_submissions($workshop, $user)) {
foreach ($submissions as $submission) {
// allow user to edit or delete a submission if it's warm OR if assessment period has not started
if (($submission->timecreated > ($timenow - $CFG->maxeditingtime)) or ($workshop->assessmentstart > time())) {
$action = "id&sid=$submission->id\">".
get_string("edit", "workshop")." | ".
"id&sid=$submission->id\">".
get_string("delete", "workshop")." ";
}
else {
$action = '';
}
$datesubmitted = userdate($submission->timecreated);
if ($submission->late) {
$datesubmitted = "".$datesubmitted." ";
}
$n = count_records_select("workshop_assessments", "submissionid = $submission->id AND
timecreated < ($timenow - $CFG->maxeditingtime)");
$table->data[] = array(workshop_print_submission_title($workshop, $submission), $action,
$datesubmitted, $n);
}
print_table($table);
}
}
///////////////////////////////////////////////////////////////////////////////
function workshop_phase($workshop, $style='') {
$time = time();
if ($time < $workshop->submissionstart) {
return get_string('phase1'.$style, 'workshop');
}
else if ($time < $workshop->submissionend) {
if ($time < $workshop->assessmentstart) {
return get_string('phase2'.$style, 'workshop');
} else {
return get_string('phase3'.$style, 'workshop');
}
}
else if ($time < $workshop->assessmentstart) {
return get_string('phase0'.$style, 'workshop');
}
else if ($time < $workshop->assessmentend) {
return get_string('phase4'.$style, 'workshop');
}
else {
return get_string('phase5'.$style, 'workshop');
}
error('Something is wrong with the workshop dates');
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_assessment($workshop, $assessment = false, $allowchanges = false,
$showcommentlinks = false, $returnto = '') {
// $allowchanges added 14/7/03. The form is inactive unless allowchanges = true
// $returnto added 28/8/03. The page to go to after the assessment has been submitted
global $CFG, $THEME, $USER, $WORKSHOP_SCALES, $WORKSHOP_EWEIGHTS;
if (! $course = get_record("course", "id", $workshop->course)) {
error("Course is misconfigured");
}
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
error("Course Module ID was incorrect");
}
if ($assessment) {
if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
error ("Workshop_print_assessment: Submission record not found");
}
print_heading(get_string('assessmentof', 'workshop',
"id&action=showsubmission&sid=$submission->id\" target=\"submission\">".
$submission->title.' '));
}
$timenow = time();
// reset the internal flags
if ($assessment) {
$showgrades = false;
}
else { // if no assessment, i.e. specimen grade form always show grading scales
$showgrades = true;
}
if ($assessment) {
// set the internal flag if necessary
if ($allowchanges or !$workshop->agreeassessments or !$workshop->hidegrades or
$assessment->timeagreed) {
$showgrades = true;
}
echo "\n";
// see if this is a pre-filled assessment for a re-submission...
if ($assessment->resubmission) {
// ...and print an explaination
print_heading(get_string("assessmentofresubmission", "workshop"));
}
// print agreement time if the workshop requires peer agreement
if ($workshop->agreeassessments and $assessment->timeagreed) {
echo "".get_string("assessmentwasagreedon", "workshop", userdate($assessment->timeagreed));
}
// first print any comments on this assessment
if ($comments = workshop_get_comments($assessment)) {
echo "
\n";
$firstcomment = TRUE;
foreach ($comments as $comment) {
echo "cellheading2\">".
get_string("commentby","workshop")." ";
if (isteacher($workshop->course, $comment->userid)) {
echo $course->teacher;
}
elseif ($assessment->userid == $comment->userid) {
print_string("assessor", "workshop");
}
else {
print_string("authorofsubmission", "workshop");
}
echo " ".get_string("on", "workshop", userdate($comment->timecreated))."
\n";
echo format_text($comment->comments)." \n";
// add the links if needed
if ($firstcomment and $showcommentlinks and !$assessment->timeagreed) {
// show links depending on who doing the viewing
$firstcomment = FALSE;
if (isteacher($workshop->course, $USER->id) and ($comment->userid != $USER->id)) {
echo "id&aid=$assessment->id\">".
get_string("reply", "workshop")."
\n";
}
elseif (($comment->userid ==$USER->id) and (($timenow - $comment->timecreated) < $CFG->maxeditingtime)) {
echo "id&cid=$comment->id\">".
get_string("edit", "workshop")." \n";
if ($USER->id == $submission->userid) {
echo " | id&aid=$assessment->id\">".
get_string("agreetothisassessment", "workshop")." \n";
}
echo '
';
}
elseif (($comment->userid != $USER->id) and (($USER->id == $assessment->userid) or
($USER->id == $submission->userid))) {
echo "id&aid=$assessment->id\">".
get_string("reply", "workshop")." \n";
if ($USER->id == $submission->userid) {
echo " | id&aid=$assessment->id\">".
get_string("agreetothisassessment", "workshop")." \n";
}
echo '
';
}
}
echo ' ';
}
echo '
';
}
echo ' ';
}
// now print the grading form with the grading grade if any
// FORM is needed for Mozilla browsers, else radio bttons are not checked
?>
\n";
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_assessments_by_user_for_admin($workshop, $user) {
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if ($assessments = workshop_get_user_assessments_done($workshop, $user)) {
foreach ($assessments as $assessment) {
workshop_print_assessment($workshop, $assessment);
echo "".
''.
get_string('assessthisassessment', 'workshop').' | '.
"id&aid=$assessment->id\">".
get_string("delete", "workshop")."
\n";
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_assessments_for_admin($workshop, $submission) {
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if ($assessments =workshop_get_assessments($submission)) {
foreach ($assessments as $assessment) {
if (!$user = get_record("user", "id", $assessment->userid)) {
error (" workshop_print_assessments_for_admin: unable to get user record");
}
echo "
".get_string("assessmentby", "workshop", fullname($user))."
\n";
workshop_print_assessment($workshop, $assessment);
echo "id&aid=$assessment->id\">".
get_string("delete", "workshop")."
\n";
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_assignment_info($workshop) {
global $CFG;
if (! $course = get_record("course", "id", $workshop->course)) {
error("Course is misconfigured");
}
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
error("Course Module ID was incorrect");
}
// print standard assignment heading
print_simple_box_start("center");
print_heading($workshop->name, "center");
print_simple_box_start("center");
// print phase and date info
$string = ''.get_string('currentphase', 'workshop').' : '.workshop_phase($workshop).' ';
$dates = array(
'submissionstart' => $workshop->submissionstart,
'submissionend' => $workshop->submissionend,
'assessmentstart' => $workshop->assessmentstart,
'assessmentend' => $workshop->assessmentend
);
foreach ($dates as $type => $date) {
if ($date) {
$strdifference = format_time($date - time());
if (($date - time()) < 0) {
$strdifference = "$strdifference ";
}
$string .= ''.get_string($type, 'workshop').' : '.userdate($date)." ($strdifference) ";
}
}
echo $string;
$grade = $workshop->gradinggrade + $workshop->grade;
echo "".get_string("maximumgrade")." : $grade ";
// print link to specimen assessment form
echo "(id&action=displaygradingform\">".
get_string("specimenassessmentform", "workshop")." ";
// print edit icon
if (isteacheredit($course->id) and $workshop->nelements) {
echo " id&action=editelements\">".
" pixpath/t/edit.gif\" ".
'height="11" width="11" border="0" alt="'.get_string('amendassessmentelements', 'workshop').'" /> ';
}
echo ") ";
print_simple_box_end();
echo " ";
echo format_text($workshop->summary, $workshop->format);
print_simple_box_end();
echo " ";
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_difference($time) {
if ($time < 0) {
$timetext = get_string("late", "assignment", format_time($time));
return " ($timetext )";
} else {
$timetext = get_string("early", "assignment", format_time($time));
return " ($timetext)";
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_feedback($course, $submission) {
global $CFG, $THEME, $RATING;
if (! $teacher = get_record("user", "id", $submission->teacher)) {
error("Weird workshop error");
}
echo "\n";
echo "\n";
echo "\n";
echo "\nbody\" width=\"35\" valign=\"top\">";
print_user_picture($teacher->id, $course->id, $teacher->picture);
echo " ";
echo "cellheading\">".fullname($teacher);
echo " ".userdate($submission->timemarked)." ";
echo " ";
echo "\ncellcontent\">";
echo "";
if ($submission->grade) {
echo get_string("grade").": $submission->grade";
} else {
echo get_string("nograde");
}
echo "
";
echo format_text($submission->assessorcomment);
echo "
";
echo "
";
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_key($workshop) {
// print an explaination of the grades
if (!$course = get_record("course", "id", $workshop->course)) {
error("Print key: course not found");
}
echo "\n";
echo "
{} ".get_string("assessmentby", "workshop", $course->student)."; \n";
echo "[] ".get_string("assessmentby", "workshop", $course->teacher)."; \n";
echo "<> ".get_string("assessmentdropped", "workshop").";\n";
if ($workshop->agreeassessments) echo "<<>> ".get_string("assessmentnotyetagreed", "workshop").";\n";
echo " () ".get_string("automaticgradeforassessment", "workshop")."; \n";
echo "[] ".get_string("teachergradeforassessment", "workshop", $course->teacher).".\n";
echo " ".get_string("gradesforsubmissionsare", "workshop", $workshop->grade)."; \n";
echo get_string("gradesforassessmentsare", "workshop", $workshop->gradinggrade).".
\n";
echo "
\n";
return;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_league_table($workshop) {
// print an order table of (student) submissions showing teacher's and student's assessments
if (! $course = get_record("course", "id", $workshop->course)) {
error("Print league table: Course is misconfigured");
}
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
// set $groupid if workshop is in SEPARATEGROUPS mode
if (groupmode($course, $cm) == SEPARATEGROUPS) {
$groupid = get_current_group($course->id);
} else {
$groupid = 0;
}
$nentries = $workshop->showleaguetable;
if ($workshop->anonymous and isstudent($course->id)) {
$table->head = array (get_string("title", "workshop"),
get_string("teacherassessments", "workshop", $course->teacher),
get_string("studentassessments", "workshop", $course->student), get_string("overallgrade", "workshop"));
$table->align = array ("left", "center", "center", "center");
$table->size = array ("*", "*", "*", "*");
}
else { // show names
$table->head = array (get_string("title", "workshop"), get_string("name"),
get_string("teacherassessments", "workshop", $course->teacher),
get_string("studentassessments", "workshop", $course->student), get_string("overallgrade", "workshop"));
$table->align = array ("left", "left", "center", "center", "center");
$table->size = array ("*", "*", "*", "*", "*");
}
$table->cellpadding = 2;
$table->cellspacing = 0;
if ($submissions = workshop_get_student_submissions($workshop)) {
foreach ($submissions as $submission) {
if ($groupid) {
// check submission's group
if (!ismember($groupid, $submission->userid)) {
continue; // skip this submission
}
}
$grades[$submission->id] = workshop_submission_grade($workshop, $submission);
}
arsort($grades); // largest grade first
reset($grades);
$n = 1;
while (list($submissionid, $grade) = each($grades)) {
if (!$submission = get_record("workshop_submissions", "id", $submissionid)) {
error("Print league table: submission not found");
}
if (!$user = get_record("user", "id", $submission->userid)) {
error("Print league table: user not found");
}
if ($workshop->anonymous and isstudent($course->id)) {
$table->data[] = array(workshop_print_submission_title($workshop, $submission),
workshop_print_submission_assessments($workshop, $submission, "teacher"),
workshop_print_submission_assessments($workshop, $submission, "student"), $grade);
}
else {
$table->data[] = array(workshop_print_submission_title($workshop, $submission), fullname($user),
workshop_print_submission_assessments($workshop, $submission, "teacher"),
workshop_print_submission_assessments($workshop, $submission, "student"), $grade);
}
$n++;
if ($n > $nentries) {
break;
}
}
print_heading(get_string("leaguetable", "workshop"));
print_table($table);
workshop_print_key($workshop);
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_submission($workshop, $submission) {
// prints the submission with optional attachments
global $CFG;
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
print_simple_box(format_text($submission->description), 'center');
if ($workshop->nattachments) {
$n = 1;
echo "\n";
$filearea = workshop_file_area_name($workshop, $submission);
if ($basedir = workshop_file_area($workshop, $submission)) {
if ($files = get_directory_list($basedir)) {
foreach ($files as $file) {
$icon = mimeinfo("icon", $file);
if ($CFG->slasharguments) {
$ffurl = "file.php/$filearea/$file";
} else {
$ffurl = "file.php?file=/$filearea/$file";
}
echo "".get_string("attachment", "workshop")." $n: \n";
echo " pixpath/f/$icon\" height=\"16\" width=\"16\"
border=\"0\" alt=\"File\" />".
" wwwroot/$ffurl\">$file ";
$n++;
}
}
}
echo "
\n";
}
return;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_submission_assessments($workshop, $submission, $type) {
global $USER, $CFG;
// Returns the teacher or peer grade and a hyperlinked list of grades for this submission
$str = '';
// get the assessments in grade order, highest first
if ($assessments = workshop_get_assessments($submission, "", "grade DESC")) {
if ($type == 'teacher' or $type == 'all') {
// students can see teacher assessments only if the release date has passed
$timenow = time();
if (isteacher($workshop->course, $USER->id) or ($timenow > $workshop->releasegrades)) {
foreach ($assessments as $assessment) {
if (isteacher($workshop->course, $assessment->userid)) {
if ($type == 'all') {
$str .= workshop_fullname($assessment->userid, $workshop->course).': ';
}
$str .= "id\">"
. "[".number_format($assessment->grade *$workshop->grade / 100, 0)."] ";
if (isteacher($workshop->course, $USER->id)) {
$str .= ' id\"> pixpath/t/edit.gif\" ".
' height="11" width="11" border="0" alt="'.get_string('reassess', 'workshop').'" /> ';
$str .= ' id&aid=$assessment->id\"> pixpath/t/delete.gif\" ".
' height="11" width="11" border="0" alt="'.get_string('delete', 'workshop').'" /> ';
}
}
}
}
}
if ($type == 'student' or $type == 'all') {
foreach ($assessments as $assessment) {
if (isstudent($workshop->course, $assessment->userid)) {
if ($type == 'all') {
$str .= workshop_fullname($assessment->userid, $workshop->course).': ';
}
$str .= "id\">";
if ($workshop->agreeassessments and !$assessment->timeagreed and
isstudent($workshop->course, $submission->userid)) { // agreement on student work only
$str .= "<<".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).
")>> ";
} elseif ($assessment->timegraded) {
if ($assessment->gradinggrade) {
$str .= "{".number_format($assessment->grade * $workshop->grade / 100, 0);
if ($assessment->teachergraded) {
$str .= " [".number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).
"]} ";
} else {
$str .= " (".number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).
")} ";
}
} else {
$str .= "<".number_format($assessment->grade * $workshop->grade / 100, 0).
" (0)> ";
}
} else {
$str .= "{".number_format($assessment->grade * $workshop->grade / 100, 0)."} ";
}
$str .= ' ';
}
}
}
}
if (!$str) {
$str = " "; // be kind to Mozilla browsers!
}
return $str;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_submission_title($workshop, $submission) {
// Arguments are objects
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
if (!$submission->timecreated) { // a "no submission"
return $submission->title;
}
return "id\" href=\"submissions.php?id=$cm->id&action=showsubmission&sid=$submission->id\">$submission->title ";
}
function workshop_print_time_to_deadline($time) {
if ($time < 0) {
$timetext = get_string("afterdeadline", "workshop", format_time($time));
return " ($timetext )";
} else {
$timetext = get_string("beforedeadline", "workshop", format_time($time));
return " ($timetext)";
}
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_upload_form($workshop) {
global $CFG;
if (! $course = get_record("course", "id", $workshop->course)) {
error("Course is misconfigured");
}
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
error("Course Module ID was incorrect");
}
$usehtmleditor = can_use_html_editor();
echo "";
echo "
";
echo " id\" />";
echo "\n";
// now get the submission
echo "". get_string("title", "workshop").": \n";
echo " \n";
echo "".get_string("submission", "workshop").": \n";
print_textarea($usehtmleditor, 25,70, 630, 400, "description");
use_html_editor("description");
echo "\n";
if ($workshop->nattachments) {
require_once($CFG->dirroot.'/lib/uploadlib.php');
for ($i=0; $i < $workshop->nattachments; $i++) {
$iplus1 = $i + 1;
$tag[$i] = get_string("attachment", "workshop")." $iplus1:";
}
upload_print_form_fragment($workshop->nattachments,null,$tag,false,null,$course->maxbytes,
$workshop->maxbytes,false);
}
echo "
\n";
echo " ";
echo " ";
echo "
";
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_print_user_assessments($workshop, $user, &$gradinggrade) {
// Returns the number of assessments and a hyperlinked list of grading grades for the assessments made by this user
if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) {
error("Course Module ID was incorrect");
}
$gradinggrade = 0;
$n = 0;
$str = '';
if ($assessments = workshop_get_user_assessments_done($workshop, $user)) {
foreach ($assessments as $assessment) {
$gradinggrade += $assessment->gradinggrade;
$n++;
$str .= "id\">";
if ($assessment->timegraded) {
if ($assessment->gradinggrade) {
$str .= "{".number_format($assessment->grade * $workshop->grade / 100, 0);
if ($assessment->teachergraded) {
$str .= " [".number_format($assessment->gradinggrade * $workshop->gradinggrade / 100)."]} ";
} else {
$str .= " (".number_format($assessment->gradinggrade * $workshop->gradinggrade / 100).")} ";
}
} else {
$str .= "<".number_format($assessment->grade * $workshop->grade / 100, 0)." (0)> ";
}
} else {
$str .= "{".number_format($assessment->grade * $workshop->grade / 100, 0)." (-)} ";
}
$str .= ' ';
}
}
else {
$str ="0";
}
if ($n = max($n, $workshop->ntassessments + $workshop->nsassessments)) {
$gradinggrade = number_format($gradinggrade/$n * $workshop->gradinggrade / 100, 1);
}
return $str;
}
//////////////////////////////////////////////////////////////////////////////////////
function workshop_test_user_assessments($workshop, $user) {
// see if user has assessed required number of assessments of teachers submissions...
global $CFG;
$result = true;
$n = 0;
$timenow =time();
if ($submissions = workshop_get_teacher_submissions($workshop)) {
foreach ($submissions as $submission) {
if ($assessment = workshop_get_submission_assessment($submission, $user)) {
// ...the date stamp on the assessment should be in the past
if ($assessment->timecreated < $timenow) {
$n++;
}
}
}
if ($n < min($workshop->ntassessments, workshop_count_teacher_submissions($workshop))) {
$result = false;
}
}
return $result;
}
?>