<?php
namespace App\Controller;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Form\FormError;
use App\Entity\Feed;
use App\Form\FeedItem\NewFeedItemType;
use App\Form\FeedItem\EditFeedItemType;
use App\Form\FeedItem\ReadFeedItemType;
use App\Form\FeedItem\DeleteFeedItemType;
use App\Repository\FeedItemRepository;
use App\Service\MenuService;
class FeedItemsController extends AbstractController
{
/**
*
* @Route("/feeditems", name="feeditems", defaults={"title": "Feed items", "weight": 4, "granted": "ROLE_ADMIN"})
*/
public function feeditems(LoggerInterface $logger, Request $request, AuthenticationUtils $auth, FeedItemRepository $feedItemRepository, RouterInterface $router, MenuService $menu, TranslatorInterface $translator): Response
{
$options = [
'menu' => $menu->getMenu(),
'title' => 'Адрес',
];
$feedItems = $feedItemRepository->findBy([], ['pubDate' => 'DESC']);
if (count($feedItems) > 0) {
$options['entitys'] = $feedItems;
}
if ($this->isGranted('ROLE_ADMIN')) {
$newFeedItemForm = NewFeedItemType::getForm($this->get('form.factory'), $request, $this->getDoctrine()->getManager());
if ($newFeedItemForm == null) {
return $this->redirectToRoute('feeditems');
}
$options['newEntityForm'] = $newFeedItemForm;
$deleteFeedItemForms = [];
foreach ($feedItems as $feedItem) {
$deleteFeedItemForm = DeleteFeedItemType::getForm($this->get('form.factory'), $request, $this->getDoctrine()->getManager(), $feedItem);
if ($deleteFeedItemForm == null) {
return $this->redirectToRoute('feeditems');
}
$deleteFeedItemForms[$feedItem->getId()] = $deleteFeedItemForm;
}
if (count($deleteFeedItemForms) > 0) {
$options['deleteEntityForms'] = $deleteFeedItemForms;
}
}
return $this->render('entitys.html.twig', $options);
}
/**
*
* @Route("/feeditem-{id}", name="feeditem")
*/
public function feeditem(LoggerInterface $logger, Request $request, AuthenticationUtils $auth, FeedItemRepository $repository, RouterInterface $router, MenuService $menu, TranslatorInterface $translator, int $id): Response
{
$entity = $repository->find($id);
$formFactory = $this->get('form.factory');
$manager = $this->getDoctrine()->getManager();
$entityForms = [];
if ($this->isGranted('ROLE_ADMIN') && $entity != null) {
$form = EditFeedItemType::getForm($formFactory, $request, $manager, $entity);
if ($form == null) {
return $this->redirectToRoute('feeditem', ['id' => $id]);
}
$entityForms[] = $form;
$form = ReadFeedItemType::getForm($logger, $formFactory, $request, $manager, $entity);
if ($form == null) {
return $this->redirectToRoute('feeditem', ['id' => $id]);
}
$entityForms[] = $form;
$form = DeleteFeedItemType::getForm($formFactory, $request, $manager, $entity);
if ($form == null) {
return $this->redirectToRoute('feeditems');
}
$entityForms[] = $form;
}
$options = [
'menu' => $menu->getMenu(),
'entityForms' => $entityForms,
];
return $this->render('entity.html.twig', $options);
}
}