Skip to content

Commit

Permalink
MDL-62815 mod_lti: adjust new capabilities
Browse files Browse the repository at this point in the history
MDL-62815 mod_lti: improve lang strings + use clonepermissionsfrom

MDL-62815 mod_lti: prevent changing from manual instance without cap
  • Loading branch information
davosmith committed Jan 8, 2020
1 parent e3b82ac commit 477e871
Show file tree
Hide file tree
Showing 9 changed files with 145 additions and 189 deletions.
14 changes: 8 additions & 6 deletions mod/lti/db/access.php
Expand Up @@ -91,24 +91,26 @@
)
),

// The ability to a globally preconfigured instance to the course.
'mod/lti:addgloballypreconfigedtoolinstance' => array(
// The ability to a preconfigured instance to the course.
'mod/lti:addpreconfiguredinstance' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_COURSE,
'archetypes' => array(
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
)
),
'clonepermissionsfrom' => 'mod/lti:addinstance',
),

// The ability to add a default instance (i.e. not from a preconfigured tool) to the course.
'mod/lti:adddefaultinstance' => array(
// The ability to add a manual instance (i.e. not from a preconfigured tool) to the course.
'mod/lti:addmanualinstance' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_COURSE,
'archetypes' => array(
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
)
),
'clonepermissionsfrom' => 'mod/lti:addinstance',
),

// The ability to request the administrator to configure a particular
Expand Down
8 changes: 4 additions & 4 deletions mod/lti/lang/en/lti.php
Expand Up @@ -210,7 +210,7 @@
If using this option, confirm that this Moodle site and the tool provider support SSL.';
$string['generaltool'] = 'General tool';
$string['global_tool_types'] = 'Global preconfigured tools';
$string['global_tool_types'] = 'Preconfigured tools';
$string['grading'] = 'Grade routing';
$string['icon_url'] = 'Icon URL';
$string['icon_url_help'] = 'The icon URL allows the icon that shows up in the course listing for this activity to be modified. Instead of using the default
Expand Down Expand Up @@ -254,10 +254,10 @@
$string['launchoptions'] = 'Launch options';
$string['leaveblank'] = 'Leave blank if you do not need them';
$string['lti'] = 'LTI';
$string['lti:adddefaultinstance'] = 'Add a non-globally-configured tool';
$string['lti:addgloballypreconfigedtoolinstance'] = 'Add a globally preconfigured tool';
$string['lti:addinstance'] = 'Add a new external tool';
$string['lti:addcoursetool'] = 'Add course-specific tool configurations';
$string['lti:addmanualinstance'] = 'Add a manually-configured tool';
$string['lti:addinstance'] = 'Add a new external tool';
$string['lti:addpreconfiguredinstance'] = 'Add a preconfigured tool';
$string['lti:grade'] = 'View grades returned by the external tool';
$string['lti:manage'] = 'Be an Instructor when the tool is launched';
$string['lti:admin'] = 'Be an administrator when the tool is launched';
Expand Down
6 changes: 1 addition & 5 deletions mod/lti/lib.php
Expand Up @@ -103,8 +103,6 @@ function lti_add_instance($lti, $mform) {
$lti->typeid = $lti->urlmatchedtypeid;
}

lti_require_type_access($lti);

if (!isset($lti->instructorchoiceacceptgrades) || $lti->instructorchoiceacceptgrades != LTI_SETTING_ALWAYS) {
// The instance does not accept grades back from the provider, so set to "No grade" value 0.
$lti->grade = 0;
Expand Down Expand Up @@ -167,8 +165,6 @@ function lti_update_instance($lti, $mform) {
$lti->typeid = $lti->urlmatchedtypeid;
}

lti_require_type_access($lti);

$completiontimeexpected = !empty($lti->completionexpected) ? $lti->completionexpected : null;
\core_completion\api::update_completion_date_event($lti->coursemodule, 'lti', $lti->id, $completiontimeexpected);

Expand Down Expand Up @@ -223,7 +219,7 @@ function lti_get_shortcuts($defaultitem) {
require_once($CFG->dirroot.'/mod/lti/locallib.php');

$types = lti_get_configured_types($COURSE->id, $defaultitem->link->param('sr'));
if (has_capability('mod/lti:adddefaultinstance', context_course::instance($COURSE->id))) {
if (has_capability('mod/lti:addmanualinstance', context_course::instance($COURSE->id))) {
$types[] = $defaultitem;
}

Expand Down
32 changes: 3 additions & 29 deletions mod/lti/locallib.php
Expand Up @@ -2130,10 +2130,10 @@ function lti_get_lti_types_by_course($courseid, $coursevisible = null) {

list($coursevisiblesql, $coursevisparams) = $DB->get_in_or_equal($coursevisible, SQL_PARAMS_NAMED, 'coursevisible');
$courseconds = [];
if (has_capability('mod/lti:adddefaultinstance', context_course::instance($courseid))) {
if (has_capability('mod/lti:addmanualinstance', context_course::instance($courseid))) {
$courseconds[] = "course = :courseid";
}
if (has_capability('mod/lti:addgloballypreconfigedtoolinstance', context_course::instance($courseid))) {
if (has_capability('mod/lti:addpreconfiguredinstance', context_course::instance($courseid))) {
$courseconds[] = "course = :siteid";
}
if (!$courseconds) {
Expand All @@ -2160,7 +2160,7 @@ function lti_get_types_for_add_instance() {
$admintypes = lti_get_lti_types_by_course($COURSE->id);

$types = array();
if (has_capability('mod/lti:adddefaultinstance', context_course::instance($COURSE->id))) {
if (has_capability('mod/lti:addmanualinstance', context_course::instance($COURSE->id))) {
$types[0] = (object)array('name' => get_string('automatic', 'lti'), 'course' => 0, 'toolproxyid' => null);
}

Expand Down Expand Up @@ -4261,29 +4261,3 @@ function lti_new_access_token($typeid, $scopes) {
return $newtoken;

}

/**
* Checks if user can add tool. Throws a capability exception otherwise.
* @param object $lti
* @return void
* @throws required_capability_exception
*/
function lti_require_type_access($lti) {
global $DB, $SITE;

if (empty($lti->typeid)) {
// This is not a global tool.
require_capability('mod/lti:adddefaultinstance', context_course::instance($lti->course));
return;
}

$toolcourseid = $DB->get_field('lti_types', 'course', ['id' => $lti->typeid], MUST_EXIST);
if ($toolcourseid != $SITE->id) {
// Not a global tool.
require_capability('mod/lti:adddefaultinstance', context_course::instance($lti->course));
return;
}

// This is a global tool.
require_capability('mod/lti:addgloballypreconfigedtoolinstance', context_course::instance($lti->course));
}

0 comments on commit 477e871

Please sign in to comment.