src/Controller/CMSHomePageController.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Sonata\AdminBundle\Controller\CRUDController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  8. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  9. use Symfony\Component\Form\Extension\Core\Type\TextType;
  10. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  11. use Symfony\Component\Form\Extension\Core\Type\UrlType;
  12. use Symfony\Component\Serializer\Serializer;
  13. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  14. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  15. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  16. use Symfony\Component\Filesystem\Filesystem;
  17. use App\Entity\Company;
  18. use App\Entity\Image;
  19. use App\Entity\CmsHomePage;
  20. use App\Form\ImageType;
  21. use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
  22. class CMSHomePageController extends CRUDController
  23. {
  24.     protected $requestStack;
  25.     private $em;
  26.     public function __construct(RequestStack $requestStackEntityManagerInterface $em){
  27.         $this->requestStack $requestStack;
  28.         $this->em $em;
  29.     }
  30.     public function listAction()
  31.     {
  32.         $json_data null;
  33.         $CMSHomePage $this->em->getRepository(CmsHomePage::class)->findOneBy(["dataKey"=>"CMSHomePage"]);
  34.         if ($CMSHomePage) {
  35.           if (!empty($CMSHomePage->getDataValue())) {
  36.             $json_data json_decode($CMSHomePage->getDataValue(), true);
  37.           }
  38.         }
  39.         $images = [
  40.           'producerOfTheWeekImage',
  41.           'bannerImage',
  42.           'bannerNextImage',
  43.           'bannerTopRightImage',
  44.           'bannerBottomRightImage',
  45.         ];
  46.         if ($json_data) {
  47.           $json_data['producerOfTheWeek'] = $this->em->getRepository(Company::class)->findOneBy(
  48.             [
  49.               'id' => $json_data['producerOfTheWeek']
  50.             ]
  51.           );
  52.           foreach($images as $image) {
  53.             if(!empty($json_data[$image])) {
  54.               $json_data[$image] = $this->em->getRepository(Image::class)->findOneBy(
  55.                 [
  56.                   'id' => $json_data[$image]
  57.                 ]
  58.               );
  59.             }
  60.           }
  61.         }
  62.         $twigData = array();
  63.         $form $this->createFormBuilder($json_data)
  64.             ->add('metaTitle'TextType::class, array(
  65.                 'label' => 'Meta Title'
  66.             ))
  67.             ->add('metaDescription'TextType::class, array(
  68.                 'label' => 'Meta Description'
  69.             ))
  70.             ->add('bannerTitle'TextType::class, array(
  71.                 'label' => 'Titre bannière'
  72.             ))
  73.             ->add('bannerDescription'TextType::class, array(
  74.                 'label' => 'Description bannière'
  75.             ))
  76.             ->add('bannerButton'TextType::class, array(
  77.                 'label' => 'Bouton bannière'
  78.             ))
  79.             ->add('bannerButtonLink'TextType::class, array(
  80.                 'label' => 'Lien Bouton bannière'
  81.             ))
  82.             ->add('bannerImage', \App\Form\Type\ImageType::class, array(
  83.                 'label' => 'Image',
  84.                 'required' => false,
  85.                 'preview' => true,
  86.                 'preview_height' => '100',
  87.                 'preview_width' => '100',
  88.                 'category' => 'cms_homepage_banner'
  89.             ))
  90.             ->add('bannerNextTitle'TextType::class, array(
  91.                 'label' => 'Titre bannière'
  92.             ))
  93.             ->add('bannerNextDescription'TextType::class, array(
  94.                 'label' => 'Description bannière'
  95.             ))
  96.             ->add('bannerNextButton'TextType::class, array(
  97.                 'label' => 'Bouton bannière'
  98.             ))
  99.             ->add('bannerNextButtonLink'TextType::class, array(
  100.                 'label' => 'Lien Bouton bannière'
  101.             ))
  102.             ->add('bannerNextImage', \App\Form\Type\ImageType::class, array(
  103.                 'label' => 'Image',
  104.                 'required' => false,
  105.                 'preview' => true,
  106.                 'preview_height' => '100',
  107.                 'preview_width' => '100',
  108.                 'category' => 'cms_homepage_banner'
  109.             ))
  110.             ->add('bannerTopRightTitle'TextType::class, array(
  111.                 'label' => 'Titre bannière'
  112.             ))
  113.             ->add('bannerTopRightLinkText'TextType::class, array(
  114.                 'label' => 'Lien texte'
  115.             ))
  116.             ->add('bannerTopRightLink'TextType::class, array(
  117.                 'label' => 'Lien URL'
  118.             ))
  119.             ->add('bannerTopRightImage', \App\Form\Type\ImageType::class, array(
  120.                 'label' => 'Image',
  121.                 'required' => false,
  122.                 'preview' => true,
  123.                 'preview_height' => '100',
  124.                 'preview_width' => '100',
  125.                 'category' => 'cms_homepage_banner'
  126.             ))
  127.             ->add('bannerBottomRightTitle'TextType::class, array(
  128.                 'label' => 'Titre bannière'
  129.             ))
  130.             ->add('bannerBottomRightImage', \App\Form\Type\ImageType::class, array(
  131.                 'label' => 'Image',
  132.                 'required' => false,
  133.                 'preview' => true,
  134.                 'preview_height' => '100',
  135.                 'preview_width' => '100',
  136.                 'category' => 'cms_homepage_banner'
  137.             ))
  138.             ->add('bannerBottomRightLinkText'TextType::class, array(
  139.                 'label' => 'Lien URL'
  140.             ))
  141.             ->add('bannerBottomRightLink'TextType::class, array(
  142.                 'label' => 'Lien URL'
  143.             ))
  144.             ->add('widget1Title'TextType::class, array(
  145.                 'label' => 'Titre Widget 1'
  146.             ))
  147.             ->add('widget1Text'TextareaType::class, array(
  148.                 'label' => 'Text Widget 1'
  149.             ))
  150.             ->add('widget2Title'TextType::class, array(
  151.                 'label' => 'Titre Widget 2'
  152.             ))
  153.             ->add('widget2Text'TextareaType::class, array(
  154.                 'label' => 'Text Widget 2'
  155.             ))
  156.             ->add('widget3Title'TextType::class, array(
  157.                 'label' => 'Titre Widget 3'
  158.             ))
  159.             ->add('widget3Text'TextareaType::class, array(
  160.                 'label' => 'Text Widget 3'
  161.             ))
  162.             ->add('producerOfTheWeek'EntityType::class, array(
  163.                 'label' => 'Producteur de la semaine',
  164.                 'class' => 'App\Entity\Company',
  165.                 'choice_label' => 'name'
  166.             ))
  167.             ->add('producerOfTheWeekImage', \App\Form\Type\ImageType::class, array(
  168.                 'label' => 'Producteur de la semaine Image',
  169.                 'required' => false,
  170.                 'preview' => true,
  171.                 'preview_height' => '100',
  172.                 'preview_width' => '100',
  173.                 'category' => 'cms_homepage_weekProducer'
  174.             ))
  175.             ->add('producerOfTheWeekText'TextareaType::class, array(
  176.                 'label' => 'Texte'
  177.             ))
  178.             ->add('widget4Title'TextType::class, array(
  179.                 'label' => 'Titre Widget 4'
  180.             ))
  181.             ->add('widget4Text'TextareaType::class, array(
  182.                 'label' => 'Text Widget 4'
  183.             ))
  184.             ->add('widget4Link'TextType::class, array(
  185.                 'label' => 'Lien Widget 4'
  186.             ))
  187.             ->add('widget4Button'TextType::class, array(
  188.                 'label' => 'Button Widget 4'
  189.             ))
  190.             ->add('widget5Title'TextType::class, array(
  191.                 'label' => 'Titre Widget 5'
  192.             ))
  193.             ->add('widget5Text'TextareaType::class, array(
  194.                 'label' => 'Text Widget 5'
  195.             ))
  196.             ->add('widget5Link'TextType::class, array(
  197.                 'label' => 'Lien Widget 5'
  198.             ))
  199.             ->add('widget5Button'TextType::class, array(
  200.                 'label' => 'Button Widget 5'
  201.             ))
  202.             ->add('widget6Title'TextType::class, array(
  203.                 'label' => 'Titre Widget 6'
  204.             ))
  205.             ->add('widget6Text'TextareaType::class, array(
  206.                 'label' => 'Text Widget 6'
  207.             ))
  208.             ->add('widget6Link'TextType::class, array(
  209.                 'label' => 'Lien Widget 6'
  210.             ))
  211.             ->add('widget6Button'TextType::class, array(
  212.                 'label' => 'Button Widget 6'
  213.             ))
  214.             ->add('submit'SubmitType::class, array(
  215.                 'label' => 'Enregistrer'
  216.             ))
  217.             ->getForm();
  218.         $twigData['form'] = $form->createView();
  219.         $form->handleRequest($this->requestStack->getCurrentRequest());
  220.         if($form->isSubmitted() && $form->isValid()){
  221.             $form_data $form->getData();
  222.             //Erase some data for the Serializer on the Company
  223.             $producer $form_data['producerOfTheWeek'];
  224.             $form_data['producerOfTheWeek'] = $form_data['producerOfTheWeek']->getId();
  225.             foreach($images as $image) {
  226.               if(!empty($form_data[$image])) {
  227.                 $form_data[$image] = $form_data[$image]->getId();
  228.               } else {
  229.                 if(!empty($json_data[$image])) {
  230.                   $form_data[$image] = $json_data[$image]->getId();
  231.                 }
  232.               }
  233.             }
  234.             $json json_encode($form_data);
  235.             $data['producerOfTheWeek'] = $producer;
  236.             $CMSHomePage $this->em->getRepository(CmsHomePage::class)->findOneBy(["dataKey"=>"CMSHomePage"]);
  237.             if (!$CMSHomePage) {
  238.               $CMSHomePage = new CmsHomePage();
  239.               $CMSHomePage->setDataKey("CMSHomePage");
  240.             }
  241.             $CMSHomePage->setDataValue($json);
  242.             $this->em->persist($CMSHomePage);
  243.             $this->em->flush();
  244.             // $fileSystem->dumpFile($file, $json);
  245.             $referer $this->requestStack->getCurrentRequest()->headers->get('referer');
  246.             return $this->redirect($referer);
  247.         }
  248.         return $this->renderWithExtraParams('Omelo/editHomePage.html.twig'$twigData);
  249.     }
  250. }