<?php
namespace App\Controller;
use App\Entity\ClickTrackerDomain;
use App\Form\Type\ClickTrackerDomainType;
use App\Model\AdServerMap\Report as AdServerReport;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
/**
* Ad Server Mapping Controller
*
* @Route(path="mapping")
*/
class AdServerMappingController extends AbstractController
{
const MAPPING_ID = 'mappingId';
const NOTIFICATION_SUCCESS = 'notification-success';
/**
* @var AdServerReport
*/
private AdServerReport $report;
/**
* constructor
*
* @param AdServerReport $report
*/
public function __construct(AdServerReport $report)
{
$this->report = $report;
}
/**
* AdServer-Domain Index.
*
* @Route(path="/", name="server_mapping_index", methods={"GET"})
*
* @return Response
*/
public function indexAction(): Response
{
$lstMapping = $this->report->getAll();
return $this->render('adserver/list.html.twig', [
'lstMapping' => $lstMapping,
]);
}
/**
* AdServer-Domain New.
*
* @Route(path="/new", name="server_mapping_new", methods={"GET", "POST"})
*
* @param Request $request
* @return Response
*/
public function newAction(Request $request): Response
{
$mapping = new ClickTrackerDomain();
$form = $this->createForm(ClickTrackerDomainType::class, $mapping);
$form->handleRequest($request);
$errors = $this->report->validate($mapping);
if ($errors->count() === 0) {
if ($form->isSubmitted() && $form->isValid()) {
$this->report->saveMapping($mapping);
$this->addFlash(self::NOTIFICATION_SUCCESS, 'Mapping created');
return $this->redirectToRoute('server_mapping_index');
}
}
return $this->renderForm('adserver/new.html.twig', [
'form' => $form,
'error' => $errors,
]);
}
/**
* AdServer-Domain Edit.
*
* @Route(path="/edit/{id}", name="server_mapping_edit", methods={"GET", "POST"})
*
* @param Request $request
* @param int $id
* @return Response
*/
public function editAction(Request $request, int $id): Response
{
$mapping = $this->report->getById($id);
if (empty($mapping)) {
throw new NotFoundHttpException('Mapping not found!');
}
$form = $this->createForm(ClickTrackerDomainType::class, $mapping);
$form->handleRequest($request);
$errors = $this->report->validate($mapping);
if ($errors->count() === 0) {
if ($form->isSubmitted() && $form->isValid()) {
$this->report->saveMapping($mapping);
$this->addFlash(self::NOTIFICATION_SUCCESS, 'Mapping updated');
return $this->redirectToRoute('server_mapping_index');
}
}
return $this->renderForm('adserver/edit.html.twig', [
'form' => $form,
'error' => $errors,
]);
}
/**
* AdServer-Domain New.
*
* @Route(path="/delete", name="server_mapping_delete", methods={"POST"})
*
* @param Request $request
* @return RedirectResponse
*/
public function deleteAction(Request $request): RedirectResponse
{
$id = $request->request->all()[self::MAPPING_ID] ?? null;
if (is_null($id)) {
throw new \InvalidArgumentException();
}
$mapping = $this->report->getById($id);
if (empty($mapping)) {
throw new NotFoundHttpException('Mapping not found!');
}
$this->report->deleteMapping($mapping);
$this->addFlash(self::NOTIFICATION_SUCCESS, 'Mapping removed');
return $this->redirectToRoute('server_mapping_index');
}
}