fair-plugin/inc/namespace.php
Colin Stewart 6b5d9b772c
Replace strpos() with newer str_*() functions. (#166)
Signed-off-by: costdev <79332690+costdev@users.noreply.github.com>
2025-07-17 16:16:08 -07:00

84 lines
1.9 KiB
PHP

<?php
/**
* Namespace for the plugin.
*
* @package FAIR
*/
namespace FAIR;
use Fragen\Git_Updater;
const NS_SEPARATOR = '\\';
/**
* Bootstrap.
*/
function bootstrap() {
// Prevent accidental re-initialization of the plugin.
static $did_init = false;
if ( $did_init ) {
return;
}
$did_init = true;
register_class_path( __NAMESPACE__, __DIR__ . '/inc' );
// Modules.
Avatars\bootstrap();
Credits\bootstrap();
Dashboard_Widgets\bootstrap();
Default_Repo\bootstrap();
Disable_Openverse\bootstrap();
Icons\bootstrap();
Importers\bootstrap();
Pings\bootstrap();
Salts\bootstrap();
Settings\bootstrap();
Upgrades\bootstrap();
Updater\bootstrap();
User_Notification\bootstrap();
Version_Check\bootstrap();
// Self-update check.
( new Git_Updater\Lite( PLUGIN_FILE ) )->run();
}
/**
* Register a path for autoloading.
*
* @param string $prefix The namespace prefix.
* @param string $path The path to the class files.
* @return void
*/
function register_class_path( string $prefix, string $path ) : void {
$prefix_length = strlen( $prefix );
spl_autoload_register( function ( $class ) use ( $prefix, $prefix_length, $path ) {
if ( ! str_starts_with( $class, $prefix . NS_SEPARATOR ) ) {
return;
}
// Strip prefix from the start (ala PSR-4).
$class = substr( $class, $prefix_length + 1 );
$class = strtolower( $class );
$class = str_replace( '_', '-', $class );
$file = '';
// Split on namespace separator.
$last_ns_pos = strripos( $class, NS_SEPARATOR );
if ( $last_ns_pos !== false ) {
$namespace = substr( $class, 0, $last_ns_pos );
$class = substr( $class, $last_ns_pos + 1 );
$file = str_replace( NS_SEPARATOR, DIRECTORY_SEPARATOR, $namespace ) . DIRECTORY_SEPARATOR;
}
$file .= 'class-' . $class . '.php';
$path = $path . $file;
if ( file_exists( $path ) ) {
require_once $path;
}
} );
Version_Check\bootstrap();
}