src/Controller/RapperController.php line 86

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ClientNotification;
  4. use App\Entity\NotificationType;
  5. use App\Entity\Rapper;
  6. use App\Form\Type\RapperType;
  7. use App\Repository\BattleRepository;
  8. use App\Repository\ClientNotificationRepository;
  9. use App\Repository\ClientRepository;
  10. use App\Repository\CrewRepository;
  11. use App\Repository\RapperRepository;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\Form\Extension\Core\Type\FormType;
  14. use Symfony\Component\Form\Form;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Security\Core\Security;
  20. use Symfony\UX\Cropperjs\Factory\CropperInterface;
  21. use Symfony\UX\Cropperjs\Form\CropperType;
  22. use Vich\UploaderBundle\Form\Type\VichImageType;
  23. class RapperController extends AbstractController
  24. {
  25.     private RapperRepository $rapperRepository;
  26.     private BattleRepository $battleRepository;
  27.     private ClientRepository $clientRepository;
  28.     private CrewRepository $crewRepository;
  29.     private UserDataController $userDataController;
  30.     private FrontendController $frontendController;
  31.     private ClientNotificationRepository $clientNotificationRepository;
  32.     public function __construct(
  33.         RapperRepository $rapperRepository,
  34.         BattleRepository $battleRepository,
  35.         ClientRepository $clientRepository,
  36.         CrewRepository $crewRepository,
  37.         FrontendController $frontendController,
  38.         UserDataController $userDataController,
  39.         ClientNotificationRepository $clientNotificationRepository
  40.     )
  41.     {
  42.         $this->rapperRepository=$rapperRepository;
  43.         $this->battleRepository=$battleRepository;
  44.         $this->clientRepository=$clientRepository;
  45.         $this->userDataController $userDataController;
  46.         $this->frontendController $frontendController;
  47.         $this->crewRepository $crewRepository;
  48.         $this->clientNotificationRepository $clientNotificationRepository;
  49.     }
  50.     #[Route(path:  [
  51.         'cs' => '/raperi',
  52.         'en' => '/rappers'
  53.     ], name'rappers')]
  54.     public function frontendRappersAction(): Response
  55.     {
  56.         $user $this->getUser();
  57.         $allRappers $this->rapperRepository->findAll();
  58.         if ($user==null){
  59.             return $this->render('pages/rappers.html.twig',[
  60.                 "rappers"=>$allRappers
  61.             ]);
  62.         }else{
  63.             $client $this->clientRepository->findOneByEmail($user->getUserIdentifier());
  64.             if($client!=null && $client->isIsActive()){
  65.                 return $this->render('pages/rappers.html.twig',[
  66.                     'userData'=>$this->userDataController->getUserData(),
  67.                     'rappers'=>$allRappers
  68.                 ]);
  69.             }else{
  70.                 return $this->render('pages/non-active-content.html.twig',[
  71.                     'userData'=>$this->userDataController->getUserData(),
  72.                     'rappers'=>$allRappers
  73.                 ]);
  74.             }
  75.         }
  76.     }
  77.     #[Route(path:  [
  78.         'cs' => '/raper/{id}',
  79.         'en' => '/rapper/{id}'
  80.     ], name'rapperDetail')]
  81.     public function frontendRapperDetailAction($id): Response
  82.     {
  83.         $user $this->getUser();
  84.         $rapper $this->rapperRepository->findOneBy(['id'=>$id]);
  85.         $latestBattles = [];
  86.         $openedBattles = [];
  87.         if($rapper!=null){
  88.             if($this->battleRepository->findLatestForRapper($rapper,6)!=null){
  89.                 $latestBattles=$this->battleRepository->findLatestForRapper($rapper,6);
  90.             }
  91.             if($this->battleRepository->findOpenedForRapper($rapper,6)!=null){
  92.                 $openedBattles $this->battleRepository->findOpenedForRapper($rapper,6);
  93.             }
  94.         }
  95.         if ($user==null){
  96.             return $this->render('pages/rapper-detail.html.twig',[
  97.                 "rapper"=>$rapper,
  98.                 "latestBattles"=>$latestBattles,
  99.                 "openedBattles"=>$openedBattles
  100.             ]);
  101.         }else{
  102.             $client $this->clientRepository->findOneByEmail($user->getUserIdentifier());
  103.             if($client!=null && $client->isIsActive()){
  104.                 return $this->render('pages/rapper-detail.html.twig',[
  105.                     'userData'=>$this->userDataController->getUserData(),
  106.                     "rapper"=>$rapper,
  107.                     "latestBattles"=>$latestBattles,
  108.                     "openedBattles"=>$openedBattles
  109.                 ]);
  110.             }else{
  111.                 return $this->render('pages/non-active-content.html.twig',[
  112.                     'userData'=>$this->userDataController->getUserData(),
  113.                     "rapper"=>$rapper,
  114.                     "latestBattles"=>$latestBattles,
  115.                     "openedBattles"=>$openedBattles
  116.                 ]);
  117.             }
  118.         }
  119.     }
  120.     #[Route(path'/rapper-create'name'rapperCreate'methods: ['POST'])]
  121.     public function frontendRapperCreateAction(CropperInterface $cropperRequest $request): Response
  122.     {
  123.         $data $request->request->all();
  124.         $user $this->getUser();
  125.         $client $this->clientRepository->findOneByEmail($user->getUserIdentifier());
  126.         $avatar $request->files->get('avatarFile');
  127.         $crew null;
  128.         if(intval($data['crew'])!==0){
  129.             $crew $this->crewRepository->findOneBy(['id'=>intval($data['crew'])]);
  130.         }
  131.         $newRapper = new Rapper();
  132.         $form=$this->createForm(RapperType::class,$newRapper);
  133.         $form->handleRequest($request);
  134.         if($form->isSubmitted() && $form->isValid()) {
  135.             $newRapper
  136.                 ->setClient($client)
  137.                 ->setRank(500)
  138.                 ->setPseudoname($data['rapper']['pseudoname'])
  139.                 ->setRapperStyle($data['rapper']['rapperStyle'])
  140.                 ->setBio($data['rapper']['bio'])
  141.                 ->setCreatedAt(new \DateTime('now'))
  142.                 ->setUpdatedAt(new \DateTime('now'));
  143.             if($crew!=null){
  144.                 $newRapper->setCrew($crew);
  145.             }
  146.             if($this->rapperRepository->save($newRapper,true)) {
  147.                 return $this->redirectToRoute("profile");
  148.             }
  149.         }
  150.         return $this->redirectToRoute("errorPage");
  151.     }
  152.     #[Route(path'/rapper-edit'name'rapperEdit'methods: ['POST'])]
  153.     public function frontendRapperEditAction(Request $request): Response
  154.     {
  155.         $data $request->request->all();
  156.         $user $this->getUser();
  157.         $client $this->clientRepository->findOneByEmail($user->getUserIdentifier());
  158.         $avatarNew $request->files->get('avatarFile');
  159.         var_dump($data);
  160.         $editRapper $client->getRapper();
  161.         $form $this->createForm(RapperType::class, $editRapper);
  162.         $form->handleRequest($request);
  163.         $crewId=null;
  164.         $crew null;
  165.         if(isset($data['rapper']['crew'])){
  166.             $crewId=$data['rapper']['crew'];
  167.         }
  168.         $foundCrew=$this->crewRepository->findOneBy(["id"=>$crewId]);
  169.         if($foundCrew!=null){
  170.             $crew $foundCrew;
  171.         }
  172.         if ($form->isSubmitted() && $form->isValid()) {
  173.             $editRapper
  174.                 ->setClient($client)
  175.                 ->setRank($editRapper->getRank())
  176.                 ->setPseudoname($data['rapper']['pseudoname'])
  177.                 ->setRapperStyle($data['rapper']['rapperStyle'])
  178.                 ->setBio($data['rapper']['bio'])
  179.                 ->setCrew($crew)
  180.                 ->setUpdatedAt(new \DateTime('now'));
  181.         }
  182.         if($this->rapperRepository->save($editRapper,true)){
  183.             return $this->redirectToRoute('profile');
  184.         }else{
  185.             return new Response("Error"Response::HTTP_BAD_REQUEST);
  186.         }
  187.     }
  188.     #[Route(path'/rapper-avatar-upload'name'rapperUploadAvatar'methods: ['POST'])]
  189.     public function frontendRapperUploadAvatarAction(Request $request): JsonResponse
  190.     {
  191.         $data $request->request->all();
  192.         $user $this->getUser();
  193.         $client $this->clientRepository->findOneByEmail($user->getUserIdentifier());
  194.         $avatarNew $request->files->get('avatarFile');
  195.         $editRapper $client->getRapper();
  196.         $form $this->createForm(RapperType::class, $editRapper);
  197.         $form->handleRequest($request);
  198.         if ($form->isSubmitted() && $form->isValid()) {
  199.             $editRapper
  200.                 ->setUpdatedAt(new \DateTime('now'));
  201.         }
  202.         if($this->rapperRepository->save($editRapper,true)){
  203.             return new JsonResponse("Uploaded"Response::HTTP_OK);
  204.         }else{
  205.             return new JsonResponse("Error"Response::HTTP_BAD_REQUEST);
  206.         }
  207.     }
  208.     #[Route(path'/rapper-follow'name'rapperFollow'methods: ['POST'])]
  209.     public function frontendRapperFollowAction(Request $request): JsonResponse
  210.     {
  211.         $data $request->request->all();
  212.         $user $this->getUser();
  213.         $client $this->clientRepository->findOneByEmail($user->getUserIdentifier());
  214.         $editRapper $this->rapperRepository->findOneBy(['id'=>$data['rapper_id']]);
  215.         $editRapper->addFollower($client);
  216.         $notification = new ClientNotification();
  217.         $notification
  218.             ->setCreatedAt(new \DateTime('now'))
  219.             ->setTitle('New rapper follower '.$client->getName())
  220.             ->setNotificationText('You now have ('.count($editRapper->getFollowers()).') followers on your rapper profile.')
  221.             ->setType(NotificationType::INTERACTION_TYPE_FOLLOWED)
  222.             ->setClient($editRapper->getClient())
  223.             ->setNotificationRead(false);
  224.         $this->clientNotificationRepository->save($notification,true);
  225.         if($this->rapperRepository->save($editRapper,true)){
  226.             return new JsonResponse($editRapper->getPseudoname(), Response::HTTP_CREATED);
  227.         }else{
  228.             return new JsonResponse("Error"Response::HTTP_BAD_REQUEST);
  229.         }
  230.     }
  231.     #[Route(path'/rapper-unfollow'name'rapperUnfollow'methods: ['POST'])]
  232.     public function frontendRapperUnfollowAction(Request $request): JsonResponse
  233.     {
  234.         $data $request->request->all();
  235.         $user $this->getUser();
  236.         $client $this->clientRepository->findOneByEmail($user->getUserIdentifier());
  237.         $editRapper $this->rapperRepository->findOneBy(['id'=>$data['rapper_id']]);
  238.         $editRapper->removeFollower($client);
  239.         if($this->rapperRepository->save($editRapper,true)){
  240.             return new JsonResponse($editRapper->getPseudoname(), Response::HTTP_CREATED);
  241.         }else{
  242.             return new JsonResponse("Error"Response::HTTP_BAD_REQUEST);
  243.         }
  244.     }
  245.     #[Route("/get-rappers/"name"getRappersApi")]
  246.     public  function getRappersUrlAction(): JsonResponse
  247.     {
  248.         $rappers=$this->rapperRepository->findAll();
  249.         $data = [];
  250.         foreach ($rappers as $rapper){
  251.             $latestBattles = [];
  252.             $openedBattles = [];
  253.             if($rapper!=null){
  254.                 if($this->battleRepository->findLatestForRapper($rapper,6)!=null){
  255.                     $latestBattles=$this->battleRepository->findLatestForRapper($rapper,0);
  256.                 }
  257.                 if($this->battleRepository->findOpenedForRapper($rapper,6)!=null){
  258.                     $openedBattles $this->battleRepository->findOpenedForRapper($rapper,0);
  259.                 }
  260.             }
  261.             $data[] = [
  262.                 'id' => $rapper->getId(),
  263.                 'pseudoname' => $rapper->getPseudoname(),
  264.                 'fullName' => $rapper->getClient()->getName()." ".$rapper->getClient()->getSurname(),
  265.                 'avatarName' => $rapper->getAvatarName(),
  266.                 'bio' => $rapper->getBio(),
  267.                 'rapperStyle' => $rapper->getRapperStyle(),
  268.                 'avatarSize' => $rapper->getAvatarSize(),
  269.                 'openedBattles'=>$openedBattles,
  270.                 'latestBattles'=>$latestBattles
  271.             ];
  272.         }
  273.         $jsonResponse = [
  274.             "rappers" => $data
  275.         ];
  276.         return new JsonResponse($jsonResponse,200);
  277.     }
  278. }