src/Twig/AppExtension.php line 43

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Twig;
  7. use Twig\Extension\AbstractExtension;
  8. use Twig\TwigTest;
  9. use Twig\Extension\GlobalsInterface;
  10. use App\Entity\GrilleAnalysePostMer;
  11. use Twig\TwigFunction;
  12. use Twig\TwigFilter;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. class AppExtension extends AbstractExtension implements GlobalsInterface {
  15.     private UrlGeneratorInterface $router;
  16.     /**
  17.      * @return \Twig\TwigTest[]
  18.      */
  19.     public function getTests(): array {
  20.         return [
  21.             new TwigTest('instanceof', [$this'isInstanceof']),
  22.         ];
  23.     }
  24.     /**
  25.      * @param $var
  26.      * @param $instance
  27.      */
  28.     public function isInstanceof($var$instance): bool {
  29.         return $var instanceof $instance;
  30.     }
  31.     public function __construct(UrlGeneratorInterface $router) {
  32.         $this->router $router;
  33.     }
  34.     public function getGlobals(): array {
  35.         if (isset($_SESSION['codePays'])) {
  36.             $codePaysWithUnderScore '_' $_SESSION['codePays'] . '_';
  37.         } else {
  38.             $codePaysWithUnderScore '_fr_';
  39.         }
  40.         
  41.         return [
  42.             'lienElitePresentation' => $this->router->generate('elite_presentation', ['codePays' => $codePaysWithUnderScore]),
  43.             'lienSouscriptionElite' => $this->router->generate('reglement_infos_pack_mer', ['codePays' => $codePaysWithUnderScore]) . '?pack=fusacq_elite',
  44.             'lienSouscriptionFeuilleRoute' => $this->router->generate('reglement_infos_pack_mer', ['codePays' => $codePaysWithUnderScore]) . '?pack=feuille_route&id_annonce=',
  45.             'lienExempleFeuilleRoute' => $this->router->generate('exemple_feuille_route', ['codePays' => $codePaysWithUnderScore]),
  46.             'idAnnonceExempleFeuilleRoute' => GrilleAnalysePostMer::ID_ANNONCE_EXEMPLE
  47.         ];
  48.     }
  49.     public function getFilters() {
  50.         return [
  51.             new TwigFilter('break_after_dot', [$this'breakAfterDot'], [
  52.                 'is_safe' => ['html']
  53.                     ]),
  54.         ];
  55.     }
  56. public function breakAfterDot($string$preserveSpace true) {
  57.         if (!is_string($string)) {
  58.             return $string;
  59.         }
  60.         // Pattern qui accepte :
  61.         // - point suivi d'une majuscule              : "X.Y"
  62.         // - point suivi d'une minuscule puis majuscule : "X.aY"
  63.         // - point + espace + majuscule                : "x. Y"
  64.         $pattern '/(\.)(\s?)([a-z]?)([A-Z])/';
  65.         if ($preserveSpace) {
  66.             $replacement '$1 $3<br>$4';
  67.         } else {
  68.             $replacement '$1$3<br>$4';
  69.         }
  70.         $result preg_replace($pattern$replacement$string);
  71.         // Nettoyer les espaces multiples
  72.         return preg_replace('/\s+/'' '$result);
  73.     }
  74. }