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;
// 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) {
$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;
foreach ($parentcats as $parentcat) {
if (isset($capabilities[$parentcat]['do_anything'])) {
- return ($capabilities[$parentcat]['do_anything']);
- }
+ return (0 < $capabilities[$parentcat]['do_anything']);
+ }
}
break;
// 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;
// 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;
// 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));
-}
+}
/**
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
$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
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;
}
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
static $admins, $nonadmins;
- if (isset($CFG->rolesactive) && $CFG->rolesactive == 1) {
-
+ if (!empty($CFG->rolesactive)) {
$context = get_context_instance(CONTEXT_SYSTEM, SITEID);
/// 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));
}
}
* @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) {
* @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);
}
}
*/
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) {