';
echo '
';
echo '
';
@@ -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);
+
?>
diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php
index 7862ae6dbb7..64f58b05d94 100644
--- a/grade/report/grader/lib.php
+++ b/grade/report/grader/lib.php
@@ -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.'&perpage='.$this->get_pref('studentsperpage')
- .'&report=grader&page='.$this->page;
+ $this->baseurl = 'index.php?id='.$this->courseid.'&perpage='.$this->get_pref('studentsperpage')
+ .'&page='.$this->page;
//
- $this->pbarurl = 'report.php?id='.$this->courseid.'&perpage='.$this->get_pref('studentsperpage')
- .'&report=grader&';
+ $this->pbarurl = 'index.php?id='.$this->courseid.'&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 = '
gtree->commonvars . "\">\n"
. '
'. "\n";
@@ -981,7 +980,7 @@ class grade_report_grader extends grade_report {
// Print lock/unlock icon
- $lock_unlock_icon = '
gtree->commonvars . "\">\n"
. '
'. "\n";
@@ -993,7 +992,7 @@ class grade_report_grader extends grade_report {
$expand_contract = 'switch_plus';
}
- $contract_expand_icon = '
gtree->commonvars . "\">\n"
. '
'. "\n";
diff --git a/grade/report/grader/preferences.php b/grade/report/grader/preferences.php
index dc626481dd8..38bdd67b1e8 100644
--- a/grade/report/grader/preferences.php
+++ b/grade/report/grader/preferences.php
@@ -57,7 +57,7 @@ if ($form = data_submitted()) {
}
}
- redirect($CFG->wwwroot . '/grade/report.php?report=grader&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 . '&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);
diff --git a/grade/report/grader/tabs.php b/grade/report/grader/tabs.php
index 2f8a192ca92..84e349bb842 100644
--- a/grade/report/grader/tabs.php
+++ b/grade/report/grader/tabs.php
@@ -1,7 +1,7 @@
wwwroot.'/grade/report.php?id='.$courseid.'&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
index 00000000000..c9fc53bb6b8
--- /dev/null
+++ b/grade/report/index.php
@@ -0,0 +1,78 @@
+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
diff --git a/grade/report/user/index.php b/grade/report/user/index.php
index 24e8844a1a2..3b3f2e85b39 100644
--- a/grade/report/user/index.php
+++ b/grade/report/user/index.php
@@ -1,28 +1,110 @@
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");
}
-// Create a report instance
-$report = new grade_report_user($courseid, $gpr, $context, $userid);
+$context = get_context_instance(CONTEXT_COURSE, $course->id);
+$usercontext = get_context_instance(CONTEXT_PERSONAL, $user->id);
+require_capability('gradereport/user:view', $context);
-// find total number of participants
-$numusers = $report->get_numusers();
+$access = true;
+if (has_capability('moodle/grade:viewall', $context)) {
+ //ok - can view all course grades
-$gradetotal = 0;
-$gradesum = 0;
+} else if ($user->id == $USER->id and has_capability('moodle/grade:view', $context) and $course->showgrades) {
+ //ok - can view own grades
-// print the page
-print_heading(get_string('modulename', 'gradereport_user'). " - ".fullname($report->user));
-
-if ($report->fill_table()) {
- echo $report->print_table(true);
+} else if (has_capability('moodle/grade:view', $usercontext) and $course->showgrades) {
+ // ok - can view grades of this user- parent most probably
+
+} else {
+ $acces = false;
}
+
+/// 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);
+
+
+/// Print header
+print_header_simple($strgrades.':'.$reportname, ':'.$strgrades, $navigation,
+ '', '', true, '', navmenu($course));
+
+/// Print the plugin selector at the top
+print_grade_plugin_selector($courseid, 'report', 'user');
+
+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);
+
?>
diff --git a/theme/standard/styles_color.css b/theme/standard/styles_color.css
index 61115785a87..0c881c91f85 100644
--- a/theme/standard/styles_color.css
+++ b/theme/standard/styles_color.css
@@ -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;
}
diff --git a/theme/standard/styles_layout.css b/theme/standard/styles_layout.css
index 3fbe195dcae..31b0f8bc826 100644
--- a/theme/standard/styles_layout.css
+++ b/theme/standard/styles_layout.css
@@ -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;
}