settings_installed->is_installed( 'staff' ); $is_staff_enabled = ssa()->settings_installed->is_enabled( 'staff' ); $is_staff_initialized = false; if( $is_staff_enabled ) { $staff_object_query = ssa()->staff_model->query( array( 'status' => 'publish', )); if (is_array($staff_object_query) && count($staff_object_query) > 0) { $is_staff_initialized = true; } } $show_settings_block = false; if ( $is_staff_installed && $is_staff_initialized ) { $show_settings_block = true; } return $show_settings_block; } /** * Determines whether to show the Resources section in the Upcoming Appointments editor block. * * Checks if the Resources feature is installed, enabled, and has Resource that are not of type identical. * If these conditions are met, it indicates that the Resources section should be displayed. * * @since 1.0.0 * * @return bool True if the Resources section should be shown, false otherwise. */ public function should_show_resources_section() { $is_resources_installed = ssa()->settings_installed->is_installed( 'resources' ); $is_resources_enabled = ssa()->settings_installed->is_enabled( 'resources' ); $is_resources_initialized = false; if( $is_resources_enabled ) { $resources_object_query = ssa()->resource_group_model->query( array( 'status' => 'publish', )); $filtered_resources_object = array_values(array_filter($resources_object_query, function($resource) { return $resource['resource_type'] !== 'identical'; })); if (is_array($filtered_resources_object) && count($filtered_resources_object) > 0) { $is_resources_initialized = true; } } $show_settings_block = false; if ( $is_resources_installed && $is_resources_initialized ) { $show_settings_block = true; } return $show_settings_block; } /** * Register Upcoming Appointments widget controls. * * Adds different input fields to allow the user to change and customize the widget settings. * * @since 1.0.0 * @access protected */ protected function register_controls() { /* Block header */ $this->start_controls_section( 'upcoming_appointments_block_section', [ 'label' => __( 'Block Description', 'simply-schedule-appointments' ), 'tab' => \Elementor\Controls_Manager::TAB_CONTENT, ] ); $icon_url = $this->get_icon(); $this->add_control( 'title', [ 'raw' => '
Upcoming Appointments
', 'type' => \Elementor\Controls_Manager::RAW_HTML, ] ); $this->add_control( 'description', [ 'raw' => '

' .esc_html__('Displays Upcoming Appointments. You can select what to show in the appointment card.', 'simply-schedule-appointments') . '

', 'type' => \Elementor\Controls_Manager::RAW_HTML, ] ); $this->end_controls_section(); /* Display information block */ $this->start_controls_section( 'ssa_upcoming_appointments_display', [ 'label' => __( 'Display Information', 'simply-schedule-appointments' ), ] ); $display_option = [ 'Display Appointment Types' => __('Appointment Types', 'simply-schedule-appointments'), ]; $default_display_option = key($display_option); $this->add_control( 'appointmentDisplay', [ 'label' => esc_html__( $display_option[$default_display_option], 'textdomain' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Show', 'textdomain' ), 'label_off' => esc_html__( 'Hide', 'textdomain' ), 'return_value' => $default_display_option, 'default' => '', ] ); $this->end_controls_section(); /* Display selectable resources */ if ($this->should_show_resources_section()) { $this->start_controls_section( 'ssa_upcoming_appointments_display_resources', [ 'label' => __( 'Display Resources', 'simply-schedule-appointments' ), ] ); $resource_display_setting = [ 'Disable' => __('Display Resources', 'simply-schedule-appointments'), ]; $default_resource_display_setting = key($resource_display_setting); $this->add_control( 'disable_resources', [ 'label' => esc_html__( $default_resource_display_setting, 'simply-schedule-appointments'), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__('Hide', 'simply-schedule-appointments'), 'label_off' => esc_html__('Show', 'simply-schedule-appointments'), 'return_value' => $resource_display_setting[$default_resource_display_setting], 'default' => $resource_display_setting[$default_resource_display_setting], ] ); $all_display_option = [ 'All' => __('All', 'simply-schedule-appointments'), ]; $default_all_display_setting = key($all_display_option); $this->add_control( 'all_resources', [ 'label' => esc_html__( $default_all_display_setting, 'simply-schedule-appointments'), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__('Show', 'simply-schedule-appointments'), 'label_off' => esc_html__('Hide', 'simply-schedule-appointments'), 'return_value' => $all_display_option[$default_all_display_setting], 'default' => $all_display_option[$default_all_display_setting], 'condition' => [ 'disable_resources' => '', ], ] ); $appointment_resources = ssa()->resource_group_model->query( array( 'status' => 'publish' )); $filtered_resources = array_values(array_filter($appointment_resources, function($resource) { return $resource['resource_type'] !== 'identical'; })); $ssa_appointment_label_key_values = wp_list_pluck( $filtered_resources, 'title', 'id' ); $this->add_control( 'selected_resources', [ 'label' => esc_html__('Resources', 'simply-schedule-appointments'), 'type' => \Elementor\Controls_Manager::SELECT2, 'options' => $ssa_appointment_label_key_values, 'label_block' => true, 'multiple' => true, 'frontend_available' => true, 'condition' => [ 'disable_resources' => '', 'all_resources' => '' ], ] ); $this->end_controls_section(); } /* Display team member information */ if ($this->should_show_staff_section()) { $this->start_controls_section( 'ssa_upcoming_appointments_display_member_information', [ 'label' => __( 'Display Team Member Information', 'simply-schedule-appointments' ), ] ); $member_information_setting = [ 'Disable' => __('Display Team Members', 'simply-schedule-appointments'), ]; $default_member_information_setting = key($member_information_setting); $this->add_control( 'disable_member_info', [ 'label' => esc_html__( $default_member_information_setting, 'simply-schedule-appointments'), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__('Hide', 'simply-schedule-appointments'), 'label_off' => esc_html__('Show', 'simply-schedule-appointments'), 'return_value' => $member_information_setting[$default_member_information_setting], 'default' => $member_information_setting[$default_member_information_setting], ] ); $member_information = [ 'Display Member Names' => __('Team Member Names', 'simply-schedule-appointments'), 'Display Member Images' => __('Team Member Images', 'simply-schedule-appointments'), ]; foreach ($member_information as $slug => $label) { $this->add_control( 'toggle_' . $slug, [ 'label' => esc_html__('Show ', 'simply-schedule-appointments') . $label, 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__('Show', 'simply-schedule-appointments'), 'label_off' => esc_html__('Hide', 'simply-schedule-appointments'), 'return_value' => $slug, 'default' => '', 'condition' => [ 'disable_member_info' => '', ], ] ); } $this->end_controls_section(); } } /** * Render Upcoming Appointments widget output on the frontend. * * Written in PHP and used to generate the final HTML. * * @since 1.0.0 * @access protected */ protected function render() { $settings = $this->get_settings_for_display(); if ($settings['appointmentDisplay']) { $attrs['appointmentDisplay'] = $settings['appointmentDisplay']; } if ($this->should_show_resources_section()) { if( ! empty($settings['disable_resources'])){ $attrs['resourceDisplay'] = $settings['disable_resources']; } if ( ! empty( $settings['selected_resources'] ) ) { $attrs['resourceTypes'] = $settings['selected_resources'] ; } else { $attrs['resourceTypes'] = []; } if($settings['all_resources']){ $attrs['allResourcesTypeOption'] = $settings['all_resources']; } } else { $attrs['resourceTypes'] = []; } $member_info = []; if ($this->should_show_staff_section()) { foreach ($settings as $key => $value) { if (strpos($key, 'toggle_') === 0) { if ($value && $key !== 'toggle_') { $slug = substr($key, 7); $member_info[] = $slug; } } } if (!empty($settings['disable_member_info'])) { $member_info[] = $settings['disable_member_info']; } if (!empty($member_info)) { $attrs['memberInfo'] = $member_info; } } else { $attrs['memberInfo'] = []; } ?>
get_render_attribute_string( 'upcoming_appointments' ); ?>>
shortcodes->ssa_upcoming_appointments( array( 'block_settings' => $attrs ) ); ?>