AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of the Zoom plugin for 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/>./*** The task for getting recordings from Zoom to Moodle.** @package mod_zoom* @author Jwalit Shah <jwalitshah@catalyst-au.net>* @copyright 2021 Jwalit Shah <jwalitshah@catalyst-au.net>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/namespace mod_zoom\task;defined('MOODLE_INTERNAL') || die();require_once($CFG->dirroot . '/mod/zoom/locallib.php');use core\task\scheduled_task;use moodle_exception;use stdClass;/*** Scheduled task to get the meeting recordings.*/class get_meeting_recordings extends scheduled_task {/*** Returns name of task.** @return string*/public function get_name() {return get_string('getmeetingrecordings', 'mod_zoom');}/*** Get any new recordings that have been added on zoom.** @return void*/public function execute() {global $DB;try {$service = zoom_webservice();} catch (moodle_exception $exception) {mtrace('Skipping task - ', $exception->getMessage());return;}$config = get_config('zoom');if (empty($config->viewrecordings)) {mtrace('Skipping task - ', get_string('zoomerr_viewrecordings_off', 'zoom'));return;}// See if we cannot make anymore API calls.$retryafter = get_config('zoom', 'retry-after');if (!empty($retryafter) && time() < $retryafter) {mtrace('Out of API calls, retry after ' . userdate($retryafter, get_string('strftimedaydatetime', 'core_langconfig')));return;}mtrace('Finding meeting recordings for this account...');$localmeetings = zoom_get_all_meeting_records();$now = time();$from = gmdate('Y-m-d', strtotime('-1 day', $now));$to = gmdate('Y-m-d', strtotime('+1 day', $now));$hostmeetings = [];foreach ($localmeetings as $zoom) {// Only get recordings for this meeting if its recurring or already finished.if ($zoom->recurring || $now > (intval($zoom->start_time) + intval($zoom->duration))) {$hostmeetings[$zoom->host_id][$zoom->meeting_id] = $zoom;}}if (empty($hostmeetings)) {mtrace('No meetings need to be processed.');return;}$meetingpasscodes = [];$localrecordings = zoom_get_meeting_recordings_grouped();foreach ($hostmeetings as $hostid => $meetings) {// Fetch all recordings for this user.$zoomrecordings = $service->get_user_recordings($hostid, $from, $to);foreach ($zoomrecordings as $recordingid => $recording) {if (isset($localrecordings[$recording->meetinguuid][$recordingid])) {mtrace('Recording id: ' . $recordingid . ' exists...skipping');$localrecording = $localrecordings[$recording->meetinguuid][$recordingid];if ($localrecording->recordingtype !== $recording->recordingtype) {$updatemeeting = (object) ['id' => $localrecording->id,'recordingtype' => $recording->recordingtype,];$DB->update_record('zoom_meeting_recordings', $updatemeeting);}continue;}if (empty($meetings[$recording->meetingid])) {// Skip meetings that are not in Moodle.mtrace('Meeting id: ' . $recording->meetingid . ' does not exist...skipping');continue;}// As of 2023-09-24, 'password' is not present in the user recordings API response.if (empty($meetingpasscodes[$recording->meetinguuid])) {try {$settings = $service->get_recording_settings($recording->meetinguuid);$meetingpasscodes[$recording->meetinguuid] = $settings->password;} catch (moodle_exception $error) {continue;}}$zoom = $meetings[$recording->meetingid];$recordingtype = $recording->recordingtype;$record = new stdClass();$record->zoomid = $zoom->id;$record->meetinguuid = $recording->meetinguuid;$record->zoomrecordingid = $recordingid;$record->name = $zoom->name;$record->externalurl = $recording->url;$record->passcode = $meetingpasscodes[$recording->meetinguuid];$record->recordingtype = $recordingtype;$record->recordingstart = $recording->recordingstart;$record->showrecording = $zoom->recordings_visible_default;$record->timecreated = $now;$record->timemodified = $now;$record->id = $DB->insert_record('zoom_meeting_recordings', $record);mtrace('Recording id: ' . $recordingid . ' (' . $recordingtype . ') added to the database');}}}}