From 2d95f7025898c401685dcbb3e49628a3df1460e5 Mon Sep 17 00:00:00 2001 From: toyomoyo Date: Mon, 6 Nov 2006 06:16:00 +0000 Subject: [PATCH] merged, fixing capabilities of block context --- lib/accesslib.php | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/lib/accesslib.php b/lib/accesslib.php index 06d309dd77..f68e87c518 100755 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -451,24 +451,31 @@ function has_capability($capability, $context=NULL, $userid=NULL, $doanything=tr break; case CONTEXT_BLOCK: - // 1 to 1 to course. - // Find course. + // not necessarily 1 to 1 to course. $block = get_record('block_instance','id',$context->instanceid); - $courseinstance = get_context_instance(CONTEXT_COURSE, $block->pageid); // needs check - - $parentcats = get_parent_cats($courseinstance, CONTEXT_COURSE); - foreach ($parentcats as $parentcat) { - if (isset($capabilities[$parentcat]['do_anything'])) { - $result = (0 < $capabilities[$parentcat]['do_anything']); + if ($block->pagetype == 'course-view') { + $courseinstance = get_context_instance(CONTEXT_COURSE, $block->pageid); // needs check + $parentcats = get_parent_cats($courseinstance, CONTEXT_COURSE); + + foreach ($parentcats as $parentcat) { + if (isset($capabilities[$parentcat]['do_anything'])) { + $result = (0 < $capabilities[$parentcat]['do_anything']); + $capcache[$cachekey] = $result; + return $result; + } + } + + if (isset($capabilities[$courseinstance->id]['do_anything'])) { + $result = (0 < $capabilities[$courseinstance->id]['do_anything']); + $capcache[$cachekey] = $result; + return $result; + } + } else { // if not course-view type of blocks, check site + if (isset($capabilities[$sitecontext->id]['do_anything'])) { + $result = (0 < $capabilities[$sitecontext->id]['do_anything']); $capcache[$cachekey] = $result; return $result; } - } - - if (isset($capabilities[$courseinstance->id]['do_anything'])) { - $result = (0 < $capabilities[$courseinstance->id]['do_anything']); - $capcache[$cachekey] = $result; - return $result; } break; @@ -561,9 +568,13 @@ function capability_search($capability, $context, $capabilities) { $permission = capability_search($capability, $parentcontext, $capabilities); break; - case CONTEXT_BLOCK: // 1 to 1 to course + case CONTEXT_BLOCK: // not necessarily 1 to 1 to course $block = get_record('block_instance','id',$context->instanceid); - $parentcontext = get_context_instance(CONTEXT_COURSE, $block->pageid); // needs check + if ($block->pagetype == 'course-view') { + $parentcontext = get_context_instance(CONTEXT_COURSE, $block->pageid); // needs check + } else { + $parentcontext = get_context_instance(CONTEXT_SYSTEM); + } $permission = capability_search($capability, $parentcontext, $capabilities); break; -- 2.39.5