src/Controller/GalleryController.php line 216

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Events;
  4. use App\Entity\EventType;
  5. use App\Entity\Globals;
  6. use App\Entity\MenuItem;
  7. use App\Entity\Pages;
  8. use App\Entity\Picture;
  9. use App\Form\EventsType;
  10. use App\Repository\EventsRepository;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\String\Slugger\SluggerInterface;
  19. use Symfony\Component\Validator\Constraints\Date;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. /**
  22.  * @Route("/galleries")
  23.  */
  24. class GalleryController extends AbstractController
  25. {
  26.     private $globals;
  27.     private $lang;
  28.     private $page;
  29.     private $menus;
  30.     public function __construct(EntityManagerInterface $entityManagerSessionInterface $sessionTranslatorInterface $translator)
  31.     {
  32.         $this->globals = new Globals();
  33.         $this->lang $this->globals->getCurrentLanguage($session);
  34.         $this->page $this->globals->getDefaultPage($entityManager$translator$this->lang);
  35.         $this->globals->setGlobals($entityManager);
  36.     }
  37.     /**
  38.      * @Route("/", name="galleries", methods={"GET"})
  39.      */
  40.     public function index(Request $requestTranslatorInterface $translatorEventsRepository $eventsRepository): Response
  41.     {
  42.         $this->globals->setUserStuff([
  43.             'loggedIn' => $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_USER') || $this->isGranted('ROLE_MODERATOR'),
  44.             'isAdmin' => $this->isGranted('ROLE_ADMIN'),
  45.             'isModerator' => $this->isGranted('ROLE_MODERATOR'),
  46.             'isUser' => $this->isGranted('ROLE_USER'),
  47.         ]);
  48.         //get available languages
  49.         $langs $this->getDoctrine()->getRepository(MenuItem::class)->findAll();
  50.         $this->globals->setLangs($langs);
  51.         //set page title
  52.         $page $this->getDoctrine()->getRepository(Pages::class)->findOneBy([
  53.             'name' => 'galleries',
  54.             'language' => $this->lang,
  55.         ]);
  56.         if (!is_null($page)) {
  57.             $this->page->title $page->getTitle();
  58.             $this->page->content $page->getContent();
  59.         } else {
  60.             $this->page->title $translator->trans('pages.galleries.title', [], 'messages'$this->lang);
  61.         }
  62.         $this->page->metas->description 'kepek, galleria, Rajna-Vesztfáliai Magyar Protestáns Gyülekezet, Ungarische Evangelische Gemeinde in NRW';
  63.         $this->menus $this->globals->getMenus($this->getDoctrine(), $request$this->lang$translator);
  64.         $galleries_records $eventsRepository->getAllGalleries();
  65.         $galleries = [];
  66.         foreach ($galleries_records as $item) {
  67.             $item->imagesCount count($item->getPictures());
  68.             if (!is_null($item->getImage())) {
  69.                 $img $this->getDoctrine()->getRepository(Picture::class)->findOneBy([
  70.                     'id' => $item->getImage(),
  71.                 ]);
  72.                 if ($img) {
  73.                     $item->topImage '/galleries/'.$item->getId().'/'.$img->getPhoto();
  74.                 }
  75.             }
  76.             $galleries[] = $item;
  77.         }
  78.         return $this->render('galleries/index.html.twig', [
  79.             'page' => $this->page,
  80.             'menus' => $this->menus,
  81.             'currentLang' => $this->globals->getLang($this->lang),
  82.             'galleries' => $galleries,
  83.             'globals' => $this->globals->getGlobals(),
  84.         ]);
  85.     }
  86.     /**
  87.      * @Route("/new", name="gallery_new", methods={"GET","POST"})
  88.      */
  89.     public function new(Request $requestTranslatorInterface $translatorSluggerInterface $slugger): Response
  90.     {
  91.         $this->globals->setUserStuff([
  92.             'loggedIn' => $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_USER') || $this->isGranted('ROLE_MODERATOR'),
  93.             'isAdmin' => $this->isGranted('ROLE_ADMIN'),
  94.             'isModerator' => $this->isGranted('ROLE_MODERATOR'),
  95.             'isUser' => $this->isGranted('ROLE_USER'),
  96.         ]);
  97.         //get available languages
  98.         $langs $this->getDoctrine()->getRepository(MenuItem::class)->findAll();
  99.         $this->globals->setLangs($langs);
  100.         //set page title
  101.         $page $this->getDoctrine()->getRepository(Pages::class)->findOneBy([
  102.             'name' => 'galleries',
  103.             'language' => $this->lang,
  104.         ]);
  105.         if (!is_null($page)) {
  106.             $this->page->title $page->getTitle();
  107.             $this->page->content $page->getContent();
  108.         } else {
  109.             $this->page->title $translator->trans('pages.galleries.title', [], 'messages'$this->lang);
  110.         }
  111.         $this->menus $this->globals->getMenus($this->getDoctrine(), $request$this->lang$translator);
  112.         $eventType $this->getDoctrine()->getRepository(EventType::class)->findOneBy([
  113.             'id' => 4
  114.         ]);
  115.         $event = new Events();
  116.         $form $this->createForm(EventsType::class, $event);
  117.         if ($request->getMethod() == 'POST') {
  118.             $params $request->request->get('events');
  119.             $files $request->files->get('events')['pictures'];
  120.             $pictures = isset($params['pictures']) ? $params['pictures'] : [];
  121.             $mName = isset($params['machineName']) ? $params['machineName'] : '';
  122.             $mDatum = isset($params['datum']) ? $params['datum'] : '';
  123.             $event->setMachineName($mName);
  124.             $event->setDatum(new \DateTime('@'.strtotime($mDatum['year'].'-'.$mDatum['month'].'-'.$mDatum['day'])));
  125.             $event->setHideDatum(false);
  126.             $event->setHideTitle(false);
  127.             $event->setCity(null);
  128.             $event->setEventType($eventType);
  129.             $event->setLanguage('--');
  130.             $event->setImage(null);
  131.             $event->setDescription(isset($params['description']) ? $params['description'] : '');
  132.             $entityManager $this->getDoctrine()->getManager();
  133.             $entityManager->persist($event);
  134.             $entityManager->flush();
  135.             $galleryId $event->getId();
  136.             foreach ($pictures as $index => $picture) {
  137.                 $file $files[$index]['file'];
  138.                 if (!empty($file)) {
  139.                     $img = new Picture();
  140.                     $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  141.                     $safeFilename $slugger->slug($originalFilename);
  142.                     $newFilename $safeFilename '-' uniqid() . '.' $file->guessExtension();
  143.                     // Move the file to the directory where galleries are stored
  144.                     try {
  145.                         if (!is_dir($this->getParameter('gallery_directory').'/'.$galleryId)) {
  146.                             mkdir($this->getParameter('gallery_directory').'/'.$galleryId);
  147.                         }
  148.                         $file->move(
  149.                             $this->getParameter('gallery_directory').'/'.$galleryId,
  150.                             $newFilename
  151.                         );
  152.                     } catch (FileException $e) {
  153.                         // ... handle exception if something happens during file upload
  154.                     }
  155.                     $img->setName($safeFilename);
  156.                     $img->setPhoto($newFilename);
  157.                     $img->setComment($picture['comment']);
  158.                     $img->setTags($picture['tags']);
  159.                     $img->setIsVisible(true);
  160.                     $img->setEventId($event);
  161.                     $img->setUploadedFile($this->getParameter('gallery_directory').'/'.$galleryId.'/'.$newFilename);
  162.                     $entityManager->persist($img);
  163.                     $entityManager->flush();
  164.                     $event->addPicture($img);
  165.                     if (is_null($event->getImage())) {
  166.                         $event->setImage($img->getId());
  167.                     }
  168.                 }
  169.             }
  170.             $entityManager->persist($event);
  171.             $entityManager->flush();
  172.             return $this->redirectToRoute('galleries');
  173.         } else {
  174.             $form->handleRequest($request);
  175.         }
  176.         return $this->render('galleries/new.html.twig', [
  177.             'event' => $event,
  178.             'form' => $form->createView(),
  179.             'page' => $this->page,
  180.             'menus' => $this->menus,
  181.             'currentLang' => $this->globals->getLang($this->lang),
  182.             'globals' => $this->globals->getGlobals(),
  183.         ]);
  184.     }
  185.     /**
  186.      * @Route("/{id}/", name="gallery_show", methods={"GET"})
  187.      */
  188.     public function show(Events $eventTranslatorInterface $translatorRequest $request): Response
  189.     {
  190.         $this->globals->setUserStuff([
  191.             'loggedIn' => $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_USER') || $this->isGranted('ROLE_MODERATOR'),
  192.             'isAdmin' => $this->isGranted('ROLE_ADMIN'),
  193.             'isModerator' => $this->isGranted('ROLE_MODERATOR'),
  194.             'isUser' => $this->isGranted('ROLE_USER'),
  195.         ]);
  196.         //get available languages
  197.         $langs $this->getDoctrine()->getRepository(MenuItem::class)->findAll();
  198.         $this->globals->setLangs($langs);
  199.         //set page title
  200.         $page $this->getDoctrine()->getRepository(Pages::class)->findOneBy([
  201.             'name' => 'galleries',
  202.             'language' => $this->lang,
  203.         ]);
  204.         if (!is_null($page)) {
  205.             $this->page->title $page->getTitle();
  206.             $this->page->content $page->getContent();
  207.         } else {
  208.             $this->page->title $translator->trans('pages.galleries.title', [], 'messages'$this->lang);
  209.         }
  210.         $this->page->metas->description 'kepek, kepgalleria, Rajna-Vesztfáliai Magyar Protestáns Gyülekezet, Ungarische Evangelische Gemeinde in NRW';
  211.         $this->page->metas->description .= ', ' $event->getMachineName() . ', ' $event->getDescription();
  212.         $this->menus $this->globals->getMenus($this->getDoctrine(), $request$this->lang$translator);
  213.         if (!is_null($event->getImage())) {
  214.             $img $this->getDoctrine()->getRepository(Picture::class)->findOneBy(['id' => $event->getImage()]);
  215.             $event->topImage '/galleries/'.$event->getId().'/'.$img->getPhoto();
  216.         }
  217.         $event->imagesCount count($event->getPictures());
  218.         $gallery_list $this->getDoctrine()->getRepository(Events::class)->getAllGalleries();
  219.         return $this->render('galleries/show.html.twig', [
  220.             'galleries' => [$event],
  221.             'page' => $this->page,
  222.             'menus' => $this->menus,
  223.             'currentLang' => $this->globals->getLang($this->lang),
  224.             'gallery_list' => $gallery_list,
  225.             'globals' => $this->globals->getGlobals(),
  226.         ]);
  227.     }
  228.     /**
  229.      * @Route("/{id}/edit", name="gallery_edit", methods={"GET","POST"})
  230.      */
  231.     public function edit(Request $requestEvents $eventTranslatorInterface $translatorSluggerInterface $slugger): Response
  232.     {
  233.         $this->globals->setUserStuff([
  234.             'loggedIn' => $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_USER') || $this->isGranted('ROLE_MODERATOR'),
  235.             'isAdmin' => $this->isGranted('ROLE_ADMIN'),
  236.             'isModerator' => $this->isGranted('ROLE_MODERATOR'),
  237.             'isUser' => $this->isGranted('ROLE_USER'),
  238.         ]);
  239.         //get available languages
  240.         $langs $this->getDoctrine()->getRepository(MenuItem::class)->findAll();
  241.         $this->globals->setLangs($langs);
  242.         //set page title
  243.         $page $this->getDoctrine()->getRepository(Pages::class)->findOneBy([
  244.             'name' => 'galleries',
  245.             'language' => $this->lang,
  246.         ]);
  247.         if (!is_null($page)) {
  248.             $this->page->title $page->getTitle();
  249.             $this->page->content $page->getContent();
  250.         } else {
  251.             $this->page->title $translator->trans('pages.galleries.title', [], 'messages'$this->lang);
  252.         }
  253.         $this->menus $this->globals->getMenus($this->getDoctrine(), $request$this->lang$translator);
  254.         $eventType $this->getDoctrine()->getRepository(EventType::class)->findOneBy([
  255.             'id' => 4
  256.         ]);
  257.         $form $this->createForm(EventsType::class, $event);
  258.         $form->handleRequest($request);
  259.         if ($request->getMethod() == 'POST') {
  260.             $params $request->request->get('events');
  261.             $files $request->files->get('events')['pictures'];
  262.             $pictures $params['pictures'];
  263.             $mName $params['machineName'];
  264.             $mDatum $params['datum'];
  265.             $orig_event $this->getDoctrine()->getRepository(Events::class)->findOneBy(['id' => $event->getId()]);
  266.             $orig_files = [];
  267.             foreach ($orig_event->getPictures() as $picture) {
  268.                 $orig_files[] = $picture;
  269.             }
  270.             $event->setMachineName($mName);
  271.             $event->setDatum(new \DateTime('@'.strtotime($mDatum['year'].'-'.$mDatum['month'].'-'.$mDatum['day'])));
  272.             $event->setHideDatum(false);
  273.             $event->setHideTitle(false);
  274.             $event->setCity(null);
  275.             $event->setEventType($eventType);
  276.             $event->setLanguage('--');
  277.             $event->setImage($event->getImage());
  278.             // echo '<pre>';print_r($pictures);print_r($files);echo'</pre>';
  279.             // exit;
  280.             $entityManager $this->getDoctrine()->getManager();
  281.             // $entityManager->persist($event);
  282.             // $entityManager->flush();
  283.             $galleryId $event->getId();
  284.             foreach ($event->getPictures() as $index => $picture) {
  285.                 $file $files[$index]['file'];
  286.                 if (!empty($file)) {
  287.                     $img = new Picture();
  288.                     $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  289.                     $safeFilename $slugger->slug($originalFilename);
  290.                     $newFilename $safeFilename '-' uniqid() . '.' $file->guessExtension();
  291.                     // Move the file to the directory where galleries are stored
  292.                     try {
  293.                         if (!is_dir($this->getParameter('gallery_directory').'/'.$galleryId)) {
  294.                             mkdir($this->getParameter('gallery_directory').'/'.$galleryId);
  295.                         }
  296.                         $file->move(
  297.                             $this->getParameter('gallery_directory').'/'.$galleryId,
  298.                             $newFilename
  299.                         );
  300.                     } catch (FileException $e) {
  301.                         // ... handle exception if something happens during file upload
  302.                     }
  303.                     $picture->setName($safeFilename);
  304.                     $picture->setPhoto($newFilename);
  305. //                    $img->setComment($picture->getComment());
  306. //                    $img->setTags($picture->getTags());
  307.                     $picture->setIsVisible(true);
  308.                     $picture->setEventId($event);
  309.                     $picture->setUploadedFile($this->getParameter('gallery_directory').'/'.$galleryId.'/'.$newFilename);
  310.                     $entityManager->persist($picture);
  311.                     // $entityManager->flush();
  312.                 } else {
  313.                     foreach ($orig_files as $picture_index => $orig_file) {
  314.                         if ($orig_file->getId() == $picture->getId()) {
  315.                             if (is_null($picture->getId())) {
  316.                                 $path $this->getParameter('gallery_directory').'/'.$galleryId.'/'.$picture->getPhoto();
  317.                                 if (file_exists($path)) {
  318.                                     unlink($path);
  319.                                 }
  320.                                 $event->removePicture($picture);
  321.                                 $entityManager->remove($picture);
  322.                             }
  323.                         }
  324.                     }
  325.                 }
  326.             }
  327.             $entityManager->persist($event);
  328.             $entityManager->flush();
  329.             return $this->redirectToRoute('galleries');
  330.         }
  331.         return $this->render('galleries/edit.html.twig', [
  332.             'event' => $event,
  333.             'form' => $form->createView(),
  334.             'page' => $this->page,
  335.             'menus' => $this->menus,
  336.             'currentLang' => $this->globals->getLang($this->lang),
  337.             'globals' => $this->globals->getGlobals(),
  338.         ]);
  339.     }
  340.     /**
  341.      * @Route("/{id}/delete", name="gallery_delete", methods={"DELETE"})
  342.      */
  343.     public function delete(Request $requestEvents $event): RedirectResponse
  344.     {
  345.         if ($this->isCsrfTokenValid('delete'.$event->getId(), $request->request->get('_token'))) {
  346.             $entityManager $this->getDoctrine()->getManager();
  347.             foreach ($event->getPictures() as $picture) {
  348.                 $entityManager->remove($picture);
  349.             }
  350.             $entityManager->remove($event);
  351.             $entityManager->flush();
  352.         }
  353.         return $this->redirectToRoute('galleries');
  354.     }
  355. }