]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-10579 Implement capability checks in grade import/export/report/edit pages -...
authorskodak <skodak>
Mon, 23 Jul 2007 22:20:07 +0000 (22:20 +0000)
committerskodak <skodak>
Mon, 23 Jul 2007 22:20:07 +0000 (22:20 +0000)
refactoring - reports now use real index.php

12 files changed:
blocks/admin/block_admin.php
grade/index.php
grade/lib.php
grade/report.php [deleted file]
grade/report/grader/index.php
grade/report/grader/lib.php
grade/report/grader/preferences.php
grade/report/grader/tabs.php
grade/report/index.php [new file with mode: 0644]
grade/report/user/index.php
theme/standard/styles_color.css
theme/standard/styles_layout.css

index 28d8022eba169c2dd57fd33371cc56def334b83e..66d3787def5612efc2d3eb35e368faca7d77bb08 100644 (file)
@@ -156,9 +156,9 @@ class block_admin extends block_list {
         }
 
     /// View course grades (or just your own grades, same link)
-        if ((has_capability('moodle/grade:view', $context) or 
-            (has_capability('moodle/grade:viewown', $context) && $course->showgrades)) && ($course->id!==SITEID)) {
-            $this->content->items[]='<a href="'.$CFG->wwwroot.'/grade/report.php?id='.$this->instance->pageid.'">'.get_string('grades').'</a>';
+        if ((has_capability('moodle/grade:viewall', $context) or 
+            (has_capability('moodle/grade:view', $context) && $course->showgrades)) && ($course->id!==SITEID)) {
+            $this->content->items[]='<a href="'.$CFG->wwwroot.'/grade/report/index.php?id='.$this->instance->pageid.'">'.get_string('grades').'</a>';
             $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/grades.gif" class="icon" alt="" />';
         }
 
index aa585fb18c8bb9df95a364afcb187da376789a8d..c077ef08cd0af6dac726c5dd926c8f68371b136a 100644 (file)
-<?PHP
-    require_once("../config.php");
-    require_once("lib.php");
+<?php //$Id$
 
-    $id       = required_param('id');              // course id
-    $download = optional_param('download');
-    $user     = optional_param('user', -1);
-    $action   = optional_param('action', 'grades');
-    $cview    = optional_param('cview', -1);
+/*
+ * Compatibility redirection to reports
+ */
 
-    if (!$course = get_record('course', 'id', $id)) {
-        error('No course ID');
-    }
+require '../config.php';
 
-    require_login($course->id);
+$id = required_param('id', PARAM_INT);
+redirect('report/index.php?id='.$id);
 
-    // if the user set new prefs make sure they happen now
-    if ($action == 'set_grade_preferences' && $prefs = data_submitted()) {
-        if (!confirm_sesskey()) {
-            error(get_string('confirmsesskeybad', 'error'));
-        }
-        grade_set_preferences($course, $prefs);
-    }
-
-    $preferences = grade_get_preferences($course->id);
-
-    
-    // we want this in its own window
-    if ($action == 'stats') {
-        grade_stats();
-        exit();
-    } else if ($action == 'ods') {
-        grade_download('ods', $id);
-        exit();
-    } else if ($action == 'excel') {
-        grade_download('xls', $id);
-        exit();
-    } else if ($action == 'text') {
-        grade_download('txt', $id);
-        exit();
-    }
-
-    print_header($course->shortname.': '.get_string('grades'), $course->fullname, grade_nav($course, $action));
-
-    print_heading('This old gradebook may not work properly.  See the <a href="report.php?id='.$course->id.'">new 1.9 gradebook</a>');
-
-    /// find out current groups mode
-    $groupmode = groupmode($course);
-    $currentgroup = setup_and_print_groups($course, $groupmode, 'index.php?id=' . $course->id);
-    echo '<div class="clearer"></div>';
-
-    grade_preferences_menu($action, $course);
-
-    grade_set_uncategorized();
-
-    if (has_capability('moodle/course:viewcoursegrades', get_context_instance(CONTEXT_COURSE, $course->id))) {
-        switch ($action) {
-            case "cats":
-                grade_set_categories();
-                break;
-            case "insert_category":
-                grade_insert_category();
-                grade_set_categories();
-                break;
-            case "assign_categories":
-                grade_assign_categories();
-                grade_set_categories();
-                break;
-            case "set_grade_weights":
-                grade_set_grade_weights();
-                grade_display_grade_weights();
-                break;
-            case "weights":
-                grade_display_grade_weights();
-                break;
-            case "grades":
-                if ($preferences->use_advanced == 1) {
-                    grade_view_all_grades($user);
-                }
-                else {
-                    // all the grades will be in the 'uncategorized' category
-                    grade_view_category_grades($user);
-                }
-                break;
-            case "vcats":
-                grade_view_category_grades($user);
-                break;
-            case "prefs":
-            case "set_grade_preferences":
-                grade_display_grade_preferences($course, $preferences);
-                break;
-            case "letters":
-                grade_display_letter_grades();
-                break;
-            case "set_letter_grades":
-                grade_set_letter_grades();
-                grade_display_letter_grades();
-                break;
-            case "delete_category":
-                grade_delete_category();
-                // re-run set_uncategorized as they may have deleted a category that had items in it 
-                grade_set_uncategorized();
-                grade_set_categories();
-                break;
-            case "view_student_grades":
-                grade_view_all_grades($user);
-                break;
-            case "view_student_category_grades":
-                grade_view_category_grades($user);
-                break;
-            default:
-                if ($preferences->use_advanced == 1) {
-                    grade_view_all_grades($user);
-                }
-                else {
-                    grade_view_category_grades($user);
-                }
-        } // end switch
-    } // end if isTeacher
-    else {
-        if ($preferences->show_weighted || $preferences->show_points || $preferences->show_percent) {
-
-            if ($preferences->use_advanced == 1) {
-                if($action != 'vcats') {
-                    grade_view_all_grades($USER->id);
-                }
-                else {
-                    grade_view_category_grades($USER->id);
-                }
-            } else {
-                grade_view_category_grades($USER->id);
-            }
-
-        } else {
-            error(get_string('gradebookhiddenerror','grades'));
-        }
-    } // end else (!teacher)
-    
-    print_footer($course);
-
-
-?>
+?>
\ No newline at end of file
index f967673d5a9b3547b1b0c63bf6a09408346c5bdb..a7d15b005ed3f9e0aad65fac38fb66cd787d5762 100644 (file)
@@ -29,7 +29,7 @@ function print_grade_plugin_selector($courseid, $active_type, $active_plugin, $r
     $reportnames = array();
     if (!empty($reports)) {
         foreach ($reports as $plugin) {
-            $url = 'report.php?id='.$courseid.'&amp;report='.$plugin;
+            $url = 'report/'.$plugin.'/index.php?id='.$courseid;
             if ($active_type == 'report' and $active_plugin == $plugin ) {
                 $active = $url;
             }
@@ -54,7 +54,7 @@ function print_grade_plugin_selector($courseid, $active_type, $active_plugin, $r
     if (!empty($imports)) {
         foreach ($imports as $plugin) {
             $url = 'import/'.$plugin.'/index.php?id='.$courseid;
-            if ($active_type == 'impot' and $active_plugin == $plugin ) {
+            if ($active_type == 'import' and $active_plugin == $plugin ) {
                 $active = $url;
             }
             $importnames[$url] = get_string('modulename', 'gradeimport_'.$plugin, NULL, $CFG->dirroot.'/grade/import/'.$plugin.'lang/');
@@ -78,7 +78,7 @@ function print_grade_plugin_selector($courseid, $active_type, $active_plugin, $r
     if (!empty($exports)) {
         foreach ($exports as $plugin) {
             $url = 'export/'.$plugin.'/index.php?id='.$courseid;
-            if ($active_type == 'impot' and $active_plugin == $plugin ) {
+            if ($active_type == 'export' and $active_plugin == $plugin ) {
                 $active = $url;
             }
             $exportnames[$url] = get_string('modulename', 'gradeexport_'.$plugin, NULL, $CFG->dirroot.'/grade/export/'.$plugin.'lang/');
@@ -168,21 +168,15 @@ class grade_plugin_return {
      * @param string $default default url when params not set
      * @return string url
      */
-    function get_return_url($default) {
+    function get_return_url($default, $extras=null) {
         global $CFG;
 
         if (empty($this->type) or empty($this->plugin)) {
             return $default;
         }
 
-        if ($this->type == 'report') {
-            $url = $CFG->wwwroot.'/grade/report.php?report='.$this->plugin;
-            $glue = '&amp;';
-
-        } else {
-            $url = $CFG->wwwroot.'/grade/'.$this->type.'/'.$this->plugin.'/index.php';
-            $glue = '?';
-        }
+        $url = $CFG->wwwroot.'/grade/'.$this->type.'/'.$this->plugin.'/index.php';
+        $glue = '?';
 
         if (!empty($this->courseid)) {
             $url .= $glue.'id='.$this->courseid;
@@ -196,6 +190,14 @@ class grade_plugin_return {
 
         if (!empty($this->page)) {
             $url .= $glue.'page='.$this->page;
+            $glue = '&amp;';
+        }
+
+        if (!empty($extras)) {
+            foreach($extras as $key=>$value) {
+                $url .= $glue.$key.'='.$value;
+                $glue = '&amp;';
+            }            
         }
 
         return $url;
diff --git a/grade/report.php b/grade/report.php
deleted file mode 100644 (file)
index 690a296..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php // $Id$
-
-///////////////////////////////////////////////////////////////////////////
-// NOTICE OF COPYRIGHT                                                   //
-//                                                                       //
-// Moodle - Modular Object-Oriented Dynamic Learning Environment         //
-//          http://moodle.org                                            //
-//                                                                       //
-// Copyright (C) 1999 onwards  Martin Dougiamas  http://moodle.com       //
-//                                                                       //
-// This program is free software; you can redistribute it and/or modify  //
-// it under the terms of the GNU General Public License as published by  //
-// the Free Software Foundation; either version 2 of the License, or     //
-// (at your option) any later version.                                   //
-//                                                                       //
-// This program is distributed in the hope that it will be useful,       //
-// but WITHOUT ANY WARRANTY; without even the implied warranty of        //
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
-// GNU General Public License for more details:                          //
-//                                                                       //
-//          http://www.gnu.org/copyleft/gpl.html                         //
-//                                                                       //
-///////////////////////////////////////////////////////////////////////////
-
-
-    require_once '../config.php';
-    require_once $CFG->libdir.'/gradelib.php';
-    require_once $CFG->dirroot.'/grade/lib.php';
-
-    $courseid = required_param('id');                   // course id
-    $report   = optional_param('report', get_user_preferences('grade_defaultreport', 'user'), PARAM_SAFEDIR);
-    $userid   = optional_param('userid', 0, PARAM_INT); // user detail
-    $page     = optional_param('page', 0, PARAM_INT);   // active page
-    $edit     = optional_param('edit', -1, PARAM_BOOL); // sticky editting mode
-
-/// Make sure they can even access this course
-
-    if (!$course = get_record('course', 'id', $courseid)) {
-        print_error('nocourseid');
-    }
-
-    require_login($course->id);
-
-    $context = get_context_instance(CONTEXT_COURSE, $course->id);
-
-
-/// Now check what reports are available
-
-    if ($reports = get_list_of_plugins('grade/report', 'CVS')) {         // Get all installed reports
-        foreach ($reports as $key => $plugin) {                      // Remove ones we can't see
-            if (!has_capability('gradereport/'.$plugin.':view', $context)) {
-                unset($reports[$key]);
-            }
-        }
-    }
-
-    if (!$reports) {
-        print_error('nogradereports', 'grade');
-    }
-
-
-/// Make sure the currently selected one makes sense
-
-    if (!in_array($report, $reports)) {
-        reset($reports);
-        list($key, $report) = each($reports);  // Just pick the first one
-    }
-
-    if ($report != get_user_preferences('grade_defaultreport', 'user')) {
-        set_user_preference('grade_defaultreport', $report);
-    }
-
-/// return tracking object
-    $gpr = new grade_plugin_return(array('type'=>'report', 'plugin'=>$report, 'courseid'=>$courseid,
-                                         'userid'=>$userid, 'page'=>$page));
-
-/// Build navigation
-
-    $strgrades = get_string('grades');
-    $reportname = get_string('modulename', 'gradereport_'.$report);
-    $navlinks = array();
-    $navlinks[] = array('name' => $strgrades, 'link' => $CFG->wwwroot . '/grade/index.php?id='.$courseid, 'type' => 'misc');
-    $navlinks[] = array('name' => $reportname, 'link' => '', 'type' => 'misc');
-
-    $navigation = build_navigation($navlinks);
-
-
-/// Build editing on/off buttons
-
-    if (!isset($USER->gradeediting)) {
-        $USER->gradeediting = 0;
-    }
-
-    if (($edit == 1) and confirm_sesskey()) {
-        $USER->gradeediting = 1;
-    } else if (($edit == 0) and confirm_sesskey()) {
-        $USER->gradeediting = 0;
-    }
-
-    // params for the turn editting on
-    $options = $gpr->get_options();
-
-    if ($USER->gradeediting) {
-        $options['edit'] = 0;
-        $string = get_string('turneditingoff');
-    } else {
-        $options['edit'] = 1;
-        $string = get_string('turneditingon');
-    }
-
-    $options['sesskey'] = sesskey();
-    $link = 'report.php';
-
-
-    $buttons = print_single_button($link, $options, $string, 'get', '_self', true);
-
-
-/// Print header
-
-    print_header_simple($strgrades.':'.$reportname, ':'.$strgrades, $navigation,
-                        '', '', true, $buttons, navmenu($course));
-
-/// Print the plugin selector at the top
-    print_grade_plugin_selector($courseid, 'report', $report);
-
-
-/// Now simply include the report here and we're done
-
-    include_once($CFG->dirroot.'/grade/report/'.$report.'/index.php');
-
-    print_footer($course);
-
-
-?>
index bdb387a7ec5b3b11f17835d4af0f1afecef7ab69..43e5d3e1d1ba0c6539bfd0e7cf45156a8ec1eead 100644 (file)
@@ -1,12 +1,38 @@
 <?php // $Id$
 
-/// This creates and handles the whole grader report interface, sans header and footer
+///////////////////////////////////////////////////////////////////////////
+// NOTICE OF COPYRIGHT                                                   //
+//                                                                       //
+// Moodle - Modular Object-Oriented Dynamic Learning Environment         //
+//          http://moodle.org                                            //
+//                                                                       //
+// Copyright (C) 1999 onwards  Martin Dougiamas  http://moodle.com       //
+//                                                                       //
+// This program is free software; you can redistribute it and/or modify  //
+// it under the terms of the GNU General Public License as published by  //
+// the Free Software Foundation; either version 2 of the License, or     //
+// (at your option) any later version.                                   //
+//                                                                       //
+// This program is distributed in the hope that it will be useful,       //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of        //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
+// GNU General Public License for more details:                          //
+//                                                                       //
+//          http://www.gnu.org/copyleft/gpl.html                         //
+//                                                                       //
+///////////////////////////////////////////////////////////////////////////
+
+
+require_once '../../../config.php';
+require_once $CFG->libdir.'/gradelib.php';
+require_once $CFG->dirroot.'/grade/lib.php';
+require_once $CFG->dirroot.'/grade/report/grader/lib.php';
+
+$courseid      = required_param('id');                   // course id
+$page          = optional_param('page', 0, PARAM_INT);   // active page
+$perpageurl    = optional_param('perpage', 0, PARAM_INT);
+$edit          = optional_param('edit', -1, PARAM_BOOL); // sticky editting mode
 
-require_once($CFG->dirroot.'/grade/report/grader/lib.php');
-
-$gradeserror = array();
-
-// get the params ($report, $courseid and $context are already set in grade/report.php)
 $sortitemid    = optional_param('sortitemid', 0, PARAM_ALPHANUM); // sort by which grade item
 $action        = optional_param('action', 0, PARAM_ALPHA);
 $move          = optional_param('move', 0, PARAM_INT);
@@ -15,9 +41,64 @@ $target        = optional_param('target', 0, PARAM_ALPHANUM);
 $toggle        = optional_param('toggle', NULL, PARAM_INT);
 $toggle_type   = optional_param('toggle_type', 0, PARAM_ALPHANUM);
 
+/// basic access checks
+if (!$course = get_record('course', 'id', $courseid)) {
+    print_error('nocourseid');
+}
+require_login($course);
+$context = get_context_instance(CONTEXT_COURSE, $course->id);
+require_capability('gradereport/grader:view', $context);
+
+/// return tracking object
+$gpr = new grade_plugin_return(array('type'=>'report', 'plugin'=>'grader', 'courseid'=>$courseid, 'page'=>$page));
+
+/// last selected report session tracking
+if (!isset($USER->grade_last_report)) {
+    $USER->grade_last_report = array();
+}
+$USER->grade_last_report[$course->id] = 'grader';
+
+/// Build navigation
+
+$strgrades  = get_string('grades');
+$reportname = get_string('modulename', 'gradereport_grader');
+
+$navlinks = array(array('name'=>$strgrades, 'link'=>$CFG->wwwroot.'/grade/index.php?id='.$courseid, 'type'=>'misc'),
+                  array('name'=>$reportname, 'link'=>'', 'type'=>'misc'));
+$navigation = build_navigation($navlinks);
+
+
+/// Build editing on/off buttons
+
+if (!isset($USER->gradeediting)) {
+    $USER->gradeediting = 0;
+}
+
+if (($edit == 1) and confirm_sesskey()) {
+    $USER->gradeediting = 1;
+} else if (($edit == 0) and confirm_sesskey()) {
+    $USER->gradeediting = 0;
+}
+
+// page params for the turn editting on
+$options = $gpr->get_options();
+$options['sesskey'] = sesskey();
+
+if ($USER->gradeediting) {
+    $options['edit'] = 0;
+    $string = get_string('turneditingoff');
+} else {
+    $options['edit'] = 1;
+    $string = get_string('turneditingon');
+}
+
+$buttons = print_single_button('index.php', $options, $string, 'get', '_self', true);
+
+$gradeserror = array();
+
 // Handle toggle change request
 if (!is_null($toggle) && !empty($toggle_type)) {
-    set_user_preferences(array('grade_report_show' . $toggle_type => $toggle));
+    set_user_preferences(array('grade_report_show'.$toggle_type => $toggle));
 }
 
 //first make sure we have proper final grades - this must be done before constructing of the grade tree
@@ -32,7 +113,7 @@ if ($data = data_submitted() and confirm_sesskey()) {
 }
 
 // Override perpage if set in URL
-if ($perpageurl = optional_param('perpage', 0, PARAM_INT)) {
+if ($perpageurl) {
     $report->user_prefs['studentsperpage'] = $perpageurl;
 }
 
@@ -45,13 +126,16 @@ $report->load_users();
 $numusers = $report->get_numusers();
 $report->load_final_grades();
 
-if (!$context = get_context_instance(CONTEXT_COURSE, $report->gtree->courseid)) {
-    return false;
-}
+/// Print header
+print_header_simple($strgrades.':'.$reportname, ':'.$strgrades, $navigation,
+                        '', '', true, $buttons, navmenu($course));
+
+/// Print the plugin selector at the top
+print_grade_plugin_selector($courseid, 'report', 'grader');
 
 // Add tabs
 $currenttab = 'graderreport';
-include('tabs.php');
+require('tabs.php');
 
 echo $report->group_selector;
 
@@ -70,7 +154,7 @@ $reporthtml .= "</table>";
 
 // print submit button
 if ($USER->gradeediting) {
-    echo '<form action="report.php" method="post">';
+    echo '<form action="index.php" method="post">';
     echo '<div>';
     echo '<input type="hidden" value="'.$courseid.'" name="id" />';
     echo '<input type="hidden" value="'.sesskey().'" name="sesskey" />';
@@ -89,4 +173,7 @@ if ($USER->gradeediting && ($report->get_pref('quickfeedback') || $report->get_p
 if ($report->get_pref('studentsperpage') >= 20) {
     print_paging_bar($numusers, $report->page, $report->get_pref('studentsperpage'), $report->pbarurl);
 }
+
+print_footer($course);
+
 ?>
index 7862ae6dbb78dd37903a429eee51d16c809fc331..64f58b05d94c26853f561ef4bb81dafdb98bcf86 100644 (file)
@@ -66,11 +66,10 @@ class grade_report_grader extends grade_report {
         $this->sortitemid = $sortitemid;
 
         // base url for sorting by first/last name
-        $this->baseurl = 'report.php?id='.$this->courseid.'&amp;perpage='.$this->get_pref('studentsperpage')
-                        .'&amp;report=grader&amp;page='.$this->page;
+        $this->baseurl = 'index.php?id='.$this->courseid.'&amp;perpage='.$this->get_pref('studentsperpage')
+                        .'&amp;page='.$this->page;
         //
-        $this->pbarurl = 'report.php?id='.$this->courseid.'&amp;perpage='.$this->get_pref('studentsperpage')
-                        .'&amp;report=grader&amp;';
+        $this->pbarurl = 'index.php?id='.$this->courseid.'&amp;perpage='.$this->get_pref('studentsperpage');
 
         // Setup groups if requested
         if ($this->get_pref('showgroups')) {
@@ -968,7 +967,7 @@ class grade_report_grader extends grade_report {
             $hide_show = 'show';
         }
 
-        $show_hide_icon = '<a href="report.php?report=grader&amp;target='.$eid
+        $show_hide_icon = '<a href="index.php?target='.$eid
                         . "&amp;action=$hide_show" . $this->gtree->commonvars . "\">\n"
                         . '<img src="'.$CFG->pixpath.'/t/'.$hide_show.'.gif" class="iconsmall" alt="'
                         . ${'str' . $hide_show}.'" title="'.${'str' . $hide_show}.'" /></a>'. "\n";
@@ -981,7 +980,7 @@ class grade_report_grader extends grade_report {
 
         // Print lock/unlock icon
 
-        $lock_unlock_icon = '<a href="report.php?report=grader&amp;target='.$eid
+        $lock_unlock_icon = '<a href="index.php?target='.$eid
                           . "&amp;action=$lock_unlock" . $this->gtree->commonvars . "\">\n"
                           . '<img src="'.$CFG->pixpath.'/t/'.$lock_unlock.'.gif" class="iconsmall" alt="'
                           . ${'str' . $lock_unlock}.'" title="'.${'str' . $lock_unlock}.'" /></a>'. "\n";
@@ -993,7 +992,7 @@ class grade_report_grader extends grade_report {
             $expand_contract = 'switch_plus';
         }
 
-        $contract_expand_icon = '<a href="report.php?report=grader&amp;target=' . $eid
+        $contract_expand_icon = '<a href="index.php?target=' . $eid
                               . "&amp;action=$expand_contract" . $this->gtree->commonvars . "\">\n"
                               . '<img src="'.$CFG->pixpath.'/t/'.$expand_contract.'.gif" class="iconsmall" alt="'
                               . ${'str' . $expand_contract}.'" title="'.${'str' . $expand_contract}.'" /></a>'. "\n";
index dc626481dd838d3256a3346aa214506f81524b9f..38bdd67b1e83ea37ca529a3181c057aac8085518 100644 (file)
@@ -57,7 +57,7 @@ if ($form = data_submitted()) {
         }
     }
 
-    redirect($CFG->wwwroot . '/grade/report.php?report=grader&amp;id='.$courseid, get_string('changessaved'), 1);
+    redirect($CFG->wwwroot . '/grade/report/grader/index.php?id='.$courseid, get_string('changessaved'), 1);
     exit;
 }
 
@@ -68,7 +68,7 @@ $strgradepreferences = get_string('gradepreferences', 'grades');
 $navlinks = array();
 $navlinks[] = array('name' => $strgrades, 'link' => $CFG->wwwroot . '/grade/index.php?id='.$courseid, 'type' => 'misc');
 $navlinks[] = array('name' => $strgraderreport,
-    'link' => $CFG->wwwroot . '/grade/report.php?id=' . $courseid . '&amp;report=grader', 'type' => 'misc');
+    'link' => $CFG->wwwroot . '/grade/report/grader/index.php?id=' . $courseid, 'type' => 'misc');
 $navlinks[] = array('name' => $strgradepreferences, 'link' => '', 'type' => 'misc');
 
 $navigation = build_navigation($navlinks);
index 2f8a192ca92383c7bd8b1ee51a00176beafd4f3d..84e349bb842d67ca69ca898b17ab195f201d4338 100644 (file)
@@ -1,7 +1,7 @@
 <?php  // $Id$
     $row = $tabs = array();
     $row[] = new tabobject('graderreport',
-                           $CFG->wwwroot.'/grade/report.php?id='.$courseid.'&amp;report=grader',
+                           $CFG->wwwroot.'/grade/report/grader/index.php?id='.$courseid,
                            get_string('modulename', 'gradereport_grader'));
 
     $row[] = new tabobject('preferences',
diff --git a/grade/report/index.php b/grade/report/index.php
new file mode 100644 (file)
index 0000000..c9fc53b
--- /dev/null
@@ -0,0 +1,78 @@
+<?php //$Id$
+
+///////////////////////////////////////////////////////////////////////////
+// NOTICE OF COPYRIGHT                                                   //
+//                                                                       //
+// Moodle - Modular Object-Oriented Dynamic Learning Environment         //
+//          http://moodle.org                                            //
+//                                                                       //
+// Copyright (C) 1999 onwards  Martin Dougiamas  http://moodle.com       //
+//                                                                       //
+// This program is free software; you can redistribute it and/or modify  //
+// it under the terms of the GNU General Public License as published by  //
+// the Free Software Foundation; either version 2 of the License, or     //
+// (at your option) any later version.                                   //
+//                                                                       //
+// This program is distributed in the hope that it will be useful,       //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of        //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
+// GNU General Public License for more details:                          //
+//                                                                       //
+//          http://www.gnu.org/copyleft/gpl.html                         //
+//                                                                       //
+///////////////////////////////////////////////////////////////////////////
+
+require '../../config.php';
+
+$courseid = required_param('id', PARAM_INT);
+
+/// basic access checks
+if (!$course = get_record('course', 'id', $courseid)) {
+    print_error('nocourseid');
+}
+require_login($course);
+$context = get_context_instance(CONTEXT_COURSE, $course->id);
+
+/// find all accessible reports
+if ($reports = get_list_of_plugins('grade/report', 'CVS')) {     // Get all installed reports
+    foreach ($reports as $key => $plugin) {                      // Remove ones we can't see
+        if (!has_capability('gradereport/'.$plugin.':view', $context)) {
+            unset($reports[$key]);
+        }
+    }
+}
+
+if (empty($reports)) {
+    error('No reports accessible', $CFG->wwwroot.'/course/view.php:id='.$course->id); // TODO: localize
+}
+
+if (!isset($USER->grade_last_report)) {
+    $USER->grade_last_report = array();
+}
+
+if (!empty($USER->grade_last_report[$course->id])) {
+    $last = $USER->grade_last_report[$course->id];
+} else {
+    $last = null;
+}
+
+if (!in_array($last, $reports)) {
+    $last = null;
+}
+
+if (empty($last)) {
+    if (in_array('grader', $reports)) {
+        $last = 'grader';
+
+    } else if (in_array('user', $reports)) {
+        $last = 'user';
+        
+    } else {
+        $last = reset($reports);
+    }
+}
+
+//redirect to last or guessed report
+redirect($CFG->wwwroot.'/grade/report/'.$last.'/index.php?id='.$course->id);
+
+?>
\ No newline at end of file
index 24e8844a1a225a7103cd50b4bc5a8135dc0051f8..3b3f2e85b39922639894b0b1c7d2885eb6ec74ab 100644 (file)
 <?php // $Id$
 
-/// This creates and handles the whole user report interface, sans header and footer
+///////////////////////////////////////////////////////////////////////////
+// NOTICE OF COPYRIGHT                                                   //
+//                                                                       //
+// Moodle - Modular Object-Oriented Dynamic Learning Environment         //
+//          http://moodle.org                                            //
+//                                                                       //
+// Copyright (C) 1999 onwards  Martin Dougiamas  http://moodle.com       //
+//                                                                       //
+// This program is free software; you can redistribute it and/or modify  //
+// it under the terms of the GNU General Public License as published by  //
+// the Free Software Foundation; either version 2 of the License, or     //
+// (at your option) any later version.                                   //
+//                                                                       //
+// This program is distributed in the hope that it will be useful,       //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of        //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
+// GNU General Public License for more details:                          //
+//                                                                       //
+//          http://www.gnu.org/copyleft/gpl.html                         //
+//                                                                       //
+///////////////////////////////////////////////////////////////////////////
 
-require_once($CFG->dirroot.'/grade/report/user/lib.php');
+require_once '../../../config.php';
+require_once $CFG->libdir.'/gradelib.php';
+require_once $CFG->dirroot.'/grade/lib.php';
+require_once $CFG->dirroot.'/grade/report/user/lib.php';
 
-// get the params
-if (!$userid = optional_param('user', 0, PARAM_INT)) {
-    // current user
-    $userid = $USER->id;
+$courseid = required_param('id');
+$userid   = optional_param('userid', $USER->id, PARAM_INT);
+
+/// basic access checks
+if (!$course = get_record('course', 'id', $courseid)) {
+    print_error('nocourseid');
+}
+require_login($course);
+
+if (!$user = get_complete_user_data('id', $userid)) {
+    error("Incorrect userid");
+}
+
+$context     = get_context_instance(CONTEXT_COURSE, $course->id);
+$usercontext = get_context_instance(CONTEXT_PERSONAL, $user->id);
+require_capability('gradereport/user:view', $context);
+
+$access = true;
+if (has_capability('moodle/grade:viewall', $context)) {
+    //ok - can view all course grades
+
+} else if ($user->id == $USER->id and has_capability('moodle/grade:view', $context) and $course->showgrades) {
+    //ok - can view own grades
+
+} else if (has_capability('moodle/grade:view', $usercontext) and $course->showgrades) {
+    // ok - can view grades of this user- parent most probably
+    
+} else {
+    $acces = false;
 }
 
-// Create a report instance
-$report = new grade_report_user($courseid, $gpr, $context, $userid);
+/// return tracking object
+$gpr = new grade_plugin_return(array('type'=>'report', 'plugin'=>'user', 'courseid'=>$courseid, 'userid'=>$userid));
+
+/// last selected report session tracking
+if (!isset($USER->grade_last_report)) {
+    $USER->grade_last_report = array();
+}
+$USER->grade_last_report[$course->id] = 'user';
+
+/// Build navigation
+$strgrades  = get_string('grades');
+$reportname = get_string('modulename', 'gradereport_user');
+
+$navlinks = array(array('name'=>$strgrades, 'link'=>$CFG->wwwroot.'/grade/index.php?id='.$courseid, 'type'=>'misc'),
+                  array('name'=>$reportname, 'link'=>'', 'type'=>'misc'));
+$navigation = build_navigation($navlinks);
 
-// find total number of participants
-$numusers = $report->get_numusers();
 
-$gradetotal = 0;
-$gradesum = 0;
+/// Print header
+print_header_simple($strgrades.':'.$reportname, ':'.$strgrades, $navigation,
+                    '', '', true, '', navmenu($course));
 
-// print the page
-print_heading(get_string('modulename', 'gradereport_user'). " - ".fullname($report->user));
+/// Print the plugin selector at the top
+print_grade_plugin_selector($courseid, 'report', 'user');
 
-if ($report->fill_table()) {
-    echo $report->print_table(true);
+if ($access) {
+
+    //first make sure we have proper final grades - this must be done before constructing of the grade tree
+    grade_regrade_final_grades($courseid);
+
+    // Create a report instance
+    $report = new grade_report_user($courseid, $gpr, $context, $userid);
+    
+    $gradetotal = 0;
+    $gradesum = 0;
+    
+    // print the page
+    print_heading(get_string('modulename', 'gradereport_user'). ' - '.fullname($report->user));
+    
+    if ($report->fill_table()) {
+        echo $report->print_table(true);
+    }
+
+} else {
+    // no access to grades!
+    echo "Can not view grades."; //TODO: localize
 }
+print_footer($course);
+
 ?>
index 61115785a873e20bf0e690423cbbf0d774f968a9..0c881c91f851abf7b3f43cdf64d3fdbdfba1c2a0 100644 (file)
@@ -702,17 +702,17 @@ body#grade-index .grades .r1 {
 
 /* new grades css*/
 
-#grade-report .catlevel1 {
+.grade-report-grader .catlevel1 {
   background-color: #ffffff;
 }
-#grade-report .catlevel2 {
+.grade-report-grader .catlevel2 {
   background-color: #eeeeee;
 }
-#grade-report .catlevel3 {
+.grade-report-grader .catlevel3 {
   background-color: #dddddd;
 }
 
-#grade-report td.overridden {
+.grade-report-grader td.overridden {
   background-color: #dddddd;
 }
 
index 3fbe195dcaeb26c8498d4eb9f3f85d63671ff04a..31b0f8bc826986b880a4eef5425ff2f32bf8ab66 100644 (file)
@@ -2051,88 +2051,88 @@ body#doc-contents ul {
  ***/
 
 
-#grade-report table {
+.grade-report-grader table {
   border-width:1px;
   border-style:solid;
   margin-top: 20px;
 }
 
-#grade-report div.submit {
+.grade-report-grader div.submit {
   margin-top: 20px;
   text-align: center;
 }
 
-#grade-report table td {
+.grade-report-grader table td {
   border-width:1px;
   border-style:solid;
 }
 
-#grade-report tr.heading {
+.grade-report-grader tr.heading {
   border-width:0px 0px 0px 0px;
   border-style:solid;
 }
 
-#grade-report .heading td {
+.grade-report-grader .heading td {
   border-width:0px 0px 0px 0px;
   border-style:solid;
 }
 
-#grade-report th.category {
+.grade-report-grader th.category {
   border-width:1px 1px 0px 1px;
   border-style:solid;
 }
 
-#grade-report th.user {
+.grade-report-grader th.user {
   border-width:0px 0px 1px 0px;
   border-style:solid;
 }
 
-#grade-report th.categoryitem,
-#grade-report th.courseitem,
-#grade-report td.topleft {
+.grade-report-grader th.categoryitem,
+.grade-report-grader th.courseitem,
+.grade-report-grader td.topleft {
   border-width:0px 1px 0px 1px;
   border-style:solid;
 }
 
-#grade-report td.fillerfirst {
+.grade-report-grader td.fillerfirst {
   border-width:0px 0px 0px 1px;
   border-style:solid;
 }
 
-#grade-report td.fillerlast {
+.grade-report-grader td.fillerlast {
   border-width:0px 1px 0px 0px;
   border-style:solid;
 }
 
-#grade-report th.item {
+.grade-report-grader th.item {
   border-width:1px 1px 1px 1px;
   border-style:solid;
 }
 
-#grade-report div.gradertoggle {
+.grade-report-grader div.gradertoggle {
   display: inline;
   margin-left: 20px;
 }
 
-#grade-report table.gradestable {
+.grade-report-grader table.gradestable {
   margin-left:auto;
   margin-right:auto;
 }
 
-#grade-report .gradestable th.user {
+.grade-report-grader .gradestable th.user {
   text-align:left;
 }
 
-#grade-report .gradestable td {
+.grade-report-grader .gradestable td {
   text-align:right;
 }
 
-#grade-report th.range {
+.grade-report-grader th.range {
   border-width:1px 1px 1px 1px;
   border-style:solid;
 }
 
-#grade-report .userpic {
+.grade-report-grader .userpic {
   display: inline;
   margin-right: 10px;
 }