<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\Routing\RouterInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use App\Form\MediaFormType;
use JMS\Serializer\SerializerBuilder;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\Media;
use App\Entity\Newsfeed;
use Symfony\Contracts\Translation\TranslatorInterface;
class MediaController extends AbstractController
{
private $session;
private $em;
private $translator;
private $router;
public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, RouterInterface $router, SessionInterface $session)
{
$this->em = $em;
$this->translator = $translator;
$this->router = $router;
$this->session = $session;
}
private function get_media_new(TranslatorInterface $translator) {
$repository = $this->getDoctrine()->getRepository(Media::class);
$new = $repository->findby(array('approved' => 0),array('time' => 'DESC'));
return $new;
}
private function get_media_approved(TranslatorInterface $translator) {
$repository = $this->getDoctrine()->getRepository(Media::class);
$approved = $repository->findby(array('approved' => 1),array('time' => 'DESC'));
return $approved;
}
/**
* @Route("/othermedia", name="media")
*/
public function index(TranslatorInterface $translator)
{
$items = $this->get_media_approved($translator);
return $this->render('media.html.twig', [
'items' => $items,
]);
}
/**
* @Route("/othermedia/{id}", name="media_item")
*/
public function item(Media $media)
{
return $this->render('media_item.html.twig', [
'item' => $media,
]);
}
/**
* @Route("/othermedia/add", name="media_add")
* @Route("/moderate/othermedia/add", name="media_moderate_add")
*/
public function add(EntityManagerInterface $em, Request $request, TranslatorInterface $translator)
{
$routeName = $request->attributes->get('_route');
if($routeName == 'media_add'){
$this->denyAccessUnlessGranted('ROLE_USER');
if($_ENV['DISABLE_FORMS'] == "true") { return $this->render('maintenance_form_disabled.html.twig'); }
} else {
$this->denyAccessUnlessGranted('ROLE_MOD_MEDIA');
}
$form = $this->createForm(MediaFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$media = $form->getData();
$media->setUserId($this->getUser()->getId());
$media->setUsername($this->getUser()->getUsername());
$media->setApproved('0');
$media->setTime(new \DateTime('now'));
$em->persist($media);
$em->flush();
$this->addFlash('success', $translator->trans("Media toegevoegd"));
return $this->redirectToRoute('media');
}
return $this->render('form_edit.html.twig', [
'title' => $translator->trans("media toevoegen"),
'form' => $form->createView()
]);
}
/**
* @Route("/moderate/othermedia", name="media_moderate")
*/
public function moderate(Request $request, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_MEDIA');
$new = $this->get_media_new($translator);
$approved = $this->get_media_approved($translator);
$merged = array_merge($new,$approved);
return $this->render('media_moderate.html.twig', [
'items' => $merged,
]);
}
/**
* @Route("/moderate/othermedia/{id}/edit", name="media_moderate_edit")
*/
public function edit(Media $media, EntityManagerInterface $em, Request $request, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_MEDIA');
$form = $this->createForm(MediaFormType::class, $media);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$media = $form->getData();
$media->setApprovedUserId($this->getUser()->getId());
$media->setApprovedUsername($this->getUser()->getUsername());
$em->persist($media);
$em->flush();
$this->addFlash('success', $translator->trans("Media bijgewerkt"));
return $this->redirectToRoute('media_moderate');
}
return $this->render('form_edit.html.twig', [
'title' => $translator->trans("Media bewerken"),
'form' => $form->createView()
]);
}
/**
* @Route("/moderate/othermedia/{id}/approve", name="media_moderate_approve")
*/
public function moderate_approve(int $id, Media $media, EntityManagerInterface $em, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_MEDIA');
$media->setApprovedUserId($this->getUser()->getId());
$media->setApprovedUsername($this->getUser()->getUsername());
$media->setApproved('1');
$em->persist($media);
$em->flush();
$repository = $em->getRepository(SearchItems::class);
$searchitem = $repository->findOneBy(array('path' => $this->router->generate('media_item', [ 'id' => $media->getId()]) ));
if(!$searchitem) {
$searchitem = new SearchItems();
}
$searchitem->setType('media');
$searchitem->setPath($this->router->generate('media_item', [ 'id' => $media->getId()]));
$searchitem->setNameNl($media->getMmedium().': '.$media->getTitleNl());
$searchitem->setNameEn($media->getMmedium().': '.$media->getTitleEn());
$searchitem->setKeywordsNl($media->getMmedium().', '.$media->getTitleNl());
$searchitem->setKeywordsEn($media->getMmedium().', '.$media->getTitleEn());
$searchitem->setLastUpdateTime($media->getTime());
$this->em->persist($searchitem);
$newsfeed = new Newsfeed();
$newsfeed->setTitleNl($media->getMedium().": ".$media->getTitleNl());
$newsfeed->setTitleEn($media->getMedium().": ".$media->getTitleEn());
$newsfeed->setRemoteId($media->getId());
$newsfeed->setType('media');
$newsfeed->setIsUpdate(0);
$newsfeed->setTime(new \DateTime());
$em = $this->getDoctrine()->getManager();
$em->persist($newsfeed);
$em->flush();
$this->addFlash('success', $translator->trans("Media goedgekeurd"));
return $this->redirectToRoute('media_moderate');
}
/**
* @Route("/moderate/othermedia/{id}/delete", name="media_moderate_delete")
*/
public function moderate_delete(int $id, Media $media, EntityManagerInterface $em, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_MEDIA');
$repository = $em->getRepository(SearchItems::class);
$searchitem = $repository->findOneBy(array('path' => $this->router->generate('media_item', [ 'id' => $media->getId()]) ));
if($searchitem){
$em->remove($searchitem);
$em->flush();
}
$em->remove($media);
$em->flush();
$this->addFlash('success', $translator->trans("Media verwijderd"));
return $this->redirectToRoute('media_moderate');
}
}