<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigTest;
use Twig\Extension\GlobalsInterface;
use App\Entity\GrilleAnalysePostMer;
use Twig\TwigFunction;
use Twig\TwigFilter;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class AppExtension extends AbstractExtension implements GlobalsInterface {
private UrlGeneratorInterface $router;
/**
* @return \Twig\TwigTest[]
*/
public function getTests(): array {
return [
new TwigTest('instanceof', [$this, 'isInstanceof']),
];
}
/**
* @param $var
* @param $instance
*/
public function isInstanceof($var, $instance): bool {
return $var instanceof $instance;
}
public function __construct(UrlGeneratorInterface $router) {
$this->router = $router;
}
public function getGlobals(): array {
if (isset($_SESSION['codePays'])) {
$codePaysWithUnderScore = '_' . $_SESSION['codePays'] . '_';
} else {
$codePaysWithUnderScore = '_fr_';
}
return [
'lienElitePresentation' => $this->router->generate('elite_presentation', ['codePays' => $codePaysWithUnderScore]),
'lienSouscriptionElite' => $this->router->generate('reglement_infos_pack_mer', ['codePays' => $codePaysWithUnderScore]) . '?pack=fusacq_elite',
'lienSouscriptionFeuilleRoute' => $this->router->generate('reglement_infos_pack_mer', ['codePays' => $codePaysWithUnderScore]) . '?pack=feuille_route&id_annonce=',
'lienExempleFeuilleRoute' => $this->router->generate('exemple_feuille_route', ['codePays' => $codePaysWithUnderScore]),
'idAnnonceExempleFeuilleRoute' => GrilleAnalysePostMer::ID_ANNONCE_EXEMPLE
];
}
public function getFilters() {
return [
new TwigFilter('break_after_dot', [$this, 'breakAfterDot'], [
'is_safe' => ['html']
]),
];
}
public function breakAfterDot($string, $preserveSpace = true) {
if (!is_string($string)) {
return $string;
}
// Pattern qui accepte :
// - point suivi d'une majuscule : "X.Y"
// - point suivi d'une minuscule puis majuscule : "X.aY"
// - point + espace + majuscule : "x. Y"
$pattern = '/(\.)(\s?)([a-z]?)([A-Z])/';
if ($preserveSpace) {
$replacement = '$1 $3<br>$4';
} else {
$replacement = '$1$3<br>$4';
}
$result = preg_replace($pattern, $replacement, $string);
// Nettoyer les espaces multiples
return preg_replace('/\s+/', ' ', $result);
}
}