<?php 
 
namespace App\Controller; 
 
use Sonata\AdminBundle\Controller\CRUDController; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\RequestStack; 
use Doctrine\ORM\EntityManagerInterface; 
 
 
use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\Extension\Core\Type\TextareaType; 
use Symfony\Component\Form\Extension\Core\Type\UrlType; 
 
use Symfony\Component\Serializer\Serializer; 
use Symfony\Component\Serializer\Encoder\XmlEncoder; 
use Symfony\Component\Serializer\Encoder\JsonEncoder; 
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; 
 
use Symfony\Component\Filesystem\Filesystem; 
use App\Entity\Company; 
use App\Entity\Image; 
use App\Entity\CmsHomePage; 
use App\Form\ImageType; 
use Symfony\Component\Filesystem\Exception\IOExceptionInterface; 
 
class CMSHomePageController extends CRUDController 
{ 
    protected $requestStack; 
    private $em; 
 
    public function __construct(RequestStack $requestStack, EntityManagerInterface $em){ 
        $this->requestStack = $requestStack; 
        $this->em = $em; 
    } 
 
    public function listAction() 
    { 
        $json_data = null; 
 
        $CMSHomePage = $this->em->getRepository(CmsHomePage::class)->findOneBy(["dataKey"=>"CMSHomePage"]); 
        if ($CMSHomePage) { 
          if (!empty($CMSHomePage->getDataValue())) { 
            $json_data = json_decode($CMSHomePage->getDataValue(), true); 
          } 
        } 
 
        $images = [ 
          'producerOfTheWeekImage', 
          'bannerImage', 
          'bannerNextImage', 
          'bannerTopRightImage', 
          'bannerBottomRightImage', 
        ]; 
 
        if ($json_data) { 
          $json_data['producerOfTheWeek'] = $this->em->getRepository(Company::class)->findOneBy( 
            [ 
              'id' => $json_data['producerOfTheWeek'] 
            ] 
          ); 
 
          foreach($images as $image) { 
            if(!empty($json_data[$image])) { 
              $json_data[$image] = $this->em->getRepository(Image::class)->findOneBy( 
                [ 
                  'id' => $json_data[$image] 
                ] 
              ); 
            } 
          } 
 
        } 
 
        $twigData = array(); 
        $form = $this->createFormBuilder($json_data) 
            ->add('metaTitle', TextType::class, array( 
                'label' => 'Meta Title' 
            )) 
            ->add('metaDescription', TextType::class, array( 
                'label' => 'Meta Description' 
            )) 
            ->add('bannerTitle', TextType::class, array( 
                'label' => 'Titre bannière' 
            )) 
            ->add('bannerDescription', TextType::class, array( 
                'label' => 'Description bannière' 
            )) 
            ->add('bannerButton', TextType::class, array( 
                'label' => 'Bouton bannière' 
            )) 
            ->add('bannerButtonLink', TextType::class, array( 
                'label' => 'Lien Bouton bannière' 
            )) 
            ->add('bannerImage', \App\Form\Type\ImageType::class, array( 
                'label' => 'Image', 
                'required' => false, 
                'preview' => true, 
                'preview_height' => '100', 
                'preview_width' => '100', 
                'category' => 'cms_homepage_banner' 
            )) 
            ->add('bannerNextTitle', TextType::class, array( 
                'label' => 'Titre bannière' 
            )) 
            ->add('bannerNextDescription', TextType::class, array( 
                'label' => 'Description bannière' 
            )) 
            ->add('bannerNextButton', TextType::class, array( 
                'label' => 'Bouton bannière' 
            )) 
            ->add('bannerNextButtonLink', TextType::class, array( 
                'label' => 'Lien Bouton bannière' 
            )) 
            ->add('bannerNextImage', \App\Form\Type\ImageType::class, array( 
                'label' => 'Image', 
                'required' => false, 
                'preview' => true, 
                'preview_height' => '100', 
                'preview_width' => '100', 
                'category' => 'cms_homepage_banner' 
            )) 
            ->add('bannerTopRightTitle', TextType::class, array( 
                'label' => 'Titre bannière' 
            )) 
            ->add('bannerTopRightLinkText', TextType::class, array( 
                'label' => 'Lien texte' 
            )) 
            ->add('bannerTopRightLink', TextType::class, array( 
                'label' => 'Lien URL' 
            )) 
            ->add('bannerTopRightImage', \App\Form\Type\ImageType::class, array( 
                'label' => 'Image', 
                'required' => false, 
                'preview' => true, 
                'preview_height' => '100', 
                'preview_width' => '100', 
                'category' => 'cms_homepage_banner' 
            )) 
            ->add('bannerBottomRightTitle', TextType::class, array( 
                'label' => 'Titre bannière' 
            )) 
            ->add('bannerBottomRightImage', \App\Form\Type\ImageType::class, array( 
                'label' => 'Image', 
                'required' => false, 
                'preview' => true, 
                'preview_height' => '100', 
                'preview_width' => '100', 
                'category' => 'cms_homepage_banner' 
            )) 
            ->add('bannerBottomRightLinkText', TextType::class, array( 
                'label' => 'Lien URL' 
            )) 
            ->add('bannerBottomRightLink', TextType::class, array( 
                'label' => 'Lien URL' 
            )) 
            ->add('widget1Title', TextType::class, array( 
                'label' => 'Titre Widget 1' 
            )) 
            ->add('widget1Text', TextareaType::class, array( 
                'label' => 'Text Widget 1' 
            )) 
            ->add('widget2Title', TextType::class, array( 
                'label' => 'Titre Widget 2' 
            )) 
            ->add('widget2Text', TextareaType::class, array( 
                'label' => 'Text Widget 2' 
            )) 
            ->add('widget3Title', TextType::class, array( 
                'label' => 'Titre Widget 3' 
            )) 
            ->add('widget3Text', TextareaType::class, array( 
                'label' => 'Text Widget 3' 
            )) 
            ->add('producerOfTheWeek', EntityType::class, array( 
                'label' => 'Producteur de la semaine', 
                'class' => 'App\Entity\Company', 
                'choice_label' => 'name' 
            )) 
            ->add('producerOfTheWeekImage', \App\Form\Type\ImageType::class, array( 
                'label' => 'Producteur de la semaine Image', 
                'required' => false, 
                'preview' => true, 
                'preview_height' => '100', 
                'preview_width' => '100', 
                'category' => 'cms_homepage_weekProducer' 
            )) 
            ->add('producerOfTheWeekText', TextareaType::class, array( 
                'label' => 'Texte' 
            )) 
            ->add('widget4Title', TextType::class, array( 
                'label' => 'Titre Widget 4' 
            )) 
            ->add('widget4Text', TextareaType::class, array( 
                'label' => 'Text Widget 4' 
            )) 
            ->add('widget4Link', TextType::class, array( 
                'label' => 'Lien Widget 4' 
            )) 
            ->add('widget4Button', TextType::class, array( 
                'label' => 'Button Widget 4' 
            )) 
            ->add('widget5Title', TextType::class, array( 
                'label' => 'Titre Widget 5' 
            )) 
            ->add('widget5Text', TextareaType::class, array( 
                'label' => 'Text Widget 5' 
            )) 
            ->add('widget5Link', TextType::class, array( 
                'label' => 'Lien Widget 5' 
            )) 
            ->add('widget5Button', TextType::class, array( 
                'label' => 'Button Widget 5' 
            )) 
            ->add('widget6Title', TextType::class, array( 
                'label' => 'Titre Widget 6' 
            )) 
            ->add('widget6Text', TextareaType::class, array( 
                'label' => 'Text Widget 6' 
            )) 
            ->add('widget6Link', TextType::class, array( 
                'label' => 'Lien Widget 6' 
            )) 
            ->add('widget6Button', TextType::class, array( 
                'label' => 'Button Widget 6' 
            )) 
            ->add('submit', SubmitType::class, array( 
                'label' => 'Enregistrer' 
            )) 
            ->getForm(); 
 
        $twigData['form'] = $form->createView(); 
        $form->handleRequest($this->requestStack->getCurrentRequest()); 
        if($form->isSubmitted() && $form->isValid()){ 
            $form_data = $form->getData(); 
            //Erase some data for the Serializer on the Company 
            $producer = $form_data['producerOfTheWeek']; 
            $form_data['producerOfTheWeek'] = $form_data['producerOfTheWeek']->getId(); 
 
            foreach($images as $image) { 
              if(!empty($form_data[$image])) { 
                $form_data[$image] = $form_data[$image]->getId(); 
              } else { 
                if(!empty($json_data[$image])) { 
                  $form_data[$image] = $json_data[$image]->getId(); 
                } 
              } 
            } 
 
            $json = json_encode($form_data); 
 
            $data['producerOfTheWeek'] = $producer; 
 
            $CMSHomePage = $this->em->getRepository(CmsHomePage::class)->findOneBy(["dataKey"=>"CMSHomePage"]); 
            if (!$CMSHomePage) { 
              $CMSHomePage = new CmsHomePage(); 
              $CMSHomePage->setDataKey("CMSHomePage"); 
            } 
 
            $CMSHomePage->setDataValue($json); 
            $this->em->persist($CMSHomePage); 
            $this->em->flush(); 
            // $fileSystem->dumpFile($file, $json); 
 
            $referer = $this->requestStack->getCurrentRequest()->headers->get('referer'); 
            return $this->redirect($referer); 
        } 
 
        return $this->renderWithExtraParams('Omelo/editHomePage.html.twig', $twigData); 
    } 
}