[puntoengine] r99 committed - New version 0.4.0 with the new controller system

1 view
Skip to first unread message

punto...@googlecode.com

unread,
Nov 2, 2011, 4:59:22 PM11/2/11
to punto...@googlegroups.com
Revision: 99
Author: jba...@gmail.com
Date: Wed Nov 2 13:58:37 2011
Log: New version 0.4.0 with the new controller system
http://code.google.com/p/puntoengine/source/detail?r=99

Added:
/trunk/puntoengine/template/example
/trunk/puntoengine/template/example/default.php
/trunk/puntoengine/template/example/master.php
/trunk/puntoengine/template/example/other.php
Modified:
/trunk/puntoengine/core/Kernel.php
/trunk/puntoengine/core/http/HttpController.php
/trunk/puntoengine/core/http/HttpResponse.php

=======================================
--- /dev/null
+++ /trunk/puntoengine/template/example/default.php Wed Nov 2 13:58:37 2011
@@ -0,0 +1,1 @@
+<h1>Default</h1>
=======================================
--- /dev/null
+++ /trunk/puntoengine/template/example/master.php Wed Nov 2 13:58:37 2011
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!-- MasterPage example demo -->
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">
+ <head profile="http://gmpg.org/xfn/11">
+ <!-- Include a single file same php include or load control same .Net
like ascx -->
+ </head>
+ <body>
+
+
+
+
+ <!-- Example of execute a php code function -->
+ <h1>test phpver: <?php echo phpversion(); ?></h1>
+ <!-- Example of placeholder -->
+ <php:place name="content" />
+
+ </body>
+</html>
=======================================
--- /dev/null
+++ /trunk/puntoengine/template/example/other.php Wed Nov 2 13:58:37 2011
@@ -0,0 +1,1 @@
+<h1>Other</h1>
=======================================
--- /trunk/puntoengine/core/Kernel.php Tue Aug 23 02:26:03 2011
+++ /trunk/puntoengine/core/Kernel.php Wed Nov 2 13:58:37 2011
@@ -6,11 +6,13 @@
* @author Juan Benavides Romero <juan.benav...@gmail.com>
* @since 0.1.1
*/
+Kernel::import('core');
Kernel::import('core.admin');
Kernel::import('core.exceptions');
Kernel::import('core.http');
Kernel::import('core.xml');
Kernel::import('core.plugin');
+Kernel::import('controllers');
Kernel::import('servlets');
Kernel::import('servlets.pepadmin');

@@ -30,7 +32,6 @@
* Kernel of the puntoengine application
* @category puntoengine
* @package core
- * @subpackage xml
* @author Juan Benavides Romero <juan.benav...@gmail.com>
* @since 0.1.1
*/
@@ -57,13 +58,42 @@
* @since 0.3
*/
private static $importList;
+
+
+ /**
+ * Instance of Kernel
+ * @var Kernel
+ */
+ private static $instance;


/**
* Version of the puntoengine kernel. Indicate the version of
puntoengine
* @since 0.3
*/
- const VERSION = '0.3';
+ const VERSION = '0.4.0';
+
+
+
+ /**
+ * Default constructor of kernel.
+ * A private constructor for the singleton pattern
+ * @return Kernel
+ */
+ private function __construct() {
+ return;
+ }//__construct
+
+
+
+ /**
+ * Return the active instance of kernel
+ * @return Kernel
+ */
+ public static function instance() {
+ return Kernel::$instance;
+ }//instance
+


/**
@@ -123,24 +153,20 @@
return;
}

- try {
- $servlet = Kernel::getServlet($servletName);
- } catch(XmlException $exception) {
- $servlet = Kernel::getServlet('/'.$servletName);
- }
-
+ $url = new Url($servletName);
+
+ $controller = Kernel::getController($url);
+
$requestArray = array();
$requestArray = array_merge($get, $post);

$request = new HttpRequest();
$request->setParams($requestArray);
$request->setSession($_SESSION);
-
- if(count($post) > 0) {
- $servlet->init($request, HttpMethods::POST);
- } else {
- $servlet->init($request, HttpMethods::GET);
- }
+
+ $response = $controller->getResponse();
+
+ $response->process($request);
}//process


@@ -234,7 +260,71 @@
public static function import($import) {
Kernel::$importList[] = $import;
}//import
-
+
+
+
+ /**
+ * Load a Controller by the name in the request. Search in controller
class
+ * and load the matched controller or throw a exception when don't
found a
+ * matched controller
+ * @param Url $url Url of request
+ * @return HttpController Controller who matched with the request
+ * @since 0.4
+ */
+ private static function getController(Url $url) {
+ $controllerName = null;
+ $methodName = null;
+
+ $controllers = $url->getControllers();
+
+ for($i = 0; $i < count($controllers); $i++) {
+ $tempController = array();
+ if(strpos($controllers[$i], '.')) {
+ $tempController = explode('.', $controllers[$i]);
+ $tempController[0] = ucfirst($tempController[0]);
+
+ if(class_exists($tempController[0].'Controller', true) &&
is_subclass_of($tempController[0].'Controller', 'HttpController')) {
+ if(method_exists($tempController[0].'Controller',
$tempController[1].'Action')) {
+ $controllerName = $tempController[0];
+ $methodName = $tempController[1];
+ }
+ }
+ } else {
+ $tempController[0] = ucfirst($controllers[$i]);
+
+ if(class_exists($tempController[0].'Controller', true) &&
is_subclass_of($tempController[0].'Controller', 'HttpController')) {
+ $controllerName = $tempController[0];
+ $methodName = 'default';
+ }
+ }
+
+ if($controllerName !== null && $methodName !== null) {
+ $i = count($controllers);
+ }
+ }
+
+
+ if($controllerName === null && $methodName === null) {
+ //TODO: catch error
+ } else {
+ $controllerClass = $controllerName.'Controller';
+ $methodAction = $methodName.'Action';
+
+ $controller = new $controllerClass();
+
+ $response = new HttpResponse();
+ $response->setController($controllerName);
+ $response->setAction($methodName);
+ $response->setMasterPage($controller->getMasterPage());
+
+ $controller->setResponse($response);
+ $controller->$methodAction();
+ }
+
+ return $controller;
+ }//getController
+
+

/**
* Load a Servlet by the name in the request. Search in configuration
xml
@@ -243,8 +333,45 @@
* @param string $servletName Name of request servlet to load
* @return HttpServlet Servlet who matched with the request
* @since 0.3
+ * @deprecated Since version 0.4.0 by getController
*/
private static function getServlet($servletName) {
+ $url = new Url($servletName);
+
+ echo '<pre>';
+ print_r($url);
+ print_r($url->getControllers());
+
+ echo json_encode($url->getControllers());
+
+ $controlers = $url->getControllers();
+
+ for($i = 0; $i < count($controlers); $i++) {
+ $tempController = array();
+ if(strpos($controlers[$i], '.')) {
+ $tempController = explode('.', $controlers[$i]);
+ print_r($tempController);
+ //if(class_exists($tempController[0], true) && method_exists($object,
$method_name))
+ if(class_exists($tempController[0].'Controller', true) &&
is_subclass_of($tempController[0].'Controller', 'HttpController')) {
+ if(method_exists($tempController[0].'Controller',
$tempController[1].'Action')) {
+ echo 'si method';
+ } else {
+ echo 'no method';
+ }
+ }
+ } else {
+ $tempController[0] = $controlers[$i];
+
+ if(class_exists($tempController[0].'Controller', true)) {
+ echo 'existe';
+ }
+ }
+ }
+
+ echo '</pre>';
+ die;
+
+
$document = new XmlDocument();

$document->loadXmlFile('/config/web.xml');
@@ -274,8 +401,9 @@

return $servlet;
}//getServlet
-
-
+
+
+
/**
* Catch a error and manage it with a internal exception manager
* @param int $code Error code
=======================================
--- /trunk/puntoengine/core/http/HttpController.php Tue Nov 1 14:27:07 2011
+++ /trunk/puntoengine/core/http/HttpController.php Wed Nov 2 13:58:37 2011
@@ -30,6 +30,15 @@

+ /**
+ * Masterpage for the request
+ * @var string
+ * @since 0.4.0
+ */
+ protected $master;
+
+
+
/**
* Return the request response
* @return HttpResponse Request response
@@ -49,5 +58,27 @@
public function setResponse(HttpResponse $response) {
$this->response = $response;
}//setResponse
+
+
+
+ /**
+ * Return the master page
+ * @return string Master page
+ * @since 0.4.0
+ */
+ public function getMasterPage() {
+ return $this->master;
+ }//getMasterPage
+
+
+
+ /**
+ * Set the master page
+ * @param string Master page
+ * @since 0.4.0
+ */
+ public function setMasterPage($masterpage) {
+ $this->master = $masterpage;
+ }//setMasterPage
}//HttpController
?>
=======================================
--- /trunk/puntoengine/core/http/HttpResponse.php Tue Nov 1 14:27:07 2011
+++ /trunk/puntoengine/core/http/HttpResponse.php Wed Nov 2 13:58:37 2011
@@ -22,6 +22,7 @@
/**
* Controller name
* @var string
+ * @since 0.4.0
*/
protected $controller;

@@ -29,13 +30,24 @@
/**
* Action name
* @var string
+ * @since 0.4.0
*/
protected $action;

+ /**
+ * Master page
+ * @var string
+ * @since 0.4.0
+ */
+ protected $master;
+
+
+
/**
* Default constructor
+ * @since 0.4.0
*/
public function __construct() {
}//__construct
@@ -45,6 +57,7 @@
/**
* Return the controller name
* @return string Controller name
+ * @since 0.4.0
*/
public function getController() {
return $this->controller;
@@ -55,9 +68,10 @@
/**
* Set the controller name
* @param string $controller Controller name
+ * @since 0.4.0
*/
public function setController($controller) {
- $this->controller = $controller;
+ $this->controller = strtolower($controller);
}//setController


@@ -65,6 +79,7 @@
/**
* Return the action name
* @return string Action name
+ * @since 0.4.0
*/
public function getAction() {
return $this->action;
@@ -75,19 +90,110 @@
/**
* Set the action name
* @param string $action Action name
+ * @since 0.4.0
*/
public function setAction($action) {
- $this->action = $action;
+ $this->action = strtolower($action);
}//setAction

+ /**
+ * Return the master page
+ * @return string Master page
+ * @since 0.4.0
+ */
+ public function getMasterPage() {
+ return $this->master;
+ }//getMasterPage
+
+
+
+ /**
+ * Set the master page
+ * @param string Master page
+ * @since 0.4.0
+ */
+ public function setMasterPage($masterpage) {
+ $this->master = $masterpage;
+ }//setMasterPage
+
+
+
/**
* Process the response and draw or redirect, set the cookies, etc.
+ * @param HttpRequest $request Request page params
* @since 0.4.0
*/
- public function process() {
- throw new NotImplementedException(__CLASS__ . '::' . __METHOD__);
+ public function process(HttpRequest $request) {
+ ob_start();
+ ob_clean();
+
+ $content = $this->processView($request);
+
+ if($this->master != null) {
+ $master = $this->processMasterPage($request, $content);
+ $content = $master;
+ }
+
+ echo $content;
+
+ if(ob_get_length() != 0) {
+ ob_end_flush();
+ }
}//process
+
+
+
+ /**
+ * Process the masterpge and the content of the page loading the
dinamic content
+ * @param HttpRequest $request Request page params
+ * @since 0.4.0
+ */
+ protected function processMasterPage(HttpRequest $request, $content) {
+ $master = $this->addTemplate($this->master, $request);
+ preg_match('/<php:place\s*name="content"\s*\/>/', $master, $match);
+
+ $master = str_replace($match[0], $content, $master);
+
+ return $master;
+ }//processMasterPage
+
+
+
+ /**
+ * Process the view of the content of the page loading the dinamic
content
+ * @param HttpRequest $request Request page params
+ * @since 0.4.0
+ */
+ protected function processView(HttpRequest $request) {
+ $content =
$this->addTemplate('/template/'.$this->controller.'/'.$this->action.'.php',
$request);
+
+ return $content;
+ }//processView
+
+
+
+ /**
+ * Add a new template, same a addDispatcher but without static access
+ * @param string $template Template path
+ * @param HttpRequest $request Page request
+ * @return string Template content
+ * @since 0.4.0
+ */
+ protected function addTemplate($template, HttpRequest $request) {
+ if(file_exists(Kernel::getPath().'/template/'.$template)) {
+ include(Kernel::getPath().'/template/'.$template);
+ } elseif(file_exists(Kernel::getPath().$template)) {
+ include(Kernel::getPath().$template);
+ } else {
+ throw new IOException(ExceptionCodes::IO_NOTFOUND, $template);
+ }
+
+ $out = ob_get_contents();
+ ob_clean();
+
+ return $out;
+ }//addTemplate
}//HttpResponse
?>

Reply all
Reply to author
Forward
0 new messages