示例#1
0
/**
 * Updates an instance of the zoom in the database
 *
 * Given an object containing all the necessary data,
 * (defined by the form in mod_form.php) this function
 * will update an existing instance with new data.
 *
 * @param stdClass $zoom An object from the form in mod_form.php
 * @param mod_zoom_mod_form $mform The form instance itself (if needed)
 * @return boolean Success/Fail
 */
function zoom_update_instance(stdClass $zoom, mod_zoom_mod_form $mform = null)
{
    global $CFG, $DB;
    require_once $CFG->dirroot . '/mod/zoom/classes/webservice.php';
    $old = $DB->get_record('zoom', array('id' => $zoom->instance));
    // Update meeting on Zoom.
    $service = new mod_zoom_webservice();
    // If the webinar setting changed, we have to delete and recreate.
    if ($old->webinar != $zoom->webinar) {
        if (!$service->meeting_delete($old)) {
            zoom_print_error('meeting/delete', $service->lasterror);
        }
        if (!$service->meeting_create($zoom)) {
            zoom_print_error('meeting/create', $service->lasterror);
        }
    } else {
        if (!$service->meeting_update($zoom)) {
            if (zoom_is_meeting_gone_error($service->lasterror)) {
                if (!$service->meeting_create($zoom)) {
                    zoom_print_error('meeting/create', $service->lasterror);
                }
            } else {
                zoom_print_error('meeting/update', $service->lasterror);
            }
        }
    }
    $zoom = $service->lastresponse;
    // Update meeting in database.
    $zoom->timemodified = time();
    $result = $DB->update_record('zoom', $zoom);
    zoom_calendar_item_update($zoom);
    zoom_grade_item_update($zoom);
    return $result;
}
示例#2
0
/**
 * Update local copy of zoom meetings by getting the latest Zoom data through the API.
 *
 * @param Traversable $zooms Traversable collection of zoom objects, perhaps from a recordset
 * (although this function does not close the recordset).
 */
function zoom_update_records(Traversable $zooms)
{
    global $CFG, $DB;
    require_once $CFG->dirroot . '/course/lib.php';
    require_once $CFG->dirroot . '/lib/modinfolib.php';
    $service = new mod_zoom_webservice();
    $coursestoupdate = array();
    $calendar_fields = array('intro', 'introformat', 'start_time', 'duration', 'recurring');
    foreach ($zooms as $z) {
        if ($service->get_meeting_info($z)) {
            $response =& $service->lastresponse;
            // Check for changes.
            $changed = false;
            foreach ($z as $field => $value) {
                // The start_url has a parameter that always changes, so it doesn't really count as a change.
                if ($field != 'start_url' && $response->{$field} != $value) {
                    $changed = true;
                    break;
                }
            }
            if ($changed) {
                // Save in database.
                $response->timemodified = time();
                $DB->update_record('zoom', $response);
                // If the topic/title was changed, mark this course for cache clearing.
                if ($z->name != $response->name) {
                    $coursestoupdate[$z->course] = 1;
                }
                // Check if calendar needs updating.
                $calendar_changed = false;
                foreach ($calendar_fields as $field) {
                    if ($z->{$field} != $response->{$field}) {
                        $calendar_changed = true;
                    }
                }
                if ($calendar_changed) {
                    // Update calendar.
                    zoom_calendar_item_update($response);
                }
            }
        } else {
            $z->status = ZOOM_MEETING_EXPIRED;
            $DB->update_record('zoom', $z);
        }
    }
    // Clear caches for meetings whose topic/title changed (and rebuild as needed).
    foreach (array_flip($coursestoupdate) as $course) {
        rebuild_course_cache($course, true);
    }
}