AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** Zoom external API** @package mod_zoom* @category external* @author Nick Stefanski <nstefanski@escoffier.edu>* @copyright 2017 Auguste Escoffier School of Culinary Arts {@link https://www.escoffier.edu}* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later* @since Moodle 3.1*/namespace mod_zoom;defined('MOODLE_INTERNAL') || die;require_once("$CFG->libdir/externallib.php");use context_module;use external_api;use external_function_parameters;use external_single_structure;use external_value;use external_warnings;use invalid_response_exception;/*** Zoom external functions*/class external extends external_api {/*** Returns description of method parameters** @return external_function_parameters* @since Moodle 3.1*/public static function get_state_parameters() {return new external_function_parameters(['zoomid' => new external_value(PARAM_INT, 'zoom course module id'),]);}/*** Determine if a zoom meeting is available, meeting status, and the start time, duration, and other meeting options.* This function grabs most of the options to display for users in /mod/zoom/view.php* Host functions are not currently supported** @param int $zoomid the zoom course module id* @return array of warnings and status result* @since Moodle 3.1* @throws moodle_exception*/public static function get_state($zoomid) {global $DB, $CFG;require_once($CFG->dirroot . "/mod/zoom/locallib.php");$params = self::validate_parameters(self::get_state_parameters(),['zoomid' => $zoomid,]);$warnings = [];// Request and permission validation.$cm = $DB->get_record('course_modules', ['id' => $params['zoomid']], '*', MUST_EXIST);$zoom = $DB->get_record('zoom', ['id' => $cm->instance], '*', MUST_EXIST);$context = context_module::instance($cm->id);self::validate_context($context);require_capability('mod/zoom:view', $context);// Call the zoom/locallib API.[$inprogress, $available, $finished] = zoom_get_state($zoom);$result = [];$result['available'] = $available;if ($zoom->recurring) {$result['start_time'] = 0;$result['duration'] = 0;} else {$result['start_time'] = $zoom->start_time;$result['duration'] = $zoom->duration;}$result['haspassword'] = (isset($zoom->password) && $zoom->password !== '');$result['joinbeforehost'] = $zoom->option_jbh;$result['startvideohost'] = $zoom->option_host_video;$result['startvideopart'] = $zoom->option_participants_video;$result['audioopt'] = $zoom->option_audio;if (!$zoom->recurring) {if ($zoom->exists_on_zoom == ZOOM_MEETING_EXPIRED) {$status = get_string('meeting_nonexistent_on_zoom', 'mod_zoom');} else if ($finished) {$status = get_string('meeting_finished', 'mod_zoom');} else if ($inprogress) {$status = get_string('meeting_started', 'mod_zoom');} else {$status = get_string('meeting_not_started', 'mod_zoom');}} else {$status = get_string('recurringmeetinglong', 'mod_zoom');}$result['status'] = $status;$result['warnings'] = $warnings;return $result;}/*** Returns description of method result value** @return external_description* @since Moodle 3.1*/public static function get_state_returns() {return new external_single_structure(['available' => new external_value(PARAM_BOOL, 'if true, run grade_item_update and redirect to meeting url'),'start_time' => new external_value(PARAM_INT, 'meeting start time as unix timestamp (0 if recurring)'),'duration' => new external_value(PARAM_INT, 'meeting duration in seconds (0 if recurring)'),'haspassword' => new external_value(PARAM_BOOL, ''),'joinbeforehost' => new external_value(PARAM_BOOL, ''),'startvideohost' => new external_value(PARAM_BOOL, ''),'startvideopart' => new external_value(PARAM_BOOL, ''),'audioopt' => new external_value(PARAM_TEXT, ''),'status' => new external_value(PARAM_TEXT, 'meeting status: not_started, started, finished, expired, recurring'),'warnings' => new external_warnings(),]);}/*** Returns description of method parameters** @return external_function_parameters* @since Moodle 3.1*/public static function grade_item_update_parameters() {return new external_function_parameters(['zoomid' => new external_value(PARAM_INT, 'zoom course module id'),]);}/*** Creates or updates grade item for the given zoom instance and returns join url.* This function grabs most of the options to display for users in /mod/zoom/view.php** @param int $zoomid the zoom course module id* @return array of warnings and status result* @since Moodle 3.1* @throws moodle_exception*/public static function grade_item_update($zoomid) {global $CFG;require_once($CFG->dirroot . '/mod/zoom/locallib.php');$params = self::validate_parameters(self::get_state_parameters(),['zoomid' => $zoomid,]);$warnings = [];$context = context_module::instance($params['zoomid']);self::validate_context($context);// Call load meeting function, do not use start url on mobile.$meetinginfo = zoom_load_meeting($params['zoomid'], $context, $usestarturl = false);// Pass url to join zoom meeting in order to redirect user.$result = [];if ($meetinginfo['nexturl']) {$result['status'] = true;$result['joinurl'] = $meetinginfo['nexturl']->__toString();} else {$warningmsg = clean_param($meetinginfo['error'], PARAM_TEXT);throw new invalid_response_exception($warningmsg);}$result['warnings'] = $warnings;return $result;}/*** Returns description of method result value** @return external_description* @since Moodle 3.1*/public static function grade_item_update_returns() {return new external_single_structure(['status' => new external_value(PARAM_BOOL, 'status: true if success'),'joinurl' => new external_value(PARAM_RAW, 'Zoom meeting join url'),'warnings' => new external_warnings(),]);}}