<?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\Feed\NewFeedType;
use App\Form\Feed\EditFeedType;
use App\Form\Feed\ReadFeedType;
use App\Form\Feed\DeleteFeedType;
use App\Repository\FeedItemRepository;
use App\Repository\FeedRepository;
use App\Service\MenuService;
class FeedsController extends AbstractController
{
/**
*
* @Route("/feeds", name="feeds", defaults={"title": "Feeds", "weight": 3, "granted": "ROLE_ADMIN"})
*/
public function feeds(LoggerInterface $logger, Request $request, AuthenticationUtils $auth, FeedRepository $feedRepository, RouterInterface $router, MenuService $menu, TranslatorInterface $translator): Response
{
$options = [
'menu' => $menu->getMenu(),
'title' => 'Адрес',
];
$feeds = $feedRepository->findAll();
if (count($feeds) > 0) {
$options['entitys'] = $feeds;
}
if ($this->isGranted('ROLE_ADMIN')) {
$newFeedForm = NewFeedType::getForm($this->get('form.factory'), $request, $this->getDoctrine()->getManager());
if ($newFeedForm == null) {
return $this->redirectToRoute('feeds');
}
$options['newEntityForm'] = $newFeedForm;
$deleteFeedForms = [];
foreach ($feeds as $feed) {
$deleteFeedForm = DeleteFeedType::getForm($this->get('form.factory'), $request, $this->getDoctrine()->getManager(), $feed);
if ($deleteFeedForm == null) {
return $this->redirectToRoute('feeds');
}
$deleteFeedForms[$feed->getId()] = $deleteFeedForm;
}
if (count($deleteFeedForms) > 0) {
$options['deleteEntityForms'] = $deleteFeedForms;
}
}
return $this->render('entitys.html.twig', $options);
}
/**
*
* @Route("/feed-{id}", name="feed")
*/
public function feed(LoggerInterface $logger, Request $request, AuthenticationUtils $auth, FeedRepository $repository, FeedItemRepository $itemRepository, 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) {
$editForm = EditFeedType::getForm($formFactory, $request, $manager, $entity);
if ($editForm == null) {
return $this->redirectToRoute('feed', ['id' => $id]);
}
$entityForms[] = $editForm;
$readForm = ReadFeedType::getForm($formFactory, $request, $manager, $itemRepository, $entity);
if ($readForm == null) {
return $this->redirectToRoute('feed', ['id' => $id]);
}
$entityForms[] = $readForm;
$deleteForm = DeleteFeedType::getForm($formFactory, $request, $manager, $entity);
if ($deleteForm == null) {
return $this->redirectToRoute('feeds');
}
$entityForms[] = $deleteForm;
}
$options = [
'menu' => $menu->getMenu(),
'entityForms' => $entityForms,
];
return $this->render('entity.html.twig', $options);
}
}