Commit 0a8c23f1 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Merge branch 'refs/heads/modernisation-gestion-donnees'

# Conflicts:
#	.gitlab-ci.yml
#	CHANGELOG.md
parents 8d91f554 b9741a20
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
branche modernisation-gestion-donnees
-------------------------------------

- [Fix] Test de comparaison des float & doubles tenant compte des problématiques d'arrondis de PHP
- Dans le Table->merge, possibilité de définir une requête personnalisée pour les cas complexes


0.9.9 (12/09/2024)
------------------

- [Fix] Correction des tests unitaires qui doivent passer
- Possibilité de configurer les tests unitaires via un fichier dnas config/autoload de l'appli pour éviter qu'il soit supprimé à chaque MAJ composer
- [Fix] Correction d'un bug lors du changement de nombre de caractères sur des character varying lors d'un update de DDL


0.9.10 (15/10/2024)
------------------

+1 −8
Original line number Diff line number Diff line
@@ -9,13 +9,6 @@ use Laminas\Mvc\MvcEvent;
 */
class Module
{
    public function onBootstrap(MvcEvent $e)
    {

    }



    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
+82 −1
Original line number Diff line number Diff line
<?php

return [];
 No newline at end of file
namespace Unicaen\BddAdmin;

return [
    'unicaen-bddadmin' => [

        'connection' => [
        ],

        'current_connection' => 'default',

        'ddl' => [
            'dir'                     => 'data/ddl',
            'columns_positions_file'  => 'data/ddl_columns_pos.php',
            'filters'                 => [],
            'update-bdd-filters'      => [],
            'update-ddl-filters'      => [],
            'init-update-bdd-filters' => true,
        ],

        'data' => [
            'actions' => [
                'install' => 'Insertion des données',
                'update'  => 'Contrôle et mise à jour des données',
            ],
            'config'  => [], // configuration par tables
            'sources' => [],
        ],

        'migration' => [
            // array des classes ou services utilisés pour la migration [index => classe ou service, ...]
        ],

        'id_column' => 'id',

        'histo' => [
            'user_id'                      => null,
            'histo_creation_column'        => 'histo_creation',
            'histo_modification_column'    => 'histo_modification',
            'histo_destruction_column'     => 'histo_destruction',
            'histo_createur_id_column'     => 'histo_createur_id',
            'histo_modificateur_id_column' => 'histo_modificateur_id',
            'histo_destructeur_id_column'  => 'histo_destructeur_id',
        ],

        'import' => [
            'source_id'          => null,
            'source_id_column'   => 'source_id',
            'source_code_column' => 'source_code',
        ],
    ],


    'service_manager' => [
        'factories' => [
            Bdd::class                       => BddFactory::class,
            Command\InstallCommand::class    => Command\CommandFactory::class,
            Command\UpdateCommand::class     => Command\CommandFactory::class,
            Command\UpdateDdlCommand::class  => Command\CommandFactory::class,
            Command\UpdateDataCommand::class => Command\CommandFactory::class,
            Command\ClearCommand::class      => Command\CommandFactory::class,
            Command\CopyToCommand::class     => Command\CommandFactory::class,
            Command\CopyFromCommand::class   => Command\CommandFactory::class,
            Command\LoadCommand::class       => Command\CommandFactory::class,
            Command\SaveCommand::class       => Command\CommandFactory::class,
        ],
    ],


    'laminas-cli' => [
        'commands' => [
            'bddadmin:install'     => Command\InstallCommand::class,
            'bddadmin:update'      => Command\UpdateCommand::class,
            'bddadmin:clear'       => Command\ClearCommand::class,
            'bddadmin:update-ddl'  => Command\UpdateDdlCommand::class,
            'bddadmin:update-data' => Command\UpdateDataCommand::class,
            'bddadmin:copy-to'     => Command\CopyToCommand::class,
            'bddadmin:copy-from'   => Command\CopyFromCommand::class,
            'bddadmin:load'        => Command\LoadCommand::class,
            'bddadmin:save'        => Command\SaveCommand::class,
        ],
    ],
];
 No newline at end of file
+152 −0
Original line number Diff line number Diff line
<?php

/*
 * Fichier à copier/coller dans config/autoload/unicaen-bddadmin.global.php
 *
 * Les options commentées ici sont placées pour illustrer les valeurs par défaut
 * A décommenter et modifier le cas échéant
 */

return [
    'unicaen-bddadmin' => [
        'ddl' => [
            /* Répertoire où placer votre DDL */
            //'dir'                    => 'data/ddl',

            /* Nom par défaut du fichier de sauvegarde des positionnements de colonnes */
            //'columns_positions_file' => 'data/ddl_columns_pos.php',

            /* array général des filtres de DDL à appliquer afin d'ignorer ou bien de forcer la prise en compte de certains objets lors de la mise à jour
             * le format d'array doit respecter la spécification des DdlFilters
             * Ce tableau des filtres est utilisé aussi bien en MAJ DDL qu'en MAJ BDD
             */
            'filters'                => [],

            /* array des filtres dédié à la mise à jour de la base de données à partir de la DDL
             * le format d'array doit respecter la spécification des DdlFilters
             * pour les update-bdd, si init-update-bdd-filters est à true :
             * - le mode EXPLICIT est forcé : c'est à dire que ce qui n'est pas spécifié dans le filtre n'existe pas
             * - le filtre est initialisé avec les objets déjà présents en DDL
             * - les tables présentes dans la BD sont ajoutées afin de ne pas être supprimées si elles ne sont pas en DDL (protection contre des suppressions involontaires)
             */
            'update-bdd-filters'     => [],

            /*
             * si true, alors le mode explicit est forcé, le filtre est peuplé avec la DDL + les tables déjà présentes dans la base de données
             * Ce mode est plus sûr.
             * Si false, alors les filtres utilisés seront strictement ceux fournis par filters & update-bdd-filters
             * /!\ Attention /!\ si false : sans aucun filtre, les tables non listées en DDL seront supprimées de la base de données  
             */
            'init-update-bdd-filters' => true,
            
            /* array des filtres dédié à la mise à jour de la DDL, afin d'éviter que ne se retrouvent en DDL certains objets présents en base
             * le format d'array doit respecter la spécification des DdlFilters 
             */
            'update-ddl-filters'     => [],
        ],

        'data' => [
            'config'  => [
                /* array dont le format est le suivant :
                 *
                 * 'nom_de_ma_table => [
                 *     // à adapter, 'install' par exemple pour un jeu de données servant à installer l'appli qui sera paramétré ensuite 
                 *     'actions' => ['install', 'update'],
                 *
                 *     // string|array : liste des colonnes servant à identifier de manière certaine et unique les lignes (par exemple 'code')
                 *     'key' => 'code',
                 *
                 *     // 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 => [
                 *          // permet au besoin de faire des ajouts et des modifs, mais jamais de supprimer ce ui a été ajouté par ailleurs
                 *          'delete' => false,
                 *
                 *          // avec cet exemple la mise à jour du jeu de données ne concernera pas les données saisies dans la colonne ma_col_specifique          
                 *          'update-ignore-cols' => ['ma_col_specifique'],
                 * 
                 *          ...
                 *     ],
                 * ],
                 * ...
                 */
            ],
            'sources' => [
                /* Liste des sources sous forme de tableau
                 * Les valeurs correspondant à des noms de classes PHP qui seront instanciées par le DataManager
                 * Vous pouvez également passer des noms ou alias de services déclarés auprès du serviceManager de Laminas
                 * pour profiter de l'injection de dépendance
                 */
            ],
        ],

        'migration' => [
            /* Liste des scripts de migration sous forme de tableau
             * Les scripts de migration devront tous hériter de la classe abstraite Unicaen\BddAdmin\Migration\MigrationAction
             * Les valeurs correspondant à des noms de classes PHP qui seront instanciées par le DataManager
             * Vous pouvez également passer des noms ou alias de services déclarés auprès du serviceManager de Laminas
             * pour profiter de l'injection de dépendance
             */
        ],

        /* Nom des colonnes servant de clé primaire dans vos tables, généralement 'id' pour la compatibilité avec Doctrine
         * Si des tables n'ont pas de colonne 'id' ou personnalisé, le système fonctionnera sans utiliser les séquences pour initialiser la clé primaire
         */
        //'id_column' => 'id',

        'histo' => [
            /* ID par défaut de l'utilisateur utilisé par le DataManager pour insérer ou modifier les données
             * Peut être fourni ici ou bien dans une factory adaptée en utilisant la méthode suivante :
             *
             * $config = [...config de bddAdmin...];
             * $bdd = new Unicaen\BddAdmin\Bdd($config);
             *
             * $monUsername = 'mon_username';
             * $monId = $bdd->selectOne('SELECT id FROM utilisateur WHERE username=:username', ['username' => $monUsername], 'id');
             * $bdd->setHistoUserId($monId);
             *
             * Si user_id est NULL, cette fonctionnalité d'historisation sera désactivée
             */
            //'user_id'                      => null,

            /* Noms des colonnes utilisées pour gérer les historiques
             * Attention : tous les noms doivent être renseignés ou alors tous mis à NULL si pas de gestion d'historiques
             * Se base par défaut sur ce qui est préconisé pour UnicaenApp\Entity\HistoriqueAwareInterface
             *
             * Si vos tables ne possèdent pas l'ensemble de ces colonnes, la gestion de l'historique ne sera pas appliquée sur celles-ci
             */
            //'histo_creation_column'        => 'histo_creation',
            //'histo_modification_column'    => 'histo_modification',
            //'histo_destruction_column'     => 'histo_destruction',
            //'histo_createur_id_column'     => 'histo_createur_id',
            //'histo_modificateur_id_column' => 'histo_modificateur_id',
            //'histo_destructeur_id_column'  => 'histo_destructeur_id',
        ],

        'import' => [
            /* Compatibilité avec un système d'import de données
             * ID de la source par défaut utilisée par le DataManager pour insérer une ligne d'une table synchronisable
             * Peut être fourni ici ou bien dans une factory adaptée en utilisant la méthode suivante :
             *
             * $config = [...config de bddAdmin...];
             * $bdd = new Unicaen\BddAdmin\Bdd($config);
             *
             * $code = 'ma_source';
             * $monId = $bdd->selectOne('SELECT id FROM source WHERE code=:code', ['code' => $code], 'id');
             * $bdd->setSourceId($monId);
             *
             * Si source_id est NULL, cette fonctionnalité d'initialisation de sources sera désactivée
             *
             */
            //'source_id'          => null,

            /* Noms des colonnes utilisées pour gérer les données liées à l'import depuis d'autres logiciels
             * Attention : tous les noms doivent être renseignés ou alors tous mis à NULL si pas de gestion d'import
             *
             * Si vos tables ne possèdent pas l'ensemble de ces colonnes, la gestion des colonnes d'import ne sera pas appliquée sur celles-ci
             */
            //'source_id_column'   => 'source_id',
            //'source_code_column' => 'source_code',
        ],
    ],
];
 No newline at end of file
+33 −0
Original line number Diff line number Diff line
<?php

/*
 * Fichier à copier/coller dans config/autoload/unicaen-bddadmin.local.php
 */

return [
    'unicaen-bddadmin' => [
        'connection' => [
            'default' => [ // généralement : base de dév, peut s'appeler autrement que 'default'
                'host'     => 'à renseigner ...',
                'port'     => 'à renseigner ...',
                'dbname'   => 'à renseigner ...',
                'user'     => 'à renseigner ...',
                'password' => 'à renseigner ...',
            ],
            /* Autres instances éventuelles de votre base de données
            'preprod' => [
                'host'     => 'à renseigner ...',
                ...
            ],
            'prod' => [
                'host'     => 'à renseigner ...',
                ...
            ],
            ...
            */
        ],

        /* Connexion à utiliser par défaut, nom à sélectionner parmi la liste des connexions disponibles */
        //'current_connection' => 'default',
    ],
];
 No newline at end of file
Loading