<?php declare(strict_types=1);
namespace BabDev\PagerfantaBundle\View;
use Pagerfanta\PagerfantaInterface;
use Pagerfanta\Twig\View\TwigView;
use Pagerfanta\View\ViewInterface;
use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* @deprecated to be removed in BabDevPagerfantaBundle 3.0. Use the Twig view class instead.
*/
abstract class TranslatedView implements ViewInterface
{
/**
* @var ViewInterface
*/
private $view;
/**
* @var LegacyTranslatorInterface|TranslatorInterface
*/
private $translator;
public function __construct(ViewInterface $view, object $translator)
{
if (!($translator instanceof LegacyTranslatorInterface) && !($translator instanceof TranslatorInterface)) {
throw new \InvalidArgumentException(sprintf('The $translator argument of %s must be an instance of %s or %s, a %s was given.', static::class, LegacyTranslatorInterface::class, TranslatorInterface::class, \get_class($translator)));
}
$this->view = $view;
$this->translator = $translator;
}
public function render(PagerfantaInterface $pagerfanta, $routeGenerator, array $options = [])
{
trigger_deprecation('babdev/pagerfanta-bundle', '2.2', 'The "%s" class is deprecated and will be removed in 3.0. Use the "%s" class instead.', static::class, TwigView::class);
$optionsWithTranslations = $this->addTranslationOptions($options);
return $this->view->render($pagerfanta, $routeGenerator, $optionsWithTranslations);
}
private function addTranslationOptions($options)
{
return $this->addNextTranslationOption(
$this->addPreviousTranslationOption($options)
);
}
private function addPreviousTranslationOption($options)
{
return $this->addTranslationOption($options, $this->previousMessageOption(), 'previousMessage');
}
private function addNextTranslationOption($options)
{
return $this->addTranslationOption($options, $this->nextMessageOption(), 'nextMessage');
}
private function addTranslationOption($options, $option, $messageMethod)
{
if (isset($options[$option])) {
return $options;
}
$message = $this->$messageMethod();
return array_merge($options, [$option => $message]);
}
abstract protected function previousMessageOption();
abstract protected function nextMessageOption();
private function previousMessage()
{
$previousText = $this->previousText();
return $this->buildPreviousMessage($previousText);
}
private function nextMessage()
{
$nextText = $this->nextText();
return $this->buildNextMessage($nextText);
}
private function previousText()
{
return $this->translator->trans('previous', [], 'pagerfanta');
}
private function nextText()
{
return $this->translator->trans('next', [], 'pagerfanta');
}
abstract protected function buildPreviousMessage($text);
abstract protected function buildNextMessage($text);
}