264 lines
16 KiB
PHP
264 lines
16 KiB
PHP
<?php
|
|
/**
|
|
* app.php
|
|
*
|
|
* This file parses any given url and separates it into controller,
|
|
* method, and data. This allows the application to direct the user
|
|
* to the desired location and provide the controller any additional
|
|
* information it may require to run.
|
|
*
|
|
* @version 3.0
|
|
* @author Joey Kimsey <Joey@thetempusproject.com>
|
|
* @link https://TheTempusProject.com/Core
|
|
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
|
*/
|
|
namespace TheTempusProject\Bedrock\Bin;
|
|
|
|
use TheTempusProject\Canary\Bin\Canary as Debug;
|
|
use TheTempusProject\Hermes\Functions\Route as Routes;
|
|
use TheTempusProject\Bedrock\Functions\Input;
|
|
use TheTempusProject\Bedrock\Functions\Check;
|
|
use TheTempusProject\Bedrock\Functions\Token;
|
|
use TheTempusProject\Bedrock\Functions\Sanitize;
|
|
use TheTempusProject\Bedrock\Classes\Config;
|
|
use TheTempusProject\Hermes\Classes\Autoloader;
|
|
use TheTempusProject\Houdini\Classes\Template;
|
|
use TheTempusProject\Houdini\Classes\Components;
|
|
|
|
class Bedrock {
|
|
public static $controllerName = '';
|
|
public static $methodName = '';
|
|
public static $activeConfig = [];
|
|
protected $controllerObject = null;
|
|
protected $controllerClass = '';
|
|
protected $params = [];
|
|
|
|
/**
|
|
* The constructor handles the entire process of parsing the url,
|
|
* finding the controller/method, and calling the appropriate
|
|
* class/function for the application.
|
|
*
|
|
* @param string $url - A custom URL to be parsed to determine
|
|
* controller/method. (GET) url is used by
|
|
* default if none is provided
|
|
*/
|
|
public function __construct( $url = '' ) {
|
|
Debug::group( 'Bedrock Application' );
|
|
ob_start();
|
|
self::$activeConfig = new Config( CONFIG_JSON );
|
|
set_error_handler( [ BEDROCK_DEFAULT_ERROR_HANDLER, 'handle_error' ] );
|
|
set_exception_handler( [ BEDROCK_DEFAULT_EXCEPTION_HANDLER, 'handle_exception' ] );
|
|
self::$controllerName = DEFAULT_CONTROLLER_CLASS;
|
|
self::$methodName = DEFAULT_CONTROLLER_METHOD;
|
|
$this->setUrl( $url );
|
|
}
|
|
|
|
public function setUrl( $url ) {
|
|
if ( empty( $url ) ) {
|
|
Debug::log( 'Using GET url.' );
|
|
$url = Input::get( 'url' );
|
|
}
|
|
$trimmedUrl = trim( $url, '/' );
|
|
$url = str_ireplace( '.php', '', $trimmedUrl );
|
|
$urlArray = explode( '/', Sanitize::url( $url ) );
|
|
$this->setVarsFromUrlArray( $urlArray );
|
|
}
|
|
|
|
public function load() {
|
|
$this->loadController();
|
|
$this->loadPage();
|
|
}
|
|
|
|
public static function getUrl() {
|
|
return Routes::getAddress() . Input::get( 'url' );
|
|
}
|
|
|
|
protected function loadPage() {
|
|
if ( !method_exists( $this->controllerClass, self::$methodName ) ) {
|
|
return false;
|
|
}
|
|
Components::set( 'META_IMAGE', Routes::getAddress() . Config::getValue( 'main/logoLarge' ) );
|
|
Components::set( 'CURRENT_URL', self::getCurrentUrl() );
|
|
Components::set( 'SITENAME', Config::getValue( 'main/name' ) );
|
|
Components::set( 'AUTHOR', '<meta name="author" content="' . Config::getValue( 'main/name' ) . '">' );
|
|
call_user_func_array( [ $this->controllerObject, self::$methodName ], $this->params );
|
|
Components::set( 'TITLE', Template::parse( $this->controllerObject::$title ) );
|
|
Components::set( 'PAGE_DESCRIPTION', Template::parse( $this->controllerObject::$pageDescription ) );
|
|
Template::render();
|
|
Debug::closeAllGroups();
|
|
// self::$session->updatePage( self::getUrl() ); // where did this method go?
|
|
}
|
|
|
|
protected function loadController() {
|
|
if ( empty( $this->controllerClass ) ) {
|
|
$this->controllerClass = (string) APP_SPACE . '\\Controllers\\' . self::$controllerName;
|
|
}
|
|
$this->controllerObject = new $this->controllerClass;
|
|
}
|
|
|
|
protected function setController( $name, $namespace ) {
|
|
$controllerClass = $namespace . ucfirst( $name );
|
|
if ( Autoloader::testLoad( $controllerClass ) ) {
|
|
$this->controllerClass = $controllerClass;
|
|
self::$controllerName = $name;
|
|
}
|
|
}
|
|
|
|
protected function setPage( $name ) {
|
|
$name = strtolower( $name );
|
|
if ( !method_exists( $this->controllerClass, $name ) ) {
|
|
Debug::info( 'setPage - Method not found: ' . $name );
|
|
return false;
|
|
}
|
|
self::$methodName = $name;
|
|
}
|
|
|
|
protected function setVarsFromUrlArray( $urlArray ) {
|
|
if ( !empty( $urlArray[0] ) ) {
|
|
$urlPart = array_shift( $urlArray );
|
|
if ( $urlPart == 'admin' ) {
|
|
$namespace = APP_SPACE . '\\Controllers\\Admin\\';
|
|
if ( empty( $urlArray[0] ) ) {
|
|
// if there is no second param, assume they want the home controller
|
|
$urlPart = 'home';
|
|
} else {
|
|
$urlPart = array_shift( $urlArray ); // to drop the admin
|
|
}
|
|
if ( $urlPart == 'index' ) {
|
|
// if its admin/index, again, assume the home controller
|
|
$urlPart = 'home';
|
|
}
|
|
} elseif ( $urlPart == 'api' ) {
|
|
$namespace = APP_SPACE . '\\Controllers\\Api\\';
|
|
if ( empty( $urlArray[0] ) ) {
|
|
// if there is no second param, assume they want the home controller
|
|
$urlPart = 'home';
|
|
} else {
|
|
$urlPart = array_shift( $urlArray ); // to drop the admin
|
|
}
|
|
if ( $urlPart == 'index' ) {
|
|
// if its admin/index, again, assume the home controller
|
|
$urlPart = 'home';
|
|
}
|
|
} else {
|
|
$namespace = APP_SPACE . '\\Controllers\\';
|
|
}
|
|
$this->setController( $urlPart, $namespace );
|
|
}
|
|
if ( !empty( $urlArray[0] ) ) {
|
|
$urlPart = array_shift( $urlArray );
|
|
$this->setPage( $urlPart );
|
|
}
|
|
if ( !empty( $urlArray ) ) {
|
|
$this->params = array_values( $urlArray );
|
|
}
|
|
}
|
|
|
|
public static function getCurrentUrl() {
|
|
return Sanitize::url( Input::get( 'url' ) );
|
|
}
|
|
|
|
protected function printDebug() {
|
|
echo '<div style="margin: 0 auto; padding-bottom: 25px; background: #eee; width: 1000px;">';
|
|
echo '<h1 style="text-align: center;">PHP Info</h1>';
|
|
echo '<table style="margin: 0 auto; padding-bottom: 25px; background: #eee; width: 950px;">';
|
|
echo '<tr><td>PHP version: </td><td><code>' . phpversion() . '</code><br></td></tr>';
|
|
echo '<tr><td>PDO Loaded version: </td><td><code>' . extension_loaded( 'pdo' ) . '</code><br></td></tr>';
|
|
echo '<tr><td>PHP extensions: </td><td><pre>';
|
|
foreach ( get_loaded_extensions() as $i => $ext ) {
|
|
echo $ext . ' => ' . phpversion( $ext ) . '<br/>';
|
|
}
|
|
echo '</pre><br></td></tr>';
|
|
echo '</table>';
|
|
echo '<h1 style="text-align: center;">Tempus Core Info</h1>';
|
|
echo '<table style="margin: 0 auto; padding-bottom: 25px; background: #eee; width: 950px;">';
|
|
// Just in case
|
|
echo '<tr><td>_SERVER: </td><td><pre>';
|
|
echo var_export( $_SERVER, true );
|
|
echo '</pre><br></td></tr>';
|
|
// Checks
|
|
echo '<tr><td style="text-align: center; padding-top: 25px; padding-bottom: 10px;" colspan="2"><h2>Checks</h2></td></tr>';
|
|
echo '<tr><td>Uploads work?: </td><td><code>' . var_export( Check::uploads(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>PHP: </td><td><code>' . var_export( Check::php(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Mail works?: </td><td><code>' . var_export( Check::mail(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Is safe mode?: </td><td><code>' . var_export( Check::safe(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Sessions work?: </td><td><code>' . var_export( Check::sessions(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Cookies work?: </td><td><code>' . var_export( Check::cookies(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>is Apache?: </td><td><code>' . var_export( Check::isApache(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>is Nginx?: </td><td><code>' . var_export( Check::isNginx(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Is token enabled?: </td><td><code>' . var_export( Token::isTokenEnabled(), true ) . '</code><br></td></tr>';
|
|
// Routes
|
|
echo '<tr><td style="text-align: center; padding-top: 25px; padding-bottom: 10px;" colspan="2"><h2>Routes</h2></td></tr>';
|
|
echo '<tr><td>Root: </td><td><code>' . var_export( Routes::getRoot(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Address: </td><td><code>' . var_export( Routes::getAddress(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Protocol: </td><td><code>' . var_export( Routes::getProtocol(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>App URL: </td><td><code>' . var_export( self::getUrl(), true ) . '</code><br></td></tr>';
|
|
// Debugging
|
|
echo '<tr><td style="text-align: center; padding-top: 25px; padding-bottom: 10px;" colspan="2"><h2>Debugging</h2></td></tr>';
|
|
echo '<tr><td>Console Debugging Enabled: </td><td><code>' . var_export( Debug::status( 'console' ), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Debug Trace Enabled: </td><td><code>' . var_export( Debug::status( 'trace' ), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Debugging Enabled: </td><td><code>' . var_export( Debug::status( 'debug' ), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Rendering Enabled: </td><td><code>' . var_export( Debug::status( 'render' ), true ) . '</code><br></td></tr>';
|
|
// Main
|
|
echo '<tr><td style="text-align: center; padding-top: 25px; padding-bottom: 10px;" colspan="2"><h2>Main App Variables</h2></td></tr>';
|
|
echo '<tr><td>Template Location: </td><td><code>' . var_export( Template::getLocation(), true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>Configuration: </td><td><pre>' . var_export( Config::$config, true ) . '</pre></td></tr>';
|
|
echo '<tr><td>Check Errors: </td><td><pre>' . var_export( Check::systemErrors(), true ) . '</pre></td></tr>';
|
|
echo '<tr><td>GET: </td><td><pre>' . var_export( $_GET, true ) . '</pre></td></tr>';
|
|
// Constants
|
|
echo '<tr><td style="text-align: center; padding-top: 25px; padding-bottom: 10px;" colspan="2"><h2>Constants</h2></td></tr>';
|
|
// Debugging
|
|
echo '<tr><td style="text-align: center;"><b>Debugging:</b></td><td></td></tr>';
|
|
echo '<tr><td>HERMES_REDIRECTS_ENABLED: </td><td><code>' . var_export( HERMES_REDIRECTS_ENABLED, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>CANARY_TRACE_ENABLED: </td><td><code>' . var_export( CANARY_TRACE_ENABLED, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>CANARY_ENABLED: </td><td><code>' . var_export( CANARY_ENABLED, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>CANARY_DEBUG_TO_CONSOLE: </td><td><code>' . var_export( CANARY_DEBUG_TO_CONSOLE, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>CANARY_DEBUG_TO_FILE: </td><td><code>' . var_export( CANARY_DEBUG_TO_FILE, true ) . '</code><br></td></tr>';
|
|
// Tempus Debugger
|
|
echo '<tr><td style="text-align: center;"><b>Tempus Debugger:</b></td><td></td></tr>';
|
|
echo '<tr><td>CANARY_SECURE_HASH: </td><td><code>' . var_export( CANARY_SECURE_HASH, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>CANARY_SHOW_LINES: </td><td><code>' . var_export( CANARY_SHOW_LINES, true ) . '</code><br></td></tr>';
|
|
// Tokens
|
|
echo '<tr><td style="text-align: center;"><b>Tokens:</b></td><td></td></tr>';
|
|
echo '<tr><td>DEFAULT_TOKEN_NAME: </td><td><code>' . var_export( DEFAULT_TOKEN_NAME, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>TOKEN_ENABLED: </td><td><code>' . var_export( TOKEN_ENABLED, true ) . '</code><br></td></tr>';
|
|
// Cookies
|
|
echo '<tr><td style="text-align: center;"><b>Cookies:</b></td><td></td></tr>';
|
|
echo '<tr><td>DEFAULT_COOKIE_EXPIRATION: </td><td><code>' . var_export( DEFAULT_COOKIE_EXPIRATION, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>DEFAULT_COOKIE_PREFIX: </td><td><code>' . var_export( DEFAULT_COOKIE_PREFIX, true ) . '</code><br></td></tr>';
|
|
// Directories
|
|
echo '<tr><td style="text-align: center;"><b>Directories:</b></td><td></td></tr>';
|
|
echo '<tr><td>APP_ROOT_DIRECTORY: </td><td><code>' . var_export( APP_ROOT_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>BIN_DIRECTORY: </td><td><code>' . var_export( BIN_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>UPLOAD_DIRECTORY: </td><td><code>' . var_export( UPLOAD_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>IMAGE_UPLOAD_DIRECTORY: </td><td><code>' . var_export( IMAGE_UPLOAD_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>CLASSES_DIRECTORY: </td><td><code>' . var_export( CLASSES_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>CONFIG_DIRECTORY: </td><td><code>' . var_export( CONFIG_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>FUNCTIONS_DIRECTORY: </td><td><code>' . var_export( FUNCTIONS_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>TEMPLATE_DIRECTORY: </td><td><code>' . var_export( TEMPLATE_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>VIEW_DIRECTORY: </td><td><code>' . var_export( VIEW_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>ERRORS_DIRECTORY: </td><td><code>' . var_export( ERRORS_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>RESOURCES_DIRECTORY: </td><td><code>' . var_export( RESOURCES_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>BEDROCK_ROOT_DIRECTORY: </td><td><code>' . var_export( BEDROCK_ROOT_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>BEDROCK_BIN_DIRECTORY: </td><td><code>' . var_export( BEDROCK_BIN_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>BEDROCK_CLASSES_DIRECTORY: </td><td><code>' . var_export( BEDROCK_CLASSES_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>BEDROCK_CONFIG_DIRECTORY: </td><td><code>' . var_export( BEDROCK_CONFIG_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>BEDROCK_FUNCTIONS_DIRECTORY: </td><td><code>' . var_export( BEDROCK_FUNCTIONS_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>BEDROCK_RESOURCES_DIRECTORY: </td><td><code>' . var_export( BEDROCK_RESOURCES_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>BEDROCK_VIEW_DIRECTORY: </td><td><code>' . var_export( BEDROCK_VIEW_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>BEDROCK_ERRORS_DIRECTORY: </td><td><code>' . var_export( BEDROCK_ERRORS_DIRECTORY, true ) . '</code><br></td></tr>';
|
|
// other
|
|
echo '<tr><td style="text-align: center;"><b>Other:</b></td><td></td></tr>';
|
|
echo '<tr><td>MINIMUM_PHP_VERSION: </td><td><code>' . var_export( MINIMUM_PHP_VERSION, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>DATA_TITLE_PREG: </td><td><code>' . var_export( DATA_TITLE_PREG, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>PATH_PREG_REQS: </td><td><code>' . var_export( PATH_PREG_REQS, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>SIMPLE_NAME_PREG: </td><td><code>' . var_export( SIMPLE_NAME_PREG, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>ALLOWED_IMAGE_UPLOAD_EXTENTIONS: </td><td><code>' . var_export( ALLOWED_IMAGE_UPLOAD_EXTENTIONS, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>MAX_RESULTS_PER_PAGE: </td><td><code>' . var_export( MAX_RESULTS_PER_PAGE, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>DEFAULT_RESULTS_PER_PAGE: </td><td><code>' . var_export( DEFAULT_RESULTS_PER_PAGE, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>DEFAULT_SESSION_PREFIX: </td><td><code>' . var_export( DEFAULT_SESSION_PREFIX, true ) . '</code><br></td></tr>';
|
|
echo '<tr><td>DEFAULT_CONTROLLER_CLASS: </td><td><code>' . var_export( DEFAULT_CONTROLLER_CLASS, true ) . '</code><br></td></tr>';
|
|
echo '</table></div>';
|
|
}
|
|
}
|