From cf0cad920c501998d97175bd5d673f3902337ba2 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Wed, 30 Jan 2019 15:07:58 +0100 Subject: [PATCH] MDL-64444 mod_assign: Use correct permissions for context locking Some WebServices does not use the correct permissions. This mean that when a context is locked, they don't behave as expected. --- mod/assign/externallib.php | 5 +++-- mod/assign/tests/externallib_test.php | 13 ++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/mod/assign/externallib.php b/mod/assign/externallib.php index ad761dca3d9..0bd6ab13831 100644 --- a/mod/assign/externallib.php +++ b/mod/assign/externallib.php @@ -115,7 +115,8 @@ class mod_assign_external extends external_api { try { $context = context_module::instance($cm->id); self::validate_context($context); - require_capability('mod/assign:grade', $context); + $assign = new assign($context, null, null); + $assign->require_view_grades(); } catch (Exception $e) { $requestedassignmentids = array_diff($requestedassignmentids, array($cm->instance)); $warning = array(); @@ -734,8 +735,8 @@ class mod_assign_external extends external_api { try { $context = context_module::instance($cm->id); self::validate_context($context); - require_capability('mod/assign:grade', $context); $assign = new assign($context, null, null); + $assign->require_view_grades(); $assigns[] = $assign; } catch (Exception $e) { $warnings[] = array( diff --git a/mod/assign/tests/externallib_test.php b/mod/assign/tests/externallib_test.php index f4dbf084c78..8692881f016 100644 --- a/mod/assign/tests/externallib_test.php +++ b/mod/assign/tests/externallib_test.php @@ -61,7 +61,7 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $context = context_course::instance($course->id); $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id, 3); $context = context_module::instance($assign->cmid); - $this->assignUserCapability('mod/assign:grade', $context->id, $roleid); + $this->assignUserCapability('mod/assign:viewgrades', $context->id, $roleid); // Create the teacher's enrolment record. $userenrolmentdata['status'] = 0; @@ -434,6 +434,17 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $this->assertEquals($sid, $submission['id']); $this->assertCount(1, $submission['plugins']); $this->assertEquals('notgraded', $submission['gradingstatus']); + + // Test locking the context. + set_config('contextlocking', 1); + $context = context_course::instance($course1->id); + $context->set_locked(true); + + $this->setUser($teacher); + $assignmentids[] = $assign1->id; + $result = mod_assign_external::get_submissions($assignmentids); + $result = external_api::clean_returnvalue(mod_assign_external::get_submissions_returns(), $result); + $this->assertEquals(1, count($result['assignments'])); } /**