Merge branch 'wip-MDL-60167-master' of git://github.com/marinaglancy/moodle
[moodle.git] / calendar / classes / external / footer_options_exporter.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  * Class for exporting calendar footer view options data.
19  *
20  * @package    core_calendar
21  * @copyright  2017 Simey Lameze <simey@moodle.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
24 namespace core_calendar\external;
26 defined('MOODLE_INTERNAL') || die();
28 use core\external\exporter;
29 use renderer_base;
30 use stdClass;
31 use moodle_url;
33 /**
34  * Class for exporting calendar footer view options data.
35  *
36  * @copyright  2017 Simey Lameze
37  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38  */
39 class footer_options_exporter extends exporter {
41     /**
42      * @var \calendar_information $calendar The calendar to be rendered.
43      */
44     protected $calendar;
46     /**
47      * @var int $userid The user id.
48      */
49     protected $userid;
51     /**
52      * @var string $token The user sha1 token.
53      */
54     protected $token;
56     /**
57      * Constructor for month_exporter.
58      *
59      * @param \calendar_information $calendar The calendar being represented
60      * @param int $userid The user id
61      * @param string $token The user sha1 token.
62      */
63     public function __construct(\calendar_information $calendar, $userid, $token) {
64         $this->calendar = $calendar;
65         $this->userid = $userid;
66         $this->token = $token;
67     }
69     /**
70      * Get the export calendar button.
71      *
72      * @return \single_button The export calendar button html.
73      */
74     protected function get_export_calendar_button() {
75         $exportcalendarurl = new moodle_url('/calendar/export.php', ['course' => $this->calendar->course->id]);
76         return new \single_button($exportcalendarurl, get_string('exportcalendar', 'calendar'));
77     }
79     /**
80      * Get the iCal url.
81      *
82      * @return string The iCal url.
83      */
84     protected function get_ical_url() {
85         return new moodle_url('/calendar/export_execute.php', ['preset_what' => 'all',
86                 'preset_time' => 'recentupcoming', 'userid' => $this->userid, 'authtoken' => $this->token]);
88     }
90     /**
91      * Get manage subscription button.
92      *
93      * @return string The manage subscription button html.
94      */
95     protected function get_manage_subscriptions_button() {
96         if (calendar_user_can_add_event($this->calendar->course)) {
97             $managesubscriptionurl = new moodle_url('/calendar/managesubscriptions.php',
98                     ['course' => $this->calendar->course->id]);
99             return new \single_button($managesubscriptionurl,
100                     get_string('managesubscriptions', 'calendar'));
101         }
102     }
104     /**
105      * Get the additional values to inject while exporting.
106      *
107      * @param renderer_base $output The renderer.
108      * @return array Keys are the property names, values are their values.
109      */
110     protected function get_other_values(renderer_base $output) {
111         global $CFG;
113         $values = new stdClass();
115         if (!empty($CFG->enablecalendarexport)) {
116             $exportbutton = $this->get_export_calendar_button();
117             $managesubscriptionbutton = $this->get_manage_subscriptions_button();
118             $values->exportcalendarbutton = $exportbutton->export_for_template($output);
119             $values->managesubscriptionbutton = $managesubscriptionbutton->export_for_template($output);
120             $values->icalurl = $this->get_ical_url()->out(false);
121         }
123         return (array) $values;
124     }
126     /**
127      * Return the list of additional properties.
128      *
129      * @return array
130      */
131     public static function define_other_properties() {
132         return array(
133             'exportcalendarbutton' => [
134                 'type' => PARAM_RAW,
135             ],
136             'managesubscriptionbutton' => [
137                 'type' => PARAM_RAW,
138             ],
139             'icalurl' => [
140                 'type' => PARAM_URL,
141             ],
142         );
143     }