ebs/src/Controller/Admin/PlatformOfferCrudController.php
Sarahshr b9a87a420b
Feat/disable services option for groups (#711)
* add servicesDisabled field for groups and for global configuration

* fixup! add servicesDisabled field for groups and for global configuration

* comment libcurl upgrade to fix ci temporarly

* upgrade caddy version

* review

* fix test

* feat: add paying membership option (#714)

* feat: add paying membership option

* fix: ci

* fix: phpstan + review

* fix: eslint ci
2024-10-08 09:40:23 +02:00

121 lines
3.7 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Controller\Admin;
use App\Controller\FlashTrait;
use App\Controller\i18nTrait;
use App\EasyAdmin\Field\FieldTrait;
use App\EasyAdmin\Filter\EnumFilter;
use App\EasyAdmin\Filter\UuidFilter;
use App\EasyAdmin\Form\Type\OfferTypeType;
use App\Entity\PlatformOffer;
use App\Enum\OfferType;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\CurrencyField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\MoneyField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use Symfony\Component\Form\Extension\Core\Type\EnumType;
final class PlatformOfferCrudController extends AbstractCrudController implements AdminSecuredCrudControllerInterface
{
use FlashTrait;
use FieldTrait;
use i18nTrait;
public function configureCrud(Crud $crud): Crud
{
return $crud
->setEntityLabelInPlural('platform_offers')
->setSearchFields(['name'])
;
}
public function configureFilters(Filters $filters): Filters
{
return $filters
->add(UuidFilter::new('id'))
->add(EnumFilter::new('type', OfferTypeType::class))
->add('name')
->add('active')
;
}
public function configureActions(Actions $actions): Actions
{
return $actions
->add(Crud::PAGE_INDEX, Action::DETAIL)
->add(Crud::PAGE_EDIT, Action::DETAIL)
->add(Crud::PAGE_EDIT, Action::INDEX)
;
}
public static function getEntityFqcn(): string
{
return PlatformOffer::class;
}
public function configureFields(string $pageName): iterable
{
$idFIeld = IdField::new('id')
->setLabel('id')
->hideOnForm();
$nameField = TextField::new('name');
$typeField = ChoiceField::new('type')
->setFormType(EnumType::class)
->setFormTypeOption('class', OfferType::class)
->setChoices(OfferType::getAsArray());
$priceField = MoneyField::new('price')
->setCurrencyPropertyPath('currency')
->setStoredAsCents();
$currencyField = CurrencyField::new('currency');
$activeField = BooleanField::new('active')
->setTemplatePath('easy_admin/field/boolean.html.twig')
;
$createdAtField = DateTimeField::new('createdAt');
$updatedAtField = DateTimeField::new('updatedAt');
$panels = $this->getPanels();
if ($pageName === Crud::PAGE_INDEX) {
return [$nameField, $typeField, $priceField, $activeField, $createdAtField, $updatedAtField];
}
if ($pageName === Crud::PAGE_NEW || $pageName === Crud::PAGE_EDIT) {
$typeField->setChoices(OfferType::cases());
return [
$nameField,
$typeField,
$priceField,
$currencyField,
$activeField,
];
}
// show
return [
$panels['information'],
$nameField,
$typeField,
$priceField,
$currencyField,
$panels['tech_information'],
$idFIeld,
$updatedAtField,
$createdAtField,
];
}
}