<?php
if ( ! defined ( 'BASEPATH' ) )
exit ( 'No direct script access allowed' );
/**
* CodeIgniter
*
* An open source application development framework for PHP 4.3.2 or newer
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
* @copyright Copyright (c) 2006, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
* @filesource
*/
// ------------------------------------------------------------------------
/**
* System Front Controller
*
* Loads the base classes and executes the request.
*
* @package CodeIgniter
* @subpackage codeigniter
* @category Front-controller
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/
*/
// CI Version
define ( 'CI_VERSION', '1.6.2' );
/*
* ------------------------------------------------------
* Load the global functions
* ------------------------------------------------------
*/
require ( BASEPATH . 'codeigniter/Common' . EXT );
/*
* ------------------------------------------------------
* Load the compatibility override functions
* ------------------------------------------------------
*/
require ( BASEPATH . 'codeigniter/Compat' . EXT );
/*
* ------------------------------------------------------
* Load the framework constants
* ------------------------------------------------------
*/
require ( APPPATH . 'config/constants' . EXT );
/*
* ------------------------------------------------------
* Define a custom error handler so we can log PHP errors
* ------------------------------------------------------
*/
set_error_handler ( '_exception_handler' );
if ( ! is_php('5.3'))
{
@set_magic_quotes_runtime(0); // Kill magic quotes
}
/*
* ------------------------------------------------------
* Start the timer... tick tock tick tock...
* ------------------------------------------------------
*/
$BM = & load_class ( 'Benchmark' );
$BM->mark ( 'total_execution_time_start' );
$BM->mark ( 'loading_time_base_classes_start' );
/*
* ------------------------------------------------------
* Instantiate the hooks class
* ------------------------------------------------------
*/
$EXT = & load_class ( 'Hooks' );
/*
* ------------------------------------------------------
* Is there a "pre_system" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook ( 'pre_system' );
/*
* ------------------------------------------------------
* Instantiate the base classes
* ------------------------------------------------------
*/
$CFG = & load_class ( 'Config' );
$URI = & load_class ( 'URI' );
$RTR = & load_class ( 'Router' );
$OUT = & load_class ( 'Output' );
/*
* ------------------------------------------------------
* Is there a valid cache file? If so, we're done...
* ------------------------------------------------------
*/
if ( $EXT->_call_hook ( 'cache_override' ) === FALSE ) {
if ( $OUT->_display_cache ( $CFG, $RTR ) == TRUE ) {
exit ();
}
}
/*
* ------------------------------------------------------
* Load the remaining base classes
* ------------------------------------------------------
*/
$IN = & load_class ( 'Input' );
$LANG = & load_class ( 'Language' );
/*
* ------------------------------------------------------
* Load the app controller and local controller
* ------------------------------------------------------
*
* Note: Due to the poor object handling in PHP 4 we'll
* conditionally load different versions of the base
* class. Retaining PHP 4 compatibility requires a bit of a hack.
*
* Note: The Loader class needs to be included first
*
*/
if ( floor ( phpversion () ) < 5 ) {
load_class ( 'Loader', FALSE );
require ( BASEPATH . 'codeigniter/Base4' . EXT );
}
else {
require ( BASEPATH . 'codeigniter/Base5' . EXT );
}
// Load the base controller class
load_class ( 'Controller', FALSE );
// Load the local application controller
// Note: The Router class automatically validates the controller path. If this include fails it
// means that the default controller in the Routes.php file is not resolving to something valid.
if ( ! file_exists ( APPPATH . 'controllers/' . $RTR->fetch_directory () . $RTR->fetch_class () . EXT ) ) {
show_error ( 'Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.' );
}
include ( APPPATH . 'controllers/' . $RTR->fetch_directory () . $RTR->fetch_class () . EXT );
// Set a mark point for benchmarking
$BM->mark ( 'loading_time_base_classes_end' );
/*
* ------------------------------------------------------
* Security check
* ------------------------------------------------------
*
* None of the functions in the app controller or the
* loader class can be called via the URI, nor can
* controller functions that begin with an underscore
*/
$class = $RTR->fetch_class ();
$method = $RTR->fetch_method ();
if ( ! class_exists ( $class ) or $method == 'controller' or strncmp ( $method, '_', 1 ) == 0 or in_array ( $method, get_class_methods ( 'Controller' ), TRUE ) ) {
show_404 ( "{$class}/{$method}" );
}
/*
* ------------------------------------------------------
* Is there a "pre_controller" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook ( 'pre_controller' );
/*
* ------------------------------------------------------
* Instantiate the controller and call requested method
* ------------------------------------------------------
*/
// Mark a start point so we can benchmark the controller
$BM->mark ( 'controller_execution_time_( ' . $class . ' / ' . $method . ' )_start' );
$CI = new $class ( );
// Is this a scaffolding request?
if ( $RTR->scaffolding_request === TRUE ) {
if ( $EXT->_call_hook ( 'scaffolding_override' ) === FALSE ) {
$CI->_ci_scaffolding ();
}
}
else {
/*
* ------------------------------------------------------
* Is there a "post_controller_constructor" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook ( 'post_controller_constructor' );
// Is there a "remap" function?
if ( method_exists ( $CI, '_remap' ) ) {
$CI->_remap ( $method );
}
else {
// is_callable() returns TRUE on some versions of PHP 5 for private and protected
// methods, so we'll use this workaround for consistent behavior
if ( ! in_array ( strtolower ( $method ), array_map ( 'strtolower', get_class_methods ( $CI ) ) ) ) {
show_404 ( "{$class}/{$method}" );
}
// Call the requested method.
// Any URI segments present (besides the class/function) will be passed to the method for convenience
call_user_func_array ( array (
&$CI,
$method
), array_slice ( $URI->rsegments, 2 ) );
}
}
// Mark a benchmark end point
$BM->mark ( 'controller_execution_time_( ' . $class . ' / ' . $method . ' )_end' );
/*
* ------------------------------------------------------
* Is there a "post_controller" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook ( 'post_controller' );
/*
* ------------------------------------------------------
* Send the final rendered output to the browser
* ------------------------------------------------------
*/
if ( $EXT->_call_hook ( 'display_override' ) === FALSE ) {
$OUT->_display ();
}
/*
* ------------------------------------------------------
* Is there a "post_system" hook?
* ------------------------------------------------------
*/
$EXT->_call_hook ( 'post_system' );
/*
* ------------------------------------------------------
* Close the DB connection if one exists
* ------------------------------------------------------
*/
if ( class_exists ( 'CI_DB' ) and isset ( $CI->db ) ) {
$CI->db->close ();
}
/* End of file CodeIgniter.php */
/* Location: ./system/codeigniter/CodeIgniter.php */