Files
thetempusproject/bin/autoload.php
2024-08-04 21:15:59 -04:00

179 lines
6.1 KiB
PHP

<?php
/**
* bin/autoload.php
*
* Handles the application startup by requiring our autoloaders and loading constants.
*
* @version 3.0
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
*/
namespace TheTempusProject;
use TheTempusProject\Classes\Plugin;
use TheTempusProject\Hermes\Classes\Autoloader;
use TheTempusProject\Houdini\Classes\Template;
use TheTempusProject\Houdini\Classes\Views;
// Basic constants needed for loading files
if ( ! defined( 'APP_SPACE' ) ) {
define( 'APP_SPACE', __NAMESPACE__ );
}
if ( ! defined( 'APP_ROOT_DIRECTORY' ) ) {
define( 'APP_ROOT_DIRECTORY', dirname( __DIR__ ) . DIRECTORY_SEPARATOR );
}
if ( ! defined( 'CONFIG_DIRECTORY' ) ) {
define( 'CONFIG_DIRECTORY', APP_ROOT_DIRECTORY . 'app' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR );
}
// App Constants
if ( ! defined( 'TEMPUS_PROJECT_CONSTANTS_LOADED' ) ) {
require_once CONFIG_DIRECTORY . 'constants.php';
}
// Hermes Constants
if ( ! defined( 'HERMES_CONSTANTS_LOADED' ) ) {
if ( defined( 'HERMES_CONFIG_DIRECTORY' ) ) {
require_once HERMES_CONFIG_DIRECTORY . 'constants.php';
}
}
// Bedrock Constants
if ( ! defined( 'BEDROCK_CONSTANTS_LOADED' ) ) {
if ( defined( 'BEDROCK_CONFIG_DIRECTORY' ) ) {
require_once BEDROCK_CONFIG_DIRECTORY . 'constants.php';
}
}
// Canary Constants
if ( ! defined( 'CANARY_CONSTANTS_LOADED' ) ) {
if ( defined( 'CANARY_CONFIG_DIRECTORY' ) ) {
require_once CANARY_CONFIG_DIRECTORY . 'constants.php';
}
}
// Require common functions
require_once FUNCTIONS_DIRECTORY . 'common.php';
// Determine which autoloader to sue
if ( file_exists( VENDOR_DIRECTORY . 'autoload.php' ) ) {
// Composer Autoloader
require_once VENDOR_DIRECTORY . 'autoload.php';
define( 'VENDOR_AUTOLOADED', true );
} else {
// Hermes Autoloader (Autoloader)
if ( ! defined( 'HERMES_AUTOLOADED' ) ) {
if ( defined( 'HERMES_ROOT_DIRECTORY' ) ) {
require_once HERMES_ROOT_DIRECTORY . 'bin' . DIRECTORY_SEPARATOR . 'autoload.php';
}
}
// Canary Autoloader (Debugging)
if ( ! defined( 'CANARY_AUTOLOADED' ) ) {
if ( defined( 'CANARY_ROOT_DIRECTORY' ) ) {
require_once CANARY_ROOT_DIRECTORY . 'bin' . DIRECTORY_SEPARATOR . 'autoload.php';
}
}
// Bedrock Autoloader (Core Functionality)
if ( ! defined( 'BEDROCK_AUTOLOADED' ) ) {
if ( defined( 'BEDROCK_ROOT_DIRECTORY' ) ) {
require_once BEDROCK_ROOT_DIRECTORY . 'bin' . DIRECTORY_SEPARATOR . 'autoload.php';
}
}
// Houdini Autoloader (Frontend Driver)
if ( ! defined( 'HOUDINI_AUTOLOADED' ) ) {
if ( defined( 'HOUDINI_ROOT_DIRECTORY' ) ) {
require_once HOUDINI_ROOT_DIRECTORY . 'bin' . DIRECTORY_SEPARATOR . 'autoload.php';
}
}
// App Autoloader
if ( file_exists( APP_DIRECTORY . 'autoload.php' ) ) {
require_once APP_DIRECTORY . 'autoload.php';
}
define( 'VENDOR_AUTOLOADED', false );
}
if ( class_exists( 'TheTempusProject\Hermes\Classes\Autoloader' ) && TEMPUS_PROJECT_CONSTANTS_LOADED ) {
ttp_autoload();
}
// Print an error page when autoloader can't be used
if ( ! VENDOR_AUTOLOADED && ! defined( 'TEMPUS_PROJECT_AUTOLOADED' ) ) {
echo file_get_contents( ERRORS_DIRECTORY . 'autoload.html' );
exit;
}
function ttp_autoload() {
$Autoloader = new Autoloader;
$Autoloader->addNamespace(
APP_SPACE . '\Controllers',
CONTROLLER_DIRECTORY,
false,
);
$Autoloader->addNamespace(
APP_SPACE . '\Controllers\Admin',
ADMIN_CONTROLLER_DIRECTORY,
false,
);
$Autoloader->addNamespace(
APP_SPACE . '\Controllers\Api',
API_CONTROLLER_DIRECTORY,
false,
);
$Autoloader->addNamespace(
APP_SPACE . '\Models',
MODEL_DIRECTORY,
false,
);
$Autoloader->addNamespace(
APP_SPACE . '\Classes',
CLASSES_DIRECTORY,
false,
);
$Autoloader->includeFolder(FUNCTIONS_DIRECTORY);
$Autoloader->register();
// handle plugins
$pluginDirectoryArray = Plugin::getPluginDirectories();
foreach ( $pluginDirectoryArray as $pluginName => $locations ) {
foreach ( $locations as $location ) {
foreach ( $location as $currentFolder => $file ) {
switch ($file) {
case 'controllers':
if (file_exists($currentFolder . 'api')) {
$Autoloader->addNamespace( APP_SPACE . '\Controllers\Api', $currentFolder . 'api' . DIRECTORY_SEPARATOR, false );
}
if (file_exists($currentFolder . 'admin')) {
$Autoloader->addNamespace( APP_SPACE . '\Controllers\Admin', $currentFolder . 'admin' . DIRECTORY_SEPARATOR, false );
}
$Autoloader->addNamespace( APP_SPACE . '\Controllers', $currentFolder, false );
break;
case 'models':
$Autoloader->addNamespace( APP_SPACE . '\Models', $currentFolder, false );
break;
case 'views':
Views::addViewLocation($pluginName, $currentFolder);
break;
case 'templates':
Template::addTemplateLocation($currentFolder);
break;
case 'forms.php':
require_once( $currentFolder );
break;
case 'plugin.php':
require_once( $currentFolder );
break;
case 'config':
if (file_exists($currentFolder . 'constants.php')) {
require_once( $currentFolder . 'constants.php' );
}
break;
}
}
}
}
define('TEMPUS_PROJECT_AUTOLOADED', true);
}
require_once 'bin/tempus_project.php';