|  | @@ -0,0 +1,175 @@
 | 
	
		
			
				|  |  | +<?php
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +namespace App\Controller\Admin;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 | 
	
		
			
				|  |  | +use Symfony\Component\HttpFoundation\Request;
 | 
	
		
			
				|  |  | +use Symfony\Component\HttpFoundation\Response;
 | 
	
		
			
				|  |  | +use Symfony\Component\Routing\Requirement\Requirement;
 | 
	
		
			
				|  |  | +use Symfony\Component\Routing\Attribute\Route;
 | 
	
		
			
				|  |  | +use Doctrine\ORM\EntityManagerInterface;
 | 
	
		
			
				|  |  | +use Symfony\Component\String\Slugger\AsciiSlugger;
 | 
	
		
			
				|  |  | +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +use App\Entity\Gamemaster;
 | 
	
		
			
				|  |  | +use App\Form\GamemasterType;
 | 
	
		
			
				|  |  | +use App\Service\PictureService;
 | 
	
		
			
				|  |  | +use App\Repository\UserRepository;
 | 
	
		
			
				|  |  | +use App\Repository\GamemasterRepository;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +final class GamemasterController extends AbstractController
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    #[Route('/admin/gamemaster', name: 'app_admin_gm', methods: ['GET'])]
 | 
	
		
			
				|  |  | +    public function index(GamemasterRepository $repository): Response
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        $gamemasters = $repository->findAll();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return $this->render('admin/gamemaster/index.html.twig', [
 | 
	
		
			
				|  |  | +            'gamemasters' => $gamemasters
 | 
	
		
			
				|  |  | +        ]);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /*
 | 
	
		
			
				|  |  | +     * Supprimer un jeu
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    #[Route('/admin/gamemaster/{id}/delete', name: 'app_admin_gamemaster_delete', requirements: ['id' => Requirement::UUID_V7], methods: ['GET'])]
 | 
	
		
			
				|  |  | +    public function delete(?Gamemaster $gamemaster, EntityManagerInterface $manager, ParameterBagInterface $params): Response
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        // Effacer toutes images associée
 | 
	
		
			
				|  |  | +        if ($gamemaster->getPicture()) {
 | 
	
		
			
				|  |  | +            $fullPath = $params->get('upload_images_directory') . '/gamemasters/' . $gamemaster->getPicture();
 | 
	
		
			
				|  |  | +            unlink($fullPath);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        $manager->remove($gamemaster);
 | 
	
		
			
				|  |  | +        $manager->flush();
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        $this->addFlash('success', 'Meneur de jeu supprimé avec succès.');
 | 
	
		
			
				|  |  | +        return $this->redirectToRoute('app_admin_gm');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /*
 | 
	
		
			
				|  |  | +     * Supprimer l'image un jeu
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    #[Route('/admin/gamemaster/{id}/del-pic', name: 'app_admin_gamemaster_del_pic', requirements: ['id' => Requirement::UUID_V7], methods: ['GET'])]
 | 
	
		
			
				|  |  | +    public function deletePicture(?Gamemaster $gamemaster, EntityManagerInterface $manager, ParameterBagInterface $params): Response
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        // Effacer toutes images associée
 | 
	
		
			
				|  |  | +        if ($gamemaster->getPicture()) {
 | 
	
		
			
				|  |  | +            $fullPath = $params->get('upload_images_directory') . '/games/' . $gamemaster->getPicture();
 | 
	
		
			
				|  |  | +            unlink($fullPath);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        $gamemaster->setPicture(null);
 | 
	
		
			
				|  |  | +        $manager->flush();
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        $this->addFlash('success', 'Illustration supprimée avec succès.');
 | 
	
		
			
				|  |  | +        return $this->redirectToRoute('app_admin_gamemaster_edit', ['id' => $gamemaster->getId()]);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /* 
 | 
	
		
			
				|  |  | +     * Modifier un jeu
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    #[Route('/admin/gamemaster/{id}/edit', name: 'app_admin_gamemaster_edit', requirements: ['id' => Requirement::UUID_V7], methods: ['GET', 'POST'])]
 | 
	
		
			
				|  |  | +    public function edit(?Gamemaster $gamemaster, Request $request, EntityManagerInterface $manager, PictureService $pictureService): Response
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        $form = $this->createForm(GamemasterType::class, $gamemaster);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        $form->handleRequest($request);
 | 
	
		
			
				|  |  | +        if ($form->isSubmitted() && $form->isValid()) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (!$form->get('preferedName')->getData()) {
 | 
	
		
			
				|  |  | +                $gamemaster->setPreferedName($form->get('firstName')->getData() ." ". $form->get('lastName')->getData());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            $slug = $form->get('slug')->getData();
 | 
	
		
			
				|  |  | +            // Aucun slug n'a été proposé par l'utilisateur
 | 
	
		
			
				|  |  | +            if (!$slug) {
 | 
	
		
			
				|  |  | +                $slugger = new AsciiSlugger('fr_FR');
 | 
	
		
			
				|  |  | +                $slug = $slugger->slug(strtolower($gamemaster->getPreferedName()));
 | 
	
		
			
				|  |  | +                $gamemaster->setSlug($slug);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // Traiter l'image proposée
 | 
	
		
			
				|  |  | +            $tmpPicture = $form->get('picture')->getData();
 | 
	
		
			
				|  |  | +            if ($tmpPicture) {
 | 
	
		
			
				|  |  | +                $picture = $pictureService->square($tmpPicture, '/gamemasters/', $slug);
 | 
	
		
			
				|  |  | +                $gamemaster->setPicture($picture);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            $manager->persist($gamemaster);
 | 
	
		
			
				|  |  | +            $manager->flush();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            $this->addFlash('success', 'Meneur de jeu modifié avec succès.');
 | 
	
		
			
				|  |  | +            return $this->redirectToRoute('app_admin_gm');
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return $this->render('admin/gamemaster/edit.html.twig', [
 | 
	
		
			
				|  |  | +            'form' => $form,
 | 
	
		
			
				|  |  | +            'gamemaster' => $gamemaster,
 | 
	
		
			
				|  |  | +        ]);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /*
 | 
	
		
			
				|  |  | +     * Associer les MJ à leurs comptes utlisateurs s'il existe
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    #[Route('/admin/gamemaster/link', name: 'app_admin_gamemaster_link', methods: ['GET'])]
 | 
	
		
			
				|  |  | +    public function link(EntityManagerInterface $manager, UserRepository $userRepo, GamemasterRepository $gmRepo): Response
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        $linkedAccount = 0;
 | 
	
		
			
				|  |  | +        foreach ($gmRepo->findUnlinked() as $gamemaster) {
 | 
	
		
			
				|  |  | +            $lookUpUser = $userRepo->findByEmail($gamemaster->getEmail());
 | 
	
		
			
				|  |  | +            if ($lookUpUser) {
 | 
	
		
			
				|  |  | +                $gamemaster->setLinkToUser($lookUpUser);
 | 
	
		
			
				|  |  | +                $manager->persist($gamemaster);
 | 
	
		
			
				|  |  | +                $manager->flush();
 | 
	
		
			
				|  |  | +                $linkedAccount++;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        $this->addFlash('success', $linkedAccount.' comptes associés');
 | 
	
		
			
				|  |  | +        return $this->redirectToRoute('app_admin_gm');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /* 
 | 
	
		
			
				|  |  | +     * Ajouter un meneur de jeu
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    #[Route('/admin/gamemaster/add', name: 'app_admin_gamemaster_add', methods: ['GET', 'POST'])]
 | 
	
		
			
				|  |  | +    public function add(Request $request, EntityManagerInterface $manager, PictureService $pictureService): Response
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        $gamemaster = new Gamemaster();
 | 
	
		
			
				|  |  | +        $form = $this->createForm(GamemasterType::class, $gamemaster);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        $form->handleRequest($request);
 | 
	
		
			
				|  |  | +        if ($form->isSubmitted() && $form->isValid()) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (!$form->get('preferedName')->getData()) {
 | 
	
		
			
				|  |  | +                $gamemaster->setPreferedName($form->get('firstName')->getData() ." ". $form->get('lastName')->getData());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            $slug = $form->get('slug')->getData();
 | 
	
		
			
				|  |  | +            // Aucun slug n'a été proposé par l'utilisateur
 | 
	
		
			
				|  |  | +            if (!$slug) {
 | 
	
		
			
				|  |  | +                $slugger = new AsciiSlugger('fr_FR');
 | 
	
		
			
				|  |  | +                $slug = $slugger->slug(strtolower($gamemaster->getPreferedName()));
 | 
	
		
			
				|  |  | +                $gamemaster->setSlug($slug);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // Traiter l'image proposée
 | 
	
		
			
				|  |  | +            $tmpPicture = $form->get('picture')->getData();
 | 
	
		
			
				|  |  | +            if ($tmpPicture) {
 | 
	
		
			
				|  |  | +                $picture = $pictureService->square($tmpPicture, '/gamemasters/', $slug);
 | 
	
		
			
				|  |  | +                $gamemaster->setPicture($picture);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            $manager->persist($gamemaster);
 | 
	
		
			
				|  |  | +            $manager->flush();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            $this->addFlash('success', 'Meneur de jeu ajouté avec succès.');
 | 
	
		
			
				|  |  | +            return $this->redirectToRoute('app_admin_gm');
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return $this->render('admin/gamemaster/edit.html.twig', [
 | 
	
		
			
				|  |  | +            'form' => $form,
 | 
	
		
			
				|  |  | +            'gamemaster' => $gamemaster,
 | 
	
		
			
				|  |  | +        ]);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |