<?php
/**
* Created by PhpStorm.
* User: mario
* Date: 30/06/2019
* Time: 22:52
*/
namespace App\Admin;
use App\Entity\Seo;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\OptimisticLockException;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\ModelListType;
use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\Form\Type\CollectionType;
use Sonata\Form\Type\DatePickerType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
final class HomePageAdmin extends AbstractAdmin
{
protected $baseRouteName = 'home_page';
protected $baseRoutePattern = 'home_page';
private EntityManagerInterface $entityManager;
public function __construct(?string $code = null, ?string $class = null, ?string $baseControllerName = null, EntityManagerInterface $entityManager = null)
{
$this->entityManager = $entityManager;
parent::__construct($code, $class, $baseControllerName);
}
public function configureRoutes(RouteCollection|\Sonata\AdminBundle\Route\RouteCollectionInterface $collection): void
{
// $collection->remove('export');
// $collection->remove('create');
// $collection->remove('show');
// $collection->remove('delete');
}
protected function configureFormFields(FormMapper $form): void
{
$form
->tab('General')
->with('')
->add('name', null, array('label' => 'Nombre'))
->add('players', null, [
'label' => 'Caballos',
'query_builder' => static function (EntityRepository $er) {
return $er->createQueryBuilder('p')
->andWhere('p.broodmares = :broodmares')
->setParameter('broodmares', false)
->orderBy('p.name', 'ASC');
},
])
->add('mares', null, [
'label' => 'Yeguas de cría',
'query_builder' => static function (EntityRepository $er) {
return $er->createQueryBuilder('p')
->andWhere('p.broodmares = :broodmares')
->setParameter('broodmares', true)
->orderBy('p.name', 'ASC');
},
])
->end()
->end()
->tab('Banner Principal')
->with('')
->add('main_banner', ModelListType::class, ['label' => 'Banner'], ['link_parameters' => ['context' => 'default', 'provider' => 'sonata.media.provider.image']])
->add('main_banner_mobile', ModelListType::class, ['label' => 'Banner Mobile'], ['link_parameters' => ['context' => 'default', 'provider' => 'sonata.media.provider.image']])
->add('main_banner_url', null, ['label' => 'URL'])
->end()
->end()
->tab('Banner Secundario')
->with('')
->add('secondary_banner', ModelListType::class, ['label' => 'Banner'], ['link_parameters' => ['context' => 'default', 'provider' => 'sonata.media.provider.image']])
->add('secondary_banner_mobile', ModelListType::class, ['label' => 'Banner Mobile'], ['link_parameters' => ['context' => 'default', 'provider' => 'sonata.media.provider.image']])
->add('secondary_banner_url', null, ['label' => 'URL'])
->end()
->end()
->tab('Nuestra Historia')
->with('')
->add('our_story_title', null, ['label' => 'Título'])
->add('our_story_image', ModelListType::class, ['label' => 'Imagen'], ['link_parameters' => ['context' => 'default', 'provider' => 'sonata.media.provider.image']])
->add('our_story_content', CKEditorType::class, ['label' => 'Contenido', 'required' => false])
->end()
->end()
;
if ($this->isCurrentRoute('edit')) {
$form
->tab('Seo')
->with('')
->add('seo.title', null, ['label' => 'Titulo'])
->add('seo.keywords', null, ['label' => 'Palabras claves'])
->add('seo.description', TextareaType::class, ['label' => 'Descripción', 'required' => false])
->add('seo.share_image', ModelListType::class, ['label' => 'Imagen para compartir', 'required' => false], ['link_parameters' => ['context' => 'default', 'provider' => 'sonata.media.provider.image',]])
->end()
->end();
}
;
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper->add('name', null, array('label' => 'Nombre'));
}
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper
->addIdentifier('name', null, array('label' => 'Nombre'))
->add(ListMapper::NAME_ACTIONS, ListMapper::TYPE_ACTIONS, [
'translation_domain' => 'SonataAdminBundle',
'actions' => [
'edit' => [],
],
]);
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('name', null, array('label' => 'Nombre'))
;
}
/**
* @throws OptimisticLockException
*/
public function prePersist(object $object): void
{
$em = $this->entityManager;
$seo = new Seo();
$seo->setTitle($object->getName());
$em->persist($seo);
$em->flush($seo);
$object->setSeo($seo);
}
}