<?php
namespace AdminBundle\Admin\Vehicles\Special;
use AdminBundle\Admin\Vehicles\BaseVehicleAdmin;
use AdminBundle\Form\Type\ContentType;
use CoreBundle\Entity\Dealer;
use CoreBundle\Entity\Model;
use CoreBundle\Entity\Vehicles\RecommendGroup;
use CoreBundle\Model\Vehicles\VehicleType;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\ModelListType;
use Sonata\AdminBundle\Form\Type\AdminType;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\Form\Type\CollectionType;
use Sonata\MediaBundle\Form\Type\MediaType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class VehicleAdmin extends BaseVehicleAdmin
{
protected $baseRouteName = 'vehicle-special';
protected $baseRoutePattern = 'vehicle-special-action';
protected function getVehicleType(): int
{
return VehicleType::SPECIAL_TYPE;
}
public function getVariationAdminCode()
{
return 'admin.vehicles.special_variation';
}
protected function getModelDealer(Dealer $Dealer)
{
$queryBuilder = $this->getModelManager()
->getEntityManager(Model::class)
->createQueryBuilder('m')
->select('m')
->from('CoreBundle:Model', 'm');
return $queryBuilder;
}
protected function configureFormFields(FormMapper $formMapper): void
{
$this->checkByRole(['ROLE_SUPER_ADMIN', 'ROLE_CONTENT_MANAGER', 'ROLE_DC_MANAGER']);
$User = $this->getUser();
if (!$Dealer = $User->getDealer()) {
throw new AccessDeniedException();
}
$vehicleId = null;
if ($this->getSubject()) {
$vehicleId = $this->getSubject()->getId();
}
$queryBuilder = $this->getModelDealer($Dealer);
$queryBuilderCategory = $this->getCategoryByVehicleType();
$queryBuilderGroup = $this->getModelGrouplDealer($Dealer);
$formMapper
->tab('Основная информация')
->with('Контент', ['class' => 'col-lg-6'])
->add('content', ContentType::class, ['label' => false], [
'edit' => 'inline',
'sortable' => 'position',
])
->end()
->with('Доп. информация', ['class' => 'col-lg-6'])
->add('adminName', TextType::class, ['label' => 'Внутреннее название', 'required' => false])
->add(
'model',
ModelType::class,
['label' => 'Модель', 'required' => true, 'query' => $queryBuilder]
)
->add('recommend_group', EntityType::class, [
'class' => RecommendGroup::class,
'label' => 'Входит в подборки',
'multiple' => true,
'required' => false,
])
->add('category', ModelType::class, ['label' => 'Категория', 'required' => true, 'query' => $queryBuilderCategory])
->add('group', ModelType::class, ['label' => 'Группа', 'required' => false, 'query' => $queryBuilderGroup])
->add('url', null, ['label' => 'URL'])
->add('image', MediaType::class, [
'provider' => 'sonata.media.provider.image',
'context' => 'dc_site',
'label' => 'Изображение'
])
->add('state', CheckboxType::class, ['label' => 'Отображать на сайте', 'required' => false])
->add('is_new_model', CheckboxType::class, ['label' => 'Новая модель', 'required' => false])
->add(
'is_pre_order',
CheckboxType::class,
['label' => 'Доступно под заказ', 'required' => false, 'value' => 1]
)
->add(
'show_disabled',
CheckboxType::class,
['label' => 'Сохранить активность ссылки(Архивная модель)', 'required' => false]
)
->add('position', NumberType::class, ['label' => 'Позиция'])
->add('test_drive', CheckboxType::class, ['label' => 'Доступна на тест драйв', 'required' => false])
->add(
'credit_available',
CheckboxType::class,
['label' => 'Доступна в кредит', 'required' => false, 'value' => 1]
)
->add(
'school_available',
CheckboxType::class,
['label' => 'Доступна для школы', 'required' => false, 'value' => 1]
)
->add('vehicleCardType', AdminType::class, [
'label' => false,
'required' => false,
])
->end()
->end()
->tab('Видео')
->with('', ['class' => 'col-lg12'])
->add(
'video',
ModelListType::class,
[
'label' => 'Галерея видео',
'btn_list' => false,
'required' => false,
],
[
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'position',
'link_parameters' => [
'context' => 'dc_car_video',
'provider' => 'sonata.media.provider.youtube'
],
'admin_code' => 'sonata.media.admin.gallery',
]
)
->end()
->end()
->tab('Прайсы и брошюры')
->with('', ['class' => 'col-lg-12'])
->add('files', CollectionType::class, [
'label' => 'Файлы',
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end()
->tab('Особенности')
->with('', ['class' => 'col-lg-12'])
->add('features', CollectionType::class, [
'label' => false,
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end()
->tab('Комплектации')
->with('', ['class' => 'col-lg-12'])
->add('equipments', CollectionType::class, [
'label' => 'Комплектации',
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end()
->tab('FAQ')
->with('', ['class' => 'col-lg-12'])
->add('faqs', CollectionType::class, [
'label' => false,
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end();
if ($vehicleId) {
$formMapper->tab('Цены')
->with('', ['class' => 'col-lg-12'])
->add('vehicle_items', CollectionType::class, [
'label' => 'Цены',
'by_reference' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
])
->end()
->end();
}
}
public function preUpdate($object): void
{
parent::preUpdate($object);
}
}