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");
This commit is contained in:
Georges Dupéron 2010-08-04 04:00:27 +02:00
parent 1eb07945a7
commit 2185021e5b
15 changed files with 102 additions and 55 deletions

View File

@ -46,14 +46,14 @@ class Chemin {
// Invariant de sécurité : la chaîne renvoyée ne commence ni ne // Invariant de sécurité : la chaîne renvoyée ne commence ni ne
// termine par '/'. // termine par '/'.
public function get() { public function get($slash_debut = false) {
return '/'.join($this->segments, '/'); 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é // Config::get("url_base") DOIT se terminer par '/', tel que spécifié
// dans config.php. // dans config.php.
return Config::get("url_base") . $this->get(); return Config::get("url_base") . $this->get() . '/' . $fin;
} }
public function get_fs_stockage() { public function get_fs_stockage() {

View File

@ -28,12 +28,7 @@ class CMS {
$action = $paramètres["action"]; $action = $paramètres["action"];
$ret = Modules::action($chemin, $action, $paramètres); $ret = Modules::action($chemin, $action, $paramètres);
// TODO $ret->envoyer();
// if ($ret est une page) {
echo Squelette::enrober($ret);
// } else if ($ret est un redirect) {
// } else if ($ret est un raw) {
// }
} }
} }

View File

@ -2,5 +2,6 @@
require_once(dirname(__FILE__) . "/configuration.php"); require_once(dirname(__FILE__) . "/configuration.php");
require_once(dirname(__FILE__) . "/util.php"); require_once(dirname(__FILE__) . "/util.php");
require_once(dirname(__FILE__) . "/page.php");
?> ?>

53
__cms__/code/cms/page.php Normal file
View File

@ -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>";
}
}
}
?>

View File

@ -3,7 +3,7 @@
class AdminCouleurs { class AdminCouleurs {
public static function action($chemin, $action, $paramètres) { public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
} else { } else {
if (isset($paramètres["Couleur_A"])) { if (isset($paramètres["Couleur_A"])) {
// Stocker couleur A // Stocker couleur A

View File

@ -4,7 +4,7 @@ class AdminPermissions {
function action($chemin, $action, $paramètres) { function action($chemin, $action, $paramètres) {
$singleton = new Chemin("/admin/permissions/"); $singleton = new Chemin("/admin/permissions/");
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
} else { } else {
if (isset($paramètres["regles"])) { if (isset($paramètres["regles"])) {
Stockage::set_prop($singleton, "regles", $paramètres["regles"]); Stockage::set_prop($singleton, "regles", $paramètres["regles"]);

View File

@ -4,7 +4,7 @@ class AdminUtilisateurs {
public static function action($chemin, $action, $paramètres) { public static function action($chemin, $action, $paramètres) {
$singleton = new Chemin("/admin/utilisateurs/"); $singleton = new Chemin("/admin/utilisateurs/");
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
// TODO ... // TODO ...
// Solution A (propre) : // Solution A (propre) :

View File

@ -3,13 +3,13 @@
class ForumIndex { class ForumIndex {
public static function action($chemin, $action, $paramètres) { public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") { } else if ($action == "nouvelle_page") {
// TODO : faut-il demander à avoir directement le nom du nouveau sujet ? // TODO : faut-il demander à avoir directement le nom du nouveau sujet ?
// TODO : quel est le propriétaire du nouveau sujet ? // TODO : quel est le propriétaire du nouveau sujet ?
$np = Stockage::nouvelle_page($chemin, "Nouveau sujet", "forum-sujet"); $np = Stockage::nouvelle_page($chemin, "Nouveau sujet", "forum-sujet");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur()); Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
return redirect($np); return new Page($np, '', "redirect");
} else { } else {
if (isset($paramètres["vue"])) { if (isset($paramètres["vue"])) {
self::vue($chemin, $paramètres["vue"]); self::vue($chemin, $paramètres["vue"]);

View File

@ -2,10 +2,10 @@
function action($chemin, $action, $paramètres) { function action($chemin, $action, $paramètres) {
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") { } else if ($action == "supprimer") {
Stockage::supprimer($chemin); Stockage::supprimer($chemin);
return redirect($chemin->parent()); return new Page($chemin->parent(), '', "redirect");
} else { } else {
if (isset($paramètres["message"])) { if (isset($paramètres["message"])) {
Stockage::set_prop($chemin, "message", $paramètres["message"]); Stockage::set_prop($chemin, "message", $paramètres["message"]);

View File

@ -3,7 +3,7 @@
class ForumSujet { class ForumSujet {
public static function action($chemin, $action, $paramètres) { public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") { } else if ($action == "nouvelle_page") {
// SECURITE : On ne doit PAS pouvoir modifier dernier_numero arbitrairement // SECURITE : On ne doit PAS pouvoir modifier dernier_numero arbitrairement
$numéro_message = 1 + Stockage::get_prop($chemin, "dernier_numero"); $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"); $np = Stockage::nouvelle_page($chemin, "" . $numéro_message, "forum-message");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur()); 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") { } else if ($action == "supprimer") {
Stockage::supprimer($chemin); Stockage::supprimer($chemin);
return redirect($chemin->parent()); return new Page($chemin->parent(), '', "redirect");
} else { } else {
if (isset($paramètres["titre"])) { if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]); Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($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"])) { if (isset($paramètres["vue"])) {

View File

@ -3,28 +3,28 @@
class GalerieÉvènement { class GalerieÉvènement {
public static function action($chemin, $action, $paramètres) { public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") { } else if ($action == "nouvelle_page") {
$np = Stockage::nouvelle_page($chemin, "Nouvelle photo", "galerie-photo"); $np = Stockage::nouvelle_page($chemin, "Nouvelle photo", "galerie-photo");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur()); Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
return redirect($np); return new Page($np, '', "redirect");
} else if ($action == "supprimer") { } else if ($action == "supprimer") {
Stockage::supprimer($chemin); Stockage::supprimer($chemin);
return redirect($chemin->parent()); return new Page($chemin->parent(), '', "redirect");
} else { } else {
if (isset($paramètres["titre"])) { if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]); Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($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"])) { if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]); Stockage::set_prop($chemin, "description", $paramètres["description"]);
} }
if (isset($paramètres["vue"])) { if (isset($paramètres["vue"])) {
self::vue($chemin, $paramètres["vue"]); return self::vue($chemin, $paramètres["vue"]);
} else { } else {
self::vue($chemin); return self::vue($chemin);
} }
} }
} }
@ -53,7 +53,8 @@ class GalerieÉvènement {
} }
$ret .= '<ul class="galerie evenement">'; $ret .= '<ul class="galerie evenement">';
foreach (Stockage::liste_enfants($chemin) as $k) { 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>'; $ret .= '</ul>';
} else if ($vue == "miniature") { } else if ($vue == "miniature") {
@ -62,7 +63,7 @@ class GalerieÉvènement {
$enfants = Stockage::liste_enfants($chemin); $enfants = Stockage::liste_enfants($chemin);
if (isset($enfants[0])) $ret = Modules::vue($enfants[0], 'miniature')->contenu; 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"));
} }
} }

View File

@ -3,19 +3,19 @@
class GalerieIndex { class GalerieIndex {
public static function action($chemin, $action, $paramètres) { public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") { } else if ($action == "nouvelle_page") {
$np = Stockage::nouvelle_page($chemin, "Nouvelle période", "galerie-periode"); $np = Stockage::nouvelle_page($chemin, "Nouvelle période", "galerie-periode");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur()); Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
return redirect($np); return new Page($np, '', "redirect");
} else if ($action == "supprimer") { } else if ($action == "supprimer") {
Stockage::supprimer($chemin); Stockage::supprimer($chemin);
return redirect($chemin->parent()); return new Page($chemin->parent(), '', "redirect");
} else { } else {
if (isset($paramètres["titre"])) { if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]); Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($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"])) { if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]); Stockage::set_prop($chemin, "description", $paramètres["description"]);
@ -59,7 +59,7 @@ class GalerieIndex {
} }
$ret .= '</ul>'; $ret .= '</ul>';
} }
return Modules::page($ret, Stockage::get_prop($chemin, "titre")); return new Page($ret, Stockage::get_prop($chemin, "titre"));
} }
} }

View File

@ -3,28 +3,28 @@
class GaleriePériode { class GaleriePériode {
public static function action($chemin, $action, $paramètres) { public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") { } else if ($action == "nouvelle_page") {
$np = Stockage::nouvelle_page($chemin, "Nouvel évènement", "galerie-periode"); $np = Stockage::nouvelle_page($chemin, "Nouvel évènement", "galerie-periode");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur()); Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
return redirect($np); return new Page($np, '', "redirect");
} else if ($action == "supprimer") { } else if ($action == "supprimer") {
Stockage::supprimer($chemin); Stockage::supprimer($chemin);
return redirect($chemin->parent()); return new Page($chemin->parent(), '', "redirect");
} else { } else {
if (isset($paramètres["titre"])) { if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]); Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($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"])) { if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]); Stockage::set_prop($chemin, "description", $paramètres["description"]);
} }
if (isset($paramètres["vue"])) { if (isset($paramètres["vue"])) {
self::vue($chemin, $paramètres["vue"]); return self::vue($chemin, $paramètres["vue"]);
} else { } else {
self::vue($chemin); return self::vue($chemin);
} }
} }
} }
@ -53,7 +53,8 @@ class GaleriePériode {
} }
$ret .= '<ul class="galerie période">'; $ret .= '<ul class="galerie période">';
foreach (Stockage::liste_enfants($chemin) as $k) { 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>'; $ret .= '</ul>';
} else if ($vue == "miniature") { } else if ($vue == "miniature") {
@ -62,7 +63,7 @@ class GaleriePériode {
$enfants = Stockage::liste_enfants($chemin); $enfants = Stockage::liste_enfants($chemin);
if (isset($enfants[0])) $ret = Modules::vue($enfants[0], 'miniature')->contenu; 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"));
} }
} }

View File

@ -3,10 +3,10 @@
class GaleriePhoto { class GaleriePhoto {
public static function action($chemin, $action, $paramètres) { public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") { if ($action == "anuler") {
return redirect($chemin); return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") { } else if ($action == "supprimer") {
Stockage::supprimer($chemin); Stockage::supprimer($chemin);
return redirect($chemin->parent()); return new Page($chemin->parent(), '', "redirect");
} else { } else {
if (isset($paramètres["fichier_image"])) { if (isset($paramètres["fichier_image"])) {
// redimensionner l'image avec gd, stocker la miniature dans // redimensionner l'image avec gd, stocker la miniature dans
@ -18,16 +18,16 @@ class GaleriePhoto {
/* if (isset($paramètres["titre"])) { /* if (isset($paramètres["titre"])) {
Stockage::renomer($chemin, $paramètres["titre"]); Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($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"])) { if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]); Stockage::set_prop($chemin, "description", $paramètres["description"]);
} }
if (isset($paramètres["vue"])) { if (isset($paramètres["vue"])) {
self::vue($chemin, $paramètres["vue"]); return self::vue($chemin, $paramètres["vue"]);
} else { } else {
self::vue($chemin); return self::vue($chemin);
} }
} }
} }
@ -45,15 +45,15 @@ class GaleriePhoto {
$ret .= '<img src="' . $chemin->get_url("?vue=image") . '"></img>'; $ret .= '<img src="' . $chemin->get_url("?vue=image") . '"></img>';
$ret .= affichage_texte_enrichi(Stockage::get_prop($chemin, "message")); $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") { } else if ($vue == "miniature") {
$ret = '<img src="' . $chemin->get_url("?vue=image_mini") . '"></img>'; $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") { } else if ($vue == "image") {
return Modules::raw(Stockage::get_prop_sendfile("image")); return new Page($chemin, "image", "sendfile");
} else if ($vue == "image_mini") { } else if ($vue == "image_mini") {
return Modules::raw(Stockage::get_prop_sendfile("image_mini")); return new Page($chemin, "image_mini", "sendfile");
} }
} }
} }

View File

@ -33,10 +33,6 @@ class Modules {
if ($module === false) return self::page(false, "Erreur"); if ($module === false) return self::page(false, "Erreur");
return call_user_func(array($module["classe"], "vue"), $chemin, $vue); return call_user_func(array($module["classe"], "vue"), $chemin, $vue);
} }
public static function page($contenu, $titre) {
return (object)array("contenu" => $contenu, "titre" => $titre);
}
} }
?> ?>