<?php
namespace App\Controller;
use App\Entity\Boutique\CategorieProduit;
use App\Entity\Boutique\Produit;
use App\Entity\Boutique\ProduitReducCe;
use App\Entity\Contenu\CategorieActualite;
use App\Entity\Contenu\CategorieCse;
use App\Entity\Contenu\Page;
use App\Entity\Contenu\PageAccueil;
use App\Entity\Formulaire\NewsletterInscription;
use App\Entity\Menu\Menu;
use App\Form\Type\Formulaire\NewsletterInscriptionType;
use App\Manager\Boutique\WebserviceManager;
use App\Manager\Categorie\CategorieManager;
use App\Repository\Categorie\CategorieRepository;
use App\Repository\Formulaire\ConversationRepository;
use App\Repository\Menu\MenuItemRepository;
use App\Repository\Menu\MenuRepository;
use FOS\UserBundle\Model\UserInterface;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Class WidgetController
* @package App\Controller
*/
class WidgetController extends AbstractController
{
/**
* @return Response
*/
public function toolbar(
Request $request,
UrlGeneratorInterface $router,
ConversationRepository $conversationRepository
): Response
{
$initialRequest = $request->get('initialRequest');
$lienAdmin = null;
foreach ($initialRequest->attributes->all() as $key => $value) {
if (
$value instanceof Page ||
$value instanceof PageAccueil ||
$value instanceof CategorieActualite
) {
$routeName = 'admin_app_contenu_'.strtolower($key).'_edit';
}
if (
$value instanceof CategorieProduit ||
$value instanceof Produit
) {
$routeName = 'admin_app_boutique_'.strtolower($key).'_edit';
// Check si le produit est un coupon de réduction
if (method_exists($value, 'isCouponReduction') && true === $value->isCouponReduction()) {
$routeName = 'admin_app_boutique_produit_coupon_reduction_edit';
}
}
if (isset($routeName) && is_object($value)) {
try {
$url = $router->generate($routeName, ['id' => $value->getId()]);
} catch (RouteNotFoundException $e) {
$url = null;
}
if (!is_null($url)) {
$lienAdmin = $this->generateUrl($routeName, ['id' => $value->getId()]);
}
}
}
$conversationNonRepondues = $conversationRepository->getConversationNonRepondues();
return $this->render('widget/toolbar/index.html.twig', [
'initialRequest' => $initialRequest,
'lienAdmin' => $lienAdmin,
'conversationNonRepondues' => $conversationNonRepondues
]);
}
/**
* @return Response
*/
public function header(
Request $request,
CategorieRepository $categorieRepository,
MenuItemRepository $menuItemRepository
): Response
{
$user = $this->getUser();
if (getenv('APP_SITE_SLUG') != 'prestatime' && (!is_object($user) || !$user instanceof UserInterface)) {
$menuItems = $menuItemRepository->findMenuItems(Menu::MENU_HEADER_GUEST);
} else {
$menuItems = $menuItemRepository->findMenuItems(Menu::MENU_HEADER);
}
if (getenv('APP_SITE_SLUG') == 'prestatime') {
$categorieParents = $categorieRepository->findCategories(
'boutique',
'produit',
null,
true,
null,
['C.position' => 'ASC']
);
}
return $this->render('widget/header/index.html.twig', [
'initialRequest' => $request->get('initialRequest'),
'menuItems' => $menuItems,
'categorieParents' => (isset($categorieParents)) ? $categorieParents : []
]);
}
/**
* @return Response
*/
public function footer(
MenuRepository $menuRepository,
MenuItemRepository $menuItemRepository
): Response
{
$menuLeft = $menuRepository->findOneById(Menu::MENU_FOOTER_LEFT);
$menuRight = $menuRepository->findOneById(Menu::MENU_FOOTER_RIGHT);
$menuLeftItems = $menuItemRepository->findMenuItems(Menu::MENU_FOOTER_LEFT);
$menuRightItems = $menuItemRepository->findMenuItems(Menu::MENU_FOOTER_RIGHT);
return $this->render('widget/footer/index.html.twig', [
'menuLeft' => $menuLeft,
'menuLeftItems' => $menuLeftItems,
'menuRight' => $menuRight,
'menuRightItems' => $menuRightItems,
]);
}
/**
* @return Response
*/
public function reassurance(): Response
{
return $this->render('widget/reassurance/index.html.twig', [
]);
}
/**
* @return Response
*/
public function newsletter(Request $request): Response
{
$newsletterInscription = new NewsletterInscription();
$form = $this->createForm(NewsletterInscriptionType::class, $newsletterInscription);
$form->handleRequest($request);
return $this->render('widget/newsletter/index.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @return Response
*/
public function recherche(Request $request, CategorieRepository $categorieRepository): Response
{
$initialRequest = $request->get('initialRequest');
// Desactivation du moteur sur page ski (pas assez de place + bug css)
$page = $initialRequest->attributes->get('page', null);
if ($page instanceof Page && $page->getId() == Page::PAGE_SKI) {
return new Response(null);
}
$categorieProduits = $categorieRepository->findCategories(
'boutique',
'produit',
null,
true,
null,
['C.position' => 'ASC']
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.tamtamice.fr/offre/categories');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$response = curl_exec($ch);
curl_close($ch);
$categorieOffres = json_decode($response, true);
return $this->render('widget/recherche/index.html.twig', [
'initialRequest' => $request->get('initialRequest'),
'categorieProduits' => $categorieProduits,
'categorieOffres' => $categorieOffres,
]);
}
public function filariane(
$entity,
CategorieManager $categorieManager,
Request $request,
UrlGeneratorInterface $router,
TranslatorInterface $translator
)
{
$initialRequest = $request->get('initialRequest');
$filariane = array();
if ($entity instanceof Page) {
$filariane[] = array(
'lien' => '',
'titre' => $entity->getIntitule(),
);
}
if (
$entity instanceof CategorieActualite ||
$entity instanceof CategorieCse ||
$entity instanceof CategorieProduit
) {
$arborescence = $categorieManager->getRecursiveCategorieParent($entity);
unset($arborescence[0]);
$page = $initialRequest->attributes->get('page', null);
if ($entity instanceof CategorieActualite) {
$routeBase = 'actualite';
}
if ($entity instanceof CategorieCse) {
$routeBase = 'cse';
}
if ($entity instanceof CategorieProduit) {
$routeBase = 'produit';
}
$filariane[] = array(
'lien' => $router->generate($routeBase.'.liste'),
'titre' => $page->getIntitule(),
);
if (count($arborescence)) {
foreach (array_reverse($arborescence) as $categorie) {
$filariane[] = array(
'lien' => $router->generate($routeBase.'.categorie.liste', ['slug' => $categorie->getSlug()]),
'titre' => $categorie->getIntitule(),
);
}
}
$filariane[] = array(
'lien' => '',
'titre' => $entity->getIntitule(),
);
}
if ($entity instanceof Produit) {
$arborescence = $categorieManager->getRecursiveCategorieParent($entity->getDefaultCategorie());
if (count($arborescence)) {
foreach (array_reverse($arborescence) as $categorie) {
$filariane[] = array(
'lien' => $router->generate('produit.categorie.liste', ['slug' => $categorie->getSlug()]),
'titre' => $categorie->getIntitule(),
);
}
}
$filariane[] = array(
'lien' => '',
'titre' => $entity->getIntitule(),
);
}
if ($entity instanceof UserInterface) {
$lien = '';
if (false === strpos($initialRequest->get('_route'), 'dashboard')) {
$lien = $router->generate('fos_user_profile_show');
}
$filariane[] = array(
'lien' => $lien,
'titre' => $translator->trans('mon_compte'),
);
if (false !== strpos($initialRequest->get('_route'), 'commande')) {
$filariane[] = array(
'lien' => '',
'titre' => $translator->trans('commandes_en_cours'),
);
}
if (false !== strpos($initialRequest->get('_route'), 'historique')) {
$filariane[] = array(
'lien' => '',
'titre' => $translator->trans('historique_commandes'),
);
}
if (false !== strpos($initialRequest->get('_route'), 'profile_edit')) {
$filariane[] = array(
'lien' => '',
'titre' => $translator->trans('informations_personnelles'),
);
}
if (false !== strpos($initialRequest->get('_route'), 'adresse')) {
$filariane[] = array(
'lien' => '',
'titre' => $translator->trans('adresses_livraison'),
);
}
if (false !== strpos($initialRequest->get('_route'), 'password')) {
$filariane[] = array(
'lien' => '',
'titre' => $translator->trans('mot_de_passe'),
);
}
}
return $this->render('widget/filariane/index.html.twig', [
'filariane' => $filariane
]);
}
}