<?php
/**
* Created by simpson <simpsonwork@gmail.com>
* Date: 2019-07-18
* Time: 17:02
*/
namespace App\EventSubscriber\Routing;
use App\Event\Routing\RoutingEvent;
use App\Event\Routing\RoutingEvents;
use App\Service\DefaultCityProvider;
use App\Service\Features;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PaginationSubscriber implements EventSubscriberInterface
{
const PAGE_PARAMETER = 'page';
const CITY_PARAMETER = 'city';
public function __construct(
private Features $features,
private DefaultCityProvider $defaultCityProvider
) {}
public function skipPageParameter(RoutingEvent $event): void
{
$parameters = $event->getParameters();
if (isset($parameters[self::PAGE_PARAMETER]) && 1 === $parameters[self::PAGE_PARAMETER]) {
unset($parameters[self::PAGE_PARAMETER]);
$event->setParameters($parameters);
}
}
public function firstPageOfMainCityToMain(RoutingEvent $event): void
{
if(true == $this->features->homepage_as_city_list())
return;
$parameters = $event->getParameters();
if(($event->getName() == 'profile_list.list_by_city'
|| ($event->getName() == 'profile_list.list_by_city._pagination' && 1 === $parameters[self::PAGE_PARAMETER]))
&& (!isset($parameters[self::CITY_PARAMETER]) || $parameters[self::CITY_PARAMETER] === $this->defaultCityProvider->getDefaultCity()->getUriIdentity())
) {
$event->setName('homepage');
$event->setParameters([]);
}
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
RoutingEvents::PRE_GENERATE => [
['skipPageParameter', 10],
['firstPageOfMainCityToMain', 0]
],
];
}
}