From 86775ced8994658048b13d9ff553d9b5bf0a30be Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Wed, 19 Jul 2017 08:59:11 +0800 Subject: [PATCH] MDL-59388 core_calendar: new footer options exporter --- .../external/footer_options_exporter.php | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 calendar/classes/external/footer_options_exporter.php diff --git a/calendar/classes/external/footer_options_exporter.php b/calendar/classes/external/footer_options_exporter.php new file mode 100644 index 00000000000..4024576b7ce --- /dev/null +++ b/calendar/classes/external/footer_options_exporter.php @@ -0,0 +1,142 @@ +. + +/** + * Class for exporting calendar footer view options data. + * + * @package core_calendar + * @copyright 2017 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace core_calendar\external; + +defined('MOODLE_INTERNAL') || die(); + +use core\external\exporter; +use renderer_base; +use stdClass; +use moodle_url; + +/** + * Class for exporting calendar footer view options data. + * + * @copyright 2017 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class footer_options_exporter extends exporter { + + /** + * @var \calendar_information $calendar The calendar to be rendered. + */ + protected $calendar; + + /** + * @var int $userid The user id. + */ + protected $userid; + + /** + * @var string $token The user sha1 token. + */ + protected $token; + + /** + * Constructor for month_exporter. + * + * @param \calendar_information $calendar The calendar being represented + */ + public function __construct(\calendar_information $calendar, $userid, $token) { + $this->calendar = $calendar; + $this->userid = $userid; + $this->token = $token; + } + + /** + * Get the export calendar button. + * + * @param renderer_base $output + * @return string The export calendar button html. + */ + protected function get_export_calendar_button(renderer_base $output) { + $exportcalendarurl = new moodle_url('/calendar/export.php', ['course' => $this->calendar->course->id]); + return $output->single_button($exportcalendarurl->out(false), get_string('exportcalendar', 'calendar')); + } + + /** + * Get the iCal url. + * + * @return string The iCal url. + */ + protected function get_ical_url() { + return new moodle_url('/calendar/export_execute.php', ['preset_what' => 'all', + 'preset_time' => 'recentupcoming', 'userid' => $this->userid, 'authtoken'=> $this->token]); + + } + + /** + * Get manage subscription button. + * + * @param renderer_base $output + * @return string The manage subscription button html. + */ + protected function get_manage_subscriptions_button(renderer_base $output) { + if (calendar_user_can_add_event($this->calendar->course)) { + $managesubscriptionurl = new moodle_url('/calendar/managesubscriptions.php', + ['course' => $this->calendar->course->id]); + return $output->single_button($managesubscriptionurl->out(false), + get_string('managesubscriptions', 'calendar')); + } + } + + /** + * Get the additional values to inject while exporting. + * + * @param renderer_base $output The renderer. + * @return array Keys are the property names, values are their values. + */ + protected function get_other_values(renderer_base $output) { + global $CFG; + + $values = new stdClass(); + + if (!empty($CFG->enablecalendarexport)) { + $values->exportcalendarbutton = $this->get_export_calendar_button($output); + $values->managesubscriptionbutton = $this->get_manage_subscriptions_button($output); + $values->icalurl = $this->get_ical_url($output)->out(false); + } + + return (array) $values; + } + + /** + * Return the list of additional properties. + * + * @return array + */ + public static function define_other_properties() { + return array( + 'exportcalendarbutton' => [ + 'type' => PARAM_RAW, + ], + 'managesubscriptionbutton' => [ + 'type' => PARAM_RAW, + ], + 'icalurl' => [ + 'type' => PARAM_URL, + ], + ); + } +}