????

Your IP : 216.73.216.188


Current Path : /home/degesdxb/public_html/wp-content/plugins/mphb-pricelabs/
Upload File :
Current File : /home/degesdxb/public_html/wp-content/plugins/mphb-pricelabs/mphb-pricelabs.php

<?php
/**
 * Plugin Name: Hotel Booking PriceLabs Integration
 * Plugin URI: https://motopress.com/products/hotel-booking-pricelabs/
 * Description: Allows you to automatically update accommodation rates in MotoPress Hotel Booking with prices from PriceLabs.
 * Version: 1.0.0
 * Requires at least: 5.7
 * Requires PHP: 7.4
 * Author: MotoPress
 * Author URI: https://motopress.com/
 * License: GPLv2 or later
 * Text Domain: mphb-pricelabs
 * Domain Path: /languages
 */

namespace MPHB\Addons\MPHB_Pricelabs;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

final class MPHB_Pricelabs {

	private static $pluginClasses = array(
		Plugin_Lifecycle_Handler::class     => 'includes/handlers/plugin-lifecycle-handler.php',
		EDD_Plugin_Updater::class           => 'includes/handlers/edd-plugin-updater.php',

		Last_Pricelabs_Import_Field::class  => 'includes/admin-pages/last-pricelabs-import-field.php',
		Main_Settings_Group::class          => 'includes/admin-pages/main-settings-group.php',
		License_Settings_Group::class       => 'includes/admin-pages/license-settings-group.php',

		Pricelabs_Rate::class               => 'includes/data/pricelabs-rate.php',

		Plugin_Settings_Handler::class      => 'includes/handlers/plugin-settings-handler.php',
		Crons_Handler::class                => 'includes/handlers/crons-handler.php',
		Accommodations_Rates_Handler::class => 'includes/handlers/accommodations-rates-handler.php',

		Abstract_WP_Cron::class             => 'includes/crons/abstract-wp-cron.php',
		Abstract_Task_Chain_Cron::class     => 'includes/crons/abstract-task-chain-cron.php',
		Import_Pricelabs_Prices_Cron::class => 'includes/crons/import-pricelabs-prices-cron.php',
		Start_Pricelabs_Import_Cron::class  => 'includes/crons/start-pricelabs-import-cron.php',

		Pricelabs_API::class                => 'includes/pricelabs-api.php',
	);

	private static $instance;

	private $pluginData;
	private $pluginDir;
	private $pluginUrl;

	private Pricelabs_API $pricelabs_api;

	// prevent cloning of singleton
	public function __clone() {}
	public function __wakeup() {}

	public static function get_instance() {

		if ( ! isset( self::$instance ) ) {

			self::$instance = new MPHB_Pricelabs();
			// init plugin in a separate method to execute some plugin methods
			self::$instance->init_plugin();
		}

		return self::$instance;
	}

	private function __construct() {

		$this->pluginDir = plugin_dir_path( __FILE__ );
		$this->pluginUrl = plugin_dir_url( __FILE__ );

		spl_autoload_register(
			function( $class ) {
				$this->load_plugin_class( $class );
			},
			true,
			true
		);
	}

	private function init_plugin(): void {

		$pluginLifecycleHandler = new Plugin_Lifecycle_Handler( __FILE__ );

		add_action(
			'plugins_loaded',
			function() use ( $pluginLifecycleHandler ) {

				load_plugin_textdomain(
					'mphb-pricelabs',
					false,
					$this->pluginDir . 'languages/'
				);

				// do not initialize plugin if environment does not suite it
				if ( ! $pluginLifecycleHandler->is_wp_environment_suited_for_plugin() ) {
					return;
				}

				$this->pricelabs_api = new Pricelabs_API(
					Plugin_Settings_Handler::get_pricelab_api_key()
				);

				new Plugin_Settings_Handler();
				new Crons_Handler();
				new Accommodations_Rates_Handler();
			},
			11 // Hotel Booking uses "plugins_loaded" with priority 10 so we want to be loaded after it
		);
	}


	private function load_plugin_class( string $classNameWithNamespace ) {

		$classNameWithNamespace = ltrim( $classNameWithNamespace, '\\' );

		if ( ! str_starts_with( $classNameWithNamespace, __NAMESPACE__ ) ) {
			return;
		}

		if ( ! empty( static::$pluginClasses[ $classNameWithNamespace ] ) ) {

			$classFilePath = static::get_plugin_path( static::$pluginClasses[ $classNameWithNamespace ] );

			if ( file_exists( $classFilePath ) ) {

				require_once $classFilePath;
			}
		}
	}

	/**
	 * @param string $relativeFilePath - starts without /
	 */
	public static function get_plugin_path( string $relativeFilePath = '' ): string {

		return static::get_instance()->pluginDir . $relativeFilePath;
	}

	/**
	 * @param string $relativeUrl - starts without /
	 */
	public static function get_plugin_url( string $relativeUrl = '' ): string {

		return static::get_instance()->pluginUrl . $relativeUrl;
	}

	public static function get_product_id(): string {
		return '1590518';
	}

	private static function get_plugin_data(): array {
		if ( empty( static::get_instance()->pluginData ) ) {
			static::get_instance()->pluginData = get_plugin_data( __FILE__, false, false );
		}
		return static::get_instance()->pluginData;
	}

	public static function get_plugin_author_name(): string {
		$pluginData = static::get_plugin_data();
		return isset( $pluginData['Author'] ) ? $pluginData['Author'] : '';
	}

	public static function get_plugin_version(): string {
		$pluginData = static::get_plugin_data();
		return isset( $pluginData['Version'] ) ? $pluginData['Version'] : '';
	}

	public static function get_plugin_source_server_url(): string {
		$pluginData = static::get_plugin_data();
		return isset( $pluginData['PluginURI'] ) ? $pluginData['PluginURI'] : '';
	}


	public static function is_edd_license_enabled(): bool {
		return (bool) apply_filters( 'mphb_pricelabs__use_edd_license', true );
	}

	public static function get_pricelab_api(): Pricelabs_API {
		return self::get_instance()->pricelabs_api;
	}
}

// init plugin
MPHB_Pricelabs::get_instance();