diff --git a/mod/lti/classes/event/unknown_service_api_called.php b/mod/lti/classes/event/unknown_service_api_called.php new file mode 100644 index 00000000000..dad8f78bdb6 --- /dev/null +++ b/mod/lti/classes/event/unknown_service_api_called.php @@ -0,0 +1,95 @@ +. + +/** + * This file contains an event for an unknown service API call. + * + * @package mod_lti + * @copyright 2013 Adrian Greeve + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace mod_lti\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * Event for when something happens with an unknown lti service API call. + * + * @package mod_lti + * @copyright 2013 Adrian Greeve + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class unknown_service_api_called extends \core\event\base { + + /** Old data to be used for the legacy event. */ + protected $legacydata; + + /** + * Set method for legacy data. + * + * @param stdClass $data legacy event data. + */ + public function set_legacy_data($data) { + $this->legacydata = $data; + } + + /** + * Init method. + */ + protected function init() { + $this->data['objecttable'] = 'lti'; + $this->data['crud'] = 'r'; + $this->data['level'] = self::LEVEL_OTHER; + $this->data['context'] = \context_system::instance(); + } + + /** + * Returns localised description of what happened. + * + * @return string + */ + public function get_description() { + return 'An unknown call to a service api was made.'; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('ltiunknownserviceapicall', 'mod_lti'); + } + + /** + * Does this event replace a legacy event? + * + * @return null|string legacy event name + */ + public static function get_legacy_eventname() { + return 'lti_unknown_service_api_call'; + } + + /** + * Legacy event data if get_legacy_eventname() is not empty. + * + * @return mixed + */ + protected function get_legacy_eventdata() { + return $this->legacydata; + } + +} diff --git a/mod/lti/lang/en/lti.php b/mod/lti/lang/en/lti.php index 606e2d6110a..7f5f8a34512 100644 --- a/mod/lti/lang/en/lti.php +++ b/mod/lti/lang/en/lti.php @@ -237,6 +237,7 @@ $string['lti_launch_error_unsigned_help'] = '

'; $string['lti_tool_request_added'] = 'Tool configuration request successfully submitted. You may need to contact an administrator to complete the tool configuration.'; $string['lti_tool_request_existing'] = 'A tool configuration for the tool domain has already been submitted.'; +$string['ltiunknownserviceapicall'] = 'LTI unknown service API call.'; $string['main_admin'] = 'General help'; $string['main_admin_help'] = 'External tools allow Moodle users to seamlessly interact with learning resources hosted remotely. Through a special launch protocol, the remote tool will have access to some general information about the launching user. For example, diff --git a/mod/lti/service.php b/mod/lti/service.php index b96f566294e..be8e2d6d386 100644 --- a/mod/lti/service.php +++ b/mod/lti/service.php @@ -145,19 +145,23 @@ switch ($messagetype) { //Fire an event if we get a web service request which we don't support directly. //This will allow others to extend the LTI services, which I expect to be a common //use case, at least until the spec matures. - $data = new stdClass(); - $data->body = $rawbody; - $data->xml = $xml; - $data->messagetype = $messagetype; - $data->consumerkey = $consumerkey; - $data->sharedsecret = $sharedsecret; + // Please note that you will have to change $eventdata['other']['body'] into an xml + // element in an event observer as done above. + $eventdata = array(); + $eventdata['other'] = array(); + $eventdata['other']['body'] = $rawbody; + $eventdata['other']['messagetype'] = $messagetype; + $eventdata['other']['consumerkey'] = $consumerkey; + $eventdata['other']['sharedsecret'] = $sharedsecret; //If an event handler handles the web service, it should set this global to true //So this code knows whether to send an "operation not supported" or not. global $lti_web_service_handled; $lti_web_service_handled = false; - events_trigger('lti_unknown_service_api_call', $data); + $event = \mod_lti\event\unknown_service_api_called::create($eventdata); + $event->set_legacy_data($eventdata); + $event->trigger(); if (!$lti_web_service_handled) { $responsexml = lti_get_response_xml(