Réduction du nombre de TODOs.

This commit is contained in:
Georges Dupéron 2010-10-09 20:39:51 +02:00
parent f69ce46d60
commit 70c662e164
8 changed files with 100 additions and 43 deletions

View File

@ -1,9 +1,6 @@
<?php
// TODO : Comment pseudo-insérer des images dans la BDD ? Est-ce la classe de la page qui décide de les déplacer dans /data et de mettre juste le nom dans la BDD ?
// (Et c'est à ce moment-là que la miniature est faite). Ou bien, un "trigger" (get et set) pour faire la même chose ?
// TODO : Pouvoir stocker des collections de propriétés avec le même nom... Par ex. une photo peut avoir une collection de personnes.
// Le widget w_img doit gérer le stockage de l'image dans un dossier, la création de la miniature et le stockage dans la BDD du chemin vers l'image.
/*
Base de données :

View File

@ -42,7 +42,7 @@ class ElementDocument {
$ret = "";
$ret .= "$indent<" . $this->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");

View File

@ -1,9 +1,5 @@
<?php
// TODO : gestion du renomage (pseudo-réécriture d'URL).
// TODO : méthode if_perm("R" ou "W", nom_propriété)
// TODO : méthode if_perm("List" ou "Create" ou "Delete", enfant)
class Page {
public static $types = array();
@ -20,8 +16,6 @@ class Page {
// null ou false => 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);
}

View File

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

View File

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

View File

@ -0,0 +1,5 @@
<?php
require_once(dirname(__FILE__) . "/lien.php");
?>

View File

@ -0,0 +1,22 @@
<?php
class Lien extends Page {
public static function ressources_statiques() {
return qw();
}
public static function ressources_dynamiques() {
return qw();
}
public static function types_enfants() {
return qw();
}
public static function attributs() {
return array(
attribut("lien", "uid", "0")
);
}
}
Page::ajouter_type("Lien");
?>

View File

@ -1,10 +1,6 @@
<?php
class Nouveautes extends Page {
protected static $texte_titre = "Nouveautés";
protected static $texte_nouvelle_page = "Ajouter un article aux nouveautés";
protected static $icône_nouvelle_page = "nouvelle_source.png";
public static function ressources_statiques() {
return qw("i_icône_nouvelle_page c_style");
}
@ -16,13 +12,13 @@ class Nouveautes extends Page {
}
public static function attributs() {
return array(
attribut("titre", "text_line", self::$texte_titre),
attribut("titre", "text_line", "Nouveautés"),
attribut("description", "text_rich", "")
);
}
public function res_i_icône_nouvelle_page() {
return StockageFichiers::envoyer_fichier_statique(Path::combine(dirname(__FILE__), self::$icône_nouvelle_page));
return StockageFichiers::envoyer_fichier_statique(Path::combine(dirname(__FILE__), "nouvelle_source.png"));
}
public function res_c_style() {
@ -34,16 +30,17 @@ class Nouveautes extends Page {
$l = $d->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");
?>