Browse Source

CONTRIB-7244 block_completion_progress: Hide excluded activities for users

master 2018040900
Michael de Raadt 7 years ago
parent
commit
93882c673e
  1. 6
      block_completion_progress.php
  2. 31
      lib.php
  3. 3
      overview.php
  4. 2
      version.php

6
block_completion_progress.php

@ -157,11 +157,12 @@ class block_completion_progress extends block_base {
$context = CONTEXT_COURSE::instance($course->id);
$params = array('contextid' => $context->id, 'pagetype' => 'course-view-%');
$blockinstances = $DB->get_records_sql($sql, $params);
$exclusions = block_completion_progress_exclusions($course->id);
foreach ($blockinstances as $blockid => $blockinstance) {
$blockinstance->config = unserialize(base64_decode($blockinstance->configdata));
$blockinstance->activities = block_completion_progress_get_activities($course->id, $blockinstance->config);
$blockinstance->activities = block_completion_progress_filter_visibility($blockinstance->activities,
$USER->id, $course->id);
$USER->id, $course->id, $exclusions);
$blockcontext = CONTEXT_BLOCK::instance($blockid);
if (
!has_capability('block/completion_progress:showbar', $blockcontext) ||
@ -240,8 +241,9 @@ class block_completion_progress extends block_base {
}
// Check if any activities/resources have been created.
$exclusions = block_completion_progress_exclusions($COURSE->id);
$activities = block_completion_progress_get_activities($COURSE->id, $this->config);
$activities = block_completion_progress_filter_visibility($activities, $USER->id, $COURSE->id);
$activities = block_completion_progress_filter_visibility($activities, $USER->id, $COURSE->id, $exclusions);
if (empty($activities)) {
if (has_capability('moodle/block:edit', $this->context)) {
$this->content->text .= get_string('no_activities_config_message', 'block_completion_progress');

31
lib.php

@ -253,9 +253,10 @@ function block_completion_progress_compare_times($a, $b) {
* @param array $activities The possible activities that can occur for modules
* @param array $userid The user's id
* @param string $courseid the course for filtering visibility
* @param array $exclusions Assignment exemptions for students in the course
* @return array The array with restricted activities removed
*/
function block_completion_progress_filter_visibility($activities, $userid, $courseid) {
function block_completion_progress_filter_visibility($activities, $userid, $courseid, $exclusions) {
global $CFG;
$filteredactivities = array();
$modinfo = get_fast_modinfo($courseid, $userid);
@ -294,6 +295,11 @@ function block_completion_progress_filter_visibility($activities, $userid, $cour
}
}
// Check for exclusions.
if (in_array($activity['type'].'-'.$activity['instance'].'-'.$userid, $exclusions)) {
continue;
}
// Save the visible event.
$filteredactivities[] = $activity;
}
@ -622,3 +628,26 @@ function block_completion_progress_on_site_page() {
return $SCRIPT === '/my/index.php' || $COURSE->id == 1;
}
/**
* Finds gradebook exclusions for students in a course
*
* @param int $courseid The ID of the course containing grade items
* @return array of exclusions as activity-user pairs
*/
function block_completion_progress_exclusions ($courseid) {
global $DB;
$query = "SELECT g.id, ". $DB->sql_concat('i.itemmodule', "'-'", 'i.iteminstance', "'-'", 'g.userid') ." as exclusion
FROM {grade_grades} g, {grade_items} i
WHERE i.courseid = :courseid
AND i.id = g.itemid
AND g.excluded <> 0";
$params = array ('courseid' => $courseid);
$results = $DB->get_records_sql($query, $params);
$exclusions = array();
foreach ($results as $key => $value) {
$exclusions[] = $value->exclusion;
}
return $exclusions;
}

3
overview.php

@ -253,6 +253,7 @@ if ($sortbyprogress) {
// Build array of user information.
$rows = array();
$exclusions = block_completion_progress_exclusions($course->id);
for ($i = $startuser; $i < $enduser; $i++) {
$picture = $OUTPUT->user_picture($users[$i], array('course' => $course->id));
$namelink = html_writer::link($CFG->wwwroot.'/user/view.php?id='.$users[$i]->id.'&course='.$course->id, fullname($users[$i]));
@ -261,7 +262,7 @@ for ($i = $startuser; $i < $enduser; $i++) {
} else {
$lastonline = userdate($users[$i]->lastonlinetime);
}
$useractivities = block_completion_progress_filter_visibility($activities, $users[$i]->id, $course->id);
$useractivities = block_completion_progress_filter_visibility($activities, $users[$i]->id, $course->id, $exclusions);
if (!empty($useractivities)) {
$completions = block_completion_progress_completions($useractivities, $users[$i]->id, $course, $users[$i]->submissions);
$progressbar = block_completion_progress_bar($useractivities, $completions, $config, $users[$i]->id, $course->id,

2
version.php

@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die;
$plugin->version = 2018021000;
$plugin->version = 2018040900;
$plugin->requires = 2014111100; // Moodle 2.8.
$plugin->maturity = MATURITY_STABLE;
$plugin->release = 'Version for Moodle 2.8 onwards';

Loading…
Cancel
Save