<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller\Buzz;
use App\Helper\Utils;
use App\Services\MetaTag;
use App\Services\Buzz\CanonicalUrlService;
use App\Services\Buzz\BuzzIndexPageProvider;
use App\Services\LangCodePaysHandler;
use App\Controller\EntityUsingController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
use App\Repository\Buzz\BuzzActualitesRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\{
Societes,
Utilisateur,
BuzzLiensNewsletter,
UtilisateursNewsletter,
InteractionUtilisateur
};
use App\Entity\SocietesPrestataire;
use App\Services\ManagerEntity\DroitsAccesManagers;
use App\Form\Type\Buzz\SendActualiteType;
class IndexController extends EntityUsingController {
public const MAX_AGE = 43200; // 12heures
private LangCodePaysHandler $codePaysHandler;
private BuzzIndexPageProvider $buzzIndexPageProvider;
private BuzzActualitesRepository $buzzActualitesRepository;
private CanonicalUrlService $canonicalUrlService;
/**
* @param MetaTag $metaTag
* @param LangCodePaysHandler $codePaysHandler
* @param BuzzIndexPageProvider $buzzIndexPageProvider
* @param BuzzActualitesRepository $buzzActualitesRepository
* @param CanonicalUrlService $canonicalUrlService
*/
public function __construct(EntityManagerInterface $em, MetaTag $metaTag, LangCodePaysHandler $codePaysHandler, BuzzIndexPageProvider $buzzIndexPageProvider, BuzzActualitesRepository $buzzActualitesRepository, CanonicalUrlService $canonicalUrlService) {
$this->em = $em;
$this->metaTag = $metaTag;
$this->codePaysHandler = $codePaysHandler;
$this->buzzIndexPageProvider = $buzzIndexPageProvider;
$this->buzzActualitesRepository = $buzzActualitesRepository;
$this->canonicalUrlService = $canonicalUrlService;
}
/**
* Page d'accueil des actualités Buzz
* @param Request $request
* @param string $codePays
* @return Response
*/
public function index(Request $request, $codePays): Response {
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzIndexCanonical($cleanCodePays);
$metaTag = $this->metaTag
->setTitle("Toute l'actualité des Fusions-Acquisition et du Capital Investissement")
->setDescription("Suivez en temps réel toute l'actualité des Fusions-Acquisition et du Capital Investissement")
->setCanonical($canonicalUrl);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_index', [], null, $cleanCodePays);
$countriesWithNewLogic = ['ch', 'ca', 'be'];
if (in_array(strtolower($codePays), $countriesWithNewLogic)) {
$date = $request->query->get('date');
$groupedArticles = $this->buzzIndexPageProvider->getArticlesByWeekForCountry($codePays, $date);
$featured = $this->buzzIndexPageProvider->getFeaturedActualite($codePays, 1);
$data = $this->buzzIndexPageProvider->getInternationalPageData($codePays);
$pageData = $this->buzzIndexPageProvider->getPageDataByWeekForCountry($codePays, $date);
$response = $this->render("buzz/index/index_" . Utils::codePaysWithoutDash($codePays) . ".html.twig", [
'metaTag' => $metaTag,
'grouped_articles' => $groupedArticles,
'dateRange' => null,
'featuredBlog' => null,
'featured' => $featured,
'first_featured' => $pageData['first_featured'],
'next_articles' => $pageData['next_articles'],
'grouped_articles' => $pageData['grouped_articles'],
'exclude_ids' => $pageData['exclude_ids'],
'derniers_jours' => $pageData['derniers_jours'],
'hreflangLinks' => $hreflangLinks,
'lastMonthsHavingActu' => $this->buzzIndexPageProvider->getLastMonthsHavingActuForCountry($codePays, 6),
]);
} else {
$now = new \DateTimeImmutable();
$dayOfWeek = (int) $now->format('N');
$isWeekend = ($dayOfWeek === 6 || $dayOfWeek === 7);
if ($isWeekend && $codePays === 'fr') {
$weekendData = $this->buzzIndexPageProvider->getWeekendPageData($codePays);
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$codePaysWithUnderScore = '_' . $cleanCodePays . '_';
$weekendPageData = [
'grouped_articles' => $weekendData['grouped_articles'],
];
$displayedArticleIds = $this->buzzIndexPageProvider->collectDisplayedArticleIds($weekendPageData);
$mostReadRaw = $this->buzzActualitesRepository->findMostReadArticlesFromIds($displayedArticleIds, 5, $codePays);
$mostReadArticles = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $mostReadRaw);
$experts_alaune = $this->buzzIndexPageProvider->getExpertsALaUneFromOperations(4, 'fr');
$response = $this->render("buzz/index/index_fr.html.twig", [
'metaTag' => $metaTag,
'is_weekend_mode' => true,
'weekend_data' => $weekendData,
'grouped_articles' => $weekendData['grouped_articles'],
'week_label' => $weekendData['week_label'],
'dateRange' => null,
'featuredBlog' => null,
'first_featured' => null,
'next_articles' => [],
'exclude_ids' => [],
'derniers_jours' => $weekendData['derniers_jours'],
'articles_plus_lus' => $mostReadArticles,
'experts_alaune' => $experts_alaune,
'codePays' => $cleanCodePays,
'codePaysWithUnderScore' => $codePaysWithUnderScore,
'lang' => 'fr',
'currentRoute' => $request->attributes->get('_route'),
'hreflangLinks' => $hreflangLinks,
'authFrom' => $request->query->get('authFrom', ''),
]);
return $response;
}
$pageData = $this->buzzIndexPageProvider->getPageData($codePays);
$featuredIds = [];
$jours = $this->buzzIndexPageProvider->getDerniersJours(6);
$grouped = $pageData['grouped_articles'];
$dateRange = null;
if (empty($grouped)) {
$excludeIds = [];
if (!empty($pageData['first_featured'])) {
$excludeIds[] = (string) $pageData['first_featured']['id_actualite'];
}
foreach ($pageData['next_articles'] as $a) {
$excludeIds[] = (string) $a['id_actualite'];
}
if (!empty($pageData['actualites_a_la_une_du_jour'])) {
foreach ($pageData['actualites_a_la_une_du_jour'] as $a) {
$excludeIds[] = (string) $a['id_actualite'];
}
}
if (!empty($pageData['actualites_a_ce_moment'])) {
foreach ($pageData['actualites_a_ce_moment'] as $a) {
$excludeIds[] = (string) $a['id_actualite'];
}
}
$excludeIds = array_unique($excludeIds);
if ($codePays === 'fr') {
$ymds = [];
$latestYmd = $this->buzzActualitesRepository->getLatestDayYmd($codePays);
if ($latestYmd) {
$ymds[] = $latestYmd;
$prev1 = $this->buzzActualitesRepository->getPreviousDayYmd($latestYmd, $codePays);
if ($prev1) {
$ymds[] = $prev1;
$prev2 = $this->buzzActualitesRepository->getPreviousDayYmd($prev1, $codePays);
if ($prev2) {
$ymds[] = $prev2;
}
}
}
$articlesFallback = [];
foreach ($ymds as $ymd) {
$rows = $this->buzzActualitesRepository->findFranceNewsByYmd($ymd, 50, $excludeIds, $codePays);
$articlesFallback = array_merge($articlesFallback, $rows);
}
$articlesFallback = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $articlesFallback);
$grouped = $this->buzzIndexPageProvider->groupArticlesByDay($articlesFallback);
$pageData['grouped_articles'] = $grouped;
} else {
$dateRange = $this->buzzIndexPageProvider->getLastNWorkingDays(5);
$articlesFallback = $this->buzzActualitesRepository->findNewsInDateRange($dateRange['start'], $dateRange['end'], $codePays, $excludeIds);
$articlesFallback = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $articlesFallback);
$grouped = $this->buzzIndexPageProvider->groupArticlesByWeek($articlesFallback);
$pageData['grouped_articles'] = $grouped;
}
}
$i = 1;
while (empty($grouped) && $i <= 4) {
$lastWeekStart = (new \DateTimeImmutable("monday -$i week"))->setTime(0, 0, 0);
$lastWeekEnd = $lastWeekStart->modify('+4 days')->setTime(23, 59, 59);
$excludeIds = [];
if (!empty($pageData['first_featured'])) {
$excludeIds[] = (string) $pageData['first_featured']['id_actualite'];
}
foreach ($pageData['next_articles'] as $a) {
$excludeIds[] = (string) $a['id_actualite'];
}
if (!empty($pageData['actualites_a_la_une_du_jour'])) {
foreach ($pageData['actualites_a_la_une_du_jour'] as $a) {
$excludeIds[] = (string) $a['id_actualite'];
}
}
if (!empty($pageData['actualites_a_ce_moment'])) {
foreach ($pageData['actualites_a_ce_moment'] as $a) {
$excludeIds[] = (string) $a['id_actualite'];
}
}
$excludeIds = array_unique($excludeIds);
$articlesFallback = $this->buzzActualitesRepository->findNewsInDateRange($lastWeekStart, $lastWeekEnd, $codePays, $excludeIds);
$articlesFallback = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $articlesFallback);
if ($codePays === 'fr') {
$grouped = $this->buzzIndexPageProvider->groupArticlesByDay($articlesFallback);
} else {
$grouped = $this->buzzIndexPageProvider->groupArticlesByWeek($articlesFallback);
}
$pageData['grouped_articles'] = $grouped;
$dateRange = ['start' => $lastWeekStart, 'end' => $lastWeekEnd];
$i++;
}
$featuredBlog = null;
$featured = $this->buzzIndexPageProvider->getFeaturedActualite($codePays, 1);
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$codePaysWithUnderScore = '_' . $cleanCodePays . '_';
$experts_alaune = $this->buzzIndexPageProvider->getExpertsALaUneFromOperations(4, 'fr');
$response = $this->render("buzz/index/index_fr.html.twig", [
'metaTag' => $metaTag,
'grouped_articles' => $pageData['grouped_articles'],
'dateRange' => $dateRange,
'featuredBlog' => $featuredBlog,
'first_featured' => $pageData['first_featured'] ?? null,
'next_articles' => $pageData['next_articles'] ?? [],
'exclude_ids' => $pageData['exclude_ids'] ?? [],
'derniers_jours' => $pageData['derniers_jours'],
'actualites_a_la_une_du_jour' => $pageData['actualites_a_la_une_du_jour'] ?? [],
'actualites_a_ce_moment' => $pageData['actualites_a_ce_moment'] ?? [],
'articles_plus_lus' => $pageData['articles_plus_lus'] ?? [],
'experts_alaune' => $experts_alaune,
'codePays' => $cleanCodePays,
'codePaysWithUnderScore' => $codePaysWithUnderScore,
'lang' => 'fr',
'currentRoute' => $request->get('_route'),
'authFrom' => null,
'hreflangLinks' => $hreflangLinks,
]);
}
$response->setPublic();
$response->setMaxAge(self::MAX_AGE);
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
/**
* Page des actualités internationales
* @param Request $request
* @param string $codePays
* @return Response
*/
public function actualiteInternationale(Request $request, $codePays): Response {
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzActualiteInternationaleCanonical($cleanCodePays);
$metaTag = $this->metaTag
->setTitle("L'actualité internationale des Fusions-Acquisitions et du Capital Investissement")
->setDescription("Suivez en temps réel l'actualité internationale des Fusions-Acquisitions et du Capital Investissement")
->setCanonical($canonicalUrl);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_actualite_internationale', [], null, $cleanCodePays);
$data = $this->buzzIndexPageProvider->getInternationalPageData($codePays);
$juridique = $this->buzzIndexPageProvider->getSidebarJuridiqueData($codePays, 3);
if (empty($juridique) && $codePays !== 'fr') {
$juridique = $this->buzzIndexPageProvider->getSidebarJuridiqueData('fr', 3);
}
$experts = $this->buzzIndexPageProvider->getSidebarDirectExpertsData('fr');
$derniers_jours = $this->buzzIndexPageProvider->getDerniersJours(6);
$html = $this->renderView('buzz/actualite_internationale.html.twig', array_merge([
'metaTag' => $metaTag,
'codePays' => str_replace('_', '', $codePays),
'codePaysWithUnderScore' => $codePays,
'lang' => 'fr',
'currentRoute' => $request->get('_route'),
'authFrom' => null,
'juridique' => $juridique,
'experts' => $experts,
'derniers_jours' => $derniers_jours,
'hreflangLinks' => $hreflangLinks,
], $data));
$etag = md5($html);
$response = new Response($html);
$response->setEtag($etag);
if ($response->isNotModified($request)) {
return $response;
}
$response->setPublic();
$response->setMaxAge(self::MAX_AGE);
return $response;
}
/**
* Page des actualités françaises depuis les autres pays
* @param Request $request
* @param string $codePays
* @return Response
*/
public function actualiteFrance(Request $request, $codePays): Response {
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzActualiteFranceCanonical($cleanCodePays);
$metaTag = $this->metaTag
->setTitle("L'actualité française des Fusions-Acquisitions et du Capital Investissement")
->setDescription("Suivez en temps réel l'actualité française des Fusions-Acquisitions et du Capital Investissement")
->setCanonical($canonicalUrl);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_actualite_france', [], null, $cleanCodePays);
$pageData = $this->buzzIndexPageProvider->getPageData('fr');
$juridique = $this->buzzIndexPageProvider->getSidebarJuridiqueData('fr', 3);
$experts = $this->buzzIndexPageProvider->getSidebarDirectExpertsData('fr');
$experts_alaune = $this->buzzIndexPageProvider->getExpertsALaUneFromOperations(4, 'fr');
$html = $this->renderView('buzz/actualite_france.html.twig', array_merge($pageData, [
'metaTag' => $metaTag,
'codePays' => str_replace('_', '', $codePays),
'codePaysWithUnderScore' => $codePays,
'lang' => 'fr',
'currentRoute' => $request->get('_route'),
'authFrom' => null,
'juridique' => $juridique,
'experts' => $experts,
'experts_alaune' => $experts_alaune,
'hreflangLinks' => $hreflangLinks,
'buzz_calendar_date_route' => 'buzz_actualite_france_par_date',
]));
$etag = md5($html);
$response = new Response($html);
$response->setEtag($etag);
if ($response->isNotModified($request)) {
return $response;
}
$response->setPublic();
$response->setMaxAge(self::MAX_AGE);
return $response;
}
/**
* Page "En direct des experts" avec filtrage par type
* @param BuzzIndexPageProvider $buzzIndexPageProvider
* @param Request $request
* @param string $codePays
* @return Response
*/
public function enDirectDesExperts(BuzzIndexPageProvider $buzzIndexPageProvider, Request $request, $codePays): Response {
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$type = $request->query->get('type', '');
$canonicalUrl = $this->canonicalUrlService->getBuzzEnDirectDesExpertsCanonical($cleanCodePays, $type);
$metaTag = $this->getMetaTagForExpertType($type);
$metaTag->setCanonical($canonicalUrl);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_en_direct_des_experts', [], $type, $cleanCodePays);
$page = max(1, (int) $request->query->get('page', 1));
$limit = 20;
$offset = ($page - 1) * $limit;
$total = $buzzIndexPageProvider->countEnDirectDesExperts($type, $codePays);
$actualites = $buzzIndexPageProvider->getEnDirectDesExpertsFormatted($type, $limit, $codePays, $offset);
$totalPages = (int) ceil($total / $limit);
$paginationLinks = $this->canonicalUrlService->getBuzzPaginationLinks('buzz_en_direct_des_experts', [], $type, $cleanCodePays, $page, $totalPages);
$first_featured = $actualites[0] ?? null;
$next_articles = array_slice($actualites, 1, 2);
$main_articles = array_slice($actualites, 3, 17);
$juridique = $buzzIndexPageProvider->getSidebarJuridiqueData($codePays, 3);
if (empty($juridique) && $codePays !== 'fr') {
$juridique = $buzzIndexPageProvider->getSidebarJuridiqueData('fr', 3);
}
$remaining_articles = array_slice($actualites, 3);
$grouped_articles = $buzzIndexPageProvider->groupArticlesByDay($remaining_articles);
$webinarFormationData = $buzzIndexPageProvider->getWebinarFormationData();
if (isset($webinarFormationData['webinar']) && is_array($webinarFormationData['webinar'])) {
if (!isset($webinarFormationData['webinar']['titre'])) {
$webinarFormationData['webinar']['titre'] = '';
}
}
$html = $this->renderView('buzz/en_direct_des_experts.html.twig', [
'metaTag' => $metaTag,
'first_featured' => $first_featured,
'next_articles' => $next_articles,
'main_articles' => $main_articles,
'grouped_articles' => $grouped_articles,
'type' => $type,
'juridique' => $juridique,
'page' => $page,
'limit' => $limit,
'total' => $total,
'nbPages' => ceil($total / $limit),
'webinarData' => $webinarFormationData['webinar'],
'formationData' => $webinarFormationData['formation'],
'hreflangLinks' => $hreflangLinks,
'paginationLinks' => $paginationLinks,
]);
$etag = md5($html);
$response = new Response($html);
$response->setEtag($etag);
if ($response->isNotModified($request)) {
return $response; // 304 Not Modified
}
$response->setPublic();
$response->setMaxAge(self::MAX_AGE);
return $response;
}
/**
* Récupère les métadonnées appropriées selon le type d'expert
*
* @param string $type
* @return MetaTag
*/
private function getMetaTagForExpertType(string $type): MetaTag {
switch ($type) {
case 'reference':
return $this->metaTag
->setTitle("Toutes les opérations réalisées par les experts en cession d'entreprise")
->setDescription("Suivez en temps réel toutes les opérations réalisées par les experts en cession d'entreprise, fusions-acquisitions et en levée de fonds");
case 'autre':
return $this->metaTag
->setTitle("Toutes les autres actualités des conseils en cession d'entreprise")
->setDescription("Suivez en temps réel toutes les autres actualités postées par les experts en cession d'entreprise, fusions-acquisitions et en levée de fonds");
case 'nomination':
return $this->metaTag
->setTitle("Toutes les nominations des conseils en cession d'entreprise")
->setDescription("Suivez en temps réel toutes les nominations des experts en cession d'entreprise, fusions-acquisitions et en levée de fonds");
case 'evenement':
return $this->metaTag
->setTitle("Tous les événements des experts en cession d'entreprise")
->setDescription("Suivez en temps réel tous les événements auxquels participent les experts en cession d'entreprise, fusions-acquisitions et en levée de fonds");
case 'expertise':
return $this->metaTag
->setTitle("Tous les avis d'experts des conseils en cession d'entreprise")
->setDescription("Suivez en temps réel tous les avis d'expert rédigés par les conseils en cession d'entreprise, fusions-acquisitions et en levée de fonds");
case 'reflexion':
return $this->metaTag
->setTitle("Tous les billets d'humeur des conseils en cession d'entreprise")
->setDescription("Suivez en temps réel tous les billets d'humeur rédigés par les experts en cession d'entreprise, fusions-acquisitions et en levée de fonds");
case 'emploi':
return $this->metaTag
->setTitle("Toutes les offres d'emploi des conseils en cession d'entreprise")
->setDescription("Suivez en temps réel toutes les offres d'emploi proposées par les experts en cession d'entreprise, fusions-acquisitions et en levée de fonds");
default:
return $this->metaTag
->setTitle("L'actualité collaborative des Experts - Toutes les actualités")
->setDescription("Suivez en temps réel toute l'actualité collaborative des experts en cession d'entreprise, fusions-acquisitions et en levée de fonds");
}
}
/**
* Récupère les métadonnées appropriées pour les détails d'articles
*
* @param array $articleData
* @return MetaTag
*/
private function getMetaTagForArticleDetail(array $articleData): MetaTag {
$titre = $articleData['titre_actualite'] ?? '';
$sousTitre = $articleData['sous_titre'] ?? '';
$description = $articleData['description_actualite'] ?? '';
$title = !empty($titre) ? $titre : "Actualité - Fusions-Acquisitions et Capital Investissement";
if (!empty($sousTitre)) {
$desc = $sousTitre;
} elseif (!empty($description)) {
$desc = strlen($description) > 160 ? substr($description, 0, 157) . '...' : $description;
} else {
$desc = "Consultez cette actualité dans le domaine des fusions-acquisitions et du capital investissement";
}
return $this->metaTag
->setTitle($title)
->setDescription($desc);
}
/**
* Récupère les métadonnées appropriées pour les pages de sociétés
*
* @param array $infos
* @param string $typeSociete
* @return MetaTag
*/
private function getMetaTagForSociete(array $infos, string $typeSociete): MetaTag {
$raisonSociale = $infos['raison_sociale'] ?? '';
$description = $infos['description'] ?? '';
$secteur = $infos['secteur'] ?? '';
$title = $typeSociete === 'prestataire' ? (!empty($raisonSociale) ? $raisonSociale . " - Cabinet de conseil en fusions-acquisitions" : "Cabinet de conseil en fusions-acquisitions") : (!empty($raisonSociale) ? $raisonSociale . " - Actualités fusions-acquisitions" : "Actualités fusions-acquisitions");
if (!empty($description)) {
$desc = strlen($description) > 160 ? substr($description, 0, 157) . '...' : $description;
} elseif (!empty($secteur)) {
$desc = "Découvrez " . $raisonSociale . " dans le secteur " . $secteur . " - Actualités et informations sur les fusions-acquisitions";
} else {
$desc = "Consultez les actualités et informations sur " . $raisonSociale . " dans le domaine des fusions-acquisitions et du capital investissement";
}
return $this->metaTag
->setTitle($title)
->setDescription($desc);
}
/**
* Page de détail d'une actualité
*
* @param Request $request
* @param string $slug
* @param string $id
* @param string $codePays
* @param BuzzIndexPageProvider $provider
* @param DroitsAccesManagers $droitsAccesManagers
* @return Response
*/
public function detail(Request $request, $slug, $id, $codePays, BuzzIndexPageProvider $provider, DroitsAccesManagers $droitsAccesManagers): Response {
$backUrl = $this->computeBackUrl($request, $codePays);
$articleData = $provider->getArticleDetailById((int) $id);
if (!$articleData) {
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$url = $this->generateUrl('buzz_index', ['codePays' => $cleanCodePays]);
return new RedirectResponse($url, Response::HTTP_MOVED_PERMANENTLY);
}
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzActualiteCanonical((int) $id, $slug, $cleanCodePays);
$metaTag = $this->getMetaTagForArticleDetail($articleData);
$metaTag->setCanonical($canonicalUrl);
if (!empty($articleData['should_noindex']) && $articleData['should_noindex'] === true) {
$metaTag->setRobots('noindex, nofollow');
}
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_actualite_detail', ['slug' => $slug, 'id' => $id], null, $cleanCodePays);
$alternates = $this->canonicalUrlService->convertHreflangToAlternates($hreflangLinks);
$metaTag->setAlternates($alternates);
$operationId = null;
if (!empty($articleData['id_operation'])) {
$operationId = (int) $articleData['id_operation'];
}
$idSecteur = $provider->getSecteurWithFallback((int) $id, $operationId);
$lastActualites = [];
if (!empty($articleData['id_societe_prestataire'])) {
$lastActualites = $provider->getLastActualitesBySocietePrestataire($articleData['id_societe_prestataire']);
}
$investisseurs_experts = $this->buzzIndexPageProvider->getInvestisseursExpertsByOperation($operationId);
if (!empty($articleData['autorisation_blog']) && $articleData['autorisation_blog'] === 'non') {
$investisseurs_experts = array_filter($investisseurs_experts, function($bloc) {
$nomRole = mb_strtolower(trim($bloc['nom_role'] ?? ''), 'UTF-8');
$nomRole = str_replace(['é', 'è', 'ê', 'ë'], 'e', $nomRole);
return !preg_match('/^investisseur/i', $nomRole) && !preg_match('/^acqu[eé]reur/i', $nomRole);
});
$investisseurs_experts = array_values($investisseurs_experts);
}
$societe_toutes_actualites = [];
if (empty($articleData['autorisation_blog']) || $articleData['autorisation_blog'] !== 'non') {
$societe_toutes_actualites = $this->buzzIndexPageProvider->getSocieteToutesActualites($operationId);
}
$societesAReprendre = [];
$acquereursSecteur = [];
$secteurInfo = null;
if ($operationId) {
$societesAReprendre = $this->buzzIndexPageProvider->getSocietesAReprendreDansSecteurByOperation($operationId, 5, $idSecteur);
$acquereursSecteur = $this->buzzIndexPageProvider->getAcquereursDansSecteurByOperation($operationId, 5, $idSecteur);
$secteurInfo = $idSecteur ? $this->buzzIndexPageProvider->getSecteurInfo($idSecteur) : null;
}
$user = $this->getUser();
$typeActualite = $articleData['type_actualite'] ?? null;
$canSeeSousTitre = true;
$statusAuth = 2;
if ($typeActualite === 'juridique_et_fiscale') {
if (!$user) {
$canSeeSousTitre = false;
$statusAuth = 0;
} else {
$hasAccess = $droitsAccesManagers->hasJuridiqueAccess($user);
$canSeeSousTitre = $hasAccess;
$statusAuth = $canSeeSousTitre ? 2 : 1;
}
}
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$sendForm = $this->createForm(SendActualiteType::class, null, [
'id_actualite' => (int) $id,
]);
$publicKey = $this->getParameter('RECAPTCHA_PUBLIC_KEY') ?? '';
$response = $this->render('buzz/fragments/detail.html.twig', [
'article' => $articleData,
'backUrl' => $backUrl,
'codePays' => $cleanCodePays,
'codePaysWithUnderScore' => $codePays,
'idSecteur' => $idSecteur,
'operationId' => $operationId,
'lang' => 'fr',
'currentRoute' => $request->get('_route'),
'authFrom' => null,
'metaTag' => $metaTag,
'show_experts_references' => true,
'investisseurs_experts' => $investisseurs_experts,
'societe_toutes_actualites' => $societe_toutes_actualites,
'canSeeSousTitre' => $canSeeSousTitre,
'statusAuth' => $statusAuth,
'societes_a_reprendre' => $societesAReprendre,
'acquereurs_secteur' => $acquereursSecteur,
'secteur_info' => $secteurInfo,
'hreflangLinks' => $hreflangLinks,
'send_form' => $sendForm->createView(),
'RECAPTCHA_PUBLIC_KEY' => $publicKey,
]);
if (!empty($articleData['should_noindex']) && $articleData['should_noindex'] === true) {
$response->headers->set('X-Robots-Tag', 'noindex, nofollow');
}
return $response;
}
/**
* Calcule une URL de retour fiable pour la page détail
*/
private function computeBackUrl(Request $request, string $codePays): string {
$returnParam = (string) ($request->query->get('return', '') ?: $request->query->get('f_return', ''));
if ($returnParam !== '') {
if (strpos($returnParam, 'http') !== 0) {
return $returnParam;
}
$retHost = parse_url($returnParam, PHP_URL_HOST);
if (!empty($retHost) && $retHost === $request->getHost()) {
return $returnParam;
}
}
$referer = (string) $request->headers->get('referer', '');
$currentUrl = (string) $request->getUri();
if ($referer !== '' && $referer !== $currentUrl) {
$isLoginRef = strpos($referer, '/login') !== false;
$isSocieteRef = strpos($referer, '/actualite-societe-') !== false;
if (!$isLoginRef && !$isSocieteRef) {
return $referer;
}
}
return $this->generateUrl('buzz_index', [
'codePays' => Utils::codePaysWithoutDash($codePays)
]);
}
/**
* Page des actualités d'une société
*
* @param Request $request
* @param string $slug
* @param string $id
* @param string $codePays
* @param EntityManagerInterface $em
* @param BuzzIndexPageProvider $provider
* @return Response
*/
public function actualiteSocietes(Request $request, $slug, $id, $codePays, EntityManagerInterface $em, BuzzIndexPageProvider $provider): Response {
$idActualiteContexte = $request->query->get('idActualite');
$societe = $em->getRepository(SocietesPrestataire::class)->find($id);
if ($societe) {
$typeSociete = 'prestataire';
} else {
$societe = $em->getRepository(Societes::class)->find($id);
if ($societe) {
$typeSociete = 'news';
} else {
throw $this->createNotFoundException('Société non trouvée');
}
}
$infos = $provider->getSocieteInfosMultiTable($id);
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzActualiteSocieteCanonical((int) $id, $slug, $cleanCodePays);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_actualite_societe', ['slug' => $slug, 'id' => $id], null, $cleanCodePays);
$metaTag = $this->getMetaTagForSociete($infos, $typeSociete);
$metaTag->setCanonical($canonicalUrl);
if ($typeSociete === 'prestataire') {
$dernieresActualites = $provider->getDernieresActualitesPourSociete($infos, 1000);
} else {
$dernieresActualites = $provider->getDernieresActualitesPourSociete($infos, 1000);
}
$article = array_merge($infos, [
'societe_infos' => $infos,
'imgAffichage' => $infos['imgAffichage'] ?? null,
'imgAffichageEnError' => $infos['imgAffichageEnError'] ?? null,
'raison_sociale' => $infos['raison_sociale'] ?? '',
'dernieres_actualites_societe' => $dernieresActualites,
'lienSocieteCom' => $infos['lienSocieteCom'] ?? '',
'lienAnnuaireParticipation' => $infos['lienAnnuaireParticipation'] ?? '',
'lienFicheComplete' => $infos['lienFicheComplete'] ?? '',
'adresse_complete' => $infos['adresse_complete'] ?? '',
'caEffectif' => $infos['caEffectif'] ?? '',
'utiliserArtviper' => $infos['utiliserArtviper'] ?? '',
'carteAffichage' => $infos['carteAffichage'] ?? '',
'lienParticipation' => $infos['lienParticipation'] ?? '',
'numero_siren' => $infos['numero_siren'] ?? '',
'ca_n' => $infos['ca_n'] ?? '',
'annee_n' => $infos['annee_n'] ?? '',
'effectif_salarie_n' => $infos['effectif_salarie_n'] ?? '',
'url_site_web' => $infos['url_site_web'] ?? '',
'site_internet' => $infos['site_internet'] ?? '',
'nom_contact1' => $infos['nom_contact1'] ?? '',
'telephone' => $infos['telephone'] ?? '',
'adresse' => $infos['adresse'] ?? '',
'code_postal' => $infos['code_postal'] ?? '',
'ville' => $infos['ville'] ?? '',
'pays' => $infos['pays'] ?? '',
'id_pays' => $infos['id_pays'] ?? '',
'resume_service' => $infos['resume_service'] ?? '',
'resume_activite' => $infos['resume_activite'] ?? '',
'description_activite' => $infos['description_activite'] ?? '',
'fax' => $infos['fax'] ?? '',
'mail_contact' => $infos['mail_contact'] ?? '',
]);
$mainActualite = $dernieresActualites[0] ?? null;
$mainActualiteTitre = $mainActualite['titre_actualite'] ?? null;
$idActualiteRef = null;
if (!empty($idActualiteContexte) && ctype_digit((string) $idActualiteContexte)) {
$idActualiteRef = (int) $idActualiteContexte;
} else {
$idActualiteRef = !empty($dernieresActualites[0]['id_actualite']) ? (int) $dernieresActualites[0]['id_actualite'] : null;
}
$idSecteur = null;
if ($idActualiteRef) {
$idSecteur = $provider->getSecteurFromActualite($idActualiteRef);
}
if (!$idSecteur) {
$idSecteur = $provider->getSecteurLePlusPopulaire();
}
if (!$idSecteur) {
$idSecteur = $provider->getPremierSecteurDisponible();
}
$operationId = null;
if ($idActualiteRef) {
$operationId = $provider->getOperationIdFromActualite($idActualiteRef);
}
$societesAReprendre = $this->buzzIndexPageProvider->getSocietesAReprendreDansSecteurByOperation($operationId, 5, $idSecteur);
$acquereursSecteur = $this->buzzIndexPageProvider->getAcquereursDansSecteurByOperation($operationId, 5, $idSecteur);
$secteurInfo = $this->buzzIndexPageProvider->getSecteurInfo($idSecteur);
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
return $this->render('buzz/fragments/actualite_societe.html.twig', [
'article' => $article,
'metaTag' => $metaTag,
'codePays' => $cleanCodePays,
'codePaysWithUnderScore' => $codePays,
'lang' => 'fr',
'currentRoute' => $request->get('_route'),
'authFrom' => null,
'show_experts_references' => true,
'mainActualiteTitre' => $mainActualiteTitre,
'firstActualite' => $idActualiteRef ? ['id_actualite' => $idActualiteRef] : null,
'idSecteur' => $idSecteur,
'operationId' => $operationId,
'idActualite' => $idActualiteRef,
'societes_a_reprendre' => $societesAReprendre,
'acquereurs_secteur' => $acquereursSecteur,
'secteur_info' => $secteurInfo,
'hreflangLinks' => $hreflangLinks,
]);
}
/**
* Page des actualités par date spécifique
*
* @param Request $request
* @param string $date
* @param string $codePays
* @return Response
*/
public function actualitesParDate(Request $request, $date, $codePays): Response {
if (!preg_match('/^\d{8}$/', (string) $date)) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$dateObj = \DateTimeImmutable::createFromFormat('Ymd', $date);
if (!$dateObj) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
if ($cleanCodePays !== 'fr') {
return $this->redirectToRoute('buzz_actualite_france_par_date', [
'date' => $date,
'codePays' => $codePays
]);
}
$now = new \DateTimeImmutable();
$twoYearsAgo = $now->modify('-2 years');
if ($dateObj > $now || $dateObj < $twoYearsAgo) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$dateObj = \DateTimeImmutable::createFromFormat('Ymd', $date);
$date_label_fr = $dateObj ? $this->buzzIndexPageProvider->formatDateLongFr($dateObj) : '';
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzDateCanonical($date, $cleanCodePays);
$metaTag = $this->metaTag
->setTitle("Actualités du " . $date_label_fr . " - Fusions-Acquisitions et Capital Investissement")
->setDescription("Consultez toutes les actualités du " . $date_label_fr . " dans le domaine des fusions-acquisitions et du capital investissement")
->setCanonical($canonicalUrl);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_actualite_par_date', ['date' => $date], null, $cleanCodePays);
$actualitesALaUne = $this->buzzActualitesRepository->findActualitesALaUneDuJourByDate($date, '_fr_', 5);
$actualitesALaUne = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $actualitesALaUne);
$excludeIds = [];
if (!empty($actualitesALaUne)) {
$excludeIds = array_column($actualitesALaUne, 'id_actualite');
}
$articles = $this->buzzActualitesRepository->findNewsByDateWithVersion($date, 'france');
if (empty($articles)) {
$articles = $this->buzzActualitesRepository->findNewsByDateWithVersion($date, 'classique');
}
if (empty($articles)) {
$articles = $this->buzzActualitesRepository->findNewsByDate($date, '_fr_');
}
if (!empty($excludeIds)) {
$articles = array_values(array_filter($articles, function ($a) use ($excludeIds) {
return !in_array($a['id_actualite'], $excludeIds, true);
}));
}
$articles = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $articles);
$derniers_jours = $this->buzzIndexPageProvider->getDerniersJours(5, $dateObj);
return $this->render('buzz/index/actualites_par_date.html.twig', [
'metaTag' => $metaTag,
'articles' => $articles,
'actualites_a_la_une_du_jour' => $actualitesALaUne,
'date' => $dateObj,
'date_label_fr' => $date_label_fr,
'codePays' => str_replace('_', '', $codePays),
'codePaysWithUnderScore' => $codePays,
'lang' => 'fr',
'currentRoute' => $request->get('_route'),
'authFrom' => null,
'derniers_jours' => $derniers_jours,
'hreflangLinks' => $hreflangLinks,
]);
}
/**
* Page des actualités internationales par date spécifique
*
* @param string $date
* @param string $codePays
* @return Response
*/
public function actualitesInternationalesParDate($date, $codePays): Response {
if (!preg_match('/^\d{8}$/', (string) $date)) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$dateObj = \DateTimeImmutable::createFromFormat('Ymd', $date);
if (!$dateObj) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$now = new \DateTimeImmutable();
$twoYearsAgo = $now->modify('-2 years');
if ($dateObj > $now || $dateObj < $twoYearsAgo) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$dateObj = \DateTimeImmutable::createFromFormat('Ymd', $date);
$date_label_fr = $dateObj ? $this->buzzIndexPageProvider->formatDateLongFr($dateObj) : '';
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzActualiteInternationaleParDateCanonical($date, $cleanCodePays);
$metaTag = $this->metaTag
->setTitle("Actualités internationales du " . $date_label_fr . " - Fusions-Acquisitions et Capital Investissement")
->setDescription("Consultez toutes les actualités internationales du " . $date_label_fr . " dans le domaine des fusions-acquisitions et du capital investissement")
->setCanonical($canonicalUrl);
$actualitesALaUne = $this->buzzActualitesRepository->findActualitesALaUneDuJourInternationalByDate($date, $codePays, 5);
$actualitesALaUne = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $actualitesALaUne);
$excludeIds = [];
if (!empty($actualitesALaUne)) {
$excludeIds = array_column($actualitesALaUne, 'id_actualite');
}
$articlesRaw = $this->buzzActualitesRepository->findInternationalNewsByDate($date, $codePays);
if (!empty($excludeIds)) {
$articlesRaw = array_values(array_filter($articlesRaw, function ($a) use ($excludeIds) {
return !in_array($a['id_actualite'], $excludeIds, true);
}));
}
$articles = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $articlesRaw);
$featured = $articles[0] ?? null;
$next_articles = array_slice($articles, 1, 2);
$other_articles = array_slice($articles, 3);
$derniers_jours = $this->buzzIndexPageProvider->getDerniersJours(5, $dateObj);
return $this->render('buzz/actualite_internationale_par_date.html.twig', [
'metaTag' => $metaTag,
'featured' => $featured,
'next_articles' => $next_articles,
'other_articles' => $other_articles,
'actualites_a_la_une_du_jour' => $actualitesALaUne,
'date' => $dateObj,
'date_label_fr' => $date_label_fr,
'codePaysWithUnderScore' => $codePays,
'derniers_jours' => $derniers_jours,
]);
}
/**
* Page des actualités françaises par date spécifique (pour les pays non-français)
*
* @param Request $request
* @param string $date
* @param string $codePays
* @return Response
*/
public function actualitesFranceParDate(Request $request, $date, $codePays): Response {
if (!preg_match('/^\d{8}$/', (string) $date)) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$dateObj = \DateTimeImmutable::createFromFormat('Ymd', $date);
if (!$dateObj) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$now = new \DateTimeImmutable();
$twoYearsAgo = $now->modify('-2 years');
if ($dateObj > $now || $dateObj < $twoYearsAgo) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$dateObj = \DateTimeImmutable::createFromFormat('Ymd', $date);
$date_label_fr = $dateObj ? $this->buzzIndexPageProvider->formatDateLongFr($dateObj) : '';
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzDateCanonical($date, $cleanCodePays);
$metaTag = $this->metaTag
->setTitle("Actualités françaises du " . $date_label_fr . " - Fusions-Acquisitions et Capital Investissement")
->setDescription("Consultez toutes les actualités françaises du " . $date_label_fr . " dans le domaine des fusions-acquisitions et du capital investissement")
->setCanonical($canonicalUrl);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_actualite_france_par_date', ['date' => $date], null, $cleanCodePays);
$actualitesALaUne = $this->buzzActualitesRepository->findActualitesALaUneDuJourByDate($date, '_fr_', 5);
$actualitesALaUne = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $actualitesALaUne);
$excludeIds = [];
if (!empty($actualitesALaUne)) {
$excludeIds = array_column($actualitesALaUne, 'id_actualite');
}
$articles = $this->buzzActualitesRepository->findNewsByDateWithVersion($date, 'france');
if (empty($articles)) {
$articles = $this->buzzActualitesRepository->findNewsByDateWithVersion($date, 'classique');
}
if (empty($articles)) {
$articles = $this->buzzActualitesRepository->findNewsByDate($date, '_fr_');
}
if (!empty($excludeIds)) {
$articles = array_values(array_filter($articles, function ($a) use ($excludeIds) {
return !in_array($a['id_actualite'], $excludeIds, true);
}));
}
$articles = array_map([$this->buzzIndexPageProvider, 'formatArticle'], $articles);
$derniers_jours = $this->buzzIndexPageProvider->getDerniersJours(5, $dateObj);
return $this->render('buzz/actualite_france_par_date.html.twig', [
'metaTag' => $metaTag,
'articles' => $articles,
'actualites_a_la_une_du_jour' => $actualitesALaUne,
'date' => $dateObj,
'date_label_fr' => $date_label_fr,
'codePays' => $cleanCodePays,
'codePaysWithUnderScore' => $codePays,
'lang' => 'fr',
'currentRoute' => $request->get('_route'),
'authFrom' => null,
'derniers_jours' => $derniers_jours,
'hreflangLinks' => $hreflangLinks,
]);
}
/**
* Page des actualités par mois
*
* @param string $month
* @param string $codePays
* @return Response
*/
public function actualitesParMois($month, $codePays): Response {
if (!is_numeric($month) || $month < 1 || $month > 12) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$year = date('Y');
$lastMonths = $this->buzzIndexPageProvider->getLastMonthsHavingActuForCountry(Utils::codePaysWithoutDash($codePays), 6);
$monthExists = false;
foreach ($lastMonths as $allowedMonth) {
if ($allowedMonth['year'] == $year && $allowedMonth['number'] == $month) {
$monthExists = true;
break;
}
}
if (!$monthExists) {
$clean = Utils::codePaysWithoutDash($codePays);
return $this->redirectToRoute('buzz_index', ['codePays' => $clean]);
}
$date = \DateTimeImmutable::createFromFormat('!m', $month);
$monthName = $date ? Utils::$moisFR[$date->format('n') - 1] : $month;
$monthSlug = sprintf('%02d', $month);
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzActualitesParMoisCanonical($monthSlug, $cleanCodePays);
$metaTag = $this->metaTag
->setTitle("Actualités de " . $monthName . " " . $year . " - Fusions-Acquisitions et Capital Investissement")
->setDescription("Consultez toutes les actualités de " . $monthName . " " . $year . " dans le domaine des fusions-acquisitions et du capital investissement")
->setCanonical($canonicalUrl);
$featuredRaw = $this->buzzActualitesRepository->findFeaturedActualiteOfMonth((int) $year, (int) $month, $codePays);
$firstFeatured = $featuredRaw ? $this->buzzIndexPageProvider->formatArticle($featuredRaw) : null;
$featuredIds = $firstFeatured ? [$firstFeatured['id_actualite']] : [];
$mainArticlesRaw = $this->buzzActualitesRepository->findNewsByMonth((int) $year, (int) $month, $codePays, $featuredIds);
$mainArticles = array_map(
[$this->buzzIndexPageProvider, 'formatArticle'],
array_map(function ($a) {
return (array) $a;
}, $mainArticlesRaw)
);
return $this->render('buzz/mois_avec_actualites.html.twig', [
'first_featured' => $firstFeatured,
'main_articles' => $mainArticles,
'year' => $year,
'metaTag' => $metaTag,
'month' => $month,
'monthName' => $monthName,
'codePaysWithUnderScore' => $codePays,
'lastMonthsHavingActu' => $this->buzzIndexPageProvider->getLastMonthsHavingActuForCountry($codePays, 6),
]);
}
/**
* Page des actualités weekend
*
* @param string $codePays
* @param string|null $date
* @return Response
*/
public function weekend($codePays, ?string $date = null): Response {
$codePaysClean = Utils::codePaysWithoutDash($codePays);
$weekendData = $this->buzzIndexPageProvider->getWeekendPageData($codePaysClean, $date);
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzWeekendCanonical($cleanCodePays, $date);
$metaTag = new MetaTag();
$metaTag->setTitle('Revue de presse de la semaine - FUSACQ Buzz');
$metaTag->setDescription('Retrouvez les actualités sélectionnées de la semaine dans le domaine des fusions-acquisitions et du capital-investissement.');
$metaTag->setCanonical($canonicalUrl);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_weekend', ['date' => $date], null, $cleanCodePays);
return $this->render('buzz/index/weekend.html.twig', [
'grouped_articles' => $weekendData['grouped_articles'],
'week_start' => $weekendData['week_start'],
'week_end' => $weekendData['week_end'],
'week_label' => $weekendData['week_label'],
'derniers_jours' => $weekendData['derniers_jours'],
'metaTag' => $metaTag,
'codePaysWithUnderScore' => $codePays,
'hreflangLinks' => $hreflangLinks,
]);
}
/**
* Page "Publier des actualités"
*/
public function publierDesActualites(Request $request, $codePays): Response {
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzPublierActualitesCanonical($cleanCodePays);
$metaTag = $this->metaTag
->setTitle("Publiez vos actualités - FUSACQ Buzz")
->setDescription("Publiez vos actualités sur FUSACQ Buzz. Experts, sociétés et repreneurs, diffusez vos opérations de fusions-acquisitions.")
->setCanonical($canonicalUrl);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_publier_actualites', [], null, $cleanCodePays);
return $this->render('buzz/fragments/publier_des_actualites.html.twig', [
'metaTag' => $metaTag,
'codePays' => $cleanCodePays,
'codePaysWithUnderScore' => $codePays,
'lang' => 'fr',
'currentRoute' => $request->get('_route'),
'authFrom' => null,
'hreflangLinks' => $hreflangLinks,
]);
}
}