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
// 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() {

View File

@ -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();
}
}

View File

@ -2,5 +2,6 @@
require_once(dirname(__FILE__) . "/configuration.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 {
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

View File

@ -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"]);

View File

@ -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) :

View File

@ -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"]);

View File

@ -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"]);

View File

@ -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"])) {

View File

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

View File

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

View File

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

View File

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

View File

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