src/Controller/ProductController.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Product;
  4. use App\Form\ProductAddChoixType;
  5. use App\Form\ProductNameChoiceType;
  6. use App\Form\ProductNameType;
  7. use App\Form\ProductType;
  8. use App\Form\ProductUpdateType;
  9. use App\Services\ApiChatGptService;
  10. use App\Services\ApiService;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  14. use Symfony\Component\Filesystem\Filesystem;
  15. use Symfony\Component\HttpFoundation\File\UploadedFile;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  19. class ProductController extends AbstractController
  20. {
  21.     /**
  22.      * ce script définit une classe qui a trois propriétés injectées par dépendance via son constructeur
  23.      * : $params, $router et $api_service.
  24.      */
  25.     private $params;
  26.     private $router;
  27.     private $api_service;
  28.     private $api_chatgtp_service;
  29.     /**
  30.      * $params est une instance de ParameterBagInterface qui permet d'accéder aux paramètres définis dans les fichiers de configuration de l'application.
  31.      * $router est une instance de UrlGeneratorInterface qui permet de générer des URLs pour les routes de l'application.
  32.      * $api_service est une instance de ApiService qui est une classe définie dans l'application et qui fournit des fonctionnalités pour communiquer avec une API WIZIHOP.
  33.      * $api_service est une instance de Api qui est une classe définie dans l'application et qui fournit des fonctionnalités pour communiquer avec une API CHAT GTP.
  34.      */
  35.     public function __construct(ParameterBagInterface $paramsUrlGeneratorInterface $routerApiService $api_serviceApiChatGptService $api_chatgtp_service)
  36.     {
  37.         $this->params $params;
  38.         $this->router $router;
  39.         $this->api_service $api_service;
  40.         $this->api_chatgtp_service $api_chatgtp_service;
  41.     }
  42.     #[Route('/'name'app_product')]
  43.     #[IsGranted("ROLE_ADMIN")]
  44.     public function addproduct(Request $request)
  45.     {
  46.         $product = new Product();
  47.         $form $this->createForm(ProductNameType::class, $product, ['info' => 'add_product']);
  48.         $form->handleRequest($request);
  49.         if ($form->isSubmitted() && $form->isValid()) {
  50.             $product_name $request->request->get('product_name')['name'];
  51.             $product = new Product();
  52.             $product->setName($product_name);
  53.             $form $this->createForm(ProductAddChoixType::class, $product, [
  54.                 'action' => $this->router->generate('app_validate_product'),
  55.                 'method' => 'POST',
  56.             ]);
  57.             return $this->render('product/add_product_choix.html.twig', [
  58.                 'form' => $form->createView(),
  59.             ]);
  60.             /*$parameterValue = $this->params->get('is_api_key_chatgpt');
  61.             $product_notes = $request->request->get('product_name')['notes'];
  62.             $product_full=$product_name." ".$product_notes;
  63.             $product = $this->api_chatgtp_service->createContenuProduct($product_name,$product_full,$id=null);
  64.             $form = $this->createForm(ProductType::class, $product, [
  65.                 'action' => $this->router->generate('app_validate_product'),
  66.                 'method' => 'POST',
  67.             ]);
  68.             return $this->render('product/product_details.html.twig', [
  69.                 'form' => $form->createView(),
  70.             ]);*/
  71.         }
  72.         return $this->render('product/add_product.html.twig', [
  73.             'form' => $form->createView(),
  74.         ]);
  75.     }
  76.     #[Route('/validate/product'name'app_validate_product')]
  77.     #[IsGranted("ROLE_ADMIN")]
  78.     public function validteproduct(Request $request)
  79.     {
  80.         if (!empty($request->request->get('product_add_choix'))) {
  81.             $product = new Product();
  82.             $form $this->createForm(ProductAddChoixType::class, $product);
  83.             $form->handleRequest($request);
  84.             if ($form->isSubmitted()) {
  85.                 $product_name $request->request->get('product_add_choix')['name'];
  86.                 $product_notes $request->request->get('product_add_choix')['notes'];
  87.                 $product_full $product_name " " $product_notes;
  88.                 $fullPath '';
  89.                 if (!is_null($request->files->get('product_add_choix'))) {
  90.                     //Get the uploaded file from the form
  91.                     /** @var UploadedFile $file */
  92.                     $file $request->files->get('product_add_choix')['imageFile']['file'];
  93.                     // Generate a unique file name
  94.                     //$fileName = md5(uniqid()) . '.' . $file->guessExtension();
  95.                     $fileName md5(uniqid()) . '.jpeg';
  96.                     // Récupérer le protocole, le nom de domaine et le port à partir de l'URL de la requête
  97.                     $protocol $request->getScheme();
  98.                     $domain $request->getHost();
  99.                     $port $request->getPort();
  100.                     // Construire l'URL complète avec le protocole, le nom de domaine et le port
  101.                     $fullUrl $protocol '://' $domain;
  102.                     if (($protocol == 'http' && $port != 80) || ($protocol == 'https' && $port != 443)) {
  103.                         $fullUrl .= ':' $port;
  104.                     }
  105.                     // Move the file to the desired directory
  106.                     $filesystem = new Filesystem();
  107.                     $targetDirectory 'images/product/';
  108.                     $filesystem->mkdir($targetDirectory);
  109.                     $file->move($targetDirectory$fileName);
  110.                     if ($filesystem->exists($targetDirectory) && is_dir($targetDirectory)) {
  111.                         $fullPath $fullUrl '/' $targetDirectory '' $fileName;
  112.                     }
  113.                 }
  114.                 $product $this->api_chatgtp_service->createContenuProduct($fullPath,$request->request$product_full$id null);
  115.                 $form $this->createForm(ProductType::class, $product, [
  116.                     'action' => $this->router->generate('app_confirmer_create_product'),
  117.                     'method' => 'POST',
  118.                 ]);
  119.                 return $this->render('product/product_details.html.twig', [
  120.                     'form' => $form->createView(),
  121.                 ]);
  122.             }
  123.         } else {
  124.             $this->addFlash('danger'"Problème lors de création du produit , saisir au moins le nom du produit ou sku");
  125.             //Redirect to success page
  126.             return $this->redirectToRoute('app_product');
  127.         }
  128.     }
  129.     #[Route('/confirmer/create/product'name'app_confirmer_create_product')]
  130.     #[IsGranted("ROLE_ADMIN")]
  131.     public function confirmerCreateProduct(Request $request)
  132.     {
  133.         $product = new Product();
  134.         $form $this->createForm(ProductType::class, $product);
  135.         $form->handleRequest($request);
  136.         if ($form->isSubmitted() && $form->isValid()) {
  137.             // Récupérer les données soumises
  138.             $data $form->getData();
  139.             $id $request->request->get('id_product');
  140. //            $fullPath = '';
  141. //            if (!is_null($request->files->get('product'))) {
  142. //                // Get the uploaded file from the form
  143. //                /** @var UploadedFile $file */
  144. //                $file = $request->files->get('product')['imageFile']['file'];
  145. //
  146. //                // Generate a unique file name
  147. //                $fileName = md5(uniqid()) . '.' . $file->guessExtension();
  148. //
  149. //                // Récupérer le protocole, le nom de domaine et le port à partir de l'URL de la requête
  150. //                $protocol = $request->getScheme();
  151. //                $domain = $request->getHost();
  152. //                $port = $request->getPort();
  153. //
  154. //                // Construire l'URL complète avec le protocole, le nom de domaine et le port
  155. //                $fullUrl = $protocol . '://' . $domain;
  156. //                if (($protocol == 'http' && $port != 80) || ($protocol == 'https' && $port != 443)) {
  157. //                    $fullUrl .= ':' . $port;
  158. //                }
  159. //
  160. //                // Move the file to the desired directory
  161. //                $filesystem = new Filesystem();
  162. //                $targetDirectory = 'images/product/';
  163. //                $filesystem->mkdir($targetDirectory);
  164. //                $file->move($targetDirectory, $fileName);
  165. //
  166. //                if ($filesystem->exists($targetDirectory) && is_dir($targetDirectory)) {
  167. //                    $fullPath = $fullUrl . '/' . $targetDirectory . '' . $fileName;
  168. //                }
  169. //            }
  170.             if (isset($id) && ($id) >= 1) {
  171.                 $product $this->api_service->updateProduct($data$id);
  172.             } else {
  173.                 $product $this->api_service->createProduct($data);
  174.             }
  175.             if (!is_null($product)) {
  176.                 //Redirect to success page
  177.                 $this->addFlash('success'"Votre produit a été créé avec succès ! ");
  178.                 //Redirect to success page
  179.                 return $this->redirectToRoute('app_update_product');
  180.             } else {
  181.                 $this->addFlash('danger'"Problème lors de création du produit , veuillez vérifier que Sku ou le nom du produit n'existe pas ");
  182.                 //Redirect to success page
  183.                 return $this->redirectToRoute('app_product');
  184.             }
  185.         }
  186.     }
  187.     #[Route('/update/product'name'app_update_product')]
  188.     #[IsGranted("ROLE_ADMIN")]
  189.     public function updateproduct(Request $request)
  190.     {
  191.         $product = new Product();
  192.         $form $this->createForm(ProductNameChoiceType::class, $product);
  193.         $form->handleRequest($request);
  194.         if ($form->isSubmitted() && $form->isValid()) {
  195.             $product_id $request->request->get('product_name_choice')['name'];
  196.             if (isset($product_id)) {
  197.                 $reponseProduct $this->api_service->getProduct($product_id);
  198.                 $product = new Product();
  199.                 $product->setId($reponseProduct['id']);
  200.                 $product->setSku($reponseProduct['sku']);
  201.                 $product->setName($reponseProduct['name']);
  202.                 $product->setDescription($reponseProduct['description']);
  203.                 $product->setShortDescription($reponseProduct['short_description']);
  204.                 $product->setUrl($reponseProduct['url']);
  205.                 $product->setMetaTitle($reponseProduct['meta']['title']);
  206.                 $product->setMetaDescription($reponseProduct['meta']['description']);
  207.                 $product->setMetaDescription($reponseProduct['meta']['description']);
  208.                 $product->setCategory($reponseProduct['category_id']);
  209.                 $form $this->createForm(ProductUpdateType::class, $product, [
  210.                     'action' => $this->router->generate('app_generer_visualiser_product'),
  211.                     'method' => 'POST',
  212.                 ]);
  213.                 return $this->render('product/visualiser.html.twig', [
  214.                     'form' => $form->createView(),
  215.                     'id' => $reponseProduct['id'],
  216.                 ]);
  217.             } else {
  218.                 $this->addFlash('danger'"Veuillez choisir un produit");
  219.                 //Redirect to success page
  220.                 return $this->redirectToRoute('app_product');
  221.             }
  222.         }
  223.         return $this->render('product/update_product.html.twig', [
  224.             'form' => $form->createView(),
  225.         ]);
  226.     }
  227.     #[Route('/validate/generate/product'name'app_generer_visualiser_product')]
  228.     #[IsGranted("ROLE_ADMIN")]
  229.     public function genererVisualiserteproduct(Request $request)
  230.     {
  231.         $product = new Product();
  232.         $form $this->createForm(ProductUpdateType::class, $product);
  233.         $form->handleRequest($request);
  234.         if ($form->isSubmitted()) {
  235.             $product_name $request->request->get('product_update')['name'];
  236.             $product_notes $request->request->get('product_update')['notes'];
  237.             $id_product $request->request->get('id_product');
  238.             $product_full $product_name " " $product_notes;
  239.             $product $this->api_chatgtp_service->createContenuProduct($fullPath=null,$request->request$product_full$id_product);
  240.             $form $this->createForm(ProductUpdateType::class, $product, [
  241.                 'action' => $this->router->generate('app_confirmer_update_product'),
  242.                 'method' => 'POST',
  243.             ]);
  244.             return $this->render('product/product_update_details.html.twig', [
  245.                 'form' => $form->createView(),
  246.                 'id' => $id_product,
  247.             ]);
  248.         }
  249.     }
  250.     #[Route('/confirmer/update/product'name'app_confirmer_update_product')]
  251.     #[IsGranted("ROLE_ADMIN")]
  252.     public function confirmerUpdateProduct(Request $request)
  253.     {
  254.         $product = new Product();
  255.         $form $this->createForm(ProductUpdateType::class, $product);
  256.         $form->handleRequest($request);
  257.         if ($form->isSubmitted() && $form->isValid()) {
  258.             // Récupérer les données soumises
  259.             $data $form->getData();
  260.             $id $request->request->get('id_product');
  261.             $product $this->api_service->updateProduct($data$id);
  262.             if (!is_null($product)) {
  263.                 //Redirect to success page
  264.                 $this->addFlash('success'"Votre produit a été modifié avec succès ! ");
  265.                 //Redirect to success page
  266.                 return $this->redirectToRoute('app_update_product');
  267.             } else {
  268.                 $this->addFlash('danger'"Problème lors de création du produit , veuillez vérifier que Sku ou le nom du produit n'existe pas ");
  269.                 //Redirect to success page
  270.                 return $this->redirectToRoute('app_product');
  271.             }
  272.         }
  273.     }
  274.     #[Route('/get/product'name'app_get_product')]
  275.     #[IsGranted("ROLE_ADMIN")]
  276.     public function getproduct(Request $request)
  277.     {
  278.         dd("ggg");
  279.         $this->api_service->getProduct($request);
  280.         $product = new Product();
  281.         $form $this->createForm(ProductNameType::class, $product, ['info' => 'update_product']);
  282.         $form->handleRequest($request);
  283.         if ($form->isSubmitted() && $form->isValid()) {
  284.             $product_id $request->request->get('product_name')['name'];
  285.             $product_name $request->request->get('name_product_update');
  286.             if (isset($product_id) && isset($product_name)) {
  287.                 $product $this->api_chatgtp_service->createContenuProduct($product_name$product_id);
  288.                 $form $this->createForm(ProductType::class, $product, [
  289.                     'action' => $this->router->generate('app_validate_product'),
  290.                     'method' => 'POST',
  291.                 ]);
  292.                 return $this->render('product/product_details.html.twig', [
  293.                     'form' => $form->createView(),
  294.                     'id' => $product_id,
  295.                 ]);
  296.             } else {
  297.                 $this->addFlash('danger'"Veuillez choisir un produit");
  298.                 //Redirect to success page
  299.                 return $this->redirectToRoute('app_product');
  300.             }
  301.         }
  302.         return $this->render('product/add_product.html.twig', [
  303.             'form' => $form->createView(),
  304.         ]);
  305.     }
  306. }