src/Service/Manager/Blocs/BlocManager.php line 266

Open in your IDE?
  1. <?php 
  2. namespace App\Service\Manager\Blocs;
  3. use Twig\Environment;
  4. use App\Entity\Blocs\Bloc;
  5. use App\Entity\Pages\Page;
  6. use App\Entity\Medias\Media;
  7. use App\Form\Blocs\BlocType;
  8. use App\Entity\Blocs\BlocLang;
  9. use App\Entity\Medias\MediaLang;
  10. use App\Service\LanguagesManager;
  11. use App\Entity\Blocs\BlocSolution;
  12. use App\Service\Manager\AdminManager;
  13. use App\Repository\Blocs\BlocRepository;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Doctrine\Persistence\ManagerRegistry;
  16. use App\Repository\Medias\MediaRepository;
  17. use App\Entity\ItemsSolution\ItemsSolution;
  18. use App\Service\Manager\Media\MediaManager;
  19. use App\Repository\Blocs\BlocLangRepository;
  20. use App\Repository\Labels\LabelBlocRepository;
  21. use App\Repository\Medias\MediaLangRepository;
  22. use Symfony\Component\Routing\RouterInterface;
  23. use App\Repository\Benefice\BeneficeRepository;
  24. use App\Repository\Blocs\BlocSolutionRepository;
  25. use Symfony\Component\Form\FormFactoryInterface;
  26. use App\Repository\Carrousel\carrouselRepository;
  27. use Symfony\Component\HttpFoundation\JsonResponse;
  28. use Symfony\Component\HttpFoundation\RequestStack;
  29. use App\Service\Manager\Media\MediaUploaderManager;
  30. use App\Service\Manager\Pages\PaletteColorsManager;
  31. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  32. class BlocManager {
  33.     private $request;
  34.     private $carrouselRepository;
  35.     private $blocRepository;
  36.     private $labelBlocRepository;
  37.     private $blocSolutionRepository;
  38.     private $beneficeRepository;
  39.     public function __construct(
  40.         private LanguagesManager $languagesManager,
  41.         private BlocRepository $repo,
  42.         private BlocLangRepository $repoLang,
  43.         private EntityManagerInterface $em,
  44.         private FormFactoryInterface $form,
  45.         private RequestStack $requestStack,
  46.         private AdminManager $adminManager,
  47.         private RouterInterface $router,
  48.         private MediaManager $mediaManager,
  49.         private PaletteColorsManager $paletteColorsManager,
  50.         private MediaUploaderManager $mediaUploaderManager,
  51.         private Environment $twig,
  52.         carrouselRepository $carrouselRepository,
  53.         BlocRepository $blocRepository,
  54.         LabelBlocRepository $labelBlocRepository,
  55.         BlocSolutionRepository $blocSolutionRepository,
  56.         BeneficeRepository $beneficeRepository,
  57.         private ParameterBagInterface $params,
  58.         private MediaRepository $mediaRepository,
  59.         private ManagerRegistry $doctrine
  60.     ){
  61.          $this->request $requestStack->getCurrentRequest();
  62.          $this->carrouselRepository $carrouselRepository;
  63.          $this->blocRepository  $blocRepository;
  64.          $this->labelBlocRepository $labelBlocRepository;
  65.          $this->blocSolutionRepository $blocSolutionRepository;
  66.          $this->beneficeRepository $beneficeRepository;
  67.     }
  68.     public function getForm($bloc$origin$idOrigin$type){
  69.         $language $this->languagesManager->getCurrentLanguage();
  70.         $actifLanguages $this->languagesManager->getAllActifLanguages();
  71.         $idBloc $bloc->getId();
  72.         $valueIdType null;
  73.         if($idBloc){
  74.             if($type == Bloc::TYPE_CARROUSEL){
  75.                $valueIdType $this->carrouselRepository->find($bloc->getIdType());
  76.             } 
  77.             else if ($type == Bloc::TYPE_LABEL_BLOC){
  78.                 $valueIdType $this->labelBlocRepository->find($bloc->getIdType());
  79.             } 
  80.             else if ($type == Bloc::TYPE_BENEFICE_BLOC || $type == Bloc::TYPE_IMAGE_CARD_BLOC){
  81.                 $valueIdType $this->beneficeRepository->find($bloc->getIdType());
  82.             }
  83.              
  84.         }
  85.       
  86.         $formType BlocType::class; 
  87.         $filesForm $files = [];
  88.         if($type == Bloc::TYPE_SLIDER || $type == Bloc::TYPE_IMAGE_TEXTE || $type == Bloc::TYPE_IMAGE || $type == Bloc::TYPE_IMAGE_CARD_BLOC ) {
  89.             $filesForm = ['file' => ['type' => null]];
  90.             $files = [
  91.                 'file' => [
  92.                     'required' => false
  93.                     'label' => 'Fichier',
  94.                     'accept_file_type' => null,
  95.                     'constraints_file' => null,
  96.                 ]
  97.             ];
  98.         }
  99.         else if($type == Bloc::TYPE_VIDEO ) {
  100.             $filesForm = [ 
  101.                 'video' => ['type' => Media::TYPE_MEDIA_VIDEO], 
  102.                 'bgVideo' => ['type' => Media::TYPE_MEDIA_BG_VIDEO]
  103.             ];
  104.             $files = [
  105.                 'video' => [
  106.                     'required' => false
  107.                     'label' => 'video',
  108.                     'accept_file_type' => 'video/mp4',
  109.                     'constraints_file' => 'video'
  110.                 ],
  111.                 'bgVideo' => [
  112.                     'required' => false
  113.                     'label' => 'Background vidéo',
  114.                     'accept_file_type' => 'image/png, image/svg+xml, image/jpeg, image/jpg',
  115.                     'constraints_file' => 'image'
  116.                 ]
  117.             ];
  118.         }
  119.         $form $this->form->create($formType$bloc, [
  120.             'type' => $type,
  121.             'valueIdType' =>  $valueIdType,
  122.             'language' => $language,
  123.             'id_home_page' =>  intval($this->params->get('id_home_page')),
  124.             'actifLanguages' => $actifLanguages,
  125.             'files' => $files
  126.             ]
  127.         );
  128.           
  129.       
  130.         //$form->get('blocLangs')->setData($blocLang);
  131.         $form->handleRequest($this->request);
  132.         if ($this->request->isMethod('POST') ) {
  133.             /*$bloc->setOrigin($origin);  
  134.             $bloc->setIdOrigin($idOrigin);*/
  135.             $bloc->setType($type);
  136.             if($form->has('positionImage') ) $bloc->setPositionImage($form->get('positionImage')->getData()); 
  137.             if($form->has('positionVideo') ) $bloc->setPositionVideo($form->get('positionVideo')->getData()); 
  138.             if($form->has('colImage') ) $bloc->setColImage($form->get('colImage')->getData()); 
  139.             if($form->has('colTxt') ) $bloc->setColTxt($form->get('colTxt')->getData()); 
  140.             if($form->has('carrousel')) $bloc->setIdType($form->get('carrousel')->getData()->getId()); 
  141.             if($form->has('label_bloc')) $bloc->setIdType($form->get('label_bloc')->getData()->getId()); 
  142.             if($form->has('benefice')) $bloc->setIdType($form->get('benefice')->getData()->getId()); 
  143.             if($form->has('item_solution')) $this->saveBlocSolution($form$bloc);  
  144.             if(!$bloc->getPosition()) {
  145.                 $position $this->repo->generateMaxPosition($origin$idOrigin);
  146.                 $bloc->setPosition($position); 
  147.             }
  148.             $this->adminManager->saveEntity($bloc);
  149.            // this if($form->has('file')) $this->saveMedia($bloc,  $form->get("file"),$mediaLang );
  150.             //if($form->has('video') && $form->get('video')->getData())  $this->saveMedia($bloc,$form->get("video"),$mediaLang, Media::TYPE_MEDIA_VIDEO);
  151.            // if($form->has('bgVideo') && $form->get('bgVideo')->getData() )  $this->saveMedia($bloc,$form->get("bgVideo"),$mediaLang,  Media::TYPE_MEDIA_BG_VIDEO);
  152.             if($form->has('bloc')) $this->saveBlocClient($form$bloc);  
  153.             $this->paletteColorsManager->saveData(get_class($bloc), $bloc->getId(),$this->request->request->get('color') );
  154.             $this->mediaManager->saveIt($actifLanguages$filesForm $form$bloc$origin);
  155.             $blocs $this->repo->getAllQb($language, ['origin' =>  ($origin), 'idOrigin' => $idOrigin])->getResult();
  156.             $html $this->twig->render('admin/blocs/list_bloc.html.twig', [
  157.                 'blocs' => $blocs
  158.             ]);
  159.             return new JsonResponse($html);
  160.         }
  161.         
  162.         return [
  163.             'form' => $form->createView(),
  164.             //'blocLang' => $blocLang,
  165.         ];
  166.     }
  167.  
  168.     public function saveBlocClient($form$bloc){
  169.         $client $form->get('client_bloc')->getData();
  170.         $bloc->setClientBloc($client);
  171.      
  172.     }
  173.     public function saveBlocSolution($form$bloc){
  174.         $ItemsSolutionBlocs $form->get('item_solution')->getData();
  175.         $postItemsSolutionBlocs = isset($_POST['bloc']['item_solution']) ? $_POST['bloc']['item_solution'] : [];
  176.      
  177.         $position 0;
  178.      
  179.         foreach ($postItemsSolutionBlocs as $ItemsSolution) {
  180.             $position++;
  181.             /** @var BlocSolution ItemsSolutionBloc */
  182.             $ItemsSolutionBloc $this->em->getRepository(BlocSolution::class)->findOneBy(['itemSolution' => $ItemsSolution'bloc' => $bloc]);
  183.             if ($ItemsSolutionBloc) {
  184.                 $ItemsSolutionBloc->setPosition($position);
  185.                 $this->em->flush();
  186.                 continue;
  187.             }
  188.             $blocItemsSolution = new BlocSolution();
  189.             $blocItemsSolution->setItemSolution($this->em->getReference(ItemsSolution::class, $ItemsSolution));
  190.             $blocItemsSolution->setBloc($bloc);
  191.             $blocItemsSolution->setPosition($position);
  192.             $bloc->addBlocSolution($blocItemsSolution);
  193.             $this->em->persist($blocItemsSolution);
  194.             
  195.         }
  196.         foreach ($bloc->getBlocSolutions() as $blocSolution) {
  197.             $existBT array_filter($ItemsSolutionBlocs, function ($solutionId) use ($blocSolution) {
  198.                 return $blocSolution->getItemSolution()->getId() === $solutionId;
  199.             } );
  200.             if(count($existBT) === 0) {
  201.                 $bloc->removeBlocSolution($blocSolution);
  202.             }
  203.         }
  204.         
  205.       
  206.     }
  207.     public function saveMedia($bloc$fileForm$idLang$type null) {
  208.         $media $this->mediaManager->getMedias($bloc$type);
  209.         if(!$media$media $this->mediaUploaderManager->addMedia($fileFormget_class($bloc) , $bloc->getId(), $type0,$idLang);
  210.         else  {
  211.             $mediaVal "";
  212.             if (array_key_exists(0,$media)) $mediaVal $media[0];
  213.             else $mediaVal $media[''][0];
  214.           
  215.             //edit media 3 params
  216.             $media $this->mediaUploaderManager->editMedia($mediaVal$fileForm,$idLang); 
  217.         }
  218.         
  219.         $this->adminManager->saveEntity($mediafalse);
  220.     } 
  221.     
  222.     public function sortable($data){
  223.         foreach($data as $key => $order) {
  224.             $bloc $this->repo->find($order);
  225.             if($bloc){
  226.                 $bloc->setPosition($key 1);
  227.                 $this->em->persist($bloc);
  228.             }
  229.         }
  230.         $this->em->flush();
  231.     }
  232.     
  233.     public function getBlocs($item){
  234.         $origin =$item::class;
  235.         $origin str_replace('Proxies\__CG__\\'''$origin);
  236.         $language $this->languagesManager->getCurrentLanguage();
  237.         $blocs $this->blocRepository->dataBlocs($language, [
  238.              'idOrigin' => $item->getId(), 
  239.              'origin'=> $origin,
  240.              'language' => $language->getId(), //  [0, $language->getId()],
  241.              'media_bloc' => true,
  242.              'clients_right_left' => true,
  243.         ]);
  244.         
  245.             $tab_carrousel $tab_label_bloc $tab_benefice_bloc = [];
  246.             foreach($blocs as $bloc){
  247.                 $type $bloc['type'] ; 
  248.                 $idType $bloc['idType'] ;
  249.                 if($type == Bloc::TYPE_LABEL_BLOC){
  250.                     array_push($tab_label_bloc$idType);
  251.                 }
  252.                 else if($type == BLOC::TYPE_CARROUSEL){ 
  253.                     array_push($tab_carrousel$idType);
  254.                 }
  255.                 else if($type == BLOC::TYPE_BENEFICE_BLOC || $type == Bloc::TYPE_IMAGE_CARD_BLOC){
  256.                     array_push($tab_benefice_bloc$idType);
  257.                 }
  258.                
  259.             $labels $this->labelBlocRepository->getAllQb($language, [
  260.                 'isEnable' => 1
  261.                 'details_label' => true,
  262.                 'ids' => $tab_label_bloc,
  263.                 'language' => $language->getId()
  264.             ])->getResult();
  265.         }
  266.             $carrousels $this->carrouselRepository->getAllQb($language, [
  267.                 'enable' => 1
  268.                 'details_carrousel' => true,
  269.                 'ids' => $tab_carrousel
  270.             ])->getResult();
  271.             $benefice $this->beneficeRepository->getAllQb($language, [
  272.                 'isEnable' => 1
  273.                 'details_benefice' => true,
  274.                 'ids' => $tab_benefice_bloc,
  275.                 'language' => $language
  276.             ])->getResult();
  277.         foreach($blocs as $key => $bloc){
  278.                 $idType $bloc['idType'];
  279.              
  280.                  if($bloc['type'] == Bloc::TYPE_LABEL_BLOC){
  281.                     $blocs[$key][ Bloc::TYPE_LABEL_BLOC ] = [];
  282.                     $blocs =  $this->getElements($labels$idType$blocs$keyBloc::TYPE_LABEL_BLOC);
  283.                 } 
  284.                 if($bloc['type'] == Bloc::TYPE_BENEFICE_BLOC){
  285.                     $blocs[$key][Bloc::TYPE_BENEFICE_BLOC] = [];
  286.                     $blocs =  $this->getElements($benefice$idType$blocs$keyBloc::TYPE_BENEFICE_BLOC);
  287.                 }
  288.                 if($bloc['type'] == Bloc::TYPE_IMAGE_CARD_BLOC){
  289.                     $blocs[$key][Bloc::TYPE_IMAGE_CARD_BLOC] = [];
  290.                     $blocs =  $this->getElements($benefice$idType$blocs$keyBloc::TYPE_IMAGE_CARD_BLOC);
  291.                 }
  292.                   // carrousels
  293.                   if($bloc['type'] == Bloc::TYPE_CARROUSEL){
  294.                     $blocs[$key][Bloc::TYPE_CARROUSEL] = [];
  295.                     $blocs $this->getElements($carrousels$idType$blocs$keyBloc::TYPE_CARROUSEL); 
  296.                 } 
  297.                 else if($bloc['type'] == Bloc::TYPE_SOLUTION_BLOC){
  298.                     $solutionBloc $this->blocSolutionRepository->getAllQb($language, [
  299.                         'enable' => 1
  300.                         'ids' => $bloc['id']
  301.                     ])->getResult();
  302.                     $blocs[$key][ Bloc::TYPE_SOLUTION_BLOC ] = $solutionBloc ;
  303.                 } 
  304.                
  305.             }
  306.         return $blocs;
  307.     }
  308.     public function getElements($components$idType$blocs$key$type){
  309.         $keys array_keys(array_column($components'id'), $idType);
  310.         foreach($keys as $keyId => $keyTab){
  311.             if( $type == Bloc::TYPE_LABEL_BLOC){
  312.                 if($keyId == 0){
  313.                     $blocs[$key]['info_generic'] = [
  314.                         'description' => $components[$keyTab]['description'],
  315.                         'classe' => $components[$keyTab]['classe'],
  316.                     ];
  317.                 }
  318.             } 
  319.             array_push($blocs[$key][$type], $components[$keyTab]); 
  320.         }
  321.         return $blocs ;
  322.     }
  323.     public function getBlocsSliderHeader($item){
  324.         $origin $item::class;
  325.         $origin str_replace('Proxies\__CG__\\'''$origin);
  326.         $language $this->languagesManager->getCurrentLanguage();
  327.         $blocs $this->blocRepository->dataBlocs($language, [
  328.             'idOrigin' => $item->getId(), 
  329.             'origin'=> $origin,
  330.             'positionImage' => Media::POSITION_HEADER,
  331.             'type' => BLOC::TYPE_CARROUSEL,
  332.             'media_bloc' => true,
  333.             'clients_right_left' => true,
  334.         ]);
  335.         
  336.         $tab_carrousel =  [];
  337.         foreach($blocs as $bloc){
  338.             $type $bloc['type'] ; 
  339.             $idType $bloc['idType'] ;
  340.             array_push($tab_carrousel$idType);
  341.             $carrousels $this->carrouselRepository->getAllQb($language, [
  342.                 'enable' => 1
  343.                 'details_carrousel' => true,
  344.                 'ids' => $tab_carrousel
  345.             ])->getResult();
  346.             foreach($blocs as $key => $bloc){
  347.                 $idType $bloc['idType'];
  348.                 $blocs[$key][Bloc::TYPE_CARROUSEL] = [];
  349.                 $blocs $this->getElements($carrousels$idType$blocs$keyBloc::TYPE_CARROUSEL); 
  350.  
  351.             }
  352.         }
  353.         return $blocs;
  354.     }
  355. }