PATH:
home
/
ediuae
/
petalwellnessspa.com
/
wp-content
/
plugins
/
simply-schedule-appointments
/
includes
<?php /** * Simply Schedule Appointments Web Meetings. * * @since 4.3.3-beta3 * @package Simply_Schedule_Appointments */ /** * Simply Schedule Appointments Web Meetings. * * @since 4.3.3-beta3 */ class SSA_Web_Meetings { /** * Parent plugin class. * * @since 4.3.3-beta3 * * @var Simply_Schedule_Appointments */ protected $plugin = null; /** * Constructor. * * @since 4.3.3-beta3 * * @param Simply_Schedule_Appointments $plugin Main plugin object. */ public function __construct( $plugin ) { $this->plugin = $plugin; $this->hooks(); } /** * Initiate our hooks. * * @since 4.3.3-beta3 */ public function hooks() { add_filter( 'ssa/appointment/before_insert', array( $this, 'set_custom_web_meeting_url' ), 100 ); add_filter( 'ssa/appointment/before_update', array( $this, 'maybe_update_web_meeting_url_when_reassigned' ), 10, 3 ); } /** * Checks if Staff feature is enabled. * * @since 4.9.6 * * @return boolean */ public function should_include_staff_web_meetings() { $settings = $this->plugin->settings->get(); if ( $settings['staff'] && $settings['staff']['enabled'] ) { return true; } return false; } /** * Checks what type of web meetings url the Appointment should have, based on it's Appointment Type. * * @since 4.3.3-beta3 * * @param array $data The provided data for the appointment. * @return array */ public function set_custom_web_meeting_url( $data ) { if ( empty( $data['appointment_type_id'] ) ) { return $data; } $appointment_type = $this->plugin->appointment_type_model->get( $data['appointment_type_id'] ); if ( empty( $appointment_type['web_meetings']['provider'] ) ) { return $data; } if ( 'custom' === $appointment_type['web_meetings']['provider'] && ! empty( $appointment_type['web_meetings']['url'] ) ) { $data['web_meeting_url'] = trim( $appointment_type['web_meetings']['url'] ); } // If staff feature is disabled, but Appointment type have the provider set to 'staff', just use the custom web meeting url if set. if ( ! $this->should_include_staff_web_meetings() && 'staff' === $appointment_type['web_meetings']['provider'] && ! empty( $appointment_type['web_meetings']['url'] ) ) { $data['web_meeting_url'] = trim( $appointment_type['web_meetings']['url'] ); return $data; } // If staff feature is set and Appointment type have the provider set to 'staff', use the staff web meeting url if set. if ( 'staff' === $appointment_type['web_meetings']['provider'] && // if staff is the provider. in_array( $appointment_type['staff']['required'], array( 'any', 'all', 'user_preference' ), true ) && // if any or all staff members are required. ! empty( $data['staff_ids'] ) // if the appointment has staff members assigned. ) { // use the first web meetings url found on the list of staff members. $selected_web_meeting_url = null; foreach ( $data['staff_ids'] as $staff_id ) { $staff = new SSA_Staff_Object( $staff_id ); $web_meeting_url = $staff->get_web_meetings_url(); if ( ! empty( $web_meeting_url ) ) { $selected_web_meeting_url = $web_meeting_url; break; } } // if a staff member web meeting url was found, use it. if ( ! empty( $selected_web_meeting_url ) ) { $data['web_meeting_url'] = trim( $selected_web_meeting_url ); } elseif ( ! empty( $appointment_type['web_meetings']['url'] ) ) { // If no staff member has a web meeting url AND we have a default staff url set, use it. $data['web_meeting_url'] = trim( $appointment_type['web_meetings']['url'] ); } } elseif ( 'staff' === $appointment_type['web_meetings']['provider'] && // if staff is the provider. in_array( $appointment_type['staff']['required'], array( 'any', 'all', 'user_preference' ), true ) && // if any or all staff members are required. empty( $data['staff_ids'] ) // if the appointment has NO staff members assigned. ) { if ( ! empty( $appointment_type['web_meetings']['url'] ) ) { $data['web_meeting_url'] = trim( $appointment_type['web_meetings']['url'] ); } else { $data['web_meeting_url'] = ''; } return $data; } return $data; } /** * Update web meeting url when an appointment is reassigned to another team member * * @param array $data * @param array $data_before * @param string|integer $appointment_id * @return array */ public function maybe_update_web_meeting_url_when_reassigned( $data, $data_before, $appointment_id ) { if ( ! SSA_Appointment_Model::is_appointment_reassigned( $data, $data_before ) ) { return $data; } if ( empty( $data_before['appointment_type_id'] ) ) { return $data; } $data['appointment_type_id'] = $data_before['appointment_type_id']; return $this->set_custom_web_meeting_url( $data ); } }
[-] class-settings.php
[edit]
[-] class-hooks.php
[edit]
[-] class-availability-query.php
[edit]
[-] class-appointment-model.php
[edit]
[-] class-beaver-builder.php
[edit]
[-] class-web-meetings.php
[edit]
[-] class-availability-model.php
[edit]
[-] class-recipient-admin.php
[edit]
[-] class-recipient-customer.php
[edit]
[-] class-constants.php
[edit]
[-] class-async-action-model.php
[edit]
[-] class-support.php
[edit]
[-] class-google-calendar-client.php
[edit]
[+]
..
[-] class-capabilities.php
[edit]
[-] class-encryption.php
[edit]
[-] class-availability-cache-invalidation.php
[edit]
[-] class-calendar-events-settings.php
[edit]
[-] class-settings-global.php
[edit]
[-] class-translation.php
[edit]
[-] class-cli.php
[edit]
[-] class-missing.php
[edit]
[-] class-action-scheduler.php
[edit]
[-] class-templates-api.php
[edit]
[-] class-blackout-dates.php
[edit]
[-] class-calendar-events-object.php
[edit]
[-] class-divi.php
[edit]
[-] class-templates.php
[edit]
[-] class-wp-admin.php
[edit]
[-] class-appointment-factory.php
[edit]
[-] class-scheduling-max-per-day.php
[edit]
[-] class-notifications-api.php
[edit]
[-] class-shortcodes.php
[edit]
[-] class-validation.php
[edit]
[-] class-resource-group-object-factory.php
[edit]
[-] class-payment-object.php
[edit]
[-] class-locale.php
[edit]
[-] class-ics-exporter.php
[edit]
[-] class-filesystem.php
[edit]
[-] class-recipient-shared.php
[edit]
[-] class-availability-schedule.php
[edit]
[-] class-block-upcoming-appointments.php
[edit]
[-] class-elementor.php
[edit]
[-] class-appointment-meta-model.php
[edit]
[-] class-revision-meta-model.php
[edit]
[+]
divi
[-] class-notifications.php
[edit]
[-] class-upgrade.php
[edit]
[-] class-utils.php
[edit]
[-] class-availability-functions.php
[edit]
[-] class-external-calendar-api.php
[edit]
[-] class-csv-exporter.php
[edit]
[-] class-external-google-calendar-api.php
[edit]
[-] class-twig-extension.php
[edit]
[-] class-bootstrap.php
[edit]
[-] class-notices.php
[edit]
[-] class-availability-schedule-factory.php
[edit]
[-] class-blackout-dates-settings.php
[edit]
[-] class-support-status.php
[edit]
[-] class-block-booking.php
[edit]
[-] class-advanced-scheduling-availability.php
[edit]
[-] class-exception.php
[edit]
[-] class-styles-settings.php
[edit]
[-] class-forms.php
[edit]
[-] class-recipient-staff.php
[edit]
[+]
beaver-builder
[-] class-users.php
[edit]
[-] class-sequence-factory.php
[edit]
[+]
third-party
[-] class-locales.php
[edit]
[-] class-db-model.php
[edit]
[-] class-db.php
[edit]
[-] class-availability-default.php
[edit]
[-] class-staff-settings.php
[edit]
[-] class-notification-model.php
[edit]
[-] class-settings-installed.php
[edit]
[-] class-appointment-object.php
[edit]
[-] class-notices-api.php
[edit]
[-] class-translation-settings.php
[edit]
[-] class-support-status-api.php
[edit]
[-] class-notices-data.php
[edit]
[-] class-appointment-type-object.php
[edit]
[-] class-appointment-type-object-factory.php
[edit]
[-] class-availability-block-factory.php
[edit]
[-] class-recipient.php
[edit]
[-] class-revision-model.php
[edit]
[-] class-customers.php
[edit]
[-] class-settings-api.php
[edit]
[-] class-cache.php
[edit]
[-] class-availability-detective-case.php
[edit]
[-] class-styles.php
[edit]
[-] class-capacity-settings.php
[edit]
[-] class-gcal-exporter.php
[edit]
[-] class-advanced-scheduling-settings.php
[edit]
[-] class-appointment-type-model.php
[edit]
[-] class-notifications-settings.php
[edit]
[-] class-period.php
[edit]
[-] class-external-api.php
[edit]
[-] class-error-notices.php
[edit]
[-] class-availability-cache.php
[edit]
[-] class-developer-settings.php
[edit]
[-] class-dashboard-upcoming-appointments-widget.php
[edit]
[-] class-availability-external-model.php
[edit]
[-] class-availability-block.php
[edit]
[-] class-customer-information.php
[edit]
[+]
elementor
[-] class-appointment-type-label-model.php
[edit]
[-] class-embed-booking-app-api.php
[edit]
[+]
lib
[-] class-sequence.php
[edit]
[-] class-debug.php
[edit]
[-] class-appointment-types-db.php
[edit]