From 93882c673e3be57e899f354b754745476f70f84b Mon Sep 17 00:00:00 2001 From: Michael de Raadt Date: Mon, 9 Apr 2018 08:39:21 +1000 Subject: [PATCH] CONTRIB-7244 block_completion_progress: Hide excluded activities for users --- block_completion_progress.php | 6 ++++-- lib.php | 31 ++++++++++++++++++++++++++++++- overview.php | 3 ++- version.php | 2 +- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/block_completion_progress.php b/block_completion_progress.php index 6a6ef9a..2919ced 100644 --- a/block_completion_progress.php +++ b/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'); diff --git a/lib.php b/lib.php index 93ed463..a5ca5fb 100644 --- a/lib.php +++ b/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; +} \ No newline at end of file diff --git a/overview.php b/overview.php index 227a5b4..e73daef 100644 --- a/overview.php +++ b/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, diff --git a/version.php b/version.php index bae1907..7b4b8c4 100644 --- a/version.php +++ b/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';