From 6dfb7f0eca0bb36a462553ac7acc7b50c73b3595 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Mon, 2 Nov 2015 14:47:15 +0800 Subject: [PATCH 1/2] MDL-51486 mod_data: Can view rating information. When students are given the appropriate permissions to view ratings, in the situation where there are separate groups. The students can view the ratings of an entry that is in the all participants group. --- mod/data/lib.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mod/data/lib.php b/mod/data/lib.php index 5f071b99614..77c3f1577aa 100644 --- a/mod/data/lib.php +++ b/mod/data/lib.php @@ -1545,6 +1545,11 @@ function mod_data_rating_can_see_item_ratings($params) { throw new rating_exception('invaliditemid'); } + // User can see ratings of all participants. + if ($info->groupid == 0) { + return true; + } + $course = $DB->get_record('course', array('id' => $info->course), '*', MUST_EXIST); $cm = get_coursemodule_from_instance('data', $info->dataid, $course->id, false, MUST_EXIST); From 5c31064d5ef06c4b7a478e323852b01f6f2e4881 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Wed, 4 Nov 2015 10:08:06 +0800 Subject: [PATCH 2/2] MDL-51486 mod_data: Unit test update for item ratings. Additional checks that access is available for item ratings on records that have a group id of zero (all participants). --- mod/data/tests/lib_test.php | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/mod/data/tests/lib_test.php b/mod/data/tests/lib_test.php index fbd744c5c68..e96642ff9ca 100644 --- a/mod/data/tests/lib_test.php +++ b/mod/data/tests/lib_test.php @@ -281,6 +281,16 @@ class mod_data_lib_testcase extends advanced_testcase { $field->define_field($fielddetail); $field->insert_field(); + + // Add a record with a group id of zero (all participants). + $recordid1 = data_add_record($data, 0); + + $datacontent = array(); + $datacontent['fieldid'] = $field->field->id; + $datacontent['recordid'] = $recordid1; + $datacontent['content'] = 'Obelix'; + $DB->insert_record('data_content', $datacontent); + $recordid = data_add_record($data, $group1->id); $datacontent = array(); @@ -291,30 +301,46 @@ class mod_data_lib_testcase extends advanced_testcase { // Now try to access it as various users. unassign_capability('moodle/site:accessallgroups', $role->id); + // Eveyone should have access to the record with the group id of zero. + $params1 = array('contextid' => 2, + 'component' => 'mod_data', + 'ratingarea' => 'entry', + 'itemid' => $recordid1, + 'scaleid' => 2); + $params = array('contextid' => 2, 'component' => 'mod_data', 'ratingarea' => 'entry', 'itemid' => $recordid, 'scaleid' => 2); + $this->setUser($user1); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); $this->setUser($user2); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); $this->setUser($user3); $this->assertFalse(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); $this->setUser($user4); $this->assertFalse(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); // Now try with accessallgroups cap and make sure everything is visible. assign_capability('moodle/site:accessallgroups', CAP_ALLOW, $role->id, $context->id); $this->setUser($user1); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); $this->setUser($user2); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); $this->setUser($user3); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); $this->setUser($user4); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); // Change group mode and verify visibility. $course->groupmode = VISIBLEGROUPS; @@ -322,12 +348,16 @@ class mod_data_lib_testcase extends advanced_testcase { unassign_capability('moodle/site:accessallgroups', $role->id); $this->setUser($user1); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); $this->setUser($user2); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); $this->setUser($user3); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); $this->setUser($user4); $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); + $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); } }