<?php
namespace App\Form;
use App\Entity\Category;
use App\Entity\Contact;
use App\Entity\PhaseEvolution;
use App\Entity\ProductAddon;
use App\Entity\SubCategory;
use App\Repository\CategoryRepository;
use App\Repository\SubCategoryRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Persistence\ManagerRegistry;
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\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
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;
class ProductsFilterType extends AbstractType
{
protected $em;
public function __construct(ManagerRegistry $em)
{
$this->em = $em;
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$phaseEvolutions = new ArrayCollection();
$addons = new ArrayCollection();
foreach ($options["category"]->getSubCategories() as $key => $subCategory) {
if (!$subCategory->getHide()) {
foreach ($subCategory->getProductSubCategories() as $key => $productSubCategory) {
if ($product = $productSubCategory->getProduct()) {
foreach ($product->getPhaseEvolutions() as $key => $phaseEvolution) {
if (!$phaseEvolutions->contains($phaseEvolution)) {
$phaseEvolutions->add($phaseEvolution);
}
}
foreach ($product->getProductHardwareProductAddons() as $key => $productHardwareProductAddon) {
if ($productAddon = $productHardwareProductAddon->getProductAddon() and !$addons->contains($productAddon)) {
$addons->add($productAddon);
}
}
foreach ($product->getProductSoftwareProductAddons() as $key => $productSoftwareProductAddon) {
if ($productAddon = $productSoftwareProductAddon->getProductAddon() and !$addons->contains($productAddon)) {
$addons->add($productAddon);
}
}
}
}
}
}
$builder
->add("offset", HiddenType::class)
->add('phaseEvolutions', EntityType::class, array(
"choices" => $phaseEvolutions,
'class' => PhaseEvolution::class,
'choice_label' => function ($phaseEvolutions) {
return $phaseEvolutions->getTitle();
},
"multiple" => true,
"label_attr" => [
"class" => "checkbox-custom "
],
"expanded" => true,
//'by_reference' => false,
))
->add('categories', EntityType::class, array(
'class' => Category::class,
'query_builder' => function (CategoryRepository $er) use ($options) {
return $er->createQueryBuilder('a')
->orderBy("a.position", "asc");
},
'choice_label' => function ($categories) {
return $categories->getTitle();
},
"label_attr" => [
"class" => "checkbox-custom "
],
// "label" => false,
"multiple" => true,
"expanded" => true,
//'by_reference' => false,
))
->add('subCategories', EntityType::class, [
'placeholder' => '',
'class' => SubCategory::class,
'query_builder' => function (SubCategoryRepository $er) {
return $er->createQueryBuilder('a')
->andWhere("a.hide = :false")
->setParameter("false", false)
->orderBy("a.position", "asc");
},
'choice_label' => function ($subCategories) {
return $subCategories->getTitle();
},
"label_attr" => [
"class" => "checkbox-custom "
],
"multiple" => true,
"expanded" => true,
//'by_reference' => false,
])
->add('isHardware', ChoiceType::class, array(
'choices' => ["hardware_systems" => "hardware_systems", "software_systems" => "software_systems"],
'multiple' => true,
'expanded' => true,
"label_attr" => [
"class" => "checkbox-custom "
],
))
->add('productAddons', EntityType::class, array(
'class' => ProductAddon::class,
"choices" => $addons,
'choice_label' => function ($productAddons) {
return $productAddons->getTitle();
},
"multiple" => true,
"expanded" => true,
"label_attr" => [
"class" => "checkbox-custom "
],
//'by_reference' => false,
));
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
'category' => null,
]);
}
}