MDL-48660 Availability: filter_user_list() should respect 'view hidden'
Updated filter_user_list to account for the viewhiddenactivities and viewhiddensections capabilities.
This commit is contained in:
@@ -608,12 +608,34 @@ abstract class info {
|
||||
}
|
||||
$tree = $this->get_availability_tree();
|
||||
$checker = new capability_checker($this->get_context());
|
||||
|
||||
// Filter using availability tree.
|
||||
$this->modinfo = get_fast_modinfo($this->get_course());
|
||||
$result = $tree->filter_user_list($users, false, $this, $checker);
|
||||
$filtered = $tree->filter_user_list($users, false, $this, $checker);
|
||||
$this->modinfo = null;
|
||||
|
||||
// Include users in the result if they're either in the filtered list,
|
||||
// or they have viewhidden. This logic preserves ordering of the
|
||||
// passed users array.
|
||||
$result = array();
|
||||
$canviewhidden = $checker->get_users_by_capability($this->get_view_hidden_capability());
|
||||
foreach ($users as $userid => $data) {
|
||||
if (array_key_exists($userid, $filtered) || array_key_exists($userid, $canviewhidden)) {
|
||||
$result[$userid] = $users[$userid];
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the capability used to view hidden activities/sections (as
|
||||
* appropriate).
|
||||
*
|
||||
* @return string Name of capability used to view hidden items of this type
|
||||
*/
|
||||
protected abstract function get_view_hidden_capability();
|
||||
|
||||
/**
|
||||
* Formats the $cm->availableinfo string for display. This includes
|
||||
* filling in the names of any course-modules that might be mentioned.
|
||||
|
||||
@@ -109,6 +109,10 @@ class info_module extends info {
|
||||
return parent::filter_user_list($filtered);
|
||||
}
|
||||
|
||||
protected function get_view_hidden_capability() {
|
||||
return 'moodle/course:viewhiddenactivities';
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if an activity is visible to the given user.
|
||||
*
|
||||
|
||||
@@ -56,6 +56,10 @@ class info_section extends info {
|
||||
return \context_course::instance($this->get_course()->id);
|
||||
}
|
||||
|
||||
protected function get_view_hidden_capability() {
|
||||
return 'moodle/course:viewhiddensections';
|
||||
}
|
||||
|
||||
protected function set_in_database($availability) {
|
||||
global $DB;
|
||||
$DB->set_field('course_sections', 'availability', $availability,
|
||||
|
||||
@@ -139,7 +139,8 @@ abstract class tree_node {
|
||||
|
||||
/**
|
||||
* Tests this condition against a user list. Users who do not meet the
|
||||
* condition will be removed from the list.
|
||||
* condition will be removed from the list, unless they have the ability
|
||||
* to view hidden activities/sections.
|
||||
*
|
||||
* This function must be implemented if is_applied_to_user_lists returns
|
||||
* true. Otherwise it will not be called.
|
||||
@@ -150,6 +151,10 @@ abstract class tree_node {
|
||||
* Within this function, if you need to check capabilities, please use
|
||||
* the provided checker which caches results where possible.
|
||||
*
|
||||
* Conditions do not need to check the viewhiddenactivities or
|
||||
* viewhiddensections capabilities. These are handled by
|
||||
* core_availability\info::filter_user_list.
|
||||
*
|
||||
* @param array $users Array of userid => object
|
||||
* @param bool $not True if this condition is applying in negative mode
|
||||
* @param \core_availability\info $info Item we're checking
|
||||
|
||||
Reference in New Issue
Block a user