????
| Current Path : /home/degesdxb/public_html/wp-content/plugins/mphb-pricelabs/ |
| 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();