From 70c662e164ad3df046641409e70b6e5b472c18fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Sat, 9 Oct 2010 20:39:51 +0200 Subject: [PATCH] =?UTF-8?q?R=C3=A9duction=20du=20nombre=20de=20TODOs.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cms2/code/bdd.php | 5 +-- cms2/code/document.php | 26 +++++++----- cms2/code/page.php | 49 +++++++++++++++++------ cms2/modules/admin/admin-utilisateurs.php | 15 ++++--- cms2/modules/galerie/galerie.php | 8 ++-- cms2/modules/lien/include.php | 5 +++ cms2/modules/lien/lien.php | 22 ++++++++++ cms2/modules/nouveautes/nouveautes.php | 13 +++--- 8 files changed, 100 insertions(+), 43 deletions(-) create mode 100644 cms2/modules/lien/include.php create mode 100644 cms2/modules/lien/lien.php diff --git a/cms2/code/bdd.php b/cms2/code/bdd.php index 5728fbc..c3865e7 100644 --- a/cms2/code/bdd.php +++ b/cms2/code/bdd.php @@ -1,9 +1,6 @@ type; foreach ($this->attr as $k => $v) { - $ret .= " " . $k . '="' . htmlspecialchars($v) . '"'; // TODO : htmlspecialchars ne suffit pas ! + $ret .= " " . htmlspecialchars($k) . '="' . htmlspecialchars($v) . '"'; } if (count($this->enfants) == 0) { $ret .= "/>\n"; @@ -72,10 +72,21 @@ class ElementDocument { $this->type = $type; } + public static function has_widget($w) { + return array_key_exists($w, self::$widgets); + } + + public static function has_type_élément($t) { + return array_key_exists($t, self::$enfantsÉléments); + } + + public function type_élément_autorisé($t) { + return self::has_type_élément($t) + && in_array($t, self::$enfantsÉléments[$this->type]); + } + public function __call($fn, $args) { - // TODO (peut-être ?): si on ne peut pas ajouter directement un élément, chercher un chemin qui permette de l'ajouter (p.ex. un strong directement à la racine d'un document, on ajoutera un p). - if (array_key_exists($this->type, self::$enfantsÉléments) - && in_array($fn, self::$enfantsÉléments[$this->type])) { + if (self::type_élément_autorisé($fn)) { $elem = new self($fn); foreach (self::$attributsÉléments[$fn] as $i => $nom) { @@ -87,7 +98,7 @@ class ElementDocument { $this->enfants[] = $elem; return $elem; - } else if (array_key_exists($fn, self::$widgets)) { + } else if (self::has_widget($fn)) { $f = self::$widgets[$fn]; $a = $args; array_unshift($a, $this); @@ -102,10 +113,7 @@ class ElementDocument { class Document extends ElementDocument { } -/***** - TODO - Comment s'assurer que le header, footer, nav soit unique ? -******/ +// TODO: Comment s'assurer que le header, footer, nav soit unique ? $inline_elems = "span text a strong em img"; ElementDocument::ajouter_type_élément("document", "header footer nav article script style"); ElementDocument::ajouter_type_élément("header", "title"); diff --git a/cms2/code/page.php b/cms2/code/page.php index 0dceec2..c61b6b7 100644 --- a/cms2/code/page.php +++ b/cms2/code/page.php @@ -1,9 +1,5 @@ aucun type. return true; } - // TODO !! TODO !! TODO - // Comment spécifier que telle valeur référence telle autre (si on le spécifie, sinon c'est juste le widget qui fait la translation) ? public static function attributs() { return array( attribut("date_creation", "date", "0"), @@ -87,22 +81,44 @@ class Page { niy("enfants"); } - public function ajouter_enfant() { + public function ajouter_enfant($type, $groupe = "main") { // ajouter l'enfant - // renvoyer un pointeur sur cet enfant + // renvoyer une instance de la sous-classe de Page correspondant à $type. niy("ajouter_enfant"); } public function lier_page($page_source, $groupe = "main") { - // ajouter un enfant de type "Lien" (TODO: faire la classe Lien) - // contenant "@lien = $page_source" et "@groupe = $groupe" + $l = ajouter_enfant("Lien", "$groupe"); + $l->lien = $page_source; niy("lier_page"); } - public static function page_systeme("$nom") { + public static function page_systeme($nom) { // select from pages where nomSysteme = $nom limit 1 niy("page_systeme"); } + + public function if_perm($action, $nom_propriété) { + // @param $action = suite de lettre parmi les suivantes : + // R = Read prop + // W = Write prop + // L = Lister les enfants ($nom_propriété désigne alors le groupe) + // C = Créer des enfants ($nom_propriété désigne alors le groupe) + // D = Delete des enfants ($nom_propriété désigne alors le groupe) + // @return true si on a l'autorisation pour TOUTES les actions demandées, false sinon. + + // Squelette du code : + $action = strtolower($action); + $permissions_prop = strtolower($this->get_permissions_prop($nom_propriété)); + $permissions_enfants = strtolower($this->get_permissions_enfants($nom_propriété)); + if (str_contains($action, "r") && !str_contains($permissions_prop, "r")) { return false; } + if (str_contains($action, "w") && !str_contains($permissions_prop, "w")) { return false; } + if (str_contains($action, "l") && !str_contains($permissions_enfants, "l")) { return false; } + if (str_contains($action, "c") && !str_contains($permissions_enfants, "c")) { return false; } + if (str_contains($action, "d") && !str_contains($permissions_enfants, "d")) { return false; } + return true; + niy("if_perm"); + } public function __get($nom) { // s'il y a un getter (trigger), on l'appelle, sinon on appelle get_prop_direct(); @@ -133,11 +149,18 @@ class Page { // Modifie l'attribut "$nom" dans la BDD. niy("set direct $nom = $val"); } + + public function set_composant_url() { + // pseudo-réécriture d'URL. + niy("pseudo-réécriture d'URL dans set_composant_url()."); + return $this->set_prop_direct("composant_url", $val); + } } function attribut($nom, $type, $defaut) { - // TODO : si le type est inconnu, afficher une erreur. - // Un type <=> un widget. + if (!Document::has_widget($type)) { + Debug::error("L'attribut $nom a le type $type, mais aucun widget w_$type n'existe."); + } return array($nom, $type, $defaut); } diff --git a/cms2/modules/admin/admin-utilisateurs.php b/cms2/modules/admin/admin-utilisateurs.php index 0724265..4dde3ae 100644 --- a/cms2/modules/admin/admin-utilisateurs.php +++ b/cms2/modules/admin/admin-utilisateurs.php @@ -56,12 +56,15 @@ class AdminUtilisateur extends Page { } public static function attributs() { return array( - "nom" => "Dupondt", - "prenom" => "Jean", - "equipe" => null, // TODO - "mot_de_passe" => "", - "groupe" => "utilisateurs", - "peut_se_connecter" => false // TODO : permissions différentes (l'utilisateur ne peut pas modifier ça). + // TODO : le couple (nom,prenom) doit être unique. + attribut("nom", "text_line", "Dupondt"), + attribut("prenom", "text_line", "Jean"), + attribut("equipe", "uid", "null"), + attribut("mot_de_passe", "password", ""), + // TODO : permissions différentes pour les propriétés peut_se_connecter et groupe_permissions. + // L'utilisateur ne doit pas pouvoir les modifier. + attribut("groupe_permissions", "groupe_permissions", "utilisateurs"), + attribut("peut_se_connecter", "bool", "false") ); } diff --git a/cms2/modules/galerie/galerie.php b/cms2/modules/galerie/galerie.php index de1b223..4f24175 100644 --- a/cms2/modules/galerie/galerie.php +++ b/cms2/modules/galerie/galerie.php @@ -38,12 +38,15 @@ abstract class GalerieBase extends Page { $e->rendu("h_miniature", $a); }); $nouveau = $l->li(); + // TODO : nouveau devrait être un lien, bouton, ... $nouveau->span("miniature")->img("", $this->url("i_icône_nouvelle_page")); $nouveau->span("titre")->text(self::$texte_nouvelle_page); if ($this->if_perm("W", "dans_nouveautes")) { $d->p()->w_form($this->dans_nouveautes); } + + // TODO : lister les liens et pouvoir en ajouter (personne, lieu etc.). return $d; } @@ -62,9 +65,8 @@ abstract class GalerieBase extends Page { } public function set_dans_nouveautes($val) { - //TODO : ajouter $this en tant qu'enfant de /nouveautes $this->page_systeme("nouveautes")->lier_page("$this"); - $this->set_prop_direct("dans_nouveautes", $val); + return $this->set_prop_direct("dans_nouveautes", $val); } } @@ -105,7 +107,7 @@ class GaleriePhoto { } public function set_titre($titre) { - // TODO : set url quand on set titre ! + // set url quand on set titre ! // TODO : valeur initiale pour l'url ! niy("GaleriePhoto::set_titre($titre)"); } diff --git a/cms2/modules/lien/include.php b/cms2/modules/lien/include.php new file mode 100644 index 0000000..326a0a2 --- /dev/null +++ b/cms2/modules/lien/include.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/cms2/modules/lien/lien.php b/cms2/modules/lien/lien.php new file mode 100644 index 0000000..a1a7eba --- /dev/null +++ b/cms2/modules/lien/lien.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/cms2/modules/nouveautes/nouveautes.php b/cms2/modules/nouveautes/nouveautes.php index 634f144..82876a1 100644 --- a/cms2/modules/nouveautes/nouveautes.php +++ b/cms2/modules/nouveautes/nouveautes.php @@ -1,10 +1,6 @@ article()->w_liste($this->enfants(true, "date_creation desc", 10), function($e, $li) { $a = $li->a($e->uid()); + // TODO : h_miniature_nouveautes s'il existe sinon h_miniature sinon juste un lien. + // Comme ça le h_miniature_nouveautes d'une période de la galerie, c'est 3 ou 4 images alors que normalement c'en est juste une seule. $e->rendu("h_miniature", $a); }); $nouveau = $l->li(); $nouveau->span("miniature")->img("", $this->url("i_icône_nouvelle_page")); - $nouveau->span("titre")->text(self::$texte_nouvelle_page); + $nouveau->span("titre")->text("Ajouter un article aux nouveautés."); return $d; } } Page::ajouter_type("Nouveautes"); - ?> \ No newline at end of file