src/Twig/AppExtension.php line 19

Open in your IDE?
  1. <?php
  2. // src/Twig/AppExtension.php
  3. namespace App\Twig;
  4. use Twig\Extension\AbstractExtension;
  5. use Twig\TwigFilter;
  6. use App\Service\isAllowedService;
  7. use App\Service\DataProductFinder;
  8. use Symfony\Component\Security\Core\Security;
  9. class AppExtension extends AbstractExtension
  10. {
  11.     private $security;
  12.     private $isAllowedService;
  13.     public function __construct(Security $securityisAllowedService $isAllowedServiceDataProductFinder $dataProductFinder)
  14.     {
  15.         // Avoid calling getUser() in the constructor: auth may not
  16.         // be complete yet. Instead, store the entire Security object.
  17.         $this->security $security;
  18.         $this->isAllowedService $isAllowedService;
  19.         $this->dataProductFinder $dataProductFinder;
  20.         
  21.     }
  22.     
  23.     public function getFilters()
  24.     {
  25.         return [
  26.             new TwigFilter('is_allowed', [$this'isAllowed']),
  27.             new TwigFilter('is_allowed_customer', [$this'isAllowedCustomer']),
  28.             new TwigFilter('format_currency_custom', [$this'formatCurrency']),
  29.             new TwigFilter('product_details', [$this'productDetails']),
  30.         ];
  31.     }
  32.     
  33.     public function isAllowed($route)
  34.     {   
  35.         $route substr($route, + 6);
  36.         $removedAllParams=false;
  37.         while($removedAllParams!=true){
  38.             if (preg_match('~[0-9]+~'$route)) {
  39.                 $idPos=strrpos($route'/');
  40.                 $id substr($route$idPos+1);
  41.                 $route substr($route0$idPos); 
  42.             }
  43.             else{
  44.                 $removedAllParams=true;    
  45.             }
  46.         }
  47.         
  48.         $user $this->security->getUser();
  49.         $roles$user->getRoles();
  50.         return $this->isAllowedService->isAllowedFunction($route$rolesnull);
  51.     }
  52.     public function isAllowedCustomer($route)
  53.     {   
  54.         $route substr($route, + 6);
  55.         $removedAllParams=false;
  56.         while($removedAllParams!=true){
  57.             if (preg_match('~[0-9]+~'$route)) {
  58.                 $idPos=strrpos($route'/');
  59.                 $id substr($route$idPos+1);
  60.                 $route substr($route0$idPos); 
  61.             }
  62.             else{
  63.                 $removedAllParams=true;    
  64.             }
  65.         }
  66.         
  67.         $user $this->security->getUser();
  68.         $roles$user->getRoles();
  69.         $customerAccess=null;
  70.         if($user->getCustomer())
  71.         {
  72.             $parameters $user->getCustomer()->getPartner()->getParameters() ? $user->getCustomer()->getPartner()->getParameters() : [];
  73.             if(array_key_exists('customerAccess'$parameters)){
  74.                 $customerAccess=$parameters['customerAccess'];
  75.             }
  76.         }
  77.         return $this->isAllowedService->isAllowedFunction($route$roles$customerAccess);
  78.     }
  79.     public function formatCurrency(float $amountstring $currencystring $locale 'en_US'bool $useSymbol true): string
  80.     {
  81.         // Crear el formateador de números
  82.         $formatter = new \NumberFormatter($locale, \NumberFormatter::CURRENCY);
  83.         if (!$useSymbol) {
  84.             // Reemplazar el símbolo por el código ISO de la moneda
  85.             $formatter->setSymbol(\NumberFormatter::CURRENCY_SYMBOL$currency);
  86.         }
  87.         // Formatear el valor como moneda
  88.         return $formatter->formatCurrency($amount$currency);
  89.     }
  90.     public function productDetails($pbw$atribute): string
  91.     {
  92.         return $this->dataProductFinder->getAtributeDetail($pbw$atribute);       
  93.     }
  94.    
  95. }