Deprecated : Constant E_STRICT is deprecated in /home/pastorz/old-espace-client/vendor/symfony/error-handler/ErrorHandler.php on line 58
Deprecated : Constant E_STRICT is deprecated in /home/pastorz/old-espace-client/vendor/symfony/error-handler/ErrorHandler.php on line 76
Symfony Profiler
<?php
namespace App\Form ;
use App\Entity\Carrier ;
use App\Entity\CarrierPriceRange ;
use App\Entity\Shipment ;
use App\Service\BrandService ;
use Doctrine\Common\Collections\ArrayCollection ;
use Symfony\Bridge\Doctrine\Form\Type\EntityType ;
use Symfony\Component\Form\AbstractType ;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType ;
use Symfony\Component\Form\Extension\Core\Type\HiddenType ;
use Symfony\Component\Form\Extension\Core\Type\TextType ;
use Symfony\Component\Form\FormBuilderInterface ;
use Symfony\Component\Form\FormEvent ;
use Symfony\Component\Form\FormEvents ;
use Symfony\Component\Form\FormInterface ;
use Symfony\Component\OptionsResolver\OptionsResolver ;
use Symfony\Component\Validator\Constraints\NotBlank ;
use Symfony\Contracts\Translation\TranslatorInterface ;
class ShippingCarrierFormType extends AbstractType
{
public const SERVICE_POINT_NAME = "servicePoint" ;
public function __construct (private TranslatorInterface $translator , private BrandService $brandService )
{
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm ( FormBuilderInterface $builder , array $options )
{
$prices = $options [ 'prices' ];
$locale = $options [ 'locale' ];
$carriers = $prices -> map (fn( CarrierPriceRange $price ) => $price -> getCarrier ());
$carriersAttr = array();
foreach ($prices as $price ) {
$carriersAttr [ $price -> getCarrier ()-> getId ()] = array(
'logo' => $price -> getCarrier ()-> getLogo (),
'tooltip' => $locale === 'fr' ? $price -> getCarrier ()-> getTooltipContent () : $price -> getCarrier ()-> getTooltipContentEN (),
'price' => $price -> getPriceIncludedTaxes (),
);
}
$builder -> add ( 'carrier' , EntityType ::class, array(
'class' => Carrier ::class,
'label' => false ,
'required' => true ,
'choices' => $carriers ,
'expanded' => true ,
'attr' => $carriersAttr
))-> add ( 'option' , ChoiceType ::class, array(
'label' => false ,
'required' => false ,
'mapped' => false ,
'expanded' => true ,
'multiple' => false ,
'choices' => array(
Shipment :: OPTION_SIGNATURE ,
Shipment :: OPTION_SIGNATURE_INSURANCE ,
),
'choice_label' => fn( mixed $choice ) => Shipment :: OPTIONS_LABELS [ $choice ]
))->add ( 'discountCode' , TextType ::class, [
'label' => 'app.common.fields.discount.code' ,
'label_translation_parameters' => [
'%brandCode%' => strtoupper ( $this -> brandService -> getBrand ()-> getCode ()),
],
'required' => false ,
'mapped' => false ,
])->add ( 'discountCodeHidden' , HiddenType ::class, [
'required' => false ,
'mapped' => false ,
]);
$formModifier = function ( FormInterface $form , Carrier $carrier = null ): void {
if ($carrier && $carrier -> getIsServicePoint ()) {
$form -> add ( self :: SERVICE_POINT_NAME , HiddenType ::class, array(
'label' => false ,
'required' => false ,
'constraints' => array(
new NotBlank ( message : $this -> translator -> trans ( 'app.deliveryNotes.ship.noPickupAddressSelected' ))
),
'mapped' => false ,
'error_bubbling' => false
));
}
};
$builder -> get ( "carrier" )-> addEventListener (
FormEvents :: POST_SUBMIT ,
function (FormEvent $event ) use ( $formModifier ): void {
$carrier = $event -> getForm ()-> getData ();
$formModifier ( $event -> getForm ()-> getParent (), $carrier );
}
);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions ( OptionsResolver $resolver ): void
{
$resolver -> setDefaults (array(
'allow_extra_fields' => true ,
'data_class' => Shipment ::class,
'prices' => new ArrayCollection (),
'locale' => 'fr' ,
));
}
}