MDL-69010 tool_moodlenet: Migrate default MoodleNet instance setting
[moodle.git] / admin / tool / moodlenet / import.php
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/>.
17 /**
18  * This is the main endpoint which MoodleNet instances POST to.
19  *
20  * MoodleNet instances send the user agent to this endpoint via a form POST.
21  * Then:
22  * 1. The POSTed resource information is put in a session store for cross-request access.
23  * 2. This page makes a GET request for admin/tool/moodlenet/index.php (the import confirmation page).
24  * 3. Then, depending on whether the user is authenticated, the user will either:
25  * - If not authenticated, they will be asked to login, after which they will see the confirmation page (leveraging $wantsurl).
26  * - If authenticated, they will see the confirmation page immediately.
27  *
28  * @package     tool_moodlenet
29  * @copyright   2020 Jake Dallimore <jrhdallimore@gmail.com>
30  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
31  */
33 use tool_moodlenet\local\import_info;
34 use tool_moodlenet\local\remote_resource;
35 use tool_moodlenet\local\url;
37 require_once(__DIR__ . '/../../../config.php');
39 // The integration must be enabled for this import endpoint to be active.
40 if (!get_config('tool_moodlenet', 'enablemoodlenet')) {
41     print_error('moodlenetnotenabled', 'tool_moodlenet');
42 }
44 $resourceurl = required_param('resourceurl', PARAM_URL);
45 $resourceinfo = required_param('resource_info', PARAM_RAW);
46 $resourceinfo = json_decode($resourceinfo);
47 $type = optional_param('type', 'link', PARAM_TEXT);
48 $course = optional_param('course', 0, PARAM_INT);
49 $section = optional_param('section', 0, PARAM_INT);
50 // If course isn't provided, course and section are null.
51 if (empty($course)) {
52     $course = null;
53     $section = null;
54 }
55 $name = validate_param($resourceinfo->name, PARAM_TEXT);
56 $description = validate_param($resourceinfo->summary, PARAM_TEXT);
58 // Only accept POSTs.
59 if (!empty($_POST)) {
60     // Store information about the import of the resource for the current user.
61     $importconfig = (object) [
62         'course' => $course,
63         'section' => $section,
64         'type' => $type,
65     ];
66     $metadata = (object) [
67         'name' => $name,
68         'description' => $description ?? ''
69     ];
71     require_once($CFG->libdir . '/filelib.php');
72     $importinfo = new import_info(
73         $USER->id,
74         new remote_resource(new \curl(), new url($resourceurl), $metadata),
75         $importconfig
76     );
77     $importinfo->save();
79     // Redirect to the import confirmation page, detouring via the log in page if required.
80     redirect(new moodle_url('/admin/tool/moodlenet/index.php', ['id' => $importinfo->get_id()]));
82 }
84 // Invalid or missing POST data. Show an error to the user.
85 print_error('missinginvalidpostdata', 'tool_moodlenet');