<?php
namespace Whater\UI\WebBundle\Controller\Whater;
use Whater\UI\WebBundle\Controller\AbstractBusController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Whater\Application\UseCase\Product\CommandRequest\GetRecommendedProductsForDistributionNetworkCommand;
use Whater\Application\UseCase\User\CommandRequest\AppRegisterDistributionNetworkOwnershipRequestCommand;
use Whater\Application\UseCase\Whater\CommandRequest\GetDistributionNetworkForShowCommand;
use Whater\Application\UseCase\Whater\CommandRequest\GetAnalyticalByDistributionNetworkAndResponsableCommand;
use Whater\Application\UseCase\Whater\CommandRequest\GetDistributionNetworkForShowBySlugCommand;
use Whater\Infrastructure\UserBundle\Form\Type\AppRegisterDistributionNetworkOwnershipRequestType;
/**
* @Route("public/distribution-network")
*/
class PublicDistributionNetworkController extends AbstractBusController
{
/**
* @Route("/show/{distributionNetworkId}", name="web_public_distribution_network_show_by_id_2", defaults={"_format" = "html"})
*/
public function showDistributionNetworkIdAction(Request $request, $distributionNetworkId)
{
return new RedirectResponse($this->router()->generate('web_public_distribution_network_show_by_id', ['distributionNetworkId' => $distributionNetworkId]));
}
/**
* @Route("/show/id/{distributionNetworkId}", name="web_public_distribution_network_show_by_id", defaults={"_format" = "html"})
*/
public function showDistributionNetworkByIdAction(Request $request, $distributionNetworkId)
{
$town = null;
try {
$distributionNetwork = $this->handle(new GetDistributionNetworkForShowCommand($distributionNetworkId));
if ($distributionNetwork == null) {
return new RedirectResponse($this->router()->generate('web_init', array(), true));
}
return new RedirectResponse($this->router()->generate('web_public_distribution_network_show_by_slug', ['distributionNetworkSlug' => $distributionNetwork->slug()]));
} catch (\Exception $e) {
$this->setFlash('error', $this->translator()->trans($e->getMessage()));
return new RedirectResponse($this->router()->generate('web_init', array(), true));
}
}
/**
* @Route("/show/slug/{distributionNetworkSlug}", name="web_public_distribution_network_show_by_slug", defaults={"_format" = "html"})
*/
public function showDistributionNetworkBySlugAction(Request $request, $distributionNetworkSlug)
{
$distributionNetwork = null;
$distributionNetworkWhaterAnalyticArray = null;
$geometryPolygonArray = null;
$registerOwnershipRequestForm = null;
$enableRequestOwnership = true;
$distributionNetworkArticles = [];
$recommendedProducts = [];
try {
$distributionNetwork = $this->handle(new GetDistributionNetworkForShowBySlugCommand($distributionNetworkSlug));
if ($distributionNetwork == null) {
return new RedirectResponse($this->router()->generate('web_init', array(), true));
}
$distributionNetworkWhaterAnalyticArray = $this->handle(new GetAnalyticalByDistributionNetworkAndResponsableCommand($distributionNetwork));
$geometryPolygonArray = json_encode($distributionNetwork->geometryPolygon()->toArray());
$registerOwnershipRequestForm = $this->getFormFactory()->create(
AppRegisterDistributionNetworkOwnershipRequestType::class,
AppRegisterDistributionNetworkOwnershipRequestCommand::convertToDTO(),
array(
'csrf_protection' => true
)
);
if ($request->isMethod('POST')) {
$registerOwnershipRequestForm->handleRequest($request);
if ($registerOwnershipRequestForm->isSubmitted() && $registerOwnershipRequestForm->isValid()) {
$this->handle(AppRegisterDistributionNetworkOwnershipRequestCommand::fromDTO($registerOwnershipRequestForm->getData()));
$this->setFlash('success', $this->translator()->trans('admin.ownership_request.register.success'));
$enableRequestOwnership = false;
} else {
$this->setFlash('error', $this->translator()->trans('admin.country.edit.invalid_form'));
}
}
$distributionNetworkArticles = $distributionNetwork->articles()->toArray();
usort($distributionNetworkArticles, function ($a, $b) {
return $a->publishAt() < $b->publishAt();
});
$recommendedProducts = $this->handle(new GetRecommendedProductsForDistributionNetworkCommand($distributionNetwork));
} catch (\Exception $e) {
$this->setFlash('error', $this->translator()->trans($e->getMessage()));
}
return $this->render('Whater/public_distribution_network_show.html.twig', array(
'distributionNetwork' => $distributionNetwork,
'geometryPolygonArray' => $geometryPolygonArray,
'form' => $registerOwnershipRequestForm->createView(),
'analytics' => $distributionNetworkWhaterAnalyticArray,
'enableRequestOwnership' => $enableRequestOwnership,
'distributionNetworkArticles' => $distributionNetworkArticles,
'recommendedProducts' => $recommendedProducts,
));
}
}