MDL-69010 tool_moodlenet: Migrate default MoodleNet instance setting
[moodle.git] / admin / tool / moodlenet / import.php
CommitLineData
b1e6d8b8
JD
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 * 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 */
32
33use tool_moodlenet\local\import_info;
34use tool_moodlenet\local\remote_resource;
35use tool_moodlenet\local\url;
36
37require_once(__DIR__ . '/../../../config.php');
38
39// The integration must be enabled for this import endpoint to be active.
40if (!get_config('tool_moodlenet', 'enablemoodlenet')) {
41 print_error('moodlenetnotenabled', 'tool_moodlenet');
42}
43
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.
51if (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);
57
58// Only accept POSTs.
59if (!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 ];
70
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();
78
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()]));
81
82}
83
84// Invalid or missing POST data. Show an error to the user.
85print_error('missinginvalidpostdata', 'tool_moodlenet');