Browse Source

post MR various fixes

Olivier Massot 2 năm trước cách đây
mục cha
commit
be9ac60cec

+ 6 - 1
.gitignore

@@ -40,4 +40,9 @@ symfony.lock
 
 ###> phpstan ###
 .phpstan.neon
-###< phpstan ###
+###< phpstan ###
+public/phpstorm_debug_validator.phar
+
+public/phpstorm_debug.php
+
+public/phpstorm_index.php

+ 30 - 35
config/api_platform/Access/access.yaml

@@ -1,35 +1,30 @@
-resources:
-  App\Entity\Access\Access:
-    - operations:
-        ApiPlatform\Metadata\GetCollection: ~
-
-        ApiPlatform\Metadata\Get:
-          security: '(is_granted("ROLE_USERS_VIEW") and object.getOrganization().getId() == user.getOrganization().getId()) or (object.getId() == user.getId())'
-
-        ApiPlatform\Metadata\Put:
-          security: 'is_granted("ROLE_USERS") or (object.getId() == user.getId())'
-
-        ApiPlatform\Metadata\Delete: ~
-
-    - operations:
-        ApiPlatform\Metadata\GetCollection:
-          name: 'cget_students'
-          uriTemplate: '/students'
-          security: 'is_granted("ROLE_USERS_VIEW")'
-
-    - operations:
-        ApiPlatform\Metadata\GetCollection:
-          name: 'cget_access_person_ref'
-          uriTemplate: '/access_people'
-          normalization_context:
-            groups: [ 'access_people_ref' ]
-
-    - operations:
-        ApiPlatform\Metadata\Get:
-          name: 'get_access_address'
-          uriTemplate: '/access_addresses/{id}'
-          requirements:
-            id: '\d+'
-          normalization_context:
-            groups: [ 'access_address', 'address' ] ]
-          security: 'object.getOrganization().getId() == user.getOrganization().getId()'
+#resources:
+#  App\Entity\Access\Access:
+#    - operations:
+#        ApiPlatform\Metadata\GetCollection: ~
+#
+#        ApiPlatform\Metadata\Get:
+#          security: '(is_granted("ROLE_USERS_VIEW") and object.getOrganization().getId() == user.getOrganization().getId()) or (object.getId() == user.getId())'
+#
+#        ApiPlatform\Metadata\Put:
+#          security: 'is_granted("ROLE_USERS") or (object.getId() == user.getId())'
+#
+#        ApiPlatform\Metadata\Delete: ~
+#
+#    - operations:
+#        ApiPlatform\Metadata\GetCollection:
+#          name: 'cget_students'
+#          uriTemplate: '/students'
+#          security: 'is_granted("ROLE_USERS_VIEW")'
+##
+#    - operations:
+#        ApiPlatform\Metadata\Get:
+#          name: 'get_access_address'
+#          uriTemplate: '/access_addresses/{id}'
+#          requirements:
+#            id: '\d+'
+#          normalization_context:
+#            groups: [ 'access_address', 'address' ] ]
+#          security: 'object.getOrganization().getId() == user.getOrganization().getId()'
+#
+#    - paginationClientEnabled: true

+ 1 - 0
config/opentalent/enum.yaml

@@ -128,6 +128,7 @@ parameters:
           education_year: 'App\Enum\Education\YearEnum'
           education_period: 'App\Enum\Education\PeriodEnum'
           education_periodicity: 'App\Enum\Education\PeriodicityEnum'
+          education_cycle: 'App\Enum\Education\CycleEnum'
           advanced_education_notation: 'App\Enum\Education\AdvancedEducationNotationTypeEnum'
 
           #billing

+ 0 - 35
src/Doctrine/Organization/CurrentOrganizationAddressPostalExtension.php

@@ -1,35 +0,0 @@
-<?php
-declare(strict_types=1);
-
-namespace App\Doctrine\Organization;
-
-use App\Doctrine\AbstractExtension;
-use App\Entity\Access\Access;
-use App\Entity\Organization\OrganizationAddressPostal;
-use Doctrine\ORM\QueryBuilder;
-use Symfony\Bundle\SecurityBundle\Security;
-
-/**
- * Class OrganizationAddressPosteExtension : Filtre de sécurité par défaut pour une resource OrganizationAddressPostal
- * @package App\Doctrine\Core
- */
-final class CurrentOrganizationAddressPostalExtension extends AbstractExtension
-{
-    public function __construct(private Security $security)
-    { }
-
-    protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
-    {
-        if (OrganizationAddressPostal::class !== $resourceClass) {
-            return;
-        }
-
-        /** @var Access $currentUser */
-        $currentUser = $this->security->getUser();
-        $rootAlias = $queryBuilder->getRootAliases()[0];
-        $queryBuilder
-            ->andWhere(sprintf('%s.organization = :organization', $rootAlias))
-            ->setParameter('organization', $currentUser->getOrganization())
-        ;
-    }
-}

+ 0 - 35
src/Doctrine/Organization/CurrentOrganizationArticleExtension.php

@@ -1,35 +0,0 @@
-<?php
-declare(strict_types=1);
-
-namespace App\Doctrine\Organization;
-
-use App\Doctrine\AbstractExtension;
-use App\Entity\Access\Access;
-use App\Entity\Organization\OrganizationArticle;
-use Doctrine\ORM\QueryBuilder;
-use Symfony\Bundle\SecurityBundle\Security;
-
-/**
- * Class CurrentOrganizationArticleExtension : Filtre de sécurité par défaut pour une resource OrganizationArticle
- * @package App\Doctrine\Core
- */
-final class CurrentOrganizationArticleExtension extends AbstractExtension
-{
-    public function __construct(private Security $security)
-    { }
-
-    protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
-    {
-        if (OrganizationArticle::class !== $resourceClass) {
-            return;
-        }
-
-        /** @var Access $currentUser */
-        $currentUser = $this->security->getUser();
-        $rootAlias = $queryBuilder->getRootAliases()[0];
-        $queryBuilder
-            ->andWhere(sprintf('%s.organization = :organization', $rootAlias))
-            ->setParameter('organization', $currentUser->getOrganization())
-        ;
-    }
-}

+ 21 - 8
src/Doctrine/Organization/CurrentOrganizationExtension.php

@@ -6,6 +6,9 @@ namespace App\Doctrine\Organization;
 use App\Doctrine\AbstractExtension;
 use App\Entity\Access\Access;
 use App\Entity\Organization\Organization;
+use App\Entity\Organization\OrganizationAddressPostal;
+use App\Entity\Organization\OrganizationArticle;
+use App\Entity\Organization\Subdomain;
 use Doctrine\ORM\QueryBuilder;
 use Symfony\Bundle\SecurityBundle\Security;
 
@@ -20,16 +23,26 @@ final class CurrentOrganizationExtension extends AbstractExtension
 
     protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
     {
-        if (Organization::class !== $resourceClass) {
+        if (Organization::class === $resourceClass) {
+            /** @var Access $currentUser */
+            $currentUser = $this->security->getUser();
+            $rootAlias = $queryBuilder->getRootAliases()[0];
+            $queryBuilder
+                ->andWhere(sprintf('%s.id = :organization', $rootAlias))
+                ->setParameter('organization', $currentUser->getOrganization()->getId())
+            ;
             return;
         }
 
-        /** @var Access $currentUser */
-        $currentUser = $this->security->getUser();
-        $rootAlias = $queryBuilder->getRootAliases()[0];
-        $queryBuilder
-            ->andWhere(sprintf('%s.id = :organization', $rootAlias))
-            ->setParameter('organization', $currentUser->getOrganization()->getId())
-        ;
+        if (in_array($resourceClass, [OrganizationAddressPostal::class, OrganizationArticle::class, Subdomain::class])) {
+            /** @var Access $currentUser */
+            $currentUser = $this->security->getUser();
+            $rootAlias = $queryBuilder->getRootAliases()[0];
+            $queryBuilder
+                ->andWhere(sprintf('%s.organization = :organization', $rootAlias))
+                ->setParameter('organization', $currentUser->getOrganization()->getId())
+            ;
+            return;
+        }
     }
 }

+ 0 - 35
src/Doctrine/Organization/CurrentOrganizationSubdomainExtension.php

@@ -1,35 +0,0 @@
-<?php
-declare(strict_types=1);
-
-namespace App\Doctrine\Organization;
-
-use App\Doctrine\AbstractExtension;
-use App\Entity\Access\Access;
-use App\Entity\Organization\Subdomain;
-use Doctrine\ORM\QueryBuilder;
-use Symfony\Bundle\SecurityBundle\Security;
-
-/**
- * Class CurrentOrganizationExtension : Filtre de sécurité par défaut pour une resource Organization
- * @package App\Doctrine\Core
- */
-final class CurrentOrganizationSubdomainExtension extends AbstractExtension
-{
-    public function __construct(private Security $security)
-    { }
-
-    protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
-    {
-        if (Subdomain::class !== $resourceClass) {
-            return;
-        }
-
-        /** @var Access $currentUser */
-        $currentUser = $this->security->getUser();
-        $rootAlias = $queryBuilder->getRootAliases()[0];
-        $queryBuilder
-            ->andWhere(sprintf('%s.organization = :organization', $rootAlias))
-            ->setParameter('organization', $currentUser->getOrganization()->getId())
-        ;
-    }
-}

+ 16 - 1
src/Entity/Access/Access.php

@@ -8,6 +8,7 @@ use ApiPlatform\Doctrine\Orm\Filter\BooleanFilter;
 use ApiPlatform\Metadata\ApiFilter;
 use ApiPlatform\Metadata\Get;
 use ApiPlatform\Metadata\Put;
+use ApiPlatform\Metadata\GetCollection;
 use ApiPlatform\Serializer\Filter\GroupFilter;
 use App\Entity\AccessWish\AccessWish;
 use App\Entity\Billing\AccessBilling;
@@ -72,7 +73,21 @@ use Symfony\Component\Serializer\Annotation\Groups;
     operations: [
         new Get(security: 'object.getId() == user.getId()'),
         new Put(security: 'object.getId() == user.getId()'),
-    ]
+        new GetCollection(),
+        new GetCollection(
+          name: 'get_access_address',
+          uriTemplate: '/access_addresses/{id}',
+          requirements: ['id' => '\d+'],
+          normalizationContext: ['groups' => [ 'access_address', 'address' ] ],
+          security: 'object.getOrganization().getId() == user.getOrganization().getId()'
+        ),
+        new GetCollection(
+          name: 'cget_students',
+          uriTemplate: '/students',
+          security: 'is_granted("ROLE_USERS_VIEW")'
+        )
+    ],
+    paginationClientEnabled: true
 )]
 //#[Auditable]
 #[ORM\Entity(repositoryClass: AccessRepository::class)]

+ 2 - 3
src/EventListener/DoctrineFilter/DoctrineFilterListener.php

@@ -38,8 +38,7 @@ class DoctrineFilterListener
 
         /** @var Access $access */
         $access = $this->security->getUser();
-
-        if($access){
+        if ($access) {
             /** @var DateTimeFilter $dateTimeFilter */
             $dateTimeFilter = $this->entityManager->getFilters()->getFilter('date_time_filter');
             $dateTimeFilter->setParameter('accessId', $access->getId());
@@ -53,4 +52,4 @@ class DoctrineFilterListener
             $activityYearFilter->setActivityYearConstraint($this->activityYearConstraint);
         }
     }
-}
+}

+ 2 - 2
src/Filter/DoctrineFilter/DateTimeFilter.php

@@ -44,7 +44,7 @@ final class DateTimeFilter extends AbstractTimeFilter
             DateTimeConstraint::START_KEY => $startFieldName,
             DateTimeConstraint::END_KEY => $endFieldName
         ];
-      
+
         return $this->constructQuery($constraints, $targetTableAlias, $fields);
     }
 
@@ -55,4 +55,4 @@ final class DateTimeFilter extends AbstractTimeFilter
     public function setDateTimeConstraint(DateTimeConstraint $dateTimeConstraint): void{
         $this->dateTimeConstraint = $dateTimeConstraint;
     }
-}
+}

+ 2 - 2
src/State/Provider/Enum/EnumProvider.php

@@ -38,9 +38,9 @@ final class EnumProvider implements ProviderInterface
             throw new RuntimeException('not supported', 500);
         }
 
-        $id = $uriVariables['id'];
+        $id = $uriVariables['name'];
         $enums = $this->parameterBag->get('opentalent.enum');
-        $enumClass = $enums['opentalent'][$id];
+        $enumClass = $enums[$id];
 
         if(!$enumClass) {
             throw new NotFoundHttpException(sprintf('Enum %s does\'nt exist', $id));