<?php
namespace App\Command;
use App\Controller\MoulinetteController;
use App\Entity\Adherent\FicheServices;
use App\Entity\Adherent\Magasin;
use App\Entity\Adherent\MagasinCommunication;
use App\Entity\Adherent\Specialite;
use App\Entity\Webfactory\WebfactoryCustomPage;
use App\Entity\Webfactory\WebfactoryPage;
use App\Entity\Webfactory\WebfactoryWidget;
use App\Entity\Webfactory\Widget\Createur\Teams;
use App\Entity\Webfactory\Widget\WidgetAbstract;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ConfirmationQuestion;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Process\Process;
#[AsCommand(
name: 'app:init-refonte',
description: 'Effectue les migrations et moulinettes pour le lancement de la refonte',
)]
class InitRefonte extends Command
{
public function __construct(private readonly EntityManagerInterface $entityManager, private readonly ParameterBagInterface $parameterBag)
{
parent::__construct();
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title('Lancement de la refonte');
$moulinetteController = new MoulinetteController($this->entityManager, $this->parameterBag);
$io->section('Migration générale');
$this->runCommand('Migration générale', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\VersionRefonteGeneral', '--up'], $output);
$io->section('Migration Notifications');
$this->runCommand('Migration Notifications', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\Version_notifications', '--up'], $output);
$io->section('Mise à jour de la structure des cannaux de communication');
$moulinetteController->majCanauxCommunication(true, $output);
$io->section('Mise à jour de la structure des consentements des services et spécialités');
$moulinetteController->copyConsentementServicesSpecInfosCompl(true, $output);
$io->section('Mise à jour de la structure des convictions');
$moulinetteController->updateConvictions(true, $output);
$io->section('Migration pour insertion des images génériques');
$this->runCommand('Migration images génériques', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\VersionImagesGeneriques', '--up'], $output);
$io->section('Mise à jour de la structure des images _1');
$moulinetteController->updateImagesOpcSructure(true, $output);
$io->section('Mise à jour de la structure des images _2');
$moulinetteController->updateImageCommunicationPrint(true, $output);
$io->section('Migration Jauge taux de remplissage');
$this->runCommand('Migration Jauge taux de remplissage', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\VersionRefonteJaugeOpc', '--up'], $output);
$io->section('Mise à jour de la structure des réseaux');
$this->runCommand('Migration structure des réseaux', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\VersionRefonteMagasinReseaux', '--up'], $output);
$io->section('Mise à jour des tables pour la modération progress');
$this->runCommand('Migration structure des tables pour modération', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\Version_moderation', '--up'], $output);
$io->section('Mise à jour de la structure des spécialités');
$this->updateImagesSpecialtes($output);
$helper = $this->getHelper('question');
$question = new ConfirmationQuestion("
Avant de continuer : Vérifier que les widgets Verbatims on bien été exporté.\n
Si ce n'est pas le cas :\n
Export verbatim classique : SELECT wa.magasin AS magasin, wa.page_custom_id AS page_custom_id, wa.page_id AS page_id, wa.lang, wa.discr AS disc, wa.widget_id AS widget_identifier, wbc.id as widget_id, wbc.author AS author, mc.conviction FROM widget_abstract wa LEFT JOIN webfactory_page wp ON wa.page_id = wp.identifier LEFT JOIN webfactory_widget ww ON wa.widget_id = ww.identifier LEFT JOIN widget_verbatim_classique wbc ON wa.id = wbc.id LEFT JOIN magasin_conviction mc ON wbc.conviction_id = mc.id WHERE ww.identifier = 'verbatim' AND wa.theme = 'Classique' dans public/documents nom : widgets_verbatim_classique.csv
Export verbatim créateur : SELECT wa.magasin AS magasin, wa.page_custom_id AS page_custom_id, wa.page_id AS page_id, wa.lang, wa.discr AS disc, wa.widget_id AS widget_identifier, wbc.id as widget_id, wbc.author AS author, mc.conviction FROM widget_abstract wa LEFT JOIN webfactory_page wp ON wa.page_id = wp.identifier LEFT JOIN webfactory_widget ww ON wa.widget_id = ww.identifier LEFT JOIN widget_verbatim_createur wbc ON wa.id = wbc.id LEFT JOIN magasin_conviction mc ON wbc.conviction_id = mc.id WHERE ww.identifier = 'verbatim' AND wa.theme = 'Createur' dans public/documents nom : widgets_verbatim_createur.csv
", false);
if (!$helper->ask($input, $output, $question)) {
$io->section('Migration structure widgets Verbatim');
$this->runCommand('Migration widgets Verbatim', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\VersionWidgetsVerbatim', '--up'], $output);
$io->section('Réinsertion des widgets verbatim');
$moulinetteController->insertWidgetsVerbatims($output);
$io->section('Migration info bulles');
$this->runCommand('Migration info bulles', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\VersionRefonteInfosBulles', '--up'], $output);
$this->runCommand('Migration Last', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\VersionLast', '--up'], $output);
}
$io->section('Mise à jour de la structure des articles (encart)');
$this->runCommand('Migration structure des tables pour les articles', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\Version_update_articles', '--up'], $output);
$this->runCommand('Migration structure des tables pour les articles', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\Version_article_color', '--up'], $output);
$io->section('Ajout de la description personalisée des marques');
$this->runCommand('Migration structure des tables pour la description personalisée des marques', ['php', 'bin/console', 'doctrine:migration:execute', 'DoctrineMigrations\Version_description_personalisee_marque', '--up'], $output);
$output->writeln([
'<info>Commande terminée</>',
'<info>==========================</>'
]);
return Command::SUCCESS;
}
// Execute une commande
private function runCommand($name, array $arguments = [], OutputInterface $output): void
{
$process = new Process($arguments);
$process->run(function ($type, $buffer) use ($output) {
$output->write($buffer);
});
if (!$process->isSuccessful()) {
throw new \RuntimeException(sprintf('Erreur lors de l\'exécution de la commande'));
} else {
$output->writeln('Commande ' . $name . ' OK');
}
}
// Enleve les .svg sur les images des spécialités
private function updateImagesSpecialtes($output)
{
$specialites = $this->entityManager->getRepository(Specialite::class)->findAll();
foreach ($specialites as $spe) {
if (!is_null($spe->getSvg())) {
$spe->setSvg(str_replace('.svg', '', $spe->getSvg()));
$this->entityManager->persist($spe);
}
}
$this->entityManager->flush();
$output->writeln('Update des spécialités OK');
}
}