Commit 7437d557 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

DataManager : améliorations au système de peuplement de données en base :...

DataManager : améliorations au système de peuplement de données en base : configuration des transformers simplifiée (compatibilité conservée)
parent bdce2e9a
Loading
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
1.6.1 (24/09/2025)
1.7.0 (24/09/2025)
------------------

- Nouvelles méthodes pour Table : hasColumn, getHistoColumns, histoWhere
@@ -6,6 +6,7 @@
  - Simplification des configs
  - Les données historisées sont automatiquement filtrées
  - Les colonnes liées à l'historisation sont automatiquement ignorées pour ne pas qu'elles polluent les exports
- DataManager : améliorations au système de peuplement de données en base : configuration des transformers simplifiée (compatibilité conservée)
- [Fix] Correction erreur sur Bdd->selectSingle si donnée inexistante


+16 −3
Original line number Diff line number Diff line
@@ -62,11 +62,19 @@ return [
                 *     // Facultatif : Ordre de tri
                 *     'order-by'     => 'libelle',
                 * 
                 *     // Facultatif : système de remplacement des ID par des codes à l'aide des transformers, par colonne
                 *     'transformers' => [
                 *         'ma_table_id' => 'SELECT code from ma_table WHERE id = %s',
                 *     ],
                 * 
                 *     // Facultatif : callback de transformation, utile pour des opérations avancées
                 *     // $data = 1 ligne de la table 
                 *     'transfo'     => function (Bdd $bdd, &$data) {
                 *          // exemple de remplacement d'un id par un code pour une colonne liée à une clé étrangère
                 *          $data['ma_table_id'] = $bdd->selectSingle('SELECT code from ma_table WHERE id = :id', ['id' => $data['ma_table_id']]);
                 *         // exemple de remplacement d'une valeur
                 *         $data['ma_colonne'] = 5;
                 * 
                 *         // ou alors, on ignore la ligne en la vidant
                 *         $data = [];
                 *     },
                 * ],
                 * ...
@@ -83,6 +91,11 @@ return [
                 *     // string|array : liste des colonnes servant à identifier de manière certaine et unique les lignes (par exemple 'code')
                 *     'key' => 'code',
                 * 
                 *     // Facultatif : système de remplacement des codes par des ID à l'aide des transformers, par colonne
                 *     'transformers' => [
                 *         'ma_table_id' => 'SELECT id from ma_table WHERE code = %s',
                 *     ],
                 * 
                 *     // Ce tableau d'options est transmis à la fonction Unicaen\BddAdmin\Table::merge
                 *     // vous pouvez vous renseigner sur l'usage de cette méthode, car bien d'autres possibilités existent...
                 *     'options => [
+36 −7
Original line number Diff line number Diff line
@@ -84,9 +84,23 @@ class DataManager
                break;
            }
            if (is_string($source)) {
                if (!isset($this->sourcesData[$i]) && file_exists($source)) {
                if (is_dir($source)) {
                    if (!str_ends_with($source, '/')) {
                        $source .= '/';
                    }
                    if (file_exists($source . $table . '.php')) {
                        if (!isset($this->sourcesData[$i])) {
                            $this->sourcesData[$i] = [];
                        }
                        if (!isset($this->sourcesData[$i][$table])) {
                            $this->sourcesData[$i][$table] = require $source . $table . '.php';
                        }
                    }
                } elseif (file_exists($source)) {
                    if (!isset($this->sourcesData[$i])) {
                        $this->sourcesData[$i] = require $source;
                    }
                }
                if (isset($this->sourcesData[$i][$table])) {
                    $data = $this->sourcesData[$i][$table];
                    break;
@@ -101,6 +115,21 @@ class DataManager
            throw new \Exception('Les données sources de la table "' . $table . '" doivent être présentées sous forme de tableau de lignes, chaque ligne étant un tableau de colonnes');
        }

        // On transfère la config simplifiée des transformers dans les options pour le merge
        $transformers = $config['transformers'] ?? [];
        foreach ($transformers as $column => $transformer) {
            if (!isset($config['options'])){
                $config['options'] = [];
            }
            if (!isset($config['options']['columns'])) {
                $config['options']['columns'] = [];
            }
            if (!isset($config['options']['columns'][$column])) {
                $config['options']['columns'][$column] = [];
            }
            $config['options']['columns'][$column]['transformer'] = $transformer;
        }

        $result = $tableObject->merge(
            $data,
            $config['key'] ?? $idCol,