src/Flexy/ShopBundle/EventSubscriber/EasyAdminSubscriber.php line 203

Open in your IDE?
  1. <?php 
  2. # src/EventSubscriber/EasyAdminSubscriber.php
  3. namespace App\Flexy\ShopBundle\EventSubscriber;
  4. use App\Entity\BlogPost;
  5. use App\Flexy\ShopBundle\Entity\Brand;
  6. use App\Flexy\ShopBundle\Entity\Order\DemandeFund;
  7. use App\Flexy\ShopBundle\Entity\Product\CategoryProduct;
  8. use App\Flexy\ShopBundle\Entity\Product\ImportExcel;
  9. use App\Flexy\ShopBundle\Entity\Product\Product;
  10. use App\Flexy\ShopBundle\Entity\Product\ProductShop;
  11. use App\Flexy\ShopBundle\Entity\Vendor\Vendor;
  12. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  13. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  16. use Symfony\Component\Security\Core\Security;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  19. use PhpOffice\PhpSpreadsheet\Reader\Csv;
  20. use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  21. class EasyAdminSubscriber implements EventSubscriberInterface
  22. {
  23.     private $security;
  24.     private $passwordEncoder;
  25.     private $em;
  26.     public function __construct(Security $security,UserPasswordEncoderInterface $passwordEncoder,EntityManagerInterface $entityManagerInterface)
  27. {
  28.         $this->security $security;
  29.         $this->passwordEncoder $passwordEncoder;
  30.         $this->em $entityManagerInterface;
  31.     }
  32.     public static function getSubscribedEvents()
  33.     {
  34.         return [
  35.             BeforeEntityPersistedEvent::class => ['beforePersist'],
  36.             BeforeEntityUpdatedEvent::class => ['beforeUpdated'],
  37.         ];
  38.     }
  39.     public function beforePersist(BeforeEntityPersistedEvent $event)
  40.     {
  41.         $entity $event->getEntityInstance();
  42.         
  43.         if ($entity instanceof ImportExcel) {
  44.             
  45.            
  46.            $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
  47.         
  48.         
  49.             
  50.            $spreadsheet $reader->load("uploads/".$entity->getFile());
  51.            
  52.            
  53.            $spreadsheetToArray $spreadsheet->getActiveSheet()->toArray();
  54.            
  55.            $headers=$spreadsheetToArray[0];
  56.            $dataFiltred=[];
  57.            $allData=[];
  58.            foreach($spreadsheetToArray as $singleRow){
  59.             if($headers == $singleRow){
  60.                 continue;
  61.             }
  62.             foreach($headers as $key=>$value){
  63.                 if($value===null or $value===""){
  64.                     continue;
  65.                 }
  66.                 $dataFiltred[str_replace(" ","",$value)]=$singleRow[$key];
  67.             }
  68.             $allData[]= $dataFiltred;
  69.         }
  70.        // dd($allData);
  71.        
  72.        $vendor $this->em->getRepository(Vendor::class)->findOneBy(["user"=>$this->security->getUser()]);
  73.        if($vendor){
  74.            $counterImported=0;
  75.            $counterIgnored 0;
  76.         foreach($allData as $singleData){
  77.            
  78.             $product = new Product();
  79.             
  80.             //BySamir : ToModify
  81.             $product->setName((string)$singleData["NOM_PRODUIT"]);
  82.             $product->setSkuCode((string)$singleData["CODE_EAN"]);
  83.             $product->setName((string)$singleData["NOM_PRODUIT"]);
  84.             $cat1 =  $this->em->getRepository(CategoryProduct::class)->findOneBy(["name"=>$singleData["CAT1"]]);
  85.             $cat2 =  $this->em->getRepository(CategoryProduct::class)->findOneBy(["name"=>$singleData["CAT2"]]);
  86.             $cat3 =  $this->em->getRepository(CategoryProduct::class)->findOneBy(["name"=>$singleData["CAT3"]]);
  87.             $cat4 =  $this->em->getRepository(CategoryProduct::class)->findOneBy(["name"=>$singleData["CAT4"]]);
  88.             $cat5 =  $this->em->getRepository(CategoryProduct::class)->findOneBy(["name"=>$singleData["CAT5"]]);
  89.             $brand =  $this->em->getRepository(Brand::class)->findOneBy(["name"=>$singleData["MARQUE"]]);
  90.             if($cat1){
  91.                 $product->addCategoryProduct($cat1);
  92.             }
  93.             if($cat2){
  94.                 $product->addCategoryProduct($cat2);
  95.             }
  96.             if($cat3){
  97.                 $product->addCategoryProduct($cat3);
  98.             }
  99.             if($cat4){
  100.                 $product->addCategoryProduct($cat4);
  101.             }
  102.             if($cat5){
  103.                 $product->addCategoryProduct($cat5);
  104.             }
  105.             
  106.             if($brand){
  107.                 $product->setBrand($brand);
  108.             }else{
  109.                 $brand = new Brand();
  110.                 $brand->setName((string)$singleData["MARQUE"]);
  111.                 $product->setBrand($brand);
  112.             }
  113.             
  114.             $product->setPrice((float)$singleData["PRIX_VENTE"] * 100 );
  115.             $product->setOldPrice((float)$singleData["ANCIEN_PRIX"] * 100 );
  116.             $product->setQuantity((int)$singleData["STOCK"]);
  117.             if($singleData["IMAGE"]){
  118.                 $newImagePath $this->slugify($singleData["NOM_PRODUIT"]);
  119.                 copy($singleData["IMAGE"], "uploads/".$newImagePath);
  120.                 $product->setImage($newImagePath);
  121.             }
  122.             
  123.             $product->setShortDescription((string)$singleData["DESCRIPTION_COURTE"]);
  124.             $product->setDescription((string)$singleData["DESCRIPTION_COMPLETE"]);
  125.             $product->setVendor($vendor);
  126.             
  127.             $this->em->persist($product);
  128.             
  129.             $counterImported $counterImported 1;
  130.         }
  131.         
  132.         $entity->setTotalLinesImported($counterImported);
  133.         $entity->setTotalLinesIgnored($counterIgnored);
  134.        }
  135.      
  136.            
  137.            
  138.         }
  139.         if ($entity instanceof DemandeFund) {
  140.             foreach($entity->getOrders() as $singleOrder){
  141.                 $singleOrder->setDemandeFund($entity);
  142.                 $entity->addOrder($singleOrder);
  143.             }
  144.            
  145.         }
  146.         if ($entity instanceof Vendor) {
  147.             
  148.             $entity->setSimulateUsername("");
  149.             $entity->getUser()->setRoles(["ROLE_VENDOR"]);
  150.             $entity->getUser()->setPassword(
  151.                 $this->passwordEncoder->encodePassword(
  152.                          $entity->getUser(),
  153.                          $entity->getUser()->getPassword()
  154.              ));
  155.              //dd($entity);
  156.         }
  157.         if ($entity instanceof Product ) {
  158.             $entity->setSkuCodeShop("OM".$entity->getCreatedAt()->format("ymdhs").$entity->getId());
  159.             $vendor $this->em->getRepository(Vendor::class)->findOneBy(["user"=>$this->security->getUser()]);
  160.             
  161.             $entity->setVendor($vendor);
  162.            
  163.         }
  164.      
  165.     }
  166.     public function beforeUpdated(BeforeEntityUpdatedEvent $event)
  167.     {
  168.         $entity $event->getEntityInstance();
  169.         if ($entity instanceof DemandeFund) {
  170.             foreach($entity->getOrders() as $singleOrder){
  171.                 $singleOrder->setDemandeFund($entity);
  172.                 $entity->addOrder($singleOrder);
  173.             }
  174.            
  175.         }
  176.         if ($entity instanceof Vendor) {
  177.             //dd($entity->getUser()->getPassword());
  178.             
  179.             /*$entity->getUser()->setRoles(["ROLE_VENDOR"]);
  180.             $entity->getUser()->setPassword(
  181.                 $this->passwordEncoder->encodePassword(
  182.                          $entity->getUser(),
  183.                          $entity->getUser()->getPassword()
  184.              ));*/
  185.         }
  186.         if ($entity instanceof Product ) {
  187.             $entity->setSkuCodeShop($entity->getSkuCodeShop().$entity->getId());
  188.             $vendor $this->em->getRepository(Vendor::class)->findOneBy(["user"=>$this->security->getUser()]);
  189.             
  190.             
  191.            
  192.         }
  193.      
  194.     }
  195.     public static function slugify($textstring $divider '-')
  196. {
  197.   // replace non letter or digits by divider
  198.   $text preg_replace('~[^\pL\d]+~u'$divider$text);
  199.   // transliterate
  200.   $text iconv('utf-8''us-ascii//TRANSLIT'$text);
  201.   // remove unwanted characters
  202.   $text preg_replace('~[^-\w]+~'''$text);
  203.   // trim
  204.   $text trim($text$divider);
  205.   // remove duplicate divider
  206.   $text preg_replace('~-+~'$divider$text);
  207.   // lowercase
  208.   $text strtolower($text);
  209.   if (empty($text)) {
  210.     return 'n-a';
  211.   }
  212.   return $text;
  213. }
  214. }