File "plugin.php"

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

<?php

if ( ! defined( 'ABSPATH' ) ) {
	exit( 'Press Enter to proceed...' );
}

class MPHBElementor {

	const SLUG = 'mphb-elementor';
	const WIDGET_CATEGORY_NAME = 'motopress-hotel-booking';

	private static $instance = null;


	private function __construct() {

        add_action( 'plugins_loaded', array( $this, 'loadTextdomain' ) );

		// Check if the MotoPress Hotel Booking is active
		if ( ! class_exists( 'HotelBookingPlugin' ) ) {
			return;
		}

		// Check if the Elementor is active
		if ( ! did_action( 'elementor/loaded' ) ) {
			return;
		}

		// Check required version
		if ( ! version_compare( ELEMENTOR_VERSION, '3.5.0', '>=' ) ) {
			return;
		}

		add_filter( 'elementor/elements/categories_registered', array( $this, 'registerCategories' ), 10, 1 );
		add_filter( 'elementor/widgets/register', array( $this, 'registerWidgets' ), 10, 1 );

		add_action( 'elementor/init', array( $this, 'addAvailableRoomsData' ) );
		add_action( 'elementor/preview/enqueue_styles', array( $this, 'enqueuePreviewStyles' ) );

	}


	public function loadTextdomain() {

		global $wp_version;

		$isWp47 = version_compare( $wp_version, '4.7', '>=' );

		$locale = $isWp47 ? get_user_locale() : get_locale();
		$locale = apply_filters( 'plugin_locale', $locale, self::SLUG );

		// wp-content/languages/mphb-elementor/mphb-elementor-{lang}_{locale}.mo
		$moFile = sprintf( '%1$s/%2$s/%2$s-%3$s.mo', WP_LANG_DIR, self::SLUG, $locale );

		load_textdomain( self::SLUG, $moFile );
		load_plugin_textdomain( self::SLUG, false, self::SLUG . '/languages' );
	}


	/**
	 * Note that the categories are displayed in the widgets panel, only if they
	 * have widgets assigned to them.
	 * @param \Elementor\Elements_Manager
	 */
	public function registerCategories( $elementsManager ) {

		$elementsManager->add_category(
			self::WIDGET_CATEGORY_NAME,
			array(
				'title' => __( 'MotoPress Hotel Booking', 'mphb-elementor' ),
				'icon'  => 'fa fa-plug',
			)
		);
	}

	protected function widgets() {

		require __DIR__ . '/widgets/abstract-widget.php';
		require __DIR__ . '/widgets/abstract-gallery-widget.php';
		require __DIR__ . '/widgets/abstract-calendar-widget.php';
		require __DIR__ . '/widgets/search-form-widget.php';
		require __DIR__ . '/widgets/search-results-widget.php';
		require __DIR__ . '/widgets/rooms-widget.php';
		require __DIR__ . '/widgets/room-widget.php';
		require __DIR__ . '/widgets/services-widget.php';
		require __DIR__ . '/widgets/rates-widget.php';
		require __DIR__ . '/widgets/availability-widget.php';
		require __DIR__ . '/widgets/booking-confirmation-widget.php';
		require __DIR__ . '/widgets/checkout-widget.php';
		require __DIR__ . '/widgets/availability-calendar-widget.php';

		require __DIR__ . '/widgets/accommodation/abstract-accommodation-widget.php';
		require __DIR__ . '/widgets/accommodation/featured-image-widget.php';
		require __DIR__ . '/widgets/accommodation/attribute-widget.php';
		require __DIR__ . '/widgets/accommodation/attributes-widget.php';
		require __DIR__ . '/widgets/accommodation/content-widget.php';
		require __DIR__ . '/widgets/accommodation/gallery-widget.php';
		require __DIR__ . '/widgets/accommodation/price-widget.php';
		require __DIR__ . '/widgets/accommodation/title-widget.php';

		return array(
			new \mphbe\widgets\SearchFormWidget(),
			new \mphbe\widgets\SearchResultsWidget(),
			new \mphbe\widgets\RoomsWidget(),
			new \mphbe\widgets\RoomWidget(),
			new \mphbe\widgets\ServicesWidget(),
			new \mphbe\widgets\RatesWidget(),
			new \mphbe\widgets\AvailabilityWidget(),
			new \mphbe\widgets\BookingConfirmationWidget(),
			new \mphbe\widgets\CheckoutWidget(),
			new \mphbe\widgets\AvailabilityCalendarWidget(),
			new \mphbe\widgets\AccommodationFeaturedImageWidget(),
			new \mphbe\widgets\AccommodationAttributeWidget(),
			new \mphbe\widgets\AccommodationAttributesWidget(),
			new \mphbe\widgets\AccommodationContentWidget(),
			new \mphbe\widgets\AccommodationGalleryWidget(),
			new \mphbe\widgets\AccommodationPriceWidget(),
			new \mphbe\widgets\AccommodationTitleWidget(),
		);
	}

	/**
	 * @param \Elementor\Widgets_Manager
	 */
	public function registerWidgets( $widgetsManager ) {

		foreach ( $this->widgets() as $widget ) {
			$widgetsManager->register( $widget );
		}
	}

	public function enqueuePreviewStyles() {

		wp_enqueue_style( 'mphb-flexslider-css' );
	}

	public function addAvailableRoomsData() {

		$readableStatuses = array( 'publish' );

		if ( current_user_can( 'read_private_posts' ) ) {
			$readableStatuses[] = 'private';
		}

		$roomTypes = MPHB()->getRoomTypePersistence()->getPosts(
			array(
				'post_status' => $readableStatuses,
			)
		);

		array_walk( $roomTypes, array( MPHB()->getPublicScriptManager(), 'addRoomTypeData' ) );
	}

	public static function create() {

		if ( is_null( self::$instance ) ) {

			self::$instance = new self();
		}
	}
}