From 4ffa811cf05b7b5b1f11110c177720482bbd5a05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Tue, 3 Aug 2010 07:36:18 +0200 Subject: [PATCH] Page .../galerie/ fonctionne (plus ou moins) + Bugs. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Je sais pas trop ce que je commit... Très fatigué. --- __cms__/code/chemin/chemin.php | 23 +++++++++++++------ __cms__/code/modules/modules.php | 2 +- __cms__/code/securite/permissions.php | 2 +- .../donnees/admin/permissions/__prop__regles | 2 -- __cms__/donnees/galerie/__prop__titre | 1 + __cms__/donnees/galerie/__prop__type | 2 +- galerie/index.php | 4 ++-- 7 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 __cms__/donnees/galerie/__prop__titre diff --git a/__cms__/code/chemin/chemin.php b/__cms__/code/chemin/chemin.php index 523e45e..f14f497 100644 --- a/__cms__/code/chemin/chemin.php +++ b/__cms__/code/chemin/chemin.php @@ -7,9 +7,9 @@ define('CHEMIN_JOKER_SEGMENT', '*'); class Chemin { // Si $chemin est un tableau, chaque segment doit vérifier les invariants de nettoyer_segment. - public function __construct($chemin) { + public function __construct($chemin, $est_un_motif = false) { if (! is_array($chemin)) { - $this->segments = self::nettoyer_chemin($chemin); + $this->segments = self::nettoyer_chemin($chemin, $est_un_motif); } else { $this->segments = $chemin; } @@ -86,7 +86,7 @@ class Chemin { } - public static function nettoyer_chemin($chemin) { + public static function nettoyer_chemin($chemin, $est_un_motif = false) { // SÉCURITÉ : $chemin nettoyé // * Ne contient pas '\0' // * Ne contient pas '../' @@ -102,24 +102,33 @@ class Chemin { $chemin = preg_replace("/\\/*$/", '', $chemin); $segments = explode('/', $chemin); - $segments = array_map(array("self", "nettoyer_segment"), $segments); + if ($est_un_motif) { + $segments = array_map(array("self", "nettoyer_segment_motif"), $segments); + } else { + $segments = array_map(array("self", "nettoyer_segment"), $segments); + } return $segments; } - public static function nettoyer_segment($segment) { + public static function nettoyer_segment($segment, $est_un_motif = false) { // SÉCURITÉ : $segment nettoyé : // * /!\ Peut être vide /!\ + // * Ne doit pas contenir '\0' (octet NULL). // * Ne doit pas contenir '/' non plus, remplacer par '-'. // * Ne doit pas contenir '*' non plus, remplacer par '-'. // * Ne contient pas "__prop__", remplacer par "___prop___". $segment = preg_replace("/\\0/", '', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???) - $segment = preg_replace("/\\//", '', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???) - $segment = preg_replace("/\\*/", '', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???) + $segment = preg_replace("/\\//", '-', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???) + if (!$est_un_motif) $segment = preg_replace("/\\*/", '-', $segment); // TODO : vérifier ... $segment = preg_replace("/__prop__/", '___prop___', $segment); // TODO : vérifier si c'est bien ça ! (supprime _toutes_ les occurences ???) return $segment; } + + public static function nettoyer_segment_motif($segment) { + return self::nettoyer_segment($segment, true); + } } ?> \ No newline at end of file diff --git a/__cms__/code/modules/modules.php b/__cms__/code/modules/modules.php index a7e65f9..d2e2ddd 100644 --- a/__cms__/code/modules/modules.php +++ b/__cms__/code/modules/modules.php @@ -15,7 +15,7 @@ class Modules { public static function get_module($chemin) { $type = Stockage::get_prop($chemin, "type"); - if ($type === false) return false; + if ($type === false || !isset(self::$liste_modules[$type])) return false; return self::$liste_modules[$type]; } diff --git a/__cms__/code/securite/permissions.php b/__cms__/code/securite/permissions.php index 259daae..2486724 100644 --- a/__cms__/code/securite/permissions.php +++ b/__cms__/code/securite/permissions.php @@ -87,7 +87,7 @@ class Permissions { return false; } $regles[] = array( - "chemin" => new Chemin(self::unescape_element_regle($r[0])), + "chemin" => new Chemin(self::unescape_element_regle($r[0]), true), "action" => self::unescape_element_regle($r[1]), "groupe" => self::unescape_element_regle($r[2]), "autorisation" => ($r[3] == "oui"), diff --git a/__cms__/donnees/admin/permissions/__prop__regles b/__cms__/donnees/admin/permissions/__prop__regles index ceeb3c5..9793a8a 100644 --- a/__cms__/donnees/admin/permissions/__prop__regles +++ b/__cms__/donnees/admin/permissions/__prop__regles @@ -4,6 +4,4 @@ /forum/|nouvelle_page|Utilisateurs|oui|Les utilisateurs peuvent créer de nouveaux sujets de discussion dans le forum. /forum/*|nouvelle_page|Utilisateurs|oui|Les utilisateurs peuvent créer des messages dans les sujets de discussion. /forum/*/*|set_prop|Propriétaire|oui|L'auteur d'un message peut en définir le contenu (pas les autres, ce n'est pas un wiki). -/galerie/**|get_prop|Utilisateurs|oui|Les utilisateurs peuvent consulter la galerie. -/galerie/**|*|Anonymes|non|Mais le reste du monde ne peut pas voir la galerie (photos privées par ex.) /**|get_prop|Anonymes|oui|Le reste du monde peut consulter le site. \ No newline at end of file diff --git a/__cms__/donnees/galerie/__prop__titre b/__cms__/donnees/galerie/__prop__titre new file mode 100644 index 0000000..5987dd3 --- /dev/null +++ b/__cms__/donnees/galerie/__prop__titre @@ -0,0 +1 @@ +Galerie \ No newline at end of file diff --git a/__cms__/donnees/galerie/__prop__type b/__cms__/donnees/galerie/__prop__type index 5987dd3..19d44d7 100644 --- a/__cms__/donnees/galerie/__prop__type +++ b/__cms__/donnees/galerie/__prop__type @@ -1 +1 @@ -Galerie \ No newline at end of file +galerie-index \ No newline at end of file diff --git a/galerie/index.php b/galerie/index.php index cd0f3a2..a4e633e 100644 --- a/galerie/index.php +++ b/galerie/index.php @@ -1,7 +1,7 @@ \ No newline at end of file