From: skodak Date: Fri, 25 Aug 2006 20:12:12 +0000 (+0000) Subject: Many bugs and typos fixed in capabilitties and legacy isteacher() and similar functi... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=9425b25f46c6d789b14aa63cb16399b4ea07bf84;p=moodle.git Many bugs and typos fixed in capabilitties and legacy isteacher() and similar functions - not many lines changed but it was a looong coding day. 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. --- diff --git a/lib/accesslib.php b/lib/accesslib.php index 28463b5447..a08fb2795e 100755 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -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 diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 3718b41b60..2e8808900e 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -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) {