Various improvements, need to fix class auto-loading
This commit is contained in:
parent
e03cad02be
commit
c5634b182a
@ -1,37 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$config = array(
|
return array(
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Base Url
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This is the url path where the framework is located. Requires trailing
|
|
||||||
| slash.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
'base_url' => '',
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Content Domain
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This is the domain used for serving content, such as css, javascript.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
'content_domain' => '',
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Static Lib Path
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This is the path where the 'assets' directory is on the static domain.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
'static_lib_path' => $config['content_domain'].'assets/',
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -42,7 +11,7 @@ $config = array(
|
|||||||
| stylesheet minifier. This should not need to be changed.
|
| stylesheet minifier. This should not need to be changed.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
'style_path' => $config['static_lib_path'] . '/css.php/g/';
|
'style_path' => STATIC_LIB_PATH . '/css.php/g/',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -53,7 +22,7 @@ $config = array(
|
|||||||
| javascript minifier. This should not need to be changed.
|
| javascript minifier. This should not need to be changed.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
'script_path' => $config['static_lib_path'] . '/js.php/g/';
|
'script_path' => STATIC_LIB_PATH . '/js.php/g/',
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -65,7 +34,7 @@ $config = array(
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'default_title' => "Tim's Home Page",
|
'default_title' => "miniMVC app",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
34
index.php
34
index.php
@ -13,6 +13,37 @@ error_reporting(-1);
|
|||||||
*/
|
*/
|
||||||
define('SHOW_DEBUG_BACKTRACE', TRUE);
|
define('SHOW_DEBUG_BACKTRACE', TRUE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Base Url
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This is the url path where the framework is located. Requires trailing
|
||||||
|
| slash.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
define('BASE_URL', '');
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Content Domain
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This is the domain used for serving content, such as css, javascript.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
define('CONTENT_DOMAIN', '');
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Static Lib Path
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This is the path where the 'assets' directory is on the static domain.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
define('STATIC_LIB_PATH', CONTENT_DOMAIN.'assets/');
|
||||||
|
|
||||||
|
|
||||||
// Set the default paths
|
// Set the default paths
|
||||||
define('SYS_PATH', __DIR__.'/sys/');
|
define('SYS_PATH', __DIR__.'/sys/');
|
||||||
@ -21,7 +52,4 @@ define('APP_PATH', __DIR__.'/app/');
|
|||||||
|
|
||||||
// Require the most important files
|
// Require the most important files
|
||||||
require(SYS_PATH . "common.php");
|
require(SYS_PATH . "common.php");
|
||||||
require(SYS_PATH . "miniMVC.php");
|
|
||||||
require(SYS_PATH . 'db.php');
|
|
||||||
|
|
||||||
echo get_instance()->__toString();
|
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class Test extends MM_Controller {
|
|
||||||
|
|
||||||
function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
17
modules/welcome/controllers/welcome.php
Normal file
17
modules/welcome/controllers/welcome.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class Welcome extends miniMVC {
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function index()
|
||||||
|
{
|
||||||
|
//$this->page->build_header();
|
||||||
|
$this->output->append_output($this->__toString());
|
||||||
|
//$this->page->build_footer();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
192
sys/common.php
192
sys/common.php
@ -7,28 +7,24 @@
|
|||||||
/**
|
/**
|
||||||
* Singleton function
|
* Singleton function
|
||||||
*/
|
*/
|
||||||
function get_instance($params=array())
|
function mm()
|
||||||
{
|
{
|
||||||
static $result = null;
|
return miniMVC::singleton();
|
||||||
|
|
||||||
if(is_null($result) === TRUE)
|
|
||||||
{
|
|
||||||
$result = new miniMVC($params);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to search through the tree to find the necessary file
|
* Function to search through the tree to find the necessary file
|
||||||
*
|
*
|
||||||
* @param string $file
|
* @param string $file
|
||||||
* @param string $module
|
|
||||||
* @param string $curr_path
|
* @param string $curr_path
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function load_file($file, $curr_path="", $module="")
|
function load_file($file, $curr_path="")
|
||||||
{
|
{
|
||||||
|
$path = "";
|
||||||
|
|
||||||
if($curr_path === "app")
|
if($curr_path === "app")
|
||||||
{
|
{
|
||||||
$path = APP_PATH."{$file}.php";
|
$path = APP_PATH."{$file}.php";
|
||||||
@ -37,14 +33,14 @@ function load_file($file, $curr_path="", $module="")
|
|||||||
{
|
{
|
||||||
$path = SYS_PATH."{$file}.php";
|
$path = SYS_PATH."{$file}.php";
|
||||||
}
|
}
|
||||||
|
|
||||||
if($module !== "")
|
|
||||||
{
|
|
||||||
$path = MOD_PATH."{$module}/{$file}.php";
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if($curr_path !== "")
|
$path = MOD_PATH."{$curr_path}/{$file}.php";
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ! is_file($path))
|
||||||
|
{
|
||||||
|
/*if($curr_path !== "")
|
||||||
{
|
{
|
||||||
$matches = array();
|
$matches = array();
|
||||||
if(preg_match("`modules/([a-z 0-9~%.:_\-])/?`i", $curr_path, $matches))
|
if(preg_match("`modules/([a-z 0-9~%.:_\-])/?`i", $curr_path, $matches))
|
||||||
@ -55,42 +51,15 @@ function load_file($file, $curr_path="", $module="")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{*/
|
||||||
$path = MOD_PATH."default/{$file}.php";
|
$path = MOD_PATH."welcome/{$file}.php";
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once($path);
|
include_once($path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// --------------------------------------------------------------------------
|
||||||
* 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);
|
|
||||||
|
|
||||||
// Include the file
|
|
||||||
_find_file($file);
|
|
||||||
|
|
||||||
$buffer = ob_get_contents();
|
|
||||||
ob_end_clean();
|
|
||||||
|
|
||||||
if($return)
|
|
||||||
{
|
|
||||||
return $buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo $buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom error handler
|
* Custom error handler
|
||||||
@ -117,7 +86,6 @@ function on_error($severity, $message, $filepath, $line, $context)
|
|||||||
// Contain the content for buffering
|
// Contain the content for buffering
|
||||||
ob_start();
|
ob_start();
|
||||||
|
|
||||||
// Extract the data array
|
|
||||||
include(APP_PATH.'/errors/error.php');
|
include(APP_PATH.'/errors/error.php');
|
||||||
|
|
||||||
$buffer = ob_get_contents();
|
$buffer = ob_get_contents();
|
||||||
@ -125,6 +93,8 @@ function on_error($severity, $message, $filepath, $line, $context)
|
|||||||
echo $buffer;
|
echo $buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom exception handler
|
* Custom exception handler
|
||||||
*/
|
*/
|
||||||
@ -136,11 +106,6 @@ function on_exception($exception)
|
|||||||
|
|
||||||
// alter your trace as you please, here
|
// alter your trace as you please, here
|
||||||
$trace = $exception->getTrace();
|
$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
|
// build your tracelines
|
||||||
$result = array();
|
$result = array();
|
||||||
@ -172,95 +137,44 @@ function on_exception($exception)
|
|||||||
echo $msg;
|
echo $msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set error handlers
|
// --------------------------------------------------------------------------
|
||||||
set_error_handler('on_error');
|
|
||||||
set_exception_handler('on_exception');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JSObject
|
* Calls the appropriate module/controller/function based on the url
|
||||||
*
|
|
||||||
* Class for creating object-literal-like constructs in PHP
|
|
||||||
*/
|
*/
|
||||||
class JSObject {
|
function route()
|
||||||
|
{
|
||||||
|
$controller = "welcome";
|
||||||
|
$module = "welcome";
|
||||||
|
$func = "index";
|
||||||
|
|
||||||
/**
|
if( ! empty($_SERVER['PATH_INFO']))
|
||||||
* 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();
|
$segments = explode('/', $_SERVER['PATH_INFO']);
|
||||||
$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>';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
load_file("controllers/{$controller}", $module);
|
||||||
* Constructor without the "new"
|
|
||||||
*
|
$class = new $controller;
|
||||||
* @param array $members
|
|
||||||
*/
|
call_user_func(array($class, $func));
|
||||||
function __invoke($members=array())
|
|
||||||
{
|
|
||||||
return new JSObject($members);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Set error handlers
|
||||||
|
set_error_handler('on_error');
|
||||||
|
//set_exception_handler('on_exception');
|
||||||
|
|
||||||
|
// Load Most Common libraries
|
||||||
|
require_once('miniMVC.php');
|
||||||
|
require_once('output.php');
|
||||||
|
require_once('page.php');
|
||||||
|
require_once('db.php');
|
||||||
|
|
||||||
|
//Route to the appropriate function
|
||||||
|
route();
|
||||||
|
|
||||||
|
// End of common.php
|
47
sys/db.php
47
sys/db.php
@ -1,21 +1,27 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
//Include the database config file
|
|
||||||
load_file('config/db','app');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Just for giggles extend PHP's PDO class
|
* Just for giggles extend PHP's PDO class
|
||||||
*/
|
*/
|
||||||
class MM_PDO extends PDO {
|
class db extends PDO {
|
||||||
|
|
||||||
function __construct($dbname, $options=array())
|
private $where;
|
||||||
|
private static $instance;
|
||||||
|
|
||||||
|
public static function get_instance()
|
||||||
|
{
|
||||||
|
if ( ! isset(self::$instance)) {
|
||||||
|
echo 'Creating new instance of db class.';
|
||||||
|
$className = __CLASS__;
|
||||||
|
self::$instance = new $className;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
function __construct($dbname="default", $options=array())
|
||||||
{
|
{
|
||||||
global $db_conf;
|
//Include the database config file
|
||||||
|
load_file('config/db','app');
|
||||||
if( ! isset($dbname))
|
|
||||||
{
|
|
||||||
$dbname = "default";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Array manipulation is too verbose
|
// Array manipulation is too verbose
|
||||||
extract($db_conf[$dbname]);
|
extract($db_conf[$dbname]);
|
||||||
@ -120,21 +126,8 @@ class MM_PDO extends PDO {
|
|||||||
*/
|
*/
|
||||||
function __invoke($members=array())
|
function __invoke($members=array())
|
||||||
{
|
{
|
||||||
return new MM_PDO($members);
|
return self::$instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MM_db extends MM_PDO {
|
// End of db.php
|
||||||
|
|
||||||
function __construct($dbname)
|
|
||||||
{
|
|
||||||
parent::__construct($dbname);
|
|
||||||
}
|
|
||||||
|
|
||||||
function __destruct()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
234
sys/miniMVC.php
234
sys/miniMVC.php
@ -1,55 +1,165 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for the framework
|
* Base class for the framework
|
||||||
*/
|
*/
|
||||||
class miniMVC extends JSObject {
|
class miniMVC{
|
||||||
|
|
||||||
protected $buffer;
|
private static $instance;
|
||||||
protected $headers;
|
|
||||||
|
private $buffer, $headers;
|
||||||
|
|
||||||
|
public static function get_instance()
|
||||||
|
{
|
||||||
|
if ( ! isset(self::$instance)) {
|
||||||
|
echo 'Creating new instance.';
|
||||||
|
$className = __CLASS__;
|
||||||
|
self::$instance = new $className;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
function __construct()
|
function __construct()
|
||||||
{
|
{
|
||||||
$this->buffer = "";
|
// Load the page class
|
||||||
$this->headers = array();
|
/*if( ! isset(self::$instance->page))
|
||||||
|
{
|
||||||
|
self::$instance->page &= new Page;
|
||||||
|
}
|
||||||
|
|
||||||
parent::__construct(array(
|
if( ! isset($this->output))
|
||||||
'output' => array(
|
{
|
||||||
'set_header' => function($key, $val)
|
self::$instance->output &= new Output;
|
||||||
{
|
}*/
|
||||||
$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
|
* Magic function called when cloning an object
|
||||||
* Used for outputing HTML
|
|
||||||
*/
|
*/
|
||||||
function __destruct()
|
public function __clone()
|
||||||
{
|
{
|
||||||
// Set headers
|
trigger_error('Clone is not allowed.', E_USER_ERROR);
|
||||||
foreach($this->headers as $key => $val)
|
}
|
||||||
{
|
|
||||||
if( ! isset($val))
|
|
||||||
{
|
|
||||||
@header($key);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
@header("$key: $val");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function for loading a view
|
||||||
|
*
|
||||||
|
* @param string $file
|
||||||
|
* @param array $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
function load_view($file, $data, $return=FALSE)
|
||||||
|
{
|
||||||
|
$path = "";
|
||||||
|
|
||||||
|
// The module is the lower of the class name
|
||||||
|
// need to figure out a way to allow multiple controllers
|
||||||
|
// in one module
|
||||||
|
$module = strtolower(get_class($this));
|
||||||
|
|
||||||
|
$not_modules = array('miniMVC', 'page', 'db');
|
||||||
|
|
||||||
|
// If it's a module, look in the module view folder
|
||||||
|
if( ! in_array($module, $not_modules))
|
||||||
|
{
|
||||||
|
$path = MOD_PATH . "{$module}/views/{$file}.php";
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not a module, or doesn't exist in the module view folder
|
||||||
|
// look in the app view folder
|
||||||
|
if( ! is_file($path))
|
||||||
|
{
|
||||||
|
$path = APP_PATH . "views/{$file}.php";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Contain the content for buffering
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
// Extract the data array
|
||||||
|
extract($data);
|
||||||
|
|
||||||
|
// Include the file
|
||||||
|
include($path);
|
||||||
|
|
||||||
|
$buffer = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
if($return)
|
||||||
|
{
|
||||||
|
return $buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->output->append_output($buffer);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP magic method to facilitate dynamic methods
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @param array $args
|
||||||
|
*/
|
||||||
|
function __call($name, $args)
|
||||||
|
{
|
||||||
|
if(is_callable(self::$instance->$name))
|
||||||
|
{
|
||||||
|
//Add $this object to args
|
||||||
|
array_push($args, $this);
|
||||||
|
|
||||||
|
//Call the dynamic function
|
||||||
|
return call_user_func_array(self::$instance->$name, $args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP magic method to facilitate dynamically set static methods
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @param array $args
|
||||||
|
*/
|
||||||
|
public static function __callStatic($name, $args)
|
||||||
|
{
|
||||||
|
if(is_callable(self::$name))
|
||||||
|
{
|
||||||
|
return call_user_func_array(self::$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>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -59,45 +169,27 @@ class miniMVC extends JSObject {
|
|||||||
*/
|
*/
|
||||||
function __get($name)
|
function __get($name)
|
||||||
{
|
{
|
||||||
$path = SYS_PATH."{$name}.php";
|
//$path = SYS_PATH."{$name}.php";
|
||||||
$class = "MM_{$key}";
|
$class = "{$name}";
|
||||||
|
|
||||||
load_file($name, 'sys');
|
if(class_exists($class, FALSE))
|
||||||
|
{
|
||||||
if(class_exists($class, FALSE))
|
if( ! isset(self::$instance->$name))
|
||||||
{
|
{
|
||||||
$this->$name = new $class();
|
self::$instance->$name &= new $class;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*load_file($name, 'sys');
|
||||||
|
|
||||||
|
if(class_exists($class, FALSE))
|
||||||
|
{
|
||||||
|
self::$instance->$name &= new $class;
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class MM_Model extends miniMVC {
|
|
||||||
|
|
||||||
function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
function __destruct()
|
|
||||||
{
|
|
||||||
parent::__destruct();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class MM_Controller extends miniMVC {
|
// End of miniMVC.php
|
||||||
|
|
||||||
function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
function __destruct()
|
|
||||||
{
|
|
||||||
parent::__destruct();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
71
sys/output.php
Normal file
71
sys/output.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class Output extends miniMVC {
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
$this->buffer = "";
|
||||||
|
$this->headers = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP magic method called when ending the script
|
||||||
|
* Used for outputing HTML
|
||||||
|
*/
|
||||||
|
function __destruct()
|
||||||
|
{
|
||||||
|
if( ! empty($this->headers))
|
||||||
|
{
|
||||||
|
// Set headers
|
||||||
|
foreach($this->headers as $key => $val)
|
||||||
|
{
|
||||||
|
if( ! isset($val))
|
||||||
|
{
|
||||||
|
@header($key);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@header("$key: $val");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ! empty($this->buffer))
|
||||||
|
{
|
||||||
|
echo $this->buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a header for later output
|
||||||
|
* @param string $key
|
||||||
|
* @param string $val
|
||||||
|
*/
|
||||||
|
function set_header($key, $val)
|
||||||
|
{
|
||||||
|
$this->headers[$key] = $val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds text to the output buffer
|
||||||
|
*
|
||||||
|
* @param string $string
|
||||||
|
*/
|
||||||
|
function append_output($string)
|
||||||
|
{
|
||||||
|
$this->buffer .= $string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the output buffer
|
||||||
|
*
|
||||||
|
* @param string $string
|
||||||
|
*/
|
||||||
|
function set_output($string)
|
||||||
|
{
|
||||||
|
$this->buffer = $string;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// End of Output.php
|
149
sys/page.php
149
sys/page.php
@ -1,15 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
(defined('BASEPATH')) OR exit('No direct script access allowed');
|
|
||||||
/**
|
/**
|
||||||
* Class for building pages
|
* Class for building pages
|
||||||
*
|
*
|
||||||
* All methods are chainable, with the exception of the constructor,
|
* All methods are chainable, with the exception of the constructor,
|
||||||
* build_header(), build_footer(), build_page() and _headers() methods.
|
* build_header(), build_footer(), build_page() and _headers() methods.
|
||||||
*/
|
*/
|
||||||
class Page extends JSObject
|
class Page
|
||||||
{
|
{
|
||||||
private static $meta, $head_js, $foot_js, $css, $title, $head_tags, $body_class, $body_id, $base;
|
private $meta, $head_js, $foot_js, $css, $title, $head_tags, $body_class, $body_id, $base;
|
||||||
private $CI;
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
@ -22,7 +21,9 @@ class Page extends JSObject
|
|||||||
$this->body_class = "";
|
$this->body_class = "";
|
||||||
$this->body_id = "";
|
$this->body_id = "";
|
||||||
$this->base = "";
|
$this->base = "";
|
||||||
$this->MM =& get_instance();
|
$this->config = load_file('config/config', 'app');
|
||||||
|
|
||||||
|
$this->mm &= miniMVC::get_instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -40,9 +41,9 @@ class Page extends JSObject
|
|||||||
*/
|
*/
|
||||||
private function _headers($xhtml, $html5)
|
private function _headers($xhtml, $html5)
|
||||||
{
|
{
|
||||||
$this->MM->output->set_header("Cache-Control", "must-revalidate, public");
|
$this->mm->output->set_header("Cache-Control", "must-revalidate, public");
|
||||||
|
|
||||||
$this->MM->output->set_header("Vary", "Accept");
|
$this->mm->output->set_header("Vary", "Accept");
|
||||||
$mime = "";
|
$mime = "";
|
||||||
|
|
||||||
//Variable for accept keyword
|
//Variable for accept keyword
|
||||||
@ -110,9 +111,9 @@ class Page extends JSObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
// finally, output the mime type and prolog type
|
// finally, output the mime type and prolog type
|
||||||
$this->MM->output->set_header("Content-Type", "$mime;charset=$charset");
|
$this->mm->output->set_header("Content-Type", "$mime;charset=$charset");
|
||||||
$this->MM->output->set_header("X-UA-Compatible", "chrome=1, IE=edge");
|
$this->mm->output->set_header("X-UA-Compatible", "chrome=1, IE=edge");
|
||||||
$this->MM->output->set_output($doctype_string);
|
$this->mm->output->set_output($doctype_string);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -148,7 +149,7 @@ class Page extends JSObject
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = $this->MM->config->item('group_js_path') . $group;
|
$file = $this->config['script_path'] . $group;
|
||||||
$file .= ($debug == TRUE) ? "/debug/1" : "";
|
$file .= ($debug == TRUE) ? "/debug/1" : "";
|
||||||
$this->head_js .= $this->script_tag($file, FALSE);
|
$this->head_js .= $this->script_tag($file, FALSE);
|
||||||
return $this;
|
return $this;
|
||||||
@ -178,11 +179,11 @@ class Page extends JSObject
|
|||||||
public function set_css_group($group)
|
public function set_css_group($group)
|
||||||
{
|
{
|
||||||
$link = array(
|
$link = array(
|
||||||
'href' => $this->MM->config->item('group_style_path') . $group,
|
'href' => $this->config['style_path'] . $group,
|
||||||
'rel' => 'stylesheet',
|
'rel' => 'stylesheet',
|
||||||
'type' => 'text/css'
|
'type' => 'text/css'
|
||||||
);
|
);
|
||||||
$this->css .= link_tag($link);
|
$this->css .= $this->_link_tag($link);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -196,7 +197,7 @@ class Page extends JSObject
|
|||||||
*/
|
*/
|
||||||
public function set_foot_js_group($group, $debug = FALSE)
|
public function set_foot_js_group($group, $debug = FALSE)
|
||||||
{
|
{
|
||||||
$file = $this->MM->config->item('group_js_path') . $group;
|
$file = $this->config['script_path'] . $group;
|
||||||
$file .= ($debug == TRUE) ? "/debug/1" : "";
|
$file .= ($debug == TRUE) ? "/debug/1" : "";
|
||||||
$this->foot_js .= $this->script_tag($file, FALSE);
|
$this->foot_js .= $this->script_tag($file, FALSE);
|
||||||
return $this;
|
return $this;
|
||||||
@ -224,7 +225,7 @@ class Page extends JSObject
|
|||||||
*/
|
*/
|
||||||
public function set_title($title = "")
|
public function set_title($title = "")
|
||||||
{
|
{
|
||||||
$title = ($title == "") ? $this->MM->config->item('default_title') : $title;
|
$title = ($title == "") ? $this->config['default_title'] : $title;
|
||||||
|
|
||||||
$this->title = $title;
|
$this->title = $title;
|
||||||
|
|
||||||
@ -280,13 +281,20 @@ class Page extends JSObject
|
|||||||
*/
|
*/
|
||||||
public function set_css_tag($name, $domain = TRUE, $media = "all")
|
public function set_css_tag($name, $domain = TRUE, $media = "all")
|
||||||
{
|
{
|
||||||
$path = $this->MM->config->item('content_domain');
|
$path = CONTENT_DOMAIN;
|
||||||
$css_file = $path . "/css/" . $name . ".css";
|
$css_file = $path . "/css/" . $name . ".css";
|
||||||
|
|
||||||
if ($domain == FALSE)
|
if ($domain == FALSE)
|
||||||
|
{
|
||||||
$css_file = $name;
|
$css_file = $name;
|
||||||
|
}
|
||||||
|
|
||||||
$this->css_tags .= link_tag($name, "stylesheet", "text/css", "", $media);
|
$this->css_tags .= $this->_link_tag(array(
|
||||||
|
'rel' => 'stylesheet',
|
||||||
|
'type' => 'text/css',
|
||||||
|
'media' => $media,
|
||||||
|
'href' => $css_file,
|
||||||
|
));
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -334,35 +342,30 @@ class Page extends JSObject
|
|||||||
//Set Meta Tags
|
//Set Meta Tags
|
||||||
$this->meta = ($html5 == TRUE)
|
$this->meta = ($html5 == TRUE)
|
||||||
? '<meta charset="utf-8" />'. $this->meta
|
? '<meta charset="utf-8" />'. $this->meta
|
||||||
: meta('content-type', 'text/html; charset=utf-8', 'equiv') . $this->meta;
|
: $this->_meta(array(
|
||||||
|
'http-equiv' => 'Content-Type',
|
||||||
|
'content' => 'text/html; charset=utf-8',
|
||||||
|
)) . $this->meta;
|
||||||
|
|
||||||
$data['meta'] = $this->meta;
|
$data['meta'] = $this->meta;
|
||||||
|
|
||||||
//Set CSS
|
//Set CSS
|
||||||
if ($this->css != "")
|
if ($this->css !== "")
|
||||||
{
|
{
|
||||||
$data['css'] = $this->css;
|
$data['css'] = $this->css;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Set default CSS group
|
//Set default CSS group
|
||||||
$this->set_css_group($this->MM->config->item('default_css_group'));
|
$this->set_css_group($this->config['default_css_group']);
|
||||||
$data['css'] = $this->css;
|
$data['css'] = $this->css;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set head javascript
|
//Set head javascript
|
||||||
if ($this->head_js != "")
|
$data['head_js'] = ( ! empty($this->head_js)) ? $this->head_js : "";
|
||||||
{
|
|
||||||
$data['head_js'] = $this->head_js;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->set_head_js_group($this->MM->config->item('default_head_js_group'));
|
|
||||||
$data['head_js'] = $this->head_js;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Set Page Title
|
//Set Page Title
|
||||||
$data['title'] = ($this->title != '') ? $this->title : $this->MM->config->item('default_title');
|
$data['title'] = ($this->title != '') ? $this->title : $this->config['default_title'];
|
||||||
|
|
||||||
//Set Body Class
|
//Set Body Class
|
||||||
$data['body_class'] = $this->body_class;
|
$data['body_class'] = $this->body_class;
|
||||||
@ -380,7 +383,7 @@ class Page extends JSObject
|
|||||||
$this->_headers($xhtml, $html5);
|
$this->_headers($xhtml, $html5);
|
||||||
|
|
||||||
//Output Header
|
//Output Header
|
||||||
$this->MM->load->view('header', $data);
|
$this->mm->load_view('header', $data);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -397,7 +400,7 @@ class Page extends JSObject
|
|||||||
|
|
||||||
$data['foot_js'] = ($this->foot_js != "") ? $this->foot_js : '';
|
$data['foot_js'] = ($this->foot_js != "") ? $this->foot_js : '';
|
||||||
|
|
||||||
$this->MM->load->view('footer', $data);
|
$this->$this->mm->load_view('footer', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -413,7 +416,7 @@ class Page extends JSObject
|
|||||||
*/
|
*/
|
||||||
private function script_tag($js, $domain = TRUE)
|
private function script_tag($js, $domain = TRUE)
|
||||||
{
|
{
|
||||||
$path = $this->MM->config->item('content_domain');
|
$path = CONTENT_DOMAIN;
|
||||||
$js_file = $path . "/js/" . $js . ".js";
|
$js_file = $path . "/js/" . $js . ".js";
|
||||||
|
|
||||||
if ($domain == FALSE)
|
if ($domain == FALSE)
|
||||||
@ -426,48 +429,6 @@ class Page extends JSObject
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
|
||||||
* Quick Build
|
|
||||||
*
|
|
||||||
* A function to make building pages faster
|
|
||||||
* @param mixed $view
|
|
||||||
* @param mixed $data
|
|
||||||
* @param bool $xhtml
|
|
||||||
* @param bool $html5
|
|
||||||
*/
|
|
||||||
public function quick_build($view, $data, $xhtml = TRUE, $html5 = TRUE)
|
|
||||||
{
|
|
||||||
//Set up header
|
|
||||||
if ($title != '')
|
|
||||||
{
|
|
||||||
$this->set_title($title);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->set_title($this->MM->config->item('default_title'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->build_header($xhtml, $html5);
|
|
||||||
|
|
||||||
//Load view(s)
|
|
||||||
if (is_array($view))
|
|
||||||
{
|
|
||||||
foreach ($view as $v)
|
|
||||||
{
|
|
||||||
$this->MM->load->view($v, $data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->MM->load->view($view, $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Create footer
|
|
||||||
$this->build_footer();
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set Message
|
* Set Message
|
||||||
*
|
*
|
||||||
@ -481,7 +442,7 @@ class Page extends JSObject
|
|||||||
$data['stat_class'] = $type;
|
$data['stat_class'] = $type;
|
||||||
$data['message'] = $message;
|
$data['message'] = $message;
|
||||||
|
|
||||||
$this->MM->load->view('message', $data);
|
$this->mm->load_view('message', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -494,8 +455,24 @@ class Page extends JSObject
|
|||||||
*/
|
*/
|
||||||
function redirect_303($url)
|
function redirect_303($url)
|
||||||
{
|
{
|
||||||
$this->MM->output->set_header("HTTP/1.1 303 See Other");
|
$this->mm->output->set_header("HTTP/1.1 303 See Other");
|
||||||
$this->MM->output->set_header("Location:" . $url);
|
$this->mm->output->set_header("Location:" . $url);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output
|
||||||
|
*
|
||||||
|
* Shortcut function for building a page
|
||||||
|
* @param string $view
|
||||||
|
* @param array $data
|
||||||
|
*/
|
||||||
|
function output($view, $data=array())
|
||||||
|
{
|
||||||
|
$this->build_header();
|
||||||
|
$this->mm->load_view($view, $data);
|
||||||
|
$this->build_footer();
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -513,4 +490,20 @@ class Page extends JSObject
|
|||||||
|
|
||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function _link_tag($params)
|
||||||
|
{
|
||||||
|
$string = "<link ";
|
||||||
|
|
||||||
|
foreach($params as $k => $v)
|
||||||
|
{
|
||||||
|
$string .= $k . '="'.$v.'" ';
|
||||||
|
}
|
||||||
|
|
||||||
|
$string .= " />";
|
||||||
|
|
||||||
|
return $string;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// End of page.php
|
||||||
|
Loading…
Reference in New Issue
Block a user