Procházet zdrojové kódy

fiw php cs phpstan et suppression exludegenderFilter

opentalent před 1 rokem
rodič
revize
605884e1f7

+ 17 - 14
src/Entity/Public/PublicEvent.php

@@ -4,20 +4,19 @@ declare(strict_types=1);
 
 namespace App\Entity\Public;
 
-use ApiPlatform\Metadata\Get;
-use Doctrine\ORM\Mapping as ORM;
-use ApiPlatform\Metadata\ApiFilter;
-use ApiPlatform\Metadata\ApiResource;
-use ApiPlatform\Metadata\GetCollection;
 use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
+use ApiPlatform\Doctrine\Orm\Filter\NumericFilter;
 use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
 use ApiPlatform\Doctrine\Orm\Filter\RangeFilter;
-use App\Filter\ApiPlatform\Utils\DistanceFilter;
-use App\Repository\Public\PublicEventRepository;
 use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
-use ApiPlatform\Doctrine\Orm\Filter\NumericFilter;
+use ApiPlatform\Metadata\ApiFilter;
+use ApiPlatform\Metadata\ApiResource;
+use ApiPlatform\Metadata\Get;
+use ApiPlatform\Metadata\GetCollection;
 use App\Filter\ApiPlatform\Utils\ArrayFieldFilter;
-use App\Filter\ApiPlatform\PublicEvent\ExcludeGenderFilter;
+use App\Filter\ApiPlatform\Utils\DistanceFilter;
+use App\Repository\Public\PublicEventRepository;
+use Doctrine\ORM\Mapping as ORM;
 
 /**
  * Évènements publics tels que publiés sur l'agenda du site opentalent ou les sites des structures.
@@ -44,7 +43,6 @@ use App\Filter\ApiPlatform\PublicEvent\ExcludeGenderFilter;
 #[ApiFilter(filterClass: OrderFilter::class, properties: ['datetimeStart', 'datetimeEnd'], arguments: ['orderParameterName' => 'order'])]
 #[ApiFilter(filterClass: RangeFilter::class, properties: ['priceMini', 'priceMaxi'])]
 #[ApiFilter(filterClass: ArrayFieldFilter::class, properties: ['categories', 'gender'])]
-#[ApiFilter(ExcludeGenderFilter::class)]
 class PublicEvent
 {
     #[ORM\Id]
@@ -129,8 +127,6 @@ class PublicEvent
     #[ORM\Column]
     private ?string $categoryCode;
 
-
-
     public function getUuid(): string
     {
         return $this->uuid;
@@ -377,14 +373,23 @@ class PublicEvent
         return $this;
     }
 
+    /**
+     * @return string[]|null returns a list of gender identifiers as strings
+     */
     public function getGender(): ?array
     {
         return $this->gender;
     }
 
+    /**
+     * @param string[]|null $gender gender identifiers as a list of strings
+     *
+     * @return $this
+     */
     public function setGender(?array $gender): PublicEvent
     {
         $this->gender = $gender;
+
         return $this;
     }
 
@@ -447,6 +452,4 @@ class PublicEvent
 
         return $this;
     }
-    
- 
 }

+ 0 - 67
src/Filter/ApiPlatform/PublicEvent/ExcludeGenderFilter.php

@@ -1,67 +0,0 @@
-<?php
-namespace App\Filter\ApiPlatform\PublicEvent;
-
-use ApiPlatform\Doctrine\Orm\Filter\AbstractFilter;
-use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
-use ApiPlatform\Metadata\Operation;
-use Doctrine\ORM\QueryBuilder;
-
-/**
- * Provides a filter for excluding specific gender IDs from the query results.
- * This filter checks for a query parameter 'excludeGenderFilter' and if set to true,
- * excludes gender IDs associated with specific categories such as 'marriage' and 'exams'.
- *
- * To activate this filter, include the query parameter 'excludeGenderFilter=true' in the URL.
- * For example:
- * https://local.ap2i.opentalent.fr/api/public/events?excludeGenderFilter=true
- * 
- * This will exclude entities where the gender field contains the IDs 29 (marriage) or 18 (exams) for agenda events.
- */
-class ExcludeGenderFilter extends AbstractFilter
-{
-    /**
-     * Modifies the query to exclude specific gender IDs if the 'excludeGenderFilter' parameter is set to true.
-     * 
-     * @param string $property The name of the property being filtered.
-     * @param mixed $value The value of the filter being applied.
-     * @param QueryBuilder $queryBuilder The Doctrine query builder.
-     * @param QueryNameGeneratorInterface $queryNameGenerator A utility to generate query parameter names.
-     * @param string $resourceClass The resource class.
-     * @param ?Operation $operation The operation being performed, if any.
-     * @param array $context Additional context for the filter.
-     */
-    protected function filterProperty(
-        string $property,
-        mixed $value,
-        QueryBuilder $queryBuilder,
-        QueryNameGeneratorInterface $queryNameGenerator,
-        string $resourceClass,
-        ?Operation $operation = null,
-        array $context = []
-    ): void {
-        if ($property === 'excludeGenderFilter' && $value === 'true') {
-            $parameterName = $queryNameGenerator->generateParameterName('gender');
-            $filteredValues = [29, 18]; 
-            $queryBuilder->andWhere($queryBuilder->expr()->notIn('o.gender', ':'.$parameterName))
-                         ->setParameter($parameterName, $filteredValues);
-        }
-    }
-
-    /**
-     * Provides a description for the API documentation.
-     * 
-     * @param string $resourceClass The resource class for which the filter is being described.
-     * @return array Returns the description of the filter to be included in the API documentation.
-     */
-    public function getDescription(string $resourceClass): array
-    {
-        return [
-            'excludeGenderFilter' => [
-                'property' => null, 
-                'type' => 'boolean',
-                'required' => false,
-                'description' => 'Activates filtering to exclude specific gender IDs'
-            ]
-        ];
-    }
-}

+ 13 - 14
src/Filter/ApiPlatform/Utils/ArrayFieldFilter.php

@@ -37,22 +37,21 @@ class ArrayFieldFilter extends AbstractFilter
             return;
         }
 
-        $parameterName = $queryNameGenerator->generateParameterName($property);
-        $valueArray = json_decode($value, true);
+        // Vérifier si la valeur est déjà un tableau ou un JSON encodé
+        $values = json_decode($value, true);
 
-        if (is_array($valueArray)) {
-            $queryBuilder->andWhere($queryBuilder->expr()->orX(
-                ...array_map(function ($val) use ($queryBuilder, $property, $parameterName) {
-                    return $queryBuilder->expr()->like(sprintf('o.%s', $property), ':'.$parameterName);
-                }, $valueArray)
-            ));
-            foreach ($valueArray as $key => $val) {
-                $queryBuilder->setParameter($parameterName, '%'.$val.'%');
-            }
-        } else {
-            $queryBuilder->andWhere(sprintf('o.%s LIKE :%s', $property, $parameterName))
-                ->setParameter($parameterName, '%'.$value.'%');
+        // Si json_decode échoue ou si la valeur n'est pas un tableau, traiter comme une chaîne simple
+        if (JSON_ERROR_NONE !== json_last_error() || !is_array($values)) {
+            $values = [$value];
         }
+
+        $orX = $queryBuilder->expr()->orX();
+        foreach ($values as $index => $val) {
+            $parameterName = $queryNameGenerator->generateParameterName($property.$index); // Générer un nom de paramètre unique
+            $orX->add($queryBuilder->expr()->like(sprintf('o.%s', $property), ':'.$parameterName));
+            $queryBuilder->setParameter($parameterName, '%'.$val.'%');
+        }
+        $queryBuilder->andWhere($orX);
     }
 
     /**

+ 1 - 0
src/Service/Mailer/Builder/AbstractBuilder.php

@@ -43,6 +43,7 @@ class AbstractBuilder implements AbstractBuilderInterface
      */
     public function buildEmailEntity(string $subject, Access $author, string $content): EmailEntity
     {
+        // todo : on aurait un setAuthor ou pas
         $emailEntity = new EmailEntity();
         $emailEntity
             ->setAuthor($author)