<?php
namespace App\Controller;
use App\Entity\Events;
use App\Entity\EventType;
use App\Entity\Globals;
use App\Entity\MenuItem;
use App\Entity\Pages;
use App\Entity\Picture;
use App\Form\EventsType;
use App\Repository\EventsRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Component\Validator\Constraints\Date;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* @Route("/galleries")
*/
class GalleryController extends AbstractController
{
private $globals;
private $lang;
private $page;
private $menus;
public function __construct(EntityManagerInterface $entityManager, SessionInterface $session, TranslatorInterface $translator)
{
$this->globals = new Globals();
$this->lang = $this->globals->getCurrentLanguage($session);
$this->page = $this->globals->getDefaultPage($entityManager, $translator, $this->lang);
$this->globals->setGlobals($entityManager);
}
/**
* @Route("/", name="galleries", methods={"GET"})
*/
public function index(Request $request, TranslatorInterface $translator, EventsRepository $eventsRepository): Response
{
$this->globals->setUserStuff([
'loggedIn' => $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_USER') || $this->isGranted('ROLE_MODERATOR'),
'isAdmin' => $this->isGranted('ROLE_ADMIN'),
'isModerator' => $this->isGranted('ROLE_MODERATOR'),
'isUser' => $this->isGranted('ROLE_USER'),
]);
//get available languages
$langs = $this->getDoctrine()->getRepository(MenuItem::class)->findAll();
$this->globals->setLangs($langs);
//set page title
$page = $this->getDoctrine()->getRepository(Pages::class)->findOneBy([
'name' => 'galleries',
'language' => $this->lang,
]);
if (!is_null($page)) {
$this->page->title = $page->getTitle();
$this->page->content = $page->getContent();
} else {
$this->page->title = $translator->trans('pages.galleries.title', [], 'messages', $this->lang);
}
$this->page->metas->description = 'kepek, galleria, Rajna-Vesztfáliai Magyar Protestáns Gyülekezet, Ungarische Evangelische Gemeinde in NRW';
$this->menus = $this->globals->getMenus($this->getDoctrine(), $request, $this->lang, $translator);
$galleries_records = $eventsRepository->getAllGalleries();
$galleries = [];
foreach ($galleries_records as $item) {
$item->imagesCount = count($item->getPictures());
if (!is_null($item->getImage())) {
$img = $this->getDoctrine()->getRepository(Picture::class)->findOneBy([
'id' => $item->getImage(),
]);
if ($img) {
$item->topImage = '/galleries/'.$item->getId().'/'.$img->getPhoto();
}
}
$galleries[] = $item;
}
return $this->render('galleries/index.html.twig', [
'page' => $this->page,
'menus' => $this->menus,
'currentLang' => $this->globals->getLang($this->lang),
'galleries' => $galleries,
'globals' => $this->globals->getGlobals(),
]);
}
/**
* @Route("/new", name="gallery_new", methods={"GET","POST"})
*/
public function new(Request $request, TranslatorInterface $translator, SluggerInterface $slugger): Response
{
$this->globals->setUserStuff([
'loggedIn' => $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_USER') || $this->isGranted('ROLE_MODERATOR'),
'isAdmin' => $this->isGranted('ROLE_ADMIN'),
'isModerator' => $this->isGranted('ROLE_MODERATOR'),
'isUser' => $this->isGranted('ROLE_USER'),
]);
//get available languages
$langs = $this->getDoctrine()->getRepository(MenuItem::class)->findAll();
$this->globals->setLangs($langs);
//set page title
$page = $this->getDoctrine()->getRepository(Pages::class)->findOneBy([
'name' => 'galleries',
'language' => $this->lang,
]);
if (!is_null($page)) {
$this->page->title = $page->getTitle();
$this->page->content = $page->getContent();
} else {
$this->page->title = $translator->trans('pages.galleries.title', [], 'messages', $this->lang);
}
$this->menus = $this->globals->getMenus($this->getDoctrine(), $request, $this->lang, $translator);
$eventType = $this->getDoctrine()->getRepository(EventType::class)->findOneBy([
'id' => 4
]);
$event = new Events();
$form = $this->createForm(EventsType::class, $event);
if ($request->getMethod() == 'POST') {
$params = $request->request->get('events');
$files = $request->files->get('events')['pictures'];
$pictures = isset($params['pictures']) ? $params['pictures'] : [];
$mName = isset($params['machineName']) ? $params['machineName'] : '';
$mDatum = isset($params['datum']) ? $params['datum'] : '';
$event->setMachineName($mName);
$event->setDatum(new \DateTime('@'.strtotime($mDatum['year'].'-'.$mDatum['month'].'-'.$mDatum['day'])));
$event->setHideDatum(false);
$event->setHideTitle(false);
$event->setCity(null);
$event->setEventType($eventType);
$event->setLanguage('--');
$event->setImage(null);
$event->setDescription(isset($params['description']) ? $params['description'] : '');
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($event);
$entityManager->flush();
$galleryId = $event->getId();
foreach ($pictures as $index => $picture) {
$file = $files[$index]['file'];
if (!empty($file)) {
$img = new Picture();
$originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $file->guessExtension();
// Move the file to the directory where galleries are stored
try {
if (!is_dir($this->getParameter('gallery_directory').'/'.$galleryId)) {
mkdir($this->getParameter('gallery_directory').'/'.$galleryId);
}
$file->move(
$this->getParameter('gallery_directory').'/'.$galleryId,
$newFilename
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$img->setName($safeFilename);
$img->setPhoto($newFilename);
$img->setComment($picture['comment']);
$img->setTags($picture['tags']);
$img->setIsVisible(true);
$img->setEventId($event);
$img->setUploadedFile($this->getParameter('gallery_directory').'/'.$galleryId.'/'.$newFilename);
$entityManager->persist($img);
$entityManager->flush();
$event->addPicture($img);
if (is_null($event->getImage())) {
$event->setImage($img->getId());
}
}
}
$entityManager->persist($event);
$entityManager->flush();
return $this->redirectToRoute('galleries');
} else {
$form->handleRequest($request);
}
return $this->render('galleries/new.html.twig', [
'event' => $event,
'form' => $form->createView(),
'page' => $this->page,
'menus' => $this->menus,
'currentLang' => $this->globals->getLang($this->lang),
'globals' => $this->globals->getGlobals(),
]);
}
/**
* @Route("/{id}/", name="gallery_show", methods={"GET"})
*/
public function show(Events $event, TranslatorInterface $translator, Request $request): Response
{
$this->globals->setUserStuff([
'loggedIn' => $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_USER') || $this->isGranted('ROLE_MODERATOR'),
'isAdmin' => $this->isGranted('ROLE_ADMIN'),
'isModerator' => $this->isGranted('ROLE_MODERATOR'),
'isUser' => $this->isGranted('ROLE_USER'),
]);
//get available languages
$langs = $this->getDoctrine()->getRepository(MenuItem::class)->findAll();
$this->globals->setLangs($langs);
//set page title
$page = $this->getDoctrine()->getRepository(Pages::class)->findOneBy([
'name' => 'galleries',
'language' => $this->lang,
]);
if (!is_null($page)) {
$this->page->title = $page->getTitle();
$this->page->content = $page->getContent();
} else {
$this->page->title = $translator->trans('pages.galleries.title', [], 'messages', $this->lang);
}
$this->page->metas->description = 'kepek, kepgalleria, Rajna-Vesztfáliai Magyar Protestáns Gyülekezet, Ungarische Evangelische Gemeinde in NRW';
$this->page->metas->description .= ', ' . $event->getMachineName() . ', ' . $event->getDescription();
$this->menus = $this->globals->getMenus($this->getDoctrine(), $request, $this->lang, $translator);
if (!is_null($event->getImage())) {
$img = $this->getDoctrine()->getRepository(Picture::class)->findOneBy(['id' => $event->getImage()]);
$event->topImage = '/galleries/'.$event->getId().'/'.$img->getPhoto();
}
$event->imagesCount = count($event->getPictures());
$gallery_list = $this->getDoctrine()->getRepository(Events::class)->getAllGalleries();
return $this->render('galleries/show.html.twig', [
'galleries' => [$event],
'page' => $this->page,
'menus' => $this->menus,
'currentLang' => $this->globals->getLang($this->lang),
'gallery_list' => $gallery_list,
'globals' => $this->globals->getGlobals(),
]);
}
/**
* @Route("/{id}/edit", name="gallery_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Events $event, TranslatorInterface $translator, SluggerInterface $slugger): Response
{
$this->globals->setUserStuff([
'loggedIn' => $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_USER') || $this->isGranted('ROLE_MODERATOR'),
'isAdmin' => $this->isGranted('ROLE_ADMIN'),
'isModerator' => $this->isGranted('ROLE_MODERATOR'),
'isUser' => $this->isGranted('ROLE_USER'),
]);
//get available languages
$langs = $this->getDoctrine()->getRepository(MenuItem::class)->findAll();
$this->globals->setLangs($langs);
//set page title
$page = $this->getDoctrine()->getRepository(Pages::class)->findOneBy([
'name' => 'galleries',
'language' => $this->lang,
]);
if (!is_null($page)) {
$this->page->title = $page->getTitle();
$this->page->content = $page->getContent();
} else {
$this->page->title = $translator->trans('pages.galleries.title', [], 'messages', $this->lang);
}
$this->menus = $this->globals->getMenus($this->getDoctrine(), $request, $this->lang, $translator);
$eventType = $this->getDoctrine()->getRepository(EventType::class)->findOneBy([
'id' => 4
]);
$form = $this->createForm(EventsType::class, $event);
$form->handleRequest($request);
if ($request->getMethod() == 'POST') {
$params = $request->request->get('events');
$files = $request->files->get('events')['pictures'];
$pictures = $params['pictures'];
$mName = $params['machineName'];
$mDatum = $params['datum'];
$orig_event = $this->getDoctrine()->getRepository(Events::class)->findOneBy(['id' => $event->getId()]);
$orig_files = [];
foreach ($orig_event->getPictures() as $picture) {
$orig_files[] = $picture;
}
$event->setMachineName($mName);
$event->setDatum(new \DateTime('@'.strtotime($mDatum['year'].'-'.$mDatum['month'].'-'.$mDatum['day'])));
$event->setHideDatum(false);
$event->setHideTitle(false);
$event->setCity(null);
$event->setEventType($eventType);
$event->setLanguage('--');
$event->setImage($event->getImage());
// echo '<pre>';print_r($pictures);print_r($files);echo'</pre>';
// exit;
$entityManager = $this->getDoctrine()->getManager();
// $entityManager->persist($event);
// $entityManager->flush();
$galleryId = $event->getId();
foreach ($event->getPictures() as $index => $picture) {
$file = $files[$index]['file'];
if (!empty($file)) {
$img = new Picture();
$originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $file->guessExtension();
// Move the file to the directory where galleries are stored
try {
if (!is_dir($this->getParameter('gallery_directory').'/'.$galleryId)) {
mkdir($this->getParameter('gallery_directory').'/'.$galleryId);
}
$file->move(
$this->getParameter('gallery_directory').'/'.$galleryId,
$newFilename
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$picture->setName($safeFilename);
$picture->setPhoto($newFilename);
// $img->setComment($picture->getComment());
// $img->setTags($picture->getTags());
$picture->setIsVisible(true);
$picture->setEventId($event);
$picture->setUploadedFile($this->getParameter('gallery_directory').'/'.$galleryId.'/'.$newFilename);
$entityManager->persist($picture);
// $entityManager->flush();
} else {
foreach ($orig_files as $picture_index => $orig_file) {
if ($orig_file->getId() == $picture->getId()) {
if (is_null($picture->getId())) {
$path = $this->getParameter('gallery_directory').'/'.$galleryId.'/'.$picture->getPhoto();
if (file_exists($path)) {
unlink($path);
}
$event->removePicture($picture);
$entityManager->remove($picture);
}
}
}
}
}
$entityManager->persist($event);
$entityManager->flush();
return $this->redirectToRoute('galleries');
}
return $this->render('galleries/edit.html.twig', [
'event' => $event,
'form' => $form->createView(),
'page' => $this->page,
'menus' => $this->menus,
'currentLang' => $this->globals->getLang($this->lang),
'globals' => $this->globals->getGlobals(),
]);
}
/**
* @Route("/{id}/delete", name="gallery_delete", methods={"DELETE"})
*/
public function delete(Request $request, Events $event): RedirectResponse
{
if ($this->isCsrfTokenValid('delete'.$event->getId(), $request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
foreach ($event->getPictures() as $picture) {
$entityManager->remove($picture);
}
$entityManager->remove($event);
$entityManager->flush();
}
return $this->redirectToRoute('galleries');
}
}