MDL-51571 lti: Whitespace fixes
[moodle.git] / mod / lti / classes / service_exception_handler.php
CommitLineData
00e27060
MN
1<?php
2// This file is part of Moodle - http://moodle.org/
3//
4// Moodle is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// Moodle is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
16
17/**
18 * Exception handler for LTI services
19 *
20 * @package mod_lti
21 * @copyright Copyright (c) 2015 Moodlerooms Inc. (http://www.moodlerooms.com)
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 */
24
25namespace mod_lti;
26
27defined('MOODLE_INTERNAL') || die();
28
29require_once(__DIR__.'/../locallib.php');
30require_once(__DIR__.'/../servicelib.php');
31
32/**
33 * Handles exceptions when handling incoming LTI messages.
34 *
35 * Ensures that LTI always returns a XML message that can be consumed by the caller.
36 *
37 * @package mod_lti
38 * @copyright Copyright (c) 2015 Moodlerooms Inc. (http://www.moodlerooms.com)
39 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
40 */
41class service_exception_handler {
42 /**
43 * Enable error response logging.
44 *
45 * @var bool
46 */
47 protected $log = false;
48
49 /**
50 * The LTI service message ID, if known.
51 *
52 * @var string
53 */
54 protected $id = '';
55
56 /**
57 * The LTI service message type, if known.
58 *
59 * @var string
60 */
61 protected $type = 'unknownRequest';
62
63 /**
64 * Constructor.
65 *
66 * @param boolean $log Enable error response logging.
67 */
68 public function __construct($log) {
69 $this->log = $log;
70 }
71
72 /**
73 * Set the LTI message ID being handled.
74 *
75 * @param string $id
76 */
77 public function set_message_id($id) {
78 if (!empty($id)) {
79 $this->id = $id;
80 }
81 }
82
83 /**
84 * Set the LTI message type being handled.
85 *
86 * @param string $type
87 */
88 public function set_message_type($type) {
89 if (!empty($type)) {
90 $this->type = $type;
91 }
92 }
93
94 /**
233b677b 95 * Echo an exception message encapsulated in XML.
00e27060
MN
96 *
97 * @param \Exception $exception The exception that was thrown
98 */
99 public function handle(\Exception $exception) {
100 $message = $exception->getMessage();
101
102 // Add the exception backtrace for developers.
103 if (debugging('', DEBUG_DEVELOPER)) {
104 $message .= "\n".format_backtrace(get_exception_info($exception)->backtrace, true);
105 }
106
107 // Switch to response.
108 $type = str_replace('Request', 'Response', $this->type);
109
110 // Build the appropriate xml.
111 $response = lti_get_response_xml('failure', $message, $this->id, $type);
112
113 $xml = $response->asXML();
114
115 // Log the request if necessary.
116 if ($this->log) {
117 lti_log_response($xml, $exception);
118 }
119
120 echo $xml;
121 }
233b677b 122}