Abstract_Meetings::update( WP_Post|int $event )
Handles update of Webex meeting when Event details change.
Contents
Parameters
- $event
-
(WP_Post|int) (Required) The event (or event ID) we're updating the meeting for.
Source
File: src/Tribe/Meetings/Webex/Abstract_Meetings.php
public function update( $event ) {
// Get event if not an object.
if ( ! ( $event instanceof \WP_Post ) ) {
$event = tribe_get_event( $event );
}
// There is no meeting to update.
if ( ! ( $event instanceof \WP_Post ) || empty( $event->webex_meeting_id ) ) {
return;
}
// If manually connected, do not update Webex meeting or webinar when event details change.
$manual_connected = get_post_meta( $event->ID, Virtual_Events_Meta::$key_autodetect_source, true );
if ( Webex_Meta::$key_source_id === $manual_connected ) {
return;
}
$start_date = tribe_get_request_var( 'EventStartDate', $event->start_date );
$start_time = tribe_get_request_var( 'EventStartTime', $event->start_time );
$time_zone = tribe_get_request_var( 'EventTimezone', $event->timezone );
$end_date = tribe_get_request_var( 'EventEndDate', $event->end_date );
$end_time = tribe_get_request_var( 'EventEndTime', $event->end_time );
$event_body = [
'title' => $event->post_title,
'start' => $this->format_date_for_webex( $start_date, $start_time, $time_zone ),
'end' => $this->format_date_for_webex( $end_date, $end_time, $time_zone ),
'timezone' => $event->timezone,
'password' => $event->webex_password,
];
$meeting_data = get_post_meta( $event->ID, Virtual_Events_Meta::$prefix . 'webex_meeting_data', true );
$meeting_body = [
'title' => $meeting_data['title'],
'start' => $meeting_data['start'],
'end' => $meeting_data['end'],
'timezone' => $meeting_data['timezone'],
'password' => $meeting_data['password'],
];
$diff = array_diff_assoc( $event_body, $meeting_body );
// Nothing to update.
if ( empty( $diff ) ) {
return;
}
$post_id = $event->ID;
/**
* Filters the contents of the request that will be made to the Webex API to update a meeting link.
*
* @since 1.9.0
*
* @param array<string,mixed> The current content of the request body.
* @param \WP_Post $event The event post object, as decorated by the `tribe_get_event` function.
* @param Meetings $this The current API handler object instance.
*/
$body = apply_filters(
"tec_events_virtual_meetings_webex_{$this::$meeting_type}_update_request_body",
$event_body,
$event,
$this
);
// Load the account.
$account_id = $this->api->get_account_id_in_admin( $post_id );
if ( empty( $account_id ) ) {
return;
}
$this->api->load_account_by_id( $account_id );
if ( ! $this->api->get_token_authorization_header() ) {
return;
}
// Update.
$this->api->put(
Api::$api_base . "{$this::$api_endpoint}/{$event->webex_meeting_id}",
[
'headers' => [
'Authorization' => $this->api->get_token_authorization_header(),
'Content-Type' => 'application/json; charset=utf-8',
],
'body' => wp_json_encode( $body ),
],
Api::PUT_RESPONSE_CODE
)->then(
function ( array $response ) use ( $post_id, $event ) {
$this->process_meeting_update_response( $response, $event, $post_id );
}
)->or_catch(
function ( \WP_Error $error ) use ( $event ) {
do_action(
'tribe_log',
'error',
__CLASS__,
[
'action' => __METHOD__,
'code' => $error->get_error_code(),
'message' => $error->get_error_message(),
]
);
$error_data = wp_json_encode( $error->get_error_data() );
$decoded = json_decode( $error_data, true );
$error_message = null;
if ( false !== $decoded && is_array( $decoded ) && isset( $decoded['message'] ) ) {
$error_message = $decoded['message'];
}
// Do something to indicate failure with $error_message?
$this->classic_editor->render_meeting_generation_error_details( $event, $error_message, true );
}
);
}
Changelog
| Version | Description |
|---|---|
| 1.9.0 | Introduced. |