]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-17464 profile reports are now respecting course report caps
authorskodak <skodak>
Sun, 30 Nov 2008 12:04:27 +0000 (12:04 +0000)
committerskodak <skodak>
Sun, 30 Nov 2008 12:04:27 +0000 (12:04 +0000)
course/report/log/db/access.php
course/report/log/graph.php
course/report/log/version.php
course/report/stats/graph.php
course/user.php
lang/en_utf8/coursereport_log.php
user/tabs.php
version.php

index 85377d377429a3b0dd7e22500aafefdfd328fd7a..cac7b0ed7a48fc31fa89a2ab8dcde52588eda888 100644 (file)
@@ -49,8 +49,20 @@ $coursereport_log_capabilities = array(
         ),
 
         'clonepermissionsfrom' => 'moodle/site:viewreports',
-    )
+    ),
 
+    'coursereport/log:viewtoday' => array(
+        'riskbitmask' => RISK_PERSONAL,
+        'captype' => 'read',
+        'contextlevel' => CONTEXT_COURSE,
+        'legacy' => array(
+            'teacher' => CAP_ALLOW,
+            'editingteacher' => CAP_ALLOW,
+            'admin' => CAP_ALLOW
+        ),
+
+        'clonepermissionsfrom' => 'moodle/site:viewreports',
+    )
 );
 
 ?>
index f06b5e38acac2cd517a17cb14a540460f84bec31..c317bd3649b136fcbefe018b0235876b8eabbad2 100644 (file)
@@ -17,9 +17,7 @@
     require_login($course);
     $context = get_context_instance(CONTEXT_COURSE, $course->id);
 
-    if ($course->showreports and $USER->id == $user and !isguestuser()) {
-        // no cap required to view own graph
-    } else {
+    if (!$course->showreports or $USER->id != $user) {
         require_capability('coursereport/log:view', $context);
     }
 
index 702efd5e035e4e291a44dac8f11c80c2c404a865..4473706b8351abf3378b5efe8330c1e1c48a3f2b 100644 (file)
@@ -23,7 +23,7 @@
 //                                                                       //
 ///////////////////////////////////////////////////////////////////////////
 
-$plugin->version  = 2007101502;
+$plugin->version  = 2007101503;
 $plugin->requires = 2007101532;
 
 ?>
index dc8f89859e63290204874e611dd67a36cf8b8a62..1488eda3799263eb5496aac105c413ee240b4825 100644 (file)
@@ -24,7 +24,9 @@
     require_login($course);
     $context = get_context_instance(CONTEXT_COURSE, $course->id);
 
-    require_capability('coursereport/stats:view', $context);
+    if (!$course->showreports or $USER->id != $userid) {
+        require_capability('coursereport/stats:view', $context);
+    }
 
     stats_check_uptodate($course->id);
 
index e8b21c299418ee68535446238dd1cce9625f0e9a..61f749194753c3c5b7dea2eda0260898b69df401 100644 (file)
@@ -5,8 +5,6 @@
     require_once("../config.php");
     require_once("lib.php");
 
-    $modes = array("outline", "complete", "todaylogs", "alllogs");
-
     $id      = required_param('id',PARAM_INT);       // course id
     $user    = required_param('user',PARAM_INT);     // user id
     $mode    = optional_param('mode', "todaylogs", PARAM_ALPHA);
     }
 
     require_login();
-    $COURSE = clone($course);
+    $coursecontext   = get_context_instance(CONTEXT_COURSE, $course->id);
+    $personalcontext = get_context_instance(CONTEXT_USER, $user->id);
+
+    require_login();
+    if (has_capability('moodle/user:viewuseractivitiesreport', $personalcontext) and !has_capability('moodle/course:view', $coursecontext)) {
+        // do not require parents to be enrolled in courses ;-)
+        course_setup($course);
+    } else {
+        require_login($course);
+    }
 
     if ($user->deleted) {
         print_header();
         die;
     }
 
-    $coursecontext = get_context_instance(CONTEXT_COURSE, $id);
-    $personalcontext = get_context_instance(CONTEXT_USER, $user->id);
+    // prepare list of allowed modes
+    $myreports  = ($course->showreports and $USER->id == $user->id);
+    $anyreport  = has_capability('moodle/user:viewuseractivitiesreport', $personalcontext);
+
+    $modes = array();
+
+    if ($myreports or $anyreport or has_capability('coursereport/outline:view', $coursecontext)) {
+        $modes[] = 'outline';
+    }
+
+    if ($myreports or $anyreport or has_capability('coursereport/outline:view', $coursecontext)) {
+        $modes[] = 'complete';
+    }
+
+    if ($myreports or $anyreport or has_capability('coursereport/log:viewtoday', $coursecontext)) {
+        $modes[] = 'todaylogs';
+    }
 
-    // if in either context, we can read report, then we can proceed
-    if (!(has_capability('moodle/site:viewreports', $coursecontext) or ($course->showreports and $USER->id == $user->id) or has_capability('moodle/user:viewuseractivitiesreport', $personalcontext))) {
-        print_error('nopermissiontoviewpage', 'error');
+    if ($myreports or $anyreport or has_capability('coursereport/log:view', $coursecontext)) {
+        $modes[] = 'alllogs';
+    }
+
+    if ($myreports or $anyreport or has_capability('coursereport/stats:view', $coursecontext)) {
+        $modes[] = 'stats';
+    }
+
+    if (has_capability('moodle/grade:viewall', $coursecontext)) {
+        //ok - can view all course grades
+        $modes[] = 'grade';
+
+    } else if ($course->showgrades and $user->id == $USER->id and has_capability('moodle/grade:view', $coursecontext)) {
+        //ok - can view own grades
+        $modes[] = 'grade';
+
+    } else if ($course->showgrades and has_capability('moodle/grade:viewall', $personalcontext)) {
+        // ok - can view grades of this user - parent most probably
+        $modes[] = 'grade';
+    }
+
+    if (empty($modes)) {
+        require_capability('moodle/user:viewuseractivitiesreport', $personalcontext);
+    }
+
+    if (!in_array($mode, $modes)) {
+        // forbidden or non-exitent mode
+        $mode = reset($modes);
     }
 
     add_to_log($course->id, "course", "user report", "user.php?id=$course->id&amp;user=$user->id&amp;mode=$mode", "$user->id");
     $showroles = 1;
     include($CFG->dirroot.'/user/tabs.php');
 
-    get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
-
     switch ($mode) {
         case "grade":
             if (empty($CFG->grade_profilereport) or !file_exists($CFG->dirroot.'/grade/report/'.$CFG->grade_profilereport.'/lib.php')) {
             require_once $CFG->dirroot.'/grade/lib.php';
             require_once $CFG->dirroot.'/grade/report/'.$CFG->grade_profilereport.'/lib.php';
 
-            $course = $DB->get_record('course', array('id'=>required_param('id', PARAM_INT)));
             $functionname = 'grade_report_'.$CFG->grade_profilereport.'_profilereport';
             if (function_exists($functionname)) {
                 $functionname($course, $user);
             }
 
             // MDL-10818, do not display broken graph when user has no permission to view graph
-            if (has_capability('coursereport/stats:view', get_context_instance(CONTEXT_COURSE, $id)) ||
-                ($course->showreports and $USER->id == $user->id)) {
+            if ($myreports or has_capability('coursereport/stats:view', $coursecontext)) {
                 echo '<center><img src="'.$CFG->wwwroot.'/course/report/stats/graph.php?mode='.STATS_MODE_DETAILED.'&course='.$course->id.'&time='.$time.'&report='.STATS_REPORT_USER_VIEW.'&userid='.$user->id.'" alt="'.get_string('statisticsgraph').'" /></center>';
             }
 
             }
             print_table($table);
             break;
+
         case "outline" :
         case "complete" :
-        default:
+            get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
             $sections = get_all_sections($course->id);
 
             for ($i=0; $i<=$course->numsections; $i++) {
                 }
             }
             break;
+        default:
+            // can not be reached ;-)
     }
 
 
index 721454522e09872781f4ed3b6a7109efdb695e67..9c86fed15012f27ad545e8cd2b180007f2a42eee 100644 (file)
@@ -2,6 +2,7 @@
 
 $string['log:view'] = 'View course logs';
 $string['log:viewlive'] = 'View live logs';
+$string['log:viewtoday'] = 'View today\'s logs';
 
 $string['loglive'] = 'Live logs';
 
index 4d28daa7945eff3a2e9d5c425f0ca8f91eb6f12d..842348bb489dac54e9e59cd72e57046be2bdc933 100644 (file)
             $toprow[] = new tabobject('notes', $CFG->wwwroot.'/notes/index.php?course='.$course->id . '&amp;user=' . $user->id, get_string('notes', 'notes'));
         }
 
-    /// Current user must be teacher of the course or the course allows user to view their reports
+    /// Find out if user allowed to see all reports of this user (usually parent) or individual course reports
 
-    //print_object($course);
-    //print_object($user);
+        $myreports  = ($course->showreports and $USER->id == $user->id);
+        $anyreport  = has_capability('moodle/user:viewuseractivitiesreport', $personalcontext);
 
-        // add in logic to check course read report
-        if (has_capability('moodle/user:viewuseractivitiesreport', $personalcontext) || ($course->showreports and $USER->id == $user->id) || has_capability('moodle/user:viewuseractivitiesreport', $coursecontext)) {
+        $secondrow = array();
 
-            $toprow[] = new tabobject('reports', $CFG->wwwroot.'/course/user.php?id='.$course->id.
-                                      '&amp;user='.$user->id.'&amp;mode=outline', get_string('activityreports'));
+        if ($myreports or $anyreport or has_capability('coursereport/outline:view', $coursecontext)) {
+            $secondrow[] = new tabobject('outline', $CFG->wwwroot.'/course/user.php?id='.$course->id.
+                                         '&amp;user='.$user->id.'&amp;mode=outline', get_string('outlinereport'));
+        }
 
-            if (in_array($currenttab, array('outline', 'complete', 'todaylogs', 'alllogs', 'stats', 'grade'))) {
-                $inactive = array('reports');
-                $activetwo = array('reports');
+        if ($myreports or $anyreport or has_capability('coursereport/outline:view', $coursecontext)) {
+            $secondrow[] = new tabobject('complete', $CFG->wwwroot.'/course/user.php?id='.$course->id.
+                                         '&amp;user='.$user->id.'&amp;mode=complete', get_string('completereport'));
+        }
 
-                $secondrow = array();
-                $secondrow[] = new tabobject('outline', $CFG->wwwroot.'/course/user.php?id='.$course->id.
-                                          '&amp;user='.$user->id.'&amp;mode=outline', get_string('outlinereport'));
-                $secondrow[] = new tabobject('complete', $CFG->wwwroot.'/course/user.php?id='.$course->id.
-                                          '&amp;user='.$user->id.'&amp;mode=complete', get_string('completereport'));
-                $secondrow[] = new tabobject('todaylogs', $CFG->wwwroot.'/course/user.php?id='.$course->id.
-                                          '&amp;user='.$user->id.'&amp;mode=todaylogs', get_string('todaylogs'));
-                $secondrow[] = new tabobject('alllogs', $CFG->wwwroot.'/course/user.php?id='.$course->id.
-                                          '&amp;user='.$user->id.'&amp;mode=alllogs', get_string('alllogs'));
-                if (!empty($CFG->enablestats)) {
-                    $secondrow[] = new tabobject('stats',$CFG->wwwroot.'/course/user.php?id='.$course->id.
-                                                 '&amp;user='.$user->id.'&amp;mode=stats',get_string('stats'));
-                }
+        if ($myreports or $anyreport or has_capability('coursereport/log:viewtoday', $coursecontext)) {
+            $secondrow[] = new tabobject('todaylogs', $CFG->wwwroot.'/course/user.php?id='.$course->id.
+                                         '&amp;user='.$user->id.'&amp;mode=todaylogs', get_string('todaylogs'));
+        }
 
-                if ($course->showgrades) {
-                    $secondrow[] = new tabobject('grade', $CFG->wwwroot.'/course/user.php?id='.$course->id.
-                                          '&amp;user='.$user->id.'&amp;mode=grade', get_string('grade'));
-                }
+        if ($myreports or $anyreport or has_capability('coursereport/log:view', $coursecontext)) {
+            $secondrow[] = new tabobject('alllogs', $CFG->wwwroot.'/course/user.php?id='.$course->id.
+                                         '&amp;user='.$user->id.'&amp;mode=alllogs', get_string('alllogs'));
+        }
 
+        if (!empty($CFG->enablestats)) {
+            if ($myreports or $anyreport or has_capability('coursereport/stats:view', $coursecontext)) {
+                $secondrow[] = new tabobject('stats',$CFG->wwwroot.'/course/user.php?id='.$course->id.
+                                             '&amp;user='.$user->id.'&amp;mode=stats',get_string('stats'));
             }
+        }
+
+        if (has_capability('moodle/grade:viewall', $coursecontext)) {
+            //ok - can view all course grades
+            $gradeaccess = true;
 
+        } else if ($course->showgrades and $user->id == $USER->id and has_capability('moodle/grade:view', $coursecontext)) {
+            //ok - can view own grades
+            $gradeaccess = true;
+
+        } else if ($course->showgrades and has_capability('moodle/grade:viewall', $personalcontext)) {
+            // ok - can view grades of this user - parent most probably
+            $gradeaccess = true;
+
+        } else {
+            $gradeaccess = false;
         }
 
+        if ($gradeaccess) {
+            $secondrow[] = new tabobject('grade', $CFG->wwwroot.'/course/user.php?id='.$course->id.
+                                         '&amp;user='.$user->id.'&amp;mode=grade', get_string('grade'));
+        }
+
+        if ($secondrow) {
+            $toprow[] = new tabobject('reports', $CFG->wwwroot.'/course/user.php?id='.$course->id.
+                                      '&amp;user='.$user->id.'&amp;mode=outline', get_string('activityreports'));
+            if (in_array($currenttab, array('outline', 'complete', 'todaylogs', 'alllogs', 'stats', 'grade'))) {
+                $inactive  = array('reports');
+                $activetwo = array('reports');
+            } else {
+                $secondrow = array();
+            }
+        }
     }    //close last bracket (individual tags)
 
 
index 94307950913b8eec1848cec8551e39a170d3ae60..c672ba7105258191678011c3ecfa4ff3d872b4c9 100644 (file)
@@ -6,7 +6,7 @@
 // This is compared against the values stored in the database to determine
 // whether upgrades should be performed (see lib/db/*.php)
 
-    $version = 2008112902;  // YYYYMMDD   = date of the last version bump
+    $version = 2008113000;  // YYYYMMDD   = date of the last version bump
                             //         XX = daily increments
 
     $release = '2.0 dev (Build: 20081128)';  // Human-friendly version name