nur-ture/TODO.md

130 lines
3.8 KiB
Markdown

# TODO
* [ ] bbnurse -cmk supprime la classe dans nur\sery après l'avoir copié dans la
destination
## Vrac
* classe de base `profile_manager` qui permet de gérer des profils
* class Tool permettant d'appliquer un traitement à une valeur scalaire
* ArrayTool permet d'appliquer les traitement à tous les éléments du tableau
* les traitements sont une suite d'opérations à faire, ou de filtres à
appliquer, qui ne sont appliqués que lors du parcours effectif de la liste
* exemple
```php
$result = ArrayTool::with($source)
->filterKey("key")
->filter("value")
->add("value", "key")
->addAll($iterable)
->all();
```
déterminer le genre de traitements que l'on peut offrir
* syntaxe pour CTable: définition des en-têtes et des valeurs des colonnes dans
la même expression
~~~php
new CTable($rows, [
"contents" => [
## champ
["Nom", "nom"],
["Prénom", "prenom"],
## fonction
["Age", function(Cursor $cursor) {
return (new Date())->diff($cursor->row["date_naissance"]);
}],
## Pas de contenu
["Vide", null],
## Contenu dynamique
["Contenu", [
"before",
v::span("hello"),
Cursor::dyn("name"),
"after",
Cursor::dyn(function(Cursor $cursor) {
return $cursor["surname"];
}),
]],
## colspan
["First",
function() { return "sur deux colonnes"; },
"colspan" => 2,
],
["Second", null],
## colspan dynamique
# la valeur de Element n'est évaluée que si colspan==null
["Groupe", function(Cursor $row) {
$break = $breaker->shouldBreakOn($row["code_groupe"]));
if ($break) {
$row->set("colspan", 2);
return "{$row["code_groupe"]} {$row["libelle_groupe"]}";
} else {
$row->set("colspan", null);
return null;
}
}, "colspan" => function(Cursor $row) {
return $row->get("colspan");
}],
["Element", function(Cursor $row) {
return $row["libelle_element"];
}]
],
]);
~~~
bien entendu, bien que ce ne soit pas démontré ici, le premier argument
(l'en-tête) est un contenu, pas seulement une chaine
chaque élément de contenu défini header, body et footer
~~~php
$element = ["header" => [], "body" => [], "footer" => []];
~~~
colspan peut être utilisé dans header, body ou footer. si spécifié dans
$element, colspan s'applique à body
~~~php
# les deux suivants sont équivalents
$element = ["myheader", "mybody", "colspan" => 2, "myfooter"];
$element = [
"header" => [
"content" => "myheader",
],
"body" => [
"content" => "mybody",
"colspan" => 2,
],
"footer" => [
"content" => "myfooter",
],
];
~~~
si $element est une fonction, il retourne la valeur de l'élement
~~~php
$element = function() {
return ["header", "body"];
}
~~~
clé "enabled" permet d'activer dynamiquement un élément
~~~php
$element = function() {
return ["header", "body", "enabled" => $includeElement];
}
~~~
clé "func" pour spécifier la fonction dans un contexte statique
~~~php
$element = ["func" => [My::class, "get_element"]];
~~~
func n'est considéré que si $element était un tableau à la base
s'il y a d'autres clés, elles sont fusionnées avec le résultat de $func()
(dont les clés sont prioritaires)
* Cursor::dyn permet d'insérer une valeur qui sera évaluée plus tard lors de la
résolution du contenu
* pour Cursor, CTable, etc., un paramètre "params_func" permet de générer une
partie des paramètres de façon dynamique.
c'est juste du sucre, c'est strictement équivalent à construire le tableau
des paramètres avant d'instancier l'objet.
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary