Files
2026-04-28 15:13:50 +02:00

204 lines
5.5 KiB
PHP

<?php
if (!defined('ABSPATH')) {
exit;
}
/**
* Loads the plugin.
*/
class WJECF_Bootstrap
{
public static function execute()
{
$bootstrap = new self();
$bootstrap->bootstrap();
}
protected function bootstrap()
{
$this->register_autoload();
$this->register_global_functions();
$this->require_once_php('includes/abstract-wjecf-plugin.php');
$pro = $this->try_include_php('pro/class-wjecf-pro-controller.php');
$this->load_plugin('includes/plugins/WJECF_Debug');
if (WJECF()->is_request('admin')) {
$this->load_plugin('includes/plugins/WJECF_Admin');
$this->load_plugin('includes/plugins/WJECF_Admin_Settings');
$this->load_plugin('includes/plugins/WJECF_Admin_Data_Update');
}
$this->load_plugin('includes/plugins/WJECF_Autocoupon');
$this->load_plugin('includes/plugins/WJECF_WPML');
if ($pro) {
if (WJECF()->is_request('admin')) {
$this->load_plugin('pro/plugins/WJECF_Pro_Admin_Auto_Update');
}
$this->load_plugin('pro/plugins/WJECF_Pro_Free_Products/WJECF_Pro_Free_Products');
$this->load_plugin('pro/plugins/WJECF_Pro_Coupon_Queueing');
$this->load_plugin('pro/plugins/WJECF_Pro_Product_Filter');
$this->load_plugin('pro/plugins/WJECF_Pro_Limit_Discount_Quantities');
}
// DEPRECATED. We keep $wjecf_extended_coupon_features for backwards compatibility; use WJECF_API()
$GLOBALS['wjecf_extended_coupon_features'] = WJECF();
WJECF()->start();
// WP-cli for debugging
if (defined('WP_CLI') && WP_CLI) {
WJECF_Debug_CLI::add_command();
}
}
protected function register_autoload()
{
spl_autoload_register(
function ($class) {
$prefix = 'WJECF_';
// Our class Prefix.
if (0 !== strncmp($prefix, $class, strlen($prefix))) {
return;
}
$file = strtolower('class-'.str_replace('_', '-', $class).'.php');
$subdirs = ['/includes/', '/pro/'];
foreach ($subdirs as $subdir) {
$fullpath = dirname(__DIR__).$subdir.$file;
if (file_exists($fullpath)) {
require $fullpath;
return;
}
}
},
);
}
protected function register_global_functions()
{
/**
* Get the instance of WJECF.
*
* @return WJECF_Controller|WJECF_Pro_Controller The instance of WJECF
*/
function wjecf()
{
return WJECF_Controller::instance();
}
/**
* Get the instance of WJECF_Admin.
*
* @return WJECF_Admin The instance of WJECF_Admin
*/
function wjecf_admin()
{
return WJECF()->get_plugin('admin');
}
/**
* Get the instance of WJECF_WC.
*
* @return WJECF_WC The instance of WJECF_WC
*/
function wjecf_wc()
{
return WJECF_WC::instance();
}
/**
* Get the instance if the Extended Coupon Features for WooCommerce API.
*
* @return WJECF_Pro_API The API object
*/
function wjecf_api()
{
return WJECF_Pro_API::instance();
}
/**
* Wraps a product or coupon in a decorator.
*
* @deprecated 3.0.0
*
* @param mixed $object The WC_Coupon or WC_Product instance, or the post id
*
* @return WJECF_Wrap
*/
function wjecf_wrap($object)
{
return WJECF_WC::instance()->wrap($object);
}
}
/**
* require_once( $path + '.php' ).
*
* @param string $path Path to the php file (excluding extension) relative to the current path
*
* @return bool True if succesful
*/
protected function require_once_php($path)
{
require_once $this->get_path($path);
}
/**
* tries to include_once( $path + '.php' ).
*
* @param string $path Path to the php file (excluding extension) relative to the current path
*
* @return bool True if succesful
*/
protected function try_include_php($path)
{
$fullpath = $this->get_path($path);
if (!file_exists($fullpath)) {
return false;
}
include_once $fullpath;
return true;
}
/**
* Loads the class file and adds the plugin to WJECF(). Throws exception on failure.
*
* @param string $path Path to the php file (excluding extension) relative to the current path
*/
protected function load_plugin($path)
{
$class_name = basename($path);
// Load disabled plugins only if they are enabled or on the admin page
if (!is_admin() && in_array($class_name, WJECF()->get_option('disabled_plugins'))) {
return;
}
$this->try_include_php($path.'.php');
if (!WJECF()->add_plugin(new $class_name())) {
throw new Exception(sprintf('Unable to add plugin %s', $class_name));
}
}
/**
* Gets the path relative to the includes/ directory.
*
* @param string $path
*
* @return string
*/
private function get_path($path)
{
return dirname(__DIR__).'/'.$path;
}
}