src/Controller/ThemeController.php line 275
<?phpnamespace App\Controller;use App\Repository\ThemeSousCategorieRepository;use App\Repository\ThemeCategorieRepository;use App\Repository\ThemeRepository;use Symfony\Component\HttpFoundation\Request;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\HttpFoundation\File\File;use Symfony\Component\HttpFoundation\File\UploadedFile;use App\Entity\Theme;use App\Entity\ThemeSousCategorie;use Doctrine\ORM\EntityManagerInterface;class ThemeController extends AbstractController{#[Route('/theme/index', name: 'app_theme')]public function index(ThemeSousCategorieRepository $themeSousCategorieRepository, ThemeCategorieRepository $themeCategorieRepository): Response{$sousCategories = $themeSousCategorieRepository->findAll();$themeCategories = $themeCategorieRepository->findAll();return $this->render('theme/index.html.twig', ['sous_categories' => $sousCategories,'theme_categories' => $themeCategories,]);}#[Route('/theme/list', name: 'app_theme_list')]public function list(ThemeRepository $themeRepository): Response{$themes = $themeRepository->findBy([], ['id' => 'DESC'], 200);//$themes = $themeRepository->findAll();return $this->render('theme/list.html.twig', ['themes' => $themes,]);}#[Route('/theme/manuelle', name: 'app_theme_manuelle')]public function manuelle(ThemeSousCategorieRepository $themeSousCategorieRepository, ThemeCategorieRepository $themeCategorieRepository): Response{$sousCategories = $themeSousCategorieRepository->findAll();$themeCategories = $themeCategorieRepository->findAll();return $this->render('theme/manuelle.html.twig', ['sous_categories' => $sousCategories,'theme_categories' => $themeCategories,]);}#[Route('/theme/delete/{id}', name: 'app_theme_delete')]public function delete(Request $request, ThemeRepository $themeRepository, $id, EntityManagerInterface $entityManager): Response{$theme = $themeRepository->find($id);if (!$theme) {return $this->json(['error' => 'Le thème spécifié n\'existe pas.'], Response::HTTP_NOT_FOUND);}$entityManager->remove($theme);$entityManager->flush();//redirect to listreturn $this->redirectToRoute('app_theme_list');}#[Route('/theme/save', name: 'app_theme_save')]public function saveData(Request $request, ThemeRepository $themeRepository, ThemeSousCategorieRepository $themeSousCategorieRepository): Response{$data = json_decode($request->getContent(), true);$uniqueId = $data['ref'];$existingTheme = $themeRepository->findOneBy(['ref' => $uniqueId]);if ($existingTheme) {return $this->json(['code' => 'error','message' => 'non unique']);}// Créer le répertoire s'il n'existe pas$outputDirectory = $this->getParameter('kernel.project_dir') . '/public/theme/' . $uniqueId;if (!file_exists($outputDirectory)) {mkdir($outputDirectory, 0755, true);}$base64Image = $data['image'];$outputFile = $outputDirectory . '/image.png';$this->saveBase64AsImage($base64Image, $outputFile);// Enregistrer toutes les miniatures non vides$miniatures = $data['miniatures'];foreach ($miniatures as $miniatureName => $base64Miniature) {if (!empty($base64Miniature)) {$outputMiniatureFile = $outputDirectory . '/' . $miniatureName . '.png';$this->saveBase64AsImage($base64Miniature, $outputMiniatureFile);}}// Convertir le tableau des positions en chaîne JSON$textData = json_encode($data['positions']);// Traiter les données reçues (sauvegarde en base de données, etc.)$theme = new Theme();$sousCategorieId = $data['sousCategorie'];$sousCategorie = $themeSousCategorieRepository->find($sousCategorieId);$theme->setRef($uniqueId);$theme->setSoussCategorie($sousCategorie);$theme->setImageData('theme/' . $uniqueId . '/image.png');$theme->setTextData($textData);// Vérifier si la miniature est présente avant de l'enregistrerif (!empty($data['miniatures']['eco40'])) {$theme->setEco40('theme/' . $uniqueId . '/eco40.png');}if (!empty($data['miniatures']['eco180'])) {$theme->setEco180('theme/' . $uniqueId . '/eco180.png');}if (!empty($data['miniatures']['eco200'])) {$theme->setEco200('theme/' . $uniqueId . '/eco200.png');}if (!empty($data['miniatures']['eco300'])) {$theme->setEco300('theme/' . $uniqueId . '/eco300.png');}if (!empty($data['miniatures']['eco400'])) {$theme->setEco400('theme/' . $uniqueId . '/eco400.png');}if (!empty($data['miniatures']['eco500'])) {$theme->setEco500('theme/' . $uniqueId . '/eco500.png');}if (!empty($data['miniatures']['ecovin'])) {$theme->setEcovin('theme/' . $uniqueId . '/ecovin.png');}$themeRepository->save($theme, true);// Retourner une réponse JSON avec un message de succèsreturn $this->json(['code' => 'ok','message' => 'Données sauvegardées avec succès']);}#[Route('/theme/save/manuelle', name: 'app_theme_save_manuelle')]public function saveDataManuelle(Request $request, ThemeRepository $themeRepository, ThemeSousCategorieRepository $themeSousCategorieRepository): Response{$data = json_decode($request->getContent(), true);$uniqueId = $data['ref'];$theme = $themeRepository->findOneBy(['ref' => $uniqueId]);// Créer le répertoire s'il n'existe pas$outputDirectory = $this->getParameter('kernel.project_dir') . '/public/theme/' . $uniqueId;if (!file_exists($outputDirectory)) {mkdir($outputDirectory, 0755, true);}// Enregistrer toutes les miniatures non vides$miniatures = $data['miniatures'];foreach ($miniatures as $miniatureName => $base64Miniature) {if (!empty($base64Miniature)) {$outputMiniatureFile = $outputDirectory . '/' . $miniatureName . '.png';$this->saveBase64AsImage($base64Miniature, $outputMiniatureFile);}}if ($theme) {// Si le thème existe déjà, mettez à jour ses miniaturesif (!empty($data['miniatures']['eco180'])) {$theme->setEco180('theme/' . $uniqueId . '/eco180.png');}if (!empty($data['miniatures']['eco200'])) {$theme->setEco200('theme/' . $uniqueId . '/eco200.png');}if (!empty($data['miniatures']['eco300'])) {$theme->setEco300('theme/' . $uniqueId . '/eco300.png');}if (!empty($data['miniatures']['eco400'])) {$theme->setEco400('theme/' . $uniqueId . '/eco400.png');}if (!empty($data['miniatures']['eco500'])) {$theme->setEco500('theme/' . $uniqueId . '/eco500.png');}if (!empty($data['miniatures']['ecovin'])) {$theme->setEcovin('theme/' . $uniqueId . '/ecovin.png');}} else {// Si le thème n'existe pas, créez un nouveau thème$theme = new Theme();$sousCategorieId = $data['sousCategorie'];$sousCategorie = $themeSousCategorieRepository->find($sousCategorieId);$theme->setRef($uniqueId);$theme->setSoussCategorie($sousCategorie);// Convertir le tableau des positions en chaîne JSON$textData = json_encode($data['positions']);$theme->setTextData($textData);$imageData = json_encode(($data['image']));$theme->setImageData($imageData);foreach ($miniatures as $miniatureName => $base64Miniature) {if (!empty($base64Miniature)) {$setterMethod = 'set' . ucfirst($miniatureName);$theme->$setterMethod('theme/' . $uniqueId . '/' . $miniatureName . '.png');}}}//$base64Image = $data['image'];//$outputFile = $outputDirectory . '/image.png';//$this->saveBase64AsImage($base64Image, $outputFile);//$theme->setImageData('theme/' . $uniqueId . '/image.png');$themeRepository->save($theme, true);// Retourner une réponse JSON avec un message de succèsreturn $this->json(['code' => 'ok','message' => 'Données sauvegardées avec succès']);}private function saveBase64AsImage($base64, $outputFile){$data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $base64));file_put_contents($outputFile, $data);}#[Route('/search/theme', name: 'app_theme_search', methods: ['GET'])]public function search(Request $request, ThemeRepository $themeRepository): Response{$searchTerm = $request->query->get('search');$themes = $themeRepository->findBySearchTerm($searchTerm);return new Response($this->renderView('theme/_search_results.html.twig', ['themes' => $themes,]));}#[Route('/{id}', name: 'app_theme_show', methods: ['GET'])]public function show(Theme $theme): Response{return $this->render('theme/show.html.twig', ['theme' => $theme,]);}/*#[Route('theme/moulinette', name: 'app_theme_moulinette', methods: ['GET'])]public function moulinette(EntityManagerInterface $entityManager): Response{$themes = $entityManager->getRepository(Theme::class)->findThemesBySousCategorie('ANIMAUX CUTE');$validation = []; // Initialisation de la variable de validationforeach ($themes as $theme) {$modifier = true; // Réinitialiser pour chaque thème$data = json_decode($theme->getTextData(), true);if ($data) {$count = count($data);$orientations = ["gauche", "droite", "centre"];for ($i = 0; $i < $count; $i++) {// Vérifier si 'orientationText' existe déjà avant de modifierif (!isset($data[$i]['orientationText'])) {$data[$i]['orientationText'] = $orientations[$i % 3];} else {$modifier = false;}}if ($modifier) {$theme->setTextData(json_encode($data));$entityManager->persist($theme);}// Stocker les informations de validation$validation[] = ['id' => $theme->getId(),'text_data' => json_encode($data),'modifie' => $modifier];}}//test validation//dd($validation);$entityManager->flush();return new Response('terminé');}*/}