Merge branch 'MDL-77436-401' of https://github.com/meirzamoodle/moodle into MOODLE_40...
[moodle.git] / enrol / lti / register_platform.php
blobe4898f6e813f2bce27c2fcceb38c5323cff65d56
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.
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/>.
17 /**
18 * LTI 1.3 page to create or edit a platform registration.
20 * This page is only used by LTI 1.3. Older versions do not require platforms to be registered with the tool during
21 * registration.
23 * @package enrol_lti
24 * @copyright 2021 Jake Dallimore <jrhdallimore@gmail.com>
25 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
28 use core\output\notification;
29 use enrol_lti\local\ltiadvantage\form\create_registration_form;
30 use enrol_lti\local\ltiadvantage\form\platform_registration_form;
31 use enrol_lti\local\ltiadvantage\entity\application_registration;
32 use enrol_lti\local\ltiadvantage\repository\application_registration_repository;
33 use enrol_lti\local\ltiadvantage\repository\context_repository;
34 use enrol_lti\local\ltiadvantage\repository\deployment_repository;
35 use enrol_lti\local\ltiadvantage\repository\resource_link_repository;
36 use enrol_lti\local\ltiadvantage\repository\user_repository;
37 use enrol_lti\local\ltiadvantage\service\application_registration_service;
39 require_once(__DIR__ . '/../../config.php');
40 global $CFG, $OUTPUT, $DB;
41 require_once($CFG->libdir . '/adminlib.php');
42 require_once($CFG->dirroot . '/enrol/lti/lib.php');
44 $action = required_param('action', PARAM_ALPHA);
45 if (!in_array($action, ['add', 'view', 'edit', 'delete'])) {
46 throw new coding_exception("Invalid action param '$action'");
49 // The page to go back to when the respective action has been performed.
50 $toolregistrationurl = new moodle_url($CFG->wwwroot . "/" . $CFG->admin . "/settings.php",
51 ['section' => 'enrolsettingslti_registrations']);
53 // Local anon helper to extend the nav for this page and call admin_externalpage_setup.
54 $pagesetup = function(string $pagetitle) {
55 global $PAGE;
56 navigation_node::override_active_url(
57 new moodle_url('/admin/settings.php', ['section' => 'enrolsettingslti_registrations'])
59 admin_externalpage_setup('enrolsettingslti_registrations_edit', '', null, '', ['pagelayout' => 'admin']);
60 $PAGE->navbar->add($pagetitle);
63 if ($action == 'view') {
64 $regid = required_param('regid', PARAM_INT);
65 $tabselect = optional_param('tabselect', 'platformdetails', PARAM_ALPHA);
66 global $PAGE;
67 $pagesetup(get_string('registerplatformedit', 'enrol_lti'));
68 $pageurl = new moodle_url('/enrol/lti/register_platform.php', ['action' => 'view', 'regid' => $regid]);
70 echo $OUTPUT->header();
71 echo $OUTPUT->heading(get_string('registerplatformedit', 'enrol_lti'));
73 $renderer = $PAGE->get_renderer('enrol_lti');
74 echo $renderer->render_registration_view($regid, $tabselect);
75 echo $OUTPUT->footer();
76 die();
78 } else if ($action === 'add') {
79 $pagesetup(get_string('registerplatformadd', 'enrol_lti'));
80 $pageurl = new moodle_url('/enrol/lti/register_platform.php', ['action' => 'add']);
82 $mform = new create_registration_form($pageurl->out(false));
83 if ($data = $mform->get_data()) {
84 // Create the incomplete registration.
85 $regservice = new application_registration_service(new application_registration_repository(),
86 new deployment_repository(), new resource_link_repository(), new context_repository(),
87 new user_repository());
88 $draft = $regservice->create_draft_application_registration($data);
90 // Redirect to the registration view, which will display endpoints and allow the user to complete the registration.
91 redirect(new moodle_url('/enrol/lti/register_platform.php',
92 ['action' => 'view', 'regid' => $draft->get_id(), 'tabselect' => 'tooldetails']));
94 } else if (!$mform->is_cancelled()) {
95 // Display the first step of registration creation.
96 echo $OUTPUT->header();
97 echo $OUTPUT->heading(get_string('registerplatformadd', 'enrol_lti'));
98 $mform->display();
99 echo $OUTPUT->footer();
100 die();
102 redirect($toolregistrationurl);
103 } else if ($action === 'edit') {
104 $regid = required_param('regid', PARAM_INT);
105 $pagesetup(get_string('registerplatformedit', 'enrol_lti'));
107 $pageurl = new moodle_url('/enrol/lti/register_platform.php', ['action' => 'edit', 'regid' => $regid]);
108 $viewurl = new moodle_url('/enrol/lti/register_platform.php', ['action' => 'view', 'regid' => $regid]);
110 $mform = new platform_registration_form($pageurl->out(false));
111 if (($data = $mform->get_data()) && confirm_sesskey()) {
112 $regservice = new application_registration_service(new application_registration_repository(),
113 new deployment_repository(), new resource_link_repository(), new context_repository(),
114 new user_repository());
115 $regservice->update_application_registration($data);
116 redirect($viewurl, get_string('registerplatformeditnotice', 'enrol_lti'), null,
117 notification::NOTIFY_SUCCESS);
118 } else if (!$mform->is_cancelled()) {
119 // Anon helper to transform data.
120 $maptoformdata = function(application_registration $registration): \stdClass {
121 return (object) [
122 'id' => $registration->get_id(),
123 'name' => $registration->get_name(),
124 'platformid' => $registration->get_platformid(),
125 'clientid' => $registration->get_clientid(),
126 'authenticationrequesturl' => $registration->get_authenticationrequesturl(),
127 'jwksurl' => $registration->get_jwksurl(),
128 'accesstokenurl' => $registration->get_accesstokenurl()
131 $appregistrationrepo = new application_registration_repository();
132 $registration = $appregistrationrepo->find($regid);
133 if (!$registration) {
134 throw new coding_exception("cannot edit non-existent registration '{$regid}'.");
137 $mform->set_data($maptoformdata($registration));
139 echo $OUTPUT->header();
140 echo $OUTPUT->heading(get_string('registerplatformedit', 'enrol_lti'));
141 $mform->display();
142 echo $OUTPUT->footer();
143 die();
145 redirect($viewurl);
146 } else if ($action === 'delete') {
147 $regid = required_param('regid', PARAM_INT);
148 $pagesetup(get_string('registerplatformdelete', 'enrol_lti'));
150 if (!optional_param('confirm', false, PARAM_BOOL)) {
151 $continueparams = ['action' => 'delete', 'regid' => $regid, 'sesskey' => sesskey(), 'confirm' => true];
152 $continueurl = new moodle_url('/enrol/lti/register_platform.php', $continueparams);
153 $appregrepo = new application_registration_repository();
154 $appreg = $appregrepo->find($regid);
155 if (!$appreg) {
156 throw new coding_exception("Cannot delete non existent application registration '{$regid}'.");
159 echo $OUTPUT->header();
160 echo $OUTPUT->confirm(
161 get_string('registerplatformdeleteconfirm', 'enrol_lti', format_string($appreg->get_name())),
162 $continueurl,
163 $toolregistrationurl
165 echo $OUTPUT->footer();
166 } else {
167 require_sesskey();
168 $regservice = new application_registration_service(new application_registration_repository(),
169 new deployment_repository(), new resource_link_repository(), new context_repository(),
170 new user_repository());
171 $regservice->delete_application_registration($regid);
173 redirect($toolregistrationurl,
174 get_string('registerplatformdeletenotice', 'enrol_lti'), null, notification::NOTIFY_SUCCESS);