Réduction du nombre de TODOs.
This commit is contained in:
parent
f69ce46d60
commit
70c662e164
|
@ -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 :
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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")
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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)");
|
||||
}
|
||||
|
|
5
cms2/modules/lien/include.php
Normal file
5
cms2/modules/lien/include.php
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?php
|
||||
|
||||
require_once(dirname(__FILE__) . "/lien.php");
|
||||
|
||||
?>
|
22
cms2/modules/lien/lien.php
Normal file
22
cms2/modules/lien/lien.php
Normal 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");
|
||||
|
||||
?>
|
|
@ -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");
|
||||
|
||||
|
||||
?>
|
Loading…
Reference in New Issue
Block a user