File "plugin.php"

Full path: /home/dora/public_html/wp-content/plugins/bricksforge/plugin.php
File size: 10.37 KB
MIME-type: --
Charset: utf-8

<?php
/*
Plugin Name: Bricksforge
Plugin URI: https://www.bricksforge.io
Description: A powerful set of tools to extend the Bricks Builder functionality.
Version: 0.9.4.3
Author: Bricksforge
Author URI: https://www.bricksforge.io
License: GPL2
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: bricksforge
Domain Path: /languages
*/

/**
 * Copyright (c) 2022 Daniele De Rosa – Bricksforge. All rights reserved.
 */

// don't call the file directly
if (!defined('ABSPATH'))
    exit;

$theme = wp_get_theme();
if ('Bricks' != $theme->name && 'Bricks' != $theme->parent_theme) {
    return;
}

/**
 * Bricksforge class
 *
 * @class Bricksforge The class that holds the entire Bricksforge plugin
 */
if (!class_exists('Bricksforge')) {

    final class Bricksforge
    {

        /**
         * Plugin version
         *
         * @var string
         */
        public $version = '0.9.4.3';

        /**
         * Holds various class instances
         *
         * @var array
         */
        private $container = array();

        /**
         * Constructor for the Bricksforge class
         *
         * Sets up all the appropriate hooks and actions
         * within our plugin.
         */
        public function __construct()
        {

            $this->define_constants();

            register_activation_hook(__FILE__, array($this, 'activate'));
            register_deactivation_hook(__FILE__, array($this, 'deactivate'));

            add_action('plugins_loaded', array($this, 'init_plugin'));
        }

        /**
         * Initializes the Bricksforge() class
         *
         * Checks for an existing Bricksforge() instance
         * and if it doesn't find one, creates it.
         */
        public static function init()
        {
            static $instance = false;

            if (!$instance) {
                $instance = new Bricksforge();
            }

            return $instance;
        }

        /**
         * Magic getter to bypass referencing plugin.
         *
         * @param $prop
         *
         * @return mixed
         */
        public function __get($prop)
        {
            if (array_key_exists($prop, $this->container)) {
                return $this->container[$prop];
            }

            return $this->{$prop};
        }

        /**
         * Magic isset to bypass referencing plugin.
         *
         * @param $prop
         *
         * @return mixed
         */
        public function __isset($prop)
        {
            return isset($this->{$prop}) || isset($this->container[$prop]);
        }

        /**
         * Define the constants
         *
         * @return void
         */
        public function define_constants()
        {
            define('BRICKSFORGE_VERSION', $this->version);
            define('BRICKSFORGE_FILE', __FILE__);
            define('BRICKSFORGE_PATH', dirname(BRICKSFORGE_FILE));
            define('BRICKSFORGE_INCLUDES', BRICKSFORGE_PATH . '/includes');
            define('BRICKSFORGE_URL', plugins_url('', BRICKSFORGE_FILE));
            define('BRICKSFORGE_ASSETS', BRICKSFORGE_URL . '/assets');
            define('BRICKSFORGE_CUSTOM_STYLES_FILE', BRICKSFORGE_PATH . '/assets/classes/custom.css');
            define('BRICKSFORGE_ELEMENTS_ROOT_PATH', BRICKSFORGE_URL . '/includes/elements');
            define('BRICKSFORGE_BRICKS_ELEMENT_PREFIX', 'brxe-');
        }

        /**
         * Load the plugin after all plugis are loaded
         *
         * @return void
         */
        public function init_plugin()
        {

            $this->includes();
            $this->init_hooks();
        }

        /**
         * Placeholder for activation function
         *
         * Nothing being called here yet.
         */
        public function activate()
        {

            $installed = get_option('bricksforge_installed');

            if (!$installed) {
                update_option('bricksforge_installed', time());
            }

            update_option('bricksforge_version', BRICKSFORGE_VERSION);
        }

        /**
         * Placeholder for deactivation function
         *
         * Nothing being called here yet.
         */
        public function deactivate()
        {

        }

        /**
         * Include the required files
         *
         * @return void
         */
        public function includes()
        {

            require_once BRICKSFORGE_INCLUDES . '/update-checker/plugin-update-checker.php';
            require_once BRICKSFORGE_INCLUDES . '/Assets.php';
            require_once BRICKSFORGE_INCLUDES . '/animations/Animations.php';
            require_once BRICKSFORGE_INCLUDES . '/permissions/Permissions.php';
            require_once BRICKSFORGE_INCLUDES . '/global-classes/GlobalClasses.php';
            require_once BRICKSFORGE_INCLUDES . '/conditional-logic/ConditionalLogic.php';
            require_once BRICKSFORGE_INCLUDES . '/elements/Elements.php';
            require_once BRICKSFORGE_INCLUDES . '/popups/Popups.php';
            require_once BRICKSFORGE_INCLUDES . '/mega-menu/MegaMenu.php';

            if ($this->is_request('admin')) {
                require_once BRICKSFORGE_INCLUDES . '/Admin.php';
                require_once BRICKSFORGE_INCLUDES . '/whitelabel/WhiteLabel.php';
            }

            if ($this->is_request('frontend')) {
                require_once BRICKSFORGE_INCLUDES . '/Frontend.php';
                require_once BRICKSFORGE_INCLUDES . '/maintenance/Maintenance.php';
            }

            if ($this->is_request('ajax')) {
                // require_once BRICKSFORGE_INCLUDES . '/class-ajax.php';
            }

            require_once BRICKSFORGE_INCLUDES . '/Api.php';

            $BricksforgeUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
                'https://update-server.codepa.de/?action=get_metadata&slug=bricksforge',
                __FILE__,
                'bricksforge'
            );
        }

        /**
         * Initialize the hooks
         *
         * @return void
         */
        public function init_hooks()
        {

            $this->init_classes_before_wp_init();
            add_action('init', array($this, 'init_classes_after_wp_init'), 20);

            // Localize our plugin
            add_action('init', array($this, 'localization_setup'));
        }

        /**
         * Instantiate the required classes before WP Init
         *
         * @return void
         */
        public function init_classes_before_wp_init()
        {
            $this->container['admin'] = new Bricksforge\Permissions();
            $this->container['builder'] = new Bricksforge\Permissions();
        }

        /**
         * Instantiate the required classes
         *
         * @return void
         */
        public function init_classes_after_wp_init()
        {

            /**
             * Return if Bricks is not loaded
             * @since 0.9.2
             */
            if (!function_exists('bricks_is_builder')) {
                return;
            }

            if ($this->is_request('admin')) {
                $this->container['admin'] = new Bricksforge\Admin();
                $this->container['admin'] = new Bricksforge\Permissions();
                $this->container['admin'] = new Bricksforge\GlobalClasses();
                $this->container['admin'] = new Bricksforge\Animations();
                $this->container['admin'] = new Bricksforge\Popups();
                $this->container['admin'] = new Bricksforge\WhiteLabel();
                $this->container['admin'] = new Bricksforge\MegaMenu();
            }

            if ($this->is_request('builder')) {
                $this->container['builder'] = new Bricksforge\Permissions();
                $this->container['builder'] = new Bricksforge\GlobalClasses();
                $this->container['builder'] = new Bricksforge\Animations();
                $this->container['builder'] = new Bricksforge\Elements();
            }

            if ($this->is_request('frontend')) {
                $this->container['frontend'] = new Bricksforge\Frontend();
                $this->container['frontend'] = new Bricksforge\GlobalClasses();
                $this->container['frontend'] = new Bricksforge\Animations();
                $this->container['frontend'] = new Bricksforge\ConditionalLogic();
                $this->container['frontend'] = new Bricksforge\Elements();
                $this->container['frontend'] = new Bricksforge\Popups();
                $this->container['frontend'] = new Bricksforge\Maintenance();
                $this->container['frontend'] = new Bricksforge\MegaMenu();
            }

            if ($this->is_request('ajax')) {
                // $this->container['ajax'] =  new Bricksforge\Ajax();
            }

            $this->container['api'] = new Bricksforge\Api();
            $this->container['assets'] = new Bricksforge\Assets();
        }

        /**
         * Initialize plugin for localization
         *
         * @uses load_plugin_textdomain()
         */
        public function localization_setup()
        {
            load_plugin_textdomain('bricksforge', false, dirname(plugin_basename(__FILE__)) . '/languages/');
        }

        /**
         * What type of request is this?
         *
         * @param  string $type admin, ajax, cron or frontend.
         *
         * @return bool
         */
        private function is_request($type)
        {
            switch ($type) {
                case 'admin':
                    return is_admin();

                case 'builder':
                    // @since 0.9.1
                    if (!function_exists('bricks_is_builder')) {
                        return is_admin();
                    }

                    return bricks_is_builder();

                case 'ajax':
                    return defined('DOING_AJAX');

                case 'rest':
                    return defined('REST_REQUEST');

                case 'cron':
                    return defined('DOING_CRON');

                case 'frontend':
                    return (!is_admin() || defined('DOING_AJAX')) && !defined('DOING_CRON');
            }
        }
    }

    $bricksforge = Bricksforge::init();
}