From f50f2f87f547d34e4b5869992d7bfa12d6fa9e54 Mon Sep 17 00:00:00 2001 From: Tykayn Date: Sun, 29 Jun 2025 10:09:47 +0200 Subject: [PATCH] fix charset place PDO --- config/packages/doctrine.yaml | 3 +++ migrations/Version20250629080450.php | 35 ++++++++++++++++++++++++++++ src/Controller/AdminController.php | 26 +++++++++++++++++---- 3 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 migrations/Version20250629080450.php diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index d42c52d..d8fd9aa 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -1,6 +1,9 @@ doctrine: dbal: url: '%env(resolve:DATABASE_URL)%' + options: + 1002: "SET NAMES utf8mb4" + 1000: true # IMPORTANT: You MUST configure your server version, # either here or in the DATABASE_URL env var (see .env file) diff --git a/migrations/Version20250629080450.php b/migrations/Version20250629080450.php new file mode 100644 index 0000000..3d3b6d2 --- /dev/null +++ b/migrations/Version20250629080450.php @@ -0,0 +1,35 @@ +addSql(<<<'SQL' + ALTER TABLE place CHANGE email email VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE note note VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE name name VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE note_content note_content VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE street street VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE housenumber housenumber VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE siret siret VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE osm_user osm_user VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE email_content email_content LONGTEXT CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci` + SQL); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql(<<<'SQL' + ALTER TABLE place CHANGE email email VARCHAR(255) DEFAULT NULL, CHANGE note note VARCHAR(255) DEFAULT NULL, CHANGE name name VARCHAR(255) DEFAULT NULL, CHANGE note_content note_content VARCHAR(255) DEFAULT NULL, CHANGE street street VARCHAR(255) DEFAULT NULL, CHANGE housenumber housenumber VARCHAR(255) DEFAULT NULL, CHANGE siret siret VARCHAR(255) DEFAULT NULL, CHANGE osm_user osm_user VARCHAR(255) DEFAULT NULL, CHANGE email_content email_content LONGTEXT DEFAULT NULL + SQL); + } +} diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 0fb0ea1..144ff6f 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -221,6 +221,17 @@ final class AdminController extends AbstractController $this->entityManager->persist($stats); $this->entityManager->flush(); + // Générer les contenus d'email après le flush pour éviter les problèmes de mémoire + $placesToUpdate = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code]); + foreach ($placesToUpdate as $place) { + if (!$place->getEmailContent()) { + $emailContent = $this->twig->render('admin/email_content.html.twig', ['place' => $place]); + $place->setEmailContent($emailContent); + $this->entityManager->persist($place); + } + } + $this->entityManager->flush(); + $message = 'Labourage terminé avec succès. ' . $processedCount . ' nouveaux lieux traités.'; if ($updateExisting) { $message .= ' ' . $updatedCount . ' lieux existants mis à jour pour la zone ' . $stats->getName() . ' (' . $stats->getZone() . ').'; @@ -574,10 +585,6 @@ final class AdminController extends AbstractController $stats->addPlace($place); $processedCount++; - // Générer le contenu de l'email avec le template - $emailContent = $this->twig->render('admin/email_content.html.twig', ['place' => $place]); - $place->setEmailContent($emailContent); - // Log des objets non trouvés $notFoundOsmKeys[] = $osmKey; } elseif ($updateExisting) { @@ -665,6 +672,17 @@ final class AdminController extends AbstractController $this->entityManager->flush(); $this->entityManager->clear(); + // Générer les contenus d'email après le flush pour éviter les problèmes de mémoire + $placesToUpdate = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code]); + foreach ($placesToUpdate as $place) { + if (!$place->getEmailContent()) { + $emailContent = $this->twig->render('admin/email_content.html.twig', ['place' => $place]); + $place->setEmailContent($emailContent); + $this->entityManager->persist($place); + } + } + $this->entityManager->flush(); + // NETTOYAGE D'UNICITÉ des Places après le clear pour éliminer les doublons persistants // Approche en deux étapes pour éviter l'erreur MySQL "target table for update in FROM clause"