]> git.mjollnir.org Git - moodle.git/commitdiff
initial conversion of workshop to new roles and capabilities framework; groups are...
authorskodak <skodak>
Wed, 6 Sep 2006 08:41:47 +0000 (08:41 +0000)
committerskodak <skodak>
Wed, 6 Sep 2006 08:41:47 +0000 (08:41 +0000)
16 files changed:
mod/workshop/assess.php
mod/workshop/assessments.php
mod/workshop/db/access.php [new file with mode: 0644]
mod/workshop/db/install.xml
mod/workshop/db/mysql.php
mod/workshop/db/mysql.sql
mod/workshop/db/postgres7.php
mod/workshop/db/postgres7.sql
mod/workshop/index.php
mod/workshop/lib.php
mod/workshop/locallib.php
mod/workshop/submissions.php
mod/workshop/upload.php
mod/workshop/version.php
mod/workshop/view.php
mod/workshop/viewassessment.php

index 32a90d6b068093333b5460eea4eec212fdf0219b..062f712d16a0118cdb99c4e3fd09ac8fca3e29fe 100644 (file)
         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;
 
     print_header('', '', '', '', '<base target="_parent" />');
     $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 '<br /><center><b>'.get_string('assessments', 'workshop').': </b><br />';
         echo workshop_print_submission_assessments($workshop, $submission, "all");
         echo '</center>';
index 7435c91fb70c7344b209cf70b53d995453593639..5074ee85d28894a3fa6efb0491519b23249fb17a 100644 (file)
@@ -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) {
             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");
     /*********************** 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");
     /*********************** 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");
     /*********************** 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) {
     /*************** 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);
     /*************** 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
     /*********************** 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();
 
     /*********************** 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");
         }
     /*********************** 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");
         }
     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) {
             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");
             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);
             } 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);
     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 (file)
index 0000000..5e9337c
--- /dev/null
@@ -0,0 +1,50 @@
+<?php // $Id$
+/**
+ * Capability definitions for the workshop module.
+ * 
+ * For naming conventions, see lib/db/access.php.
+ */
+$mod_workshop_capabilities = array(
+
+    'mod/workshop:view' => 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
index 232710e9acb9f4a2219de2cc46b5195f3173ddb2..9d1c3d8f63c6c4f113aa685795a7f63fff4213f0 100644 (file)
@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="mod/workshop/db" VERSION="20060812" COMMENT="XMLDB file for Moodle mod/workshop">
+<XMLDB PATH="mod/workshop/db" VERSION="20060905" COMMENT="XMLDB file for Moodle mod/workshop"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
+>
   <TABLES>
     <TABLE NAME="workshop" COMMENT="Defines workshop" NEXT="workshop_elements">
       <FIELDS>
@@ -82,8 +85,9 @@
         <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="title" NEXT="mailed"/>
         <FIELD NAME="mailed" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="timecreated" NEXT="description"/>
         <FIELD NAME="description" TYPE="text" LENGTH="small" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="mailed" NEXT="gradinggrade"/>
-        <FIELD NAME="gradinggrade" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="description" NEXT="finalgrade"/>
-        <FIELD NAME="finalgrade" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="gradinggrade" NEXT="late"/>
+        <FIELD NAME="gradinggrade" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="description" NEXT="teachergraded"/>
+        <FIELD NAME="teachergraded" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" COMMENT="This field was only in upgrade, but not in install file, grrr." PREVIOUS="gradinggrade" NEXT="finalgrade"/>
+        <FIELD NAME="finalgrade" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="teachergraded" NEXT="late"/>
         <FIELD NAME="late" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="finalgrade" NEXT="nassessments"/>
         <FIELD NAME="nassessments" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="late"/>
       </FIELDS>
index c6cf1a4285333d5a0c0a1e78a4e53f1e7f087f85..d53ff1963a3c66cfffcde1cdbe83206a7540f95d 100644 (file)
@@ -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;
 }
 
index 25e7bbae0beb02103881413e4391c6652b6401f5..51c63867dc35e0cb424142aa3762efdcf13a1d46 100644 (file)
@@ -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',
index 8f8cd67471b772257e333e26f2501fa49ab78ad1..3aa26808f8c0a36a18bb1199e9de9596f63157c8 100644 (file)
@@ -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;
 
 }
index 2949af37c3c5bfdead0fef374847bd5552e0668e..045fe6f63263cec32b7c8bbfdaebef97d5b93a64 100644 (file)
@@ -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',
index 82f72dbd897cd705267de4f3f3adabd63c08fab3..3a04f3e566c786916c3758b4428227d158d704d2 100644 (file)
@@ -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");
     $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 = "<a href=\"view.php?id=$workshop->coursemodule\">".format_string($workshop->name,true)."</a><br />";
                 }
-                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);
                 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;
                 }
                 //Show normal if the mod is visible
                 $link = "<a href=\"view.php?id=$workshop->coursemodule\">".format_string($workshop->name,true)."</a>";
             }
-            if (isstudent($course->id)) {
+            if (workshop_is_student($workshop)) {
                 $info = '0';
             }
             if ($course->format == "weeks" or $course->format == "topics") {
index 7b3eb5c5bd65b48e472bc1e4960ccfe2dab9156b..04d13b02290419db742217e8d4ea000326a121ed 100644 (file)
@@ -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
index 7a8ba00c4e748eb670cdbdc0e4cf075d1dbe40d2..5a5a9bf683c6a634eb07b06e94c894d906df73d8 100644 (file)
@@ -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 = "<a href=\"viewassessment.php?&amp;id=$cm->id&amp;aid=$assessment->id\">".
                         get_string("edit", "workshop")."</a>";
@@ -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 .= " | <a href=\"assessments.php?action=adminlist&amp;id=$cm->id&amp;sid=$submission->id\">".
                         get_string("listassessments", "workshop")."</a>";
                 }
-                if (isteacheredit($course->id)) {
+                if (workshop_is_teacheredit($workshop)) {
                     $action .= " | <a href=\"submissions.php?action=confirmdelete&amp;id=$cm->id&amp;sid=$submission->id\">".
                         get_string("delete", "workshop")."</a>";
                 }
@@ -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 .= " &lt;&lt;".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
                             number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).")&gt;&gt; ";
                     } 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 = "<a href=\"viewassessment.php?id=$cm->id&amp;aid=$assessment->id\">".
                             get_string("view", "workshop")."</a>";
                         // 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 = "<a href=\"viewassessment.php?&amp;id=$cm->id&amp;stype=$stype&amp;aid=$assessment->id\">".
                         get_string("edit", "workshop")."</a>";
@@ -1941,7 +1999,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
             foreach ($comments as $comment) {
                 echo "<tr valign=\"top\"><td class=\"workshopassessmentheading\"><p><b>".
                     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 "<p align=\"right\"><a href=\"assessments.php?action=addcomment&amp;id=$cm->id&amp;aid=$assessment->id\">".
                             get_string("reply", "workshop")."</a></p>\n";
                     }
@@ -2002,7 +2060,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
     <?php
     echo "<tr valign=\"top\">\n";
     echo "  <td colspan=\"2\" class=\"workshopassessmentheading\"><center><b>";
-    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 "</tr>\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 "<tr><td valign=\"top\" align=\"right\"><input type=\"button\" value=\"".
                         get_string("addcomment", "workshop")."\" 
                         onclick=\"document.assessmentform.action.value='addstockcomment';
@@ -2089,7 +2147,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
                         foreach ($stockcomments as $stockcomment) {
                             echo "<a onclick=\"document.assessmentform.feedback_$i.value+=' '+'".
                                 addslashes($stockcomment->comments)."';\">&lt;&lt;$stockcomment->comments&gt;&gt;</a>\n";
-                            if (isteacheredit($course->id, $USER->id)) {
+                            if (workshop_is_teacheredit($workshop, $USER->id)) {
                                 echo " <a onclick=\"document.assessmentform.action.value='removestockcomment';document.assessmentform.stockcommentid.value=$stockcomment->id;document.assessmentform.submit();\"> <small><i>&lt;--".get_string("delete","workshop")."</i></small></a>\n";
                             }
                             echo "<br />\n";
@@ -2181,7 +2239,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
                 echo "</tr>\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 "<tr><td valign=\"top\" align=\"right\"><input type=\"button\" value=\"".
                         get_string("addcomment", "workshop")."\" 
                         onclick=\"document.assessmentform.action.value='addstockcomment';
@@ -2194,7 +2252,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
                             echo "<a onclick=\"document.assessmentform.feedback_$i.value+=' '+'".
                                 addslashes($stockcomment->comments).
                                 "';\">&lt;&lt;$stockcomment->comments&gt;&gt;</a>\n";
-                            if (isteacheredit($course->id, $USER->id)) {
+                            if (workshop_is_teacheredit($workshop, $USER->id)) {
                                 echo " <a onclick=\"document.assessmentform.action.value='removestockcomment';document.assessmentform.stockcommentid.value=$stockcomment->id;document.assessmentform.submit();\"> <small><i>&lt;--".get_string("delete","workshop")."</i></small></a>\n";
                             }
                             echo "<br />\n";
@@ -2286,7 +2344,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
                 echo "</tr>\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 "<tr><td valign=\"top\" align=\"right\"><input type=\"button\" value=\"".
                         get_string("addcomment", "workshop")."\" 
                         onclick=\"document.assessmentform.action.value='addstockcomment';
@@ -2299,7 +2357,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
                             echo "<a onclick=\"document.assessmentform.feedback_$i.value+=' '+'".
                                 addslashes($stockcomment->comments).
                                 "';\">&lt;&lt;$stockcomment->comments&gt;&gt;</a>\n";
-                            if (isteacheredit($course->id, $USER->id)) {
+                            if (workshop_is_teacheredit($workshop, $USER->id)) {
                                 echo " <a onclick=\"document.assessmentform.action.value='removestockcomment';document.assessmentform.stockcommentid.value=$stockcomment->id;document.assessmentform.submit();\"> <small><i>&lt;--".get_string("delete","workshop")."</i></small></a>\n";
                             }
                             echo "<br />\n";
@@ -2449,7 +2507,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
                     echo "</tr>\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 "<tr><td valign=\"top\" align=\"right\"><input type=\"button\" value=\"".
                         get_string("addcomment", "workshop")."\" 
                         onclick=\"document.assessmentform.action.value='addstockcomment';
@@ -2462,7 +2520,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
                                 echo "<a onclick=\"document.assessmentform.feedback_$i.value+=' '+'".
                                     addslashes($stockcomment->comments).
                                     "';\">&lt;&lt;$stockcomment->comments&gt;&gt;</a>\n";
-                                if (isteacheredit($course->id, $USER->id)) {
+                                if (workshop_is_teacheredit($workshop, $USER->id)) {
                                     echo " <a onclick=\"document.assessmentform.action.value='removestockcomment';document.assessmentform.stockcommentid.value=$stockcomment->id;document.assessmentform.submit();\"> <small><i>&lt;--".get_string("delete","workshop")."</i></small></a>\n";
                                 }
                                 echo "<br />\n";
@@ -2510,7 +2568,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
     echo "&nbsp;</td>\n";
     echo "</tr>\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 "<tr><td valign=\"top\" align=\"right\"><input type=\"button\" value=\"".
             get_string("addcomment", "workshop")."\" 
             onclick=\"document.assessmentform.action.value='addstockcomment';
@@ -2522,7 +2580,7 @@ function workshop_print_assessment($workshop, $assessment = false, $allowchanges
             foreach ($stockcomments as $stockcomment) {
                 echo "<a onclick=\"document.assessmentform.generalcomment.value+=' '+'".
                     addslashes($stockcomment->comments)."';\">&lt;&lt;$stockcomment->comments&gt;&gt;</a>\n";
-                if (isteacheredit($course->id, $USER->id)) {
+                if (workshop_is_teacheredit($workshop, $USER->id)) {
                     echo " <a onclick=\"document.assessmentform.action.value='removestockcomment';document.assessmentform.stockcommentid.value=$stockcomment->id;document.assessmentform.submit();\"> <small><i>&lt;--".get_string("delete","workshop")."</i></small></a>\n";
                 }
                 echo "<br />\n";
@@ -2662,7 +2720,7 @@ function workshop_print_assignment_info($workshop) {
     echo "(<a href=\"assessments.php?id=$cm->id&amp;action=displaygradingform\">".
         get_string("specimenassessmentform", "workshop")."</a>";
     // print edit icon
-    if (isteacheredit($course->id) and $workshop->nelements) {
+    if (workshop_is_teacheredit($workshop) and $workshop->nelements) {
         echo " <a href=\"assessments.php?id=$cm->id&amp;action=editelements\">".
              "<img src=\"$CFG->pixpath/t/edit.gif\" ".
              'height="11" width="11" border="0" alt="'.get_string('amendassessmentelements', 'workshop').'" /></a>';
@@ -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 .= "<a href=\"viewassessment.php?aid=$assessment->id\">"
                              . "[".number_format($assessment->grade *$workshop->grade / 100, 0)."]</a>";
-                        if (isteacher($workshop->course, $USER->id)) {
+                        if (workshop_is_teacher($workshop, $USER->id)) {
                             $str .= ' <a title="'.get_string('reassess', 'workshop').
                                 "\" href=\"assess.php?id=$cm->id&amp;sid=$submission->id\"><img src=\"$CFG->pixpath/t/edit.gif\" ".
                                 ' height="11" width="11" border="0" alt="'.get_string('reassess', 'workshop').'" /></a>';
@@ -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 .= "<a href=\"viewassessment.php?aid=$assessment->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 .= "&lt;&lt;".number_format($assessment->grade * $workshop->grade / 100, 0)." (".
                             number_format($assessment->gradinggrade * $workshop->gradinggrade / 100, 0).
                             ")&gt;&gt;</a> ";
index fa806b90599a58ae03d40d7af387d146315f40d2..75606cca7253bb157e2343ee71b7e69ed231df10 100644 (file)
@@ -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");
         }
         }
 
         // 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");
     /******************* 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");
         }
     /******************* 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");
     /******************* 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");
         }
 
     /******************* 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;
 
     /******************* 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;
     /******************* 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");
         $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");
 
         $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);
     /*************** 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') {
         $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");
index a66e5b37471ed63c0990992654eaf43ed6b2724b..17018b1805f86484d01f0e7e576308ba90f6c42d 100644 (file)
@@ -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) {
index 1e54d56e09ae0d82770352ceaf1f42a1737581a4..54a4e0bf6c36ad536afbe254e9b5b14f0acf3faa 100644 (file)
@@ -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;
 
index a5acc0514d347ca51ba32a707f56df3372ac1734..3a83caaa8a173e5bf36e846db28a590736cc9c8d 100644 (file)
@@ -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();
 
     }
 
     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), "",
-                 "<a href=\"index.php?id=$course->id\">$strworkshops</a> ->
-                  <a href=\"view.php?id=$cm->id\">".format_string($workshop->name,true)."</a> $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"));
         }
             }
         }
     }
-    else { // it's a guest, oh no!
-        $action = 'notavailable';
-    }
+
+    // ...display header...
+    print_header_simple(format_string($workshop->name), "",
+                 "<a href=\"index.php?id=$course->id\">$strworkshops</a> ->
+                  <a href=\"view.php?id=$cm->id\">".format_string($workshop->name,true)."</a> $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("<b><a href=\"view.php?id=$cm->id&amp;action=showdescription\">".
                 get_string("showdescription", 'workshop')."</a></b>");
         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;
     /****************** 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);
     /****************** 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)) {
         }
 
         /// 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 '<table width="100%" border="0" cellpadding="3" cellspacing="0"><tr valign="top">';
-
-        /// 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 '<td>';
-                print_group_menu($groups, $groupmode, $currentgroup, "view.php?id=$cm->id");
-                echo '</td>';
-            }
-        }
+        setup_and_print_groups($course, groupmode($course, $cm), "view.php?id=$cm->id");
+        $currentgroup = get_current_group($course->id);
+
         /// Print admin links
         echo "<td align=\"right\">";
         echo "<a href=\"submissions.php?id=$cm->id&amp;action=adminlist\">".
         }
 
         // 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;
 
     /****************** 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) {
index c3db61625d4d5a3995098680676ec42409ab0d04..f840c2ed00bd5a11f27036c47a604c9ae9f6c5d8 100644 (file)
@@ -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('', '', '', '', '<base target="_parent" />');
     $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);