Fatal Error:
{$error['message']}
File: {$file}
Line: {$error['line']}
TXT;
show_error($err_msg);
}
}
// --------------------------------------------------------------------------
/**
* Function to search through the tree to find the necessary file
*
* @param string $file
* @param string $curr_path
* @return void
*/
function load_file($file, $curr_path="")
{
$path = "";
if($curr_path === "app")
{
$path = MM_APP_PATH."{$file}.php";
}
else if($curr_path === "sys")
{
$path = MM_SYS_PATH."{$file}.php";
}
else
{
$path = MM_MOD_PATH."{$curr_path}/{$file}.php";
}
if(is_file($path))
{
require_once($path);
}
}
// --------------------------------------------------------------------------
/**
* Custom error handler
*
* @param int $severity
* @param string $message
* @param string $filepath
* @param int $line
* @param mixed $context
* @return void
*/
function on_error($severity, $message, $filepath, $line, $context)
{
$levels = array(
E_ERROR => 'Error',
E_WARNING => 'Warning',
E_PARSE => 'Parsing Error',
E_NOTICE => 'Notice',
E_CORE_ERROR => 'Core Error',
E_CORE_WARNING => 'Core Warning',
E_COMPILE_ERROR => 'Compile Error',
E_COMPILE_WARNING => 'Compile Warning',
E_USER_ERROR => 'User Error',
E_USER_WARNING => 'User Warning',
E_USER_NOTICE => 'User Notice',
E_STRICT => 'Strict Error'
);
//Make it prettier
$message = highlight_string($message, TRUE);
$filepath = str_replace(MM_BASE_PATH, "", $filepath);
$severity = (isset($levels[$severity])) ? $levels[$severity] : $severity;
// Contain the content for buffering
ob_start();
include(MM_APP_PATH.'/errors/error_php.php');
$buffer = ob_get_contents();
ob_end_clean();
echo $buffer;
}
// --------------------------------------------------------------------------
/**
* Custom exception handlererror_get_last
*
* @param Exception $exception
* @return void
*/
function on_exception($exception)
{
$message = $exception->getMessage();
//$filepath = str_replace(BASE_PATH, "", $filepath);
// Contain the content for buffering
ob_start();
include(MM_APP_PATH.'/errors/error_php_exception.php');
$buffer = ob_get_contents();
ob_end_clean();
echo $buffer;
}
// --------------------------------------------------------------------------
/**
* Utility function to check if a variable is set, and is an array or object
*
* @param mixed $var
* @return bool
*/
function is_like_array(&$var)
{
if( ! isset($var))
{
return FALSE;
}
return (is_array($var) OR is_object($var)) && ( ! empty($var));
}
// --------------------------------------------------------------------------
/**
* General 404 function
*/
function show_404()
{
@header('HTTP/1.1 404 Not Found', TRUE, 404);
die('
404 Not Found
');
}
// --------------------------------------------------------------------------
/**
* Fatal Error page function
*
* @param string $message
* @param int $status_code
*/
function show_error($message, $status_code=null)
{
if( ! is_null($status_code))
{
@header("HTTP/1.1 {$status_code}", TRUE, (int)$status_code);
}
// Contain the content for buffering
ob_start();
include(MM_APP_PATH.'/errors/error_general.php');
$buffer = ob_get_contents();
ob_end_clean();
die($buffer);
}
// --------------------------------------------------------------------------
/**
* Returns routable methods for the specified controller class
*
* @param string $controller
* @return array
*/
function controller_methods($controller)
{
$methods = get_class_methods($controller);
$num = count($methods);
for($i=0; $i < $num; $i++)
{
$skip_methods = array(
'load_file',
'on_error',
'on_exception',
'show_404',
'show_error',
'controller_methods',
'route',
'site_url',
'load_view',
'get_instance',
);
// If the method starts with an underscore, or
// is in the blacklist of methods, it is not callable
if($methods[$i]{0} === "_" || in_array($methods[$i], $skip_methods))
{
unset($methods[$i]);
}
}
return $methods;
}
// --------------------------------------------------------------------------
/**
* Calls the appropriate module/controller/function based on the url
*/
function route()
{
$pi = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : null;
// Load the routes config file
$routes = require_once(MM_APP_PATH.'config/routes.php');
// Set the default route
$module = $routes['default_module'];
$controller = $routes['default_controller'];
$func = "index";
$route_set = FALSE;
// If it isn't the index page
if( ! empty($pi) && $pi !== "/")
{
//Remove trailing slash and begining slash
$pi = trim($pi, '/');
// URL matches the route exactly? Cool, that was easy
if(isset($routes[$pi]))
{
list($module, $controller, $func) = explode("/", $routes[$pi]);
$route_set = TRUE;
}
else
{
$custom_routes = $routes;
// Skip required routes
unset($custom_routes['default_module']);
unset($custom_routes['default_controller']);
unset($custom_routes['404_handler']);
foreach($custom_routes as $uri => $map)
{
if(preg_match("`{$uri}`i", $pi))
{
list($module, $controller, $func) = explode("/", $map);
$route_set = TRUE;
break;
}
}
}
// Doesn't match a predefined route?
// Match on module/controller/method, controller/method, or method
if( ! $route_set)
{
$num_segments = 0;
if(strpos($pi, '/') === FALSE && ! empty($pi))
{
$num_segments = 1;
}
else
{
$segments = explode('/', $pi);
$num_segments = count($segments);
}
if($num_segments === 1)
{
$func = $pi;
}
if($num_segments === 2)
{
list($controller, $func) = $segments;
}
if($num_segments >= 3)
{
list($module, $controller, $func) = $segments;
}
}
}
$path = MM_MOD_PATH."{$module}/controllers/{$controller}.php";
if(is_file($path))
{
require_once($path);
// Get the list of valid methods for that controller
$methods = controller_methods($controller);
if(in_array($func, $methods))
{
$class = new $controller;
return call_user_func(array($class, $func));
}
// Function doesn't exist...404
show_404();
die();
}
// If it gets here, it's still a 404
show_404();
}
// --------------------------------------------------------------------------
/**
* Returns a full url from a url segment
*
* @param string $segment
* @return string
*/
function site_url($segment)
{
return $url = BASEURL . URL_INDEX_FILE . $segment;
}
// --------------------------------------------------------------------------
/**
* Prints out the contents of the object
*
* @param object/array $data
* @param string $method
* @return string
*/
function to_string($data, $method='print_r')
{
$output = '';
if($method == "var_dump")
{
ob_start();
var_dump($data);
$output .= ob_get_contents();
ob_end_clean();
}
else if($method == "var_export")
{
ob_start();
var_export($data);
$output .= ob_get_contents();
ob_end_clean();
}
else
{
$output .= print_r($data, TRUE);
}
return $output . '
';
}
// --------------------------------------------------------------------------
/**
* Array_map callback to load a folder of classes at once
*
* @param string $path
* @return void
*/
function do_include($path)
{
require_once($path);
}
// Load Database classes
require_once(MM_SYS_PATH.'Query/autoload.php');
require_once(MM_SYS_PATH.'miniMVC.php');
// Load system libraries
array_map('do_include', glob(MM_SYS_PATH.'*.php'));
// End of common.php