src/Controller/APIController.php line 1090

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AppUser;
  4. use App\Entity\CategorieEntreprise;
  5. use App\Entity\Boutique;
  6. use App\Entity\Plan;
  7. use App\Entity\Devis;
  8. use App\Entity\OffreDevis;
  9. use App\Entity\UserBoutique;
  10. use App\Entity\AvisUtilisateur;
  11. use App\Entity\Notification;
  12. use App\Entity\Conversation;
  13. use App\Entity\Commande;
  14. use App\Entity\Produit;
  15. use App\Entity\ProductPhoto;
  16. use App\Entity\Message;
  17. use App\Entity\Ticket;
  18. use App\Entity\CommentaireTicket;
  19. use App\Entity\EntrepriseEnregistre;
  20. use App\Entity\Photo;
  21. use App\Entity\OTPConfirmation;
  22. use App\Entity\DemandeRetrait;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\JsonResponse;
  28. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  29. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  30. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  31. use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
  32. use App\Security\LoginPersonnelFormAuthenticator;
  33. use App\Security\LoginFormAuthenticator;
  34. use Kreait\Firebase\Contract\Auth;
  35. use Kreait\Firebase\Messaging\CloudMessage;
  36. use Kreait\Firebase\Contract\Messaging;
  37. use App\Service\AssieMessaging;
  38. use Kreait\Firebase\Util;
  39. use Kreait\Firebase\Factory;
  40. /**
  41.  * @Route("/{_locale}/api")
  42.  */
  43. class APIController extends AbstractController
  44. {    
  45.     private $session;
  46.     
  47.     public function __construct(SessionInterface $session)
  48.     {
  49.         $this->session $session;
  50.     }
  51.     /**
  52.     * @Route("/login", name="api_login")
  53.      * @return \Symfony\Component\HttpFoundation\JsonResponse
  54.     */
  55.     public function loginAction(Request $requestUserPasswordHasherInterface $passwordHasherAuthenticationUtils $authenticationUtils)
  56.     {
  57.         $em $this->getDoctrine()
  58.                     ->getManager();
  59.         
  60.         
  61.         $username '';
  62.         $password '';
  63.         
  64.         $user = array();
  65.         $data = array();
  66.         $error '';
  67.         $message '';
  68.         $bon '';
  69.         $utilisateurAuthentifie '';
  70.         
  71.         
  72.         if($request->getMethod() == 'POST'){
  73.             $formData json_decode($request->getContent());
  74.             
  75.             $password $formData->password;
  76.             //$password = $request->request->get('password');
  77.             
  78.             $username $formData->username;
  79.             //$username = $request->request->get('username');
  80.             
  81.             $user $em->getRepository(AppUser::class)
  82.                     ->findOneByUniqueId($usernametrue);
  83.         
  84.             $passwordUser $em->getRepository(AppUser::class)
  85.                         ->findOneByUniqueId($username);
  86.             
  87.             
  88.             if(null == $passwordUser || $passwordUser->isEstSupprime()){
  89.                 $error 'error';
  90.                 $message 'Utilisateur introuvable';
  91.             } else{
  92.                 if ($passwordHasher->isPasswordValid($passwordUser$password)) {
  93.                     // Password is correct
  94.                     $bon 'Bon mot de passe';
  95.                     $utilisateurAuthentifie $user[0];
  96.                     unset($utilisateurAuthentifie['password']);
  97.                 } else {
  98.                     // Password is incorrect
  99.                     $error 'error';
  100.                     $message 'Mot de passe incorrecte';
  101.                     $bon 'Mauvais mot de passe';
  102.                 }
  103.             }
  104.         
  105.         $data = array(
  106.             'error' => $error,
  107.             'user' => $utilisateurAuthentifie,
  108.             
  109.             'message' => $message
  110.         );
  111.     
  112.         }
  113.         
  114.         $response = new JsonResponse;
  115.         
  116.         $response $this->allowRemoteRequest($response);
  117.         
  118.         $response->setContent(json_encode($data));
  119.         return $response;
  120.         return $this->render('api/mobile_login.html.twig', [
  121.             
  122.         ]);
  123.         
  124.     }
  125.     /**
  126.      * @Route("/register", name="api_register")
  127.      * @return \Symfony\Component\HttpFoundation\Response
  128.     */
  129.     public function register(Request $requestUserPasswordHasherInterface $passwordHasherUserAuthenticatorInterface $userAuthenticatorLoginPersonnelFormAuthenticator $authenticator)
  130.     {
  131.         // ... e.g. get the user data from a registration form
  132.         $user = new AppUser;
  133.         $plaintextPassword '';
  134.         $em $this->getDoctrine()
  135.                     ->getManager();
  136.         $message '';
  137.         $error '';
  138.         if($request->getMethod() == 'POST'){
  139.             $formData json_decode($request->getContent());
  140.             
  141.             $password1 $formData->password1;
  142.             $password2 $formData->password2;
  143.             $nom $formData->nom;
  144.             $prenom $formData->prenom;
  145.             $telephone =  $formData->telephone;
  146.             $codePromoUtilise $formData->codePromoUtilise;
  147.             $email $formData->email;
  148.             //$password = $request->request->get('password');
  149.                 
  150.                 $userExist $em->getRepository(AppUser::class)
  151.                                 ->findOneByEmail($email);
  152.                 if($userExist != null){
  153.                     $message 'Email adresse déjà utilisé';
  154.                     $error 'error';
  155.                 }else{
  156.                     
  157.                         $plaintextPassword '';
  158.                         // hash the password (based on the security.yaml config for the $user class)
  159.                         $hashedPassword $passwordHasher->hashPassword($user$password1);
  160.                         $user->setPassword($hashedPassword);
  161.                         $user->setNom($nom);
  162.                         $user->setCodePromoUtilise($codePromoUtilise);
  163.                         $user->setPrenom($prenom);
  164.                         $user->setTelephone($telephone);
  165.                         $user->setEmail($email);
  166.                         $em->persist($user);
  167.                         $em->flush();
  168.                         return $userAuthenticator->authenticateUser(
  169.                                 $user,
  170.                                 $authenticator// Pass your specific authenticator instance
  171.                                 $request
  172.                             );
  173.                         $error '';
  174.                         $message 'Enregistrement effecuté';
  175.                         $data = array(
  176.                             'error' => $error,
  177.                             'user' => $user,
  178.                             'message' => $message
  179.                         );
  180.                     
  181.                         $response = new JsonResponse;
  182.                         
  183.                         $response $this->allowRemoteRequest($response);
  184.                         
  185.                         $response->setContent(json_encode($data));
  186.                         return $response;
  187.                             
  188.                         return $this->redirectToRoute('registration_confirmed', array('username' => $user->getUsername()));
  189.                     
  190.                 }
  191.         }
  192.         
  193.         return $this->render('registration/register.html.twig', [
  194.         
  195.         
  196.         ]);
  197.     }
  198.     /**
  199.      * @Route("/creer-compte-professionnel", name="api_creer_compte_professionel")
  200.      * @return \Symfony\Component\HttpFoundation\Response
  201.      */
  202.     public function creerCompteProfessionnelAction(Request $requestUserPasswordHasherInterface $passwordHasherUserAuthenticatorInterface $userAuthenticatorLoginFormAuthenticator $authenticator)
  203.     {
  204.          // ... e.g. get the user data from a registration form
  205.         $user = new AppUser;
  206.         $plaintextPassword '';
  207.         $user->setTypeCompte('Professionnel');
  208.         $user->setEnabled(true);
  209.         
  210.         $em $this->getDoctrine()
  211.                     ->getManager();
  212.         $message '';
  213.         $error '';
  214.         if($request->getMethod() == 'POST'){
  215.             $formData json_decode($request->getContent());
  216.             
  217.             $pieceDIdentiteRecto $formData->pieceDIdentiteRecto;
  218.             $pieceDIdentiteRectoFileName $formData->pieceDIdentiteRectoFileName;
  219.             $pieceDIdentiteVerso $formData->pieceDIdentiteVerso;
  220.             $pieceDIdentiteVersoFileName $formData->pieceDIdentiteVersoFileName;
  221.             $codePromoUtilise $formData->codePromoUtilise;
  222.             $password1 $formData->password1;
  223.             $password2 $formData->password2;
  224.             $nom $formData->nom;
  225.             $prenom $formData->prenom;
  226.             $telephone =  $formData->telephone;
  227.             $email $formData->email;
  228.             //$password = $request->request->get('password');
  229.                 
  230.                 $userExist $em->getRepository(AppUser::class)
  231.                                 ->findOneByEmail($email);
  232.                 if($userExist != null){
  233.                     $message 'Email adresse déjà utilisé';
  234.                     $error 'error';
  235.                 }else{
  236.                     
  237.                         $plaintextPassword '';
  238.                         // hash the password (based on the security.yaml config for the $user class)
  239.                         $hashedPassword $passwordHasher->hashPassword($user$password1);
  240.                         $user->setPassword($hashedPassword);
  241.                         $user->setNom($nom);
  242.                         $user->setCodePromoUtilise($codePromoUtilise);
  243.                         $user->setPrenom($prenom);
  244.                         $user->setTelephone($telephone);
  245.                         $user->setEmail($email);
  246.                         $em->persist($user);
  247.                         $em->flush();
  248.                         //Traitement des pièces d'identité Recto
  249.                         
  250.                         $imageParts explode(';base64,'$formData->pieceDIdentiteRecto);
  251.             
  252.                         $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  253.                         
  254.                         $imageDecoded base64_decode($imageBase64);
  255.                         $photo = new ProductPhoto;
  256.                 
  257.                         $ex pathinfo($pieceDIdentiteRectoFileNamePATHINFO_EXTENSION); 
  258.                         $exA = array('jpg''jpeg''png''gif''jfif''pdf');
  259.                 
  260.                         if (in_array(strtolower($ex), $exA)){
  261.                 
  262.                             $photo->setExtension($ex);
  263.                         } else {
  264.                             throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  265.                         }
  266.                 
  267.                         $name $user->getId().time();
  268.                         $namePourRepertoire $name;
  269.                         //hydratation des attributs de l'objet
  270.                         $photo->setUrl($name.'.'.$photo->getExtension());
  271.                         $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  272.                         
  273.                         $extension $photo->getExtension();
  274.                         
  275.                 
  276.                         if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  277.                         {
  278.                             throw new \RuntimeException('Impossible de créer le dossier de destination');
  279.                         }
  280.                 
  281.                         if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  282.                         {
  283.                             $error 'Enregistrement effectué';
  284.                             $user->setPieceDIdentiteRecto($photo->getFullUrl());
  285.                         } else {
  286.                             echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  287.                             $error 'Impossible d\'enregistrer l\'image';
  288.                         }
  289.                         
  290.                         //Traitement verso
  291.                         
  292.                         
  293.                         $imageParts explode(';base64,'$formData->pieceDIdentiteVerso);
  294.             
  295.                         $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  296.                         
  297.                         $imageDecoded base64_decode($imageBase64);
  298.                         $photo = new ProductPhoto;
  299.                 
  300.                         $ex pathinfo($pieceDIdentiteVersoFileNamePATHINFO_EXTENSION); 
  301.                         $exA = array('jpg''jpeg''png''gif''jfif''pdf');
  302.                 
  303.                         if (in_array(strtolower($ex), $exA)){
  304.                 
  305.                             $photo->setExtension($ex);
  306.                         } else {
  307.                             throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  308.                         }
  309.                 
  310.                         $name $user->getId().time().'0';
  311.                         $namePourRepertoire $name;
  312.                         //hydratation des attributs de l'objet
  313.                         $photo->setUrl($name.'.'.$photo->getExtension());
  314.                         $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  315.                         
  316.                         $extension $photo->getExtension();
  317.                         
  318.                 
  319.                         if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  320.                         {
  321.                             throw new \RuntimeException('Impossible de créer le dossier de destination');
  322.                         }
  323.                 
  324.                         if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  325.                         {
  326.                             $error 'Enregistrement effectué';
  327.                             $user->setPieceDIdentiteVerso($photo->getFullUrl());
  328.                         } else {
  329.                             echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  330.                             $error 'Impossible d\'enregistrer l\'image';
  331.                         }
  332.                         
  333.                         $em->flush();
  334.                         //Fin traitement pièce d'identité
  335.                         $error '';
  336.                         $message 'Enregistrement effecuté';
  337.                         $userNouvellementCree $em->getRepository(AppUser::class)
  338.                                                     ->findOneByUniqueId($user->getId(), true);
  339.                         $userNouvellementCree $userNouvellementCree[0];
  340.                         unset($userNouvellementCree['password']);
  341.                         $data = array(
  342.                             'error' => $error,
  343.                             'user' => $userNouvellementCree,
  344.                             'message' => $message
  345.                         );
  346.                     
  347.                         
  348.                         $response = new JsonResponse;
  349.                         
  350.                         $response $this->allowRemoteRequest($response);
  351.                         
  352.                         $response->setContent(json_encode($data));
  353.                         return $response;
  354.                             
  355.                         return $this->redirectToRoute('registration_confirmed', array('username' => $user->getUsername()));
  356.                     
  357.                 }
  358.         }
  359.         
  360.         return $this->render('api/creer_compte_pro.html.twig', [
  361.         
  362.         ]);      
  363.     }
  364.     /**
  365.     * @Route("/toutes-les-categories-entreprises", name="api_toutes_les_categories_entreprises")
  366.      * @return \Symfony\Component\HttpFoundation\JsonResponse
  367.     */
  368.     public function toutesLesCategoriesEntreprisesAction(Request $request)
  369.     {
  370.         $em $this->getDoctrine()
  371.                     ->getManager();
  372.         
  373.         $user = array();
  374.         $data = array();
  375.         $error '';
  376.         $message '';
  377.         
  378.         $categorieEntreprises $em->getRepository(CategorieEntreprise::class)
  379.                 ->findToutesLesCategorie(true);
  380.         $data = array(
  381.             'error' => $error,
  382.             'categorieEntreprises' => $categorieEntreprises,
  383.             
  384.             'message' => $message
  385.         );
  386.         
  387.         $response = new JsonResponse;
  388.         
  389.         $response $this->allowRemoteRequest($response);
  390.         
  391.         $response->setContent(json_encode($data));
  392.         return $response;
  393.         /*
  394.         return $this->render('entreprise/mobile_login.html.twig', [ 
  395.         ]);
  396.         */
  397.     }
  398.     /**
  399.     * @Route("/une-categorie-entreprise/{id}", name="api_une_categorie_entreprise")
  400.      * @return \Symfony\Component\HttpFoundation\JsonResponse
  401.     */
  402.     public function uneCategorieEntrepriseAction(Request $request$id)
  403.     {
  404.         $em $this->getDoctrine()
  405.                     ->getManager();
  406.         
  407.         
  408.     
  409.         $data = array();
  410.         $error '';
  411.         $message '';
  412.         
  413.         $categorieEntreprise $em->getRepository(CategorieEntreprise::class)
  414.                 ->findUneCategorie($idtrue);
  415.         $data = array(
  416.             'error' => $error,
  417.             'categorieEntreprise' => $categorieEntreprise[0],
  418.             
  419.             'message' => $message
  420.         );
  421.         
  422.         $response = new JsonResponse;
  423.         
  424.         $response $this->allowRemoteRequest($response);
  425.         
  426.         $response->setContent(json_encode($data));
  427.         return $response;
  428.         /*
  429.         return $this->render('entreprise/mobile_login.html.twig', [ 
  430.         ]);
  431.         */
  432.     }
  433.     /**
  434.     * @Route("/prestataires-d-une-categorie/{idCategorie}", name="api_prestataire_d_une_categorie")
  435.      * @return \Symfony\Component\HttpFoundation\JsonResponse
  436.     */
  437.     public function prestataireDUneCategorieAction(Request $request$idCategorie)
  438.     {
  439.         $em $this->getDoctrine()
  440.                     ->getManager();
  441.         
  442.         $user = array();
  443.         $data = array();
  444.         $error '';
  445.         $message '';
  446.         
  447.         $prestataires $em->getRepository(Boutique::class)
  448.                 ->prestataireDUneCategorie($idCategorietrue);
  449.         $data = array(
  450.             'error' => $error,
  451.             'prestataires' => $prestataires,
  452.             
  453.             'message' => $message
  454.         );
  455.         
  456.         $response = new JsonResponse;
  457.         
  458.         $response $this->allowRemoteRequest($response);
  459.         
  460.         $response->setContent(json_encode($data));
  461.         return $response;
  462.         /*
  463.         return $this->render('entreprise/mobile_login.html.twig', [ 
  464.         ]);
  465.         */
  466.     }
  467.     /**
  468.      * @Route("/request-delete-my-account", name="api_request_delete_my_account")
  469.      * @return \Symfony\Component\HttpFoundation\Response
  470.      */
  471.     public function requestDeleteMyAccountAction(Request $request)
  472.     {
  473.         $em $this->getDoctrine()
  474.                     ->getManager();
  475.        
  476.         return $this->render('api/request_delete_my_account.html.twig', [
  477.             
  478.         ]);
  479.     }
  480.     
  481.     /**
  482.      * @Route("/confirm-delete-my-account", name="api_confirm_delete_my_account")
  483.      * @return \Symfony\Component\HttpFoundation\Response
  484.      */
  485.     public function confirmDeleteMyAccountAction(Request $request)
  486.     {
  487.         $em $this->getDoctrine()
  488.                     ->getManager();
  489.        
  490.         return $this->render('api/confirm_delete_my_account.html.twig', [
  491.             
  492.         ]);
  493.     }
  494.     /**
  495.      * @Route("/delete-my-account/{idUser}/{plateforme}", name="api_delete_my_account")
  496.      * @return \Symfony\Component\HttpFoundation\Response
  497.      */
  498.     public function deleteMyAccountAction(Request $request$idUser$plateforme)
  499.     {
  500.         $em $this->getDoctrine()
  501.                     ->getManager();
  502.         
  503.         $user $em->getRepository(AppUser::class)
  504.                     ->findOneById($idUser);
  505.         $user->setEstSupprime(true);    
  506.                     
  507.         $em->flush();
  508.        
  509.         if($plateforme == 'web'){
  510.             return $this->redirectToRoute('app_logout');
  511.             return $this->redirectToRoute('home');
  512.         }
  513.         $error 'Success';
  514.         $message 'Compte supprimé';
  515.         
  516.         $data = array(
  517.             'error' => $error,
  518.             
  519.             'message' => $message
  520.         );
  521.     
  522.         
  523.         $response = new JsonResponse;
  524.         
  525.         $response $this->allowRemoteRequest($response);
  526.         
  527.         $response->setContent(json_encode($data));
  528.         return $response;
  529.     }
  530.     /**
  531.      * @Route("/enregistrer-une-entreprise/{idUser}", name="api_enregistrer_une_entreprise")
  532.      * @return \Symfony\Component\HttpFoundation\Response
  533.      */
  534.     public function enregistrerUneEntrepriseAction(Request $request$idUser)
  535.     {
  536.         $em $this->getDoctrine()
  537.                     ->getManager();
  538.         $plan $em->getRepository(Plan::class)
  539.                     ->findOneBySlug('free');
  540.         if(null == $plan){
  541.             return $this->createNotFoundException();
  542.         }
  543.         $user $em->getRepository(AppUser::class)
  544.                     ->findOneById($idUser);
  545.         if(null == $user){
  546.             return $this->createNotFoundException();
  547.         }
  548.     
  549.         $message '';
  550.         $error '';
  551.         if($request->getMethod() == 'POST'){
  552.             
  553.             $formData json_decode($request->getContent());
  554.             
  555.             $categorieEntreprise $formData->categorieEntreprise;
  556.             $categorieEntreprise =  $em->getRepository(CategorieEntreprise::class)
  557.                     ->findOneById($categorieEntreprise);
  558.             if(null == $categorieEntreprise){
  559.                 return $this->createNotFoundException();
  560.             }
  561.             $nom $formData->nom;
  562.             $adresse $formData->adresse;
  563.             $longitude $formData->longitude;
  564.             $latitude =  $formData->latitude;
  565.             $email $formData->email;
  566.             $pushNotificationToken $formData->pushNotificationToken;
  567.             
  568.             $telephone $formData->telephone;
  569.             $description $formData->description;
  570.             $disponibilite $formData->disponibilite;
  571.             $zoneDIntervention $formData->zoneDIntervention;
  572.             
  573.             $boutique = new Boutique;
  574.             $boutique->setUser($user);
  575.             $boutique->setCategorieEntreprise($categorieEntreprise);
  576.             $boutique->setNom($nom);
  577.             $boutique->setAdresse($adresse);
  578.             $boutique->setLongitude($longitude);
  579.             $boutique->setLatitude($latitude);
  580.             $boutique->setPushNotificationToken($pushNotificationToken);
  581.             $boutique->setEmail($email);
  582.             $boutique->setTelephone($telephone);
  583.             $boutique->setDescription($description);
  584.             $boutique->setDisponibilite($disponibilite);
  585.             $boutique->setZoneDIntervention($zoneDIntervention);
  586.             $em->persist($boutique);
  587.             $em->flush();
  588.             $userBoutique = new UserBoutique;
  589.             $userBoutique->setUser($user);
  590.             $userBoutique->setBoutique($boutique);
  591.             $userBoutique->setRole('Admin');
  592.             $userBoutique->setAccepte(true);
  593.             $em->persist($userBoutique);
  594.             $em->flush();
  595.             $error '';
  596.             $message 'Enregistrement effecuté';
  597.             $prestataire $em->getRepository(Boutique::class)
  598.                         ->unPrestataire($boutique->getId(), true);
  599.             $data = array(
  600.                     'error' => $error,
  601.                     'prestataire' => $prestataire[0],
  602.                     'message' => $message
  603.                 );
  604.                         
  605.                 $response = new JsonResponse;
  606.                         
  607.                 $response $this->allowRemoteRequest($response);
  608.                         
  609.                 $response->setContent(json_encode($data));
  610.                 return $response;
  611.                             
  612.                  return $this->redirectToRoute('registration_confirmed', array('username' => $user->getUsername()));
  613.         }
  614.         
  615.         return $this->render('api/enregistrer_une_entreprise.html.twig', [
  616.         
  617.             
  618.         ]);      
  619.     }
  620.     
  621.     /**
  622.      * @Route("/un-prestataire/{id}", name="api_un_prestataire")
  623.      * @return \Symfony\Component\HttpFoundation\Response
  624.      */
  625.     public function unPrestataireAction(Request $request$id)
  626.     {
  627.         $em $this->getDoctrine()
  628.                     ->getManager();
  629.     
  630.         $message '';
  631.         $error '';
  632.         $prestataire $em->getRepository(Boutique::class)
  633.                         ->unPrestataire($idtrue);
  634.         $dateFin = new \DateTime();
  635.         $abonnement $em->getRepository(Commande::class)
  636.                         ->dernierAbonnement($id$dateFintrue);
  637.         if(!empty($abonnement)){
  638.             $abonnement $abonnement[0];
  639.         }else{
  640.             $abonnement '';
  641.         }
  642.             $data = array(
  643.                     'error' => $error,
  644.                     'prestataire' => $prestataire[0],
  645.                     'abonnement' => $abonnement,
  646.                     'message' => $message
  647.                 );
  648.                         
  649.                 $response = new JsonResponse;
  650.                         
  651.                 $response $this->allowRemoteRequest($response);
  652.                         
  653.                 $response->setContent(json_encode($data));
  654.                 return $response;
  655.                             
  656.         
  657.         return $this->render('registration/register.html.twig', [
  658.         
  659.             'form' => $form->createView(),
  660.             'error_message' => $error_message
  661.         ]);      
  662.     }
  663.     /**
  664.      * @Route("/nouveau-devis/{idUser}/{fromABoutique}/{boutique}", name="api_nouveau_devis")
  665.      * @return \Symfony\Component\HttpFoundation\Response
  666.      */
  667.     public function nouveauDevisAction(Request $request$idUser$fromABoutique$boutique)
  668.     {
  669.         $em $this->getDoctrine()
  670.                     ->getManager();
  671.     
  672.         $user $em->getRepository(AppUser::class)
  673.                                         ->findOneById($idUser);
  674.         
  675.         if(null == $user){
  676.             //return $this->createNotFoundException();
  677.         }
  678.         $devis = new Devis;
  679.         $error '';
  680.         $message '';
  681.         $boutique $em->getRepository(Boutique::class)
  682.                                         ->findOneById($boutique);
  683.         if($request->getMethod() == 'POST'){
  684.             
  685.             $formData json_decode($request->getContent());
  686.             $titre $formData->titre;
  687.             //$titre = $request->request->get('titre');
  688.             $budgetMin $formData->budgetMin;
  689.             //$budgetMin = $request->request->get('budgetMin');
  690.             $budgetMax $formData->budgetMax;
  691.             //$budgetMax = $request->request->get('budgetMax');
  692.             $contenu $formData->contenu;
  693.             //$contenu = $request->request->get('contenu');
  694.             $categorieEntreprise $formData->categorieEntreprise;
  695.             //$categorieEntreprise = $request->request->get('categorieEntreprise');
  696.             $typeDevis $formData->typeDevis;
  697.             //$typeDevis = $request->request->get('typeDevis');
  698.             
  699.             $boutiqueFourmulaire $formData->prestataire;
  700.             //$boutiqueFourmulaire = $request->request->get('prestataire');
  701.             $devis->setTypeDevis($typeDevis);
  702.             $devis->setUser($user);
  703.             $devis->setTitre($titre);
  704.             $devis->setBudgetMin($budgetMin);
  705.             $devis->setBudgetMax($budgetMax);
  706.             $em->persist($devis);
  707.             $em->flush();
  708.             if($fromABoutique){
  709.                 //Le devis est envoyé directement à un prestataire
  710.                 if($boutique == null){
  711.                     $boutique $em->getRepository(Boutique::class)
  712.                                 ->findOneById($boutiqueFourmulaire);
  713.                 }
  714.                         
  715.                 $devis->setEstOuvert(false);
  716.                 $devis->setNombreDOffre(1);
  717.                         
  718.                 $offreDevis = new OffreDevis;
  719.                 $offreDevis->setRemporte(true);
  720.                 $offreDevis->setBoutique($boutique);
  721.                 $offreDevis->setDevis($devis);
  722.                 $em->persist($offreDevis);
  723.                         
  724.                 $userBoutiques $em->getRepository(UserBoutique::class)
  725.                                         ->findBy(
  726.                                             array(
  727.                                             'boutique' => $boutique
  728.                                             )
  729.                                         );
  730.                     foreach($userBoutiques as $userBoutique){
  731.                         $notification = new Notification;
  732.                         $notification->setUser($userBoutique->getUser());
  733.                         $lien =  $this->generateUrl('gestion.proposals', array('slug' => $userBoutique->getBoutique()->getSlug()));
  734.                         $notification->setExtraData($devis->getId());
  735.                         $notification->setLien($lien);
  736.                         $notification->setTypeNotification('devis');
  737.                         $notification->setDescription('Quelqu\'un vous a envoyé un devis sur ' $userBoutique->getBoutique()->getNom());
  738.         
  739.                         $em->persist($notification);
  740.                     }
  741.                 
  742.             } else{
  743.                     // Le devis n'a pas été envoyé depuis une boutique particulière
  744.                     //$devisFromData = $form->getData();
  745.                     $categorieEntreprise $em->getRepository(CategorieEntreprise::class)
  746.                                                         ->findOneById($categorieEntreprise);
  747.                     
  748.                     $entrepriseDuneCategories $em->getRepository(Boutique::class)
  749.                                                         ->findByCategorieEntreprise($categorieEntreprise);
  750.                     
  751.                         $devis->setEstOuvert(true);
  752.                         foreach($entrepriseDuneCategories as $entreCat){
  753.                             
  754.                             $userBoutiques $em->getRepository(UserBoutique::class)
  755.                                         ->findBy(
  756.                                             array(
  757.                                             'boutique' => $entreCat
  758.                                             )
  759.                                         );
  760.                                 foreach($userBoutiques as $userBoutique){
  761.                                     $notification = new Notification;
  762.                                     $notification->setUser($userBoutique->getUser());
  763.                                     $lien =  $this->generateUrl('gestion.proposals', array('slug' => $userBoutique->getBoutique()->getSlug()));
  764.                                     $notification->setExtraData($devis->getId());
  765.                                     $notification->setLien($lien);
  766.                                     $notification->setTypeNotification('devis');
  767.                                     $notification->setDescription('Nouveau devis pour ' $userBoutique->getBoutique()->getNom());
  768.                     
  769.                                     $em->persist($notification);
  770.                                 }
  771.                             
  772.                         }
  773.                     }
  774.                     $message 'Enregistrement effectué';
  775.                     $em->flush();
  776.                     $unDevis $em->getRepository(Devis::class)
  777.                                     ->unDevis($devis->getId(), true);
  778.                     
  779.                     $data = array(
  780.                     'error' => $error,
  781.                     'devis' => $unDevis[0],
  782.                     'message' => $message
  783.                     );
  784.                         
  785.                 $response = new JsonResponse;
  786.                         
  787.                 $response $this->allowRemoteRequest($response);
  788.                         
  789.                 $response->setContent(json_encode($data));
  790.                 return $response;
  791.                     
  792.                 return $this->redirectToRoute('afficher_devis', array('slug' => $devis->getSlug()));
  793.                 
  794.         }
  795.         return $this->render('api/nouveau_devis.html.twig', [
  796.         
  797.             
  798.            // 'error_message' => $error_message
  799.         ]); 
  800.     }
  801.     /**
  802.      * @Route("/faire-une-offre/{idDevis}/{idPrestataire}/{idUser}", name="api_faire_une_offre")
  803.      * @return \Symfony\Component\HttpFoundation\Response
  804.      */
  805.     public function faireUneOffreAction(Request $request$idDevis$idPrestataire,  $idUser)
  806.     {
  807.         $em $this->getDoctrine()
  808.                     ->getManager();
  809.         
  810.         $devis $em->getRepository(Devis::class)
  811.                     ->findOneById($idDevis);
  812.         if(!$devis->getEstOuvert()){
  813.             return $this->createNotFoundException();
  814.         }
  815.         $devis->setNombreDeVue($devis->getNombreDeVue() + 1);
  816.         $em->flush();
  817.         $user $em->getRepository(AppUser::class)
  818.                     ->findOneById($idUser);
  819.         $boutique =  $em->getRepository(Boutique::class)
  820.                     ->findOneById($idPrestataire);
  821.         $userBoutiques $em->getRepository(UserBoutique::class)
  822.                         ->findByUser($user);
  823.         if($request->getMethod() == 'POST'){
  824.             $formData json_decode($request->getContent());
  825.             $valeurFinanciere $formData->valeurFinanciere;
  826.             //$valeurFinanciere = $request->request->get('valeurFinanciere');
  827.             $contenu  $formData->message;
  828.             //$contenu = $request->request->get('message');
  829.             $offreDevis = new OffreDevis;
  830.             $offreDevis->setValeurFinanciere($valeurFinanciere);
  831.             $offreDevis->setContenu($contenu);
  832.             $offreDevis->setUser($user);
  833.             $offreDevis->setDevis($devis);
  834.             $offreDevis->setBoutique($boutique);
  835.             $em->persist($offreDevis);
  836.             $em->flush();
  837.                     
  838.             $notification = new Notification;
  839.             $notification->setUser($devis->getUser());
  840.             $notification->setTypeNotification('devis');
  841.             $lien =  $this->generateUrl('afficher_devis', array('slug' => $devis->getSlug()));
  842.             $notification->setLien($lien);
  843.             $notification->setDescription($boutique->getNom().' vous a fait une proposition ');
  844.             $em->persist($notification);
  845.                     
  846.             $em->flush();
  847.             $message 'Offre soumise';
  848.             $error '';
  849.             $offreDevisRetourne $em->getRepository(OffreDevis::class)
  850.                                     ->uneOffreDevis($offreDevis->getId(), true);
  851.             $offreDevisRetourne $offreDevisRetourne[0];
  852.             $data = array(
  853.                     'error' => $error,
  854.                     'offreDevis' => $offreDevisRetourne,
  855.                     'message' => $message
  856.                     );
  857.                         
  858.                 $response = new JsonResponse;
  859.                         
  860.                 $response $this->allowRemoteRequest($response);
  861.                         
  862.                 $response->setContent(json_encode($data));
  863.                 return $response;
  864.         
  865.         }
  866.         return $this->render('entreprise/faire_une_offre.html.twig', [
  867.             'devis' => $devis,
  868.             'userBoutiques' => $userBoutiques,
  869.             'form' => $form->createView()
  870.         ]);
  871.     }
  872.     /**
  873.      * @Route("/choisir-offre/{idOffreDevis}/{idUser}", name="api_choisir_offre")
  874.      * @return \Symfony\Component\HttpFoundation\Response
  875.      */
  876.     public function choisirOffreAction(Request $request,  $idOffreDevis$idUser)
  877.     {
  878.         $em $this->getDoctrine()
  879.                     ->getManager();
  880.         $offreDevis $em->getRepository(OffreDevis::class)
  881.                         ->findOneById($idOffreDevis);    
  882.         $offreDevis->setRemporte(true);
  883.         $offreDevis->getDevis()->setEstOuvert(false);
  884.         $em->flush();
  885.         $user $offreDevis->getUser();
  886.         
  887.         $notification = new Notification;
  888.         $notification->setUser($offreDevis->getUser());
  889.         $notification->setTypeNotification('devis');
  890.         $lien =  $this->generateUrl('gestion.proposals', array('slug' => $offreDevis->getBoutique()->getSlug()));
  891.         $notification->setLien($lien);
  892.         $notification->setDescription('votre offre a été choisie');
  893.         $em->persist($notification);
  894.                     
  895.         $em->flush();
  896.         $data = array(
  897.                     'error' => '',
  898.                     'message' => 'Choix effectué, les enchères sont fermées'
  899.                     );
  900.                         
  901.                 $response = new JsonResponse;
  902.                         
  903.                 $response $this->allowRemoteRequest($response);
  904.                         
  905.                 $response->setContent(json_encode($data));
  906.                 return $response;
  907.        
  908.     }
  909.     /**
  910.      * @Route("/historique-paiement/{idUser}", name="api_historique_paiement")
  911.      * @return \Symfony\Component\HttpFoundation\Response
  912.      */
  913.     public function historiquePaiementAction(Request $request,  $idUser)
  914.     {
  915.         $em $this->getDoctrine()
  916.                     ->getManager();
  917.         $paiementServices $em->getRepository(PaiementService::class)
  918.                         ->paiementDUnClient($idUsertrue);    
  919.                     
  920.         $em->flush();
  921.         $data = array(
  922.                     'error' => '',
  923.                     'message' => 'Choix effectué, les enchères sont fermées',
  924.                     'paiementServices' => $paiementServices
  925.                     );
  926.                         
  927.                 $response = new JsonResponse;
  928.                         
  929.                 $response $this->allowRemoteRequest($response);
  930.                         
  931.                 $response->setContent(json_encode($data));
  932.                 return $response;
  933.        
  934.     }
  935.     /**
  936.      * @Route("/comptes-parraines/{idUser}", name="api_comptes_parraines")
  937.      * @return \Symfony\Component\HttpFoundation\Response
  938.      */
  939.     public function compteParaineAction(Request $request,  $idUser)
  940.     {
  941.         $em $this->getDoctrine()
  942.                     ->getManager();
  943.         $user $em->getRepository(AppUser::class)
  944.                     ->findOneById($idUser);
  945.         $cps $em->getRepository(AppUser::class)
  946.                         ->compteParaine($user->getMonPropreCodePromo(), true);    
  947.         $comptesParraines = array();
  948.         $cs = array();
  949.         foreach($cps as $cp)    {
  950.             unset($cp['password']);
  951.             array_push($comptesParraines$cp);
  952.         }
  953.         $data = array(
  954.                     'error' => 'Success',
  955.                     'message' => 'Comptes parrainés retournés',
  956.                     'comptesParraines' => $comptesParraines
  957.                     );
  958.                         
  959.                 $response = new JsonResponse;
  960.                         
  961.                 $response $this->allowRemoteRequest($response);
  962.                         
  963.                 $response->setContent(json_encode($data));
  964.                 return $response;
  965.        
  966.     }
  967.     
  968.     /**
  969.      * @Route("/offre-d-un-devis/{idDevis}", name="api_offres_d_un_devis")
  970.      * @return \Symfony\Component\HttpFoundation\Response
  971.      */
  972.     public function offreDUnDevisAction(Request $request,  $idDevis)
  973.     {
  974.         $em $this->getDoctrine()
  975.                     ->getManager();
  976.         $offreDevis $em->getRepository(OffreDevis::class)
  977.                         ->lesOffresDUnDevis($idDevistrue);    
  978.         $data = array(
  979.                     'error' => '',
  980.                     'message' => 'Success',
  981.                     'offreDevis' => $offreDevis
  982.                     );
  983.                         
  984.                 $response = new JsonResponse;
  985.                         
  986.                 $response $this->allowRemoteRequest($response);
  987.                         
  988.                 $response->setContent(json_encode($data));
  989.                 return $response;
  990.        
  991.     }
  992.     /**
  993.       * @Route("/devis-d-un-client/{idUser}", name="api_devis_d_un_client")
  994.      * @return \Symfony\Component\HttpFoundation\Response
  995.      */
  996.     public function devisClientAction(Request $request,  $idUser)
  997.     {
  998.         $em $this->getDoctrine()
  999.                     ->getManager();
  1000.         $devis $em->getRepository(Devis::class)
  1001.                         ->devisDUnClient($idUsertrue);    
  1002.         $data = array(
  1003.                     'error' => '',
  1004.                     'message' => 'Success',
  1005.                     'devis' => $devis
  1006.                     );
  1007.                         
  1008.                 $response = new JsonResponse;
  1009.                         
  1010.                 $response $this->allowRemoteRequest($response);
  1011.                         
  1012.                 $response->setContent(json_encode($data));
  1013.                 return $response;
  1014.        
  1015.     }
  1016.     /**
  1017.       * @Route("/devis-ouverts", name="api_devis_ouverts")
  1018.      * @return \Symfony\Component\HttpFoundation\Response
  1019.      */
  1020.     public function devisOuvertsAction(Request $request)
  1021.     {
  1022.         $em $this->getDoctrine()
  1023.                     ->getManager();
  1024.         $devis $em->getRepository(Devis::class)
  1025.                         ->devisOuverts(true);    
  1026.         $data = array(
  1027.                     'error' => '',
  1028.                     'message' => 'Success',
  1029.                     'devis' => $devis
  1030.                     );
  1031.                         
  1032.                 $response = new JsonResponse;
  1033.                         
  1034.                 $response $this->allowRemoteRequest($response);
  1035.                         
  1036.                 $response->setContent(json_encode($data));
  1037.                 return $response;
  1038.        
  1039.     }
  1040.     /**
  1041.      * @Route("/un-devis/{id}", name="api_un_devis")
  1042.      * @return \Symfony\Component\HttpFoundation\Response
  1043.      */
  1044.     public function unDevisAction(Request $request$id)
  1045.     {
  1046.         $em $this->getDoctrine()
  1047.                     ->getManager();
  1048.     
  1049.         $message '';
  1050.         $error '';
  1051.         $unDevis $em->getRepository(Devis::class)
  1052.                                     ->unDevis($idtrue);
  1053.             $data = array(
  1054.                     'error' => $error,
  1055.                     'devis' => $unDevis[0],
  1056.                     'message' => $message
  1057.                 );
  1058.                         
  1059.                 $response = new JsonResponse;
  1060.                         
  1061.                 $response $this->allowRemoteRequest($response);
  1062.                         
  1063.                 $response->setContent(json_encode($data));
  1064.                 return $response;
  1065.                             
  1066.         
  1067.         return $this->render('registration/register.html.twig', [
  1068.         
  1069.         ]);      
  1070.     }
  1071.     /**
  1072.      * @Route("/donner-avis/{idUser}/{idEntreprise}", name="api_donner_avis")
  1073.      * @return \Symfony\Component\HttpFoundation\Response
  1074.      */
  1075.     public function donnerAvisAction(Request $request$idUser$idEntreprise)
  1076.     {
  1077.         $em $this->getDoctrine()
  1078.                     ->getManager();
  1079.     
  1080.         
  1081.         $user $em->getRepository(AppUser::class)
  1082.                     ->findOneById($idUser);
  1083.         $boutique $em->getRepository(Boutique::class)
  1084.                     ->findOneById($idEntreprise);
  1085.         $avisUtilisateur = new AvisUtilisateur;
  1086.         
  1087.         $message '';
  1088.         $error '';
  1089.         
  1090.         if($request->getMethod() == 'POST'){
  1091.             $formData json_decode($request->getContent());
  1092.             $valeurAvis = (int)$formData->valeurAvis;
  1093.             //$valeurAvis = (int)$request->request->get('valeurAvis');
  1094.             $contenu $formData->contenu;
  1095.             //$contenu = $request->request->get('contenu');
  1096.             
  1097.             $avisUtilisateur->setValeurAvis($valeurAvis);
  1098.             $avisUtilisateur->setContenu($contenu);
  1099.             $avisUtilisateur->setUser($user);
  1100.             $avisUtilisateur->setBoutique($boutique);
  1101.             $em->persist($avisUtilisateur);
  1102.             $em->flush();
  1103.             $tousLesAvis $em->getRepository(AvisUtilisateur::class)
  1104.                                         ->findByBoutique($boutique);
  1105.                                         
  1106.                     
  1107.             $moyenne 0;
  1108.             $nb 0;
  1109.             $note 0;
  1110.             foreach($tousLesAvis as $avis){
  1111.                 $note += $avis->getValeurAvis();
  1112.                 $nb++;
  1113.             }
  1114.             if($nb >0){
  1115.                 $moyenne round($note/$nb1);
  1116.             }
  1117.                 $boutique->setMoyenneAvis($moyenne);
  1118.                 $em->flush();
  1119.                 $userBoutiques $em->getRepository(UserBoutique::class)
  1120.                                         ->findBy(
  1121.                                             array(
  1122.                                             'boutique' => $boutique
  1123.                                             )
  1124.                                         );
  1125.                     foreach($userBoutiques as $userBoutique){
  1126.                         $notification = new Notification;
  1127.                         $notification->setUser($userBoutique->getUser());
  1128.                         $lien =  $this->generateUrl('gestion.reviews', array('slug' => $userBoutique->getBoutique()->getSlug()));
  1129.                         $notification->setLien($lien);
  1130.                         $notification->setTypeNotification('avis');
  1131.                         $notification->setDescription('Quelqu\'un a laissé un avis sur ' $userBoutique->getBoutique()->getNom());
  1132.         
  1133.                         $em->persist($notification);
  1134.                     }
  1135.                     $em->flush();
  1136.                     
  1137.                 $data = array(
  1138.                     'error' => $error,
  1139.                     
  1140.                     'message' => $message
  1141.                 );
  1142.                         
  1143.                 $response = new JsonResponse;
  1144.                         
  1145.                 $response $this->allowRemoteRequest($response);
  1146.                         
  1147.                 $response->setContent(json_encode($data));
  1148.                 return $response;
  1149.                             
  1150.                 
  1151.         }
  1152.         
  1153.         
  1154.         return $this->render('api/donner_avis.html.twig', [
  1155.          
  1156.         ]);
  1157.     }
  1158.     /**
  1159.      * @Route("/avis-utile/{id}", name="api_avis_utile")
  1160.      * @return \Symfony\Component\HttpFoundation\Response
  1161.      */
  1162.     public function avisUtileAction(Request $requestAvisUtilisateur $avisUtilisateur)
  1163.     {
  1164.         $em $this->getDoctrine()
  1165.                     ->getManager();
  1166.         
  1167.         $error '';
  1168.         $message '';
  1169.         
  1170.         $avisUtilisateur->setAvisUtile($avisUtilisateur->getAvisUtile() + 1);
  1171.         
  1172.         $em->flush();
  1173.         $data = array(
  1174.                     'error' => $error,
  1175.                     
  1176.                     'message' => $message
  1177.                 );
  1178.                         
  1179.         $response = new JsonResponse;
  1180.                         
  1181.         $response $this->allowRemoteRequest($response);
  1182.                         
  1183.         $response->setContent(json_encode($data));
  1184.         return $response;
  1185.     }
  1186.     
  1187.     /**
  1188.      * @Route("/avis-inutile/{id}", name="api_avis_inutile")
  1189.      * @return \Symfony\Component\HttpFoundation\Response
  1190.      */
  1191.     public function avisInutileAction(Request $requestAvisUtilisateur $avisUtilisateur)
  1192.     {
  1193.         $em $this->getDoctrine()
  1194.                     ->getManager();
  1195.         $user $this->getUser();
  1196.         $error '';
  1197.         $message '';
  1198.         
  1199.         $avisUtilisateur->setAvisInutile($avisUtilisateur->getAvisInutile() + 1);
  1200.         
  1201.         $em->flush();
  1202.         $data = array(
  1203.                     'error' => $error,
  1204.                     
  1205.                     'message' => $message
  1206.                 );
  1207.                         
  1208.         $response = new JsonResponse;
  1209.                         
  1210.         $response $this->allowRemoteRequest($response);
  1211.                         
  1212.         $response->setContent(json_encode($data));
  1213.         return $response;
  1214.     }
  1215.     
  1216.     /**
  1217.      * @Route("/signaler-avis/{id}", name="api_signaler_avis")
  1218.      * @return \Symfony\Component\HttpFoundation\Response
  1219.      */
  1220.     public function signalerAvisAction(Request $requestAvisUtilisateur $avisUtilisateur)
  1221.     {
  1222.         $em $this->getDoctrine()
  1223.                     ->getManager();
  1224.         $user $this->getUser();
  1225.         $error '';
  1226.         $message '';
  1227.         
  1228.         $avisUtilisateur->setSignalerAvis($avisUtilisateur->getSignalerAvis() + 1);
  1229.         
  1230.         $em->flush();
  1231.         $data = array(
  1232.                     'error' => $error,
  1233.                     
  1234.                     'message' => $message
  1235.                 );
  1236.                         
  1237.         $response = new JsonResponse;
  1238.                         
  1239.         $response $this->allowRemoteRequest($response);
  1240.                         
  1241.         $response->setContent(json_encode($data));
  1242.         return $response;
  1243.     }
  1244.     /**
  1245.      * @Route("/enregistrer-entreprise-favoris/{idUser}/{idEntreprise}", name="api_enregistrer_entreprise")
  1246.      * @return \Symfony\Component\HttpFoundation\Response
  1247.      */
  1248.     public function enregistrerEntrepriseAction(Request $request$idUser$idEntreprise)
  1249.     {
  1250.         
  1251.         $em $this->getDoctrine()
  1252.                     ->getManager();
  1253.         
  1254.     
  1255.         $user $em->getRepository(AppUser::class)
  1256.                     ->findOneById($idUser);
  1257.         
  1258.         $boutique $em->getRepository(Boutique::class)
  1259.                     ->findOneById($idEntreprise);
  1260.         
  1261.         $message '';
  1262.         $error '';
  1263.         $entrepriseEnregistres $em->getRepository(EntrepriseEnregistre::class)
  1264.                                 ->findBy(
  1265.                                     array(
  1266.                                     'boutique' => $boutique->getId(),
  1267.                                     'user' => $user->getId()
  1268.                                     )
  1269.                                 );
  1270.         $dejaEnregistre false;
  1271.         foreach($entrepriseEnregistres as $entrepriseEnregistre){
  1272.             if($entrepriseEnregistre->getBoutique()->getId() == $boutique->getId()){
  1273.                 $dejaEnregistre true;
  1274.             }
  1275.         }
  1276.         
  1277.         if($dejaEnregistre == false){
  1278.             $eenr = new EntrepriseEnregistre;
  1279.             
  1280.             $eenr->setBoutique($boutique);
  1281.             $eenr->setUser($user);
  1282.             $em->persist($eenr);
  1283.             $em->flush();
  1284.         }
  1285.         
  1286.         $data = array(
  1287.                     'error' => $error,
  1288.                     
  1289.                     'message' => $message
  1290.                 );
  1291.                         
  1292.         $response = new JsonResponse;
  1293.                         
  1294.         $response $this->allowRemoteRequest($response);
  1295.                         
  1296.         $response->setContent(json_encode($data));
  1297.         return $response;
  1298.         
  1299.     }
  1300.     /**
  1301.      * @Route("/envoyer-message/{idUser}/{idEntreprise}", name="api_envoyer_message")
  1302.      * @return \Symfony\Component\HttpFoundation\Response
  1303.      */
  1304.     public function envoyerMessageAction(Request $request$idUser,  $idEntreprise)
  1305.     {
  1306.         $em $this->getDoctrine()
  1307.                     ->getManager();
  1308.     
  1309.         $user $em->getRepository(AppUser::class)
  1310.                     ->findOneById($idUser);
  1311.         $boutique $em->getRepository(Boutique::class)
  1312.                     ->findOneById($idEntreprise);
  1313.         $message = new Message;
  1314.         $error '';
  1315.         
  1316.         
  1317.         if($request->getMethod() == 'POST'){
  1318.             $formData json_decode($request->getContent());
  1319.             $contenu $formData->contenu;
  1320.             //$contenu = $request->request->get('contenu');
  1321.                 
  1322.                     $conversation $em->getRepository(Conversation::class)
  1323.                                         ->findOneBy(
  1324.                                             array(
  1325.                                             'boutique' => $boutique,
  1326.                                             'user' => $user
  1327.                                             )
  1328.                                         );
  1329.                                     
  1330.                     if(null === $conversation){
  1331.                         $conversation = new Conversation;
  1332.                         $conversation->setUser($user);
  1333.                         $conversation->setBoutique($boutique);
  1334.                         $em->persist($conversation);
  1335.                         
  1336.                         $em->flush();
  1337.                     }
  1338.                     
  1339.                     $message->setUser($user);
  1340.                     $message->setConversation($conversation);
  1341.                     $message->setContenu($contenu);
  1342.                     $em->persist($message);
  1343.                     $conversation->setLastMessage($message->getContenu());
  1344.                     $em->flush();
  1345.                     
  1346.                     $userBoutiques $em->getRepository(UserBoutique::class)
  1347.                                         ->findBy(
  1348.                                             array(
  1349.                                             'boutique' => $boutique
  1350.                                             )
  1351.                                         );
  1352.                     foreach($userBoutiques as $userBoutique){
  1353.                         $notification = new Notification;
  1354.                         $notification->setUser($userBoutique->getUser());
  1355.                         $lien =  $this->generateUrl('gestion.messages', array('slug' => $userBoutique->getBoutique()->getSlug()));
  1356.                         $notification->setExtraData($conversation->getId());
  1357.                         $notification->setLien($lien);
  1358.                         $notification->setTypeNotification('message');
  1359.                         $notification->setDescription('Quelqu\'un vous a envoyé un message sur ' $userBoutique->getBoutique()->getNom());
  1360.         
  1361.                         $em->persist($notification);
  1362.                     }
  1363.                     
  1364.                     $em->flush();
  1365.                     
  1366.                     
  1367.                     $data = array(
  1368.                         'error' => $error,
  1369.                         
  1370.                         'message' => $contenu
  1371.                     );
  1372.                             
  1373.                 $response = new JsonResponse;
  1374.                                 
  1375.                 $response $this->allowRemoteRequest($response);
  1376.                                 
  1377.                 $response->setContent(json_encode($data));
  1378.                 return $response;
  1379.                 
  1380.         }
  1381.         
  1382.         
  1383.         return $this->render('api/envoyer_message.html.twig', [
  1384.           
  1385.         ]);
  1386.     }
  1387.     /**
  1388.      * @Route("/mes-entreprises/{idUser}", name="api_mes_entreprises")
  1389.      * @return \Symfony\Component\HttpFoundation\Response
  1390.      */
  1391.     public function mesEntrepriseAction(Request $request$idUser)
  1392.     {
  1393.         $em $this->getDoctrine()
  1394.                     ->getManager();
  1395.     
  1396.         $user $em->getRepository(AppUser::class)
  1397.                         ->findOneById($idUser);
  1398.         $userBoutiques $em->getRepository(UserBoutique::class)
  1399.                         ->mesEntreprises($user->getId(), true);
  1400.         $mesEntreprises = array();
  1401.         foreach($userBoutiques as $userBoutique){
  1402.             array_push($mesEntreprises$userBoutique['boutique']);
  1403.         }
  1404.         $error '';
  1405.         $message '';
  1406.         $data = array(
  1407.                         'error' => $error,
  1408.                         'mesEntreprises' => $mesEntreprises,
  1409.                         'message' => $message
  1410.                     );
  1411.                             
  1412.         $response = new JsonResponse;
  1413.                                 
  1414.         $response $this->allowRemoteRequest($response);
  1415.                                 
  1416.         $response->setContent(json_encode($data));
  1417.                 
  1418.         return $response;
  1419.                         
  1420.         return $this->render('gestion/mes_entreprise.html.twig', [
  1421.             'userBoutiques' => $userBoutiques
  1422.         ]);
  1423.     }
  1424.     /**
  1425.      * @Route("/entreprise/{idUser}/{idEntreprise}", name="api_afficher_entreprise")
  1426.      * @return \Symfony\Component\HttpFoundation\Response
  1427.      */
  1428.     public function afficherEntrpriseAction(Request $request$idUser$idEntreprise)
  1429.     {
  1430.         $em $this->getDoctrine()
  1431.                     ->getManager();
  1432.         $user $em->getRepository(AppUser::class)
  1433.                     ->findOneById($idUser);
  1434.         $boutique $em->getRepository(Boutique::class)
  1435.                     ->unPrestataire($idEntreprisetrue);
  1436.         $nombreOffreDevis $em->getRepository(OffreDevis::class)
  1437.                         ->nombreOffreDevis($idEntreprise);
  1438.         if(!empty($nombreOffreDevis)){
  1439.             $nombreOffreDevis $nombreOffreDevis[0]['nombreOffreDevis'];
  1440.         }else{
  1441.             $nombreOffreDevis 0;
  1442.         }
  1443.         
  1444.         $nombreMessage $em->getRepository(Conversation::class)
  1445.                         ->nombreMessageDUneBoutique($idEntreprise);
  1446.         if(!empty($nombreMessage)){
  1447.             $nombreMessage $nombreMessage[0]['nombreMessage'];
  1448.         }else{
  1449.             $nombreMessage 0;
  1450.         }    
  1451.             
  1452.         $nombreTiers 0;
  1453.         $userBoutique $em->getRepository(UserBoutique::class)
  1454.                         ->findOneBy(
  1455.                             array(
  1456.                             'user' => $user->getId(),
  1457.                             'boutique' => $idEntreprise
  1458.                             )
  1459.                         );
  1460.         
  1461.                     
  1462.         $abonnement $em->getRepository(Commande::class)
  1463.                         ->findBy(
  1464.                             array(
  1465.                                 'boutique' => $idEntreprise 
  1466.                             ),
  1467.                             array(
  1468.                                 'laDate' => 'DESC'
  1469.                             ),
  1470.                             1
  1471.                         );    
  1472.         if(!empty($abonnement)){
  1473.             $abonnement $abonnement[0];
  1474.         }
  1475.         //nombreAvis
  1476.         
  1477.         $data = array(
  1478.                         'error' => '',
  1479.                         'abonnement' => $abonnement,
  1480.                         'message' => '',
  1481.                         'nombeDAvis' =>$boutique[0]['nombreAvis'],
  1482.                         'nombreDeVisite' => $boutique[0]['nombreDeVisite'],
  1483.                         'nombreOffreDevis' => $nombreOffreDevis,
  1484.                         'nombreMessage' => $nombreMessage,
  1485.                         'entreprise' => $boutique[0]
  1486.                     );
  1487.                         
  1488.         $response = new JsonResponse;
  1489.                                 
  1490.         $response $this->allowRemoteRequest($response);
  1491.                                 
  1492.         $response->setContent(json_encode($data));
  1493.                 
  1494.         return $response;
  1495.             
  1496.         return $this->render('gestion/afficher_boutique.html.twig', [
  1497.             'boutique' => $boutique,
  1498.             'userBoutique' => $userBoutique,
  1499.             'abonnement' => $abonnement
  1500.             
  1501.         ]);
  1502.     }
  1503.     /**
  1504.      * @Route("/catalogue/{idUser}/{idEntreprise}", name="api_mes_produits")
  1505.      * @return \Symfony\Component\HttpFoundation\Response
  1506.      */
  1507.     public function mesProduitsAction(Request $request$idUser$idEntreprise)
  1508.     {
  1509.         $em $this->getDoctrine()
  1510.                     ->getManager();
  1511.         $user $em->getRepository(AppUser::class)
  1512.                     ->findOneById($idUser);
  1513.         $boutique $em->getRepository(Boutique::class)
  1514.                     ->unPrestataire($idEntreprisetrue);
  1515.         
  1516.         $products $em->getRePository(Produit::class)
  1517.                             ->produitsDuneEntreprise($idEntreprisetrue);
  1518.         $userBoutique $em->getRepository(UserBoutique::class)
  1519.                         ->findOneBy(
  1520.                             array(
  1521.                             'user' => $user->getId(),
  1522.                             'boutique' => $idEntreprise
  1523.                             )
  1524.                         );
  1525.         
  1526.         //nombreAvis
  1527.         if(!empty($products)){
  1528.             $products $products;
  1529.         }
  1530.         $data = array(
  1531.                         'error' => '',
  1532.                         'produits' => $products,
  1533.                         'message' => '',
  1534.                         
  1535.                     );
  1536.                         
  1537.         $response = new JsonResponse;
  1538.                                 
  1539.         $response $this->allowRemoteRequest($response);
  1540.                                 
  1541.         $response->setContent(json_encode($data));
  1542.                 
  1543.         return $response;
  1544.             
  1545.         return $this->render('gestion/afficher_boutique.html.twig', [
  1546.             'boutique' => $boutique,
  1547.             'userBoutique' => $userBoutique,
  1548.             'abonnement' => $abonnement
  1549.             
  1550.         ]);
  1551.     }
  1552.     /**
  1553.      * @Route("/nouveau-produit/{idUser}/{idEntreprise}", name="api_nouveau_produit")
  1554.      */
  1555.     public function nouveauProduitAction(Request $request$idUser$idEntreprise)
  1556.     {
  1557.         $requestStack $this->get('request_stack');
  1558.         $request $requestStack->getCurrentRequest();
  1559.     
  1560.         $em $this->getDoctrine()
  1561.                     ->getManager();
  1562.         $ok_submission '';
  1563.         $error '';
  1564.         $message '';        
  1565.         $produit = new Produit;
  1566.         $user $em->getRepository(AppUser::class)
  1567.                     ->findOneById($idUser);
  1568.         
  1569.         $boutique $em->getRepository(Boutique::class)
  1570.                     ->findOneById($idEntreprise);
  1571.         
  1572.                             
  1573.         if('POST' == $request->getMethod() )
  1574.         {
  1575.             $formData json_decode($request->getContent());
  1576.             $nom $formData->nom;
  1577.             //$nom = $request->request->get('nom');
  1578.             $filename $formData->filename;
  1579.             //$filename = $request->request->get('filename');
  1580.             $prix = (float)$formData->prix;
  1581.             //$prix = (float)$request->request->get('prix');
  1582.             $petiteDescription $formData->petiteDescription;
  1583.             //$petiteDescription = $request->request->get('petiteDescription');
  1584.             $description $formData->description;
  1585.             //$description = $request->request->get('description');
  1586.             $produit->setNom($nom);
  1587.             $produit->setPrix($prix);
  1588.             $produit->setPetiteInfo($petiteDescription);
  1589.             $produit->setDescription($description);
  1590.             
  1591.             $produit->setBoutique($boutique);
  1592.             $imageParts explode(';base64,'$formData->imagePrincipale);
  1593.             
  1594.             $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  1595.             
  1596.             $imageDecoded base64_decode($imageBase64);
  1597.             
  1598.             $em->persist($produit);
  1599.             $em->flush();
  1600.             $photo = new ProductPhoto;
  1601.                 
  1602.             $ex pathinfo($filenamePATHINFO_EXTENSION); 
  1603.             $exA = array('jpg''jpeg''png''gif''jfif');
  1604.                 
  1605.             if (in_array(strtolower($ex), $exA)){
  1606.                 
  1607.                     $photo->setExtension($ex);
  1608.             } else {
  1609.                     throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  1610.             }
  1611.                 
  1612.                 $name $produit->getId().time();
  1613.                 $namePourRepertoire $name;
  1614.                 //hydratation des attributs de l'objet
  1615.                 $photo->setUrl($name.'.'.$photo->getExtension());
  1616.                 $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  1617.                 $photo->setAlt('Image de '.$produit->getNom());
  1618.                 $photo->setProduit($produit);
  1619.                 $extension $photo->getExtension();
  1620.                 //deplacement (création de l'image original)
  1621.                 //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  1622.                 
  1623.                 
  1624.                 if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  1625.                 {
  1626.                     throw new \RuntimeException('Impossible de créer le dossier de destination');
  1627.                 }
  1628.                 
  1629.                 if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  1630.                 {
  1631.                     $error 'Enregistrement effectué';
  1632.                 } else {
  1633.                     echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  1634.                     $error 'Impossible d\'enregistrer l\'image';
  1635.                 }
  1636.             $em->persist($photo);
  1637.             $produit->setImagePrincipale($photo);
  1638.             $em->flush();
  1639.             $data = array(
  1640.                         'error' => '',
  1641.                         'message' => '',
  1642.                         
  1643.                     );
  1644.                         
  1645.             $response = new JsonResponse;
  1646.                                     
  1647.             $response $this->allowRemoteRequest($response);
  1648.                                     
  1649.             $response->setContent(json_encode($data));
  1650.                     
  1651.             return $response;
  1652.             
  1653.         }
  1654.         return $this->render('api/nouveau_produit.html.twig', [
  1655.             
  1656.         ]);
  1657.     }
  1658.     /**
  1659.      * @Route("/modifier-produit/{idProduit}", name="api_modifier_produit")
  1660.      */
  1661.     public function modifierProduitAction(Request $request$idProduit)
  1662.     {
  1663.         
  1664.         $em $this->getDoctrine()
  1665.                     ->getManager();
  1666.         
  1667.         $produit $em->getRepository(Produit::class)
  1668.                         ->findOneById($idProduit);
  1669.         
  1670.         $error '';
  1671.         $message '';
  1672.         if('POST' == $request->getMethod())
  1673.         {
  1674.             $formData json_decode($request->getContent());
  1675.             $nom $formData->nom;
  1676.             //$nom = $request->request->get('nom');
  1677.             $filename $formData->filename;
  1678.             //$filename = $request->request->get('filename');
  1679.             $prix = (float)$formData->prix;
  1680.             //$prix = (float)$request->request->get('prix');
  1681.             $petiteDescription $formData->petiteDescription;
  1682.             //$petiteDescription = $request->request->get('petiteDescription');
  1683.             $description $formData->description;
  1684.             //$description = $request->request->get('description');
  1685.             $produit->setNom($nom);
  1686.             $produit->setPrix($prix);
  1687.             $produit->setPetiteInfo($petiteDescription);
  1688.             $produit->setDescription($description);
  1689.             
  1690.             $imageParts explode(';base64,'$formData->imagePrincipale);
  1691.             
  1692.             $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  1693.             
  1694.             $imageDecoded base64_decode($imageBase64);
  1695.             $em->persist($produit);
  1696.             $em->flush();
  1697.             if($filename != ''){
  1698.                 $photo = new ProductPhoto;
  1699.                 
  1700.                 $ex pathinfo($filenamePATHINFO_EXTENSION); 
  1701.                 $exA = array('jpg''jpeg''png''gif''jfif');
  1702.                 
  1703.                 if (in_array(strtolower($ex), $exA)){
  1704.                 
  1705.                     $photo->setExtension($ex);
  1706.                 } else {
  1707.                     throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  1708.                 }
  1709.                 
  1710.                 $name $produit->getId().time();
  1711.                 $namePourRepertoire $name;
  1712.                 //hydratation des attributs de l'objet
  1713.                 $photo->setUrl($name.'.'.$photo->getExtension());
  1714.                 $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  1715.                 $photo->setAlt('Image de '.$produit->getNom());
  1716.                 $extension $photo->getExtension();
  1717.                 //deplacement (création de l'image original)
  1718.                 //$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
  1719.                 
  1720.                 
  1721.                 if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  1722.                 {
  1723.                     throw new \RuntimeException('Impossible de créer le dossier de destination');
  1724.                 }
  1725.                 
  1726.                 if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  1727.                 {
  1728.                     $error 'Enregistrement effectué';
  1729.                 } else {
  1730.                     echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  1731.                     $error 'Impossible d\'enregistrer l\'image';
  1732.                 }
  1733.                 $em->persist($photo);
  1734.                 $produit->setImagePrincipale($photo);
  1735.                 $em->flush();
  1736.                 $data = array(
  1737.                         'error' => '',
  1738.                         'message' => '',
  1739.                         
  1740.                     );
  1741.                         
  1742.                 $response = new JsonResponse;
  1743.                                         
  1744.                 $response $this->allowRemoteRequest($response);
  1745.                                         
  1746.                 $response->setContent(json_encode($data));
  1747.                         
  1748.                 return $response;
  1749.                 
  1750.             }
  1751.                 
  1752.             
  1753.         }
  1754.         return $this->render('api/modifier_produit.html.twig', [
  1755.             
  1756.         ]);
  1757.     }        
  1758.     
  1759.     //Produit/Service
  1760.     /**
  1761.      * @Route("/supprimer-produit/{idEntreprise}/{idProduit}", name="api_supprimer_photo")
  1762.      * @return \Symfony\Component\HttpFoundation\Response
  1763.      */
  1764.     public function supprimerProduitAction(Request $request$idEntreprise,  $idProduit)
  1765.     { 
  1766.         $em $this->getDoctrine()
  1767.                     ->getManager();
  1768.         $boutique $em->getRepository(Boutique::class)
  1769.                         ->findOneById($idEntreprise);
  1770.         
  1771.         $product $em->getRepository(Produit::class)
  1772.                         ->findOneBy(
  1773.                         array(
  1774.                             'boutique' => $boutique->getId(),
  1775.                             'id' => $idProduit
  1776.                         )
  1777.                         );
  1778.         if(null !== $product){
  1779.             //les auttres images
  1780.             foreach($product->getPhotos() as $photo){
  1781.                 $link substr($photo->getFullUrl(), 40); //taille de https://www.myhelpplace.com/uploads/img/
  1782.                 unlink($photo->getUploadRootDir().'/'.$link);
  1783.                 $em->remove($photo);
  1784.             }
  1785.             $em->flush();
  1786.             $em->remove($product);
  1787.             //Image principale
  1788.             if($product->getImagePrincipale() != null){
  1789.                 $link substr($product->getImagePrincipale()->getFullUrl(), 40); //taille de https://www.myhelpplace.com/uploads/img/
  1790.                 unlink($product->getImagePrincipale()->getUploadRootDir().'/'.$link);
  1791.                 
  1792.                 $em->remove($product->getImagePrincipale());
  1793.             }
  1794.         
  1795.             $em->flush();
  1796.         }
  1797.         $data = array(
  1798.                         'error' => '',
  1799.                         'message' => '',
  1800.                         
  1801.                     );
  1802.                         
  1803.                 $response = new JsonResponse;
  1804.                                         
  1805.                 $response $this->allowRemoteRequest($response);
  1806.                                         
  1807.                 $response->setContent(json_encode($data));
  1808.                         
  1809.                 return $response;
  1810.         return $this->redirectToRoute('gestion.products', array('slug' => $boutique->getSlug()));
  1811.     
  1812.     }
  1813.     /**
  1814.      * @Route("/offre-devis/{idUser}/{idEntreprise}", name="api_offre_devis")
  1815.      * @return \Symfony\Component\HttpFoundation\Response
  1816.      */
  1817.     public function offreDevisAction(Request $request$idUser,  $idEntreprise)
  1818.     {
  1819.               
  1820.         $em $this->getDoctrine()
  1821.                     ->getManager();
  1822.         
  1823.         $offreDevis $em->getRepository(OffreDevis::class)
  1824.                         ->offreDevisDUneEntreprise($idEntreprisetrue);
  1825.         /*        
  1826.         $devis = $em->getRepository(Devis::class)
  1827.                         ->findByCategorieEntreprise($boutique->getCategorieEntreprise());
  1828.         */
  1829.         $user $em->getRepository(AppUser::class)
  1830.                         ->findOneById($idUser);
  1831.         $notifications $em->getRepository(Notification::class)
  1832.                                         ->findBy(
  1833.                                             array(
  1834.                                             'user' => $user,
  1835.                                             'vu'  => false,
  1836.                                             'typeNotification' => 'devis'
  1837.                                             )
  1838.                                         );
  1839.         foreach($notifications as $notification){
  1840.             $notification->setVu(true);
  1841.         }
  1842.         $em->flush();
  1843.         
  1844.         $data = array(
  1845.                         'error' => '',
  1846.                         'message' => '',
  1847.                         'offreDevis' => $offreDevis
  1848.                         
  1849.                     );
  1850.                         
  1851.         $response = new JsonResponse;
  1852.                                         
  1853.         $response $this->allowRemoteRequest($response);
  1854.                                         
  1855.         $response->setContent(json_encode($data));
  1856.                         
  1857.         return $response;
  1858.         return $this->render('gestion/proposals.html.twig', [
  1859.            'offreDevis' => $offreDevis,
  1860.         ]);
  1861.         
  1862.     }
  1863.     /**
  1864.      * @Route("/avis-utilisateur/{idUser}/{idEntreprise}", name="api_avis_utilisateur")
  1865.      */
  1866.     public function avisUtilisateurAction(Request $request$idUser$idEntreprise)
  1867.     {
  1868.         $em $this->getDoctrine()->getManager();
  1869.         $user $em->getRepository(AppUser::class)
  1870.                         ->findOneById($idUser);
  1871.         $avisUtilisateurs $em->getRepository(AvisUtilisateur::class)
  1872.                         ->avisEntreprise($idEntreprisetrue);
  1873.         $notifications $em->getRepository(Notification::class)
  1874.                                         ->findBy(
  1875.                                             array(
  1876.                                             'user' => $user,
  1877.                                             'vu'  => false,
  1878.                                             'typeNotification' => 'avis'
  1879.                                             )
  1880.                                         );
  1881.         foreach($notifications as $notification){
  1882.             $notification->setVu(true);
  1883.         }
  1884.         $em->flush();
  1885.         $data = array(
  1886.                         'error' => '',
  1887.                         'message' => '',
  1888.                         'avisUtilisateurs' => $avisUtilisateurs
  1889.                         
  1890.                     );
  1891.                         
  1892.         $response = new JsonResponse;
  1893.                                         
  1894.         $response $this->allowRemoteRequest($response);
  1895.                                         
  1896.         $response->setContent(json_encode($data));
  1897.                         
  1898.         return $response;
  1899.           return $this->render('gestion/reviews.html.twig', [
  1900.           'reviews' => $reviews,
  1901.           'boutique' => $boutique
  1902.         ]);
  1903.         
  1904.     }
  1905.     /**
  1906.      * @Route("/messages/{idUser}/{idEntreprise}", name="api_messages")
  1907.      */
  1908.     public function messagesAction(Request $request$idUser,  $idEntreprise)
  1909.     {
  1910.         $em $this->getDoctrine()->getManager();
  1911.         
  1912.         $conversations $em->getRepository(Conversation::class)
  1913.                         ->conversationsDUneEntreprise($idEntreprisetrue);
  1914.         
  1915.         $data = array(
  1916.                         'error' => '',
  1917.                         'message' => '',
  1918.                         'conversations' => $conversations
  1919.                         
  1920.                     );
  1921.                         
  1922.         $response = new JsonResponse;
  1923.                                         
  1924.         $response $this->allowRemoteRequest($response);
  1925.                                         
  1926.         $response->setContent(json_encode($data));
  1927.                         
  1928.         return $response;
  1929.         
  1930.     
  1931.         return $this->render('gestion/messages.html.twig', [
  1932.           'conversations' => $conversations,
  1933.           'boutique' => $boutique
  1934.         ]);
  1935.         
  1936.     }
  1937.     /**
  1938.      * @Route("/conversation/{idConversation}/{idUser}/{idEntreprise}", name="api_une_conversation")
  1939.      */
  1940.     public function uneConversationAction(Request $request$idConversation$idUser$idEntreprise)
  1941.     {
  1942.         $em $this->getDoctrine()->getManager();
  1943.         
  1944.         $boutique $em->getRepository(Boutique::class)
  1945.                         ->findOneById($idEntreprise);
  1946.         $user $em->getRepository(AppUser::class)
  1947.                         ->findOneById($idUser);
  1948.         $notifications $em->getRepository(Notification::class)
  1949.                                         ->findBy(
  1950.                                             array(
  1951.                                             'user' => $user,
  1952.                                             'vu'  => false,
  1953.                                             'typeNotification' => 'message',
  1954.                                             'extraData' => $idConversation
  1955.                                             )
  1956.                                         );
  1957.         foreach($notifications as $notification){
  1958.             $notification->setVu(true);
  1959.         }
  1960.         $em->flush();
  1961.         
  1962.         $conversation $em->getRepository(Conversation::class)
  1963.                         ->findOneById($idConversation);
  1964.                         
  1965.         if($request->getMethod() == 'POST'){
  1966.             $formData json_decode($request->getContent());
  1967.             $reponseMessage $formData->message;
  1968.             //$reponseMessage = $request->request->get('message');
  1969.             
  1970.             $message = new Message;
  1971.             $message->setContenu($reponseMessage);
  1972.             $message->setConversation($conversation);
  1973.             $message->setUser($user);
  1974.             $em->persist($message);
  1975.             $em->flush();
  1976.             
  1977.             $notification = new Notification;
  1978.             $notification->setUser($conversation->getUser());
  1979.             $lien =  $this->generateUrl('profile.one_conversation', array('slug'=>$conversation->getBoutique()->getSlug(), 'id' => $conversation->getId()));
  1980.             $notification->setExtraData($conversation->getId());
  1981.             $notification->setLien($lien);
  1982.             $notification->setTypeNotification('message');
  1983.             $notification->setDescription('Vous avez un nouveau message');
  1984.             
  1985.             $conversation->setLastMessage($reponseMessage);
  1986.         
  1987.             $em->persist($notification);
  1988.             $em->flush();    
  1989.             
  1990.         }
  1991.         
  1992.         $messages $em->getRepository(Message::class)
  1993.                     ->messageDUneConversation($idConversationtrue);
  1994.         $uneConversation $em->getRepository(Conversation::class)
  1995.                                         ->uneConversationsDUneEntreprise($idEntreprise$idConversationtrue);
  1996.             $data = array(
  1997.                         'error' => '',
  1998.                         'message' => '',
  1999.                         'messages' => $messages,
  2000.                         'conversation' => $uneConversation[0]
  2001.                         
  2002.                     );
  2003.                         
  2004.             $response = new JsonResponse;
  2005.                                         
  2006.             $response $this->allowRemoteRequest($response);
  2007.                                         
  2008.             $response->setContent(json_encode($data));
  2009.                         
  2010.             return $response;
  2011.     
  2012.           return $this->render('api/one_conversation.html.twig', [
  2013.           'conversation' => $conversation,
  2014.           'boutique' => $boutique,
  2015.           'messages' => $messages
  2016.         ]);
  2017.     }
  2018.     /**
  2019.      * @Route("/tickets/{idUser}/{idEntreprise}", name="api_tickets")
  2020.      */
  2021.     public function ticketsAction(Request $request$idUser,  $idEntreprise)
  2022.     {
  2023.         $em $this->getDoctrine()->getManager();
  2024.         
  2025.         $tickets $em->getRepository(Ticket::class)
  2026.                         ->ticketDUneEntreprise($idEntreprisetrue);
  2027.         
  2028.         $data = array(
  2029.                         'error' => '',
  2030.                         'message' => '',
  2031.                         'tickets' => $tickets
  2032.                         
  2033.                     );
  2034.                         
  2035.             $response = new JsonResponse;
  2036.                                         
  2037.             $response $this->allowRemoteRequest($response);
  2038.                                         
  2039.             $response->setContent(json_encode($data));
  2040.                         
  2041.         return $response;
  2042.         return $this->render('gestion/tickets.html.twig', [
  2043.           'tickets' => $tickets,
  2044.           'boutique' => $boutique
  2045.         ]);
  2046.         
  2047.     }
  2048.     /**
  2049.      * @Route("/nouveau-ticket/{idUser}/{idEntreprise}", name="api_nouveau_ticket")
  2050.      * @return \Symfony\Component\HttpFoundation\Response
  2051.      */
  2052.     public function nouveauTicketAction(Request $request$idUser$idEntreprise)
  2053.     {
  2054.         $em $this->getDoctrine()
  2055.                     ->getManager();
  2056.                     
  2057.         $boutique $em->getRepository(Boutique::class)
  2058.                         ->findOneById($idEntreprise);
  2059.         $user $em->getRepository(AppUser::class)
  2060.                         ->findOneById($idUser);
  2061.         
  2062.         $ticket = new Ticket;
  2063.         $userBoutique $em->getRepository(UserBoutique::class)
  2064.                         ->findOneBy(
  2065.                             array(
  2066.                             'user' => $user->getId(),
  2067.                             'boutique' => $boutique->getId()
  2068.                             )
  2069.                         );
  2070.         
  2071.         $ok_soumission '';
  2072.         $error '';
  2073.         $message '';
  2074.         
  2075.         if($request->getMethod() == 'POST'){
  2076.             $formData json_decode($request->getContent());
  2077.             $titre $formData->titre;
  2078.             //$titre = $request->request->get('titre');
  2079.             $message $formData->message;
  2080.             //$message = $request->request->get('message');
  2081.             
  2082.         
  2083.             $ticket->setBoutique($boutique);
  2084.             $ticket->setTitre($titre);
  2085.             $ticket->setContenu($message);
  2086.             $ticket->setUser($user);
  2087.                    
  2088.             $em->persist($ticket);
  2089.             $em->flush();
  2090.             $data = array(
  2091.                         'error' => '',
  2092.                         'message' => '',
  2093.                         
  2094.                     );
  2095.                         
  2096.             $response = new JsonResponse;
  2097.                                         
  2098.             $response $this->allowRemoteRequest($response);
  2099.                                         
  2100.             $response->setContent(json_encode($data));
  2101.                         
  2102.             return $response;
  2103.                   
  2104.                 return $this->redirectToRoute('gestion.display_ticket', array('slug' => $boutique->getSlug(), 'id' => $ticket->getId()));
  2105.                 $ok_soumission =" Votre message a été pris en compte";
  2106.                     
  2107.         }
  2108.         
  2109.         return $this->render('gestion/api.html.twig', [
  2110.            'boutique' => $boutique,
  2111.            'form' => $form->createView(),
  2112.            'userBoutique' => $userBoutique
  2113.         ]);
  2114.     }
  2115.     /**
  2116.      * @Route("/ticket/{idTicket}/{idUser}/{idEntreprise}", name="api_ticket")
  2117.      * @return \Symfony\Component\HttpFoundation\Response
  2118.      */
  2119.     public function ticketAction(Request $request$idTicket$idUser$idEntreprise)
  2120.     {
  2121.         $em $this->getDoctrine()
  2122.                     ->getManager();
  2123.                     
  2124.         $boutique $em->getRepository(Boutique::class)
  2125.                         ->findOneById($idEntreprise);
  2126.         $user $em->getRepository(AppUser::class)
  2127.                         ->findOneById($idUser);
  2128.         
  2129.         $userBoutique $em->getRepository(UserBoutique::class)
  2130.                         ->findOneBy(
  2131.                             array(
  2132.                             'user' => $user->getId(),
  2133.                             'boutique' => $boutique->getId()
  2134.                             )
  2135.                         );
  2136.         
  2137.         $ticket $em->getRepository(Ticket::class)
  2138.                     ->findOneBy(
  2139.                         array(
  2140.                             'boutique' => $boutique->getId(),
  2141.                             'id' => $idTicket
  2142.                         )
  2143.                     );
  2144.         
  2145.     
  2146.         $ok_soumission '';
  2147.         $error '';
  2148.         $message '';
  2149.         
  2150.         if($request->getMethod() == 'POST'){
  2151.         if($ticket->getLesCommentairesSontFermes()){
  2152.             $message ' les commentaire sont fermés';
  2153.             $error 'error';
  2154.         }else{
  2155.             $formData json_decode($request->getContent());
  2156.             $commentaire $formData->commentaire;
  2157.             //$commentaire = $request->request->get('commentaire');
  2158.                 $commentaireTicket = new CommentaireTicket;
  2159.                 $commentaireTicket->setContenu($commentaire);
  2160.                 $commentaireTicket->setTicket($ticket);
  2161.                 $commentaireTicket->setUser($user);
  2162.                    
  2163.                   $em->persist($commentaireTicket);
  2164.                   $em->flush();
  2165.                 $message =" Votre message a été pris en compte";
  2166.         }
  2167.             
  2168.         }
  2169.         $commentaires $em->getRepository(CommentaireTicket::class)
  2170.                             ->commentairesDUnTicket($idTickettrue);
  2171.         $unTicket $em->getRepository(Ticket::class)
  2172.                             ->unTicket($idTickettrue);
  2173.         $data = array(
  2174.                 'error' => '',
  2175.                 'message' => '',
  2176.                 'ticket' => $unTicket[0],
  2177.                 'commentaires' => $commentaires
  2178.             );
  2179.                         
  2180.         $response = new JsonResponse;
  2181.                                             
  2182.         $response $this->allowRemoteRequest($response);
  2183.                                             
  2184.         $response->setContent(json_encode($data));
  2185.                             
  2186.         return $response;
  2187.         
  2188.         return $this->render('api/ticket.html.twig', [
  2189.           
  2190.         ]);
  2191.     }
  2192.     /**
  2193.      * @Route("/fermer-ticket/{idTicket}", name="api_fermer_ticket")
  2194.      * @return \Symfony\Component\HttpFoundation\Response
  2195.      */
  2196.     public function fermerTicketAction(Request $request$idTicket)
  2197.     {
  2198.         $em $this->getDoctrine()
  2199.                     ->getManager();
  2200.         
  2201.         $ticket $em->getRepository(Ticket::class)
  2202.                     ->findOneBy(
  2203.                         array(
  2204.                             'id' => $idTicket
  2205.                         )
  2206.                     );
  2207.         
  2208.         if(null !== $ticket){
  2209.             $ticket->setLesCommentairesSontFermes(true);
  2210.             $em->flush();
  2211.         }
  2212.         $data = array(
  2213.                 'error' => '',
  2214.                 'message' => ''
  2215.             );
  2216.                         
  2217.         $response = new JsonResponse;
  2218.                                             
  2219.         $response $this->allowRemoteRequest($response);
  2220.                                             
  2221.         $response->setContent(json_encode($data));
  2222.                             
  2223.         return $response;
  2224.         
  2225.         return $this->redirectToRoute('gestion.display_ticket',array('slug'=>$boutique->getSlug(), 'id'=>$ticket->getId()));
  2226.     }
  2227.     /**
  2228.      * @Route("/supprimer-ticket/{idTicket}", name="api_supprimer_ticket")
  2229.      * @return \Symfony\Component\HttpFoundation\Response
  2230.      */
  2231.     public function supprimerTicketAction(Request $request$idTicket)
  2232.     {
  2233.         $em $this->getDoctrine()
  2234.                     ->getManager();
  2235.                     
  2236.         
  2237.         $user $this->getUser();
  2238.         
  2239.         $ok_soumission '';
  2240.         $error '';
  2241.         
  2242.         $ticket $em->getRepository(Ticket::class)
  2243.                     ->findOneBy(
  2244.                         array(
  2245.                             'id' => $idTicket
  2246.                         )
  2247.                     );
  2248.         if(null !== $ticket){
  2249.             $commentaireTickets $em->getRepository(CommentaireTicket::class)
  2250.                                     ->findByTicket($ticket->getId());
  2251.             foreach($commentaireTickets as $commentaireTicket)
  2252.             {
  2253.                 $em->remove($commentaireTicket);
  2254.             }
  2255.             $em->remove($ticket);
  2256.             $em->flush();
  2257.         }
  2258.         $data = array(
  2259.                 'error' => '',
  2260.                 'message' => ''
  2261.             );
  2262.                         
  2263.         $response = new JsonResponse;
  2264.                                             
  2265.         $response $this->allowRemoteRequest($response);
  2266.                                             
  2267.         $response->setContent(json_encode($data));
  2268.                             
  2269.         return $response;
  2270.         
  2271.         return $this->redirectToRoute('gestion.tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  2272.     }
  2273.     
  2274.     /**
  2275.      * @Route("/mon-profil/info/{idUser}", name="api_mon_profil_info")
  2276.      * @return \Symfony\Component\HttpFoundation\Response
  2277.      */
  2278.     public function monProfilInfoAction(Request $request$idUser)
  2279.     {
  2280.         $em $this->getDoctrine()
  2281.                     ->getManager();
  2282.                     
  2283.         
  2284.         $user =  $em->getRepository(AppUser::class)
  2285.                     ->findOneBy(
  2286.                         array(
  2287.                             'id' => $idUser
  2288.                         )
  2289.                     );
  2290.         $ok_soumission '';
  2291.         $error '';
  2292.         $message '';
  2293.         if($request->getMethod() == 'POST'){
  2294.             $formData json_decode($request->getContent());
  2295.             $nom $formData->nom;
  2296.             //$nom = $request->request->get('nom');
  2297.             $avatarFileName $formData->avatarFileName;
  2298.             //$avatarFileName = $request->request->get('avatarFileName');
  2299.             $prenom $formData->prenom;
  2300.             //$prenom = $request->request->get('prenom');
  2301.             
  2302.             $telephone $formData->telephone;
  2303.             //$telephone = $request->request->get('telephone');
  2304.             $adresse $formData->adresse;
  2305.             //$adresse = $request->request->get('adresse');
  2306.             $email $formData->email;
  2307.             //$email = $request->request->get('email');
  2308.             $user->setNom($nom);
  2309.             $user->setPrenom($prenom);
  2310.             $user->setTelephone($telephone);
  2311.             $user->setAdresse($adresse);
  2312.             $user->setEmail($email);
  2313.             $em->flush();
  2314.             $imageParts explode(';base64,'$formData->avatar);
  2315.             
  2316.             $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  2317.                         
  2318.             $imageDecoded base64_decode($imageBase64);
  2319.             $photo = new Photo;
  2320.                 
  2321.             $ex pathinfo($avatarFileNamePATHINFO_EXTENSION); 
  2322.             $exA = array('jpg''jpeg''png''gif''jfif');
  2323.                 
  2324.             if (in_array(strtolower($ex), $exA)){
  2325.                 
  2326.                 $photo->setExtension($ex);
  2327.             } else {
  2328.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  2329.             }
  2330.                 
  2331.             $name $user->getId().time();
  2332.             $namePourRepertoire $name;
  2333.             //hydratation des attributs de l'objet
  2334.             $photo->setUrl($name.'.'.$photo->getExtension());
  2335.             $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  2336.                         
  2337.             $extension $photo->getExtension();
  2338.                         
  2339.                 
  2340.             if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  2341.             {
  2342.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  2343.             }
  2344.                 
  2345.             if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  2346.             {
  2347.                 $error 'Enregistrement effectué';
  2348.                 $em->persist($photo);
  2349.                 $em->flush();
  2350.                 $user->setAvatar($photo);
  2351.             } else {
  2352.                 echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  2353.                 $error 'Impossible d\'enregistrer l\'image';
  2354.             }
  2355.             $em->flush();
  2356.                         
  2357.         }
  2358.         $user =  $em->getRepository(AppUser::class)
  2359.                     ->findOneBy(
  2360.                         array(
  2361.                             'id' => $idUser
  2362.                         )
  2363.                     );
  2364.         $unUser $em->getRepository(AppUser::class)
  2365.                         ->findOneByUniqueId($idUsertrue);
  2366.         $unUser $unUser[0];
  2367.         unset($unUser['password']);
  2368.             $data = array(
  2369.                 'error' => '',
  2370.                 'message' => '',
  2371.                 'user' => $unUser
  2372.             );
  2373.         $response = new JsonResponse;
  2374.                                                 
  2375.         $response $this->allowRemoteRequest($response);
  2376.                                                 
  2377.         $response->setContent(json_encode($data));
  2378.                                 
  2379.         return $response;
  2380.         return $this->render('api/mon_profil.html.twig', [
  2381.           'user' => $user
  2382.         ]);
  2383.         
  2384.         return $this->redirectToRoute('gestion.tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  2385.     }
  2386.     
  2387.     /**
  2388.      * @Route("/mon-profil/changer-mot-de-passe/{idUser}", name="api_mon_profil_changer_mot_de_passe")
  2389.      * @return \Symfony\Component\HttpFoundation\Response
  2390.      */
  2391.     public function changerMotDePasseAction(Request $requestUserPasswordHasherInterface $passwordHasherAuthenticationUtils $authenticationUtils,  $idUser)
  2392.     {
  2393.         $em $this->getDoctrine()
  2394.                     ->getManager();
  2395.                     
  2396.         
  2397.         $user =  $em->getRepository(AppUser::class)
  2398.                     ->findOneBy(
  2399.                         array(
  2400.                             'id' => $idUser
  2401.                         )
  2402.                     );
  2403.         $ok_soumission '';
  2404.         $error '';
  2405.         $message '';
  2406.         if($request->getMethod() == 'POST'){
  2407.             $formData json_decode($request->getContent());
  2408.             $ancienMotDePasse $formData->ancienMotDePasse;
  2409.             //$ancienMotDePasse = $request->request->get('ancienMotDePasse');
  2410.             $password1 $formData->password1;
  2411.             //$password1 = $request->request->get('password1');
  2412.             $password2 $formData->password2;
  2413.             //$password2 = $request->request->get('password2');
  2414.             if(!$passwordHasher->isPasswordValid($user$ancienMotDePasse)) {
  2415.                 $error 'error';
  2416.                 $message 'Mot de passe incorrect';
  2417.             }else{
  2418.                 if($password1 != $password2){
  2419.                     $error 'error';
  2420.                     $message 'Les mots de passes ne correspondent pas';
  2421.                 }else{
  2422.                     //
  2423.                     $hashedPassword $passwordHasher->hashPassword($user$password1);
  2424.                     $user->setPassword($hashedPassword);
  2425.                     $em->flush();
  2426.                     $error '';
  2427.                     $message 'Mot de passe mis à jour';
  2428.                 }
  2429.             }
  2430.             $unUser $em->getRepository(AppUser::class)
  2431.                         ->findOneByUniqueId($idUsertrue);
  2432.             $unUser $unUser[0];
  2433.             unset($unUser['password']);
  2434.                 $data = array(
  2435.                     'error' => $error,
  2436.                     'message' => $message,
  2437.                     'user' => $unUser
  2438.                 );
  2439.             $response = new JsonResponse;
  2440.                                                     
  2441.             $response $this->allowRemoteRequest($response);
  2442.                                                     
  2443.             $response->setContent(json_encode($data));
  2444.                                     
  2445.             return $response;
  2446.                         
  2447.         }
  2448.         
  2449.         return $this->render('api/changer_mot_de_passe.html.twig', [
  2450.           'user' => $user
  2451.         ]);
  2452.         
  2453.         return $this->redirectToRoute('gestion.tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
  2454.     }
  2455.     /**
  2456.      * @Route("/mon-profil/piece-d-identite/{idUser}", name="api_mon_profil_piece_d_identite")
  2457.      * @return \Symfony\Component\HttpFoundation\Response
  2458.      */
  2459.     public function pieceDIdentiteAction(Request $request$idUser)
  2460.     {
  2461.         
  2462.         $em $this->getDoctrine()
  2463.                     ->getManager();
  2464.         $message '';
  2465.         $error '';
  2466.         $user $em->getRepository(AppUser::class)
  2467.                     ->findOneById($idUser);
  2468.         if($request->getMethod() == 'POST'){
  2469.             $formData json_decode($request->getContent());
  2470.             
  2471.             $pieceDIdentiteRecto $formData->pieceDIdentiteRecto;
  2472.             $pieceDIdentiteRectoFileName $formData->pieceDIdentiteRectoFileName;
  2473.             $pieceDIdentiteVerso $formData->pieceDIdentiteVerso;
  2474.             $pieceDIdentiteVersoFileName $formData->pieceDIdentiteVersoFileName;
  2475.             //Traitement des pièces d'identité Recto
  2476.                         
  2477.                         $imageParts explode(';base64,'$formData->pieceDIdentiteRecto);
  2478.             
  2479.                         $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  2480.                         
  2481.                         $imageDecoded base64_decode($imageBase64);
  2482.                         $photo = new ProductPhoto;
  2483.                 
  2484.                         $ex pathinfo($pieceDIdentiteRectoFileNamePATHINFO_EXTENSION); 
  2485.                         $exA = array('jpg''jpeg''png''gif''jfif''pdf');
  2486.                 
  2487.                         if (in_array(strtolower($ex), $exA)){
  2488.                 
  2489.                             $photo->setExtension($ex);
  2490.                         } else {
  2491.                             throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  2492.                         }
  2493.                 
  2494.                         $name $user->getId().time();
  2495.                         $namePourRepertoire $name;
  2496.                         //hydratation des attributs de l'objet
  2497.                         $photo->setUrl($name.'.'.$photo->getExtension());
  2498.                         $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  2499.                         
  2500.                         $extension $photo->getExtension();
  2501.                         
  2502.                 
  2503.                         if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  2504.                         {
  2505.                             throw new \RuntimeException('Impossible de créer le dossier de destination');
  2506.                         }
  2507.                 
  2508.                         if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  2509.                         {
  2510.                             $error 'Enregistrement effectué';
  2511.                             $user->setPieceDIdentiteRecto($photo->getFullUrl());
  2512.                         } else {
  2513.                             echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  2514.                             $error 'Impossible d\'enregistrer l\'image';
  2515.                         }
  2516.                         
  2517.                         //Traitement verso
  2518.                         
  2519.                         
  2520.                         $imageParts explode(';base64,'$formData->pieceDIdentiteVerso);
  2521.             
  2522.                         $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  2523.                         
  2524.                         $imageDecoded base64_decode($imageBase64);
  2525.                         $photo = new ProductPhoto;
  2526.                 
  2527.                         $ex pathinfo($pieceDIdentiteVersoFileNamePATHINFO_EXTENSION); 
  2528.                         $exA = array('jpg''jpeg''png''gif''jfif''pdf');
  2529.                 
  2530.                         if (in_array(strtolower($ex), $exA)){
  2531.                 
  2532.                             $photo->setExtension($ex);
  2533.                         } else {
  2534.                             throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  2535.                         }
  2536.                 
  2537.                         $name $user->getId().time().'0';
  2538.                         $namePourRepertoire $name;
  2539.                         //hydratation des attributs de l'objet
  2540.                         $photo->setUrl($name.'.'.$photo->getExtension());
  2541.                         $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  2542.                         
  2543.                         $extension $photo->getExtension();
  2544.                         
  2545.                 
  2546.                         if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  2547.                         {
  2548.                             throw new \RuntimeException('Impossible de créer le dossier de destination');
  2549.                         }
  2550.                 
  2551.                         if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  2552.                         {
  2553.                             $error 'Enregistrement effectué';
  2554.                             $user->setPieceDIdentiteVerso($photo->getFullUrl());
  2555.                         } else {
  2556.                             echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  2557.                             $error 'Impossible d\'enregistrer l\'image';
  2558.                         }
  2559.                         
  2560.                         $em->flush();
  2561.                         //Fin traitement pièce d'identité
  2562.                 
  2563.                $error '';
  2564.                         $message 'Enregistrement effecuté';
  2565.                         $userNouvellementCree $em->getRepository(AppUser::class)
  2566.                                                     ->findOneByUniqueId($user->getId(), true);
  2567.                         $userNouvellementCree $userNouvellementCree[0];
  2568.                         unset($userNouvellementCree['password']);
  2569.                         $data = array(
  2570.                             'error' => $error,
  2571.                             'user' => $userNouvellementCree,
  2572.                             'message' => $message
  2573.                         );
  2574.                     
  2575.                         
  2576.                         $response = new JsonResponse;
  2577.                         
  2578.                         $response $this->allowRemoteRequest($response);
  2579.                         
  2580.                         $response->setContent(json_encode($data));
  2581.                         return $response;
  2582.                             
  2583.                         return $this->redirectToRoute('registration_confirmed', array('username' => $user->getUsername()));           
  2584.         }
  2585.         
  2586.         return $this->render('api/creer_compte_pro.html.twig', [
  2587.         
  2588.         ]);      
  2589.     }
  2590.     /**
  2591.      * @Route("/un-devis/envoyer-proof-of-work/{idDevis}", name="api_envoyer_proof_of_work")
  2592.      * @return \Symfony\Component\HttpFoundation\Response
  2593.      */
  2594.     public function envoyerProofOfWorkAction(Request $request$idDevis)
  2595.     {
  2596.       
  2597.         $em $this->getDoctrine()
  2598.                     ->getManager();
  2599.         $message '';
  2600.         $error '';
  2601.         
  2602.         $devis $em->getRepository(Devis::class)
  2603.                         ->findOneById($idDevis);
  2604.         if($request->getMethod() == 'POST'){
  2605.             $formData json_decode($request->getContent());
  2606.             
  2607.             $proofOfWork $formData->proofOfWork;
  2608.             $proofOfWorkFileName $formData->proofOfWorkFileName;
  2609.             //Traitement des pièces d'identité Recto
  2610.                         
  2611.             $imageParts explode(';base64,'$formData->proofOfWork);
  2612.             $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  2613.             $imageDecoded base64_decode($imageBase64);
  2614.             
  2615.             $photo = new Photo;
  2616.                 
  2617.             $ex pathinfo($proofOfWorkFileNamePATHINFO_EXTENSION); 
  2618.             $exA = array('jpg''jpeg''png''gif''jfif');
  2619.                 
  2620.             if (in_array(strtolower($ex), $exA)){
  2621.                 
  2622.                 $photo->setExtension($ex);
  2623.             } else {
  2624.                 throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  2625.             }
  2626.                 
  2627.             $name $devis->getId().time();
  2628.             $namePourRepertoire $name;
  2629.                         //hydratation des attributs de l'objet
  2630.             $photo->setUrl($name.'.'.$photo->getExtension());
  2631.             $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  2632.                         
  2633.             $extension $photo->getExtension();
  2634.             if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  2635.             {
  2636.                 throw new \RuntimeException('Impossible de créer le dossier de destination');
  2637.             }
  2638.                 
  2639.             if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  2640.             {
  2641.                 $message 'Enregistrement effectué';
  2642.                 $error '';
  2643.                 $em->persist($photo);
  2644.                 $em->flush();
  2645.                 $devis->setProofOfWork($photo);
  2646.                 $em->flush();
  2647.             } else {
  2648.                     echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  2649.                     $error 'Impossible d\'enregistrer l\'image';
  2650.             }
  2651.             $unDevis $em->getRepository(Devis::class)
  2652.                             ->unDevis($idDevistrue);
  2653.             $unDevis $unDevis[0];
  2654.             $data = array(
  2655.                 'error' => $error,
  2656.                 'devis' => $unDevis,
  2657.                 'message' => $message
  2658.             );
  2659.                     
  2660.                         
  2661.             $response = new JsonResponse;
  2662.                         
  2663.             $response $this->allowRemoteRequest($response);
  2664.                         
  2665.             $response->setContent(json_encode($data));
  2666.             return $response;
  2667.                             
  2668.             return $this->redirectToRoute('registration_confirmed', array('username' => $user->getUsername()));           
  2669.         }
  2670.         
  2671.         return $this->render('api/proof_of_work.html.twig', [
  2672.         
  2673.         ]);      
  2674.     }
  2675.     /**
  2676.      * @Route("/un-devis/consulter-proof-of-work/{idDevis}", name="api_consulter_proof_of_work")
  2677.      * @return \Symfony\Component\HttpFoundation\Response
  2678.      */
  2679.     public function consulterProofOfWorkAction(Request $request$idDevis)
  2680.     {
  2681.       
  2682.         $em $this->getDoctrine()
  2683.                     ->getManager();
  2684.         $message '';
  2685.         $error '';
  2686.         
  2687.         $devis $em->getRepository(Devis::class)
  2688.                         ->findOneById($idDevis);
  2689.         $unDevis $em->getRepository(Devis::class)
  2690.                             ->unDevis($idDevistrue);
  2691.             $unDevis $unDevis[0];
  2692.             $data = array(
  2693.                 'error' => $error,
  2694.                 'devis' => $unDevis,
  2695.                 'message' => $message
  2696.             );
  2697.                             
  2698.             $response = new JsonResponse;
  2699.                         
  2700.             $response $this->allowRemoteRequest($response);
  2701.                         
  2702.             $response->setContent(json_encode($data));
  2703.             return $response;
  2704.         return $this->render('api/proof_of_work.html.twig', [
  2705.         
  2706.         ]);      
  2707.     }
  2708.     /**
  2709.      * @Route("/envoi-sms-pro", name="api_envoi_sms_pro")
  2710.      */
  2711.     public function envoiSMSProAction(Request $request)
  2712.     {
  2713.         $em $this->getDoctrine()->getManager();
  2714.     
  2715.     
  2716.                         
  2717.         if($request->getMethod() == 'POST'){
  2718.             $formData json_decode($request->getContent());
  2719.             //$code = $formData->code;
  2720.             $code $request->request->get('code');
  2721.             //$numero = $formData->numero;
  2722.             $numero $request->request->get('numero');
  2723.             //$message = $formData->message;
  2724.             $message $request->request->get('message');
  2725.             
  2726.             $msdn $code.$numero;
  2727.             $content = array(
  2728.                 'recipient' => $msdn,
  2729.                 'sender_id'=> 'SolutionsIT',
  2730.                 'message' => $message
  2731.             );
  2732.             $content json_encode($content);
  2733.             
  2734.             $ch curl_init('https://panel.yellikasms.com/api/v3/sms/send');
  2735.             $yelliAPI $this->getYelliAPIKey();
  2736.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  2737.             curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$yelliAPI]);
  2738.             curl_setopt($chCURLOPT_POSTFIELDS$content);
  2739.             $serverOutput curl_exec($ch);
  2740.             curl_close($ch);
  2741.             
  2742.             $serverOutput json_decode($serverOutputtrue);
  2743.             
  2744.         }
  2745.         
  2746.         
  2747.             $data = array(
  2748.                         'error' => '',
  2749.                         'message' => '',
  2750.                         
  2751.                     );
  2752.                         
  2753.             $response = new JsonResponse;
  2754.                                         
  2755.             $response $this->allowRemoteRequest($response);
  2756.                                         
  2757.             $response->setContent(json_encode($data));
  2758.                         
  2759.             //return $response;
  2760.     
  2761.           return $this->render('api/envoi_sms_pro.html.twig', [
  2762.         ]);
  2763.     }
  2764.     
  2765.         
  2766.     
  2767.     /**
  2768.      * @Route("/otp/send", name="api_otp_send")
  2769.      */
  2770.     public function otpSendAction(Request $request)
  2771.     {
  2772.         $em $this->getDoctrine()->getManager();
  2773.     
  2774.     
  2775.         $error '';
  2776.         $message '';    
  2777.         if($request->getMethod() == 'POST'){
  2778.             $formData json_decode($request->getContent());
  2779.             $code $formData->code;
  2780.             //$code = $request->request->get('code');
  2781.             $numero $formData->numero;
  2782.             //$numero = $request->request->get('numero');
  2783.             $msdn $code.$numero;
  2784.             $otp random_int(100000999999);
  2785.             
  2786.             $oTPConfirmation = new OTPConfirmation;
  2787.             $oTPConfirmation->setNumero($msdn);
  2788.             $oTPConfirmation->setCodeConfirmation($otp);
  2789.             $oTPConfirmation->setLaDate(time());
  2790.             
  2791.             $em->persist($oTPConfirmation);
  2792.             $em->flush();
  2793.             
  2794.             $content = array(
  2795.                 'recipient' => $msdn,
  2796.                 'sender_id'=> $this->getYelliSenderId(),
  2797.                 'message' => ''.$otp.''
  2798.             );
  2799.             $content json_encode($content);
  2800.             
  2801.             $ch curl_init('https://panel.yellikasms.com/api/v3/sms/send');
  2802.             $yelliAPI $this->getYelliAPIKey();
  2803.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  2804.             curl_setopt($chCURLOPT_HTTPHEADER, ['Content-Type: application/json''Authorization: Bearer '.$yelliAPI]);
  2805.             curl_setopt($chCURLOPT_POSTFIELDS$content);
  2806.             $serverOutput curl_exec($ch);
  2807.             curl_close($ch);
  2808.             
  2809.             $serverOutput json_decode($serverOutputtrue);
  2810.             $message 'Code envoyé';
  2811.             $error '';
  2812.             
  2813.         }
  2814.         
  2815.         
  2816.             $data = array(
  2817.                         'error' => $error,
  2818.                         'message' => $message,
  2819.                         
  2820.                     );
  2821.                         
  2822.             $response = new JsonResponse;
  2823.                                         
  2824.             $response $this->allowRemoteRequest($response);
  2825.                                         
  2826.             $response->setContent(json_encode($data));
  2827.                         
  2828.             //return $response;
  2829.     
  2830.           return $this->render('api/send_otp.html.twig', [
  2831.         ]);
  2832.     }
  2833.     /**
  2834.      * @Route("/otp/verify", name="api_otp_verify")
  2835.      */
  2836.     public function otpVerifyAction(Request $request)
  2837.     {
  2838.         $em $this->getDoctrine()->getManager();
  2839.     
  2840.     
  2841.         $error '';
  2842.         $message '';    
  2843.         if($request->getMethod() == 'POST'){
  2844.             $formData json_decode($request->getContent());
  2845.             $otp $formData->otp;
  2846.             //$otp = $request->request->get('otp');
  2847.             $code $formData->code;
  2848.             //$code = $request->request->get('code');
  2849.             $numero $formData->numero;
  2850.             //$numero = $request->request->get('numero');
  2851.             $msdn $code.$numero;
  2852.             $oTPConfirmation $em->getRepository(OTPConfirmation::class)
  2853.             ->findOneByCodeConfirmation($otp);
  2854.             if($oTPConfirmation == null ){
  2855.                 $error 'error';
  2856.                 $message 'Code erroné';    
  2857.             } else{
  2858.                 $cinqMin 60 5;
  2859.                 $tempsEcoule time() -  $oTPConfirmation->getLaDate();
  2860.                 
  2861.                 if($oTPConfirmation->getNumero() != $msdn || $tempsEcoule $cinqMin){
  2862.                     $error 'error';
  2863.                     $message 'Code erroné';    
  2864.                 }else{
  2865.                     $error '';
  2866.                     $message 'Code correct';    
  2867.                 }
  2868.             }
  2869.             $data = array(
  2870.                         'error' => $error,
  2871.                         'message' => $message,
  2872.                         
  2873.                     );
  2874.                         
  2875.             $response = new JsonResponse;
  2876.                                         
  2877.             $response $this->allowRemoteRequest($response);
  2878.                                         
  2879.             $response->setContent(json_encode($data));
  2880.                         
  2881.             return $response;
  2882.         
  2883.         }
  2884.             
  2885.     
  2886.           return $this->render('api/verify_otp.html.twig', [
  2887.         ]);
  2888.     }
  2889.     /**
  2890.      * @Route("/plans", name="api_otp_veri")
  2891.      */
  2892.     public function plansAction(Request $request)
  2893.     {
  2894.         $em $this->getDoctrine()->getManager();
  2895.     
  2896.     
  2897.         $error '';
  2898.         $message '';
  2899.         $plans $em->getRepository(Plan::class)
  2900.                     ->tousLesPlan(truetrue);
  2901.         $data = array(
  2902.                         'error' => $error,
  2903.                         'message' => $message,
  2904.                         'plans' => $plans
  2905.                         
  2906.                     );
  2907.                         
  2908.             $response = new JsonResponse;
  2909.                                         
  2910.             $response $this->allowRemoteRequest($response);
  2911.                                         
  2912.             $response->setContent(json_encode($data));
  2913.                         
  2914.             return $response;
  2915.         
  2916.     
  2917.           return $this->render('api/plans.html.twig', [
  2918.         ]);
  2919.     }
  2920.     /**
  2921.     * @Route("/enregistrer-push-notification-token", name="api_enregistrer_push_notification_token")
  2922.      * @return \Symfony\Component\HttpFoundation\JsonResponse
  2923.     */
  2924.     public function enregistrerPushNotificationToken(Request $request)
  2925.     {
  2926.         
  2927.         $em $this->getDoctrine()
  2928.                     ->getManager();
  2929.         
  2930.         
  2931.         $data = array();
  2932.         $error '';
  2933.         
  2934.         if($request->getMethod() == 'POST'){
  2935.             $formData json_decode($request->getContent());
  2936.             
  2937.             $pushNotificationToken $formData->pushNotificationToken;
  2938.             //$pushNotificationToken = $request->request->get('pushNotificationToken');
  2939.             
  2940.             $id $formData->idUser;
  2941.             //$id = $request->request->get('idUser');
  2942.             
  2943.             $user $em->getRepository(AppUser::class)
  2944.                     ->findOneById($id);
  2945.         
  2946.             
  2947.             $user->setPushNotificationToken($pushNotificationToken);
  2948.             $userBoutiques $em->getRepository(UserBoutique::class)
  2949.                     ->findBy(
  2950.                         array(
  2951.                         'user' => $user
  2952.                         )
  2953.                     );
  2954.             foreach($userBoutiques as $userBoutique){
  2955.                 $boutique $userBoutique->getBoutique();
  2956.                 $boutique->setPushNotificationToken($pushNotificationToken);
  2957.             }
  2958.             $em->flush();
  2959.             
  2960.             $data = array(
  2961.                 'error' => $error,
  2962.                 'message' => ''
  2963.             );    
  2964.         }
  2965.         
  2966.         
  2967.         $response = new JsonResponse;
  2968.         
  2969.         $response $this->allowRemoteRequest($response);
  2970.         
  2971.         $response->setContent(json_encode($data));
  2972.         return $response;
  2973.         /*
  2974.         return $this->render('api/mobile_login.html.twig', [ 
  2975.         ]);
  2976.         */
  2977.     }
  2978.     /**
  2979.      * @Route("/envoyer-push-notification", name="api_envoyer_push_notification")
  2980.      * @return \Symfony\Component\HttpFoundation\Response
  2981.     */
  2982.     public function envoyerPushNotificationAction(Request $request)
  2983.     {
  2984.         $em $this->getDoctrine()
  2985.                     ->getManager();
  2986.         $em $this->getDoctrine()
  2987.                     ->getManager();
  2988.         
  2989.         if($request->getMethod() == 'POST' ){
  2990.             $formData json_decode($request->getContent());
  2991.             
  2992.             $titre $formData->titre;
  2993.             //$titre = $request->request->get('titre');
  2994.             
  2995.             $contenu $formData->contenu;
  2996.             //$contenu = $request->request->get('contenu');
  2997.             $deviceTokens = (array)$formData->deviceTokens;
  2998.             //$deviceTokens = (array)$request->request->get('deviceTokens');
  2999.             
  3000.             $url "https://fcm.googleapis.com/v1/projects/helpplace-30589/messages:send";
  3001.             $token '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';
  3002.             
  3003.             $headers = ['Authorization: Bearer '.$token'Content-Type: application/json'];
  3004.         
  3005.             
  3006.             $projectRoot $this->getParameter('kernel.project_dir');
  3007.             
  3008.             $factory = (new Factory)
  3009.             ->withServiceAccount($projectRoot.'/config/helpplace-30589-firebase-adminsdk-fbsvc-7623774dfc.json')
  3010.             ->withDatabaseUri('https://helpplace-30589.firebaseio.com')
  3011.             ->withProjectId('helpplace');
  3012.         
  3013.         $messaging $factory->createMessaging();
  3014.             
  3015.             foreach($deviceTokens as $deviceToken){
  3016.                 
  3017.                 
  3018.                 if($deviceToken !=''){
  3019.                     $message CloudMessage::fromArray([
  3020.                                 'token' => $deviceToken,
  3021.                                 'notification' => [
  3022.                                     'title' => $title,
  3023.                                     'body' => $body
  3024.                                 ], // optional
  3025.                                 'data' => ['body' => $body]
  3026.                     ]);
  3027.                             
  3028.                     $messaging->send($message);
  3029.                 }
  3030.             }
  3031.         }
  3032.         return $this->render('api/envoyer_push_notification.html.twig', [ 
  3033.             
  3034.         ]);
  3035.     }
  3036.     /**
  3037.      * @Route("/entreprise-a-proximite/{latitude}/{longitude}/{distanceEnKilometre}", name="api_entreprise_a_proximite")
  3038.      * @return \Symfony\Component\HttpFoundation\Response
  3039.     */
  3040.     public function entrepriseAProximiteAction(Request $request,  $latitude$longitude$distanceEnKilometre 1)
  3041.     {
  3042.         $em $this->getDoctrine()
  3043.                     ->getManager();
  3044.         $em $this->getDoctrine()
  3045.                     ->getManager();
  3046.         $entrepriseAProximiteAction $em->getRepository(Boutique::class)
  3047.                                         ->entrepriseAProximiteAction($latitude$longitude$distanceEnKilometretrue);
  3048.         
  3049.         $data = array(
  3050.                 'error' => '',
  3051.                 'message' => '',
  3052.                 'prestataires' => $entrepriseAProximiteAction
  3053.         );
  3054.         $response = new JsonResponse;
  3055.         
  3056.         $response $this->allowRemoteRequest($response);
  3057.         
  3058.         $response->setContent(json_encode($data));
  3059.         return $response;
  3060.         
  3061.         return $this->render('api/envoyer_push_notification.html.twig', [ 
  3062.             
  3063.         ]);        
  3064.     }
  3065.     /**
  3066.      * @Route("/demande-de-retrait/{idUser}/{idEntreprise}", name="api_demande_retrait")
  3067.      * @return \Symfony\Component\HttpFoundation\Response
  3068.     */
  3069.     public function demandeDeRetraitAction(Request $request,  $idUser$idEntreprise)
  3070.     {
  3071.         $em $this->getDoctrine()
  3072.                     ->getManager();
  3073.         $user $em->getRepository(AppUser::class)
  3074.                     ->findOneById($idUser);
  3075.         
  3076.         if(null == $user){
  3077.             return $this->createNotFoundException();
  3078.         }
  3079.         $boutique $em->getRepository(Boutique::class)
  3080.                     ->findOneById($idEntreprise);
  3081.         
  3082.         if(null == $boutique){
  3083.             return $this->createNotFoundException();
  3084.         }
  3085.         $userBoutique $em->getRepository(UserBoutique::class)
  3086.                     ->findOneBy(
  3087.                             array(
  3088.                                 'user' => $idUser,
  3089.                                 'boutique' => $boutique->getId()
  3090.                             )
  3091.                         );
  3092.         if(null == $userBoutique){
  3093.             return $this->createNotFoundException();
  3094.         }
  3095.         
  3096.         if($request->getMethod() == 'POST'){
  3097.             
  3098.             $formData json_decode($request->getContent());
  3099.             
  3100.             $montant = (float)$formData->montant;
  3101.             //$montant = (float)$request->request->get('montant');
  3102.                 if($montant $boutique->getSolde()){
  3103.                     return $this->createNotFoundException();
  3104.                 }
  3105.             $demandeRetrait = new DemandeRetrait;
  3106.             $demandeRetrait->setMontant($montant);
  3107.             $demandeRetrait->setBoutique($boutique);
  3108.             $demandeRetrait->setUser($user);
  3109.             $em->persist($demandeRetrait);
  3110.             $em->flush();
  3111.         }
  3112.         $data = array(
  3113.                 'error' => '',
  3114.                 'message' => ''
  3115.                 
  3116.         );
  3117.         $response = new JsonResponse;
  3118.         
  3119.         $response $this->allowRemoteRequest($response);
  3120.         
  3121.         $response->setContent(json_encode($data));
  3122.         return $response;
  3123.         
  3124.         return $this->render('api/envoyer_push_notification.html.twig', [ 
  3125.             
  3126.         ]);        
  3127.     }
  3128.     /**
  3129.      * @Route("/mes-demandes-de-retrait/{idUser}/{idEntreprise}", name="api_mes_demandes_retrait")
  3130.      * @return \Symfony\Component\HttpFoundation\Response
  3131.     */
  3132.     public function mesDemandesDeRetraitAction(Request $request,  $idUser$idEntreprise)
  3133.     {
  3134.         $em $this->getDoctrine()
  3135.                     ->getManager();
  3136.         $user $em->getRepository(AppUser::class)
  3137.                     ->findOneById($idUser);
  3138.         
  3139.         if(null == $user){
  3140.             return $this->createNotFoundException();
  3141.         }
  3142.         $boutique $em->getRepository(Boutique::class)
  3143.                     ->findOneById($idEntreprise);
  3144.         
  3145.         if(null == $boutique){
  3146.             return $this->createNotFoundException();
  3147.         }
  3148.         $userBoutique $em->getRepository(UserBoutique::class)
  3149.                     ->findOneBy(
  3150.                             array(
  3151.                                 'user' => $idUser,
  3152.                                 'boutique' => $boutique->getId()
  3153.                             )
  3154.                         );
  3155.         if(null == $userBoutique){
  3156.             return $this->createNotFoundException();
  3157.         }
  3158.         $demandeRetraits = array();
  3159.         if($request->getMethod() == 'POST'){
  3160.             
  3161.             $formData json_decode($request->getContent());
  3162.             
  3163.             $dateDebut $formData->dateDebut;
  3164.             $dateDebut = new \DateTime($dateDebut);
  3165.             $dateDebut->setTime(00);
  3166.             
  3167.             $dateFin $formData->dateFin;
  3168.             //$dateFin = $request->request->get('dateFin');
  3169.             
  3170.             $dateFin = new \DateTime($dateFin);
  3171.             $dateFin->setTime(2359);
  3172.             $demandeRetraits $em->getRepository(DemandeRetrait::class)
  3173.                                 ->demandeDUnePeriode($boutique->getId(), $dateDebut$dateFintrue);
  3174.         }
  3175.         $data = array(
  3176.                 'error' => '',
  3177.                 'message' => '',
  3178.                 'demandeRetraits' => $demandeRetraits
  3179.                 
  3180.         );
  3181.         $response = new JsonResponse;
  3182.         
  3183.         $response $this->allowRemoteRequest($response);
  3184.         
  3185.         $response->setContent(json_encode($data));
  3186.         return $response;
  3187.         
  3188.         return $this->render('api/envoyer_push_notification.html.twig', [ 
  3189.             
  3190.         ]);        
  3191.     }
  3192.     /**
  3193.      * @Route("/mot-de-passe-oublie", name="api_mot_de_passe_oublie")
  3194.      * @return \Symfony\Component\HttpFoundation\Response
  3195.      */
  3196.     public function motDePasseOublieAction(Request $request)
  3197.     {
  3198.         $em $this->getDoctrine()
  3199.                     ->getManager();
  3200.     
  3201.         
  3202.         $error '';
  3203.         $message '';
  3204.         $user '';
  3205.         $token '';
  3206.         
  3207.         if($request->getMethod() == 'POST'){
  3208.             $formData json_decode($request->getContent());
  3209.             $telephone $formData->telephone;
  3210.             //$telephone = $request->request->get('telephone');
  3211.             $user $em->getRepository(AppUser::class)
  3212.                         ->findOneByTelephone($telephone);
  3213.             if($user == null){
  3214.                 $error '';
  3215.                 $message 'Impossible de trouver l\'utilisateur';
  3216.             }else{
  3217.                 
  3218.                 $error 'Success';
  3219.                 $message 'Un utilisateur trouvé';
  3220.                 
  3221.                 //ici traitement
  3222.                 $otp random_int(1000009999999999999);
  3223.                 $user->setEmailToken($otp);
  3224.                 $user->setTokenExpireAt(time() + 3600 24);
  3225.                 $em->flush();
  3226.                 $userRetourne $em->getRepository(AppUser::class)
  3227.                         ->findOneByUniqueId($telephonetrue);
  3228.                 $userRetourne $userRetourne[0];
  3229.                 unset($userRetourne['password']);
  3230.                 unset($userRetourne['emailToken']);
  3231.             }    
  3232.             $data = array(
  3233.                         'error' => $error,
  3234.                         'user' => $userRetourne,
  3235.                         'message' => $message,
  3236.                         'token' => $otp
  3237.                     );
  3238.                             
  3239.                 $response = new JsonResponse;
  3240.                                         
  3241.                 $response $this->allowRemoteRequest($response);
  3242.                                         
  3243.                 $response->setContent(json_encode($data));
  3244.                         
  3245.                 return $response;
  3246.             
  3247.         }
  3248.         
  3249.         return $this->render('api/mot_de_passe_oublie.html.twig', [
  3250.         
  3251.         ]);
  3252.     }
  3253.     /**
  3254.      * @Route("/changer-mot-de-passe-oublie/{idUser}", name="api_changer_mot_de_passe_oublie")
  3255.      * @return \Symfony\Component\HttpFoundation\Response
  3256.      */
  3257.     public function changerMotDePasseOublieAction(Request $request$idUser,  UserPasswordHasherInterface $passwordHasher)
  3258.     {
  3259.         $em $this->getDoctrine()
  3260.                     ->getManager();
  3261.     
  3262.         
  3263.         $error '';
  3264.         $message '';
  3265.         $user '';
  3266.         
  3267.         
  3268.         if($request->getMethod() == 'POST'){
  3269.             $formData json_decode($request->getContent());
  3270.             $password1 $formData->password1;
  3271.             //$password1 = $request->request->get('password1');
  3272.             $password2 $formData->password2;
  3273.             //$password2 = $request->request->get('password2');
  3274.             $token $formData->token;
  3275.             //$token = $request->request->get('token');
  3276.             $user $em->getRepository(AppUser::class)
  3277.                 ->findOneBy(
  3278.                     array(
  3279.                         'id' => $idUser,
  3280.                         'emailToken' => $token
  3281.                     )
  3282.                     );
  3283.             if($user == null){
  3284.                 $error 'error';
  3285.                 $message 'Token ivalide';
  3286.             }else{
  3287.                 
  3288.                 if(time() > $user->getTokenExpireAt()){
  3289.                     $error 'error';
  3290.                     $message 'Token expiré ou invalide';
  3291.                 }else{
  3292.                         if($password1 != $password2){
  3293.                             $error 'error';
  3294.                             $message 'Les mots de passes ne correspondent pas';
  3295.                         }else{
  3296.                                 //
  3297.                                 $hashedPassword $passwordHasher->hashPassword($user$password1);
  3298.                                 $user->setPassword($hashedPassword);
  3299.                                 $user->setEmailToken('');
  3300.                                 $user->setTokenExpireAt(0);
  3301.                                 $em->flush();
  3302.                                 $error 'Success';
  3303.                                 $message 'Mot de passe mis à jour';
  3304.                                 $user $em->getRepository(AppUser::class)
  3305.                                         ->findOneByUniqueId($idUsertrue);
  3306.                                 $user $user[0];
  3307.                                 unset($user['password']);
  3308.                                 unset($user['emailToken']);
  3309.                         }
  3310.                 }
  3311.             }
  3312.             
  3313.             
  3314.             $data = array(
  3315.                             'error' => $error,
  3316.                             'user' => $user,
  3317.                             'message' => $message
  3318.             );
  3319.                                 
  3320.             $response = new JsonResponse;
  3321.                                             
  3322.             $response $this->allowRemoteRequest($response);
  3323.                                             
  3324.             $response->setContent(json_encode($data));
  3325.                             
  3326.             return $response;
  3327.         }
  3328.         
  3329.         return $this->render('api/changer_mot_de_passe_oublie.html.twig', [
  3330.         
  3331.         ]);
  3332.         
  3333.     }
  3334.     /**
  3335.      * @Route("/envoyer-casier-judiciaire/{idUser}", name="api_envoyer_casier_judiciare")
  3336.      * @return \Symfony\Component\HttpFoundation\Response
  3337.      */
  3338.     public function envoyerCasierJudiciareAction(Request $request$idUser)
  3339.     {
  3340.         $em $this->getDoctrine()
  3341.                     ->getManager();
  3342.     
  3343.         
  3344.         $error '';
  3345.         $message '';
  3346.         $user $em->getRepository(AppUser::class)
  3347.                 ->findOneById($idUser);
  3348.         
  3349.         if($request->getMethod() == 'POST'){
  3350.             $formData json_decode($request->getContent());
  3351.             $casierJudiciaire $formData->casierJudiciaire;
  3352.             $casierJudiciaireFileName $formData->casierJudiciaireFileName;
  3353.         
  3354.             $imageParts explode(';base64,'$formData->casierJudiciaire);
  3355.             
  3356.                         $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  3357.                         
  3358.                         $imageDecoded base64_decode($imageBase64);
  3359.                         $photo = new Photo;
  3360.                 
  3361.                         $ex pathinfo($casierJudiciaireFileNamePATHINFO_EXTENSION); 
  3362.                         $exA = array('pdf');
  3363.                 
  3364.                         if (in_array(strtolower($ex), $exA)){
  3365.                 
  3366.                             $photo->setExtension($ex);
  3367.                         } else {
  3368.                             throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  3369.                         }
  3370.                 
  3371.                         $name $user->getId().time();
  3372.                         $namePourRepertoire $name;
  3373.                         //hydratation des attributs de l'objet
  3374.                         $photo->setUrl($name.'.'.$photo->getExtension());
  3375.                         $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  3376.                         
  3377.                         $extension $photo->getExtension();
  3378.                 
  3379.                         if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  3380.                         {
  3381.                             throw new \RuntimeException('Impossible de créer le dossier de destination');
  3382.                         }
  3383.                         if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  3384.                         {
  3385.                             $error 'Enregistrement effectué';
  3386.                             $user->setCasierJudiciaire($photo->getFullUrl());
  3387.                         } else {
  3388.                             echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  3389.                             $error 'Impossible d\'enregistrer l\'image';
  3390.                         }
  3391.                 $em->flush();
  3392.             $u $em->getRepository(AppUser::class)
  3393.                     ->findOneByUniqueId($idUsertrue);
  3394.             $data = array(
  3395.                             'error' => 'Succès',
  3396.                             'message' => 'Enregistrement effectué',
  3397.                             'user' => $u[0]
  3398.             );
  3399.             $response = new JsonResponse;
  3400.                                             
  3401.             $response $this->allowRemoteRequest($response);
  3402.                                             
  3403.             $response->setContent(json_encode($data));
  3404.                             
  3405.             return $response;
  3406.         }
  3407.         
  3408.         return $this->render('api/envoyer_casier_judiciaire.html.twig', [
  3409.         
  3410.         ]);
  3411.         
  3412.     }
  3413.     /**
  3414.      * @Route("/envoyer-piece-d-identite/{idUser}", name="api_envoyer_piece_d_identite")
  3415.      * @return \Symfony\Component\HttpFoundation\Response
  3416.      */
  3417.     public function envoyerPieceDIdentiteAction(Request $request$idUser)
  3418.     {
  3419.         $em $this->getDoctrine()
  3420.                     ->getManager();
  3421.     
  3422.         
  3423.         $error '';
  3424.         $message '';
  3425.         $user $em->getRepository(AppUser::class)
  3426.                 ->findOneById($idUser);
  3427.         
  3428.         if($request->getMethod() == 'POST'){
  3429.             $formData json_decode($request->getContent());
  3430.             $pieceDIdentiteRecto $formData->pieceDIdentiteRecto;
  3431.             $pieceDIdentiteRectoFileName $formData->pieceDIdentiteRectoFileName;
  3432.             $pieceDIdentiteVerso $formData->pieceDIdentiteVerso;
  3433.             $pieceDIdentiteVersoFileName $formData->pieceDIdentiteVersoFileName;
  3434.             
  3435.                 
  3436.             //Traitement des pièces d'identité Recto
  3437.                         
  3438.                         $imageParts explode(';base64,'$formData->pieceDIdentiteRecto);
  3439.             
  3440.                         $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  3441.                         
  3442.                     
  3443.                         $imageDecoded base64_decode($imageBase64);
  3444.                         $photo = new ProductPhoto;
  3445.                 
  3446.                         $ex pathinfo($pieceDIdentiteRectoFileNamePATHINFO_EXTENSION); 
  3447.                         $exA = array('jpg''jpeg''png''gif''jfif''pdf');
  3448.                 
  3449.                         if (in_array(strtolower($ex), $exA)){
  3450.                 
  3451.                             $photo->setExtension($ex);
  3452.                         } else {
  3453.                             throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  3454.                         }
  3455.                 
  3456.                         $name $user->getId().time();
  3457.                         $namePourRepertoire $name;
  3458.                         //hydratation des attributs de l'objet
  3459.                         $photo->setUrl($name.'.'.$photo->getExtension());
  3460.                         $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  3461.                         
  3462.                         $extension $photo->getExtension();
  3463.                         
  3464.                 
  3465.                         if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  3466.                         {
  3467.                             throw new \RuntimeException('Impossible de créer le dossier de destination');
  3468.                         }
  3469.                 
  3470.                         if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  3471.                         {
  3472.                             $error 'Enregistrement effectué';
  3473.                             $user->setPieceDIdentiteRecto($photo->getFullUrl());
  3474.                         } else {
  3475.                             echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  3476.                             $error 'Impossible d\'enregistrer l\'image';
  3477.                         }
  3478.                         
  3479.                         //Traitement verso
  3480.                         
  3481.                         
  3482.                         $imageParts explode(';base64,'$formData->pieceDIdentiteVerso);
  3483.             
  3484.                         $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  3485.                         
  3486.                         $imageDecoded base64_decode($imageBase64);
  3487.                         $photo = new ProductPhoto;
  3488.                 
  3489.                         $ex pathinfo($pieceDIdentiteVersoFileNamePATHINFO_EXTENSION); 
  3490.                         $exA = array('jpg''jpeg''png''gif''jfif''pdf');
  3491.                 
  3492.                         if (in_array(strtolower($ex), $exA)){
  3493.                 
  3494.                             $photo->setExtension($ex);
  3495.                         } else {
  3496.                             throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  3497.                         }
  3498.                 
  3499.                         $name $user->getId().time().'0';
  3500.                         $namePourRepertoire $name;
  3501.                         //hydratation des attributs de l'objet
  3502.                         $photo->setUrl($name.'.'.$photo->getExtension());
  3503.                         $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  3504.                         
  3505.                         $extension $photo->getExtension();
  3506.                         
  3507.                 
  3508.                         if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  3509.                         {
  3510.                             throw new \RuntimeException('Impossible de créer le dossier de destination');
  3511.                         }
  3512.                 
  3513.                         if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  3514.                         {
  3515.                             $error 'Enregistrement effectué';
  3516.                             $user->setPieceDIdentiteVerso($photo->getFullUrl());
  3517.                         } else {
  3518.                             echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  3519.                             $error 'Impossible d\'enregistrer l\'image';
  3520.                         }
  3521.                         
  3522.                         $em->flush();
  3523.                         
  3524.             $em->flush();
  3525.             $u $em->getRepository(AppUser::class)
  3526.                     ->findOneByUniqueId($idUsertrue);
  3527.             $u $u[0];
  3528.             unset($u['password']);
  3529.             $data = array(
  3530.                             'error' => 'Succès',
  3531.                             'message' => 'Enregistrement effectué',
  3532.                             'user' => $u
  3533.             );
  3534.             $response = new JsonResponse;
  3535.                                             
  3536.             $response $this->allowRemoteRequest($response);
  3537.                                             
  3538.             $response->setContent(json_encode($data));
  3539.                             
  3540.             return $response;
  3541.         }
  3542.         
  3543.         return $this->render('api/envoyer_piece_d_identite.html.twig', [
  3544.         
  3545.         ]);
  3546.         
  3547.     }
  3548.     /**
  3549.      * @Route("/mise-a-jour-prestataire/{idUser}/{idPrestataire}", name="api_mise_a_jour_prestataire")
  3550.      * @return \Symfony\Component\HttpFoundation\Response
  3551.      */
  3552.     public function miseAJourCompteProfessionnelAction(Request $request$idUser$idPrestataire)
  3553.     {
  3554.         
  3555.        $em $this->getDoctrine()
  3556.                ->getManager();
  3557.         $user $em->getRepository(AppUser::class)
  3558.                     ->findOneById($idUser);
  3559.         $boutique $em->getRepository(Boutique::class)
  3560.                     ->findOneById($idPrestataire);
  3561.         
  3562.         $em $this->getDoctrine()
  3563.                     ->getManager();
  3564.         $message '';
  3565.         $error '';
  3566.         if($request->getMethod() == 'POST'){
  3567.             $formData json_decode($request->getContent());
  3568.             
  3569.             $logo $formData->logo;
  3570.             $logoFileName $formData->logoFileName;
  3571.             $mainDOeuvre $formData->mainDOeuvre;
  3572.             $zoneDIntervention $formData->zoneDIntervention;
  3573.             $horaireDOuverture $formData->horaireDOuverture;
  3574.             $description =  $formData->description;
  3575.             $latitude $formData->latitude;
  3576.             $longitude $formData->longitude;
  3577.                 
  3578.             $boutique->setMainDOeuvre($mainDOeuvre);
  3579.             $boutique->setZoneDIntervention($zoneDIntervention);
  3580.             $boutique->setHoraireDOuverture($horaireDOuverture);
  3581.             $boutique->setDescription($description);
  3582.             $boutique->setLatitude($latitude);
  3583.             $boutique->setLongitude($longitude);
  3584.             if($logoFileName != ''){
  3585.                 //Traitement des pièces d'identité Recto
  3586.                         
  3587.                 $imageParts explode(';base64,'$formData->logo);
  3588.             
  3589.                 $imageBase64 = isset($imageParts[1]) ? $imageParts[1] : $imageParts[0];
  3590.                         
  3591.                 $imageDecoded base64_decode($imageBase64);
  3592.                 $photo = new Photo;
  3593.                 
  3594.                 $ex pathinfo($logoFileNamePATHINFO_EXTENSION); 
  3595.                 $exA = array('jpg''jpeg''png''gif''jfif');
  3596.                 
  3597.                 if (in_array(strtolower($ex), $exA)){
  3598.                 
  3599.                         $photo->setExtension($ex);
  3600.                 } else {
  3601.                     throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
  3602.                 }
  3603.                 $name $user->getId().time();
  3604.                 $namePourRepertoire $name;
  3605.                 //hydratation des attributs de l'objet
  3606.                 $photo->setUrl($name.'.'.$photo->getExtension());
  3607.                 $photo->setFullUrl($this->getDomain().'/uploads/img/original/'.$name.'.'.$photo->getExtension());
  3608.                         
  3609.                 $extension $photo->getExtension();
  3610.                 if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original'0777true))
  3611.                 {
  3612.                     throw new \RuntimeException('Impossible de créer le dossier de destination');
  3613.                 }
  3614.                 if (file_put_contents($photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension(), $imageDecoded))
  3615.                 {
  3616.                     $error 'Succès';
  3617.                     $message 'Enregistrement effectué';
  3618.                     $em->persist($photo);
  3619.                     $em->flush();
  3620.                     $boutique->setLogo($photo);
  3621.                 } else {
  3622.                     echo json_encode(['status' => 'error''message' => 'Failed to save file']);
  3623.                     $error 'Impossible d\'enregistrer l\'image';
  3624.                 }
  3625.             }
  3626.                         
  3627.                 
  3628.                     
  3629.                         
  3630.                         $em->flush();
  3631.                         //Fin traitement pièce d'identité
  3632.                         $error '';
  3633.                         $message 'Enregistrement effecuté';
  3634.                         $unPrestataire $em->getRepository(Boutique::class)
  3635.                                                     ->unPrestataire($boutique->getId(), true);
  3636.                         $data = array(
  3637.                             'error' => $error,
  3638.                             'prestataire' => $unPrestataire[0],
  3639.                             'message' => $message
  3640.                         );
  3641.                     
  3642.                         
  3643.                         $response = new JsonResponse;
  3644.                         
  3645.                         $response $this->allowRemoteRequest($response);
  3646.                         
  3647.                         $response->setContent(json_encode($data));
  3648.                         return $response;
  3649.                             
  3650.                         return $this->redirectToRoute('registration_confirmed', array('username' => $user->getUsername()));
  3651.         }
  3652.         
  3653.         return $this->render('api/mise_a_jour_compte_pro.html.twig', [
  3654.         
  3655.         ]);      
  3656.     }
  3657.     public function getYelliSenderId()
  3658.     {
  3659.         return 'SolutionsIT';
  3660.     }
  3661.     
  3662.     public function getYelliAPIKey()
  3663.     {
  3664.         return '1046|oVBGy111od65ejsj44ECUlhrjYj7HT3Oqw6ECA5za18586fe';
  3665.     }
  3666.     public function getDomain()
  3667.     {
  3668.         $domaine $_SERVER['HTTP_HOST'];
  3669.         $protocol '';
  3670.         if($domaine == 'localhost' || $domaine == '127.0.0.1'){
  3671.             $domaine $domaine.'/helpplace/public';
  3672.         }
  3673.         if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
  3674.             $protocol 'https://';
  3675.         } else{
  3676.             $protocol 'http://';
  3677.         }
  3678.         
  3679.         return $protocol.$domaine;
  3680.     }
  3681.     public function allowRemoteRequest($response)
  3682.     {
  3683.         
  3684.         $response->headers->set('Access-Control-Allow-Origin''*');
  3685.         $response->headers->set('Content-Type''application/json;');
  3686.         $response->headers->set('Access-Control-Allow-Headers''Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Allow-Origin,Authorization,Access-Control-Request-Headers');
  3687.         
  3688.         //$response->headers->set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
  3689.         //$response->headers->set('Access-Control-Allow-Headers', 'Origin, Accept, Access-Control-Allow-Origin, Content-Type, X-Auth-Token');
  3690.         //$response->headers->set('Access-Control-Allow-Headers', 'Content-Type');
  3691.         
  3692.         //$response->headers->set('Access-Control-Allow-Credentials', true);
  3693.         //$response->headers->set('Access-Control-Allow-Headers', 'Access-Control-Allow-Origin, Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization,Access-Control-Request-Headers');
  3694.         //$response->headers->set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
  3695.         
  3696.         //header("Access-Control-Allow-Headers: 'Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Allow-Origin,Authorization,Access-Control-Request-Headers'");
  3697.         return $response;
  3698.     }
  3699. }