/** * 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; }
/** * 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); } }