File "abstract-accommodation-widget.php"

Full Path: /home/romayxjt/public_html/wp-content/plugins/mphb-elementor/widgets/accommodation/abstract-accommodation-widget.php
File size: 3.9 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace mphbe\widgets;

use Elementor\Controls_Manager;

abstract class AbstractAccommodationWidget extends AbstractWidget
{
    private $accommodations_select = [];
    private $accommodation_attributes_select = [];
    protected $custom_attributes = [];
    protected $accommodation_id = '';

    abstract protected function mphb_render($settings);

    protected function render()
    {
        $settings = $this->get_settings_for_display();

        $this->accommodation_id = !empty($settings['accommodation_id']) ? (int) $settings['accommodation_id'] : get_the_ID();

        if ('mphb_room_type' !== get_post_type($this->accommodation_id)) {
            ?>
            <div>
                <div style="background: #f6f7f7; border-radius: 10px; padding: 3em 1em;">
                    <p style="text-align: center; font-size: 1.5em; margin: 0;"><i class="<?php echo esc_attr($this->get_icon())?>"></i></p>
                    <p style="text-align: center; font-weight: 700; font-size: 1.5em; margin: 0;"><?php echo esc_html($this->get_title()); ?></p>
                </div>
            </div>
            <?php
        } else {
            $this->mphb_render($settings);
        }
    }

    protected function add_accommodation_control()
    {
        $this->add_control(
            'accommodation_id',
            [
                'label' => esc_html__('Accommodation Type', 'mphb-elementor'),
                'description' => esc_html__('Leave blank to use current.', 'mphb-elementor'),
                'type' => Controls_Manager::SELECT2,
                'label_block' => true,
                'multiple' => false,
                'options' => $this->get_accommodations_to_select(),
            ]
        );
    }

    protected function add_accommodation_attribute_control()
    {
        $this->add_control(
            'attribute',
            [
                'label' => esc_html__('Attribute', 'mphb-elementor'),
                'type' => Controls_Manager::SELECT2,
                'label_block' => true,
                'multiple' => false,
                'options' => $this->get_accommodation_attributes_to_select(),
            ]
        );
    }

    protected function get_accommodations_to_select()
    {

        if (!$this->accommodations_select) {
            $this->fill_accommodations();
        }

        return $this->accommodations_select;
    }

    private function fill_accommodations()
    {

        $query = new \WP_Query(array(
            'post_type' => 'mphb_room_type',
            'posts_per_page' => -1
        ));

        if (!$query->have_posts()) {
            return;
        }

        while ($query->have_posts()) {
            $query->the_post();

            $this->accommodations_select[get_the_ID()] = get_the_title() . ' #' . get_the_ID();
        }

        wp_reset_postdata();
    }

    protected function get_accommodation_attributes_to_select()
    {
        if (!$this->accommodation_attributes_select) {
            $this->fill_accommodation_attributes();
        }

        return $this->accommodation_attributes_select;
    }

    private function fill_accommodation_attributes()
    {
        global $mphbAttributes;

        $this->accommodation_attributes_select = array(
            'capacity' =>  __('Total Capacity', 'mphb-elementor'),
            'amenities' =>  __('Amenities', 'mphb-elementor'),
            'view' =>  __('View', 'mphb-elementor'),
            'size' =>  __('Size', 'mphb-elementor'),
            'bed-types' =>  __('Bed Types', 'mphb-elementor'),
            'categories' =>  __('Categories', 'mphb-elementor'),
        );

        foreach ($mphbAttributes as $customAttribute) {
            $this->accommodation_attributes_select[$customAttribute['attributeName']] = $customAttribute['title'];
        }

        $this->custom_attributes = $mphbAttributes;
    }
}