diff --git a/mod/lti/edit_form.php b/mod/lti/edit_form.php index e07a30d4b4a..6d0f0c3bd7f 100644 --- a/mod/lti/edit_form.php +++ b/mod/lti/edit_form.php @@ -120,6 +120,19 @@ class mod_lti_edit_types_form extends moodleform{ $mform->addHelpButton('lti_launchcontainer', 'default_launch_container', 'lti'); $mform->setType('lti_launchcontainer', PARAM_INT); + $mform->addElement('hidden', 'oldicon'); + $mform->setType('oldicon', PARAM_URL); + + $mform->addElement('text', 'lti_icon', get_string('icon_url', 'lti'), array('size' => '64')); + $mform->setType('lti_icon', PARAM_URL); + $mform->setAdvanced('lti_icon'); + $mform->addHelpButton('lti_icon', 'icon_url', 'lti'); + + $mform->addElement('text', 'lti_secureicon', get_string('secure_icon_url', 'lti'), array('size' => '64')); + $mform->setType('lti_secureicon', PARAM_URL); + $mform->setAdvanced('lti_secureicon'); + $mform->addHelpButton('lti_secureicon', 'secure_icon_url', 'lti'); + if (!$istool) { // Add privacy preferences fieldset where users choose whether to send their data. $mform->addElement('header', 'privacy', get_string('privacy', 'lti')); diff --git a/mod/lti/lib.php b/mod/lti/lib.php index a41d980dc99..5e9c313b1cd 100644 --- a/mod/lti/lib.php +++ b/mod/lti/lib.php @@ -252,32 +252,41 @@ function lti_get_coursemodule_info($coursemodule) { require_once($CFG->dirroot.'/mod/lti/locallib.php'); if (!$lti = $DB->get_record('lti', array('id' => $coursemodule->instance), - 'icon, secureicon, intro, introformat, name, toolurl, launchcontainer')) { + 'icon, secureicon, intro, introformat, name, typeid, toolurl, launchcontainer')) { return null; } $info = new cached_cm_info(); - // We want to use the right icon based on whether the - // current page is being requested over http or https. - if (lti_request_is_using_ssl() && !empty($lti->secureicon)) { - $info->iconurl = new moodle_url($lti->secureicon); - } else if (!empty($lti->icon)) { - $info->iconurl = new moodle_url($lti->icon); - } - if ($coursemodule->showdescription) { // Convert intro to html. Do not filter cached version, filters run at display time. $info->content = format_module_intro('lti', $lti, $coursemodule->id, false); } - // Does the link open in a new window? - $tool = lti_get_tool_by_url_match($lti->toolurl); - if ($tool) { + if (!empty($lti->typeid)) { + $toolconfig = lti_get_type_config($lti->typeid); + } else if ($tool = lti_get_tool_by_url_match($lti->toolurl)) { $toolconfig = lti_get_type_config($tool->id); } else { $toolconfig = array(); } + + // We want to use the right icon based on whether the + // current page is being requested over http or https. + if (lti_request_is_using_ssl() && + (!empty($lti->secureicon) || (isset($toolconfig['secureicon']) && !empty($toolconfig['secureicon'])))) { + if (!empty($lti->secureicon)) { + $info->iconurl = new moodle_url($lti->secureicon); + } else { + $info->iconurl = new moodle_url($toolconfig['secureicon']); + } + } else if (!empty($lti->icon)) { + $info->iconurl = new moodle_url($lti->icon); + } else if (isset($toolconfig['icon']) && !empty($toolconfig['icon'])) { + $info->iconurl = new moodle_url($toolconfig['icon']); + } + + // Does the link open in a new window? $launchcontainer = lti_get_launch_container($lti, $toolconfig); if ($launchcontainer == LTI_LAUNCH_CONTAINER_WINDOW) { $launchurl = new moodle_url('/mod/lti/launch.php', array('id' => $coursemodule->id)); diff --git a/mod/lti/locallib.php b/mod/lti/locallib.php index bb755795b25..2803555fb77 100644 --- a/mod/lti/locallib.php +++ b/mod/lti/locallib.php @@ -952,10 +952,19 @@ function lti_get_type_config($typeid) { UNION ALL SELECT 'toolurl' AS name, " . $DB->sql_compare_text('baseurl', 1333) . " AS value FROM {lti_types} - WHERE id = :typeid2"; + WHERE id = :typeid2 + UNION ALL + SELECT 'icon' AS name, " . $DB->sql_compare_text('icon', 1333) . " AS value + FROM {lti_types} + WHERE id = :typeid3 + UNION ALL + SELECT 'secureicon' AS name, " . $DB->sql_compare_text('secureicon', 1333) . " AS value + FROM {lti_types} + WHERE id = :typeid4"; $typeconfig = array(); - $configs = $DB->get_records_sql($query, array('typeid1' => $typeid, 'typeid2' => $typeid)); + $configs = $DB->get_records_sql($query, + array('typeid1' => $typeid, 'typeid2' => $typeid, 'typeid3' => $typeid, 'typeid4' => $typeid)); if (!empty($configs)) { foreach ($configs as $config) { @@ -1283,6 +1292,10 @@ function lti_get_type_type_config($id) { $type->lti_parameters = $basicltitype->parameter; + $type->lti_icon = $basicltitype->icon; + + $type->lti_secureicon = $basicltitype->secureicon; + if (isset($config['resourcekey'])) { $type->lti_resourcekey = $config['resourcekey']; } @@ -1362,6 +1375,13 @@ function lti_prepare_type_for_save($type, $config) { $type->coursevisible = !empty($config->lti_coursevisible) ? $config->lti_coursevisible : 0; $config->lti_coursevisible = $type->coursevisible; + if (isset($config->lti_icon)) { + $type->icon = $config->lti_icon; + } + if (isset($config->lti_secureicon)) { + $type->secureicon = $config->lti_secureicon; + } + if (isset($config->lti_forcessl)) { $type->forcessl = !empty($config->lti_forcessl) ? $config->lti_forcessl : 0; $config->lti_forcessl = $type->forcessl; @@ -1371,13 +1391,23 @@ function lti_prepare_type_for_save($type, $config) { unset ($config->lti_typename); unset ($config->lti_toolurl); + unset ($config->lti_icon); + unset ($config->lti_secureicon); } function lti_update_type($type, $config) { - global $DB; + global $DB, $CFG; lti_prepare_type_for_save($type, $config); + $clearcache = false; + if (lti_request_is_using_ssl() && !empty($type->secureicon)) { + $clearcache = !isset($config->oldicon) || ($config->oldicon !== $type->secureicon); + } else { + $clearcache = isset($type->icon) && (!isset($config->oldicon) || ($config->oldicon !== $type->icon)); + } + unset($config->oldicon); + if ($DB->update_record('lti_types', $type)) { foreach ($config as $key => $value) { if (substr($key, 0, 4) == 'lti_' && !is_null($value)) { @@ -1388,6 +1418,10 @@ function lti_update_type($type, $config) { lti_update_config($record); } } + require_once($CFG->libdir.'/modinfolib.php'); + if ($clearcache) { + rebuild_course_cache(); + } } } diff --git a/mod/lti/mod_form.php b/mod/lti/mod_form.php index fcf8689d4ec..3652b475787 100644 --- a/mod/lti/mod_form.php +++ b/mod/lti/mod_form.php @@ -166,13 +166,13 @@ class mod_lti_mod_form extends moodleform_mod { $mform->addHelpButton('instructorcustomparameters', 'custom', 'lti'); $mform->addElement('text', 'icon', get_string('icon_url', 'lti'), array('size' => '64')); - $mform->setType('icon', PARAM_TEXT); + $mform->setType('icon', PARAM_URL); $mform->setAdvanced('icon'); $mform->addHelpButton('icon', 'icon_url', 'lti'); $mform->disabledIf('icon', 'typeid', 'neq', '0'); $mform->addElement('text', 'secureicon', get_string('secure_icon_url', 'lti'), array('size' => '64')); - $mform->setType('secureicon', PARAM_TEXT); + $mform->setType('secureicon', PARAM_URL); $mform->setAdvanced('secureicon'); $mform->addHelpButton('secureicon', 'secure_icon_url', 'lti'); $mform->disabledIf('secureicon', 'typeid', 'neq', '0'); diff --git a/mod/lti/toolssettings.php b/mod/lti/toolssettings.php index 144ea395110..3c7c3481acf 100644 --- a/mod/lti/toolssettings.php +++ b/mod/lti/toolssettings.php @@ -70,6 +70,12 @@ if ($action == 'accept') { redirect($redirect); } +if (lti_request_is_using_ssl() && !empty($type->lti_secureicon)) { + $type->oldicon = $type->lti_secureicon; +} else { + $type->oldicon = $type->lti_icon; +} + $form = new mod_lti_edit_types_form($pageurl, (object)array('isadmin' => true, 'istool' => true)); if ($data = $form->get_data()) { diff --git a/mod/lti/typessettings.php b/mod/lti/typessettings.php index 582e564b2f1..544959cdfe6 100644 --- a/mod/lti/typessettings.php +++ b/mod/lti/typessettings.php @@ -96,6 +96,12 @@ if ($action == 'accept') { redirect($redirect); } +if (lti_request_is_using_ssl() && !empty($type->lti_secureicon)) { + $type->oldicon = $type->lti_secureicon; +} else { + $type->oldicon = $type->lti_icon; +} + $form = new mod_lti_edit_types_form($pageurl, (object)array('isadmin' => true, 'istool' => false)); if ($data = $form->get_data()) {