67 lines
1.9 KiB
PHP
67 lines
1.9 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Class responsible for autoloading ActivityPub Event Extensions class files.
|
||
|
*
|
||
|
* The Autoloader class is responsible for automatically loading class files as needed
|
||
|
* to ensure a clean and organized codebase. It maps class names to their corresponding
|
||
|
* file locations within the GatherPress plugin.
|
||
|
*
|
||
|
* @package Activitypub_Event_Extensions
|
||
|
* @since 1.0.0
|
||
|
*/
|
||
|
|
||
|
namespace Activitypub_Event_Extensions;
|
||
|
|
||
|
// Exit if accessed directly.
|
||
|
defined( 'ABSPATH' ) || exit; // @codeCoverageIgnore
|
||
|
|
||
|
/**
|
||
|
* Class Autoloader.
|
||
|
*
|
||
|
* This class is responsible for automatic loading of classes and namespaces.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*/
|
||
|
class Autoloader {
|
||
|
/**
|
||
|
* Register method for autoloader.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public static function register(): void {
|
||
|
spl_autoload_register(
|
||
|
function ( $full_class ) {
|
||
|
$base_dir = ACTIVITYPUB_EVENT_EXTENSIONS_PLUGIN_DIR . '/includes/';
|
||
|
$base = 'Activitypub_Event_Extensions\\';
|
||
|
|
||
|
if ( strncmp( $full_class, $base, strlen( $base ) ) === 0 ) {
|
||
|
$maybe_uppercase = str_replace( $base, '', $full_class );
|
||
|
$class = strtolower( $maybe_uppercase );
|
||
|
// All classes should be capitalized. If this is instead looking for a lowercase method, we ignore that.
|
||
|
if ( $maybe_uppercase === $class ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( false !== strpos( $class, '\\' ) ) {
|
||
|
$parts = explode( '\\', $class );
|
||
|
$class = array_pop( $parts );
|
||
|
$sub_dir = strtr( implode( '/', $parts ), '_', '-' );
|
||
|
$base_dir = $base_dir . $sub_dir . '/';
|
||
|
}
|
||
|
|
||
|
$filename = 'class-' . strtr( $class, '_', '-' );
|
||
|
$file = $base_dir . $filename . '.php';
|
||
|
|
||
|
if ( file_exists( $file ) && is_readable( $file ) ) {
|
||
|
require_once $file;
|
||
|
} else {
|
||
|
\wp_die( sprintf( esc_html( 'Required class not found or not readable: %s' ), esc_html( $full_class ) ) );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
}
|