<?php
namespace App\Twig;
use App\Dictionary\ImageVars;
use App\Security\ApiUser;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class MemberMediaExtension extends AbstractExtension
{
protected TokenInterface $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->token = $tokenStorage->getToken();
}
/**
* @return array
*/
public function getFunctions(): array
{
return [
new TwigFunction('memberMediaSource', [$this, 'getMemberMediaSource']),
new TwigFunction('originalMemberMediaSource', [$this, 'getOriginalMemberMediaSource']),
];
}
/**
* @param array $specs
* @param string $filterName
* @param bool $forceHardcore
* @return string
*/
public function getMemberMediaSource(array $specs, string $filterName = ImageVars::PREVIEW_BIG, bool $forceHardcore = false): string
{
if ($forceHardcore) {
return $this->getOriginalMemberMediaSource($specs, $filterName);
}
if ((null === $this->token || !$this->token->getUser() instanceof ApiUser) && ( //when not logged in
in_array(($specs['is_checked'] ?? false), [false, 0, '0'], true) || //'is_checked' is false or *missing*
in_array(($specs['is_hardcore'] ?? true), [true, 1, '1'], true) //is_hardcore is true or *missing*
)
)
{
return str_replace('__filter__', $filterName, $specs['pixelated_url'] ?? '');
}
if($specs["is_hardcore"] == true && $this->token->getUser()->getShallHardcore() === false) {
return str_replace('__filter__', $filterName, $specs['pixelated_url'] ?? '');
}
return $this->getOriginalMemberMediaSource($specs, $filterName);
}
/**
* @param array $specs
* @param string $filterName
* @return string
*/
public function getOriginalMemberMediaSource(array $specs, string $filterName = ImageVars::PREVIEW_BIG): string
{
return str_replace('__filter__', $filterName, $specs['url'] ?? '');
}
}