<?php
declare(strict_types=1);
namespace App\Controller\Buzz;
use App\Helper\Utils;
use App\Controller\EntityUsingController;
use App\Repository\Buzz\BuzzActualitesRepository;
use App\Services\Buzz\BuzzIndexPageProvider;
use App\Services\Buzz\CanonicalUrlService;
use App\Services\MetaTag;
use Symfony\Component\HttpFoundation\Request;
use App\Services\ManagerEntity\PanierManagers;
use Symfony\Component\HttpFoundation\Response;
use App\Services\ManagerEntity\ParametreSiteManagers;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use App\Services\ManagerEntity\DroitsAccesManagers;
/**
*
* @author mehrez
*/
class CoreController extends EntityUsingController
{
const MAX_AGE = 43200;
/**
* @var \App\Services\ManagerEntity\ParametreSiteManagers
*/
private $psm;
/**
* @var ParameterBagInterface
*/
private $params;
/**
* @var PanierManagers
*/
private $pm;
/**
* @var BuzzIndexPageProvider
*/
private $buzzIndexPageProvider;
/**
* @var BuzzActualitesRepository
*/
private $buzzActualitesRepository;
/**
* @var DroitsAccesManagers
*/
private $droitsAccesManagers;
/**
* @var CanonicalUrlService
*/
private $canonicalUrlService;
public function __construct(PanierManagers $pm, ParametreSiteManagers $psm, ParameterBagInterface $params, BuzzIndexPageProvider $buzzIndexPageProvider, BuzzActualitesRepository $buzzActualitesRepository, DroitsAccesManagers $droitsAccesManagers, CanonicalUrlService $canonicalUrlService)
{
$this->psm = $psm;
$this->params = $params;
$this->pm = $pm;
$this->buzzIndexPageProvider = $buzzIndexPageProvider;
$this->buzzActualitesRepository = $buzzActualitesRepository;
$this->droitsAccesManagers = $droitsAccesManagers;
$this->canonicalUrlService = $canonicalUrlService;
}
public function changeLangue(Request $request): RedirectResponse
{
$uri = $request->server->get('HTTP_REFERER');
$lang = $request->attributes->get('lang');
if ($lang) {
setcookie('lang', $lang, time() + 60 * 60 * 24 * 365);
$request->getSession()->set('_locale', $lang);
$request->setLocale($lang);
$request->getSession()->set('lang', $lang);
}
return $this->redirect($uri);
}
/**
*
*/
public function changeFlag(Request $request, $codePays) {
// depuis config/packages/international.yaml
$listCodePays = array_column($this->params->get('app.pays_version'), '2', ''); // _fr_ _ch_ _be_ _ca_
$oldPathUri = $request->headers->get('referer');
foreach ($listCodePays as $code) {
if (!empty($oldPathUri) && !empty($code) && Utils::stringContainsWord($oldPathUri, $code)) {
$oldPathUri = str_replace($code, $codePays, $oldPathUri);
return $this->redirect($oldPathUri);
}
if (!empty($oldPathUri) && Utils::endsWith('/' . Utils::codePaysWithoutDash($code), $oldPathUri)) { // PAGE D'ACCUEIL AVEC /fr
$oldPathUri = str_replace(Utils::codePaysWithoutDash($code), Utils::codePaysWithoutDash($codePays), $oldPathUri);
return $this->redirect($oldPathUri);
}
}
if (!$oldPathUri) {
$oldPathUri = "/";
}
return $this->redirect($oldPathUri);
}
public function menu(Request $request, $lang, $currentRoute, $codePays, $authFrom = null): Response
{
$listValueParamSiteFooter = $this->psm->getListValueParamSiteMenu($codePays, 'FUSACQ');
foreach ($listValueParamSiteFooter as $key => $item) {
$item['value'] = Utils::getLinkFromValueParam($item['value']);
$listValueParamSiteFooter[$key] = $item;
}
$session = $request->getSession();
$userIdentity = null;
if ($session) {
$userIdentity = $session->get('user');
}
$response = $this->render(
'buzz/core/menu.html.twig',
[
'controller_name' => 'CoreController',
'codePaysWithUnderScore' => $codePays,
'currentRoute' => $currentRoute,
'codePays' => str_replace('_', '', $codePays),
'nb_bloc' => count($listValueParamSiteFooter),
'lang' => $lang,
'params_header' => $listValueParamSiteFooter,
'authFrom' => $authFrom,
'userIdentity' => $userIdentity
]
);
$response->setPublic();
$response->setMaxAge(43200); // 12heures
return $response;
}
/**
*/
public function footer(Request $request, $codePays, $lang): Response
{
$listValueParamSiteFooter = $this->psm->getListValueParamSiteFooter($codePays, 'FUSACQ');
foreach ($listValueParamSiteFooter as $key => $item) {
$item['value'] = Utils::getLinkFromValueParam($item['value']);
$listValueParamSiteFooter[$key] = $item;
}
$html = $this->renderView('buzz/core/footer.html.twig', [
'controller_name' => 'CoreController',
'codePaysWithUnderScore' => $codePays,
'nb_bloc' => count($listValueParamSiteFooter),
'lang' => $lang,
'anneeEnCours' => date("Y"),
'params_footer' => $listValueParamSiteFooter,
]);
$etag = md5($html);
$response = new Response($html);
$response->setEtag($etag);
if ($response->isNotModified($request)) {
return $response;
}
$response->setPublic();
$response->setMaxAge(43200); // 12 heures
return $response;
}
/**
* Récupère la colonne de droite avec les données juridiques et experts
*
* @param Request $request
* @param string $codePays
* @return Response
*/
public function rightColumn(Request $request, $codePays = 'fr')
{
$alwaysShow = $request->get('alwaysShowJuridiqueExperts', false);
$isInternationalImage = $request->get('isInternationalImage', false);
if ($codePays === 'fr' || $alwaysShow) {
$juridique = $this->buzzIndexPageProvider->getSidebarJuridiqueData('fr', 3);
$experts = $this->buzzIndexPageProvider->getSidebarDirectExpertsData('fr');
} else {
$juridique = [];
$experts = [];
}
$enDirectFusacq = $this->buzzIndexPageProvider->getLastDirectFusacqWithHeure(5);
return $this->render('buzz/fragments/sidebar.html.twig', [
'juridique' => $juridique,
'experts' => $experts,
'en_direct_fusacq' => $enDirectFusacq,
'alwaysShowJuridiqueExperts' => $alwaysShow,
'isInternationalImage' => $isInternationalImage,
]);
}
/**
* Récupère la colonne de droite pour la page de détail d'un article
*
* @param string $lang
* @param string $codePays
* @param string|null $authFrom
* @param Request $request
* @return Response
*/
public function colonneDroiteDetail($lang, $codePays, $authFrom = null, Request $request)
{
$idSecteur = $request ? $request->get('idSecteur') : null;
$idActualite = $request->get('idActualite');
$idOperation = $request->get('idOperation');
if (!$idSecteur && $idActualite) {
if (!$idOperation) {
$articleData = $this->buzzIndexPageProvider->getArticleDetailById((int)$idActualite);
if ($articleData && !empty($articleData['id_operation'])) {
$idOperation = (int) $articleData['id_operation'];
}
}
$idSecteur = $this->buzzIndexPageProvider->getSecteurWithFallback((int)$idActualite, $idOperation ? (int)$idOperation : null);
}
$show_experts_references = $request->get('show_experts_references', false);
$render_only_tables = $request->get('render_only_tables', false);
$show_tables_in_aside = $request->get('show_tables_in_aside', true);
$idLocalisation = $request->get('idLocalisation');
if (!$idOperation && $idActualite) {
$articleData = $this->buzzIndexPageProvider->getArticleDetailById((int)$idActualite);
if ($articleData && !empty($articleData['id_operation'])) {
$idOperation = (int) $articleData['id_operation'];
}
}
$societesAReprendre = [];
$acquereursSecteur = [];
$secteurInfo = null;
if ($idOperation) {
$operation = $this->buzzIndexPageProvider->getOperationById($idOperation);
if ($operation && !empty($operation['id_secteur_activite'])) {
$idSecteur = (int) $operation['id_secteur_activite'];
}
$societesAReprendre = $this->buzzIndexPageProvider->getSocietesAReprendreDansSecteurByOperation($idOperation, 5, $idSecteur);
$acquereursSecteur = $this->buzzIndexPageProvider->getAcquereursDansSecteurByOperation($idOperation, 5, $idSecteur);
if (!$idLocalisation) {
$idLocalisation = $this->buzzIndexPageProvider->getLocalisationIdFromOperation((int) $idOperation);
}
if ($idSecteur) {
$secteurInfo = $this->buzzIndexPageProvider->getSecteurInfo($idSecteur);
}
}
if ($idSecteur) {
$actualitesSecteur = $this->buzzIndexPageProvider->getSidebarActualitesSecteur($idSecteur, 5, $idActualite ? (int)$idActualite : null);
} else {
$actualitesSecteur = [];
}
$localisationInfo = $this->buzzIndexPageProvider->getLocalisationInfo($idLocalisation);
$enDirectFusacq = $this->buzzIndexPageProvider->getLastDirectFusacqWithHeure(5);
$enDirectDesExperts = $this->buzzIndexPageProvider->getSidebarDirectExpertsData($codePays);
$renderOnlyTables = (bool) $request->get('render_only_tables', false);
$template = $renderOnlyTables
? 'buzz/fragments/secteur_tables.html.twig'
: 'buzz/fragments/colonne_droite_buzz.html.twig';
return $this->render($template, [
'actualites_secteur' => $actualitesSecteur,
'societes_a_reprendre' => $societesAReprendre,
'acquereurs_secteur' => $acquereursSecteur,
'secteur_info' => $secteurInfo,
'localisation_info' => $localisationInfo,
'en_direct_fusacq' => $enDirectFusacq,
'en_direct_des_experts' => $enDirectDesExperts,
'codePaysWithUnderScore' => $codePays,
'lang' => $lang,
'authFrom' => $authFrom,
'show_experts_references' => $show_experts_references,
'render_only_tables' => $renderOnlyTables,
'show_tables_in_aside' => $show_tables_in_aside,
]);
}
/**
* Récupère la sidebar de droite avec prestations, formations et juridique
*
* @param string $lang
* @param string $codePays
* @param string|null $authFrom
* @return Response
*/
public function sidebarDroite($lang, $codePays, $authFrom = null)
{
$prestations = $this->buzzIndexPageProvider->getDernieresPrestationsSidebar(3);
$formations = $this->buzzIndexPageProvider->getFormationsSidebar(3);
$juridique = $this->buzzIndexPageProvider->getSidebarJuridiqueData($codePays, 3);
return $this->render('buzz/fragments/sidebar_droite.html.twig', [
'prestations' => $prestations,
'formations' => $formations,
'juridique' => $juridique,
'codePaysWithUnderScore' => $codePays,
'lang' => $lang,
'authFrom' => $authFrom,
]);
}
/**
* Récupère l'aside juridique et fiscal avec les actualités et experts
*
* @param string $codePays
* @param string|null $authFrom
* @return Response
*/
public function asideJuridiqueFiscale($codePays = 'fr', $authFrom = null)
{
$enDirectFusacq = $this->buzzIndexPageProvider->getLastDirectFusacqWithHeure(5);
$enDirectDesExperts = $this->buzzIndexPageProvider->getSidebarDirectExpertsData($codePays);
$user = $this->getUser();
$statusAuth = 2;
if ($user) {
$hasAccess = $this->droitsAccesManagers->hasJuridiqueAccess($user);
$statusAuth = $hasAccess ? 2 : 1;
} else {
$statusAuth = 0;
}
return $this->render('buzz/fragments/aside_juridique_fiscale.html.twig', [
'enDirectFusacq' => $enDirectFusacq,
'enDirectDesExperts' => $enDirectDesExperts,
'authFrom' => $authFrom,
'statusAuth' => $statusAuth,
]);
}
/**
* Page des flux RSS
*/
public function fluxRss(Request $request, $codePays = '_fr_'): Response
{
$lang = $request->getLocale();
$currentRoute = 'buzz_flux_rss';
$codePaysWithUnderScore = $codePays;
$authFrom = null;
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzFluxRssCanonical($cleanCodePays);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_flux_rss', [], null, $cleanCodePays);
$alternates = $this->canonicalUrlService->convertHreflangToAlternates($hreflangLinks);
$metaTag = (new MetaTag())
->setTitle('Flux RSS Fusacq Buzz - Actualités fusions-acquisitions')
->setDescription('Abonnez-vous aux flux RSS Fusacq Buzz pour recevoir l\'actualité des fusions-acquisitions en temps réel. Flux RSS national, international, juridique et fiscal.')
->setCanonical($canonicalUrl)
->setAlternates($alternates);
return $this->render('buzz/flux_rss.html.twig', [
'metaTag' => $metaTag,
'lang' => $lang,
'currentRoute' => $currentRoute,
'codePaysWithUnderScore' => $codePaysWithUnderScore,
'authFrom' => $authFrom,
'hreflangLinks' => $hreflangLinks,
]);
}
/**
* Page inscription classements
*/
public function inscriptionClassements(Request $request, $codePays = '_fr_'): Response
{
$lang = $request->getLocale();
$cleanCodePays = $this->canonicalUrlService->cleanCodePays($codePays);
$canonicalUrl = $this->canonicalUrlService->getBuzzInscriptionClassementsCanonical($cleanCodePays);
$hreflangLinks = $this->canonicalUrlService->getBuzzHreflangLinks('buzz_inscription_classements', [], null, $cleanCodePays);
$alternates = $this->canonicalUrlService->convertHreflangToAlternates($hreflangLinks);
$metaTag = (new MetaTag())
->setTitle('Les classements FUSACQ : Mode d\'emploi')
->setDescription('Comment apparaître dans les classements FUSACQ ?')
->setCanonical($canonicalUrl)
->setAlternates($alternates);
return $this->render('classement/inscription_classements.html.twig', [
'metaTag' => $metaTag,
'lang' => $lang,
'currentRoute' => 'buzz_inscription_classements',
'codePaysWithUnderScore' => $codePays,
'authFrom' => null,
'hreflangLinks' => $hreflangLinks,
]);
}
}