- WordPress core y plugins - Tema Twenty Twenty-Four configurado - Plugin allow-unfiltered-html.php simplificado - .gitignore configurado para excluir wp-config.php y uploads 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
199 lines
4.5 KiB
PHP
Executable File
199 lines
4.5 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* The class is responsible for locating and loading the autoloader file used in the plugin.
|
|
*
|
|
* @package AdvancedAds\Pro
|
|
* @author Advanced Ads <info@wpadvancedads.com>
|
|
* @since 2.26.0
|
|
*/
|
|
|
|
namespace AdvancedAds\Pro;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Autoloader.
|
|
*/
|
|
class Autoloader {
|
|
|
|
/**
|
|
* Hold autoloader.
|
|
*
|
|
* @var mixed
|
|
*/
|
|
private $autoloader;
|
|
|
|
/**
|
|
* Main instance
|
|
*
|
|
* Ensure only one instance is loaded or can be loaded.
|
|
*
|
|
* @return Autoloader
|
|
*/
|
|
public static function get(): Autoloader {
|
|
static $instance;
|
|
|
|
if ( null === $instance ) {
|
|
$instance = new Autoloader();
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* Get hold autoloader.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function get_autoloader() {
|
|
return $this->autoloader;
|
|
}
|
|
|
|
/**
|
|
* Get plugin directory.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_directory(): string {
|
|
return dirname( AAP_FILE );
|
|
}
|
|
|
|
/**
|
|
* Runs this initializer.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function initialize(): void {
|
|
$locate = $this->locate();
|
|
|
|
if ( ! $locate ) {
|
|
add_action( 'admin_notices', [ $this, 'missing_autoloader' ] );
|
|
return;
|
|
}
|
|
|
|
$this->autoloader = require $locate;
|
|
}
|
|
|
|
/**
|
|
* Locate the autoload file
|
|
*
|
|
* This function searches for the autoload file in the packages directory and vendor directory.
|
|
*
|
|
* @return bool|string
|
|
*/
|
|
private function locate() {
|
|
$directory = $this->get_directory();
|
|
$packages = $directory . '/packages/autoload.php';
|
|
$vendors = $directory . '/vendor/autoload.php';
|
|
$is_debug = $this->is_debug() || 'local' === $this->get_environment_type();
|
|
|
|
if ( is_readable( $packages ) && ( ! $is_debug || ! is_readable( $vendors ) ) ) {
|
|
return $packages;
|
|
}
|
|
|
|
if ( is_readable( $vendors ) ) {
|
|
return $vendors;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* If the autoloader is missing, add an admin notice.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function missing_autoloader(): void {
|
|
?>
|
|
<div class="notice notice-error">
|
|
<p>
|
|
<?php
|
|
printf(
|
|
/* translators: 1: is a link to a support document. 2: closing link */
|
|
esc_html__( 'Your installation of Advanced Ads is incomplete. If you installed Advanced Ads from GitHub, %1$s please refer to this document%2$s to set up your development environment.', 'advanced-ads-pro' ),
|
|
'<a href="' . esc_url( 'https://github.com/advanced-ads/advanced-ads/wiki/How-to-set-up-development-environment' ) . '" target="_blank" rel="noopener noreferrer">',
|
|
'</a>'
|
|
);
|
|
?>
|
|
</p>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Retrieves the current environment type.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_environment_type(): string {
|
|
return function_exists( 'wp_get_environment_type' )
|
|
? wp_get_environment_type()
|
|
: $this->get_environment_type_fallback();
|
|
}
|
|
|
|
/**
|
|
* Retrieves the current environment type.
|
|
*
|
|
* @return string
|
|
*/
|
|
private function get_environment_type_fallback(): string {
|
|
static $current_env = '';
|
|
|
|
if ( ! defined( 'WP_RUN_CORE_TESTS' ) && $current_env ) {
|
|
return $current_env;
|
|
}
|
|
|
|
$wp_environments = [
|
|
'local',
|
|
'development',
|
|
'staging',
|
|
'production',
|
|
];
|
|
|
|
// Add a note about the deprecated WP_ENVIRONMENT_TYPES constant.
|
|
if ( defined( 'WP_ENVIRONMENT_TYPES' ) && function_exists( '_deprecated_argument' ) ) {
|
|
if ( function_exists( '__' ) ) {
|
|
/* translators: %s: WP_ENVIRONMENT_TYPES */
|
|
$message = sprintf( __( 'The %s constant is no longer supported.', 'advanced-ads-pro' ), 'WP_ENVIRONMENT_TYPES' );
|
|
} else {
|
|
$message = sprintf( 'The %s constant is no longer supported.', 'WP_ENVIRONMENT_TYPES' );
|
|
}
|
|
|
|
_deprecated_argument(
|
|
'define()',
|
|
'5.5.1',
|
|
$message // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
);
|
|
}
|
|
|
|
// Check if the environment variable has been set, if `getenv` is available on the system.
|
|
if ( function_exists( 'getenv' ) ) {
|
|
$has_env = getenv( 'WP_ENVIRONMENT_TYPE' );
|
|
if ( false !== $has_env ) {
|
|
$current_env = $has_env;
|
|
}
|
|
}
|
|
|
|
// Fetch the environment from a constant, this overrides the global system variable.
|
|
if ( defined( 'WP_ENVIRONMENT_TYPE' ) && WP_ENVIRONMENT_TYPE ) {
|
|
$current_env = WP_ENVIRONMENT_TYPE;
|
|
}
|
|
|
|
// Make sure the environment is an allowed one, and not accidentally set to an invalid value.
|
|
if ( ! in_array( $current_env, $wp_environments, true ) ) {
|
|
$current_env = 'production';
|
|
}
|
|
|
|
return $current_env;
|
|
}
|
|
|
|
/**
|
|
* Is WordPress debug mode enabled
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function is_debug(): bool {
|
|
return defined( 'WP_DEBUG' ) && WP_DEBUG;
|
|
}
|
|
}
|