????

Your IP : 216.73.216.188


Current Path : /home/degesdxb/www/wp-content/plugins/mphb-mailchimp/classes/
Upload File :
Current File : //home/degesdxb/www/wp-content/plugins/mphb-mailchimp/classes/plugin.php

<?php

namespace MPHB\Addons\MailChimp;

class Plugin
{
    /** @var self */
    protected static $instance = null;

    // Single components
    /** @var \MPHB\Addons\MailChimp\Listeners\Ajax */
    protected $ajax = null;
    /** @var \MPHB\Addons\MailChimp\ScriptsManager */
    protected $scriptsManager = null;
    /** @var \MPHB\Addons\MailChimp\Settings */
    protected $settings = null;
    /** @var \MPHB\Addons\MailChimp\Admin\SettingsTab */
    protected $settingsTab = null;
    /** @var \MPHB\Addons\MailChimp\Update\PluginUpdater */
    protected $pluginUpdater = null;
    /** @var \MPHB\Addons\MailChimp\Listeners\Subscription */
    protected $subscriptionListener = null;
    /** @var \MPHB\Addons\MailChimp\Listeners\RoomsUpdate */
    protected $roomEventsListener = null;
    /** @var \MPHB\Addons\MailChimp\Listeners\BookingsUpdate */
    protected $bookingEventsListener = null;
    /** @var \MPHB\Addons\MailChimp\Listeners\Tracking */
    protected $campaignTrackingListener = null;

    // Containers
    /** @var \MPHB\Addons\MailChimp\Containers\ApisContainer */
    protected $apisContainer = null;
    /** @var \MPHB\Addons\MailChimp\Containers\RepositoriesContainer */
    protected $repositoriesContainer = null;
    /** @var \MPHB\Addons\MailChimp\Containers\ServicesContainer */
    protected $servicesContainer = null;

    // Other fields
    protected $pluginHeaders = [];

    public function __construct()
    {
        add_action('plugins_loaded', [$this, 'load']);
        add_action('init', [$this, 'init']);
    }

    public function load()
    {
        if (!class_exists('HotelBookingPlugin')) {
            return;
        }

        $this->scriptsManager = new ScriptsManager();
        $this->settings       = new Settings();

        $this->apisContainer         = new Containers\ApisContainer();
        $this->repositoriesContainer = new Containers\RepositoriesContainer();
        $this->servicesContainer     = new Containers\ServicesContainer();

        add_action('init', [$this, 'loadTranslations']);

        if (wp_doing_ajax()) {
            $this->ajax = new Listeners\Ajax();
        } else {
            $this->settingsTab   = new Admin\SettingsTab();
            $this->pluginUpdater = new Update\PluginUpdater();

            if ($this->settings->subscriptionsEnabled()) {
                $this->subscriptionListener = new Listeners\Subscription();
            }

            if ($this->settings->storeSet()) {
                $this->roomEventsListener = new Listeners\RoomsUpdate();
                $this->bookingEventsListener = new Listeners\BookingsUpdate();
                $this->campaignTrackingListener = new Listeners\Tracking();
            }
        }
    }

    public function init()
    {
        if (!class_exists('HotelBookingPlugin')) {
            return;
        }

        // Create instance of background synchronizers to listen AJAX and cron calls
        $this->servicesContainer->listsSync()->touch();
        $this->servicesContainer->storeSync()->touch();
    }

    public function loadTranslations()
    {
        $pluginDir = plugin_basename(PLUGIN_DIR); // "mphb-mailchimp" or renamed name
        load_plugin_textdomain('mphb-mailchimp', false, $pluginDir . '/languages');
    }

    /**
     * @return \MPHB\Addons\MailChimp\ScriptsManager
     */
    public function scripts()
    {
        return $this->scriptsManager;
    }

    /**
     * @return \MPHB\Addons\MailChimp\Settings
     */
    public function settings()
    {
        return $this->settings;
    }

    /**
     * @return \MPHB\Addons\MailChimp\Containers\ApisContainer
     */
    public function api()
    {
        return $this->apisContainer;
    }

    /**
     * @return \MPHB\Addons\MailChimp\Containers\RepositoriesContainer
     */
    public function repository()
    {
        return $this->repositoriesContainer;
    }

    /**
     * @return \MPHB\Addons\MailChimp\Containers\ServicesContainer
     */
    public function service()
    {
        return $this->servicesContainer;
    }

    /**
     * @return string
     */
    public function pluginUri()
    {
        $headers = $this->pluginHeaders();
        return $headers['PluginURI'];
    }

    /**
     * @return string
     */
    public function pluginVersion()
    {
        $headers = $this->pluginHeaders();
        return $headers['Version'];
    }

    /**
     * @return string
     */
    public function pluginAuthor()
    {
        $headers = $this->pluginHeaders();
        return $headers['Author'];
    }

    /**
     * @return string[]
     */
    public function pluginHeaders()
    {
        if (empty($this->pluginHeaders)) {
            if (!function_exists('get_plugin_data')) {
                require_once ABSPATH . 'wp-admin/includes/plugin.php';
            }

            $headers = get_plugin_data(PLUGIN_FILE, false, false);
            $headers = array_merge([
                'PluginURI' => 'https://motopress.com/products/hotel-booking-mailchimp/',
                'Version'   => '1.0',
                'Author'    => 'MotoPress'
            ], $headers);

            $this->pluginHeaders = $headers;
        }

        return $this->pluginHeaders;
    }

    /**
     * @return static
     */
    public static function getInstance()
    {
        if (is_null(static::$instance)) {
            static::$instance = new static();
        }

        return static::$instance;
    }
}