From: skodak Date: Wed, 6 Sep 2006 08:41:47 +0000 (+0000) Subject: initial conversion of workshop to new roles and capabilities framework; groups are... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=6b9a1fec8f488914a597091b741c4f786504fb0b;p=moodle.git initial conversion of workshop to new roles and capabilities framework; groups are not functional yet (did they ever work properly ?) --- diff --git a/mod/workshop/assess.php b/mod/workshop/assess.php index 32a90d6b06..062f712d16 100644 --- a/mod/workshop/assess.php +++ b/mod/workshop/assess.php @@ -23,11 +23,15 @@ error("No coursemodule found"); } + require_login($course->id, false, $cm); + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + require_capability('mod/workshop:view', $context); + if (!$redirect) { - $redirect = urlencode($_SERVER["HTTP_REFERER"].'#sid='.$submission->id); + //seems not to work properly +// $redirect = urlencode($_SERVER["HTTP_REFERER"].'#sid='.$submission->id); } - require_login($course->id, false, $cm); $strworkshops = get_string("modulenameplural", "workshop"); $strworkshop = get_string("modulename", "workshop"); @@ -67,7 +71,7 @@ if (!$assessment = get_record("workshop_assessments", "submissionid", $submission->id, "userid", $USER->id)) { // if it's the teacher see if the user has done a self assessment if so copy it - if (isteacher($course->id) and ($assessment = get_record("workshop_assessments", "submissionid", + if (workshop_is_teacher($workshop) and ($assessment = get_record("workshop_assessments", "submissionid", $submission->id, "userid", $submission->userid))) { $assessment = workshop_copy_assessment($assessment, $submission, true); // need to set owner of assessment @@ -90,7 +94,7 @@ error("Could not insert workshop assessment!"); } // if it's the teacher and the workshop is error banded set all the elements to Yes - if (isteacher($course->id) and ($workshop->gradingstrategy == 2)) { + if (workshop_is_teacher($workshop) and ($workshop->gradingstrategy == 2)) { for ($i =0; $i < $workshop->nelements; $i++) { unset($element); $element->workshopid = $workshop->id; @@ -130,13 +134,13 @@ print_header('', '', '', '', ''); $title = '"'.$submission->title.'" '; - if (isteacher($course->id)) { + if (workshop_is_teacher($workshop)) { $title .= ' '.get_string('by', 'workshop').' '.workshop_fullname($submission->userid, $course->id); } print_heading($title); workshop_print_submission($workshop, $submission); - if (isteacher($course->id)) { + if (workshop_is_teacher($workshop)) { echo '
'.get_string('assessments', 'workshop').':
'; echo workshop_print_submission_assessments($workshop, $submission, "all"); echo '
'; diff --git a/mod/workshop/assessments.php b/mod/workshop/assessments.php index 7435c91fb7..5074ee85d2 100644 --- a/mod/workshop/assessments.php +++ b/mod/workshop/assessments.php @@ -63,6 +63,8 @@ } require_login($course->id, false, $cm); + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + require_capability('mod/workshop:view', $context); $navigation = ""; if ($course->category) { @@ -125,9 +127,7 @@ error("Workshop Assessment ID and/or Element Number missing"); } - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); if (!$assessment = get_record("workshop_assessments", "id", $aid)) { error("workshop assessment is misconfigured"); @@ -352,9 +352,7 @@ /*********************** admin list of asssessments (of a submission) (by teachers)**************/ elseif ($action == 'adminlist') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); if (empty($sid)) { error ("Workshop asssessments: adminlist called with no sid"); @@ -368,9 +366,7 @@ /*********************** admin list of asssessments by a student (used by teachers only )******************/ elseif ($action == 'adminlistbystudent') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); if (empty($userid)) { error ("Workshop asssessments: adminlistbystudent called with no userid"); @@ -450,9 +446,7 @@ /*********************** edit assessment elements (for teachers) ***********************/ elseif ($action == 'editelements') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); $count = count_records("workshop_grades", "workshopid", $workshop->id); if ($count) { @@ -635,9 +629,7 @@ /*************** grade all assessments (by teacher) ***************************/ elseif ($action == 'gradeallassessments') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); print_heading(get_string("gradingallassessments", "workshop")); workshop_grade_assessments($workshop); @@ -648,9 +640,7 @@ /*************** grade (student's) assessment (by teacher) ***************************/ elseif ($action == 'gradeassessment') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); print_heading_with_help(get_string("gradeassessment", "workshop"), "gradingassessments", "workshop"); // get assessment record @@ -704,9 +694,7 @@ /*********************** insert/update assignment elements (for teachers)***********************/ elseif ($action == 'insertelements') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); $form = data_submitted(); @@ -821,9 +809,8 @@ /*********************** list assessments for grading (Student submissions)(by teachers)***********************/ elseif ($action == 'listungradedstudentsubmissions') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); + workshop_list_ungraded_assessments($workshop, "student"); print_continue("view.php?id=$cm->id"); } @@ -832,9 +819,8 @@ /*********************** list assessments for grading (Teacher submissions) (by teachers)***********************/ elseif ($action == 'listungradedteachersubmissions') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); + workshop_list_ungraded_assessments($workshop, "teacher"); print_continue("view.php?id=$cm->id"); } @@ -852,9 +838,7 @@ elseif ($action == 'regradestudentassessments' ) { $timenow = time(); - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); // get all the submissions... if ($submissions = get_records("workshop_submissions", "workshopid", $workshop->id)) { foreach ($submissions as $submission) { @@ -879,9 +863,7 @@ error("Workshop Assessment id and/or Stock Comment id missing"); } - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); if (!$assessment = get_record("workshop_assessments", "id", $aid)) { error("workshop assessment is misconfigured"); @@ -1250,12 +1232,12 @@ workshop_grade_assessments($workshop); } else { // it could be self assessment.... // now see if there's a corresponding assessment so that the gradinggrade can be set - if (isteacher($course->id)) { + if (workshop_is_teacher($workshop)) { // see if there's are student assessments, if so set their gradinggrade if ($assessments = workshop_get_assessments($submission)) { foreach($assessments as $studentassessment) { // skip if it's not a student assessment - if (!isstudent($course->id, $studentassessment->userid)) { + if (!workshop_is_student($workshop, $studentassessment->userid)) { continue; } $gradinggrade = workshop_compare_assessments($workshop, $assessment, $studentassessment); @@ -1266,7 +1248,7 @@ } else { //it's a student assessment, see if there's a corresponding teacher's assessment if ($assessments = workshop_get_assessments($submission)) { foreach($assessments as $teacherassessment) { - if (isteacher($course->id, $teacherassessment->userid)) { + if (workshop_is_teacher($workshop, $teacherassessment->userid)) { $gradinggrade = workshop_compare_assessments($workshop, $assessment, $teacherassessment); set_field("workshop_assessments", "timegraded", $timenow, "id", $assessment->id); set_field("workshop_assessments", "gradinggrade", $gradinggrade, "id", $assessment->id); @@ -1335,9 +1317,7 @@ elseif ($action == 'updategrading') { $timenow = time(); - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); $form = (object)$_POST; diff --git a/mod/workshop/db/access.php b/mod/workshop/db/access.php new file mode 100644 index 0000000000..5e9337c891 --- /dev/null +++ b/mod/workshop/db/access.php @@ -0,0 +1,50 @@ + array( + + 'captype' => 'read', + 'contextlevel' => CONTEXT_MODULE, + 'legacy' => array( + 'guest' => CAP_PREVENT, + 'student' => CAP_ALLOW, + 'teacher' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'coursecreator' => CAP_ALLOW, + 'admin' => CAP_ALLOW + ) + ), + + 'mod/workshop:participate' => array( + + 'captype' => 'write', + 'contextlevel' => CONTEXT_MODULE, + 'legacy' => array( + 'guest' => CAP_PREVENT, + 'student' => CAP_ALLOW, + 'teacher' => CAP_PREVENT, + 'editingteacher' => CAP_PREVENT, + 'coursecreator' => CAP_PREVENT, + 'admin' => CAP_PREVENT + ) + ), + + 'mod/workshop:manage' => array( + + 'captype' => 'write', + 'contextlevel' => CONTEXT_MODULE, + 'legacy' => array( + 'guest' => CAP_PREVENT, + 'student' => CAP_PREVENT, + 'teacher' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'coursecreator' => CAP_ALLOW, + 'admin' => CAP_ALLOW + ) + ) +); \ No newline at end of file diff --git a/mod/workshop/db/install.xml b/mod/workshop/db/install.xml index 232710e9ac..9d1c3d8f63 100644 --- a/mod/workshop/db/install.xml +++ b/mod/workshop/db/install.xml @@ -1,5 +1,8 @@ - + @@ -82,8 +85,9 @@ - - + + + diff --git a/mod/workshop/db/mysql.php b/mod/workshop/db/mysql.php index c6cf1a4285..d53ff1963a 100644 --- a/mod/workshop/db/mysql.php +++ b/mod/workshop/db/mysql.php @@ -4,7 +4,7 @@ function workshop_upgrade($oldversion) { // This function does anything necessary to upgrade // older versions to match current functionality - global $CFG; + global $CFG, $db; if ($oldversion < 2003050400) { execute_sql(" ALTER TABLE `{$CFG->prefix}workshop` CHANGE `graded` `agreeassessments` TINYINT(2) UNSIGNED DEFAULT '0' NOT NULL"); @@ -209,6 +209,14 @@ function workshop_upgrade($oldversion) { $wtm->update( 'workshop','description','format' ); } + if ($oldversion < 2006090500) { + $columns = $db->MetaColumns($CFG->prefix.'workshop_assessments'); + $columns = array_change_key_case($columns, CASE_LOWER); + if (!isset($columns['teachergraded'])) { + table_column('workshop_assessments', '', 'teachergraded', 'INTEGER', '4', 'UNSIGNED', '0', 'NOT NULL', 'gradinggrade'); + } + } + return true; } diff --git a/mod/workshop/db/mysql.sql b/mod/workshop/db/mysql.sql index 25e7bbae0b..51c63867dc 100644 --- a/mod/workshop/db/mysql.sql +++ b/mod/workshop/db/mysql.sql @@ -77,6 +77,7 @@ CREATE TABLE `prefix_workshop_assessments` ( `timeagreed` int(10) unsigned NOT NULL default '0', `grade` float NOT NULL default '0', `gradinggrade` int(3) NOT NULL default '0', + `teachergraded` 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', diff --git a/mod/workshop/db/postgres7.php b/mod/workshop/db/postgres7.php index 8f8cd67471..3aa26808f8 100644 --- a/mod/workshop/db/postgres7.php +++ b/mod/workshop/db/postgres7.php @@ -4,7 +4,7 @@ function workshop_upgrade($oldversion) { // This function does anything necessary to upgrade // older versions to match current functionality - global $CFG; + global $CFG, $db; if ($oldversion < 2003050400) { table_column("workshop","graded", "agreeassessments", "INT","2", "", "0" ,"NOT NULL"); @@ -237,6 +237,14 @@ function workshop_upgrade($oldversion) { "); } + if ($oldversion < 2006090500) { + $columns = $db->MetaColumns($CFG->prefix.'workshop_assessments'); + $columns = array_change_key_case($columns, CASE_LOWER); + if (!isset($columns['teachergraded'])) { + table_column('workshop_assessments', '', 'teachergraded', 'INTEGER', '4', 'UNSIGNED', '0', 'NOT NULL', 'gradinggrade'); + } + } + return true; } diff --git a/mod/workshop/db/postgres7.sql b/mod/workshop/db/postgres7.sql index 2949af37c3..045fe6f632 100644 --- a/mod/workshop/db/postgres7.sql +++ b/mod/workshop/db/postgres7.sql @@ -26,6 +26,7 @@ CREATE TABLE prefix_workshop ( releasegrades INT8 NOT NULL default'0', grade INT8 NOT NULL default '0', gradinggrade INT4 NOT NULL default '0', + teachergraded INT4 NOT NULL default '0', ntassessments INT NOT NULL default '0', assessmentcomps int4 NOT NULL default '2', nsassessments INT NOT NULL default '0', diff --git a/mod/workshop/index.php b/mod/workshop/index.php index 82f72dbd89..3a04f3e566 100644 --- a/mod/workshop/index.php +++ b/mod/workshop/index.php @@ -11,6 +11,7 @@ } require_course_login($course); + add_to_log($course->id, "workshop", "view all", "index.php?id=$course->id", ""); $strworkshops = get_string("modulenameplural", "workshop"); @@ -18,11 +19,7 @@ $strweek = get_string("week"); $strtopic = get_string("topic"); $strname = get_string("name"); - if (isstudent($course->id)) { - $strinfo = get_string("grade"); - } else { - $strinfo = get_string("phase", "workshop"); - } + $strinfo = get_string("grade")."/".$strinfo = get_string("phase", "workshop"); $strdeadline = get_string("deadline", "workshop"); $strsubmitted = get_string("submitted", "assignment"); @@ -47,7 +44,7 @@ } foreach ($workshops as $workshop) { - if (isteacher($course->id, $USER->id)) { // teacher see info (students see grade) + if (workshop_is_teacher($workshop, $USER->id)) { // teacher see info (students see grade) $info = workshop_phase($workshop, 'short'); if (time() > $workshop->submissionstart) { if ($num = workshop_count_student_submissions_for_assessment($workshop, $USER)) { @@ -73,7 +70,7 @@ //Show normal if the mod is visible $link = "coursemodule\">".format_string($workshop->name,true)."
"; } - if (isstudent($course->id)) { + if (workshop_is_student($workshop)) { $link .= " ($submission->title)"; // show students the title of their submission(s) $gradinggrade = workshop_gradinggrade($workshop, $USER); $grade = workshop_submission_grade($workshop, $submission); @@ -100,7 +97,7 @@ else { $table->data[] = array ($link, $info, $submitted, $due); } - if (isteacher($course->id)) { + if (workshop_is_teacher($workshop)) { // teacher only needs to see one "submission" break; } @@ -115,7 +112,7 @@ //Show normal if the mod is visible $link = "coursemodule\">".format_string($workshop->name,true).""; } - if (isstudent($course->id)) { + if (workshop_is_student($workshop)) { $info = '0'; } if ($course->format == "weeks" or $course->format == "topics") { diff --git a/mod/workshop/lib.php b/mod/workshop/lib.php index 7b3eb5c5bd..04d13b0229 100644 --- a/mod/workshop/lib.php +++ b/mod/workshop/lib.php @@ -26,6 +26,42 @@ $WORKSHOP_ASSESSMENT_COMPS = array ( 4 => array('name' => get_string('verystrict', 'workshop'), 'value' => 0.2) ); +/*** Moodle 1.7 compatibility functions ***** + * + ********************************************/ +function workshop_context($workshop) { + //TODO: add some $cm caching if needed + if (is_object($workshop)) { + $workshop = $workshop->id; + } + if (! $cm = get_coursemodule_from_instance('workshop', $workshop)) { + error('Course Module ID was incorrect'); + } + + return get_context_instance(CONTEXT_MODULE, $cm->id); +} + +function workshop_is_teacher($workshop, $userid=NULL) { + return has_capability('mod/workshop:manage', workshop_context($workshop), $userid); +} + +//TODO: should we make new role for it and fix the code or wait for new workshop? +function workshop_is_teacheredit($workshop, $userid=NULL) { + return has_capability('mod/workshop:manage', workshop_context($workshop), $userid); +} + +function workshop_is_student($workshop, $userid=NULL) { + return has_capability('mod/workshop:participate', workshop_context($workshop), $userid); +} + +function workshop_get_students($workshop, $sort='u.lastaccess', $fields='u.*') { + return $users = get_users_by_capability(workshop_context($workshop), 'mod/workshop:participate', $fields, $sort); +} + +function workshop_get_teachers($workshop, $sort='u.lastaccess', $fields='u.*') { + return $users = get_users_by_capability(workshop_context($workshop), 'mod/workshop:manage', $fields, $sort); +} + /*** Standard Moodle functions ****************** workshop_add_instance($workshop) @@ -174,11 +210,11 @@ function workshop_cron () { echo "Could not find user $assessment->userid\n"; continue; } - if (! isstudent($course->id, $submissionowner->id) and !isteacher($course->id, + if (! workshop_is_student($workshop, $submissionowner->id) and !workshop_is_teacher($workshop, $submissionowner->id)) { continue; // Not an active participant } - if (! isstudent($course->id, $assessmentowner->id) and !isteacher($course->id, + if (! workshop_is_student($workshop, $assessmentowner->id) and !workshop_is_teacher($workshop, $assessmentowner->id)) { continue; // Not an active participant } @@ -193,7 +229,7 @@ function workshop_cron () { $USER->lang = $submissionowner->lang; $sendto = $submissionowner; // "Your assignment \"$submission->title\" has been assessed by" - if (isstudent($course->id, $assessmentowner->id)) { + if (workshop_is_student($workshop, $assessmentowner->id)) { $msg = get_string("mail1", "workshop", $submission->title)." a $course->student.\n"; } else { @@ -273,11 +309,11 @@ function workshop_cron () { echo "Could not find user $assessment->userid\n"; continue; } - if (! isstudent($course->id, $submissionowner->id) and !isteacher($course->id, + if (! workshop_is_student($workshop, $submissionowner->id) and !workshop_is_teacher($workshop, $submissionowner->id)) { continue; // Not an active participant } - if (! isstudent($course->id, $assessmentowner->id) and !isteacher($course->id, + if (! workshop_is_student($workshop, $assessmentowner->id) and !workshop_is_teacher($workshop, $assessmentowner->id)) { continue; // Not an active participant } @@ -367,11 +403,11 @@ function workshop_cron () { echo "Could not find user $assessment->userid\n"; continue; } - if (! isstudent($course->id, $submissionowner->id) and !isteacher($course->id, + if (! workshop_is_student($workshop, $submissionowner->id) and !workshop_is_teacher($workshop, $submissionowner->id)) { continue; // Not an active participant } - if (! isstudent($course->id, $assessmentowner->id) and !isteacher($course->id, + if (! workshop_is_student($workshop, $assessmentowner->id) and !workshop_is_teacher($workshop, $assessmentowner->id)) { continue; // Not an active participant } @@ -384,7 +420,7 @@ function workshop_cron () { $USER->lang = $submissionowner->lang; $sendto = $submissionowner; // "A comment has been added to the assignment \"$submission->title\" by - if (isstudent($course->id, $assessmentowner->id)) { + if (workshop_is_student($workshop, $assessmentowner->id)) { $msg = get_string("mail4", "workshop", $submission->title)." a $course->student.\n"; } else { @@ -430,7 +466,7 @@ function workshop_cron () { $USER->lang = $assessmentowner->lang; $sendto = $assessmentowner; // "A comment has been added to the assignment \"$submission->title\" by - if (isstudent($course->id, $submissionowner->id)) { + if (workshop_is_student($workshop, $submissionowner->id)) { $msg = get_string("mail4", "workshop", $submission->title)." a $course->student.\n"; } else { @@ -540,7 +576,7 @@ function workshop_grades($workshopid) { $return = null; if ($workshop = get_record("workshop", "id", $workshopid)) { if (($workshop->assessmentstart < time()) and $workshop->gradingstrategy) { - if ($students = get_course_students($workshop->course)) { + if ($students = workshop_get_students($workshop)) { foreach ($students as $student) { if ($workshop->wtype) { $gradinggrade = workshop_gradinggrade($workshop, $student); @@ -629,7 +665,7 @@ function workshop_print_recent_activity($course, $isteacher, $timestart) { $tempmod->id = $log->workshopid; //Obtain the visible property from the instance if (instance_is_visible("workshop",$tempmod)) { - if (!isteacher($course->id, $log->userid)) { // don't break anonymous rule + if (!workshop_is_teacher($workshop, $log->userid)) { // don't break anonymous rule $log->firstname = $course->student; $log->lastname = ''; } @@ -665,7 +701,7 @@ function workshop_print_recent_activity($course, $isteacher, $timestart) { $tempmod->id = $log->workshopid; //Obtain the visible property from the instance if (instance_is_visible("workshop",$tempmod)) { - if (!isteacher($course->id, $log->userid)) { // don't break anonymous rule + if (!workshop_is_teacher($tempmod->id, $log->userid)) { // don't break anonymous rule $log->firstname = $course->student; $log->lastname = ''; } @@ -1243,7 +1279,7 @@ function workshop_count_ungraded_assessments($workshop) { if ($assessments = get_records_select("workshop_assessments", "workshopid = $workshop->id AND (timecreated + $CFG->maxeditingtime) < $timenow AND timegraded = 0")) { foreach ($assessments as $assessment) { - if (isstudent($workshop->course, $assessment->userid)) { + if (workshop_is_student($workshop, $assessment->userid)) { $n++; } } @@ -1409,20 +1445,22 @@ function workshop_get_student_submissions($workshop, $order = "title") { if ($order == "time") { $order = "s.timecreated ASC"; } - // make sure it works on the site course - $select = "u.course = '$workshop->course' AND"; - $site = get_site(); - if ($workshop->course == $site->id) { - $select = ''; + + if (!$students = workshop_get_students($workshop)) { + return false; + } + $list = "("; + foreach ($students as $student) { + $list .= "$student->id,"; } + $list = rtrim($list, ',').")"; - return get_records_sql("SELECT s.* FROM {$CFG->prefix}workshop_submissions s, - {$CFG->prefix}user_students u, {$CFG->prefix}user a - WHERE $select s.userid = u.userid - AND a.id = u.userid + return get_records_sql("SELECT s.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}user a + WHERE s.userid IN $list AND s.workshopid = $workshop->id AND s.timecreated > 0 - ORDER BY $order"); + AND s.userid = a.id + ORDER BY $order"); } @@ -1537,7 +1575,7 @@ function workshop_grade_assessments($workshop, $verbose=false) { if ($assessments = workshop_get_assessments($submission)) { foreach ($assessments as $assessment) { // test if assessment is "good", a teacher assessment always "good", but may be weighted out - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { if (!$workshop->teacherweight) { // drop teacher's assessment as weight is zero continue; @@ -1548,14 +1586,14 @@ function workshop_grade_assessments($workshop, $verbose=false) { continue; } if (isset($num[$submission->id])) { - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { $num[$submission->id] += $workshop->teacherweight; // weight teacher's assessment } else { $num[$submission->id]++; // number of assessments } $nassessments[$submission->id]++; } else { - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { $num[$submission->id] = $workshop->teacherweight; } else { $num[$submission->id] = 1; @@ -1566,13 +1604,13 @@ function workshop_grade_assessments($workshop, $verbose=false) { $grade = get_field("workshop_grades", "grade", "assessmentid", $assessment->id, "elementno", $i); if (isset($sum[$submission->id][$i])) { - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { $sum[$submission->id][$i] += $workshop->teacherweight * $grade; // teacher's grade } else { $sum[$submission->id][$i] += $grade; // student's grade } } else { - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { $sum[$submission->id][$i] = $workshop->teacherweight * $grade; // teacher's grade } else { $sum[$submission->id][$i] = $grade; // students's grade @@ -1674,7 +1712,7 @@ function workshop_grade_assessments($workshop, $verbose=false) { // first calculate the mean grades for each element foreach ($assessments as $assessment) { // test if assessment is "good", a teacher assessment always "good", but may be weighted out - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { if (!$workshop->teacherweight) { // drop teacher's assessment as weight is zero continue; @@ -1684,7 +1722,7 @@ function workshop_grade_assessments($workshop, $verbose=false) { // it's a duff assessment, or it's not been agreed continue; } - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { $num += $workshop->teacherweight; // weight teacher's assessment } else { $num++; // student assessment just add one @@ -1692,7 +1730,7 @@ function workshop_grade_assessments($workshop, $verbose=false) { for ($i = 0; $i < $workshop->nelements; $i++) { $grade = get_field("workshop_grades", "grade", "assessmentid", $assessment->id, "elementno", $i); - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { $sum[$i] += $workshop->teacherweight * $grade; // teacher's grade } else { $sum[$i] += $grade; // student's grade @@ -1816,7 +1854,7 @@ function workshop_submission_grade($workshop, $submission) { } if ($assessment->gradinggrade or !$assessment->timegraded) { // a good assessment (or one that has not been graded yet) - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { $timenow = time(); if ($timenow > $workshop->releasegrades) { // teacher's grade is available diff --git a/mod/workshop/locallib.php b/mod/workshop/locallib.php index 7a8ba00c4e..5a5a9bf683 100644 --- a/mod/workshop/locallib.php +++ b/mod/workshop/locallib.php @@ -255,7 +255,7 @@ function workshop_count_peer_assessments($workshop, $user) { if ($assessments = workshop_get_assessments($submission)) { foreach ($assessments as $assessment) { // ignore teacher assessments - if (!isteacher($workshop->course, $assessment->userid)) { + if (!workshop_is_teacher($workshop, $assessment->userid)) { $n++; } } @@ -292,12 +292,19 @@ function workshop_count_student_submissions($workshop) { if ($workshop->course == SITEID) { $select = ''; } + if (!$students = workshop_get_students($workshop)) { + return 0; + } + $list = "("; + foreach ($students as $student) { + $list .= "$student->id,"; + } + $list = rtrim($list, ',').")"; - 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"); + return count_records_sql("SELECT count(*) FROM {$CFG->prefix}workshop_submissions s + WHERE $select s.userid IN $list + AND s.workshopid = $workshop->id + AND timecreated > 0"); } @@ -348,13 +355,19 @@ function workshop_count_teacher_assessments($courseid, $submission) { // Return count of (cold) teacher assessments of a submission global $CFG; + if (!$teachers = workshop_get_teachers($submission->workshopid)) { + return 0; + } + $list = "("; + foreach ($teachers as $teacher) { + $list .= "$teacher->id,"; + } + $list = rtrim($list, ',').")"; $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)"); + return count_records_sql("SELECT count(*) FROM {$CFG->prefix}workshop_assessments a + WHERE a.userid IN $list + AND a.submissionid = $submission->id + AND $timenow > (a.timecreated + $CFG->maxeditingtime)"); } @@ -368,7 +381,7 @@ function workshop_count_teacher_assessments_by_user($workshop, $user) { if ($assessments = workshop_get_assessments($submission)) { foreach ($assessments as $assessment) { // count only teacher assessments - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $assessment->userid)) { $n++; } } @@ -382,12 +395,20 @@ function workshop_count_teacher_assessments_by_user($workshop, $user) { ////////////////////////////////////////////////////////////////////////////////////// function workshop_count_teacher_submissions($workshop) { global $CFG; + if (!$teachers = workshop_get_teachers($workshop)) { + return 0; + } + $list = "("; + foreach ($teachers as $teacher) { + $list .= "$teacher->id,"; + } + $list = rtrim($list, ',').")"; + $timenow = time(); - 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"); + return count_records_sql("SELECT count(*) + FROM {$CFG->prefix}workshop_submissions s + WHERE s.userid IN $list + AND s.workshopid = $workshop->id"); } @@ -415,7 +436,7 @@ function workshop_count_ungraded_assessments_student($workshop) { foreach ($assessments as $assessment) { if ($assessment->timegraded == 0) { // ignore teacher assessments - if (!isteacher($workshop->course, $assessment->userid)) { + if (!workshop_is_teacher($workshop, $assessment->userid)) { $n++; } } @@ -440,7 +461,7 @@ function workshop_count_ungraded_assessments_teacher($workshop) { foreach ($assessments as $assessment) { if ($assessment->timegraded == 0) { // ignore teacher assessments - if (!isteacher($workshop->course, $assessment->userid)) { + if (!workshop_is_teacher($workshop, $assessment->userid)) { // must have created a little time ago if (($timenow - $assessment->timecreated) > $CFG->maxeditingtime) { $n++; @@ -471,13 +492,13 @@ function workshop_count_user_assessments($workshop, $user, $stype = "all") { break; case "student" : $submission = get_record("workshop_submissions", "id", $assessment->submissionid); - if (isstudent($workshop->course, $submission->userid)) { + if (workshop_is_student($workshop, $submission->userid)) { $n++; } break; case "teacher" : $submission = get_record("workshop_submissions", "id", $assessment->submissionid); - if (isteacher($workshop->course, $submission->userid)) { + if (workshop_is_teacher($workshop, $submission->userid)) { $n++; } break; @@ -562,13 +583,19 @@ function workshop_delete_user_files($workshop, $user, $exception) { function workshop_get_all_teacher_assessments($workshop) { // Return all teacher assessments, ordered by timecreated, oldest first global $CFG; + if (!$teachers = workshop_get_teachers($workshop)) { + return false; + } + $list = "("; + foreach ($teachers as $teacher) { + $list .= "$teacher->id,"; + } + $list = rtrim($list, ',').")"; - 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 + return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_assessments a + WHERE a.userid IN $list AND a.workshopid = $workshop->id - ORDER BY a.timecreated"); + ORDER BY a.timecreated"); } @@ -587,20 +614,15 @@ 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 = ''; + if (!workshop_is_student($workshop, $user->id)) { + return false; } - 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 + return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}workshop_assessments a + WHERE s.workshopid = $workshop->id AND a.submissionid = s.id AND a.userid = $user->id - ORDER BY a.timecreated DESC"); + ORDER BY a.timecreated DESC"); } @@ -609,15 +631,18 @@ 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 = ''; + + if (!$students = workshop_get_students($workshop)) { + return false; + } + $list = "("; + foreach ($students as $student) { + $list .= "$student->id,"; } + $list = rtrim($list, ',').")"; - 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 + return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}workshop_assessments a + WHERE s.userid IN $list AND s.workshopid = $workshop->id AND a.submissionid = s.id ORDER BY a.timecreated DESC"); @@ -639,12 +664,18 @@ 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 + if (!$teachers = workshop_get_teachers($submission->workshopid)) { + return false; + } + $list = "("; + foreach ($teachers as $teacher) { + $list .= "$teacher->id,"; + } + $list = rtrim($list, ',').")"; + return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_assessments a + WHERE a.userid IN $list AND a.submissionid = $submission->id - ORDER BY a.timecreated"); + ORDER BY a.timecreated"); } @@ -653,13 +684,19 @@ 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 + if (!$teachers = workshop_get_teachers($workshop)) { + return false; + } + $list = "("; + foreach ($teachers as $teacher) { + $list .= "$teacher->id,"; + } + $list = rtrim($list, ',').")"; + return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}workshop_assessments a + WHERE s.userid IN $list AND s.workshopid = $workshop->id AND a.submissionid = s.id - ORDER BY a.timecreated DESC"); + ORDER BY a.timecreated DESC"); } @@ -668,12 +705,18 @@ 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 + if (!$teachers = workshop_get_teachers($workshop)) { + return false; + } + $list = "("; + foreach ($teachers as $teacher) { + $list .= "$teacher->id,"; + } + $list = rtrim($list, ',').")"; + return get_records_sql("SELECT s.* FROM {$CFG->prefix}workshop_submissions s + WHERE s.userid IN $list AND s.workshopid = $workshop->id - ORDER BY s.title"); + ORDER BY s.title"); } @@ -692,16 +735,18 @@ 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 + + if (!$students = workshop_get_students($workshop)) { + return false; + } + $list = "("; + foreach ($students as $student) { + $list .= "$student->id,"; + } + $list = rtrim($list, ',').")"; + return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}workshop_assessments a + WHERE s.userid IN $list AND s.workshopid = $workshop->id AND a.submissionid = s.id AND (a.timegraded = 0 OR a.timegraded > $cutofftime) @@ -716,10 +761,16 @@ function workshop_get_ungraded_assessments_teacher($workshop) { // 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 + if (!$teachers = workshop_get_teachers($workshop)) { + return false; + } + $list = "("; + foreach ($teachers as $teacher) { + $list .= "$teacher->id,"; + } + $list = rtrim($list, ',').")"; + return get_records_sql("SELECT a.* FROM {$CFG->prefix}workshop_submissions s, {$CFG->prefix}workshop_assessments a + WHERE s.userid IN $list AND s.workshopid = $workshop->id AND a.submissionid = s.id AND (a.timegraded = 0 OR a.timegraded > $cutofftime) @@ -749,12 +800,19 @@ function workshop_get_users_done($workshop) { $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"); + if (!$students = workshop_get_students($workshop)) { + return false; + } + $list = "("; + foreach ($students as $student) { + $list .= "$student->id,"; + } + $list = rtrim($list, ',').")"; + + return get_records_sql("SELECT u.* FROM {$CFG->prefix}user u, {$CFG->prefix}workshop_submissions a + WHERE $select u.user IN $list + AND u.id = a.user AND a.workshop = '$workshop->id' + ORDER BY a.timemodified DESC"); } @@ -885,7 +943,7 @@ function workshop_list_all_ungraded_assessments($workshop) { if ($assessments = workshop_get_ungraded_assessments($workshop)) { foreach ($assessments as $assessment) { - if (!isteacher($workshop->course, $assessment->userid)) { + if (!workshop_is_teacher($workshop, $assessment->userid)) { if (($timenow - $assessment->timegraded) < $CFG->maxeditingtime) { $action = "id&aid=$assessment->id\">". get_string("edit", "workshop").""; @@ -1022,7 +1080,7 @@ function workshop_list_peer_assessments($workshop, $user) { 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 + if (workshop_is_student($workshop, $assessment->userid) and ($assessment->userid != $user->id)) { $timenow = time(); if (($timenow - $assessment->timecreated) > $CFG->maxeditingtime) { @@ -1041,7 +1099,7 @@ function workshop_list_peer_assessments($workshop, $user) { $comment .= "; ".get_string("thisisadroppedassessment", "workshop"); } } - if (isteacher($workshop->course, $assessment->userid) and $workshop->teacherweight) { + if (workshop_is_teacher($workshop, $assessment->userid) and $workshop->teacherweight) { $comment .= "; ".get_string("thisisadroppedassessment", "workshop"); } // if peer agreements show whether agreement has been reached @@ -1219,7 +1277,7 @@ function workshop_list_student_submissions($workshop, $user) { error ("workshop_list_student_submissions: unable to get submission"); } // submission from a student? - if (isstudent($workshop->course, $submission->userid)) { + if (workshop_is_student($workshop, $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 @@ -1271,7 +1329,7 @@ function workshop_list_submissions_for_admin($workshop, $order) { workshop_print_assignment_info($workshop); - if (isteacheredit($course->id)) { + if (workshop_is_teacheredit($workshop)) { // list any teacher submissions $table->head = array (get_string("title", "workshop"), get_string("submittedby", "workshop"), get_string("action", "workshop")); @@ -1309,7 +1367,7 @@ function workshop_list_submissions_for_admin($workshop, $order) { $action .= " | id&sid=$submission->id\">". get_string("listassessments", "workshop").""; } - if (isteacheredit($course->id)) { + if (workshop_is_teacheredit($workshop)) { $action .= " | id&sid=$submission->id\">". get_string("delete", "workshop").""; } @@ -1322,7 +1380,7 @@ function workshop_list_submissions_for_admin($workshop, $order) { // list student assessments // Get all the students... - if ($users = get_course_students($course->id, "u.lastname, u.firstname")) { + if ($users = workshop_get_students($workshop, "u.lastname, u.firstname")) { $timenow = time(); unset($table); $table->head = array(get_string("name"), get_string("title", "workshop"), get_string("action", "workshop")); @@ -1348,7 +1406,7 @@ function workshop_list_submissions_for_admin($workshop, $order) { } $title .= $submission->title; if ($workshop->agreeassessments and !$assessment->timeagreed and - isstudent($workshop->course, $submission->userid)) { // agreements for student work only + workshop_is_student($workshop, $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) { @@ -1519,7 +1577,7 @@ function workshop_list_teacher_assessments_by_user($workshop, $user) { // get the assessments if ($assessments = workshop_get_assessments($submission)) { foreach ($assessments as $assessment) { - if (isteacher($workshop->course, $assessment->userid)) { // assessments by teachers only + if (workshop_is_teacher($workshop, $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 @@ -1612,7 +1670,7 @@ function workshop_list_teacher_submissions($workshop, $user) { error ("workshop_list_teacher_submissions: unable to get submission"); } // submission from a teacher? - if (isteacher($workshop->course, $submission->userid)) { + if (workshop_is_teacher($workshop, $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 @@ -1789,7 +1847,7 @@ function workshop_list_ungraded_assessments($workshop, $stype) { } if ($assessments) { foreach ($assessments as $assessment) { - if (!isteacher($workshop->course, $assessment->userid)) { // don't let teacher grade their own assessments + if (!workshop_is_teacher($workshop, $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").""; @@ -1941,7 +1999,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges foreach ($comments as $comment) { echo "\n"; // if active and the teacher show stock comments... - if ($allowchanges and isteacher($course->id, $USER->id)) { + if ($allowchanges and workshop_is_teacher($workshop, $USER->id)) { echo "\n"; // if active and the teacher show stock comments... - if ($allowchanges and isteacher($course->id, $USER->id)) { + if ($allowchanges and workshop_is_teacher($workshop, $USER->id)) { echo "\n"; // if active and the teacher show stock comments... - if ($allowchanges and isteacher($course->id, $USER->id)) { + if ($allowchanges and workshop_is_teacher($workshop, $USER->id)) { echo "\n"; // if active and the teacher show stock comments... - if ($allowchanges and isteacher($course->id, $USER->id)) { + if ($allowchanges and workshop_is_teacher($workshop, $USER->id)) { echo "\n"; echo "\n"; // if active and the teacher show stock comments... - if ($allowchanges and isteacher($course->id, $USER->id)) { + if ($allowchanges and workshop_is_teacher($workshop, $USER->id)) { echo "

". get_string("commentby","workshop")." "; - if (isteacher($workshop->course, $comment->userid)) { + if (workshop_is_teacher($workshop, $comment->userid)) { echo $course->teacher; } elseif ($assessment->userid == $comment->userid) { @@ -1956,7 +2014,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges 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)) { + if (workshop_is_teacher($workshop, $USER->id) and ($comment->userid != $USER->id)) { echo "

id&aid=$assessment->id\">". get_string("reply", "workshop")."

\n"; } @@ -2002,7 +2060,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges \n"; echo "
"; - if ($assessment and isteacher($course->id)) { + if ($assessment and workshop_is_teacher($workshop)) { $user = get_record('user', 'id', $assessment->userid); print_string("assessmentby", "workshop", fullname($user)); } else { @@ -2077,7 +2135,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges echo "
comments)."';\"><<$stockcomment->comments>>\n"; - if (isteacheredit($course->id, $USER->id)) { + if (workshop_is_teacheredit($workshop, $USER->id)) { echo " id;document.assessmentform.submit();\"> <--".get_string("delete","workshop")."\n"; } echo "
\n"; @@ -2181,7 +2239,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges echo "
comments). "';\"><<$stockcomment->comments>>\n"; - if (isteacheredit($course->id, $USER->id)) { + if (workshop_is_teacheredit($workshop, $USER->id)) { echo " id;document.assessmentform.submit();\"> <--".get_string("delete","workshop")."\n"; } echo "
\n"; @@ -2286,7 +2344,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges echo "
comments). "';\"><<$stockcomment->comments>>\n"; - if (isteacheredit($course->id, $USER->id)) { + if (workshop_is_teacheredit($workshop, $USER->id)) { echo " id;document.assessmentform.submit();\"> <--".get_string("delete","workshop")."\n"; } echo "
\n"; @@ -2449,7 +2507,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges echo "
comments). "';\"><<$stockcomment->comments>>\n"; - if (isteacheredit($course->id, $USER->id)) { + if (workshop_is_teacheredit($workshop, $USER->id)) { echo " id;document.assessmentform.submit();\"> <--".get_string("delete","workshop")."\n"; } echo "
\n"; @@ -2510,7 +2568,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges echo " 
comments)."';\"><<$stockcomment->comments>>\n"; - if (isteacheredit($course->id, $USER->id)) { + if (workshop_is_teacheredit($workshop, $USER->id)) { echo " id;document.assessmentform.submit();\"> <--".get_string("delete","workshop")."\n"; } echo "
\n"; @@ -2662,7 +2720,7 @@ function workshop_print_assignment_info($workshop) { echo "(id&action=displaygradingform\">". get_string("specimenassessmentform", "workshop").""; // print edit icon - if (isteacheredit($course->id) and $workshop->nelements) { + if (workshop_is_teacheredit($workshop) and $workshop->nelements) { echo " id&action=editelements\">". "pixpath/t/edit.gif\" ". 'height="11" width="11" border="0" alt="'.get_string('amendassessmentelements', 'workshop').'" />'; @@ -2723,7 +2781,7 @@ function workshop_print_league_table($workshop) { } $nentries = $workshop->showleaguetable; - if ($workshop->anonymous and isstudent($course->id)) { + if ($workshop->anonymous and workshop_is_student($workshop)) { $table->head = array (get_string("title", "workshop"), get_string("teacherassessments", "workshop", $course->teacher), get_string("studentassessments", "workshop", $course->student), get_string("overallgrade", "workshop")); @@ -2760,7 +2818,7 @@ function workshop_print_league_table($workshop) { if (!$user = get_record("user", "id", $submission->userid)) { error("Print league table: user not found"); } - if ($workshop->anonymous and isstudent($course->id)) { + if ($workshop->anonymous and workshop_is_student($workshop)) { $table->data[] = array(workshop_print_submission_title($workshop, $submission), workshop_print_submission_assessments($workshop, $submission, "teacher"), workshop_print_submission_assessments($workshop, $submission, "student"), $grade); @@ -2822,22 +2880,24 @@ function workshop_print_submission($workshop, $submission) { 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 - + if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) { + error("Course Module ID was incorrect"); + } $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)) { + if (workshop_is_teacher($workshop, $USER->id) or ($timenow > $workshop->releasegrades)) { foreach ($assessments as $assessment) { - if (isteacher($workshop->course, $assessment->userid)) { + if (workshop_is_teacher($workshop, $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)) { + if (workshop_is_teacher($workshop, $USER->id)) { $str .= ' id&sid=$submission->id\">pixpath/t/edit.gif\" ". ' height="11" width="11" border="0" alt="'.get_string('reassess', 'workshop').'" />'; @@ -2851,13 +2911,13 @@ function workshop_print_submission_assessments($workshop, $submission, $type) { } if ($type == 'student' or $type == 'all') { foreach ($assessments as $assessment) { - if (isstudent($workshop->course, $assessment->userid)) { + if (workshop_is_student($workshop, $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 + workshop_is_student($workshop, $submission->userid)) { // agreement on student work only $str .= "<<".number_format($assessment->grade * $workshop->grade / 100, 0)." (". number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0). ")>> "; diff --git a/mod/workshop/submissions.php b/mod/workshop/submissions.php index fa806b9059..75606cca72 100644 --- a/mod/workshop/submissions.php +++ b/mod/workshop/submissions.php @@ -44,6 +44,8 @@ } require_login($course->id, false, $cm); + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + require_capability('mod/workshop:view', $context); $strworkshops = get_string("modulenameplural", "workshop"); $strworkshop = get_string("modulename", "workshop"); @@ -64,9 +66,7 @@ /******************* admin amend title ************************************/ elseif ($action == 'adminamendtitle' ) { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); if (empty($sid)) { error("Admin Amend Title: submission id missing"); } @@ -98,9 +98,7 @@ /******************* admin clear late (flag) ************************************/ elseif ($action == 'adminclearlate' ) { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); if (empty($sid)) { error("Admin clear late flag: submission id missing"); } @@ -141,7 +139,7 @@ } // students are only allowed to delete their own submission and only up to the deadline - if (!(isteacher($course->id) or + if (!(workshop_is_teacher($workshop) or (($USER->id = $submission->userid) and ($timenow < $workshop->submissionend) and (($timenow < $workshop->assessmentstart) or ($timenow < $submission->timecreated + $CFG->maxeditingtime))))) { error("You are not authorized to delete this submission"); @@ -171,9 +169,7 @@ /******************* admin (confirm) late flag ************************************/ elseif ($action == 'adminlateflag' ) { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); if (empty($sid)) { error("Admin confirm late flag: submission id missing"); } @@ -190,9 +186,7 @@ /******************* list all submissions ************************************/ elseif ($action == 'adminlist' ) { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); workshop_list_submissions_for_admin($workshop, $order); print_continue("view.php?id=$cm->id"); @@ -203,9 +197,7 @@ /******************* admin update title ************************************/ elseif ($action == 'adminupdatetitle' ) { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); if (empty($sid)) { error("Admin Update Title: submission id missing"); } @@ -306,7 +298,7 @@ /******************* list all submissions ************************************/ elseif ($action == 'listallsubmissions' ) { - if (!$users = get_course_students($course->id)) { + if (!$users = workshop_get_students($workshop)) { print_heading(get_string("nostudentsyet")); print_footer($course); exit; @@ -320,7 +312,7 @@ /******************* list for assessment student (submissions) ************************************/ elseif ($action == 'listforassessmentstudent' ) { - if (!$users = get_course_students($course->id)) { + if (!$users = workshop_get_students($workshop)) { print_heading(get_string("nostudentsyet")); print_footer($course); exit; @@ -334,9 +326,7 @@ /******************* list for assessment teacher (submissions) ************************************/ elseif ($action == 'listforassessmentteacher' ) { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); workshop_list_unassessed_teacher_submissions($workshop, $USER); print_continue("view.php?id=$cm->id"); @@ -356,7 +346,7 @@ $submission = get_record("workshop_submissions", "id", $form->sid); // students are only allowed to remove their own attachments and only up to the deadline - if (!(isteacher($course->id) or + if (!(workshop_is_teacher($workshop) or (($USER->id = $submission->userid) and ($timenow < $workshop->submissionend) and (($timenow < $workshop->assessmentstart) or ($timenow < $submission->timecreated + $CFG->maxeditingtime))))) { error("You are not authorized to delete these attachments"); @@ -387,7 +377,7 @@ $submission = get_record("workshop_submissions", "id", $sid); $title = '"'.$submission->title.'" '; - if (isteacher($course->id)) { + if (workshop_is_teacher($workshop)) { $title .= get_string('by', 'workshop').' '.workshop_fullname($submission->userid, $course->id); } print_heading($title); @@ -400,9 +390,7 @@ /*************** update (league table options teacher) ***************************/ elseif ($action == 'updateleaguetable') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); // save number of entries in showleaguetable option if ($nentries == 'All') { @@ -427,7 +415,7 @@ $submission = get_record("workshop_submissions", "id", $sid); // students are only allowed to update their own submission and only up to the deadline - if (!(isteacher($course->id) or + if (!(workshop_is_teacher($workshop) or (($USER->id = $submission->userid) and ($timenow < $workshop->submissionend) and (($timenow < $workshop->assessmentstart) or ($timenow < $submission->timecreated + $CFG->maxeditingtime))))) { error("You are not authorized to update your submission"); diff --git a/mod/workshop/upload.php b/mod/workshop/upload.php index a66e5b3747..17018b1805 100644 --- a/mod/workshop/upload.php +++ b/mod/workshop/upload.php @@ -18,6 +18,8 @@ } require_login($course->id, false, $cm); + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + require_capability('mod/workshop:view', $context); $strworkshops = get_string('modulenameplural', 'workshop'); $strworkshop = get_string('modulename', 'workshop'); @@ -38,7 +40,7 @@ // check that this is not a "rapid" second submission, caused by using the back button // only check if a student, teachers may want to submit a set of workshop examples rapidly - if (isstudent($course->id)) { + if (workshop_is_student($workshop)) { if ($submissions = workshop_get_user_submissions($workshop, $USER)) { // returns all submissions, newest on first foreach ($submissions as $submission) { diff --git a/mod/workshop/version.php b/mod/workshop/version.php index 1e54d56e09..54a4e0bf6c 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 = 2006080900; +$module->version = 2006090500; $module->requires = 2006080900; // Requires this Moodle version $module->cron = 60; diff --git a/mod/workshop/view.php b/mod/workshop/view.php index a5acc0514d..3a83caaa8a 100644 --- a/mod/workshop/view.php +++ b/mod/workshop/view.php @@ -21,7 +21,6 @@ $action = optional_param('action', '', PARAM_ALPHA); $sort = optional_param('sort', 'lastname', PARAM_ALPHA); $dir = optional_param('dir', 'ASC', PARAM_ALPHA); - $group = optional_param('group', -1, PARAM_INT); $timenow = time(); @@ -37,20 +36,15 @@ } require_login($course->id, false, $cm); + $context = get_context_instance(CONTEXT_MODULE, $cm->id); + require_capability('mod/workshop:view', $context); $strworkshops = get_string("modulenameplural", "workshop"); $strworkshop = get_string("modulename", "workshop"); $straction = ($action) ? '-> '.get_string($action, 'workshop') : ''; - // ...display header... - print_header_simple(format_string($workshop->name), "", - "id\">$strworkshops -> - id\">".format_string($workshop->name,true)." $straction", - "", "", true, update_module_button($cm->id, $course->id, $strworkshop), navmenu($course, $cm)); - // ...and if necessary set default action - - if (isteacher($course->id)) { + if (workshop_is_teacher($workshop)) { if (empty($action)) { // no action specified, either go straight to elements page else the admin page // has the assignment any elements if (count_records("workshop_elements", "workshopid", $workshop->id) >= $workshop->nelements) { @@ -60,8 +54,7 @@ redirect("assessments.php?action=editelements&id=$cm->id"); } } - } - elseif (!isguest()) { // it's a student then + } else { // it's a student then if (!$cm->visible) { notice(get_string("activityiscurrentlyhidden")); } @@ -75,15 +68,24 @@ } } } - else { // it's a guest, oh no! - $action = 'notavailable'; - } + + // ...display header... + print_header_simple(format_string($workshop->name), "", + "id\">$strworkshops -> + id\">".format_string($workshop->name,true)." $straction", + "", "", true, update_module_button($cm->id, $course->id, $strworkshop), navmenu($course, $cm)); + // ...log activity... add_to_log($course->id, "workshop", "view", "view.php?id=$cm->id", $workshop->id, $cm->id); + if ($action == 'studentsview' and !workshop_is_student($workshop)) { + $action = 'showdescription'; + } + /****************** display final grade (for students) ************************************/ if ($action == 'displayfinalgrade' ) { + require_capability('mod/workshop:participate', $context); print_heading("id&action=showdescription\">". get_string("showdescription", 'workshop').""); @@ -136,9 +138,10 @@ print_heading(get_string("notavailable", "workshop")); } - /****************** student's view could be in 1 of 4 stages ***********************/ elseif ($action == 'studentsview') { + require_capability('mod/workshop:participate', $context); + // is a password needed? if ($workshop->usepassword) { $correctpass = false; @@ -273,9 +276,7 @@ /****************** submission of example by teacher only***********************/ elseif ($action == 'submitexample') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); // list previous submissions from teacher workshop_list_user_submissions($workshop, $USER); @@ -293,9 +294,7 @@ /****************** teacher's view - display admin page ************/ elseif ($action == 'teachersview') { - if (!isteacher($course->id)) { - error("Only teachers can look at this page"); - } + require_capability('mod/workshop:manage', $context); // automatically grade assessments if workshop has examples and/or peer assessments if ($workshop->gradingstrategy and ($workshop->ntassessments or $workshop->nsassessments)) { @@ -303,23 +302,9 @@ } /// Check to see if groups are being used in this workshop - /// and if so, set $currentgroup to reflect the current group - // $changegroup = isset($_GET['_param('group',0,PARAM_INT);group']) ? $_GET['group'] : -1; // Group change requested? - $changegroup = $group; - $groupmode = groupmode($course, $cm); // Groups are being used? - $currentgroup = get_and_set_current_group($course, $groupmode, $changegroup); - - /// Print settings and things in a table across the top - echo ''; - - /// Allow the teacher to change groups (for this session) - if ($groupmode and isteacheredit($course->id)) { - if ($groups = get_records_menu("groups", "courseid", $course->id, "name ASC", "id,name")) { - echo ''; - } - } + setup_and_print_groups($course, groupmode($course, $cm), "view.php?id=$cm->id"); + $currentgroup = get_current_group($course->id); + /// Print admin links echo "
'; - print_group_menu($groups, $groupmode, $currentgroup, "view.php?id=$cm->id"); - echo '"; echo "id&action=adminlist\">". @@ -370,7 +355,7 @@ } // Get all the students - if (!$users = get_course_students($course->id, "u.lastname, u.firstname")) { + if (!$users = workshop_get_students($workshop)) { print_heading(get_string("nostudentsyet")); print_footer($course); exit; @@ -540,15 +525,21 @@ /****************** show description ************/ elseif ($action == 'showdescription') { + require_capability('mod/workshop:view', $context); workshop_print_assignment_info($workshop); print_simple_box(format_text($workshop->description, $workshop->format), 'center', '70%', '', 5, 'generalbox', 'intro'); - print_continue($_SERVER["HTTP_REFERER"]); + if (isset($_SERVER["HTTP_REFERER"])) { + print_continue($_SERVER["HTTP_REFERER"]); + } else { + print_continue("$CFG->wwwroot/course/view.php?id=$cm->id"); + } } /****************** teacher's view - list all submissions ************/ elseif ($action == 'allsubmissions') { + require_capability('mod/workshop:manage', $context); if ($submissions = get_records('workshop_submissions', 'workshopid', $workshop->id)) { foreach($submissions as $submission) { diff --git a/mod/workshop/viewassessment.php b/mod/workshop/viewassessment.php index c3db61625d..f840c2ed00 100644 --- a/mod/workshop/viewassessment.php +++ b/mod/workshop/viewassessment.php @@ -68,7 +68,7 @@ // show assessment but don't allow changes workshop_print_assessment($workshop, $assessment, false, $allowcomments); - if (isteacher($course->id) and !isteacher($course->id, $assessment->userid)) { + if (workshop_is_teacher($workshop) and !workshop_is_teacher($workshop, $assessment->userid)) { print_heading_with_help(get_string("gradeassessment", "workshop"), "gradingassessments", "workshop"); include('assessment_grading_form.html'); } @@ -81,7 +81,7 @@ print_header('', '', '', '', ''); $title = '"'.$submission->title.'" '; - if (isteacher($course->id)) { + if (workshop_is_teacher($workshop)) { $title .= ' '.get_string('by', 'workshop').' '.workshop_fullname($submission->userid, $course->id); } print_heading($title);