diff --git a/mod/lti/lib.php b/mod/lti/lib.php index b75f0aa4a1b..4a8d1edc360 100644 --- a/mod/lti/lib.php +++ b/mod/lti/lib.php @@ -240,7 +240,12 @@ function lti_get_course_content_items(\core_course\local\entity\content_item $de $types = []; + // Use of a tool type, whether site or course level, is controlled by the following cap. + if (!has_capability('mod/lti:addpreconfiguredinstance', \core\context\course::instance($course->id), $user)) { + return $types; + } $preconfiguredtools = lti_get_configured_types($course->id, $defaultmodulecontentitem->get_link()->param('sr')); + foreach ($preconfiguredtools as $preconfiguredtool) { // Append the help link to the help text. diff --git a/mod/lti/tests/lib_test.php b/mod/lti/tests/lib_test.php index 2cd1acb6e8c..d8173017769 100644 --- a/mod/lti/tests/lib_test.php +++ b/mod/lti/tests/lib_test.php @@ -435,6 +435,13 @@ class lib_test extends \advanced_testcase { $this->assertContains($course2toolrecord->id + 1, $ids); $this->assertNotContains($sitetoolrecordnonchooser->id + 1, $ids); + // Removing the capability to use preconfigured (site or course level) tools, should result in no content items. + $teacherrole = $DB->get_record('role', array('shortname' => 'editingteacher')); + assign_capability('mod/lti:addpreconfiguredinstance', CAP_PROHIBIT, $teacherrole->id, + \core\context\course::instance($course2->id)); + $course2items = lti_get_course_content_items($defaultmodulecontentitem, $teacher2, $course2); + $this->assertCount(0, $course2items); + // When fetching all content items, we expect to see all items available in activity choosers (in any course). $this->setAdminUser(); $allitems = mod_lti_get_all_content_items($defaultmodulecontentitem);