MDL-18094: course/viewhiddenactivities didn't work (in some parts of the code) at module level

This commit is contained in:
sam_marshall
2009-04-02 16:32:37 +00:00
parent 71bf0e07aa
commit 04e43cfc7e
2 changed files with 25 additions and 10 deletions
+18 -8
View File
@@ -3558,21 +3558,31 @@ function fetch_context_capabilities($context) {
$cm = get_record('course_modules', 'id', $context->instanceid);
$module = get_record('modules', 'id', $cm->module);
$extra = "";
$modfile = "$CFG->dirroot/mod/$module->name/lib.php";
if (file_exists($modfile)) {
include_once($modfile);
$modfunction = $module->name.'_get_extra_capabilities';
if (function_exists($modfunction)) {
if ($extracaps = $modfunction()) {
foreach ($extracaps as $key=>$value) {
$extracaps[$key]= "'$value'";
}
$extra = implode(',', $extracaps);
$extra = "OR name IN ($extra)";
}
$extracaps = $modfunction();
}
}
if(empty($extracaps)) {
$extracaps = array();
}
// All modules allow viewhiddenactivities. This is so you can hide
// the module then override to allow specific roles to see it.
// The actual check is in course page so not module-specific
$extracaps[]="moodle/course:viewhiddenactivities";
if (count($extracaps) == 1) {
$extra = "OR name = '".reset($extracaps)."'";
} else {
foreach ($extracaps as $key=>$value) {
$extracaps[$key]= "'$value'";
}
$extra = implode(',', $extracaps);
$extra = "OR name IN ($extra)";
}
$SQL = "SELECT *
FROM {$CFG->prefix}capabilities
+7 -2
View File
@@ -1986,10 +1986,15 @@ function require_login($courseorid=0, $autologinguest=true, $cm=null, $setwantsu
print_error('nocontext');
}
}
if (!empty($cm) && !isset($cm->context)) {
if ( ! $cm->context = get_context_instance(CONTEXT_MODULE, $cm->id) ) {
print_error('nocontext');
}
}
if ($COURSE->id == SITEID) {
/// Eliminate hidden site activities straight away
if (!empty($cm) && !$cm->visible
&& !has_capability('moodle/course:viewhiddenactivities', $COURSE->context)) {
&& !has_capability('moodle/course:viewhiddenactivities', $cm->context)) {
redirect($CFG->wwwroot, get_string('activityiscurrentlyhidden'));
}
user_accesstime_log($COURSE->id); /// Access granted, update lastaccess times
@@ -2080,7 +2085,7 @@ function require_login($courseorid=0, $autologinguest=true, $cm=null, $setwantsu
/// Make sure they can read this activity too, if specified
if (!empty($cm) and !$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $COURSE->context)) {
if (!empty($cm) and !$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $cm->context)) {
redirect($CFG->wwwroot.'/course/view.php?id='.$cm->course, get_string('activityiscurrentlyhidden'));
}
user_accesstime_log($COURSE->id); /// Access granted, update lastaccess times