Thats all this really does, sees if you want to run an action, then runs said action and then gets the proper view method and sets the $content to the return of that. Let me know what you think or if there is any sort of security gap or whatnot.
Code: Select all
<?php
class content
{
const DEFAULT_VIEW_METHOD = 'main';
private $page;
private $configuration;
private $view_class;
private $controller_class;
private $content;
public function __construct($page, $configuration)
{
$this->page = $page;
$this->configuration = $configuration;
if (!array_key_exists($this->page, $this->configuration))
{
trigger_error('The page is undefined in the configuration', E_USER_ERROR);
}
$controller_method = $this->get_controller_method();
if (false !== $controller_method)
{
$this->load_controller_class();
}
$this->load_view_class();
}
private function load_controller_class()
{
if (
empty($this->configuration[$this->page]['controller']['location'])
||
!file_exists($this->configuration[$this->page]['controller']['location'])
)
{
return false;
}
require_once $this->configuration[$this->page]['controller']['location'];
$this->controller_class = singleton::get_object($this->configuration[$this->page]['controller']['class_name']);
$controller_method = $this->get_controller_method();
if (method_exists($this->controller_class, $controller_method))
{
$this->controller_class->$controller_method();
}
}
private function load_view_class()
{
if (!array_key_exists($this->page, $this->configuration))
{
trigger_error('The page is undefined in the configuration', E_USER_ERROR);
}
require_once $this->configuration[$this->page]['view']['location'];
$this->view_class = singleton::get_object($this->configuration[$this->page]['view']['class_name']);
if (is_object($this->controller_class) && $this->controller_class->get_view())
{
$view_method = $this->controller_class->get_view();
}
else
{
$view_method = $this->get_view_method();
}
if (method_exists($this->view_class, $view_method))
{
$this->content = $this->view_class->$view_method();
}
else
{
$this->content = $this->view_class->main();
}
}
private function get_view_method()
{
if (array_key_exists('view', $_GET))
{
return $_GET['view'];
}
else if (array_key_exists('view', $_POST))
{
$view = array_keys($_POST['view']);
return $view[0];
}
return self::DEFAULT_VIEW_METHOD;
}
private function get_controller_method()
{
if (array_key_exists('action', $_GET))
{
return $_GET['action'];
}
else if (array_key_exists('action', $_POST) && is_array($_POST['action']))
{
$action = array_keys($_POST['action']);
return $action[0];
}
return false;
}
private function build_header()
{
}
private function build_footer()
{
}
public function build_content()
{
$header = $this->build_header();
$footer = $this->build_footer();
return $header.$this->content.$footer;
}
}
?>