src/Controller/CompanyController.php line 645

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Swift_Mailer;
  4. use Swift_Message;
  5. use App\Entity\ProductClick;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  7. use App\Entity\Subcategory;
  8. use App\Service\FileUploader;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use App\Service\RegisteredToNewsletterChecker;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use PhpOffice\PhpSpreadsheet\IOFactory;
  13. use Symfony\Component\Security\Core\Security;
  14. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  15. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  16. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  17. use Symfony\Component\Form\Extension\Core\Type\FileType;
  18. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  19. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  20. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  21. use App\Entity\CompanyFav;
  22. use App\Entity\CompanyFavoris;
  23. use App\Entity\ProductFav;
  24. use App\Entity\Visite;
  25. use App\Entity\Product;
  26. use App\Repository\CompanyFavorisRepository;
  27. use App\Repository\VisiteRepository;
  28. use Doctrine\Common\Collections\ArrayCollection;
  29. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  30. use Symfony\Component\Form\Extension\Core\Type\TextType;
  31. use phpDocumentor\Reflection\Types\Integer;
  32. use phpDocumentor\Reflection\Types\String_;
  33. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  34. use Symfony\Component\HttpFoundation\File\File;
  35. use Symfony\Component\HttpFoundation\Response;
  36. use Symfony\Component\Mime\Address;
  37. use Symfony\Component\Routing\Annotation\Route;
  38. use App\Entity\Company;
  39. use App\Repository\CompanyRepository;
  40. use App\Entity\Category;
  41. use App\Entity\Marchandise;
  42. use App\Entity\NewsLetterUser;
  43. use App\Form\CompanyType;
  44. use Symfony\Bundle\FrameworkBundle\Controller;
  45. use Sensio\Bundle\FrameworkExtraBundle\Configuration;
  46. use Symfony\Component\HttpFoundation\Request;
  47. use Symfony\Component\Form\FormTypeInterface;
  48. use Cocur\Slugify\Slugify;
  49. use Symfony\Component\HttpFoundation\Session\Session;
  50. use Symfony\Component\Routing\RouterInterface;
  51. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  52. use Symfony\Component\Serializer\SerializerInterface;
  53. use Symfony\Component\Validator\Validator\ValidatorInterface;
  54. use Symfony\Component\HttpFoundation\JsonResponse;
  55. use App\Service\TraduireContenu;
  56. use App\Repository\CategoryRepository;
  57. use App\Repository\UserRepository;
  58. use Symfony\Component\Mime\Email;
  59. use Symfony\Component\Mailer\MailerInterface;
  60. use Symfony\Component\Form\FormError;
  61. use Symfony\Contracts\HttpClient\HttpClientInterface;
  62. use App\Form\DesactivateCompanyType;
  63. use App\Repository\SubcategoryRepository;
  64. use App\Service\CryptService;
  65. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  66. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  67. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  68. use Symfony\Component\Serializer\Serializer;
  69. use App\Entity\GetUser;
  70. use App\Entity\User;
  71. use App\Service\CallApiService;
  72. // use Doctrine\ORM\EntityManagerInterface as EntityManager;
  73. class CompanyController extends AbstractController
  74. {
  75.     private $em;
  76.     private $traduireContenu;
  77.     private $client;
  78.     public function __construct(EntityManagerInterface $emTraduireContenu $traduireContenuHttpClientInterface $client)
  79.     {
  80.         $this->client $client;
  81.         $this->em $em;
  82.         $this->traduireContenu $traduireContenu;
  83.     }
  84.     /**
  85.      * @Route("/redirectRegister/", name="redirect_inscription")
  86.      */
  87.     public function setGaeaUserId(Request $requestSerializerInterface $serializerCategoryRepository $catrepFileUploader $fileUploader)
  88.     {
  89.         $em $this->getDoctrine()->getManager();
  90.         //$contenu = $request->getContent();
  91.         $contenu $request->request->get('objArr');
  92.         $contenuDecode json_decode($contenutrue);
  93.         //dump($contenuDecode);
  94.         //$company = $serializer->deserialize($contenu, Company::class, 'json');
  95.         $categories_name $contenuDecode['categories'];
  96.         //dump($categories_name);
  97.         //$categories_name = $request->request->get('objArr')['categories'];
  98.         $categories = new ArrayCollection();
  99.         foreach ($categories_name as $category_name) {
  100.             $categories[] = $catrep->findOneBy(['name' => $category_name]);
  101.         }
  102.         //dump ($categories);
  103.         $gaeauserid $contenuDecode['gaeaUserId'];
  104.         $username $contenuDecode['username'];
  105.         $rue $contenuDecode['street'];
  106.         $name $contenuDecode['name'];
  107.         $username $contenuDecode['username'];
  108.         $ville $contenuDecode['city'];
  109.         $raisonsociale $contenuDecode['socialreason'];
  110.         $codepostale $contenuDecode['postcode'];
  111.         $canton $contenuDecode['region'];
  112.         $pays $contenuDecode['country'];
  113.         $latitude $contenuDecode['latitude'];
  114.         $longitude $contenuDecode['longtitude'];
  115.         $tel $contenuDecode['phone'];
  116.         $site $contenuDecode['urlwebsite'];
  117.         $linkedin $contenuDecode['urllinkedin'];
  118.         $facebook $contenuDecode['urlfacebook'];
  119.         $twitter $contenuDecode['urltwitter'];
  120.         $débutactivité $contenuDecode['startingdate'];
  121.         $certif $contenuDecode['certification'];
  122.         $vision $contenuDecode['vision'];
  123.         $zoneinfluence $contenuDecode['influencezone'];
  124.         $descritpion $contenuDecode['description'];
  125.         $evaluation $contenuDecode['wantevaluation'];
  126.         $niveau $contenuDecode['niveau'];
  127.         $file $request->files->get('file');
  128.         // dump($request);
  129.         // dump($request->files);
  130.         $nom $contenuDecode['nom'];
  131.         $prenom $contenuDecode['prenom'];
  132.         $image $contenuDecode['image'];
  133.         $Setcompany = new Company();
  134.         if (!is_null($file)) {
  135.             $path $this->getParameter('companies');
  136.             // dump($path);
  137.             $filename $fileUploader->upload($file$path);
  138.             // dump($file);
  139.             // dump($filename);
  140.             $Setcompany->setImage($filename);
  141.         }
  142.         $Setcompany->setName($name);
  143.         $Setcompany->setStreet($rue);
  144.         $Setcompany->setCity($ville);
  145.         $Setcompany->setsocialreason($raisonsociale);
  146.         $Setcompany->setPostcode($codepostale);
  147.         $Setcompany->setRegion($canton);
  148.         $Setcompany->setCountry($pays);
  149.         $Setcompany->setPhone($tel);
  150.         $Setcompany->setUrlwebsite($site);
  151.         $Setcompany->setUrllinkedin($linkedin);
  152.         $Setcompany->setUrlfacebook($facebook);
  153.         $Setcompany->setUrltwitter($twitter);
  154.         //$Setcompany->setstartingdate(new \DateTime($débutactivité));
  155.         $Setcompany->setstartingdate($débutactivité);
  156.         $Setcompany->setCertification($certif);
  157.         $Setcompany->setLastname($nom);
  158.         $Setcompany->setFirstname($prenom);
  159.         //$Setcompany->setImage($image);
  160.         foreach ($categories as $cat) {
  161.             $Setcompany->addCategory($cat);
  162.         }
  163.         $Setcompany->setVision($vision);
  164.         $Setcompany->setInfluencezone($zoneinfluence);
  165.         $Setcompany->setDescription($descritpion);
  166.         $Setcompany->setWantevaluation($evaluation);
  167.         $Setcompany->setLatitude($latitude);
  168.         $Setcompany->setLongtitude($longitude);
  169.         $Setcompany->setgaeaUserId($gaeauserid);
  170.         $Setcompany->setUsername($username);
  171.         $Setcompany->setRole('ROLE_COMPANY');
  172.         $slugify = new Slugify();
  173.         $slug $slugify->slugify($name);
  174.         $Setcompany->setSlug($slug);
  175.         $Setcompany->setActivated(true);
  176.         $Setcompany->setActived(true);
  177.         $Setcompany->setEmailValidated(false);
  178.         $token bin2hex(random_bytes(21));
  179.         $Setcompany->setToken($token);
  180.         $Setcompany->setInscriptiondate(new \DateTime());
  181.         $Setcompany->setNiveau($niveau);
  182.         $em $this->getDoctrine()->getManager();
  183.         $em->persist($Setcompany);
  184.         //enregistrement a la newsletter
  185.         if ($contenuDecode['newsletter']) {
  186.             $existingNewsletterUser $em->getRepository(NewsLetterUser::class)->findOneBy(['mail' => $contenuDecode['mail']]);
  187.             if ($existingNewsletterUser) {
  188.                 $em->remove($existingNewsletterUser);
  189.                 //$existingNewsletterUser->setUserId($Setcompany);
  190.             }
  191.             $newsletterUser = new NewsLetterUser();
  192.             // dump($Setcompany);
  193.             $newsletterUser->setUserId($Setcompany);
  194.             $newsletterUser->setNom($nom);
  195.             $newsletterUser->setPrenom($prenom);
  196.             $newsletterUser->setCodePostal($codepostale);
  197.             $newsletterUser->setVille($ville);
  198.             $newsletterUser->setMail($contenuDecode['mail']);
  199.             $em->persist($newsletterUser);
  200.         }
  201.         $em->flush();
  202.         return $this->json(['status' => 200'message' => "Ok"]);
  203.     }
  204.     /**
  205.      * @Route("/newsletter/inscription", name="newsletter_inscription", methods={"POST"})
  206.      */
  207.     public function inscriptionNewsletter(Request $requestMailerInterface $mailerSessionInterface $sessionEntityManagerInterface $entityManager)
  208.     {
  209.         $userEmail $session->get('email');
  210.         $username $session->get('username');
  211.         //$userVille = $session->get('ville');
  212.         /* $userPrenom = $session->get('prenom');
  213.         
  214.         $userCodePostal = $session->get('code_postal');*/
  215.         if (empty($userEmail)) {
  216.             return new JsonResponse(['status' => 'error''message' => 'Les données nécessaires n\'ont pas été trouvées dans la session']);
  217.         }
  218.         $existingUser $entityManager->getRepository(NewsLetterUser::class)->findOneBy(['mail' => $userEmail]);
  219.         if ($existingUser) {
  220.             return new JsonResponse(['status' => 'success']);
  221.         }
  222.         $newsLetterUser = new NewsLetterUser();
  223.         $newsLetterUser->setMail($userEmail);
  224.         $newsLetterUser->setNom($username);
  225.         //$newsLetterUser->setVille($userVille);
  226.         /* $newsLetterUser->setPrenom($userPrenom);
  227.         
  228.        
  229.         $newsLetterUser->setCodePostal($userCodePostal);*/
  230.         try {
  231.             $entityManager->persist($newsLetterUser);
  232.             $entityManager->flush();
  233.         } catch (\Exception $e) {
  234.             return new JsonResponse(['status' => 'error''message' => 'Une erreur s\'est produite lors de la sauvegarde des données: ' $e->getMessage()]);
  235.         }
  236.         // Envoyer l'e-mail de confirmation
  237.         $email = (new Email())
  238.             ->from('contact@sustlivprogram.org')
  239.             ->to($userEmail)
  240.             ->subject('Inscription à la Newsletter')
  241.             ->text('Vous êtes bien inscrit à la newsletter.');
  242.         try {
  243.             $mailer->send($email);
  244.         } catch (\Exception $e) {
  245.             return new JsonResponse(['status' => 'error''message' => 'Une erreur s\'est produite lors de l\'inscription à la newsletter: ' $e->getMessage()]);
  246.         }
  247.         return new JsonResponse(['status' => 'success']);
  248.     }
  249.     /**
  250.      * @Route("/newsletter/desinscription", name="newsletter_desinscription", methods={"POST"})
  251.      */
  252.     public function desinscriptionNewsletter(Request $requestEntityManagerInterface $entityManager)
  253.     {
  254.         $userEmail $request->getSession()->get('email');
  255.         if (empty($userEmail)) {
  256.             return new JsonResponse(['status' => 'error''message' => 'Les données nécessaires n\'ont pas été trouvées dans la session']);
  257.         }
  258.         $existingUser $entityManager->getRepository(NewsLetterUser::class)->findOneBy(['mail' => $userEmail]);
  259.         if (!$existingUser) {
  260.             return new JsonResponse(['status' => 'success']);
  261.         }
  262.         try {
  263.             $entityManager->remove($existingUser);
  264.             $entityManager->flush();
  265.         } catch (\Exception $e) {
  266.             return new JsonResponse(['status' => 'error''message' => 'Une erreur s\'est produite lors de la désinscription: ' $e->getMessage()]);
  267.         }
  268.         return new JsonResponse(['status' => 'success']);
  269.     }
  270.     /**
  271.      * @Route("/newsletter/check-subscription", name="newsletter_check_subscription", methods={"GET"})
  272.      */
  273.     public function checkSubscription(Request $requestEntityManagerInterface $entityManager)
  274.     {
  275.         $userEmail $request->getSession()->get('email');
  276.         if (empty($userEmail)) {
  277.             return new JsonResponse(['status' => 'error''message' => 'Les données nécessaires n\'ont pas été trouvées dans la session']);
  278.         }
  279.         $existingUser $entityManager->getRepository(NewsLetterUser::class)->findOneBy(['mail' => $userEmail]);
  280.         if ($existingUser) {
  281.             return new JsonResponse(['status' => 'subscribed']);
  282.         }
  283.         return new JsonResponse(['status' => 'not_subscribed']);
  284.     }
  285.     public function getAllCategories($langue)
  286.     {
  287.         //récupération de toutes les catégories en francais
  288.         $categories $this->getDoctrine()->getRepository(Category::class)->findBy(["unicity" => 1]);
  289.         $tabtraduit = [];
  290.         foreach ($categories as $category) {
  291.             $trad $category;
  292.             if ($langue != "fr") {
  293.                 $trad $this->traduireContenu->retourTrad($category$langue);
  294.             }
  295.             array_push($tabtraduit$trad);
  296.         }
  297.         //dd($tabtraduit);
  298.         return $tabtraduit;
  299.     }
  300.     /**
  301.      * @Route("/{_locale<en|fr|de|it|es>}/deactivateAccount/", name="deactivate_account")
  302.      */
  303.     public function deactivateAccount()
  304.     {
  305.         $Setcompany $this->getUser();
  306.         //$Setcompany->actived = false;
  307.         $em $this->getDoctrine()->getManager();
  308.         $em->flush();
  309.         return $this->json(['status' => 200'message' => "Ok"]);
  310.     }
  311.     /**
  312.      * @Route("/{_locale<en|fr|de|it|es>}/redirectModify/", name="redirect_modification")
  313.      */
  314.     public function modifgaeauser(Request $requestCategoryRepository $catrepFileUploader $fileUploader)
  315.     {
  316.         //$contenu = $request->getContent();
  317.         $contenu $request->request->get('objArr');
  318.         $contenuDecode json_decode($contenutrue);
  319.         //$company = $serializer->deserialize($contenu, Company::class, 'json');
  320.         /*$categories_name = $contenuDecode['categories'];
  321.         $categories = new ArrayCollection();
  322.         foreach($categories_name as $category_name){
  323.             $categories[] = $catrep->findOneBy(['name'=>$category_name]);
  324.         }*/
  325.         $rue $contenuDecode['street'];
  326.         $name $contenuDecode['name'];
  327.         $ville $contenuDecode['city'];
  328.         $raisonsociale $contenuDecode['socialreason'];
  329.         $codepostale $contenuDecode['postcode'];
  330.         $canton $contenuDecode['departement'];
  331.         $pays $contenuDecode['country'];
  332.         $tel $contenuDecode['phone'];
  333.         $site $contenuDecode['urlwebsite'];
  334.         $linkedin $contenuDecode['urllinkedin'];
  335.         $facebook $contenuDecode['urlfacebook'];
  336.         $twitter $contenuDecode['urltwitter'];
  337.         $débutactivité $contenuDecode['startingdate'];
  338.         $certif $contenuDecode['certification'];
  339.         $vision $contenuDecode['vision'];
  340.         $zoneinfluence $contenuDecode['influencezone'];
  341.         $descritpion $contenuDecode['description'];
  342.         $evaluation $contenuDecode['wantevaluation'];
  343.         $latitude $contenuDecode['latitude'];
  344.         $longitude $contenuDecode['longtitude'];
  345.         $niveau $contenuDecode['niveau'];
  346.         $lastname $contenuDecode['nom'];
  347.         $firstname $contenuDecode['prenom'];
  348.         $file $request->files->get('file');
  349.         $Setcompany $this->getUser();
  350.         /*$currentCategories = $Setcompany->getCategories();
  351.         foreach($currentCategories as $cat){
  352.             $Setcompany -> removeCategory($cat);
  353.         }*/
  354.         if (!is_null($file)) {
  355.             $path $this->getParameter('companies');
  356.             $filename $fileUploader->upload($file$path);
  357.             $Setcompany->setImage($filename);
  358.         }
  359.         $Setcompany->setName($name);
  360.         $Setcompany->setStreet($rue);
  361.         $Setcompany->setCity($ville);
  362.         $Setcompany->setsocialreason($raisonsociale);
  363.         $Setcompany->setPostcode(intval($codepostale));
  364.         $Setcompany->setRegion($canton);
  365.         $Setcompany->setCountry($pays);
  366.         $Setcompany->setPhone($tel);
  367.         $Setcompany->setUrlwebsite($site);
  368.         $Setcompany->setUrllinkedin($linkedin);
  369.         $Setcompany->setUrlfacebook($facebook);
  370.         $Setcompany->setUrltwitter($twitter);
  371.         $Setcompany->setstartingdate(new \DateTime($débutactivité));
  372.         $Setcompany->setCertification($certif);
  373.         $Setcompany->setLatitude($latitude);
  374.         $Setcompany->setLongtitude($longitude);
  375.         $Setcompany->setVision($vision);
  376.         $Setcompany->setInfluencezone($zoneinfluence);
  377.         $Setcompany->setDescription($descritpion);
  378.         $Setcompany->setWantevaluation($evaluation);
  379.         $Setcompany->setNiveau($niveau);
  380.         $Setcompany->setLastName($lastname);
  381.         $Setcompany->setFirstName($firstname);
  382.         /*foreach($categories as $cat){
  383.             $Setcompany -> addCategory($cat);
  384.         }*/
  385.         $em $this->getDoctrine()->getManager();
  386.         $em->flush();
  387.         return $this->json(['status' => 200'message' => "Ok"]);
  388.     }
  389.     /**
  390.      * @Route("/{_locale<en|fr|de|it|es>}/redirectModifyCategories/", name="redirect_modification_cat")
  391.      */
  392.     public function modifcategories(Request $requestCategoryRepository $catrep)
  393.     {
  394.         //$contenu = $request->request->get('objArr');
  395.         $contenu $request->getContent();
  396.         $contenuDecode json_decode($contenutrue);
  397.         $categories_name $contenuDecode['categories'];
  398.         $categories = new ArrayCollection();
  399.         foreach ($categories_name as $category_name) {
  400.             $categories[] = $catrep->findOneBy(['name' => $category_name]);
  401.         }
  402.         $Setcompany $this->getUser();
  403.         $currentCategories $Setcompany->getCategories();
  404.         foreach ($currentCategories as $cat) {
  405.             $Setcompany->removeCategory($cat);
  406.         }
  407.         foreach ($categories as $cat) {
  408.             $Setcompany->addCategory($cat);
  409.         }
  410.         $em $this->getDoctrine()->getManager();
  411.         $em->flush();
  412.         //return $this->redirectToRoute('companyProfileShow');
  413.         //return $this->redirect($this->generateUrl('companyProfileShow'));
  414.         return $this->json(['status' => 200'message' => "Ok"]);
  415.         /*$company = $this->getUser();
  416.         $categories = $this->em->getRepository(Category::class)->findAll();
  417.         return $this->render('company/profile.html.twig', [
  418.             'company' => $company,
  419.             'categories' => $categories,
  420.         ]);*/
  421.     }
  422.     public function findCatByName($name)
  423.     {
  424.         $em $this->getDoctrine()->getManager();
  425.         $category $em
  426.             ->getRepository(Category::class)
  427.             ->findBy(['name' => $name]);
  428.         return ($category);
  429.     }
  430.     /**
  431.      *
  432.      * Require ROLE_ADMIN for all the actions of this controller
  433.      *
  434.      * @isGranted("PUBLIC_ACCESS")
  435.      *
  436.      * @Route("/{_locale<fr|en|de|it|es>}/inscription-entreprise", name="companyRegister")
  437.      */
  438.     public function registerAction(Request $request)
  439.     {
  440.         //$this->denyAccessUnlessGranted('ROLE_ADMIN');
  441.         //$hasAccess = $this->isGranted('ROLE_ADMIN');
  442.         $session $request->getSession();
  443.         $langue $session->get("_locale");
  444.         $categories $this->getAllCategories($langue);
  445.         foreach ($categories as $category) {
  446.             foreach ($category->getSubcategories() as $subcat) {
  447.                 $category->addSubcategory($subcat);
  448.             }
  449.         }
  450.         $intYear idate("Y");
  451.         //return $this->render('company/register_OLD.html.twig', [
  452.         return $this->render('company/register.html.twig', [
  453.             'categories' => $categories,
  454.             'currentYear' => $intYear
  455.         ]);
  456.     }
  457.     // /**
  458.     //  * @Route("/{_locale<en|fr|de|it|es>}/inscription-entreprise-2/", name="companyRegister2")
  459.     //  */
  460.     // public function registerAction2(Request $request)
  461.     // {
  462.     //     //Extract from the request : id, email, username
  463.     //     if($request !== null){
  464.     //         $contenu = $request->getContent();
  465.     //         $userrv = explode("&",$contenu);
  466.     //         $gaeaid = substr($userrv[0],3);
  467.     //         $id = intval($gaeaid);
  468.     //     $email = str_replace("%40","@",substr($userrv[1],6));
  469.     //     $username = str_replace("%40","@",substr($userrv[2],9));
  470.     // }
  471.     //     $categories = $this->em->getRepository(Category::class)->findAll();
  472.     // foreach($categories as $category)
  473.     // {
  474.     //     foreach ($category->getSubcategories() as $subcat)
  475.     //     {
  476.     //         $category->addSubcategory($subcat);
  477.     //     }
  478.     // }
  479.     //     $intYear = idate("Y");
  480.     //     return $this->render('company/register-2.html.twig',[
  481.     //         'categories'=>$categories,
  482.     //         'currentYear' => $intYear,
  483.     //         'gaeaId' => $id,
  484.     //         'email' => $email,
  485.     //         'username' => $username,
  486.     //     ]);
  487.     // }
  488.     //  /**
  489.     //  * @Route("/inscription-entreprise-2", name="companyRegister2")
  490.     //  */
  491.     //  public function registerAction2(Request $request)
  492.     //  {
  493.     //      $categories = $this->em->getRepository(Category::class)->findAll();
  494.     //      foreach($categories as $category)
  495.     //      {
  496.     //          foreach ($category->getSubcategories() as $subcat)
  497.     //          {
  498.     //              $category->addSubcategory($subcat);
  499.     //          }
  500.     //      }
  501.     //      $intYear = idate("Y");
  502.     //      return $this->render('company/register-2.html.twig',[
  503.     //          'categories'=>$categories,
  504.     //          'currentYear' => $intYear,
  505.     //          'hhh'=>null
  506.     //      ]);
  507.     //  }
  508.     /**
  509.      * @Route("/checklogin", name="checklogin")
  510.      */
  511.     public function checklogin()
  512.     {
  513.         $loggedIn $this->isGranted('IS_AUTHENTICATED_FULLY');
  514.         return $this->json(['loggedIn' => $loggedIn]);
  515.     }
  516.     /**
  517.      * @Route("/entreprise/{slug}", name="companyShow")
  518.      */
  519.     public function show($slug)
  520.     {
  521.         $em $this->getDoctrine()->getManager();
  522.         $company $em->getRepository(Company::class)->findOneBy(['slug' => $slug]);
  523.         $date = (new \DateTime());
  524.         $visit $em->getRepository(Visite::class)->findOneBy(array('companySlug' => $slug'date' => $date));
  525.         if ($visit == null) :
  526.             $visite = new Visite();
  527.             $visite->setDate($date);
  528.             $visite->setCompanySlug($slug);
  529.             $visite->setNumber(1);
  530.             $em->persist($visite);
  531.             $em->flush();
  532.         else :
  533.             $visit->setNumber($visit->getNumber() + 1);
  534.             $em->persist($visit);
  535.             $em->flush();
  536.         endif;
  537.         $products $em->getRepository(Product::class)->findBy(array('company' => $company));
  538.         if ($this->isGranted('IS_AUTHENTICATED_FULLY')) {
  539.             $em $this->getDoctrine()->getManager();
  540.             $company $em->getRepository(Company::class)->findOneBy(array('slug' => $slug));
  541.             $user $this->getUser();
  542.             $companyFav $em->getRepository(CompanyFav::class)->findOneBy(array('user' => $user'company' => $company));
  543.             if ($companyFav == null) {
  544.                 $n 0;
  545.             } else {
  546.                 $n 1;
  547.             }
  548.         } else {
  549.             $n 3;
  550.         }
  551.         return $this->render('company/entreprise.html.twig', [
  552.             'company' => $company,
  553.             'visit' => $visit,
  554.             'products' => $products,
  555.             'n' => $n
  556.         ]);
  557.     }
  558.     /**
  559.      * @Route("/product2/{id}", name="companyShowFromId")
  560.      */
  561.     public function showFromId($id)
  562.     {
  563.         $em $this->getDoctrine()->getManager();
  564.         $company $em->getRepository(Company::class)->findOneBy(['id' => $id]);
  565.         $em $this->getDoctrine()->getManager();
  566.         $date = (new \DateTime());
  567.         $visit $em->getRepository(Visite::class)->findOneBy(array('companySlug' => $company->getSlug(), 'date' => $date));
  568.         if ($visit == null) :
  569.             $visite = new Visite();
  570.             $visite->setDate($date);
  571.             $visite->setCompanySlug($company->getSlug());
  572.             $visite->setNumber(1);
  573.             $em->persist($visite);
  574.             $em->flush();
  575.         else :
  576.             $visit->setNumber($visit->getNumber() + 1);
  577.             $em->persist($visit);
  578.             $em->flush();
  579.         endif;
  580.         $products $em->getRepository(Product::class)->findBy(array('company' => $company));
  581.         if ($this->isGranted('IS_AUTHENTICATED_FULLY')) {
  582.             $em $this->getDoctrine()->getManager();
  583.             $company $em->getRepository(Company::class)->findOneBy(array('slug' => $company->getSlug()));
  584.             $user $this->getUser();
  585.             $companyFav $em->getRepository(CompanyFav::class)->findOneBy(array('user' => $user'company' => $company));
  586.             if ($companyFav == null) {
  587.                 $n 0;
  588.             } else {
  589.                 $n 1;
  590.             }
  591.         } else {
  592.             $n 3;
  593.         }
  594.         return $this->render('company/entreprise.html.twig', [
  595.             'company' => $company,
  596.             'visit' => $visit,
  597.             'products' => $products,
  598.             'n' => $n
  599.         ]);
  600.     }
  601.     public function showProducts()
  602.     {
  603.         //$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  604.         $marchandises $this->getDoctrine()
  605.             ->getRepository('App:Marchandise')
  606.             ->createQueryBuilder('p')
  607.             ->andWhere('p.company = :id')
  608.             ->setParameter('id'$this->getUser()->getId())
  609.             ->getQuery()
  610.             ->getArrayResult();
  611.         //dump($marchandises);
  612.         return $this->render('product/manage.html.twig', [
  613.             'marchandises' => $marchandises
  614.         ]);
  615.     }
  616.     /**
  617.      * @Route("/api/profile/entreprise",methods={"GET"})
  618.      */
  619.     public function api_profile_entreprise(Request $requestTraduireContenu $traduireContenuUserRepository $userRepositorySerializerInterface $serializer)
  620.     {
  621.         /*
  622.         $encoders = [new XmlEncoder(), new JsonEncoder()];
  623.         $normalizers = [new ObjectNormalizer()];
  624.         $serializer = new Serializer($normalizers, $encoders);
  625.         */
  626.         //$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  627.         $em $this->getDoctrine()->getManager();
  628.         //dump($_SESSION);
  629.         //if ($request->getSession() !== "") {    
  630.         $id $_SESSION['_sf2_attributes']['gaeaUserId'];
  631.         $email $_SESSION['_sf2_attributes']['email'];
  632.         $username $_SESSION['_sf2_attributes']['username'];
  633.         //$contenu = explode("&", $request->getContent());
  634.         //dump($contenu);
  635.         //$email = str_replace("%40", "@", substr($contenu[1], 6));
  636.         //$username = str_replace("%40", "@", substr($contenu[2], 9));
  637.         /*
  638.             if ($this->getUser()->getEmail() !== $email)
  639.                 $this->getUser()->setEmail($email);
  640.             if ($this->getUser()->getUsername() !== $username)
  641.                 $this->getUser()->setUsername($username);
  642.             $em->persist($this->getUser());
  643.             $em->flush();
  644.             */
  645.         //}
  646.         //$company = $this->getUser();
  647.         $company $userRepository->findOneByGaeaId($id);
  648.         $company_array json_decode($serializer->serialize($company"json", ['groups' => ['company']]), true);
  649.         //dd(count($company->getCompanyFavCompanies()->toArray()));
  650.         //dd($company_array);
  651.         $company_array['companyFavCompanies'] = count($company->getCompanyFavCompanies()->toArray());
  652.         $company_array["email"] = $email;
  653.         //dump($company);
  654.         $categories $this->em->getRepository(Category::class)->findAll();
  655.         $categories json_decode($serializer->serialize($categories"json", ['groups' => ['category''company']]));
  656.         // nouveau changement
  657.         $categoriesLang $this->getDoctrine()->getRepository(Category::class)->findBy(["unicity" => 1]);
  658.         $tabtraduit = [];
  659.         $session $request->getSession();
  660.         $langue $session->get("_locale");
  661.         foreach ($categoriesLang as $category) {
  662.             $trad $category;
  663.             if ($langue != "fr") {
  664.                 $trad $this->traduireContenu->retourTrad($category$langue);
  665.             }
  666.             array_push($tabtraduitjson_decode($serializer->serialize($trad"json", ['groups' => ['category''company']])));
  667.             // fin nouveau changement
  668.         }
  669.         $subcategories $em->getRepository(Subcategory::class)->findByCompany($company);
  670.         $subcategories json_decode($serializer->serialize($subcategories"json", ['groups' => ['category''company']]), true);
  671.         if (explode('\\'$em->getClassMetadata(get_class($company))->getName())[2] == 'Person') {
  672.             return $this->redirectToRoute('personProfile');
  673.         }
  674.         foreach ($company->getCompanyFavCompanies() as $fav) {
  675.             $company->addCompanyFavCompany($fav);
  676.         }
  677.         return new JsonResponse([
  678.             'company' => $company_array,
  679.             //'categories' => $categories,
  680.             'categoriesLang' => $tabtraduit,
  681.             'subcategories' => $subcategories
  682.         ]);
  683.     }
  684.     /**
  685.      * @Route("/{_locale<en|fr|de|it|es>}/profile/entreprise", name="companyProfileShow",methods={"GET","POST"})
  686.      */
  687.     public function showProfile(Request $requestTraduireContenu $traduireContenuUserRepository $userRepository)
  688.     {
  689.         return $this->render('company/profile.html.twig');
  690.         // fin nouveau changement
  691.     }
  692.     // /**
  693.     //  * @Route("/profile/entreprise", name="companyProfileShow")
  694.     //  */
  695.     // public function showProfile(Request $request)
  696.     // {
  697.     //     //$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  698.     //     $em = $this->getDoctrine()->getManager();
  699.     //     $company = $this->getUser();
  700.     //     $categories = $this->em->getRepository(Category::class)->findAll();
  701.     //     $subcategories = $em->getRepository(Subcategory::class)->findByCompany($company);
  702.     //     if (explode('\\', $em->getClassMetadata(get_class($company))->getName())[2] == 'Person') {
  703.     //         return $this->redirectToRoute('personProfile');
  704.     //     }
  705.     //     foreach ($company->getCompanyFavCompanies() as $fav) {
  706.     //         $company->addCompanyFavCompany($fav);
  707.     //     }
  708.     //     return $this->render('company/profile.html.twig', [
  709.     //        'company' => $company,
  710.     //         'categories' => $categories,
  711.     //         'subcategories' => $subcategories
  712.     //     ]);
  713.     // }
  714.     /**
  715.      * @Route("/activationProfil/{gaeaid}/", name="activationProfil")
  716.      */
  717.     public function activation(Request $request)
  718.     {
  719.         $msg "Erreur";
  720.         $gaeaid $request->get('gaeaid');
  721.         $em $this->getDoctrine()->getManager();
  722.         $user $em->getRepository(User::class)->findOneBy(array('gaeaUserId' => $gaeaid));
  723.         if ($user != null) {
  724.             $rep true;
  725.             $rep2 false;
  726.             $user->setActived($rep);
  727.             $msg "Réussite !";
  728.         }
  729.         return new JsonResponse(['userId' => $user->getId(), 'userActivated' => $user->getActived(), 'gaeaId' => $gaeaid'message' => $msg]);
  730.     }
  731.     /**
  732.      * @Route("/parametres/entreprise", name="compagnySettings")
  733.      */
  734.     public function showSettings(Request $requestMailerInterface $mailerRegisteredToNewsletterChecker $registeredToNewsletterChecker)
  735.     {
  736.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  737.         $company $this->getUser();
  738.         $email $request->getSession()->get('email');
  739.         $categories $this->em->getRepository(Category::class)->findAll();
  740.         $intYear idate("Y");
  741.         $registeredToNewsletter $registeredToNewsletterChecker->check();
  742.         $desactivateForm $this->createForm(DesactivateCompanyType::class);
  743.         $desactivateForm->handleRequest($request);
  744.         if ($desactivateForm->isSubmitted()) {
  745.             if ($desactivateForm->isValid()) {
  746.                 $emailForm $desactivateForm->get('email')->getData();
  747.                 if ($emailForm === $email) {
  748.                     $passwordForm $desactivateForm->get('password')->getData();
  749.                     $encryptedPassword md5($passwordForm);
  750.                     $response $this->client->request(
  751.                         'POST',
  752.                         '   http://127.0.0.1:8001/apictrl/login',
  753.                         [
  754.                             'json' => [
  755.                                 'email' => $emailForm,
  756.                                 'password' => $encryptedPassword
  757.                             ],
  758.                         ]
  759.                     );
  760.                     $decodedPayload $response->toArray();
  761.                     if (isset($decodedPayload['id'])) {
  762.                         $company->setActivated(false);
  763.                         $this->em->flush();
  764.                         $cryptService = new CryptService();
  765.                         $encryptString $cryptService->encrypt($company->getId());
  766.                         $url $this->generateUrl('companyActivate',  ['hash' => $encryptString]);
  767.                         // envoyer par mail http://localhost/company/activate/{encryptString}
  768.                         $activateEmail = (new TemplatedEmail())
  769.                             ->from('no-reply@repertoirevert.org')
  770.                             ->to(new Address($email))
  771.                             ->subject('A CONSERVER - Désactivation de votre compte Répertoire Vert')
  772.                             ->htmlTemplate('emails/re-activation.html.twig')
  773.                             ->context([
  774.                                 'url' => 'https://repertoirevert.org' $url,
  775.                                 //'url' => 'https://127.0.0.1:8000'.$url,
  776.                             ]);
  777.                         // A REACTIVER QUAND L'ENVOI DE MAIL MARCHERA SUR LE SERVEUR
  778.                         //$mailer->send($activateEmail);
  779.                         return $this->redirectToRoute('logout');
  780.                     } else {
  781.                         $desactivateForm->addError(new FormError($decodedPayload['message']));
  782.                     }
  783.                 } else {
  784.                     $desactivateForm->addError(new FormError('La désactivation du compte n\'est pas celle du compte actuel '));
  785.                 }
  786.             }
  787.         }
  788.         if (!$company->getActivated()) {
  789.             die('Votre profile n\'est pas activé veuillez réactiver votre compte');
  790.         }
  791.         return $this->render('company/settings.html.twig', [
  792.             // 'company' => $company,
  793.             'email' => $email,
  794.             // 'currentYear' => $intYear,
  795.             // 'categories' => $categories,
  796.             // 'desactivateForm' => $desactivateForm->createView(),
  797.             'registeredToNewsletter' => $registeredToNewsletter,
  798.         ]);
  799.     }
  800.     /**
  801.      * @Route("/company/activate/{hash}", name="companyActivate")
  802.      */
  803.     public function activateCompany($hashRequest $request)
  804.     {
  805.         $cryptService = new CryptService();
  806.         $decryptString $cryptService->decrypt($hash);
  807.         $company $this->em->getRepository(Company::class)->find($decryptString);
  808.         if (isset($company)) {
  809.             $company->setActivated(true);
  810.             $this->em->flush();
  811.         }
  812.         return $this->redirectToRoute('accountActivated');
  813.         //K084a2pUeHc0b3d5bUg1U3lwRWkwdz09
  814.     }
  815.     /**
  816.      * @Route("/administration/disable/company/{id}", name="companyDisable")
  817.      */
  818.     public function disableCompany($idRequest $request)
  819.     {
  820.         $em $this->getDoctrine()->getManager();
  821.         $company $em->getRepository('App:Company')->findOneBy(array('id' => $id));
  822.         if ($request->getMethod() == "POST" and ($company->isActived(true))) {
  823.             $company->setActived(false);
  824.             $em->flush();
  825.             $this->addFlash(
  826.                 'notice',
  827.                 'Entreprise désactivée'
  828.             );
  829.             return $this->redirectToRoute('companyManage');
  830.         }
  831.         return $this->render('company/disable.html.twig', [
  832.             'company' => $company
  833.         ]);
  834.     }
  835.     /**
  836.      * @Route("/user/disable/company/{id}", name="companyDisableItself")
  837.      */
  838.     public function companyDisableItself($idRequest $request)
  839.     {
  840.         $em $this->getDoctrine()->getManager();
  841.         $company $em->getRepository('App:Company')->findOneBy(array('id' => $id));
  842.         if ($company->isActived(true)) {
  843.             $company->setActived(false);
  844.             $em->flush();
  845.             $this->addFlash(
  846.                 'notice',
  847.                 'Votre compte entreprise a été désactivé.
  848.                 Vous avez reçu un email de réactivation
  849.                 de votre compte entreprise.'
  850.             );
  851.             $this->sendAccountReActivationMail($company->getEmail(), $company->getToken());
  852.         }
  853.         return $this->render('user/login.html.twig', [
  854.             'company' => $company
  855.         ]);
  856.     }
  857.     /**
  858.      * @Route("/user/enable/company/{id}", name="companyReEnableItself")
  859.      */
  860.     public function companyReEnableItself($emailRequest $request)
  861.     {
  862.         $em $this->getDoctrine()->getManager();
  863.         $company $em->getRepository('App:Company')->findOneBy(array('email' => $email));
  864.         if ($company->isActived(false)) {
  865.             $company->setActived(true);
  866.             $em->flush();
  867.         }
  868.         return $this->render('user/login.html.twig', [
  869.             'company' => $company
  870.         ]);
  871.     }
  872.     /**
  873.      * @Route("/entreprise/recherche/{param}", name="companySearch")
  874.      */
  875.     public function search($param)
  876.     {
  877.         $em $this->getDoctrine()->getManager();
  878.         $companies $em->getRepository(Company::class)->createQueryBuilder('p')
  879.             ->andWhere('p.name LIKE :param')
  880.             ->setParameter('param''%' $param '%')
  881.             ->getQuery();
  882.         $companies $companies->execute();
  883.         return $this->render('company/search.html.twig', [
  884.             'companies' => $companies
  885.         ]);
  886.     }
  887.     /**
  888.      * @Route("/administration/companies/",name="companyManage")
  889.      */
  890.     public function manage(Request $request)
  891.     {
  892.         $em $this->getDoctrine()->getManager();
  893.         $companies $em->getRepository('App:User')->findBy(['role' => 'ROLE_COMPANY']);
  894.         return $this->render('company/manage.html.twig', [
  895.             'companies' => $companies,
  896.         ]);
  897.     }
  898.     public function sendRegistrationMail($email$token\Swift_Mailer $mailer)
  899.     {
  900.         $message = (new \Swift_Message('Merci de valider votre adresse mail'))
  901.             ->setFrom('no_reply@repertoirevert.org')
  902.             ->setTo($email)
  903.             ->setBody(
  904.                 $this->renderView(
  905.                     // app/Resources/views/Emails/registration.html.twig
  906.                     'emails/registration-company.html.twig',
  907.                     [
  908.                         'email' => $email,
  909.                         'token' => $token
  910.                     ]
  911.                 ),
  912.                 'text/html'
  913.             );
  914.         try {
  915.             $mailer->send($message);
  916.         } catch (\Swift_TransportException $e) {
  917.             echo $e->getMessage();
  918.         }
  919.         return $this->redirectToRoute('login');
  920.     }
  921.     public function sendAccountReActivationMail($email$token\Swift_Mailer $mailer)
  922.     {
  923.         $message = (new \Swift_Message('Merci de valider votre adresse mail'))
  924.             ->setFrom('no_reply@repertoirevert.org')
  925.             ->setTo($email)
  926.             ->setBody(
  927.                 $this->renderView(
  928.                     // app/Resources/views/Emails/registration.html.twig
  929.                     'emails/re-activation.html.twig',
  930.                     [
  931.                         'email' => $email,
  932.                         'token' => $token
  933.                     ]
  934.                 ),
  935.                 'text/html'
  936.             );
  937.         $mailer->send($message);
  938.         /*
  939.         try {
  940.             $mailer->send($message);
  941.         } catch (\Swift_TransportException $e) {
  942.             echo $e->getMessage();
  943.         }
  944.         return $this->redirectToRoute('login');*/
  945.     }
  946.     /**
  947.      * @Route("/addFavoris/{slug}", name="addFavoris")
  948.      */
  949.     public function addFavoris($slug)
  950.     {
  951.         $em $this->getDoctrine()->getManager();
  952.         $company $em->getRepository(Company::class)->findOneBy(['slug' => $slug]);
  953.         $date = (new \DateTime());
  954.         $user $this->getUser();
  955.         $user->addCompanyFavs($company);
  956.         $fav $em->getRepository(CompanyFavoris::class)->findOneBy(['CompanySlug' => $slug'date' => $date]);
  957.         if ($fav == null) :
  958.             $favo = new CompanyFavoris();
  959.             $favo->setDate($date);
  960.             $favo->setCompanySlug($slug);
  961.             $favo->setNumber(1);
  962.             $em->persist($favo);
  963.             $em->flush();
  964.         else :
  965.             $fav->setNumber($fav->getNumber() + 1);
  966.             $em->persist($fav);
  967.             $em->flush();
  968.         endif;
  969.         $products $em->getRepository(Product::class)->findBy(array('company' => $company));
  970.         $n 1;
  971.         return $this->render('company/show.html.twig', [
  972.             'company' => $company,
  973.             'products' => $products,
  974.             'fav' => $fav,
  975.             'n' => $n
  976.         ]);
  977.     }
  978.     /**
  979.      * @Route("/deleteFavoris/{slug}", name="deleteFavoris")
  980.      */
  981.     public function deleteFavoris($slug)
  982.     {
  983.         $em $this->getDoctrine()->getManager();
  984.         $company $em->getRepository(Company::class)->findOneBy(['slug' => $slug]);
  985.         $user $this->getUser();
  986.         $date = (new \DateTime());
  987.         $favoris $em->getRepository(CompanyFavoris::class)->findOneBy(array('CompanySlug' => $company->getSlug(), 'date' => $date));
  988.         $user->deleteCompanyFavs($company);
  989.         if ($favoris->getNumber() == 1) {
  990.             $em->remove($favoris);
  991.         } else {
  992.             $favoris->setNumber($favoris->getNumber() - 1);
  993.         }
  994.         $em->flush();
  995.         $products $em->getRepository(Product::class)->findBy(array('company' => $company));
  996.         $n 0;
  997.         return $this->render('company/show.html.twig', [
  998.             'company' => $company,
  999.             'products' => $products,
  1000.             'n' => $n
  1001.         ]);
  1002.     }
  1003.     /**
  1004.      * @Route("/companiesFav", name="companiesFav")
  1005.      * @return
  1006.      */
  1007.     public function companiesFav()
  1008.     {
  1009.         $em $this->getDoctrine()->getManager();
  1010.         $companiesFav $em->getRepository(CompanyFav::class)->findBy(['user' => $this->getUser()]);
  1011.         $companies = new ArrayCollection();
  1012.         foreach ($companiesFav as $comp) {
  1013.             $companies[] = $comp->getCompany();
  1014.         }
  1015.         return $this->render('company/companiesFav.html.twig', [
  1016.             'companies' => $companies,
  1017.             'companiesFav' => $companiesFav
  1018.         ]);
  1019.     }
  1020.     /**
  1021.      * @Route("/Map/Entreprises", name="MapEntreprises")
  1022.      */
  1023.     public function MapCompanies()
  1024.     {
  1025.         $em $this->getDoctrine()->getManager();
  1026.         $companies $em->getRepository(Company::class)->findAll();
  1027.         return $this->render('page/map.html.twig', [
  1028.             'companies' => json_encode($companies)
  1029.         ]);
  1030.     }
  1031.     /**
  1032.      * @Route("/tarifs-niveaux", name="tarifs-niveaux")
  1033.      */
  1034.     public function tarifsNiveaux(): Response
  1035.     {
  1036.         return $this->render('company/tarifs_niveaux.html.twig');
  1037.     }
  1038.     //"/company/show/{companyId}/{subcategoryId}/{categoryId}", name="ShowCompanyDetails" , requirements={"id"="\d+"}
  1039.     // function show companydetails
  1040.     /**
  1041.      * @Route("/company/show/{companyId}", name="ShowCompanyDetails" , requirements={"id"="\d+"})
  1042.      *
  1043.      *
  1044.      */
  1045.     public function showDetails(Request $request$companyIdCompanyRepository $companyRepositorySubcategoryRepository $subcategoryRepository)
  1046.     {
  1047.         $em $this->getDoctrine()->getManager();
  1048.        
  1049.         $company $companyRepository->findOneBy(['id' => $companyId]);
  1050.         // dump($company);
  1051.         $categoryCompany $company->getCategories();
  1052.         //  dump($categoryCompany);
  1053.         $langue $request->getSession()->get("_locale");
  1054.         $liste_categories_traduites = new ArrayCollection();
  1055.         if ($langue != "fr") {
  1056.             //$category = $this->traduireContenu->retourTrad($category, $langue);
  1057.             //$all_categories = $em->getRepository(Category::class)->findBy(['unicity' => 1]);
  1058.             foreach ($categoryCompany as $categorie) {
  1059.                 $liste_categories_traduites->add($this->traduireContenu->retourTrad($categorie$langue));
  1060.             }
  1061.         } else {
  1062.             foreach ($categoryCompany as $categorie) {
  1063.                 $liste_categories_traduites->add($categorie);
  1064.             }
  1065.         }
  1066.         //  dump($liste_categories_traduites);
  1067.         //$categories = $this->em->getRepository(Category::class)->findAll();
  1068.         // dump($company->getId());  OK!!!
  1069.         $subcategories $subcategoryRepository->findByCompany($company->getId());
  1070.         //  dump($subcategories);
  1071.        
  1072.         $liste_subcategory_traduites = new ArrayCollection();
  1073.         if ($langue != "fr") {
  1074.             foreach ($subcategories as $subcategory) {
  1075.                 $slug $subcategory->getSlug();
  1076.                 $liste_subcategory_traduites->add($subcategoryRepository->findOneBy(['slug' => $slug'unicity' => 0]));
  1077.             }
  1078.         } else {
  1079.             foreach ($subcategories as $subcategory) {
  1080.                 $slug $subcategory->getSlug();
  1081.                 $liste_subcategory_traduites->add($subcategory);
  1082.             }
  1083.         }
  1084.         $categorySubcategoriesMap = [];
  1085.         foreach ($liste_categories_traduites as $category) {
  1086.         $categorySubcategoriesMap[$category->getId()] = [];
  1087.         }
  1088.         foreach ($subcategories as $subcategory) {
  1089.             foreach ($subcategory->getCategories() as $categoryOfSubcategory) {
  1090.                 if (isset($categorySubcategoriesMap[$categoryOfSubcategory->getId()])) {
  1091.                     $categorySubcategoriesMap[$categoryOfSubcategory->getId()][] = $subcategory;
  1092.                 }
  1093.             }
  1094.         }
  1095.         
  1096.         $date = (new \DateTime());
  1097.         $clicks $em->getRepository(Visite::class)->findOneBy(array('company' => $company'date' => $date));
  1098.         if ($clicks == null) :
  1099.             $click = new Visite();
  1100.             $click->setDate($date);
  1101.             $click->setCompany($company);
  1102.             $click->setNumber(1);
  1103.             $em->persist($click);
  1104.             $em->flush();
  1105.         else :
  1106.             $clicks->setNumber($clicks->getNumber() + 1);
  1107.             $em->persist($clicks);
  1108.             $em->flush();
  1109.         endif;
  1110.         // dump($liste_categories_traduites);
  1111.         return $this->render('company/showCompanyDetails.html.twig', [
  1112.             'company' => $company,
  1113.             'categories' => $liste_categories_traduites,
  1114.             'products' => $company->getProducts(),
  1115.             'subcategories' => $liste_subcategory_traduites,
  1116.             'categorySubcategoriesMap' => $categorySubcategoriesMap,
  1117.         ]);
  1118.     }
  1119.     ///////////// Enregistrement des entreprises du fichiers excel dans la bdd + Envoi du mail de réinitialisation mdp //////////////
  1120.     /**
  1121.      * @Route("/upload-excel", name="xlsx")
  1122.      */
  1123.     public function getCompaniesfromExcel()
  1124.     {
  1125.         $fileFolder __DIR__ '/../../public/uploads/';  //choose the folder in which the uploaded file will be stored
  1126.         $spreadsheet IOFactory::load($fileFolder "/entreprises-a-upload.xlsx"); // Here we are able to read from the excel file
  1127.         $row $spreadsheet->getActiveSheet()->removeRow(120); // I added this to be able to remove the first file line
  1128.         $sheetData $spreadsheet->getActiveSheet()->toArray(nulltruetruetrue); // here, the read data is turned into an array
  1129.         //dd($sheetData);
  1130.         foreach ($sheetData as $Row) {
  1131.             //for($i=0; $i < 57; $i++){
  1132.             /*$name = $sheetData[$i]['A'];
  1133.             $description = $sheetData[$i]['B'];
  1134.             $email= $sheetData[$i]['C'];
  1135.             $tel = $sheetData[$i]['D'];*/
  1136.             $email $Row['C'];
  1137.             $password bin2hex(random_bytes(8));
  1138.             /////////// Ajout des entreprises du fichier excel dans la bdd => FAIT ///////////
  1139.             /*if($name != null) {
  1140.                 $response = $this->client->request(
  1141.                     'POST',
  1142.                     '   http://127.0.0.1:8001/apictrl/add/gaeauser', [
  1143.                     'json' => [
  1144.                         'url' => 'rv',
  1145.                         'username' => $name,
  1146.                         'email' => $email,
  1147.                         'password' => $password,
  1148.                         'newpassword' => $password
  1149.                     ]
  1150.                 ]);
  1151.                 $content = $response->getContent();
  1152.                 $content = json_decode($content);
  1153.                 $company = new Company();
  1154.                 $company->setName($name);
  1155.                 $company->setStreet('');
  1156.                 $company->setCity('');
  1157.                 $company->setsocialreason('');
  1158.                 $company->setPostcode('');
  1159.                 $company->setRegion('');
  1160.                 $company->setCountry('');
  1161.                 $company->setPhone($tel);
  1162.                 $company->setstartingdate(new \DateTime());
  1163.                 $company->setVision('');
  1164.                 $company->setInfluencezone('');
  1165.                 if($description == null) {
  1166.                     $company->setDescription('');
  1167.                 } else {
  1168.                     $company->setDescription($description);
  1169.                 }
  1170.                 $company->setWantevaluation(0);
  1171.                 $company->setLatitude(0);
  1172.                 $company->setLongtitude(0);
  1173.                 $company->setgaeaUserId($content->id);
  1174.                 $company->setRole('ROLE_COMPANY');
  1175.                 $slugify = new Slugify();
  1176.                 $slug = $slugify->slugify($name);
  1177.                 $company->setSlug($slug);
  1178.                 $company->setActivated(true);
  1179.                 $company->setActived(true);
  1180.                 $company->setEmailValidated(false);
  1181.                 $token = bin2hex(random_bytes(21));
  1182.                 $company->setToken($token);
  1183.                 $company->setInscriptiondate(new \DateTime());
  1184.                 $company->setNiveau('N.0');
  1185.                 $em = $this->getDoctrine()->getManager();
  1186.                 $em->persist($company);
  1187.                 $em->flush();
  1188.             }*/
  1189.             /////////// Envoi du mail de réinitialisation de mdp //////////////
  1190.             if ($email != null) {
  1191.                 $response $this->client->request(
  1192.                     'POST',
  1193.                     '   http://127.0.0.1:8001/apictrl/requestpassword',
  1194.                     [
  1195.                         'json' => [
  1196.                             'url' => 'https://www.repertoirevert.org',
  1197.                             'email' => $email,
  1198.                         ]
  1199.                     ]
  1200.                 );
  1201.             }
  1202.         }
  1203.         return $this->json(['status' => 200'message' => "Ok"]);
  1204.     }
  1205.     /**
  1206.      * @Route("/apiGaeaUser",methods={"POST"})
  1207.      */
  1208.     public function ApiGaeaUser(Request $requestCategoryRepository $catrep)
  1209.     {
  1210.         $em $this->getDoctrine()->getManager();
  1211.         function longueur_entre($chaine$min$max$required true)
  1212.         {
  1213.             if (isset($chaine)) {
  1214.                 return strlen($chaine) <= $max && strlen($chaine) >= $min;
  1215.             } else {
  1216.                 if ($required) {
  1217.                     return false;
  1218.                 } else {
  1219.                     return true;
  1220.                 }
  1221.             }
  1222.         }
  1223.         $contenuDecode $_POST;
  1224.         //$contenuDecode = json_decode($request->getContent(),true);
  1225.         $Username $contenuDecode['Username'];
  1226.         $Firstname $contenuDecode['Firstname'];
  1227.         $Lastname $contenuDecode['Lastname'];
  1228.         $Password $contenuDecode['Password'];
  1229.         $PasswordConfirm $contenuDecode['PasswordConfirm'];
  1230.         $Email $contenuDecode['Email'];
  1231.         $EmailConfirm $contenuDecode['EmailConfirm'];
  1232.         $Name $contenuDecode['Name'];
  1233.         $Socialreason $contenuDecode['Socialreason'];
  1234.         $Street $contenuDecode['Street'];
  1235.         $Postcode $contenuDecode['Postcode'];
  1236.         $Region $contenuDecode['Region'];
  1237.         $City $contenuDecode['City'];
  1238.         $Country $contenuDecode['Country'];
  1239.         $Phone $contenuDecode['Phone'];
  1240.         $Urlwebsite $contenuDecode['Urlwebsite'];
  1241.         $Urlfacebook $contenuDecode['Urlfacebook'];
  1242.         $Urllinkedin $contenuDecode['Urllinkedin'];
  1243.         $Urltwitter $contenuDecode['Urltwitter'];
  1244.         $Startingdate $contenuDecode['Startingdate'];
  1245.         $Certification $contenuDecode['Certification'];
  1246.         $Influencezone $contenuDecode['Influencezone'];
  1247.         $Categories json_decode($contenuDecode['Categories'], true);
  1248.         $Wantevaluation $contenuDecode['Wantevaluation'];
  1249.         $Description $contenuDecode['Description'];
  1250.         $Vision $contenuDecode['Vision'];
  1251.         if (
  1252.             longueur_entre($Username350) &&
  1253.             longueur_entre($Firstname350) &&
  1254.             longueur_entre($Lastname350) &&
  1255.             longueur_entre($Password82147483647) &&
  1256.             longueur_entre($PasswordConfirm82147483647) &&
  1257.             isset($Email) &&
  1258.             isset($EmailConfirm) &&
  1259.             longueur_entre($Name3100) &&
  1260.             longueur_entre($Socialreason250) &&
  1261.             longueur_entre($Street250false) &&
  1262.             longueur_entre($Postcode315false) &&
  1263.             longueur_entre($Region3254false) &&
  1264.             longueur_entre($City3254false) &&
  1265.             longueur_entre($Country3254false) &&
  1266.             longueur_entre($Phone320false) &&
  1267.             longueur_entre($Urlwebsite3254false) &&
  1268.             longueur_entre($Urlfacebook3254false) &&
  1269.             longueur_entre($Urllinkedin3254false) &&
  1270.             longueur_entre($Urltwitter3254false) &&
  1271.             isset($Startingdate) &&
  1272.             isset($Certification) &&
  1273.             isset($Influencezone) &&
  1274.             isset($Categories) &&
  1275.             isset($Wantevaluation) &&
  1276.             longueur_entre($Description3508false) &&
  1277.             longueur_entre($Vision3508false) &&
  1278.             $Email == $EmailConfirm
  1279.         ) {
  1280.             $categories_tableau = new ArrayCollection();
  1281.             foreach ($Categories as $category_name) {
  1282.                 $categories_tableau[] = $catrep->findOneBy(['name' => $category_name]);
  1283.             }
  1284.             //$url = "   http://127.0.0.1:8001/apictrl/add/gaeauser";
  1285.             $url "http://gaea21user.sustlivprogram.org/apictrl/add/gaeauser";
  1286.             $data = array(
  1287.                 'email' => $Email,
  1288.                 'username' => $Username,
  1289.                 'password' => $Password,
  1290.                 'newpassword' => $PasswordConfirm
  1291.             );
  1292.             $data_json json_encode($data);
  1293.             $ch curl_init();
  1294.             curl_setopt($chCURLOPT_URL$url);
  1295.             curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Type: application/json'));
  1296.             curl_setopt($chCURLOPT_POST1);
  1297.             curl_setopt($chCURLOPT_POSTFIELDS$data_json);
  1298.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  1299.             $response  curl_exec($ch);
  1300.             curl_close($ch);
  1301.             if (isset(json_decode($responsetrue)["id"])) {
  1302.                 $Setcompany = new Company();
  1303.                 $Setcompany->setName($Name);
  1304.                 $Setcompany->setStreet($Street);
  1305.                 $Setcompany->setCity($City);
  1306.                 $Setcompany->setsocialreason($Socialreason);
  1307.                 $Setcompany->setPostcode($Postcode);
  1308.                 $Setcompany->setRegion($Region);
  1309.                 $Setcompany->setCountry($Country);
  1310.                 $Setcompany->setPhone($Phone);
  1311.                 $Setcompany->setUrlwebsite($Urlwebsite);
  1312.                 $Setcompany->setUrllinkedin($Urllinkedin);
  1313.                 $Setcompany->setUrlfacebook($Urlfacebook);
  1314.                 $Setcompany->setUrltwitter($Urltwitter);
  1315.                 $Setcompany->setstartingdate(new \DateTime($Startingdate));
  1316.                 $Setcompany->setCertification($Certification);
  1317.                 $Setcompany->setLastname($Lastname);
  1318.                 $Setcompany->setFirstname($Firstname);
  1319.                 foreach ($categories_tableau as $cat) {
  1320.                     $Setcompany->addCategory($cat);
  1321.                 }
  1322.                 $Setcompany->setVision($Vision);
  1323.                 $Setcompany->setInfluencezone($Influencezone);
  1324.                 $Setcompany->setDescription($Description);
  1325.                 $Setcompany->setWantevaluation($Wantevaluation);
  1326.                 $Setcompany->setLatitude(0);
  1327.                 $Setcompany->setLongtitude(0);
  1328.                 $Setcompany->setgaeaUserId(json_decode($responsetrue)["id"]);
  1329.                 $Setcompany->setUsername($Username);
  1330.                 $Setcompany->setRole('ROLE_COMPANY');
  1331.                 $slugify = new Slugify();
  1332.                 $slug $slugify->slugify($Name);
  1333.                 $Setcompany->setSlug($slug);
  1334.                 $Setcompany->setActivated(true);
  1335.                 $Setcompany->setActived(true);
  1336.                 $Setcompany->setEmailValidated(false);
  1337.                 $token bin2hex(random_bytes(21));
  1338.                 $Setcompany->setToken($token);
  1339.                 $Setcompany->setInscriptiondate(new \DateTime());
  1340.                 $Setcompany->setNiveau($Wantevaluation 'N.1' 'N.0');
  1341.                 $em $this->getDoctrine()->getManager();
  1342.                 $em->persist($Setcompany);
  1343.                 $em->flush();
  1344.             }
  1345.             if (isset(json_decode($responsetrue)["id"])) {
  1346.                 return $this->json(["id" => json_decode($responsetrue)["id"], "erreur" => "false"]);
  1347.             } else {
  1348.                 return $this->json(["erreur" => "true""erreur_message" => json_decode($responsetrue)["message"]]);
  1349.             }
  1350.         } else {
  1351.             return $this->json(["erreur" => "true""erreur_message" => "Formulaire d'inscription non valide."]);
  1352.         }
  1353.     }
  1354.     /**
  1355.      * @Route("/{_locale<en|fr|de|it|es>}/qui-sommes-nous/", name="companyQSN")
  1356.      */
  1357.     public function quiSommesNous()
  1358.     {
  1359.         return $this->render('quisommesnous/company/quisommesnous.html.twig');
  1360.     }
  1361.     /**
  1362.      * @Route("/{_locale<en|fr|de|it|es>}/qui-sommes-nous2/", name="companyQSN2")
  1363.      */
  1364.     public function quiSommesNous2()
  1365.     {
  1366.         return $this->render('quisommesnous/company/quisommesnous2.html.twig');
  1367.     }
  1368.     /**
  1369.      * @Route("/{_locale<en|fr|de|it|es>}/qui-sommes-nous3/", name="companyQSN3")
  1370.      */
  1371.     public function quiSommesNous3()
  1372.     {
  1373.         return $this->render('quisommesnous/company/quisommesnous3.html.twig');
  1374.     }
  1375.     /**
  1376.      * @Route("/{_locale<en|fr|de|it|es>}/qui-sommes-nous4/", name="companyQSN4")
  1377.      */
  1378.     public function quiSommesNous4()
  1379.     {
  1380.         return $this->render('quisommesnous/company/quisommesnous4.html.twig');
  1381.     }
  1382.     /**
  1383.      * @Route("/{_locale<en|fr|de|it|es>}/qui-sommes-nous5/", name="companyQSN5")
  1384.      */
  1385.     public function quiSommesNous5()
  1386.     {
  1387.         return $this->render('quisommesnous/company/quisommesnous5.html.twig');
  1388.     }
  1389.     /**
  1390.      * @Route("/{_locale<en|fr|de|it|es>}/communaute/", name="communaute")
  1391.      */
  1392.     public function communaute(Request $request)
  1393.     {
  1394.         $session $request->getSession();
  1395.         $langue $session->get("_locale");
  1396.         $em $this->getDoctrine()->getManager();
  1397.         $categoryCommunaute $em->getRepository(Category::class)->findOneBy(['slug' => 'communaute''unicity' => 1]);
  1398.         if (!$categoryCommunaute) {
  1399.             throw $this->createNotFoundException('La categorie n\'existe pas');
  1400.         }
  1401.         if ($langue != "fr") {
  1402.             $categoryCommunaute $this->traduireContenu->retourTrad($categoryCommunaute$langue);
  1403.         }
  1404.         $subcategoryCommunaute $categoryCommunaute->getSubcategories();
  1405.         $all_categories $em->getRepository(Category::class)->findBy(['unicity' => 1]);
  1406.         $liste_categories_traduites = [];
  1407.         foreach ($all_categories as $categorie_particuliere) {
  1408.             $liste_categories_traduites[] = $this->traduireContenu->retourTrad($categorie_particuliere$langue);
  1409.         }
  1410.         return $this->render('company/communaute.html.twig', [
  1411.             'subcategoryCommunaute' => $subcategoryCommunaute,
  1412.             'categories' => $liste_categories_traduites
  1413.         ]);
  1414.     }
  1415.      /**
  1416.      * @Route("/fr/listing", name="listing")
  1417.      */
  1418.     public function listing(CallApiService $CallApiService)
  1419.     {
  1420.         $companies $CallApiService->merged_users_companies();
  1421.         return $this->render('company/listing.html.twig', [
  1422.             'companies' => $companies
  1423.         ]);
  1424.     }
  1425.     /**
  1426.      * @Route("/fr/export_CSV", name="export_CSV" )
  1427.      */
  1428.     public function export_CSV(Request $request)
  1429.     {
  1430.         $companies $request->request->get('companies');
  1431.         $array_companies json_decode($companiestrue);
  1432.  
  1433.         $dataToCsv = [];
  1434.         foreach($array_companies as $company){
  1435.             $dataToCsv[] = [
  1436.                 $company['name'],
  1437.                 $company['email'],
  1438.                 $company['phone'],
  1439.             ];
  1440.         }
  1441.         $lines = [];
  1442.         foreach ($dataToCsv as $row) {
  1443.             $lines[] = implode(','$row);
  1444.         }
  1445.         $data implode(PHP_EOL$lines);
  1446.         $data "Nom, Email, Téléphone".PHP_EOL.$data;
  1447.       
  1448.         return new Response(
  1449.             $data,
  1450.             200,
  1451.             [
  1452.                 'Content-Type' => 'text/csv',
  1453.                 "Content-disposition" => "attachment; filename=Listing.csv"
  1454.             ]
  1455.         );
  1456.     }
  1457. }