]> git.mjollnir.org Git - moodle.git/commitdiff
Many bugs and typos fixed in capabilitties and legacy isteacher() and similar functi...
authorskodak <skodak>
Fri, 25 Aug 2006 20:12:12 +0000 (20:12 +0000)
committerskodak <skodak>
Fri, 25 Aug 2006 20:12:12 +0000 (20:12 +0000)
Roles and capabilities should be usable now and old unconverted code should work too :-D

Tested only in fresh installation - admin, teacher and student roles should sort of work.

lib/accesslib.php
lib/moodlelib.php

index 28463b5447716c26df3b3d43bf4f97ed487107c8..a08fb2795e3a2f877cde5fa02934cfbb61ac9be6 100755 (executable)
@@ -118,12 +118,16 @@ function has_capability($capability, $context=NULL, $userid=NULL) {
 
     global $USER, $CONTEXT;
 
-    if ($userid && $userid != $USER->id) { // loading other user's capability
-        $capabilities = load_user_capability($capability, $context, $userid);
-    } else {
-        $capabilities = empty($USER->capabilities) ? NULL : $USER->capabilities;  
+    if ($userid) {
+        if (empty($USER->id) or ($userid != $USER->id)) {
+            $capabilities = load_user_capability($capability, $context, $userid);
+        } else { //$USER->id == $userid
+            $capabilities = empty($USER->capabilities) ? NULL : $USER->capabilities;
+        }
+    } else { // no userid
+        $capabilities = empty($USER->capabilities) ? NULL : $USER->capabilities;
     }
-    
+
     if (empty($context)) {                 // Use default CONTEXT if none specified
         if (empty($CONTEXT)) {
             return false;
@@ -139,7 +143,7 @@ function has_capability($capability, $context=NULL, $userid=NULL) {
     // Check site
     $sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
     if (isset($capabilities[$sitecontext->id]['moodle/site:doanything'])) {
-        return ($capabilities[$sitecontext->id]['moodle/site:doanything']);
+        return (0 < $capabilities[$sitecontext->id]['moodle/site:doanything']);
     }
     
     switch ($context->aggregatelevel) {
@@ -149,7 +153,7 @@ function has_capability($capability, $context=NULL, $userid=NULL) {
             $parentcats = get_parent_cats($context, CONTEXT_COURSECAT);
             foreach ($parentcats as $parentcat) {
                 if (isset($capabilities[$parentcat]['moodle/site:doanything'])) {
-                    return ($capabilities[$parentcat]['moodle/site:doanything']);
+                    return (0 < $capabilities[$parentcat]['moodle/site:doanything']);
                 }
             }
         break;
@@ -160,8 +164,8 @@ function has_capability($capability, $context=NULL, $userid=NULL) {
 
             foreach ($parentcats as $parentcat) {
                 if (isset($capabilities[$parentcat]['do_anything'])) {
-                    return ($capabilities[$parentcat]['do_anything']);
-                }      
+                    return (0 < $capabilities[$parentcat]['do_anything']);
+                }
             }
         break;
 
@@ -169,36 +173,36 @@ function has_capability($capability, $context=NULL, $userid=NULL) {
             // Find course.
             $group = get_record('groups','id',$context->instanceid);
             $courseinstance = get_context_instance(CONTEXT_COURSE, $group->courseid);
-            
-            $parentcats = get_parent_cats($courseinstance->id, CONTEXT_COURSE);
+
+            $parentcats = get_parent_cats($courseinstance, CONTEXT_COURSE);
             foreach ($parentcats as $parentcat) {
                 if (isset($capabilities[$parentcat->id]['do_anything'])) {
-                    return ($capabilities[$parentcat->id]['do_anything']);
-                }      
-            }    
-            
+                    return (0 < $capabilities[$parentcat->id]['do_anything']);
+                }
+            }
+
             $coursecontext = '';
             if (isset($capabilities[$courseinstance->id]['do_anything'])) {
-                return ($capabilities[$courseinstance->id]['do_anything']);
-            }            
-            
+                return (0 < $capabilities[$courseinstance->id]['do_anything']);
+            }
+
         break;
 
         case CONTEXT_MODULE:
             // Find course.
             $cm = get_record('course_modules', 'id', $context->instanceid);
             $courseinstance = get_context_instance(CONTEXT_COURSE, $cm->course);
-        
-            if ($parentcats = get_parent_cats($courseinstance->id, CONTEXT_COURSE)) {
+
+            if ($parentcats = get_parent_cats($courseinstance, CONTEXT_COURSE)) {
                 foreach ($parentcats as $parentcat) {
                     if (isset($capabilities[$parentcat]['do_anything'])) {
-                        return ($capabilities[$parentcat]['do_anything']);
+                        return (0 < $capabilities[$parentcat]['do_anything']);
                     }
-                }    
-            }    
+                }
+            }
 
             if (isset($capabilities[$courseinstance->id]['do_anything'])) {
-                return ($capabilities[$courseinstance->id]['do_anything']);
+                return (0 < $capabilities[$courseinstance->id]['do_anything']);
             }
 
         break;
@@ -208,16 +212,16 @@ function has_capability($capability, $context=NULL, $userid=NULL) {
             // Find course.
             $block = get_record('block_instance','id',$context->instanceid);
             $courseinstance = get_context_instance(CONTEXT_COURSE, $block->pageid); // needs check
-            
-            $parentcats = get_parent_cats($courseinstance->id, CONTEXT_COURSE);
+
+            $parentcats = get_parent_cats($courseinstance, CONTEXT_COURSE);
             foreach ($parentcats as $parentcat) {
                 if (isset($capabilities[$parentcat]['do_anything'])) {
-                    return ($capabilities[$parentcat]['do_anything']);
+                    return (0 < $capabilities[$parentcat]['do_anything']);
                 }
             }
-            
+
             if (isset($capabilities[$courseinstance->id]['do_anything'])) {
-                return ($capabilities[$courseinstance->id]['do_anything']);
+                return (0 < $capabilities[$courseinstance->id]['do_anything']);
             }
         break;
 
@@ -229,13 +233,13 @@ function has_capability($capability, $context=NULL, $userid=NULL) {
 
     // Last: check self.
     if (isset($capabilities[$context->id]['do_anything'])) {
-        return ($capabilities[$context->id]['do_anything']);
+        return (0 < $capabilities[$context->id]['do_anything']);
     }
-    
+
     // do_anything has not been set, we now look for it the normal way.
-    return capability_search($capability, $context, $capabilities);
+    return (0 < capability_search($capability, $context, $capabilities));
 
-}    
+}
 
 
 /**
@@ -249,17 +253,17 @@ function has_capability($capability, $context=NULL, $userid=NULL) {
 function capability_search($capability, $context, $capabilities) {
     global $USER, $CFG;
 
-    if ($CFG->debug > 7) {
-        notify("Looking for $capability in context $context->id", 'notifytiny');
-    }
-    
+
     if (isset($capabilities[$context->id][$capability])) {
+        if ($CFG->debug > 15) {
+            notify("Found $capability in context $context->id at level $context->aggregatelevel: ".$capabilities[$context->id][$capability], 'notifytiny');
+        }
         return ($capabilities[$context->id][$capability]);
     }
-    
+
     /* Then, we check the cache recursively */
-    $permission = 0;    
-    
+    $permission = 0;
+
     switch ($context->aggregatelevel) {
 
         case CONTEXT_SYSTEM: // by now it's a definite an inherit
@@ -270,12 +274,12 @@ function capability_search($capability, $context, $capabilities) {
             $parentcontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
             $permission = capability_search($capability, $parentcontext, $capabilities);
         break;
-        
+
         case CONTEXT_USERID:
             $parentcontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
             $permission = capability_search($capability, $parentcontext, $capabilities);
         break;
-        
+
         case CONTEXT_COURSECAT: // Coursecat -> coursecat or site
             $coursecat = get_record('course_categories','id',$context->instanceid);
             if (!empty($coursecat->parent)) { // return parent value if it exists
@@ -315,7 +319,10 @@ function capability_search($capability, $context, $capabilities) {
             error ('This is an unknown context!');
         return false;
     }
-    
+    if ($CFG->debug > 15) {
+        notify("Found $capability recursively from context $context->id at level $context->aggregatelevel: $permission", 'notifytiny');
+    }
+
     return $permission;
 }
 
@@ -342,13 +349,13 @@ function load_user_capability($capability='', $context ='', $userid='') {
     if (empty($userid)) {
         $userid = $USER->id;
     } else {
-        $otheruserid = $userid;  
+        $otheruserid = $userid;
     }
-    
+
     if ($capability) {
-        $capsearch = ' AND rc.capability = '.$capability.' ';
+        $capsearch = " AND rc.capability = '$capability' ";
     } else {
-        $capsearch ='';  
+        $capsearch ="";  
     }
     // First we generate a list of all relevant contexts of the user
 
index 3718b41b60ceb4de023db0dfe6fc02b928ea1c41..2e8808900efc683be760fc7d67f279491855ed91 100644 (file)
@@ -1969,8 +1969,7 @@ function isadmin($userid=0) {
 
     static $admins, $nonadmins;
 
-    if (isset($CFG->rolesactive) && $CFG->rolesactive == 1) {
-
+    if (!empty($CFG->rolesactive)) {
 
         $context = get_context_instance(CONTEXT_SYSTEM, SITEID);  
         
@@ -2026,18 +2025,21 @@ function isteacher($courseid=0, $userid=0, $includeadmin=true) {
 /// Is the user able to access this course as a teacher?
     global $USER, $CFG;
 
-    if (isset($CFG->rolesactive) && $CFG->rolesactive ===1) {   // should be always
+    if (!empty($CFG->rolesactive)) {
 
         if ($courseid == 0) {
             $context = get_context_instance(CONTEXT_SYSTEM, SITEID);  
         } else {
             $context = get_context_instance(CONTEXT_COURSE, $courseid);
         }
-    
+
         if (!$userid) {
-            return has_capability('moodle/legacy:teacher', $context);
+
+            return (has_capability('moodle/legacy:teacher', $context) 
+                    or has_capability('moodle/legacy:editingteacher', $context));
         } else {
-            return has_capability('moodle/legacy:teacher', $context, $userid);
+            return (has_capability('moodle/legacy:teacher', $context, $userid)
+                    or has_capability('moodle/legacy:editingteacher', $context, $userid));
         }  
     }
 
@@ -2113,22 +2115,21 @@ function isteacherinanycourse($userid=0, $includeadmin=true) {
  * @return boo
  */
 function isteacheredit($courseid, $userid=0, $ignorestudentview=false) {
-    global $USER;
-    
-    if (isset($CFG->rolesactive) && $CFG->rolesactive ===1) {
+    global $USER, $CFG;
+
+    if (!empty($CFG->rolesactive)) {
 
         if ($courseid == 0) {
             $context = get_context_instance(CONTEXT_SYSTEM, SITEID);  
         } else {
             $context = get_context_instance(CONTEXT_COURSE, $courseid);
         }
-        
+
         if (!$userid) {
-            return has_capability('moodle/legacy:edittingteacher', $context);
+            return has_capability('moodle/legacy:editingteacher', $context);
         } else {
-            return has_capability('moodle/legacy:edittingteacher', $context, false, $userid);
+            return has_capability('moodle/legacy:editingteacher', $context, $userid);
         }
-      
     }
     // we can't edit in studentview
     if (!empty($USER->studentview) and !$ignorestudentview) {
@@ -2160,20 +2161,16 @@ function isteacheredit($courseid, $userid=0, $ignorestudentview=false) {
  * @return bool
  */
 function iscreator ($userid=0) {
-    global $USER;
-    
-    if (isset($CFG->rolesactive) && $CFG->rolesactive ===1) {
+    global $USER, $CFG;
+
+    if (!empty($CFG->rolesactive)) {
+
+        $context = get_context_instance(CONTEXT_SYSTEM, SITEID);  
 
-        if ($courseid == 0) {
-            $context = get_context_instance(CONTEXT_SYSTEM, SITEID);  
-        } else {
-            $context = get_context_instance(CONTEXT_COURSE, $courseid);
-        }
-        
         if (!$userid) {
             return has_capability('moodle/legacy:coursecreator', $context);
         } else {
-            return has_capability('moodle/legacy:coursecreator', $context, false, $userid);
+            return has_capability('moodle/legacy:coursecreator', $context, $userid);
         }
       
     }
@@ -2205,21 +2202,20 @@ function iscreator ($userid=0) {
  */
 function isstudent($courseid, $userid=0) {
     global $USER, $CFG;
-    
-    if (isset($CFG->rolesactive) && $CFG->rolesactive ===1) {
+
+    if (!empty($CFG->rolesactive)) {
 
         if ($courseid == 0) {
             $context = get_context_instance(CONTEXT_SYSTEM, SITEID);  
         } else {
             $context = get_context_instance(CONTEXT_COURSE, $courseid);
         }
-        
+
         if (!$userid) {
             return has_capability('moodle/legacy:student', $context);
         } else {
-            return has_capability('moodle/legacy:student', $context, false, $userid);
+            return has_capability('moodle/legacy:student', $context, $userid);
         }
-      
     }
 
     if (empty($USER->id) and !$userid) {