summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-03-22 17:56:07 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-03-22 17:56:07 +0100
commit5081ffaf39699398f83be97e47b72444e5bcd5d1 (patch)
treecf07bc40c955510785198ed74bbc931ee209439b /lib
parent69deb27f654a0d5d5e6fe77733d56a9c4fd29e03 (diff)
Minz: remove one layer of ob_ (experimental)
https://github.com/marienfressinaud/FreshRSS/issues/303#issuecomment-38351311 https://github.com/marienfressinaud/FreshRSS/issues/163 * Remove Minz_Response (not needed anymore) * Move Minz_Request::reseted to Minz_Dispatcher::reset()
Diffstat (limited to 'lib')
-rw-r--r--lib/Minz/Dispatcher.php73
-rw-r--r--lib/Minz/Error.php32
-rw-r--r--lib/Minz/FrontController.php16
-rw-r--r--lib/Minz/Request.php5
-rw-r--r--lib/Minz/Response.php60
-rw-r--r--lib/Minz/View.php10
-rw-r--r--lib/lib_rss.php2
7 files changed, 69 insertions, 129 deletions
diff --git a/lib/Minz/Dispatcher.php b/lib/Minz/Dispatcher.php
index 819f4cd5c..ca1fd1f5c 100644
--- a/lib/Minz/Dispatcher.php
+++ b/lib/Minz/Dispatcher.php
@@ -14,6 +14,7 @@ class Minz_Dispatcher {
/* singleton */
private static $instance = null;
+ private static $needsReset;
private $router;
private $controller;
@@ -40,44 +41,36 @@ class Minz_Dispatcher {
* Remplit le body de Response à partir de la Vue
* @exception Minz_Exception
*/
- public function run ($ob = true) {
- // Le ob_start est dupliqué : sans ça il y a un bug sous Firefox
- // ici on l'appelle avec 'ob_gzhandler', après sans.
- // Vraisemblablement la compression fonctionne mais c'est sale
- // J'ignore les effets de bord :(
- if ($ob) {
- ob_start ('ob_gzhandler');
- }
-
- $text = ''; //TODO: Clean this code
- while (Minz_Request::$reseted) {
- Minz_Request::$reseted = false;
+ public function run () {
+ do {
+ self::$needsReset = false;
try {
$this->createController ('FreshRSS_' . Minz_Request::controllerName () . '_Controller');
$this->controller->init ();
$this->controller->firstAction ();
- $this->launchAction (
- Minz_Request::actionName ()
- . 'Action'
- );
+ if (!self::$needsReset) {
+ $this->launchAction (
+ Minz_Request::actionName ()
+ . 'Action'
+ );
+ }
$this->controller->lastAction ();
- if (!Minz_Request::$reseted) {
- if ($ob) {
- ob_start ();
- }
- $this->controller->view ()->build ();
- if ($ob) {
- $text = ob_get_clean();
- }
+ if (!self::$needsReset) {
+ echo $this->controller->view ()->build ();
}
} catch (Minz_Exception $e) {
throw $e;
}
- }
+ } while (self::$needsReset);
+ }
- Minz_Response::setBody ($text);
+ /**
+ * Informe le contrôleur qu'il doit recommancer car la requête a été modifiée
+ */
+ public static function reset() {
+ self::$needsReset = true;
}
/**
@@ -114,21 +107,19 @@ class Minz_Dispatcher {
* le controller
*/
private function launchAction ($action_name) {
- if (!Minz_Request::$reseted) {
- if (!is_callable (array (
- $this->controller,
- $action_name
- ))) {
- throw new Minz_ActionException (
- get_class ($this->controller),
- $action_name,
- Minz_Exception::ERROR
- );
- }
- call_user_func (array (
- $this->controller,
- $action_name
- ));
+ if (!is_callable (array (
+ $this->controller,
+ $action_name
+ ))) {
+ throw new Minz_ActionException (
+ get_class ($this->controller),
+ $action_name,
+ Minz_Exception::ERROR
+ );
}
+ call_user_func (array (
+ $this->controller,
+ $action_name
+ ));
}
}
diff --git a/lib/Minz/Error.php b/lib/Minz/Error.php
index 337ab6c0a..c8222a430 100644
--- a/lib/Minz/Error.php
+++ b/lib/Minz/Error.php
@@ -23,13 +23,32 @@ class Minz_Error {
$logs = self::processLogs ($logs);
$error_filename = APP_PATH . '/Controllers/errorController.php';
+ switch ($code) {
+ case 200 :
+ header('HTTP/1.1 200 OK');
+ break;
+ case 403 :
+ header('HTTP/1.1 403 Forbidden');
+ break;
+ case 404 :
+ header('HTTP/1.1 404 Not Found');
+ break;
+ case 500 :
+ header('HTTP/1.1 500 Internal Server Error');
+ break;
+ case 503 :
+ header('HTTP/1.1 503 Service Unavailable');
+ break;
+ default :
+ header('HTTP/1.1 500 Internal Server Error');
+ }
+
if (file_exists ($error_filename)) {
$params = array (
'code' => $code,
'logs' => $logs
);
- Minz_Response::setHeader ($code);
if ($redirect) {
Minz_Request::forward (array (
'c' => 'error'
@@ -41,19 +60,16 @@ class Minz_Error {
), false);
}
} else {
- $text = '<h1>An error occured</h1>'."\n";
+ echo '<h1>An error occured</h1>' . "\n";
if (!empty ($logs)) {
- $text .= '<ul>'."\n";
+ echo '<ul>' . "\n";
foreach ($logs as $log) {
- $text .= '<li>' . $log . '</li>'."\n";
+ echo '<li>' . $log . '</li>' . "\n";
}
- $text .= '</ul>'."\n";
+ echo '</ul>' . "\n";
}
- Minz_Response::setHeader ($code);
- Minz_Response::setBody ($text);
- Minz_Response::send ();
exit ();
}
}
diff --git a/lib/Minz/FrontController.php b/lib/Minz/FrontController.php
index 80eda8877..3e50db1cf 100644
--- a/lib/Minz/FrontController.php
+++ b/lib/Minz/FrontController.php
@@ -26,8 +26,6 @@ class Minz_FrontController {
protected $dispatcher;
protected $router;
- private $useOb = true;
-
/**
* Constructeur
* Initialise le router et le dispatcher
@@ -63,8 +61,7 @@ class Minz_FrontController {
*/
public function run () {
try {
- $this->dispatcher->run ($this->useOb);
- Minz_Response::send ();
+ $this->dispatcher->run();
} catch (Minz_Exception $e) {
try {
Minz_Log::record ($e->getMessage (), Minz_Log::ERROR);
@@ -96,15 +93,4 @@ class Minz_FrontController {
}
exit ('### Application problem ###<br />'."\n".$txt);
}
-
- public function useOb() {
- return $this->useOb;
- }
-
- /**
- * Use ob_start('ob_gzhandler') or not.
- */
- public function _useOb($ob) {
- return $this->useOb = (bool)$ob;
- }
}
diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php
index 282d47a77..7e3c59990 100644
--- a/lib/Minz/Request.php
+++ b/lib/Minz/Request.php
@@ -15,8 +15,6 @@ class Minz_Request {
private static $default_controller_name = 'index';
private static $default_action_name = 'index';
- public static $reseted = true;
-
/**
* Getteurs
*/
@@ -137,14 +135,13 @@ class Minz_Request {
header ('Location: ' . Minz_Url::display ($url, 'php'));
exit ();
} else {
- self::$reseted = true;
-
self::_controllerName ($url['c']);
self::_actionName ($url['a']);
self::_params (array_merge (
self::$params,
$url['params']
));
+ Minz_Dispatcher::reset();
}
}
diff --git a/lib/Minz/Response.php b/lib/Minz/Response.php
deleted file mode 100644
index f8ea3d946..000000000
--- a/lib/Minz/Response.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-/**
- * MINZ - Copyright 2011 Marien Fressinaud
- * Sous licence AGPL3 <http://www.gnu.org/licenses/>
-*/
-
-/**
- * Response représente la requête http renvoyée à l'utilisateur
- */
-class Minz_Response {
- private static $header = 'HTTP/1.0 200 OK';
- private static $body = '';
-
- /**
- * Mets à jour le body de la Response
- * @param $text le texte à incorporer dans le body
- */
- public static function setBody ($text) {
- self::$body = $text;
- }
-
- /**
- * Mets à jour le header de la Response
- * @param $code le code HTTP, valeurs possibles
- * - 200 (OK)
- * - 403 (Forbidden)
- * - 404 (Forbidden)
- * - 500 (Forbidden) -> par défaut si $code erroné
- * - 503 (Forbidden)
- */
- public static function setHeader ($code) {
- switch ($code) {
- case 200 :
- self::$header = 'HTTP/1.0 200 OK';
- break;
- case 403 :
- self::$header = 'HTTP/1.0 403 Forbidden';
- break;
- case 404 :
- self::$header = 'HTTP/1.0 404 Not Found';
- break;
- case 500 :
- self::$header = 'HTTP/1.0 500 Internal Server Error';
- break;
- case 503 :
- self::$header = 'HTTP/1.0 503 Service Unavailable';
- break;
- default :
- self::$header = 'HTTP/1.0 500 Internal Server Error';
- }
- }
-
- /**
- * Envoie la Response à l'utilisateur
- */
- public static function send () {
- header (self::$header);
- echo self::$body;
- }
-}
diff --git a/lib/Minz/View.php b/lib/Minz/View.php
index e170bd406..00d9a1a6d 100644
--- a/lib/Minz/View.php
+++ b/lib/Minz/View.php
@@ -103,6 +103,16 @@ class Minz_View {
}
/**
+ * Retourne renderHelper() dans une chaîne
+ * @param $helper l'élément à traîter
+ */
+ public function helperToString($helper) {
+ ob_start();
+ renderHelper($helper);
+ return ob_get_clean();
+ }
+
+ /**
* Permet de choisir si on souhaite utiliser le layout
* @param $use true si on souhaite utiliser le layout, false sinon
*/
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 83edbf015..2077fe63f 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -27,7 +27,7 @@ function classAutoloader($class) {
include(APP_PATH . '/Models/' . $components[1] . '.php');
return;
case 3: //Controllers, Exceptions
- include(APP_PATH . '/' . $components[2] . 's/' . $components[1] . $components[2] . '.php');
+ @include(APP_PATH . '/' . $components[2] . 's/' . $components[1] . $components[2] . '.php');
return;
}
} elseif (strpos($class, 'Minz') === 0) {