<?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);
}
}