File "rooms-widget.php"

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

<?php

namespace mphbe\widgets;

use \Elementor\Controls_Manager;

class RoomsWidget extends AbstractGalleryWidget
{
    public function get_name()
    {
        return 'mphbe-rooms';
    }

    public function get_title()
    {
        return __('Accommodation Types', 'mphb-elementor');
    }

    public function get_icon()
    {
        // Elementor icon class ( https://pojome.github.io/elementor-icons/ ) or
        // Font Awesome icon class ( https://fontawesome.com/ ), like:
        return 'eicon-photo-library';
    }

    /**
     * Adds different input fields to allow the user to change and customize the
     * widget settings.
     */
    protected function register_controls()
    {
        $this->start_controls_section('section_parameters', array(
            'label'       => __('Parameters', 'mphb-elementor')
        ));

        $this->add_control('title', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Title', 'mphb-elementor'),
            'description' => __('Whether to display title of the accommodation type.', 'mphb-elementor'),
            'default'     => 'true',
            'options'     => array(
                'true'          => __('Yes', 'mphb-elementor'),
                'false'         => __('No', 'mphb-elementor')
            )
        ));

        $this->add_control('featured_image', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Featured image', 'mphb-elementor'),
            'description' => __('Whether to display featured image of the accommodation type.', 'mphb-elementor'),
            'default'     => 'true',
            'options'     => array(
                'true'          => __('Yes', 'mphb-elementor'),
                'false'         => __('No', 'mphb-elementor')
            )
        ));

        $this->add_control('gallery', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Gallery', 'mphb-elementor'),
            'description' => __('Whether to display gallery of the accommodation type.', 'mphb-elementor'),
            'default'     => 'true',
            'options'     => array(
                'true'          => __('Yes', 'mphb-elementor'),
                'false'         => __('No', 'mphb-elementor')
            )
        ));

        $this->add_control('excerpt', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Excerpt', 'mphb-elementor'),
            'description' => __('Whether to display excerpt (short description) of the accommodation type.', 'mphb-elementor'),
            'default'     => 'true',
            'options'     => array(
                'true'          => __('Yes', 'mphb-elementor'),
                'false'         => __('No', 'mphb-elementor')
            )
        ));

        $this->add_control('details', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Details', 'mphb-elementor'),
            'description' => __('Whether to display details of the accommodation type.', 'mphb-elementor'),
            'default'     => 'true',
            'options'     => array(
                'true'          => __('Yes', 'mphb-elementor'),
                'false'         => __('No', 'mphb-elementor')
            )
        ));

        $this->add_control('price', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Price', 'mphb-elementor'),
            'description' => __('Whether to display price of the accommodation type.', 'mphb-elementor'),
            'default'     => 'true',
            'options'     => array(
                'true'          => __('Yes', 'mphb-elementor'),
                'false'         => __('No', 'mphb-elementor')
            )
        ));

        $this->add_control('view_button', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('View Button', 'mphb-elementor'),
            'description' => __('Whether to display "View Details" button with the link to accommodation type.', 'mphb-elementor'),
            'default'     => 'true',
            'options'     => array(
                'true'          => __('Yes', 'mphb-elementor'),
                'false'         => __('No', 'mphb-elementor')
            )
        ));

        $this->add_control('book_button', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Book Button', 'mphb-elementor'),
            'description' => __('Whether to display "Book" button.', 'mphb-elementor'),
            'default'     => 'true',
            'options'     => array(
                'true'          => __('Yes', 'mphb-elementor'),
                'false'         => __('No', 'mphb-elementor')
            )
        ));

        $this->add_control('posts_per_page', array(
            'type'        => Controls_Manager::NUMBER,
            'label'       => __('Count per page', 'mphb-elementor'),
            'description' => __('-1 to display all.', 'mphb-elementor'),
            'default'     => '',
            'min'         => -1
        ));

        $this->add_control('class', array(
            'type'        => Controls_Manager::TEXT,
            'label'       => __('Class', 'mphb-elementor'),
            'description' => __('Custom CSS class for shortcode wrapper.', 'mphb-elementor'),
            'default'     => ''
        ));

        $this->add_control('category', array(
            'type'        => Controls_Manager::TEXT,
            'label'       => __('Categories', 'mphb-elementor'),
            'description' => __('Comma-separated IDs of categories that will be shown.', 'mphb-elementor'),
            'default'     => ''
        ));

        $this->add_control('tags', array(
            'type'        => Controls_Manager::TEXT,
            'label'       => __('Tags', 'mphb-elementor'),
            'description' => __('Comma-separated IDs of tags that will be shown.', 'mphb-elementor'),
            'default'     => ''
        ));

        $this->add_control('ids', array(
            'type'        => Controls_Manager::TEXT,
            'label'       => __('IDs', 'mphb-elementor'),
            'description' => __('Comma-separated IDs of accommodations that will be shown.', 'mphb-elementor'),
            'default'     => ''
        ));

        $this->add_control('relation', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Relation', 'mphb-elementor'),
            'description' => __('Logical relationship between each taxonomy when there is more than one.', 'mphb-elementor'),
            'default'     => 'OR',
            'options'     => array(
                'AND'           => __('AND', 'mphb-elementor'),
                'OR'            => __('OR', 'mphb-elementor')
            )
        ));

        $this->end_controls_section();

        $this->start_controls_section('section_order', array(
            'label'       => __('Order', 'mphb-elementor')
        ));

        $this->add_control('orderby', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Order By', 'mphb-elementor'),
            'default'     => 'menu_order',
            'options'     => array(
                'none'           => __('No order', 'mphb-elementor'),
                'ID'             => __('Post ID', 'mphb-elementor'),
                'author'         => __('Post author', 'mphb-elementor'),
                'title'          => __('Post title', 'mphb-elementor'),
                'name'           => __('Post name (post slug)', 'mphb-elementor'),
                'date'           => __('Post date', 'mphb-elementor'),
                'modified'       => __('Last modified date', 'mphb-elementor'),
                'parent'         => __('Parent ID', 'mphb-elementor'),
                'rand'           => __('Random order', 'mphb-elementor'),
                'comment_count'  => __('Number of comments', 'mphb-elementor'),
                'relevance'      => __('Relevance', 'mphb-elementor'),
                'menu_order'     => __('Page order', 'mphb-elementor'),
                'meta_value'     => __('Meta value', 'mphb-elementor'),
                'meta_value_num' => __('Numeric meta value', 'mphb-elementor'),
                'post__in'       => __('Price', 'mphb-elementor')
            )
        ));

        $this->add_control('order', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Order', 'mphb-elementor'),
            'default'     => 'DESC',
            'options'     => array(
                'ASC'            => __('Ascending (1, 2, 3)', 'mphb-elementor'),
                'DESC'           => __('Descending (3, 2, 1)', 'mphb-elementor')
            )
        ));

        $this->add_control('meta_key', array(
            'type'        => Controls_Manager::TEXT,
            'label'       => __('Meta Name', 'mphb-elementor'),
            'description' => __('Custom field name. Required if "orderby" is one of the "meta_value", "meta_value_num" or "meta_value_*".', 'mphb-elementor'),
            'default'     => ''
        ));

        $this->add_control('meta_type', array(
            'type'        => Controls_Manager::SELECT,
            'label'       => __('Meta Type', 'mphb-elementor'),
            'description' => __('Specified type of the custom field. Can be used in conjunction with "orderby" = "meta_value".', 'mphb-elementor'),
            'default'     => '',
            'options'     => array(
                ''               => __('Any', 'mphb-elementor'),
                'NUMERIC'        => __('Numeric', 'mphb-elementor'),
                'BINARY'         => __('Binary', 'mphb-elementor'),
                'CHAR'           => __('String', 'mphb-elementor'),
                'DATE'           => __('Date', 'mphb-elementor'),
                'TIME'           => __('Time', 'mphb-elementor'),
                'DATETIME'       => __('Date and time', 'mphb-elementor'),
                'DECIMAL'        => __('Decimal number', 'mphb-elementor'),
                'SIGNED'         => __('Signed number', 'mphb-elementor'),
                'UNSIGNED'       => __('Unsigned number', 'mphb-elementor')
            )
        ));

        $this->end_controls_section();
    }

    /**
     * Render the widget output on the frontend.
     *
     * Written in PHP and used to generate the final HTML.
     */
    protected function render()
    {

        $atts = $this->get_settings();

        do_action('mphbe_before_rooms_widget_render', $atts);

        $shortcode = MPHB()->getShortcodes()->getRooms();
        echo $shortcode->render($atts, null, $shortcode->getName()); // phpcs:ignore
        parent::render();

        do_action('mphbe_after_rooms_widget_render', $atts);

    }
}