<?php
namespace App\Twig;
use App\Entity\Account\Advertiser;
use App\Entity\Account\Avatar;
use App\Entity\Account\Customer;
use App\Entity\Profile\Profile;
use App\Entity\User;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class UserExtension extends AbstractExtension
{
public function __construct(
private TokenStorageInterface $tokenStorage
) {}
public function getFunctions()
{
return [
new TwigFunction('user_avatar', [$this, 'getUserAvatar']),
new TwigFunction('is_profile_in_favourites', [$this, 'isProfileInFavourites']),
new TwigFunction('is_user_advertiser', [$this, 'isUserAdvertiser']),
new TwigFunction('is_user_customer', [$this, 'isUserCustomer']),
];
}
public function getUserAvatar(): ?Avatar
{
/** @var User $user */
$user = $this->tokenStorage->getToken()->getUser();
if(!($user instanceof User)) {
return null;
}
return $user->getAvatar() ? $user->getAvatar() : null;
}
public function isProfileInFavourites(Profile $profile): bool
{
/** @var User $user */
$user = $this->tokenStorage->getToken()->getUser();
if(!($user instanceof Customer)) {
return false;
}
return $user->findProfileInFavourites($profile) != null;
}
public function isUserAdvertiser($user): ?string
{
return $user instanceof Advertiser;
}
public function isUserCustomer($user): ?string
{
return $user instanceof Customer;
}
}