MDL-69010 tool_moodlenet: Migrate default MoodleNet instance setting
[moodle.git] / admin / tool / moodlenet / lib.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 page lists public api for tool_moodlenet plugin.
19  *
20  * @package    tool_moodlenet
21  * @copyright  2020 Peter Dias
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU
23  */
25 defined('MOODLE_INTERNAL') || die;
27 use \core_course\local\entity\activity_chooser_footer;
29 /**
30  * The default endpoint to MoodleNet.
31  */
32 define('MOODLENET_DEFAULT_ENDPOINT', "lms/moodle/search");
34 /**
35  * Generate the endpoint url to the user's moodlenet site.
36  *
37  * @param string $profileurl The user's moodlenet profile page
38  * @param int $course The moodle course the mnet resource will be added to
39  * @param int $section The section of the course will be added to. Defaults to the 0th element.
40  * @return string the resulting endpoint
41  * @throws moodle_exception
42  */
43 function generate_mnet_endpoint(string $profileurl, int $course, int $section = 0) {
44     global $CFG;
45     $urlportions = explode('@', $profileurl);
46     $domain = end($urlportions);
47     $parsedurl = parse_url($domain);
48     $params = [
49         'site' => $CFG->wwwroot,
50         'course' => $course,
51         'section' => $section
52     ];
53     $endpoint = new moodle_url(MOODLENET_DEFAULT_ENDPOINT, $params);
54     return (isset($parsedurl['scheme']) ? $domain : "https://$domain")."/{$endpoint->out(false)}";
55 }
57 /**
58  * Hooking function to build up the initial Activity Chooser footer information for MoodleNet
59  *
60  * @param int $courseid The course the user is currently in and wants to add resources to
61  * @param int $sectionid The section the user is currently in and wants to add resources to
62  * @return activity_chooser_footer
63  * @throws dml_exception
64  * @throws moodle_exception
65  */
66 function tool_moodlenet_custom_chooser_footer(int $courseid, int $sectionid): activity_chooser_footer {
67     global $CFG, $USER, $OUTPUT;
68     $defaultlink = get_config('tool_moodlenet', 'defaultmoodlenet');
69     $enabled = get_config('tool_moodlenet', 'enablemoodlenet');
71     $advanced = false;
72     // We are in the MoodleNet lib. It is safe assume we have our own functions here.
73     $mnetprofile = \tool_moodlenet\profile_manager::get_moodlenet_user_profile($USER->id);
74     if ($mnetprofile !== null) {
75         $advanced = $mnetprofile->get_domain() ?? false;
76     }
78     $defaultlink = generate_mnet_endpoint($defaultlink, $courseid, $sectionid);
79     if ($advanced !== false) {
80         $advanced = generate_mnet_endpoint($advanced, $courseid, $sectionid);
81     }
83     $renderedfooter = $OUTPUT->render_from_template('tool_moodlenet/chooser_footer', (object)[
84         'enabled' => (bool)$enabled,
85         'generic' => $defaultlink,
86         'advanced' => $advanced,
87         'courseID' => $courseid,
88         'sectionID' => $sectionid,
89         'img' => $OUTPUT->image_url('MoodleNet', 'tool_moodlenet')->out(false),
90     ]);
92     $renderedcarousel = $OUTPUT->render_from_template('tool_moodlenet/chooser_moodlenet', (object)[
93         'buttonName' => get_config('tool_moodlenet', 'defaultmoodlenetname'),
94         'generic' => $defaultlink,
95         'courseID' => $courseid,
96         'sectionID' => $sectionid,
97         'img' => $OUTPUT->image_url('MoodleNet', 'tool_moodlenet')->out(false),
98     ]);
99     return new activity_chooser_footer(
100         'tool_moodlenet/instance_form',
101         $renderedfooter,
102         $renderedcarousel
103     );