commit 2185021e5bdeb048e0bea4bdee3052a061b1805b
parent 1eb07945a7faa9c42a07eda405b0b111004c75df
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Wed, 4 Aug 2010 04:00:27 +0200
Classe Page, qui stocke les données à renvoyer (vue, redirect, sendfile).
- Remplacement de tous les redirect() en new Page(..., "redirect");
- Remplacement de tous les Module::page() en new Page(...);
- Remplacement de tous les sendfile bizarres en new Page(..., "sendfile");
Diffstat:
15 files changed, 103 insertions(+), 55 deletions(-)
diff --git a/__cms__/code/chemin/chemin.php b/__cms__/code/chemin/chemin.php
@@ -46,14 +46,14 @@ class Chemin {
// Invariant de sécurité : la chaîne renvoyée ne commence ni ne
// termine par '/'.
- public function get() {
- return '/'.join($this->segments, '/');
+ public function get($slash_debut = false) {
+ return ($slash_debut ? '/' : '') . join($this->segments, '/');
}
- public function get_url() {
+ public function get_url($fin = "") {
// Config::get("url_base") DOIT se terminer par '/', tel que spécifié
// dans config.php.
- return Config::get("url_base") . $this->get();
+ return Config::get("url_base") . $this->get() . '/' . $fin;
}
public function get_fs_stockage() {
diff --git a/__cms__/code/cms/cms.php b/__cms__/code/cms/cms.php
@@ -28,12 +28,7 @@ class CMS {
$action = $paramètres["action"];
$ret = Modules::action($chemin, $action, $paramètres);
- // TODO
- // if ($ret est une page) {
- echo Squelette::enrober($ret);
- // } else if ($ret est un redirect) {
- // } else if ($ret est un raw) {
- // }
+ $ret->envoyer();
}
}
diff --git a/__cms__/code/cms/include.php b/__cms__/code/cms/include.php
@@ -2,5 +2,6 @@
require_once(dirname(__FILE__) . "/configuration.php");
require_once(dirname(__FILE__) . "/util.php");
+require_once(dirname(__FILE__) . "/page.php");
?>
\ No newline at end of file
diff --git a/__cms__/code/cms/page.php b/__cms__/code/cms/page.php
@@ -0,0 +1,53 @@
+<?php
+
+class Page {
+ public $contenu = "";
+ public $titre = "";
+ public $sendfile_chemin = "";
+ public $sendfile_prop = "";
+ public $redirect_destination = "";
+ public $type = "page";
+
+ public function __construct($a, $b, $type = "page") {
+ if ($type == "page") {
+ $this->set_page($a, $b);
+ } else if ($type == "sendfile") {
+ $this->set_sendfile($a, $b);
+ } else if ($type == "redirect") {
+ $this->set_redirect($a, $b);
+ }
+ }
+
+ public function set_page($contenu, $titre) {
+ $this->contenu = $contenu;
+ $this->titre = $titre;
+ $this->type = "page";
+ }
+
+ public function set_sendfile($chemin, $prop) {
+ $this->sendfile_chemin = $chemin;
+ $this->sendfile_prop = $prop;
+ $this->type = "sendfile";
+ }
+
+ public function set_redirect($destination, $params = "") {
+ if (!is_string($destination)) $destination = $destination->get_url();
+ $this->redirect_destination = $destination . $params;
+ $this->type = "redirect";
+ }
+
+ public function envoyer() {
+ // Yeeeeeeeeeeeeeeeeeeeeeeha ! Et on envoie !
+ if ($this->type == "page") {
+ Squelette::enrober($this);
+ } else if ($this->type == "sendfile") {
+ Stockage::get_prop_sendfile($this->sendfile_chemin, $this->sendfile_prop);
+ } else if ($this->type == "redirect") {
+ echo "TODO : Redirection vers <a href=\""
+ . $this->redirect_destination . "\">"
+ . $this->redirect_destination . "</a>";
+ }
+ }
+}
+
+?>
+\ No newline at end of file
diff --git a/__cms__/code/modules/admin/couleurs.php b/__cms__/code/modules/admin/couleurs.php
@@ -3,7 +3,7 @@
class AdminCouleurs {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
} else {
if (isset($paramètres["Couleur_A"])) {
// Stocker couleur A
diff --git a/__cms__/code/modules/admin/permissions.php b/__cms__/code/modules/admin/permissions.php
@@ -4,7 +4,7 @@ class AdminPermissions {
function action($chemin, $action, $paramètres) {
$singleton = new Chemin("/admin/permissions/");
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
} else {
if (isset($paramètres["regles"])) {
Stockage::set_prop($singleton, "regles", $paramètres["regles"]);
diff --git a/__cms__/code/modules/admin/utilisateurs.php b/__cms__/code/modules/admin/utilisateurs.php
@@ -4,7 +4,7 @@ class AdminUtilisateurs {
public static function action($chemin, $action, $paramètres) {
$singleton = new Chemin("/admin/utilisateurs/");
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
// TODO ...
// Solution A (propre) :
diff --git a/__cms__/code/modules/forum/forum-index.php b/__cms__/code/modules/forum/forum-index.php
@@ -3,13 +3,13 @@
class ForumIndex {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
// TODO : faut-il demander à avoir directement le nom du nouveau sujet ?
// TODO : quel est le propriétaire du nouveau sujet ?
$np = Stockage::nouvelle_page($chemin, "Nouveau sujet", "forum-sujet");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
- return redirect($np);
+ return new Page($np, '', "redirect");
} else {
if (isset($paramètres["vue"])) {
self::vue($chemin, $paramètres["vue"]);
diff --git a/__cms__/code/modules/forum/forum-message.php b/__cms__/code/modules/forum/forum-message.php
@@ -2,10 +2,10 @@
function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin);
- return redirect($chemin->parent());
+ return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["message"])) {
Stockage::set_prop($chemin, "message", $paramètres["message"]);
diff --git a/__cms__/code/modules/forum/forum-sujet.php b/__cms__/code/modules/forum/forum-sujet.php
@@ -3,7 +3,7 @@
class ForumSujet {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
// SECURITE : On ne doit PAS pouvoir modifier dernier_numero arbitrairement
$numéro_message = 1 + Stockage::get_prop($chemin, "dernier_numero");
@@ -11,15 +11,15 @@ class ForumSujet {
$np = Stockage::nouvelle_page($chemin, "" . $numéro_message, "forum-message");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
- return redirect($chemin, "#message" . $numéro_message);
+ return new Page($chemin, "#message" . $numéro_message, "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin);
- return redirect($chemin->parent());
+ return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($paramètres["titre"]);
- // TODO : peut-être redirect($chemin) ?
+ // TODO : peut-être new Page($chemin, '', "redirect") ?
}
if (isset($paramètres["vue"])) {
diff --git a/__cms__/code/modules/galerie/galerie-evenement.php b/__cms__/code/modules/galerie/galerie-evenement.php
@@ -3,28 +3,28 @@
class GalerieÉvènement {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
$np = Stockage::nouvelle_page($chemin, "Nouvelle photo", "galerie-photo");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
- return redirect($np);
+ return new Page($np, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin);
- return redirect($chemin->parent());
+ return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($paramètres["titre"]);
- // TODO : peut-être redirect($chemin) ?
+ // TODO : peut-être new Page($chemin, '', "redirect") ?
}
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
if (isset($paramètres["vue"])) {
- self::vue($chemin, $paramètres["vue"]);
+ return self::vue($chemin, $paramètres["vue"]);
} else {
- self::vue($chemin);
+ return self::vue($chemin);
}
}
}
@@ -53,7 +53,8 @@ class GalerieÉvènement {
}
$ret .= '<ul class="galerie evenement">';
foreach (Stockage::liste_enfants($chemin) as $k) {
- $ret .= '<li><a href="' . $k->get_url() . '">' . Modules::vue($k, 'miniature') . '</a></li>'; // TODO : escape l'url !
+ // TODO : escape l'url !
+ $ret .= '<li><a href="' . $k->get_url() . '">' . Modules::vue($k, 'miniature')->contenu . '</a></li>';
}
$ret .= '</ul>';
} else if ($vue == "miniature") {
@@ -62,7 +63,7 @@ class GalerieÉvènement {
$enfants = Stockage::liste_enfants($chemin);
if (isset($enfants[0])) $ret = Modules::vue($enfants[0], 'miniature')->contenu;
}
- return Modules::page($ret, Stockage::get_prop($chemin, "titre"));
+ return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
diff --git a/__cms__/code/modules/galerie/galerie-index.php b/__cms__/code/modules/galerie/galerie-index.php
@@ -3,19 +3,19 @@
class GalerieIndex {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
$np = Stockage::nouvelle_page($chemin, "Nouvelle période", "galerie-periode");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
- return redirect($np);
+ return new Page($np, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin);
- return redirect($chemin->parent());
+ return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($paramètres["titre"]);
- // TODO : peut-être redirect($chemin) ?
+ // TODO : peut-être new Page($chemin, '', "redirect") ?
}
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
@@ -59,7 +59,7 @@ class GalerieIndex {
}
$ret .= '</ul>';
}
- return Modules::page($ret, Stockage::get_prop($chemin, "titre"));
+ return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
diff --git a/__cms__/code/modules/galerie/galerie-periode.php b/__cms__/code/modules/galerie/galerie-periode.php
@@ -3,28 +3,28 @@
class GaleriePériode {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
$np = Stockage::nouvelle_page($chemin, "Nouvel évènement", "galerie-periode");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
- return redirect($np);
+ return new Page($np, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin);
- return redirect($chemin->parent());
+ return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($paramètres["titre"]);
- // TODO : peut-être redirect($chemin) ?
+ // TODO : peut-être new Page($chemin, '', "redirect") ?
}
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
if (isset($paramètres["vue"])) {
- self::vue($chemin, $paramètres["vue"]);
+ return self::vue($chemin, $paramètres["vue"]);
} else {
- self::vue($chemin);
+ return self::vue($chemin);
}
}
}
@@ -53,7 +53,8 @@ class GaleriePériode {
}
$ret .= '<ul class="galerie période">';
foreach (Stockage::liste_enfants($chemin) as $k) {
- $ret .= '<li><a href="' . $k->get_url() . '">' . Modules::vue($k, 'miniature') . '</a></li>'; // TODO : escape l'url !
+ // TODO : escape l'url !
+ $ret .= '<li><a href="' . $k->get_url() . '">' . Modules::vue($k, 'miniature')->contenu . '</a></li>';
}
$ret .= '</ul>';
} else if ($vue == "miniature") {
@@ -62,7 +63,7 @@ class GaleriePériode {
$enfants = Stockage::liste_enfants($chemin);
if (isset($enfants[0])) $ret = Modules::vue($enfants[0], 'miniature')->contenu;
}
- return Modules::page($ret, Stockage::get_prop($chemin, "titre"));
+ return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
diff --git a/__cms__/code/modules/galerie/galerie-photo.php b/__cms__/code/modules/galerie/galerie-photo.php
@@ -3,10 +3,10 @@
class GaleriePhoto {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
- return redirect($chemin);
+ return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin);
- return redirect($chemin->parent());
+ return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["fichier_image"])) {
// redimensionner l'image avec gd, stocker la miniature dans
@@ -18,16 +18,16 @@ class GaleriePhoto {
/* if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($paramètres["titre"]);
- // TODO : peut-être redirect($chemin) ?
+ // TODO : peut-être new Page($chemin, '', "redirect") ?
}*/
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
if (isset($paramètres["vue"])) {
- self::vue($chemin, $paramètres["vue"]);
+ return self::vue($chemin, $paramètres["vue"]);
} else {
- self::vue($chemin);
+ return self::vue($chemin);
}
}
}
@@ -45,15 +45,15 @@ class GaleriePhoto {
$ret .= '<img src="' . $chemin->get_url("?vue=image") . '"></img>';
$ret .= affichage_texte_enrichi(Stockage::get_prop($chemin, "message"));
}
- return Modules::page($ret, "Photo");
+ return new Page($ret, Stockage::get_prop($chemin, "titre"));
} else if ($vue == "miniature") {
$ret = '<img src="' . $chemin->get_url("?vue=image_mini") . '"></img>';
- return Modules::page($ret, "Photo");
+ return new Page($ret, Stockage::get_prop($chemin, "titre"));
} else if ($vue == "image") {
- return Modules::raw(Stockage::get_prop_sendfile("image"));
+ return new Page($chemin, "image", "sendfile");
} else if ($vue == "image_mini") {
- return Modules::raw(Stockage::get_prop_sendfile("image_mini"));
+ return new Page($chemin, "image_mini", "sendfile");
}
}
}
diff --git a/__cms__/code/modules/modules.php b/__cms__/code/modules/modules.php
@@ -33,10 +33,6 @@ class Modules {
if ($module === false) return self::page(false, "Erreur");
return call_user_func(array($module["classe"], "vue"), $chemin, $vue);
}
-
- public static function page($contenu, $titre) {
- return (object)array("contenu" => $contenu, "titre" => $titre);
- }
}
?>
\ No newline at end of file