Commit bdce2e9a authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

- Nouvelles méthodes pour Table : hasColumn, getHistoColumns, histoWhere

- DataManager : améliorations au système de génération de jeu de données :
  - 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
- [Fix] Correction erreur sur Bdd->selectSingle si donnée inexistante
parent 790e2ffe
Loading
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
1.6.1 (24/09/2025)
------------------

- Nouvelles méthodes pour Table : hasColumn, getHistoColumns, histoWhere
- DataManager : améliorations au système de génération de jeu de données :
  - 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
- [Fix] Correction erreur sur Bdd->selectSingle si donnée inexistante


1.6.0 (23/09/2025)
------------------

+4 −0
Original line number Diff line number Diff line
@@ -409,6 +409,10 @@ class Bdd
    {
        $result = $this->selectOne($sql, $params, null, $options);

        if (empty($result)) {
            return null;
        }

        return current($result);
    }

+35 −10
Original line number Diff line number Diff line
@@ -152,20 +152,45 @@ class DataManager
        $data         = [];
        $where        = $config['where'] ?? null;
        $ignoreCols   = $config['ignore-cols'] ?? [];
        $transformers = $config['transformers'] ?? [];
        $transfo      = $config['transfo'] ?? null;

        $config['fetch'] = Bdd::FETCH_EACH;

        $stmt = $this->getBdd()->getTable($tableName)->select($where, $config);
        $table = $this->getBdd()->getTable($tableName);

        if ($table->hasHistorique()){
            $histoCols = $table->getHistoColumns();
            foreach($histoCols as $col){
                $ignoreCols[] = $col; // Toutes les colonnes d'historique sont retirées
            }

            $where = $table->histoWhere($where); // On filtre pour ne pas extraire de données historisées
        }

        $stmt = $table->select($where, $config);
        while ($dt = $stmt->next()) {
            $isOk = true;
            foreach ($dt as $c => $v) {
                if (is_string($v)) {
                if (isset($transformers[$c]) && !empty($v)){
                    $sql = sprintf($transformers[$c], ':' . $c);
                    $v = $this->getBdd()->selectSingle($sql, [$c => $v]);

                    $colDdl = $table->getDdl()['columns'][$c];
                    $isColNotNull = !$colDdl['nullable'];

                    if (empty($v) && $isColNotNull) {
                        $isOk = false;
                    }
                }

                if ($isOk && is_string($v)) {
                    $dt[$c] = trim($v);
                }
                if ($v instanceof \DateTime) {
                if ($isOk && $v instanceof \DateTime) {
                    $dt[$c] = $v->format('Y-m-d H:i:s');
                }
                if (null === $v || in_array($c, $ignoreCols)) {
                if ($isOk && (null === $v || in_array($c, $ignoreCols))) {
                    unset($dt[$c]);
                }
            }
@@ -174,7 +199,7 @@ class DataManager
                $transfo($this->getBdd(), $dt);
            }

            if (!empty($dt)) {
            if ((!empty($dt)) && $isOk) {
                $data[] = $dt;
            }
        }
+56 −2
Original line number Diff line number Diff line
@@ -798,7 +798,7 @@ class Table



    protected function hasId(): bool
    public function hasId(): bool
    {
        $ddl = $this->getDdl();

@@ -809,7 +809,7 @@ class Table



    protected function hasSequence(): bool
    public function hasSequence(): bool
    {
        $ddl = $this->getDdl();

@@ -818,6 +818,60 @@ class Table



    public function hasColumn(string $column): bool
    {
        $ddl = $this->getDdl();

        return isset($ddl['columns'][$column]);
    }



    public function getHistoColumns(): array
    {
        $colOpts = [
            Bdd::OPTION_HISTO_CREATION_COLUMN,
            Bdd::OPTION_HISTO_CREATEUR_ID_COLUMN,
            Bdd::OPTION_HISTO_MODIFICATION_COLUMN,
            Bdd::OPTION_HISTO_MODIFICATEUR_ID_COLUMN,
            Bdd::OPTION_HISTO_DESTRUCTION_COLUMN,
            Bdd::OPTION_HISTO_DESTRUCTEUR_ID_COLUMN,
        ];

        $res = [];
        foreach ($colOpts as $colOpt) {
            $col = $this->getBdd()->getOption($colOpt);
            if ($this->hasColumn($col)) {
                $res[] = $col;
            }
        }

        return $res;
    }



    public function histoWhere(?string $where = null, ?string $alias = null): ?string
    {
        if (!$this->hasHistorique()) {
            return $where;
        }

        if ($alias) {
            $histo = $alias . '.';
        } else {
            $histo = '';
        }
        $histo .= $this->getBdd()->getOption(Bdd::OPTION_HISTO_DESTRUCTION_COLUMN).' IS NULL';
        if ($where) {
            return $histo.' AND ('.$where.')';
        }else{
            return $histo;
        }
    }



    protected function transform($value, string $transformer): mixed
    {
        if (!isset($this->transformCache[$transformer][$value])) {