diff --git a/__cms__/code/classes.txt b/__cms__/code/classes.txt deleted file mode 100644 index 9de83f4..0000000 --- a/__cms__/code/classes.txt +++ /dev/null @@ -1,203 +0,0 @@ - -/******\ -| 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 ? - - -=== Page === -->rendu() -> Document -->parent -->url // toute l'url -->urlComponent // juste la fin (le composant de l'url qui désigne cette page). -->select(requête) -> CollectionPages -->set_prop() { - s'il y a un setter (trigger), on l'appelle, sinon on appelle set_prop_direct(); - le setter fait ce qu'il veut, puis appelle set_prop_direct(); -} - -// TODO : gestion du renomage (pseudo-réécriture d'URL). - - -=== CollectionPages === -__construct() -__call() // appelle la fonction sur tous les objets, et renvoie les résultats dans un tableau. si les résultats sont des CollectionPages, ils sont concaténés dans la même collection. -__get() // renvoie un tableau contenant le champ pour chaque objet. -__set() // affecte la valeur sur chaque objet. - -=== Document === - -->header -> HTMLElement -->footer -> HTMLElement -->nav -> HTMLElement -->article[] -> HTMLElement // ? - -->titre -->url - -->xhtml5() -->html5() - -=== HTMLElement === -// Chaque type d'élément est une sous-classe de HTMLElement, et impléménte uniquement les méthodes de création qui respectent les règles d'imbrication des éléments. -// Pour les éléments dont les enfants possibles dépendent du parent (par ex. ), on restreindra les enfants et (parents) possibles à quelque chose de sensé. -// Plutôt que d'avoir plein de sous-classes, HTMLElement a une méthode __call(), qui vérifie ce qu'on peut appeller en fonction du type de l'élément. -->_type -->espace_CSS($class) // définit l'espace CSS de cet élément et de ses descendants. -->div() -->ul() -->li() -->p() -... -->_titre($select) // renvoie un

ou un selon les droits -->_richText($select) // similaire -->_field($select) // ... -// Peut-être que _field peut détecter automatiquement s'il faut traiter un champ de la BDD (par ex. pour le richText) en fonction d'une info "type" dans la classe correspondant à la page de ce champ ? -->_list($select, function_formattage_elements) - -=== GeleriePériode extends Page === -// TODO : nommer différemment les ressources de type HTML et les autres. Cela permer de ne pas appeller les méthodes ->header etc. sur une image ! -// Par ex res_h_defaut, res_h_miniature, res_i_image, res_i_miniature (h = html, i=image, c=css, j=javascript, ...) - -class GaleriePériode extends Page { - ressources_statiques = ["icône_nouvelle_page:image/jpeg", "css:text/css"]; - ressources_dynamiques = ["page:Document", "miniature:Document", "mini_miniature:Document"]; - - defauts = [ - "titre" => "Galerie", - "description" => "" - ]; - - enfants = "GalerieÉvènement"; // Pour SiteIndex, c'est "*" (ou true ou un truc du genre). - - ressource_icône_nouvelle_page() { - return ...; - } - ressource_css() { - } - ressource_page() { - $d = new Document(); - $d->heading->standard(); - $l = $d->article(1)->append->liste(select(...), function($e) {...}); - $l->append->... - } - ressource_miniature() { - return $this->miniature_image() . "blabla"; - } - ressource_miniature_image() { - // Prendre le 1er par ordre décroissant sur la date, ou bien : - // TODO : prendre l'élément ayant la propriété "aperçu" à true (s'il y en a un, sinon date). - return this->select("./*", order=date desc, limit=1)->mini_miniature; - } -} -register_css(GaleriePériode); // Insère la ressource "ressource_c_css" dans le CSS principal -register_js(GaleriePériode); // Ajoute le script "ressource_j_js" au de la page. - // Ou bien, lors de l'inclusion des pages, les scripts de chacune sont remontés tout en haut. (meilleure solution). -// Dans tous les cas, les deux devraient être faits par : -type_page(GaleriePériode, "galerie-periode"); - -// Fin GaleriePériode - -class CSS extends Page { - ressources_dynamiques = ["css:text/css"]; - ressource_css() { - mettre bout à bout tous les CSS ? - } -} - - - - -class Document { - function ul() {} - function li() {} - function title() {} - ... - - function standard() { - $d = new Document(); - $d->append->titre($this->select("titre")); - $d->append->description($this->select("description")); - return $d; - } - - function liste($elts, $format) { - $d = new Document(); - $ul = $d->append->ul(); - foreach ($elts as $k => $e) { - $ul->append($format($e)); - } - return $d; - } - - function bouton($texte, $page_callback, $action_callback) { - // afficher un input - // lors du clic, appeller $action_callback sur $page_callback ? - } -} - -abstract class elementDocument() { - private _espaceCss = null; - function espaceCss($class) { - $this->_espaceCss = $class; - } -} - -class ul extends elementDocument() { -} - - - -=== Base de données === -table page (id autoincrement primary key, nomSysteme, composantUrl, parent) - Racine : (?,'racine','',NULL) - NomSysteme -> dans propriétés ? - composantUrl -> dnas propriétés ? -table propriétés(id auto pk, bool système, nom, valeur) - (?,true,dateCréation,?) - (?,true,dateModification,?) - (?,true(false?),publier,?) - -TODO : lors d'une requête, ne renvoyer que les éléments que l'utilisateur a -le droit de voir. Filtrage après la requête (attention au LIMIT et OFFSET !) ? -ou y a-t-il moyen d'exprimer ça directement dans la requête ? - -class DB extends Selectable { - function connect(){ - } -} - -class Selectable { - // TODO : comment faire un select sur la table page ? - // TODO : comment créer une nouvelle page ? - function select(qw champs, qw ordre, int limit, int offset) { - // Retourne un selectable, qui a une méthode run() (la méthode run renvoie la liste d'éléments. Chaque élément a une méthode set()). - } - - function set(valeur, qw champs, qw ordre, int limit, int offset) { - // Appelle set(valeur) sur chaque élément de $this->select(champs, ordre, limit, offset)->run() - } - - function set(valeur, uid) { - // Appelle set(valeur) sur la ligne de la base de données avec cet uid. - // Les
des pages ont des champ et un bouton submit. - // Lorsqu'on active ce submit, les lignes correspondant aux _uid_ dans la base de données reçoivent la bonne valeur. - } - - function sql() { - } - - function add_setter(condition, fonction_setter) { - // Si on fait un set qui remplit la condition, la fonction_setter est appellée au lieu de modifier directement la bdd. - // Condition peut être : - // true // toujours appellé (pour les permissions, les dates de modification etc.). - // type de page parente // lorsqu'on récupère la liste des enfants d'une page de ce type. - // type de page, nom attribut // lorsqu'on récupère cet attribut d'une page de ce type. - } - - function add_getter(condition, fonction_getter) { - // Comme add_setter(). - } -} diff --git a/cms2/code/bdd.php b/cms2/code/bdd.php new file mode 100644 index 0000000..5728fbc --- /dev/null +++ b/cms2/code/bdd.php @@ -0,0 +1,70 @@ +select(champs, ordre, 0, 0)->run() + } + + function set_with_uid($valeur, int $uid) { + // Appelle set(valeur) sur la ligne de la base de données avec cet uid. + // Les des pages ont des champ et un bouton submit. + // Lorsqu'on active ce submit, les lignes correspondant aux _uid_ dans la base de données reçoivent la bonne valeur. + } + + function sql() { + } + + function add_setter($condition, $fonction_setter) { + // Si on fait un set qui remplit la condition, la fonction_setter est appellée au lieu de modifier directement la bdd. + // Condition peut être : + // true // toujours appellé (pour les permissions, les dates de modification etc.). + // type de page parente // lorsqu'on récupère la liste des enfants d'une page de ce type. + // type de page, nom attribut // lorsqu'on récupère cet attribut d'une page de ce type. + } + + function add_getter($condition, $fonction_getter) { + // Comme add_setter(). + } +} + + +?> \ No newline at end of file diff --git a/cms2/code/configuration.php b/cms2/code/configuration.php new file mode 100644 index 0000000..dda92f0 --- /dev/null +++ b/cms2/code/configuration.php @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/cms2/code/debug.php b/cms2/code/debug.php new file mode 100644 index 0000000..31b5a8b --- /dev/null +++ b/cms2/code/debug.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/cms2/code/document.php b/cms2/code/document.php new file mode 100644 index 0000000..9aa170c --- /dev/null +++ b/cms2/code/document.php @@ -0,0 +1,105 @@ +), on restreindra les enfants et (parents) possibles à quelque chose de sensé. +// Plutôt que d'avoir plein de sous-classes, ElementDocument a une méthode __call(), qui vérifie ce qu'on peut appeller en fonction du type de l'élément. + +// Propriété "url" pour le document ? Probablement innutile, pusiqu'on bosse principalement avec des uid (le href d'un est un uid). + +class ElementDocument { + public $espaceCss = null; + private static $enfantsÉléments = array(); + private static $attributsÉléments = array(); + private $type = null; + private $enfants = array(); + + public static function ajouter_type_élément($type, $typesEnfants, $attributs = "") { + self::$enfantsÉléments[$type] = qw($typesEnfants); + self::$attributsÉléments[$type] = qw($attributs); + } + + public static function ajouter_widget($nom, $callback) { + niy("ajouter_widget"); + } + + public function inclure($elem) { + // Tente de fusionner $elem avec $this + niy("inclure"); + } + + public function to_XHTML_5() { + niy("to_XHTML_5"); + } + + public function to_HTML_5() { + niy("to_HTML_5"); + } + + public function to_HTML_4_01() { + niy("to_HTML_4_01"); + } + + public function to_XHTML_1_1() { + niy("to_XHTML_1_1"); + } + + public function __construct($type = "document") { + $this->type = $type; + } + + public function __call($fn, $args) { + if (array_key_exists($this->type, self::$enfantsÉléments) + && in_array($fn, self::$enfantsÉléments[$this->type])) { + $elem = new self($fn); + $this->enfants[] = $elem; + return $elem; + } else { + return null; + } + } +} + +ElementDocument::ajouter_type_élément("document", "header footer nav article script style"); +ElementDocument::ajouter_type_élément("header", "title"); +ElementDocument::ajouter_type_élément("footer", ""); +ElementDocument::ajouter_type_élément("nav", "ul"); +ElementDocument::ajouter_type_élément("article", "ul p form"); +ElementDocument::ajouter_type_élément("script", "", "src"); +ElementDocument::ajouter_type_élément("style", "", "src"); +ElementDocument::ajouter_type_élément("ul", "li"); +ElementDocument::ajouter_type_élément("li", "text a strong em"); +ElementDocument::ajouter_type_élément("form", "input_text_line input_text_multi input_text_rich input_file"); +ElementDocument::ajouter_type_élément("a", "text strong em", "href"); +// ElementDocument::ajouter_type_élément("", ""); + +//ElementDocument::ajouter_widget("titre", function($select){}); // renvoie un

ou un selon les droits +//ElementDocument::ajouter_widget("richText", function($select){}); // similaire +//ElementDocument::ajouter_widget("field", function($select){}); // ... +// Peut-être que _field peut détecter automatiquement s'il faut traiter un champ de la BDD +// (par ex. pour le richText) en fonction d'une info "type" dans la classe correspondant à la page de ce champ ? +//ElementDocument::ajouter_widget("liste", function($select, $function_formattage_elements)); + +/* Widgets : + function en_tete() { + $d = new Document(); + $d->append->titre($this->select("titre")); + $d->append->description($this->select("description")); + return $d; + } + + function liste($elts, $format) { + $d = new Document(); + $ul = $d->append->ul(); + foreach ($elts as $k => $e) { + $ul->append($format($e)); + } + return $d; + } + + function bouton($texte, $page_callback, $action_callback) { + // afficher un input + // lors du clic, appeller $action_callback sur $page_callback ? + } +*/ + +?> \ No newline at end of file diff --git a/cms2/code/include.php b/cms2/code/include.php new file mode 100644 index 0000000..3ac5938 --- /dev/null +++ b/cms2/code/include.php @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/cms2/code/index.php b/cms2/code/index.php new file mode 100644 index 0000000..04c0305 --- /dev/null +++ b/cms2/code/index.php @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/cms2/code/main.php b/cms2/code/main.php new file mode 100644 index 0000000..45ad4e6 --- /dev/null +++ b/cms2/code/main.php @@ -0,0 +1,10 @@ +"; + $g = new GalerieIndex(); + var_dump($g); + echo ""; +} + +?> \ No newline at end of file diff --git a/cms2/code/page.php b/cms2/code/page.php new file mode 100644 index 0000000..9e89ceb --- /dev/null +++ b/cms2/code/page.php @@ -0,0 +1,101 @@ + 0, + "date_modification" => 0, + "publier" => false, + "nom_systeme" => "", + "composant_url" => "page", + ); + protected static $enfants = true; // Type des enfants. True pour tout autoriser. + + public static function ajouter_type($type) { + niy("Page::ajouter_type($type);"); + // Insérer la ressource "res_c_style" dans le CSS principal + } + + private $parent = null; + public function parent() { + return $this->parent; + } + + public function rendu() { + // Renvoie un document (classe ElementDocument). + niy("rendu"); + } + + public function url() { + // Renvoie toute l'url + niy("url"); + } + + public function composant_url() { + // renvoie juste la fin de l'url (le composant de l'url qui désigne cette page). + niy("composant_url"); + } + + private $uid = -1; + public function uid() { + // Renvoie l'uid de la page dans la base de données. + niy("uid"); + } + + public function select($requête) { + // Renvoie un objet de la classe CollectionPages. + niy("select"); + } + + public function __get($nom) { + // s'il y a un getter (trigger), on l'appelle, sinon on appelle get_prop_direct(); + // le getter fait ce qu'il veut, puis appelle set_prop_direct(); + niy("get $name"); + } + + private function get_prop_direct($nom) { + // Récupère l'attribut "$nom" depuis la BDD. + niy("get direct $name"); + } + + public function __set($nom, $val) { + // s'il y a un setter (trigger), on l'appelle, sinon on appelle set_prop_direct(); + // le setter fait ce qu'il veut, puis appelle set_prop_direct(); + niy("set $name = $val"); + } + + public function set_prop_direct($nom, $val) { + // Modifie l'attribut "$nom" dans la BDD. + niy("set direct $name = $val"); + } +} + +class CollectionPages { + function __construct() { + niy("CollectionPages"); + } + + function __call($fn, $args) { + // appelle la fonction sur tous les objets, et renvoie les résultats + // dans un tableau. si les résultats sont des CollectionPages, ils + // sont concaténés dans la même collection. + niy("CollectionPages"); + } + + function __get($name) { + // renvoie un tableau contenant le champ pour chaque objet. + niy("CollectionPages"); + } + + function __set($name, $val) { + // affecte la valeur sur chaque objet. + niy("CollectionPages"); + } +} + +?> \ No newline at end of file diff --git a/cms2/code/stockage_fichiers.php b/cms2/code/stockage_fichiers.php new file mode 100644 index 0000000..80687c0 --- /dev/null +++ b/cms2/code/stockage_fichiers.php @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/cms2/code/util.php b/cms2/code/util.php new file mode 100644 index 0000000..ed8a142 --- /dev/null +++ b/cms2/code/util.php @@ -0,0 +1,129 @@ + \ No newline at end of file diff --git a/cms2/config.php b/cms2/config.php new file mode 100644 index 0000000..932ca68 --- /dev/null +++ b/cms2/config.php @@ -0,0 +1,27 @@ + \ No newline at end of file diff --git a/cms2/index.php b/cms2/index.php new file mode 100644 index 0000000..9d4443f --- /dev/null +++ b/cms2/index.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/cms2/modules/galerie/galerie-index.php b/cms2/modules/galerie/galerie-index.php new file mode 100644 index 0000000..515bfea --- /dev/null +++ b/cms2/modules/galerie/galerie-index.php @@ -0,0 +1,41 @@ + "Galerie", + "description" => "" + ); + protected static $enfants = "GalerieÉvènement"; + + public function res_i_icône_nouvelle_période() { + niy("res_i_icône_nouvelle_période"); + } + + public function res_c_style() { + niy("res_c_style"); + } + + public function res_h_page() { + $d = new Document(); + $d->heading->standard(); + $l = $d->article(1)->append->liste(select(/*todo*/), function($e) {/*todo*/}); + // todo $l->append->... + } + + public function res_h_miniature() { + return $this->res_h_miniature_image(); + // todo : ajouter le titre etc.; + } + + public function res_h_miniature_image() { + // Prendre le 1er par ordre décroissant sur la date, ou bien : + // TODO : prendre l'élément ayant la propriété "aperçu" à true (s'il y en a un, sinon date). + return $this->select("./*", "date desc", 1)->mini_miniature; + } +} + +Page::ajouter_type("GalerieIndex"); + +?> \ No newline at end of file diff --git a/cms2/modules/galerie/include.php b/cms2/modules/galerie/include.php new file mode 100644 index 0000000..30eec1f --- /dev/null +++ b/cms2/modules/galerie/include.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/cms2/modules/include.php b/cms2/modules/include.php new file mode 100644 index 0000000..66d1103 --- /dev/null +++ b/cms2/modules/include.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/cms2/modules/squelette/include.php b/cms2/modules/squelette/include.php new file mode 100644 index 0000000..d97fe7d --- /dev/null +++ b/cms2/modules/squelette/include.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/cms2/modules/squelette/squelette.php b/cms2/modules/squelette/squelette.php new file mode 100644 index 0000000..4d978af --- /dev/null +++ b/cms2/modules/squelette/squelette.php @@ -0,0 +1,13 @@ + \ No newline at end of file