? dif.diff
Index: index.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/exercise/index.php,v
retrieving revision 1.18
diff -c -r1.18 index.php
*** index.php	29 Oct 2007 10:44:50 -0000	1.18
--- index.php	1 Apr 2008 02:54:26 -0000
***************
*** 36,51 ****
      }
  
      $timenow = time();
  
      if ($course->format == "weeks") {
!         if (isteacher($course->id)) {
              $table->head  = array ($strweek, $strname, $strtitle, $strphase, $strsubmitted, $strdeadline);
          } else {
              $table->head  = array ($strweek, $strname, $strtitle, $strgrade, $strsubmitted, $strdeadline);
          }
          $table->align = array ("center", "left", "left","center","left", "left");
      } else if ($course->format == "topics") {
!         if (isteacher($course->id)) {
              $table->head  = array ($strtopic, $strname, $strtitle, $strphase, $strsubmitted, $strdeadline);
          } else {
              $table->head  = array ($strtopic, $strname, $strtitle, $strgrade, $strsubmitted, $strdeadline);
--- 36,53 ----
      }
  
      $timenow = time();
+     $context = get_context_instance(CONTEXT_MODULE, $course->id);
+     $canassess = has_capability('mod/exercise:assess', $context);
  
      if ($course->format == "weeks") {
!         if ($canassess) {
              $table->head  = array ($strweek, $strname, $strtitle, $strphase, $strsubmitted, $strdeadline);
          } else {
              $table->head  = array ($strweek, $strname, $strtitle, $strgrade, $strsubmitted, $strdeadline);
          }
          $table->align = array ("center", "left", "left","center","left", "left");
      } else if ($course->format == "topics") {
!         if ($canassess) {
              $table->head  = array ($strtopic, $strname, $strtitle, $strphase, $strsubmitted, $strdeadline);
          } else {
              $table->head  = array ($strtopic, $strname, $strtitle, $strgrade, $strsubmitted, $strdeadline);
***************
*** 73,79 ****
                  $link = "<a href=\"view.php?id=$exercise->coursemodule\">".format_string($exercise->name,true)."</a>";
                  $title = $submission->title;
                  if ($course->format == "weeks" or $course->format == "topics") {
!                     if (isteacher($course->id)) {
                          $phase = '';
                          switch ($exercise->phase) {
                              case 0:
--- 75,81 ----
                  $link = "<a href=\"view.php?id=$exercise->coursemodule\">".format_string($exercise->name,true)."</a>";
                  $title = $submission->title;
                  if ($course->format == "weeks" or $course->format == "topics") {
!                     if ($canassess) {
                          $phase = '';
                          switch ($exercise->phase) {
                              case 0:
***************
*** 125,131 ****
              $title = '';
              $link = "<a href=\"view.php?id=$exercise->coursemodule\">".format_string($exercise->name,true)."</a>";
              if ($course->format == "weeks" or $course->format == "topics") {
!                 if (isteacher($course->id)) {
                      $table->data[] = array ($exercise->section, $link, $title, $exercise->phase, 
                              $submitted, $due);
                  } else {
--- 127,133 ----
              $title = '';
              $link = "<a href=\"view.php?id=$exercise->coursemodule\">".format_string($exercise->name,true)."</a>";
              if ($course->format == "weeks" or $course->format == "topics") {
!                 if ($canassess) {
                      $table->data[] = array ($exercise->section, $link, $title, $exercise->phase, 
                              $submitted, $due);
                  } else {
Index: lib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/exercise/lib.php,v
retrieving revision 1.50
diff -c -r1.50 lib.php
*** lib.php	8 Mar 2008 12:58:05 -0000	1.50
--- lib.php	1 Apr 2008 02:54:30 -0000
***************
*** 42,48 ****
  function exercise_cron ()
  function exercise_delete_instance($id)
  function exercise_grades($exerciseid)
! function exercise_print_recent_activity(&$logs, $isteacher=false)
  function exercise_update_instance($exercise)
  function exercise_user_outline($course, $user, $mod, $exercise)
  function exercise_user_complete($course, $user, $mod, $exercise)
--- 42,48 ----
  function exercise_cron ()
  function exercise_delete_instance($id)
  function exercise_grades($exerciseid)
! function exercise_print_recent_activity(&$logs, $canassess=false)
  function exercise_update_instance($exercise)
  function exercise_user_outline($course, $user, $mod, $exercise)
  function exercise_user_complete($course, $user, $mod, $exercise)
***************
*** 178,192 ****
                  echo "Could not find user $assessment->userid\n";
                  continue;
              }
!             if (! isstudent($course->id, $submissionowner->id) and !isteacher($course->id, $submissionowner->id)) {
                  continue;  // Not an active participant
              }
!             if (! isstudent($course->id, $assessmentowner->id) and !isteacher($course->id, $assessmentowner->id)) {
                  continue;  // Not an active participant
              }
- 
              // if the submission belongs to a teacher it's a student assessment. No need to email anything.
!             if (isteacher($course->id, $submissionowner->id)) {
                  continue;
              }
  
--- 178,199 ----
                  echo "Could not find user $assessment->userid\n";
                  continue;
              }
! 
!             $context = get_context_instance(CONTEXT_MODULE, $course->id);
!             $canassess= has_capability('mod/exercise:assess', $context, $submissionower->id);
!             $canattempt = has_capability('mod/exercise:attempt', $context, $submissionower->id);
! 
!             $canassess2   = has_capability('mod/exercise:assess', $context, $assessmentowner->id);
!             $canattempt2 = has_capability('mod/exercise:attempt', $context, $assessmentowner->id);
! 
!             if (! $canattempt and ! $canassess) {
                  continue;  // Not an active participant
              }
!             if (! $canattempt2 and ! $canassess2) {
                  continue;  // Not an active participant
              }
              // if the submission belongs to a teacher it's a student assessment. No need to email anything.
!             if ($canassess) {
                  continue;
              }
  
***************
*** 329,341 ****
  function exercise_print_recent_activity($course, $viewfullanmes, $timestart) {
      global $CFG;
  
!     $isteacher = has_capability('mod/exercise:assess', get_context_instance(CONTEXT_COURSE, $course->id));
  
      $modinfo = get_fast_modinfo($course);
  
      // have a look for new submissions (only show to teachers)
      $submitcontent = false;
!     if ($isteacher) {
          if ($logs = exercise_get_submit_logs($course, $timestart)) {
              // if we got some 'live' ones then output them
              $submitcontent = true;
--- 336,348 ----
  function exercise_print_recent_activity($course, $viewfullanmes, $timestart) {
      global $CFG;
  
!     $canassess = has_capability('mod/exercise:assess', get_context_instance(CONTEXT_COURSE, $course->id));
  
      $modinfo = get_fast_modinfo($course);
  
      // have a look for new submissions (only show to teachers)
      $submitcontent = false;
!     if ($canassess) {
          if ($logs = exercise_get_submit_logs($course, $timestart)) {
              // if we got some 'live' ones then output them
              $submitcontent = true;
***************
*** 371,377 ****
  
      // have a look for new assessments for this user
      $assesscontent = false;
!     if (!$isteacher) { // teachers only need to see submissions
          if ($logs = exercise_get_assess_logs($course, $timestart)) {
              // got some, see if any belong to a visible module
              foreach ($logs as $id=>$log) {
--- 378,384 ----
  
      // have a look for new assessments for this user
      $assesscontent = false;
!     if (!$canasses) { // teachers only need to see submissions
          if ($logs = exercise_get_assess_logs($course, $timestart)) {
              // got some, see if any belong to a visible module
              foreach ($logs as $id=>$log) {
***************
*** 708,720 ****
      // teachers submit "exercises"
      if (! $course = get_record("course", "id", $exercise->course)) {
          error("Course is misconfigured");
!         }
!     if (isteacher($course->id, $user->id)) {
          return get_records_select("exercise_submissions",
               "exerciseid = $exercise->id AND isexercise = 1", "timecreated" );
!         }
!     return get_records_select("exercise_submissions",
               "exerciseid = $exercise->id AND userid = $user->id", "timecreated" );
  }
  
  
--- 715,730 ----
      // teachers submit "exercises"
      if (! $course = get_record("course", "id", $exercise->course)) {
          error("Course is misconfigured");
!     }
!     $context = get_context_instance(CONTEXT_MODULE, $course->id);
!     $canassess   = has_capability('mod/exercise:assess', $context, $user->id);
!     if ($canassess) {
          return get_records_select("exercise_submissions",
               "exerciseid = $exercise->id AND isexercise = 1", "timecreated" );
!     }else{
!         return get_records_select("exercise_submissions",
               "exerciseid = $exercise->id AND userid = $user->id", "timecreated" );
+     }
  }
  
  
Index: locallib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/exercise/locallib.php,v
retrieving revision 1.30
diff -c -r1.30 locallib.php
*** locallib.php	6 Mar 2008 09:42:33 -0000	1.30
--- locallib.php	1 Apr 2008 02:54:36 -0000
***************
*** 260,266 ****
              if ($assessments = exercise_get_assessments($submission)) {
                  foreach ($assessments as $assessment) {
                      // count only teacher assessments
!                     if (isteacher($exercise->course, $assessment->userid)) {
                          $n++;
                          }
                      }
--- 260,268 ----
              if ($assessments = exercise_get_assessments($submission)) {
                  foreach ($assessments as $assessment) {
                      // count only teacher assessments
!                     $context = get_context_instance(CONTEXT_MODULE, $exercise->course);
!                     $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!                     if ($canassess) {
                          $n++;
                          }
                      }
***************
*** 310,318 ****
              if ($submission->timecreated < $timenow - $CFG->maxeditingtime) {
                  $teacherassessed = false;
                  if ($assessments = exercise_get_assessments($submission)) {
                      foreach ($assessments as $assessment) {
                          // exercise_get_assessments only returns "cold" assessments, look for one made by a teacher
!                         if (isteacher($course->id, $assessment->userid)) {
                              $teacherassessed = true;
                              break; // no need to look further
                          }
--- 312,322 ----
              if ($submission->timecreated < $timenow - $CFG->maxeditingtime) {
                  $teacherassessed = false;
                  if ($assessments = exercise_get_assessments($submission)) {
+                     $context = get_context_instance(CONTEXT_MODULE, $course->id);
                      foreach ($assessments as $assessment) {
                          // exercise_get_assessments only returns "cold" assessments, look for one made by a teacher
!                         $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!                         if ($canassess) {
                              $teacherassessed = true;
                              break; // no need to look further
                          }
***************
*** 334,345 ****
      
      $n = 0;
      if ($submissions = exercise_get_student_submissions($exercise, $groupid)) {
          foreach ($submissions as $submission) {
              if ($assessments = exercise_get_assessments($submission)) {
                  foreach ($assessments as $assessment) {
                      if ($assessment->timegraded == 0) {
                          // ignore teacher assessments
!                         if (!isteacher($exercise->course, $assessment->userid)) {
                              $n++;
                              }
                          }
--- 338,351 ----
      
      $n = 0;
      if ($submissions = exercise_get_student_submissions($exercise, $groupid)) {
+         $context = get_context_instance(CONTEXT_MODULE, $exercise->course);
          foreach ($submissions as $submission) {
              if ($assessments = exercise_get_assessments($submission)) {
                  foreach ($assessments as $assessment) {
                      if ($assessment->timegraded == 0) {
                          // ignore teacher assessments
!                         $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!                         if (!$canassess) {
                              $n++;
                              }
                          }
***************
*** 358,370 ****
  
      $timenow = time();
      $n = 0;
      if ($submissions = exercise_get_teacher_submissions($exercise)) {
          foreach ($submissions as $submission) {
              if ($assessments = exercise_get_assessments($submission)) {
                  foreach ($assessments as $assessment) {
                      if ($assessment->timegraded == 0) {
                          // ignore teacher assessments
!                         if (!isteacher($exercise->course, $assessment->userid)) {
                              // must have created a little time ago
                              if (($timenow - $assessment->timecreated) > $CFG->maxeditingtime) {
                                  $n++;
--- 364,378 ----
  
      $timenow = time();
      $n = 0;
+     $context = get_context_instance(CONTEXT_MODULE, $exercise->course);
      if ($submissions = exercise_get_teacher_submissions($exercise)) {
          foreach ($submissions as $submission) {
              if ($assessments = exercise_get_assessments($submission)) {
                  foreach ($assessments as $assessment) {
                      if ($assessment->timegraded == 0) {
+                         $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
                          // ignore teacher assessments
!                         if (!$canassess) {
                              // must have created a little time ago
                              if (($timenow - $assessment->timecreated) > $CFG->maxeditingtime) {
                                  $n++;
***************
*** 387,392 ****
--- 395,401 ----
      // been done are counted as well
      
      $n = 0;
+     $context = get_context_instance(CONTEXT_MODULE, $exercise->course);
      if ($assessments = exercise_get_user_assessments($exercise, $user)) {
           foreach ($assessments as $assessment) {
              switch ($stype) {
***************
*** 394,407 ****
                      $n++;
                      break;
                  case "student" :
!                      $submission = get_record("exercise_submissions", "id", $assessment->submissionid);
!                     if (isstudent($exercise->course, $submission->userid)) {
                          $n++;
                          }
                      break;
                  case "teacher" :
!                      $submission = get_record("exercise_submissions", "id", $assessment->submissionid);
!                     if (isteacher($exercise->course, $submission->userid)) {
                          $n++;
                          }
                      break;
--- 403,418 ----
                      $n++;
                      break;
                  case "student" :
!                     $submission = get_record("exercise_submissions", "id", $assessment->submissionid);
!                     $canattempt  = has_capability('mod/exercise:attempt', $context, $submission->userid);
!                     if ($canattempt) {
                          $n++;
                          }
                      break;
                  case "teacher" :
!                     $submission = get_record("exercise_submissions", "id", $assessment->submissionid);
!                     $canassess   = has_capability('mod/exercise:assess', $context, $submission->userid);
!                     if ($canassess) {
                          $n++;
                          }
                      break;
***************
*** 710,719 ****
      $table->cellpadding = 2;
      $table->cellspacing = 0;
      $timenow = time();
!     
      if ($assessments = exercise_get_ungraded_assessments($exercise)) {
          foreach ($assessments as $assessment) {
!             if (!isteacher($exercise->course, $assessment->userid)) {
                  if (($timenow - $assessment->timegraded) < $CFG->maxeditingtime) {
                      $action = "<a href=\"assessments.php?action=gradeassessment&amp;a=$exercise->id&amp;aid=$assessment->id\">".
                          get_string("edit", "exercise")."</a>";
--- 721,731 ----
      $table->cellpadding = 2;
      $table->cellspacing = 0;
      $timenow = time();
!     $context = get_context_instance(CONTEXT_MODULE, $exercise->course);
      if ($assessments = exercise_get_ungraded_assessments($exercise)) {
          foreach ($assessments as $assessment) {
!             $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!             if (!$canassess) {
                  if (($timenow - $assessment->timegraded) < $CFG->maxeditingtime) {
                      $action = "<a href=\"assessments.php?action=gradeassessment&amp;a=$exercise->id&amp;aid=$assessment->id\">".
                          get_string("edit", "exercise")."</a>";
***************
*** 753,759 ****
              get_string("teacherassessmenttable", "exercise", $course->teacher)."</a></b></p>\n";
  
  
!     if (isteacheredit($course->id)) {
          // list any teacher submissions
          $table->head = array (get_string("title", "exercise"), get_string("submitted", "exercise"), 
                  get_string("action", "exercise"));
--- 765,773 ----
              get_string("teacherassessmenttable", "exercise", $course->teacher)."</a></b></p>\n";
  
  
!     $context = get_context_instance(CONTEXT_MODULE, $course->id);
!     $canmanage   = has_capability('mod/exercise:manage', $context);
!     if ($canmanage) {
          // list any teacher submissions
          $table->head = array (get_string("title", "exercise"), get_string("submitted", "exercise"), 
                  get_string("action", "exercise"));
***************
*** 766,772 ****
              foreach ($submissions as $submission) {
                  $action = "<a href=\"submissions.php?action=adminamendtitle&amp;id=$cm->id&amp;sid=$submission->id\">".
                      get_string("amendtitle", "exercise")."</a>";
!                 if (isteacheredit($course->id)) {
                      $action .= " | <a href=\"submissions.php?action=adminconfirmdelete&amp;id=$cm->id&amp;sid=$submission->id\">".
                          get_string("delete", "exercise")."</a>";
                  }
--- 780,786 ----
              foreach ($submissions as $submission) {
                  $action = "<a href=\"submissions.php?action=adminamendtitle&amp;id=$cm->id&amp;sid=$submission->id\">".
                      get_string("amendtitle", "exercise")."</a>";
!                 if ($canmanage) {
                      $action .= " | <a href=\"submissions.php?action=adminconfirmdelete&amp;id=$cm->id&amp;sid=$submission->id\">".
                          get_string("delete", "exercise")."</a>";
                  }
***************
*** 1006,1017 ****
      $table->cellspacing = 0;
  
      // get user's submissions
      if ($submissions = exercise_get_user_submissions($exercise, $user)) {
          foreach ($submissions as $submission) {
              // get the assessments
              if ($assessments = exercise_get_assessments($submission)) {
                  foreach ($assessments as $assessment) {
!                     if (isteacher($exercise->course, $assessment->userid)) { // assessments by teachers only
                          $action = "<a href=\"assessments.php?action=viewassessment&amp;a=$exercise->id&amp;aid=$assessment->id\">".
                              get_string("view", "exercise")."</a>";
                          // has teacher commented on teacher's assessment? shouldn't happen but leave test in
--- 1020,1033 ----
      $table->cellspacing = 0;
  
      // get user's submissions
+     $context = get_context_instance(CONTEXT_MODULE, $exercise->course);
      if ($submissions = exercise_get_user_submissions($exercise, $user)) {
          foreach ($submissions as $submission) {
              // get the assessments
              if ($assessments = exercise_get_assessments($submission)) {
                  foreach ($assessments as $assessment) {
!                     $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!                     if ($canassess) { // assessments by teachers only
                          $action = "<a href=\"assessments.php?action=viewassessment&amp;a=$exercise->id&amp;aid=$assessment->id\">".
                              get_string("view", "exercise")."</a>";
                          // has teacher commented on teacher's assessment? shouldn't happen but leave test in
***************
*** 1201,1206 ****
--- 1217,1223 ----
          }
          print_heading(get_string("studentsubmissionsforassessment", "exercise", $group->name));
      }
+     $context = get_context_instance(CONTEXT_MODULE, $course->id);
      if ($submissions = exercise_get_student_submissions($exercise, "time", $groupid)) {
          foreach ($submissions as $submission) {
              // only consider "cold" submissions
***************
*** 1216,1222 ****
                          $warm = false;
                          if ($assessments = get_records("exercise_assessments", "submissionid", $submission->id)) {
                              foreach ($assessments as $assessment) {
!                                 if (isteacher($course->id, $assessment->userid)) {
                                      if ($assessment->timecreated > $timenow -$CFG->maxeditingtime) {
                                          $warm = true;
                                      }
--- 1233,1240 ----
                          $warm = false;
                          if ($assessments = get_records("exercise_assessments", "submissionid", $submission->id)) {
                              foreach ($assessments as $assessment) {
!                                 $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!                                 if ($canassess) {
                                      if ($assessment->timecreated > $timenow -$CFG->maxeditingtime) {
                                          $warm = true;
                                      }
***************
*** 1260,1266 ****
                      $warm = false;
                      if ($assessments = get_records("exercise_assessments", "submissionid", $submission->id)) {
                          foreach ($assessments as $assessment) {
!                             if (isteacher($course->id, $assessment->userid)) {
                                  $teacherassessed = true;
                                  if (!$teacher = get_record("user", "id", $assessment->userid)) {
                                      error("List unassessed student submissions: teacher record not found");
--- 1278,1285 ----
                      $warm = false;
                      if ($assessments = get_records("exercise_assessments", "submissionid", $submission->id)) {
                          foreach ($assessments as $assessment) {
!                             $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!                             if ($canassess) {
                                  $teacherassessed = true;
                                  if (!$teacher = get_record("user", "id", $assessment->userid)) {
                                      error("List unassessed student submissions: teacher record not found");
***************
*** 1302,1308 ****
                          if ($assessments = get_records("exercise_assessments", "submissionid", 
                                      $prevsubmission->id)) {
                              foreach ($assessments as $assessment) {
!                                 if (isteacher($course->id, $assessment->userid)) {
                                      if (!$teacher = get_record("user", "id", $assessment->userid)) {
                                          error("List unassessed student submissions: teacher record not found");
                                      }
--- 1321,1328 ----
                          if ($assessments = get_records("exercise_assessments", "submissionid", 
                                      $prevsubmission->id)) {
                              foreach ($assessments as $assessment) {
!                                 $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!                                 if ($canassess) {
                                      if (!$teacher = get_record("user", "id", $assessment->userid)) {
                                          error("List unassessed student submissions: teacher record not found");
                                      }
***************
*** 1400,1408 ****
              $assessments = exercise_get_ungraded_assessments_teacher($exercise);
              break;
          }
      if ($assessments) {
          foreach ($assessments as $assessment) {
!             if (!isteacher($exercise->course, $assessment->userid)) { // don't let teacher grade their own assessments
                  if (($timenow - $assessment->timegraded) < $CFG->maxeditingtime) {
                      $action = "<a href=\"assessments.php?action=gradeassessment&amp;id=$cm->id&amp;stype=$stype&amp;aid=$assessment->id\">".
                          get_string("edit", "exercise")."</a>";
--- 1420,1431 ----
              $assessments = exercise_get_ungraded_assessments_teacher($exercise);
              break;
          }
+ 
+     $context = get_context_instance(CONTEXT_MODULE, $exercise->course);
      if ($assessments) {
          foreach ($assessments as $assessment) {
!             $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!             if (!$canassess) { // don't let teacher grade their own assessments
                  if (($timenow - $assessment->timegraded) < $CFG->maxeditingtime) {
                      $action = "<a href=\"assessments.php?action=gradeassessment&amp;id=$cm->id&amp;stype=$stype&amp;aid=$assessment->id\">".
                          get_string("edit", "exercise")."</a>";
***************
*** 1438,1443 ****
--- 1461,1467 ----
      }
      
      $timenow = time();
+     $context = get_context_instance(CONTEXT_MODULE, $course->id);
      $table->head = array (get_string("title", "exercise"),  get_string("action", "exercise"),
          get_string("submitted", "exercise"),  get_string("assessment", "exercise"));
      $table->align = array ("left", "left", "left", "left");
***************
*** 1477,1483 ****
                      }
                  }
              }
!             if (!$comment and isstudent($course->id, $user->id)) {
                  $comment = get_string("awaitingassessmentbythe", "exercise", $course->teacher);
              }
              $submissiondate = userdate($submission->timecreated);
--- 1501,1508 ----
                      }
                  }
              }
!             $canattempt  = has_capability('mod/exercise:attempt', $context, $user->id);
!             if (!$comment and $canattempt) {
                  $comment = get_string("awaitingassessmentbythe", "exercise", $course->teacher);
              }
              $submissiondate = userdate($submission->timecreated);
***************
*** 1506,1511 ****
--- 1531,1537 ----
      
      $timenow = time();
  
+     $context = get_context_instance(CONTEXT_MODULE, $course->id);
      if ($assessment) {
              
          if (!$submission = get_record("exercise_submissions", "id", $assessment->submissionid)) {
***************
*** 1514,1520 ****
          // test if this assessment is from a teacher or student.
          // Teacher's assessments are more complicated as we need to go back a couple of steps
          // to find the exercise. Student's assessments are directly associated with an exercise.
!         if (isteacher($course->id, $assessment->userid)) { 
              // A teacher's assessment, requires getting the student's assessment(s) 
              // and finding which of those assessments which comes from a teacher submission,
              // that is the exercise
--- 1540,1547 ----
          // test if this assessment is from a teacher or student.
          // Teacher's assessments are more complicated as we need to go back a couple of steps
          // to find the exercise. Student's assessments are directly associated with an exercise.
!         $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!         if ($canassess) { 
              // A teacher's assessment, requires getting the student's assessment(s) 
              // and finding which of those assessments which comes from a teacher submission,
              // that is the exercise
***************
*** 2004,2010 ****
      $timenow = time();
      
      // always show the teacher the grading grade if it's not their assessment!
!     if ($assessment and isteacher($course->id) and ($assessment->userid != $USER->id) and $exercise->gradinggrade) {  
          echo "<tr><td align=\"right\"><b>".get_string("gradeforstudentsassessment", "exercise", $course->student).
              "</td><td>\n";
          echo number_format($exercise->gradinggrade * $assessment->gradinggrade / 100.0, 0);
--- 2031,2038 ----
      $timenow = time();
      
      // always show the teacher the grading grade if it's not their assessment!
! 
!     if ($assessment and $canassess and ($assessment->userid != $USER->id) and $exercise->gradinggrade) {  
          echo "<tr><td align=\"right\"><b>".get_string("gradeforstudentsassessment", "exercise", $course->student).
              "</td><td>\n";
          echo number_format($exercise->gradinggrade * $assessment->gradinggrade / 100.0, 0);
***************
*** 2014,2020 ****
      // ...and close the table, show buttons if needed...
      echo "</table><br />\n";
      if ($assessment and $allowchanges) {  
!         if (isteacher($course->id)) { 
              // ...show two buttons...to resubmit or not to resubmit
              echo "<input type=\"button\" value=\"".get_string("studentnotallowed", "exercise", $course->student)."\" 
                  onclick=\"getElementById('assessmentform').submit();\" />\n";
--- 2042,2048 ----
      // ...and close the table, show buttons if needed...
      echo "</table><br />\n";
      if ($assessment and $allowchanges) {  
!         if ($canassess) { 
              // ...show two buttons...to resubmit or not to resubmit
              echo "<input type=\"button\" value=\"".get_string("studentnotallowed", "exercise", $course->student)."\" 
                  onclick=\"getElementById('assessmentform').submit();\" />\n";
***************
*** 2175,2182 ****
      if ($nentries == 99) {
          $nentries = 999999; // a large number
          }
! 
!     if ($exercise->anonymous and isstudent($course->id)) {
          $table->head = array (get_string("title", "exercise"), get_string("grade"));
          $table->align = array ("left", "center");
          $table->size = array ("*", "*");
--- 2203,2211 ----
      if ($nentries == 99) {
          $nentries = 999999; // a large number
          }
!     $context = get_context_instance(CONTEXT_MODULE, $course->id);
!     $canattempt = has_capability('mod/exercise:attempt', $context);
!     if ($exercise->anonymous and $canattempt) {
          $table->head = array (get_string("title", "exercise"), get_string("grade"));
          $table->align = array ("left", "center");
          $table->size = array ("*", "*");
***************
*** 2198,2204 ****
                  if (!$user = get_record("user", "id", $submission->userid)) {
                      error("Print league table: user not found");
                      }
!                 if ($exercise->anonymous and isstudent($course->id)) {
                      $table->data[] = array(exercise_print_submission_title($exercise, $submission),
                              number_format($submission->grade * $exercise->grade / 100.0, 1));
                  } else {
--- 2227,2233 ----
                  if (!$user = get_record("user", "id", $submission->userid)) {
                      error("Print league table: user not found");
                      }
!                 if ($exercise->anonymous and $canattempt) {
                      $table->data[] = array(exercise_print_submission_title($exercise, $submission),
                              number_format($submission->grade * $exercise->grade / 100.0, 1));
                  } else {
***************
*** 2231,2239 ****
      }
      
      $str = '';
      if ($assessments = exercise_get_assessments($submission)) {
          foreach ($assessments as $assessment) {
!             if (isteacher($exercise->course, $assessment->userid)) {
                  $str .= "[".number_format($assessment->grade * $exercise->grade / 100.0, 0)."] ";
                  }
              else { // assessment by student - shouldn't happen!
--- 2260,2270 ----
      }
      
      $str = '';
+     $context = get_context_instance(CONTEXT_MODULE, $exercise->course);
      if ($assessments = exercise_get_assessments($submission)) {
          foreach ($assessments as $assessment) {
!             $canassess   = has_capability('mod/exercise:assess', $context, $assessment->userid);
!             if ($canassess) {
                  $str .= "[".number_format($assessment->grade * $exercise->grade / 100.0, 0)."] ";
                  }
              else { // assessment by student - shouldn't happen!
Index: submissions.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/exercise/submissions.php,v
retrieving revision 1.33
diff -c -r1.33 submissions.php
*** submissions.php	21 Jan 2008 13:40:47 -0000	1.33
--- submissions.php	1 Apr 2008 02:54:36 -0000
***************
*** 55,64 ****
                    "", "", true);
  
  
      /******************* admin amend title ************************************/
      if ($action == 'adminamendtitle' ) {
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
          }
          if (empty($sid)) {
--- 55,68 ----
                    "", "", true);
  
  
+     $context = get_context_instance(CONTEXT_MODULE, $course->id);
+     $canassess= has_capability('mod/exercise:assess', $context);
+     $canattempt = has_capability('mod/exercise:attempt', $context);
+     $canmanage  = has_capability('mod/exercise:manage', $context);
      /******************* admin amend title ************************************/
      if ($action == 'adminamendtitle' ) {
  
!         if (!$canassess) {
              error("Only teachers can look at this page");
          }
          if (empty($sid)) {
***************
*** 91,97 ****
      /******************* admin clear late (flag) ************************************/
      elseif ($action == 'adminclearlate' ) {
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
          }
          if (empty($sid)) {
--- 95,101 ----
      /******************* admin clear late (flag) ************************************/
      elseif ($action == 'adminclearlate' ) {
  
!         if (!$canassess) {
              error("Only teachers can look at this page");
          }
          if (empty($sid)) {
***************
*** 114,120 ****
      /******************* admin confirm delete ************************************/
      elseif ($action == 'adminconfirmdelete' ) {
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
          }
          if (empty($sid)) {
--- 118,124 ----
      /******************* admin confirm delete ************************************/
      elseif ($action == 'adminconfirmdelete' ) {
  
!         if (!$canassess) {
              error("Only teachers can look at this page");
          }
          if (empty($sid)) {
***************
*** 124,131 ****
              error("Admin delete: can not get submission record");
          }
  
!         if (isteacher($course->id, $submission->userid)) {
!             if (!isteacheredit($course->id)) {
                  error("Only teacher with editing permissions can delete teacher submissions.");
              }
              if ($assessments = exercise_get_assessments($submission)) {
--- 128,136 ----
              error("Admin delete: can not get submission record");
          }
  
!         $canassess2 = has_capability('mod/exercise:assess', $context, $submission->userid);
!         if ($canassess2) {
!             if (!$canmanage) {
                  error("Only teacher with editing permissions can delete teacher submissions.");
              }
              if ($assessments = exercise_get_assessments($submission)) {
***************
*** 141,147 ****
      /******************* admin delete ************************************/
      elseif ($action == 'admindelete' ) {
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
              }
          if (empty($sid)) {
--- 146,152 ----
      /******************* admin delete ************************************/
      elseif ($action == 'admindelete' ) {
  
!         if (!$canassess) {
              error("Only teachers can look at this page");
              }
          if (empty($sid)) {
***************
*** 175,181 ****
      /******************* admin (confirm) late flag ************************************/
      elseif ($action == 'adminlateflag' ) {
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
              }
          if (empty($sid)) {
--- 180,186 ----
      /******************* admin (confirm) late flag ************************************/
      elseif ($action == 'adminlateflag' ) {
  
!         if (!$canassess) {
              error("Only teachers can look at this page");
              }
          if (empty($sid)) {
***************
*** 194,200 ****
      /******************* list all submissions ************************************/
      elseif ($action == 'adminlist' ) {
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
          }
  
--- 199,205 ----
      /******************* list all submissions ************************************/
      elseif ($action == 'adminlist' ) {
  
!         if (!$canassess) {
              error("Only teachers can look at this page");
          }
  
***************
*** 208,214 ****
      /******************* admin update title ************************************/
      elseif ($action == 'adminupdatetitle' ) {
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
              }
          if (empty($sid)) {
--- 213,219 ----
      /******************* admin update title ************************************/
      elseif ($action == 'adminupdatetitle' ) {
  
!         if (!canassess) {
              error("Only teachers can look at this page");
              }
          if (empty($sid)) {
***************
*** 303,309 ****
              print_footer($course);
              exit;
              }
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
              }
          exercise_list_unassessed_student_submissions($exercise, $USER);
--- 308,314 ----
              print_footer($course);
              exit;
              }
!         if (!$canassess) {
              error("Only teachers can look at this page");
              }
          exercise_list_unassessed_student_submissions($exercise, $USER);
***************
*** 330,336 ****
  
          $form = (object)$_POST;
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
              }
  
--- 335,341 ----
  
          $form = (object)$_POST;
  
!         if (!$canassess) {
              error("Only teachers can look at this page");
              }
  
***************
*** 354,360 ****
  
          $form = (object)$_POST;
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
              }
  
--- 359,365 ----
  
          $form = (object)$_POST;
  
!         if (!$canassess) {
              error("Only teachers can look at this page");
              }
  
Index: upload.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/exercise/upload.php,v
retrieving revision 1.20
diff -c -r1.20 upload.php
*** upload.php	12 Oct 2007 15:55:54 -0000	1.20
--- upload.php	1 Apr 2008 02:54:36 -0000
***************
*** 34,40 ****
  
      // 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 exercise variants
!     if (isstudent($course->id)) {
          if ($submissions = exercise_get_user_submissions($exercise, $USER)) {
              // returns all submissions, newest on first
              foreach ($submissions as $submission) {
--- 34,44 ----
  
      // 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 exercise variants
! 
!     $context = get_context_instance(CONTEXT_MODULE, $course->id);
!     $canassess= has_capability('mod/exercise:assess', $context);
!     $canattempt = has_capability('mod/exercise:attempt', $context);
!     if ($canattempt) {
          if ($submissions = exercise_get_user_submissions($exercise, $USER)) {
              // returns all submissions, newest on first
              foreach ($submissions as $submission) {
***************
*** 57,63 ****
          $um = new upload_manager('newfile',false,false,$course,false,$exercise->maxbytes);
          if ($um->preprocess_files()) {
              $newsubmission->exerciseid   = $exercise->id;
!             if (isteacher($course->id)) {
                  // it's an exercise submission, flag it as such
                  $newsubmission->userid         = 0;
                  $newsubmission->isexercise = 1;  // it's a description of an exercise
--- 61,67 ----
          $um = new upload_manager('newfile',false,false,$course,false,$exercise->maxbytes);
          if ($um->preprocess_files()) {
              $newsubmission->exerciseid   = $exercise->id;
!             if ($canassess) {
                  // it's an exercise submission, flag it as such
                  $newsubmission->userid         = 0;
                  $newsubmission->isexercise = 1;  // it's a description of an exercise
Index: view.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/exercise/view.php,v
retrieving revision 1.38
diff -c -r1.38 view.php
*** view.php	12 Oct 2007 15:55:54 -0000	1.38
--- view.php	1 Apr 2008 02:54:37 -0000
***************
*** 52,58 ****
      print_header_simple(format_string($exercise->name), "", $navigation,
                    "", "", true, update_module_button($cm->id, $course->id, $strexercise), navmenu($course, $cm));
  
!     if (isteacher($course->id)) {
          if (empty($action)) { // no action specified, either go straight to elements page else the admin page
              // has the assignment any elements
              if (count_records("exercise_elements", "exerciseid", $exercise->id)) {
--- 52,62 ----
      print_header_simple(format_string($exercise->name), "", $navigation,
                    "", "", true, update_module_button($cm->id, $course->id, $strexercise), navmenu($course, $cm));
  
!     $canmanage  = has_capability('mod/exercise:manage', $context);
!     $canassess   = has_capability('mod/exercise:assess', $context);
!     $canattempt = has_capability('mod/exercise:attempt', $context);
! 
!     if ($canassess) {
          if (empty($action)) { // no action specified, either go straight to elements page else the admin page
              // has the assignment any elements
              if (count_records("exercise_elements", "exerciseid", $exercise->id)) {
***************
*** 63,69 ****
              }
          }
      }
!     elseif (!isguest()) { // it's a student then
          if (!$cm->visible) {
              notice(get_string("activityiscurrentlyhidden"));
          }
--- 67,73 ----
              }
          }
      }
!     elseif ($canattempt) { // it's a student then
          if (!$cm->visible) {
              notice(get_string("activityiscurrentlyhidden"));
          }
***************
*** 135,141 ****
      /****************** make final grades available (for teachers only)**************/
      elseif ($action == 'makeleaguetableavailable') {
  
!         if (!isteacheredit($course->id)) {
              error("Only teachers with editing permissions can do this.");
          }
  
--- 139,145 ----
      /****************** make final grades available (for teachers only)**************/
      elseif ($action == 'makeleaguetableavailable') {
  
!         if (!$canmanage) {
              error("Only teachers with editing permissions can do this.");
          }
  
***************
*** 154,160 ****
      /****************** open exercise for student assessments and submissions (phase 2) (for teachers)**/
      elseif ($action == 'openexercise') {
  
!         if (!isteacheredit($course->id)) {
              error("Only teachers with editing permissions can do this.");
          }
  
--- 158,164 ----
      /****************** open exercise for student assessments and submissions (phase 2) (for teachers)**/
      elseif ($action == 'openexercise') {
  
!         if (!$canmanage) {
              error("Only teachers with editing permissions can do this.");
          }
  
***************
*** 176,182 ****
      /****************** set up assignment (move back to phase 1) (for teachers)***********************/
      elseif ($action == 'setupassignment') {
  
!         if (!isteacher($course->id)) {
              error("Only teachers with editing permissions can do this.");
          }
  
--- 180,186 ----
      /****************** set up assignment (move back to phase 1) (for teachers)***********************/
      elseif ($action == 'setupassignment') {
  
!         if (!$canmanage) {
              error("Only teachers with editing permissions can do this.");
          }
  
***************
*** 331,337 ****
      /****************** teacher's view - display admin page (current phase options) ************/
      elseif ($action == 'teachersview') {
  
!         if (!isteacher($course->id)) {
              error("Only teachers can look at this page");
          }
  
--- 335,341 ----
      /****************** teacher's view - display admin page (current phase options) ************/
      elseif ($action == 'teachersview') {
  
!         if (!$canassess) {
              error("Only teachers can look at this page");
          }
  
***************
*** 346,352 ****
          $tabs->names = array("1. ".get_string("phase1", "exercise"),
              "2. ".get_string("phase2", "exercise", $course->student),
              "3. ".get_string("phase3", "exercise", $course->student));
!         if (isteacheredit($course->id)) {
              $tabs->urls = array("view.php?id=$cm->id&amp;action=setupassignment",
                  "view.php?id=$cm->id&amp;action=openexercise",
                  "view.php?id=$cm->id&amp;action=makeleaguetableavailable");
--- 350,356 ----
          $tabs->names = array("1. ".get_string("phase1", "exercise"),
              "2. ".get_string("phase2", "exercise", $course->student),
              "3. ".get_string("phase3", "exercise", $course->student));
!         if ($canmanage) {
              $tabs->urls = array("view.php?id=$cm->id&amp;action=setupassignment",
                  "view.php?id=$cm->id&amp;action=openexercise",
                  "view.php?id=$cm->id&amp;action=makeleaguetableavailable");
***************
*** 367,373 ****
              switch ($exercise->phase) {
                  case 0:
                  case 1: // set up assignment
!                     if (isteacheredit($course->id)) {
                          echo "<p><b><a href=\"assessments.php?id=$cm->id&amp;action=editelements\">".
                              get_string("amendassessmentelements", "exercise")."</a></b></p> \n";
                          helpbutton("elements", get_string("amendassessmentelements", "exercise"), "exercise");
--- 371,377 ----
              switch ($exercise->phase) {
                  case 0:
                  case 1: // set up assignment
!                     if ($canmanage) {
                          echo "<p><b><a href=\"assessments.php?id=$cm->id&amp;action=editelements\">".
                              get_string("amendassessmentelements", "exercise")."</a></b></p> \n";
                          helpbutton("elements", get_string("amendassessmentelements", "exercise"), "exercise");
