MDL-68991 core: Prevent popup blockers blocking feedback window
[moodle.git] / lib / classes / external / userfeedback / generate_url.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  * External API to generate and return the URL of the feedback site.
19  *
20  * @package    core
21  * @copyright  2020 Shamim Rezaie <shamim@moodle.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 namespace core\external\userfeedback;
27 defined('MOODLE_INTERNAL') || die();
29 require_once("$CFG->libdir/externallib.php");
31 use external_api;
32 use external_function_parameters;
33 use external_value;
34 use external_single_structure;
35 use external_multiple_structure;
37 /**
38  * The external API to generate and return the feedback url.
39  *
40  * @copyright  2020 Shamim Rezaie <shamim@moodle.com>
41  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
42  */
43 class generate_url extends external_api {
44     /**
45      * Returns description of parameters.
46      *
47      * @return external_function_parameters
48      */
49     public static function execute_parameters() {
50         return new external_function_parameters([
51             'contextid' => new external_value(PARAM_INT, 'The context id of the page the user is in'),
52         ]);
53     }
55     /**
56      * Prepare and return the URL of the feedback site
57      *
58      * @param int $contextid The context id
59      * @return \stdClass
60      */
61     public static function execute(int $contextid) {
62         global $PAGE;
64         external_api::validate_parameters(self::execute_parameters(), ['contextid' => $contextid]);
66         $context = \context::instance_by_id($contextid);
67         self::validate_context($context);
68         $PAGE->set_context($context);
70         return \core_userfeedback::make_link()->out(false);
71     }
73     /**
74      * Returns description of method result value
75      *
76      * @return external_value
77      */
78     public static function execute_returns() {
79         return new external_value(PARAM_URL, 'Feedback site\'s URL');
80     }
81 }