First commit
This commit is contained in:
commit
8fff8a2df2
25
app/errors/error.php
Normal file
25
app/errors/error.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<div class="error">
|
||||||
|
<h4>A PHP Error was encountered</h4>
|
||||||
|
|
||||||
|
<p>Severity: <?php echo $severity; ?></p>
|
||||||
|
<p>Message: <?php echo $message; ?></p>
|
||||||
|
<p>Filename: <?php echo $filepath; ?></p>
|
||||||
|
<p>Line Number: <?php echo $line; ?></p>
|
||||||
|
|
||||||
|
<?php if(defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>
|
||||||
|
|
||||||
|
<p>Backtrace: </p>
|
||||||
|
<?php foreach(debug_backtrace() as $error): ?>
|
||||||
|
|
||||||
|
<?php if(isset($error['file']) && ! stristr($error['file'], SYS_DIR)): ?>
|
||||||
|
<p style="margin-left:10px">
|
||||||
|
File: <?php echo $error['file'] ?><br />
|
||||||
|
Line: <?php echo $error['line'] ?><br />
|
||||||
|
Function: <?php echo $error['function'] ?>
|
||||||
|
</p>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php endforeach ?></p>
|
||||||
|
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
30
index.php
Normal file
30
index.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Change this in a live environment!
|
||||||
|
error_reporting(-1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Display Debug backtrace
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| If set to TRUE, a backtrace will be displayed along with php errors.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
define('SHOW_DEBUG_BACKTRACE', TRUE);
|
||||||
|
|
||||||
|
|
||||||
|
// Set the default paths
|
||||||
|
define('SYS_PATH', __DIR__.'/sys/');
|
||||||
|
define('MOD_PATH', __DIR__.'/modules/');
|
||||||
|
define('APP_PATH', __DIR__.'/app/');
|
||||||
|
|
||||||
|
// Require the most important files
|
||||||
|
require(SYS_PATH . "miniMVC.php");
|
||||||
|
require(SYS_PATH . 'db.php');
|
||||||
|
|
||||||
|
$MM =& get_instance();
|
||||||
|
|
||||||
|
$MM->db = new MM_db('pgsql');
|
||||||
|
|
||||||
|
echo $MM->__toString();
|
10
modules/default/controllers/test.php
Normal file
10
modules/default/controllers/test.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class Test extends MM_Controller {
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
107
sys/common.php
Normal file
107
sys/common.php
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File including common framework-wide functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Singleton function
|
||||||
|
*/
|
||||||
|
function get_instance($params=array())
|
||||||
|
{
|
||||||
|
static $result = null;
|
||||||
|
|
||||||
|
if(is_null($result) === TRUE)
|
||||||
|
{
|
||||||
|
$result = new miniMVC($params);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to search through the tree to find the necessary file
|
||||||
|
*
|
||||||
|
* @param string $file
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function _find_file($file)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables pure PHP templating
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @param bool $return
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
function load_view($file, $data=array(), $return=FALSE)
|
||||||
|
{
|
||||||
|
// Contain the content for buffering
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
// Extract the data array
|
||||||
|
extract($data);
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom error handler
|
||||||
|
*/
|
||||||
|
function on_error($num, $string, $file, $line, $context)
|
||||||
|
{
|
||||||
|
$data = array(
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom exception handler
|
||||||
|
*/
|
||||||
|
function on_exception($exception)
|
||||||
|
{
|
||||||
|
// these are our templates
|
||||||
|
$traceline = "#%s %s(%s): %s(%s)";
|
||||||
|
$msg = "PHP Fatal error: Uncaught exception '%s' with message '%s' in %s:%s<br />Stack trace:<br />%s<br /> thrown in %s on line %s";
|
||||||
|
|
||||||
|
// alter your trace as you please, here
|
||||||
|
$trace = $exception->getTrace();
|
||||||
|
/*foreach ($trace as $key => $stackPoint) {
|
||||||
|
// I'm converting arguments to their type
|
||||||
|
// (prevents passwords from ever getting logged as anything other than 'string')
|
||||||
|
$trace[$key]['args'] = array_map('gettype', $trace[$key]['args']);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
// build your tracelines
|
||||||
|
$result = array();
|
||||||
|
foreach ($trace as $key => $stackPoint) {
|
||||||
|
$result[] = sprintf(
|
||||||
|
$traceline,
|
||||||
|
$key,
|
||||||
|
$stackPoint['file'],
|
||||||
|
$stackPoint['line'],
|
||||||
|
$stackPoint['function'],
|
||||||
|
implode(', ', $stackPoint['args'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// trace always ends with {main}
|
||||||
|
$result[] = '#' . ++$key . ' {main}';
|
||||||
|
|
||||||
|
// write tracelines into main template
|
||||||
|
$msg = sprintf(
|
||||||
|
$msg,
|
||||||
|
get_class($exception),
|
||||||
|
$exception->getMessage(),
|
||||||
|
$exception->getFile(),
|
||||||
|
$exception->getLine(),
|
||||||
|
implode("<br />", $result),
|
||||||
|
$exception->getFile(),
|
||||||
|
$exception->getLine()
|
||||||
|
);
|
||||||
|
|
||||||
|
echo $msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_exception_handler('on_exception');
|
140
sys/db.php
Normal file
140
sys/db.php
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
//Include the database config file
|
||||||
|
require(APP_PATH.'config/db.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Just for giggles extend PHP's PDO class
|
||||||
|
*/
|
||||||
|
class MM_PDO extends PDO {
|
||||||
|
|
||||||
|
function __construct($dbname, $options=array())
|
||||||
|
{
|
||||||
|
global $db_conf;
|
||||||
|
|
||||||
|
if( ! isset($dbname))
|
||||||
|
{
|
||||||
|
$dbname = "default";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Array manipulation is too verbose
|
||||||
|
extract($db_conf[$dbname]);
|
||||||
|
|
||||||
|
// Sqlite doesn't use dbname param
|
||||||
|
$dsn = (stripos($type, "sqlite") === FALSE) ? "{$type}:dbname={$db}" : "{$type}:{$db}";
|
||||||
|
|
||||||
|
// Set hostname if applicable
|
||||||
|
if(isset($host))
|
||||||
|
{
|
||||||
|
$dsn .= ($host !== "") ? ";host={$host}" : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set port if applicable
|
||||||
|
if(isset($port))
|
||||||
|
{
|
||||||
|
$dsn .= ($port !== "") ? ";port={$port}" : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if($user === "" && $pass === "")
|
||||||
|
{
|
||||||
|
$user = null;
|
||||||
|
$pass = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$opts = array(
|
||||||
|
PDO::ATTR_PERSISTENT => (isset($persist)) ? $persist : FALSE,
|
||||||
|
);
|
||||||
|
|
||||||
|
if( ! isset($persist))
|
||||||
|
{
|
||||||
|
unset($opts[PDO::ATTR_PERSISTENT]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = array_merge($opts, $options);
|
||||||
|
|
||||||
|
parent::__construct($dsn, $user, $pass, $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP magic method to facilitate dynamic methods
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @param array $args
|
||||||
|
*/
|
||||||
|
function __call($name, $args)
|
||||||
|
{
|
||||||
|
if(is_callable($this->$name))
|
||||||
|
{
|
||||||
|
//Add $this to the beginning of the args array
|
||||||
|
array_unshift($args, $this);
|
||||||
|
|
||||||
|
//Call the dynamic function
|
||||||
|
return call_user_func_array($this->$name, $args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints out the contents of the object when used as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function __toString()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$method = ( ! empty($args)) ? $args[0] : "print_r";
|
||||||
|
|
||||||
|
$output = '<pre>';
|
||||||
|
|
||||||
|
if($method == "var_dump")
|
||||||
|
{
|
||||||
|
ob_start();
|
||||||
|
var_dump($this);
|
||||||
|
$output .= ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
}
|
||||||
|
else if($method == "var_export")
|
||||||
|
{
|
||||||
|
ob_start();
|
||||||
|
var_export($this);
|
||||||
|
$output .= ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$output .= print_r($this, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output . '</pre>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor without the "new"
|
||||||
|
*
|
||||||
|
* @param array $members
|
||||||
|
*/
|
||||||
|
function __invoke($members=array())
|
||||||
|
{
|
||||||
|
return new MM_PDO($members);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MM_db extends MM_PDO {
|
||||||
|
|
||||||
|
function __construct($dbname)
|
||||||
|
{
|
||||||
|
parent::__construct($dbname);
|
||||||
|
}
|
||||||
|
|
||||||
|
function __destruct()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
189
sys/miniMVC.php
Normal file
189
sys/miniMVC.php
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
//Include common function
|
||||||
|
require('common.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSObject
|
||||||
|
*
|
||||||
|
* Class for creating object-literal-like constructs in PHP
|
||||||
|
*/
|
||||||
|
class JSObject {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for creating the objects
|
||||||
|
*/
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
|
||||||
|
$members = $args[0];
|
||||||
|
|
||||||
|
// Add the passed parameters to the object
|
||||||
|
foreach($members as $name => $value)
|
||||||
|
{
|
||||||
|
if(is_array($value))
|
||||||
|
{
|
||||||
|
$value = new JSObject($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->$name = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP magic method to facilitate dynamic methods
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @param array $args
|
||||||
|
*/
|
||||||
|
function __call($name, $args)
|
||||||
|
{
|
||||||
|
if(is_callable($this->$name))
|
||||||
|
{
|
||||||
|
//Call the dynamic function
|
||||||
|
return call_user_func_array($this->$name, $args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints out the contents of the object when used as a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function __toString()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$method = ( ! empty($args)) ? $args[0] : "print_r";
|
||||||
|
|
||||||
|
$output = '<pre>';
|
||||||
|
|
||||||
|
if($method == "var_dump")
|
||||||
|
{
|
||||||
|
ob_start();
|
||||||
|
var_dump($this);
|
||||||
|
$output .= ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
}
|
||||||
|
else if($method == "var_export")
|
||||||
|
{
|
||||||
|
ob_start();
|
||||||
|
var_export($this);
|
||||||
|
$output .= ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$output .= print_r($this, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output . '</pre>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor without the "new"
|
||||||
|
*
|
||||||
|
* @param array $members
|
||||||
|
*/
|
||||||
|
function __invoke($members=array())
|
||||||
|
{
|
||||||
|
return new JSObject($members);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class for the framework
|
||||||
|
*/
|
||||||
|
class miniMVC extends JSObject {
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
$this->buffer = "";
|
||||||
|
$this->headers = array();
|
||||||
|
|
||||||
|
parent::__construct(array(
|
||||||
|
'output' => array(
|
||||||
|
'set_header' => function($key, $val)
|
||||||
|
{
|
||||||
|
$this->headers[$key] = $val;
|
||||||
|
},
|
||||||
|
'append_output' => function($string)
|
||||||
|
{
|
||||||
|
$this->buffer .= $string;
|
||||||
|
},
|
||||||
|
'set_output' => function($string)
|
||||||
|
{
|
||||||
|
$this->buffer = $string;
|
||||||
|
}
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP magic method called when ending the script
|
||||||
|
* Used for outputing HTML
|
||||||
|
*/
|
||||||
|
function __destruct()
|
||||||
|
{
|
||||||
|
// Set headers
|
||||||
|
foreach($this->headers as $key => $val)
|
||||||
|
{
|
||||||
|
@header("$key: $val");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP magic method to facilitate dynamic class loading
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
*/
|
||||||
|
function __get($name)
|
||||||
|
{
|
||||||
|
$path = SYS_PATH."{$name}.php";
|
||||||
|
$class = "MM_{$key}";
|
||||||
|
|
||||||
|
//if(is_file($path))
|
||||||
|
//{
|
||||||
|
include($path);
|
||||||
|
|
||||||
|
if(class_exists($class, FALSE))
|
||||||
|
{
|
||||||
|
$this->$name = new $class();
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class MM_Model extends miniMVC {
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function __destruct()
|
||||||
|
{
|
||||||
|
parent::__destruct();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class MM_Controller extends miniMVC {
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function __destruct()
|
||||||
|
{
|
||||||
|
parent::__destruct();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user