# 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