Commit f5f6894c authored by Jean-Baptiste Oellers's avatar Jean-Baptiste Oellers
Browse files

Ajout vérification des migrations doctrine dans les check:config

parent 92cecd3e
Loading
Loading
Loading
Loading
Loading
+3 −8
Original line number Diff line number Diff line
@@ -411,17 +411,12 @@ return array(

                    // On ne "cache" la table doctrine_migration_versions que pour
                    //   - la commande doctrine-module orm:schema-tool:update
                    //   - la commande check:config
                    //   - la page admin qui vérifie la configuration : /administration/check_config
                    // parce que sinon, si les commandes de doctrine migration ne voient plus cette table
                    // alors elles essaient de la recréer à chaque fois et elles échouent car la table existe déjà.
                    if ((!isset($_SERVER['REQUEST_URI'])
                        || $_SERVER['REQUEST_URI'] !== "/administration/check_config")
                        && (!isset($_SERVER['argv'])
                    if (!isset($_SERVER['argv'])
                        || !is_array($_SERVER['argv'])
                        || (!in_array('check:config', $_SERVER['argv'], true) &&
                            (!in_array('vendor/bin/doctrine-module', $_SERVER['argv'], true)
                            || !in_array('orm:schema-tool:update', $_SERVER['argv'], true))))) {
                        || !in_array('vendor/bin/doctrine-module', $_SERVER['argv'], true)
                        || !in_array('orm:schema-tool:update', $_SERVER['argv'], true)) {
                        return true;
                    }

+18 −0
Original line number Diff line number Diff line
@@ -283,6 +283,21 @@ class OscarCheckConfigCommand extends OscarCommandAbstract
                $io->writeln("<green>OK</green>");
            }

            $io->write(" - Migrations ");
            $doctrine_migration_config = new \Doctrine\Migrations\Configuration\Migration\PhpFile(__DIR__ . '/../../../../../migrations.php');
            $doctrine_migration_dependency_factory = \Doctrine\Migrations\DependencyFactory::fromEntityManager($doctrine_migration_config, new \Doctrine\Migrations\Configuration\EntityManager\ExistingEntityManager($em));
            $db_available_new_migrations = $doctrine_migration_dependency_factory->getMigrationStatusCalculator()->getNewMigrations();
            if (count($db_available_new_migrations->getItems()) > 0) {
                $io->warning("Obsolète. Migrations en attente :");
                foreach ($db_available_new_migrations->getItems() as $db_available_new_migration) {
                    $io->warning(" - " . $db_available_new_migration->getVersion());
                }
                $io->error("EXECUTER vendor/bin/doctrine-migrations migrate");
                return self::FAILURE;
            } else {
                $io->writeln("<green>OK</green>");
            }

            $validator = new SchemaValidator($em);
            $errors = $validator->validateMapping();

@@ -290,6 +305,9 @@ class OscarCheckConfigCommand extends OscarCommandAbstract
            $tool = new \Doctrine\ORM\Tools\SchemaTool($em);
            $saveMode = false;
            $db_model_updates = $tool->getUpdateSchemaSql($classes, $saveMode);
            $db_model_updates = array_filter($db_model_updates, static function ($element) {
                return $element !== "DROP TABLE doctrine_migration_versions";
            });
            if (count($db_model_updates) > 0) {
                $errors[] = 'Modèle de donnée obsolète';
            }
+21 −10
Original line number Diff line number Diff line
@@ -109,6 +109,7 @@ class AdministrationCheckConfigController extends AbstractOscarController
        $db_model_error = NULL;
        $db_database_error = NULL;
        $db_model_updates = [];
        $db_available_new_migrations = [];

        // ERREURS dans le SCHEMA
        try {
@@ -133,14 +134,23 @@ class AdministrationCheckConfigController extends AbstractOscarController
            }
            // $cmf     = $this->getEntityManager()->getMetadataFactory();
            // $classes = $cmf->getAllMetadata();
//

            // $tool = new \Doctrine\ORM\Tools\SchemaTool($this->getEntityManager());
            // $saveMode = false;
            // $db_model_updates = $tool->getUpdateSchemaSql($classes, $saveMode);
//

            // $db_model_updates = array_filter($db_model_updates, static function ($element) {
            //     return $element !== "DROP TABLE doctrine_migration_versions";
            // });

            // if (count($db_model_updates) > 0) {
            //    $db_model_error = 'EXECUTER : php vendor/bin/doctrine-module orm:schema-tool:update --force';
            // }

            $doctrine_migration_config = new \Doctrine\Migrations\Configuration\Migration\PhpFile(__DIR__ . '/../../../../../migrations.php');
            $doctrine_migration_dependency_factory = \Doctrine\Migrations\DependencyFactory::fromEntityManager($doctrine_migration_config, new \Doctrine\Migrations\Configuration\EntityManager\ExistingEntityManager($this->getEntityManager()));
            $db_available_new_migrations = $doctrine_migration_dependency_factory->getMigrationStatusCalculator()->getNewMigrations();

        } catch (\Exception $e) {
            $db_model_error = "ERROR VALIDATION SCHEMA : " . $e->getMessage();
            $db_database_error = "non testé";
@@ -358,6 +368,7 @@ class AdministrationCheckConfigController extends AbstractOscarController
            'db_model_error' => $db_model_error,
            'db_database_error' => $db_database_error,
            'db_model_updates' => $db_model_updates,
            'db_available_new_migrations' => $db_available_new_migrations,
            'files' => $files,
            'mailer_error' => $mailer_error,
            'mailer_url_absolute' => $mailer_url_absolute,
+17 −1
Original line number Diff line number Diff line
@@ -75,7 +75,23 @@
    <?php endif; ?>

    <ul>
        <li>Modèle de donnée <?php if(!$db_model_error): ?><b style="color: green;">OK</b><?php else: ?><b style="color: red;">Erreur</b><?php endif; ?></li>
        <li>Modèle de donnée <?php if(!$db_model_error && count($db_available_new_migrations) == 0): ?><b style="color: green;">OK</b><?php else: ?><b style="color: red;">Erreur</b><?php endif; ?></li>
    </ul>
    <?php if(count($db_available_new_migrations->getItems()) > 0): ?>
        <article class="card xsc repport repport-error">
            <i class="icon-repport"></i> <?= count($db_available_new_migrations->getItems()) ?> migration(s) en attente. <b>EXECUTER vendor/bin/doctrine-migrations migrate</b>
            <br />
            <br />
            <p>Détail des migrations qui seront réalisées par la commande :</p>
            <ul>
                <?php foreach( $db_available_new_migrations->getItems() as $migration ): ?>
                    <li><?= $migration->getVersion() ?></li>
                <?php endforeach; ?>
            </ul>
        </article>
    <?php endif; ?>

    <ul>
        <li>Base de données <?php if(!$db_database_error): ?>
                <b style="color: green;">OK</b>
            <?php else: ?>