From c68bda5c9b894236860fe1bacca8c9467052eb07 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Tue, 16 Nov 2021 12:16:02 +0100 Subject: [PATCH] fix: SA: Fix "...invoked with..." rule. SA stands for Static Analysis. --- phpstan-baseline.neon | 65 -------- .../Timeline/TimelineActivityProvider.php | 157 ++++++------------ .../Controller/AsideActivityController.php | 5 +- .../Controller/DocumentCategoryController.php | 29 ++-- .../CRUD/Controller/ApiController.php | 114 ++++++------- .../CRUD/Controller/CRUDController.php | 13 +- .../Controller/UserController.php | 83 ++++----- .../ChillMainBundle/Search/SearchApi.php | 9 +- .../Authorization/AuthorizationHelper.php | 38 ++--- .../Command/ImportPeopleFromCSVCommand.php | 1 + .../ChillPersonBundle/Entity/Person.php | 24 +-- 11 files changed, 183 insertions(+), 355 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index dba0fad72..7b09a7d50 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -85,16 +85,6 @@ parameters: count: 2 path: src/Bundle/ChillActivityBundle/Timeline/TimelineActivityProvider.php - - - message: "#^Method Chill\\\\ActivityBundle\\\\Timeline\\\\TimelineActivityProvider\\:\\:getFromClausePerson\\(\\) invoked with 1 parameter, 0 required\\.$#" - count: 1 - path: src/Bundle/ChillActivityBundle/Timeline/TimelineActivityProvider.php - - - - message: "#^Method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\CRUDController\\:\\:buildQueryEntities\\(\\) invoked with 3 parameters, 2 required\\.$#" - count: 1 - path: src/Bundle/ChillAsideActivityBundle/src/Controller/AsideActivityController.php - - message: "#^Access to an undefined property Chill\\\\AsideActivityBundle\\\\Entity\\\\AsideActivityCategory\\:\\:\\$oldParent\\.$#" count: 2 @@ -250,11 +240,6 @@ parameters: count: 1 path: src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorTemplateController.php - - - message: "#^Class Chill\\\\DocStoreBundle\\\\Entity\\\\DocumentCategory constructor invoked with 0 parameters, 2 required\\.$#" - count: 1 - path: src/Bundle/ChillDocStoreBundle/Controller/DocumentCategoryController.php - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" count: 1 @@ -360,16 +345,6 @@ parameters: count: 1 path: src/Bundle/ChillMainBundle/CRUD/Controller/AbstractCRUDController.php - - - message: "#^Method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\AbstractCRUDController\\:\\:getEntity\\(\\) invoked with 4 parameters, 3 required\\.$#" - count: 3 - path: src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php - - - - message: "#^Method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\ApiController\\:\\:entityPostAction\\(\\) invoked with 4 parameters, 3 required\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php - - message: "#^Variable \\$entity in isset\\(\\) is never defined\\.$#" count: 1 @@ -385,16 +360,6 @@ parameters: count: 1 path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php - - - message: "#^Method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\CRUDController\\:\\:buildQueryEntities\\(\\) invoked with 3 parameters, 2 required\\.$#" - count: 2 - path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php - - - - message: "#^Method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\CRUDController\\:\\:onPreDelete\\(\\) invoked with 3 parameters, 2 required\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php - - message: "#^Parameter \\$scope of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\CRUDController\\:\\:getReachableCenters\\(\\) has invalid type Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\Scope\\.$#" count: 1 @@ -520,21 +485,6 @@ parameters: count: 1 path: src/Bundle/ChillMainBundle/Controller/UserController.php - - - message: "#^Method Chill\\\\MainBundle\\\\Controller\\\\UserController\\:\\:createAddLinkGroupCenterForm\\(\\) invoked with 1 parameter, 2 required\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Controller/UserController.php - - - - message: "#^Method Chill\\\\MainBundle\\\\Controller\\\\UserController\\:\\:createEditPasswordForm\\(\\) invoked with 2 parameters, 1 required\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Controller/UserController.php - - - - message: "#^Method Chill\\\\MainBundle\\\\Controller\\\\UserController\\:\\:getDeleteLinkGroupCenterByUser\\(\\) invoked with 1 parameter, 2 required\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Controller/UserController.php - - message: "#^Call to function in_array\\(\\) requires parameter \\#3 to be set\\.$#" count: 2 @@ -720,11 +670,6 @@ parameters: count: 1 path: src/Bundle/ChillMainBundle/Search/Entity/SearchUserApiProvider.php - - - message: "#^Method Chill\\\\MainBundle\\\\Search\\\\SearchApi\\:\\:buildUnionQuery\\(\\) invoked with 4 parameters, 3 required\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Search/SearchApi.php - - message: "#^Access to an undefined property Chill\\\\MainBundle\\\\Search\\\\SearchApiResult\\:\\:\\$relevance\\.$#" count: 2 @@ -750,11 +695,6 @@ parameters: count: 2 path: src/Bundle/ChillMainBundle/Security/Authorization/AbstractChillVoter.php - - - message: "#^Method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:userCanReachCenter\\(\\) invoked with 3 parameters, 2 required\\.$#" - count: 1 - path: src/Bundle/ChillMainBundle/Security/Authorization/AuthorizationHelper.php - - message: "#^Call to function in_array\\(\\) requires parameter \\#3 to be set\\.$#" count: 2 @@ -945,11 +885,6 @@ parameters: count: 1 path: src/Bundle/ChillPersonBundle/Entity/Person.php - - - message: "#^Method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:getCurrentPersonAddress\\(\\) invoked with 1 parameter, 0 required\\.$#" - count: 1 - path: src/Bundle/ChillPersonBundle/Entity/Person.php - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" count: 2 diff --git a/src/Bundle/ChillActivityBundle/Timeline/TimelineActivityProvider.php b/src/Bundle/ChillActivityBundle/Timeline/TimelineActivityProvider.php index a1c6b6c65..fb0a5c45c 100644 --- a/src/Bundle/ChillActivityBundle/Timeline/TimelineActivityProvider.php +++ b/src/Bundle/ChillActivityBundle/Timeline/TimelineActivityProvider.php @@ -1,94 +1,53 @@ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ +declare(strict_types=1); namespace Chill\ActivityBundle\Timeline; +use Chill\MainBundle\Entity\User; +use Chill\MainBundle\Security\Authorization\AuthorizationHelperInterface; use Chill\MainBundle\Timeline\TimelineProviderInterface; use Chill\ActivityBundle\Repository\ActivityACLAwareRepository; -use Doctrine\ORM\EntityManager; -use Chill\MainBundle\Security\Authorization\AuthorizationHelper; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Role\Role; -use Doctrine\ORM\Mapping\ClassMetadata; use Chill\PersonBundle\Entity\Person; -use Chill\MainBundle\Entity\Scope; use Chill\ActivityBundle\Entity\Activity; use Chill\MainBundle\Timeline\TimelineSingleQuery; +use Symfony\Component\Security\Core\User\UserInterface; -/** - * Provide activity for inclusion in timeline - * -*/ class TimelineActivityProvider implements TimelineProviderInterface { - - /** - * - * @var EntityManager - */ - protected $em; - - /** - * - * @var AuthorizationHelper - */ - protected $helper; - - /** - * - * @var \Chill\MainBundle\Entity\User - */ - protected $user; + protected EntityManagerInterface $em; + + protected AuthorizationHelperInterface $helper; + + protected UserInterface $user; protected ActivityACLAwareRepository $aclAwareRepository; private const SUPPORTED_CONTEXTS = [ 'center', 'person']; - - /** - * TimelineActivityProvider constructor. - * - * @param EntityManager $em - * @param AuthorizationHelper $helper - * @param TokenStorageInterface $storage - */ + public function __construct( - EntityManager $em, - AuthorizationHelper $helper, + EntityManagerInterface $em, + AuthorizationHelperInterface $helper, TokenStorageInterface $storage, ActivityACLAwareRepository $aclAwareRepository - ) - { + ) { $this->em = $em; $this->helper = $helper; $this->aclAwareRepository = $aclAwareRepository; - - if (!$storage->getToken()->getUser() instanceof \Chill\MainBundle\Entity\User) + + if (!$storage->getToken()->getUser() instanceof User) { throw new \RuntimeException('A user should be authenticated !'); } - + $this->user = $storage->getToken()->getUser(); } - + /** - * + * * {@inheritDoc} */ public function fetchQuery($context, array $args) @@ -97,23 +56,23 @@ class TimelineActivityProvider implements TimelineProviderInterface return TimelineSingleQuery::fromArray($this->aclAwareRepository ->queryTimelineIndexer($context, $args)); } - + $metadataActivity = $this->em->getClassMetadata(Activity::class); [$where, $parameters] = $this->getWhereClauseForPerson($args['person']); - + return TimelineSingleQuery::fromArray([ 'id' => $metadataActivity->getTableName() .'.'.$metadataActivity->getColumnName('id'), 'type' => 'activity', 'date' => $metadataActivity->getTableName() .'.'.$metadataActivity->getColumnName('date'), - 'FROM' => $this->getFromClausePerson($args['person']), + 'FROM' => $this->getFromClausePerson(), 'WHERE' => $where, 'parameters' => $parameters ]); } - + private function getWhereClauseForPerson(Person $person) { $parameters = []; @@ -125,15 +84,15 @@ class TimelineActivityProvider implements TimelineProviderInterface $whereClause = sprintf(' {activity.person_id} = ? AND {activity.scope_id} IN ({scopes_ids}) '); $scopes_ids = []; - // first parameter: activity.person_id + // first parameter: activity.person_id $parameters[] = $person->getId(); - // loop on reachable scopes + // loop on reachable scopes foreach ($reachableScopes as $scope) { if (\in_array($scope->getId(), $scopes_ids)) { continue; } - $scopes_ids[] = '?'; + $scopes_ids[] = '?'; $parameters[] = $scope->getId(); } @@ -151,47 +110,40 @@ class TimelineActivityProvider implements TimelineProviderInterface $parameters ]; } - - private function getFromClausePerson() + + private function getFromClausePerson(): string { $metadataActivity = $this->em->getClassMetadata(Activity::class); $metadataPerson = $this->em->getClassMetadata(Person::class); $associationMapping = $metadataActivity->getAssociationMapping('person'); - - return $metadataActivity->getTableName().' JOIN ' - .$metadataPerson->getTableName().' ON ' - .$metadataPerson->getTableName().'.'. - $associationMapping['joinColumns'][0]['referencedColumnName'] - .' = ' - .$associationMapping['joinColumns'][0]['name'] - ; + + return sprintf( + "%s JOIN %s ON %s.%s = %s", + $metadataActivity->getTableName(), + $metadataPerson->getTableName(), + $metadataPerson->getTableName(), + $associationMapping['joinColumns'][0]['referencedColumnName'], + $associationMapping['joinColumns'][0]['name'] + ); } - - /** - * - * {@inheritDoc} - */ - public function getEntities(array $ids) + + public function getEntities(array $ids): array { $activities = $this->em->getRepository(Activity::class) ->findBy(array('id' => $ids)); - + $result = array(); foreach($activities as $activity) { $result[$activity->getId()] = $activity; } - + return $result; } - /** - * - * {@inheritDoc} - */ - public function getEntityTemplate($entity, $context, array $args) + public function getEntityTemplate($entity, $context, array $args): array { $this->checkContext($context); - + return [ 'template' => 'ChillActivityBundle:Timeline:activity_person_context.html.twig', 'template_data' => [ @@ -201,26 +153,25 @@ class TimelineActivityProvider implements TimelineProviderInterface ]; } - /** - * - * {@inheritDoc} - */ - public function supportsType($type) + public function supportsType($type): bool { return $type === 'activity'; } - + /** - * check if the context is supported - * - * @param string $context + * Check if the context is supported. + * * @throws \LogicException if the context is not supported */ - private function checkContext($context) + private function checkContext(string $context) { if (FALSE === \in_array($context, self::SUPPORTED_CONTEXTS)) { - throw new \LogicException("The context '$context' is not " - . "supported. Currently only 'person' is supported"); + throw new \LogicException( + sprintf( + "The context '%s' is not supported. Currently only 'person' is supported", + $context + ) + ); } } diff --git a/src/Bundle/ChillAsideActivityBundle/src/Controller/AsideActivityController.php b/src/Bundle/ChillAsideActivityBundle/src/Controller/AsideActivityController.php index 3e3b38033..9e9964314 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Controller/AsideActivityController.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Controller/AsideActivityController.php @@ -15,8 +15,7 @@ use Doctrine\Common\Collections\Criteria; final class AsideActivityController extends CRUDController { - - private $categoryRepository; + private AsideActivityCategoryRepository $categoryRepository; public function __construct(AsideActivityCategoryRepository $categoryRepository) { @@ -25,7 +24,7 @@ final class AsideActivityController extends CRUDController protected function buildQueryEntities(string $action, Request $request, ?FilterOrderHelper $filterOrder = null) { - $qb = parent::buildQueryEntities($action, $request, $filterOrder); + $qb = parent::buildQueryEntities($action, $request); if ('index' === $action) { $qb->where($qb->expr()->eq('e.agent', ':user')); diff --git a/src/Bundle/ChillDocStoreBundle/Controller/DocumentCategoryController.php b/src/Bundle/ChillDocStoreBundle/Controller/DocumentCategoryController.php index 4d2d3246e..301487fd7 100644 --- a/src/Bundle/ChillDocStoreBundle/Controller/DocumentCategoryController.php +++ b/src/Bundle/ChillDocStoreBundle/Controller/DocumentCategoryController.php @@ -1,5 +1,7 @@ getDoctrine()->getManager(); - $categories = $em->getRepository("ChillDocStoreBundle:DocumentCategory")->findAll(); + $categories = $em->getRepository(DocumentCategory::class)->findAll(); return $this->render( 'ChillDocStoreBundle:DocumentCategory:index.html.twig', - ['document_categories' => $categories]); + [ + 'document_categories' => $categories, + ] + ); } /** @@ -37,13 +40,10 @@ class DocumentCategoryController extends AbstractController public function new(Request $request): Response { $em = $this->getDoctrine()->getManager(); - $documentCategory = new DocumentCategory(); - $documentCategory - ->setBundleId('Chill\DocStoreBundle\ChillDocStoreBundle'); - $documentCategory - ->setIdInsideBundle( - $em->getRepository("ChillDocStoreBundle:DocumentCategory") - ->nextIdInsideBundle()); + $documentCategory = new DocumentCategory( + ChillDocStoreBundle::class, + $em->getRepository(DocumentCategory::class)->nextIdInsideBundle() + ); $documentCategory ->setDocumentClass(PersonDocument::class); @@ -56,11 +56,10 @@ class DocumentCategoryController extends AbstractController $em->flush(); return $this->redirectToRoute('document_category_index'); - } else { - $documentCategory->setBundleId( - 'Chill\DocStoreBundle\ChillDocStoreBundle'); } + $documentCategory->setBundleId(ChillDocStoreBundle::class); + return $this->render('ChillDocStoreBundle:DocumentCategory:new.html.twig', [ 'document_category' => $documentCategory, 'form' => $form->createView(), diff --git a/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php b/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php index e3717f654..a2555bf81 100644 --- a/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php +++ b/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php @@ -1,5 +1,7 @@ getEntity($action, $id, $request, $_format); - + $entity = $this->getEntity($action, $id, $request); + $postFetch = $this->onPostFetchEntity($action, $request, $entity, $_format); - + if ($postFetch instanceof Response) { return $postFetch; } - + $response = $this->checkACL($action, $request, $_format, $entity); if ($response instanceof Response) { return $response; } - + $response = $this->onPostCheckACL($action, $request, $_format, $entity); if ($response instanceof Response) { return $response; @@ -86,7 +88,7 @@ class ApiController extends AbstractCRUDController case Request::METHOD_PATCH: return $this->entityPut('_entity', $request, $id, $_format); case Request::METHOD_POST: - return $this->entityPostAction('_entity', $request, $id, $_format); + return $this->entityPostAction('_entity', $request, $id); case Request::METHOD_DELETE: return $this->entityDelete('_entity', $request, $id, $_format); default: @@ -112,9 +114,9 @@ class ApiController extends AbstractCRUDController } catch (NotEncodableValueException $e) { throw new BadRequestException("invalid json", 400, $e); } - + $errors = $this->validate($action, $request, $_format, $entity); - + $response = $this->onAfterValidation($action, $request, $_format, $entity, $errors); if ($response instanceof Response) { return $response; @@ -126,12 +128,12 @@ class ApiController extends AbstractCRUDController return $response; } - + $response = $this->checkACL($action, $request, $_format, $entity); if ($response instanceof Response) { return $response; } - + $response = $this->onPostCheckACL($action, $request, $_format, $entity); if ($response instanceof Response) { return $response; @@ -148,33 +150,33 @@ class ApiController extends AbstractCRUDController if ($response instanceof Response) { return $response; } - + return $this->json( $entity, Response::HTTP_OK, - [], + [], $this->getContextForSerializationPostAlter($action, $request, $_format, $entity) ); } public function entityPut($action, Request $request, $id, string $_format): Response { - $entity = $this->getEntity($action, $id, $request, $_format); - + $entity = $this->getEntity($action, $id, $request); + $postFetch = $this->onPostFetchEntity($action, $request, $entity, $_format); if ($postFetch instanceof Response) { return $postFetch; } - + if (NULL === $entity) { throw $this->createNotFoundException(sprintf("The %s with id %s " . "is not found", $this->getCrudName(), $id)); } - + $response = $this->checkACL($action, $request, $_format, $entity); if ($response instanceof Response) { return $response; } - + $response = $this->onPostCheckACL($action, $request, $_format, $entity); if ($response instanceof Response) { return $response; @@ -184,7 +186,7 @@ class ApiController extends AbstractCRUDController if ($response instanceof Response) { return $response; } - + try { $entity = $this->deserialize($action, $request, $_format, $entity); } catch (NotEncodableValueException $e) { @@ -215,13 +217,13 @@ class ApiController extends AbstractCRUDController return $this->json( $entity, Response::HTTP_OK, - [], + [], $this->getContextForSerializationPostAlter($action, $request, $_format, $entity) ); } public function entityDelete($action, Request $request, $id, string $_format): Response { - $entity = $this->getEntity($action, $id, $request, $_format); + $entity = $this->getEntity($action, $id, $request); if (NULL === $entity) { throw $this->createNotFoundException(sprintf("The %s with id %s " @@ -287,7 +289,7 @@ class ApiController extends AbstractCRUDController protected function validate(string $action, Request $request, string $_format, $entity, array $more = []): ConstraintViolationListInterface { $validationGroups = $this->getValidationGroups($action, $request, $_format, $entity); - + return $this->getValidator()->validate($entity, null, $validationGroups); } @@ -309,7 +311,7 @@ class ApiController extends AbstractCRUDController return $this->getSerializer()->deserialize($request->getContent(), $this->getEntityClass(), $_format, $context); } - + /** * Base action for indexing entities @@ -327,11 +329,11 @@ class ApiController extends AbstractCRUDController /** * Build an index page. - * + * * Some steps may be overriden during this process of rendering. - * + * * This method: - * + * * 1. Launch `onPreIndex` * x. check acl. If it does return a response instance, return it * x. launch `onPostCheckACL`. If it does return a response instance, return it @@ -342,7 +344,7 @@ class ApiController extends AbstractCRUDController * x. fetch the results, using `getQueryResult` * x. Launch `onPostIndexFetchQuery`. If it does return a response instance, return it * 4. Serialize the entities in a Collection, using `SerializeCollection` - * + * * @param string $action * @param Request $request * @return type @@ -350,50 +352,50 @@ class ApiController extends AbstractCRUDController protected function indexApiAction($action, Request $request, $_format) { $this->onPreIndex($action, $request, $_format); - + $response = $this->checkACL($action, $request, $_format); if ($response instanceof Response) { return $response; } - + if (!isset($entity)) { $entity = ''; } - + $response = $this->onPostCheckACL($action, $request, $_format, $entity); if ($response instanceof Response) { return $response; } - + $totalItems = $this->countEntities($action, $request, $_format); $paginator = $this->getPaginatorFactory()->create($totalItems); - - $response = $this->onPreIndexBuildQuery($action, $request, $_format, $totalItems, + + $response = $this->onPreIndexBuildQuery($action, $request, $_format, $totalItems, $paginator); - + if ($response instanceof Response) { return $response; } - + $query = $this->queryEntities($action, $request, $_format, $paginator); - - $response = $this->onPostIndexBuildQuery($action, $request, $_format, $totalItems, + + $response = $this->onPostIndexBuildQuery($action, $request, $_format, $totalItems, $paginator, $query); - + if ($response instanceof Response) { return $response; } - + $entities = $this->getQueryResult($action, $request, $_format, $totalItems, $paginator, $query); - - $response = $this->onPostIndexFetchQuery($action, $request, $_format, $totalItems, + + $response = $this->onPostIndexFetchQuery($action, $request, $_format, $totalItems, $paginator, $entities); - + if ($response instanceof Response) { return $response; } - - return $this->serializeCollection($action, $request, $_format, $paginator, $entities); + + return $this->serializeCollection($action, $request, $_format, $paginator, $entities); } /** @@ -402,7 +404,7 @@ class ApiController extends AbstractCRUDController * This method: * * 1. Fetch the base entity (throw 404 if not found) - * 2. checkACL, + * 2. checkACL, * 3. run onPostCheckACL, return response if any, * 4. deserialize posted data into the entity given by $postedDataType, with the context in $postedDataContext * 5. run 'add+$property' for POST method, or 'remove+$property' for DELETE method @@ -410,7 +412,7 @@ class ApiController extends AbstractCRUDController * 7. run onAfterValidation * 8. if errors, return a 422 response with errors * 9. if $forcePersist === true, persist the entity - * 10. flush the data + * 10. flush the data * 11. run onAfterFlush * 12. return a 202 response for DELETE with empty body, or HTTP 200 for post with serialized posted entity * @@ -425,7 +427,7 @@ class ApiController extends AbstractCRUDController * @throw BadRequestException if unable to deserialize the posted data * @throw BadRequestException if the method is not POST or DELETE * - */ + */ protected function addRemoveSomething(string $action, $id, Request $request, string $_format, string $property, string $postedDataType, array $postedDataContext = [], bool $forcePersist = false): Response { $entity = $this->getEntity($action, $id, $request); @@ -500,14 +502,14 @@ class ApiController extends AbstractCRUDController return $this->json( $postedData, Response::HTTP_OK, - [], + [], $this->getContextForSerializationPostAlter($action, $request, $_format, $entity, [$postedData]) ); } throw new \Exception('Unable to handle such request method.'); } - + /** * Serialize collections * @@ -520,7 +522,7 @@ class ApiController extends AbstractCRUDController return $this->json($model, Response::HTTP_OK, [], $context); } - + protected function getContextForSerialization(string $action, Request $request, string $_format, $entity): array { @@ -537,7 +539,7 @@ class ApiController extends AbstractCRUDController } /** - * Get the context for serialization post alter query (in case of + * Get the context for serialization post alter query (in case of * PATCH, PUT, or POST method) * * This is called **after** the entity was altered. @@ -565,7 +567,7 @@ class ApiController extends AbstractCRUDController throw new \RuntimeException(sprintf("the config does not have any role for the ". "method %s nor a global role for the whole action. Add those to your ". "configuration or override the required method", $request->getMethod())); - + } protected function getSerializer(): SerializerInterface diff --git a/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php b/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php index 3f4fb8414..762654fbb 100644 --- a/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php +++ b/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php @@ -52,7 +52,7 @@ class CRUDController extends AbstractController */ protected function deleteAction(string $action, Request $request, $id, $formClass = null): Response { - $this->onPreDelete($action, $request, $id); + $this->onPreDelete($action, $request); $entity = $this->getEntity($action, $id, $request); @@ -311,11 +311,12 @@ class CRUDController extends AbstractController */ protected function buildQueryEntities(string $action, Request $request) { - $query = $this->getDoctrine()->getManager() + $query = $this + ->getDoctrine() + ->getManager() ->createQueryBuilder() ->select('e') - ->from($this->getEntityClass(), 'e') - ; + ->from($this->getEntityClass(), 'e'); $this->customizeQuery($action, $request, $query); @@ -340,7 +341,7 @@ class CRUDController extends AbstractController */ protected function queryEntities(string $action, Request $request, PaginatorInterface $paginator, ?FilterOrderHelper $filterOrder = null) { - $query = $this->buildQueryEntities($action, $request, $filterOrder) + $query = $this->buildQueryEntities($action, $request) ->setFirstResult($paginator->getCurrentPage()->getFirstItemNumber()) ->setMaxResults($paginator->getItemsPerPage()); @@ -389,7 +390,7 @@ class CRUDController extends AbstractController */ protected function countEntities(string $action, Request $request, ?FilterOrderHelper $filterOrder = null): int { - return $this->buildQueryEntities($action, $request, $filterOrder) + return $this->buildQueryEntities($action, $request) ->select('COUNT(e)') ->getQuery() ->getSingleScalarResult() diff --git a/src/Bundle/ChillMainBundle/Controller/UserController.php b/src/Bundle/ChillMainBundle/Controller/UserController.php index 735546eba..bb8203011 100644 --- a/src/Bundle/ChillMainBundle/Controller/UserController.php +++ b/src/Bundle/ChillMainBundle/Controller/UserController.php @@ -1,5 +1,7 @@ createEditPasswordForm($user, $request); + $editForm = $this->createEditPasswordForm($user); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { @@ -208,7 +194,7 @@ class UserController extends CRUDController * @Route("/{_locale}/admin/main/user/{uid}/add_link_groupcenter", * name="admin_user_add_groupcenter") */ - public function addLinkGroupCenterAction(Request $request, $uid): RedirectResponse + public function addLinkGroupCenterAction(Request $request, $uid): Response { $em = $this->getDoctrine()->getManager(); @@ -238,23 +224,22 @@ class UserController extends CRUDController return $this->redirect($this->generateUrl('chill_crud_admin_user_edit', \array_merge(['id' => $uid], $returnPathParams))); - } else { - foreach($this->validator->validate($user) as $error) + } + + foreach($this->validator->validate($user) as $error) { $this->addFlash('error', $error->getMessage()); } } - return $this->render('@ChillMain/User/edit.html.twig', array( + return $this->render('@ChillMain/User/edit.html.twig', [ 'entity' => $user, 'edit_form' => $this->createEditForm($user)->createView(), - 'add_groupcenter_form' => $this->createAddLinkGroupCenterForm($user)->createView(), + 'add_groupcenter_form' => $this->createAddLinkGroupCenterForm($user, $request)->createView(), 'delete_groupcenter_form' => array_map( - function(\Symfony\Component\Form\Form $form) { - return $form->createView(); - - }, - iterator_to_array($this->getDeleteLinkGroupCenterByUser($user), true)) - )); + static fn(Form $form) => $form->createView(), + iterator_to_array($this->getDeleteLinkGroupCenterByUser($user, $request), true) + ) + ]); } private function getPersistedGroupCenter(GroupCenter $groupCenter) @@ -279,10 +264,8 @@ class UserController extends CRUDController * Creates a form to delete a link to a GroupCenter * * @param mixed $permissionsGroup The entity id - * - * @return \Symfony\Component\Form\Form The form */ - private function createDeleteLinkGroupCenterForm(User $user, GroupCenter $groupCenter, $request) + private function createDeleteLinkGroupCenterForm(User $user, GroupCenter $groupCenter, $request): FormInterface { $returnPathParams = $request->query->has('returnPath') ? ['returnPath' => $request->query->get('returnPath')] : []; @@ -291,39 +274,29 @@ class UserController extends CRUDController array_merge($returnPathParams, ['uid' => $user->getId(), 'gcid' => $groupCenter->getId()]))) ->setMethod('DELETE') ->add('submit', SubmitType::class, array('label' => 'Delete')) - ->getForm() - ; + ->getForm(); } /** - * create a form to add a link to a groupcenter - * - * @param User $user - * @return \Symfony\Component\Form\Form + * Create a form to add a link to a groupcenter. */ - private function createAddLinkGroupCenterForm(User $user, Request $request) + private function createAddLinkGroupCenterForm(User $user, Request $request): FormInterface { $returnPathParams = $request->query->has('returnPath') ? ['returnPath' => $request->query->get('returnPath')] : []; return $this->createFormBuilder() - ->setAction($this->generateUrl('admin_user_add_groupcenter', - array_merge($returnPathParams, ['uid' => $user->getId()]))) - ->setMethod('POST') - ->add(self::FORM_GROUP_CENTER_COMPOSED, ComposedGroupCenterType::class) - ->add('submit', SubmitType::class, array('label' => 'Add a new groupCenter')) - ->getForm() - ; + ->setAction($this->generateUrl('admin_user_add_groupcenter', + array_merge($returnPathParams, ['uid' => $user->getId()]))) + ->setMethod('POST') + ->add(self::FORM_GROUP_CENTER_COMPOSED, ComposedGroupCenterType::class) + ->add('submit', SubmitType::class, array('label' => 'Add a new groupCenter')) + ->getForm(); } - /** - * - * @param User $user - */ private function getDeleteLinkGroupCenterByUser(User $user, Request $request) { foreach ($user->getGroupCenters() as $groupCenter) { - yield $groupCenter->getId() => $this - ->createDeleteLinkGroupCenterForm($user, $groupCenter, $request); + yield $groupCenter->getId() => $this->createDeleteLinkGroupCenterForm($user, $groupCenter, $request); } } } diff --git a/src/Bundle/ChillMainBundle/Search/SearchApi.php b/src/Bundle/ChillMainBundle/Search/SearchApi.php index 877f1c330..30ecb8d3d 100644 --- a/src/Bundle/ChillMainBundle/Search/SearchApi.php +++ b/src/Bundle/ChillMainBundle/Search/SearchApi.php @@ -1,5 +1,7 @@ em = $em; $this->providers[] = $searchPerson; $this->providers[] = $thirdPartyApiSearch; @@ -126,7 +125,7 @@ class SearchApi private function fetchRawResult($queries, $types, $parameters, $paginator): array { - list($union, $parameters) = $this->buildUnionQuery($queries, $types, $parameters, $paginator); + list($union, $parameters) = $this->buildUnionQuery($queries, $types, $parameters); $rsm = new ResultSetMappingBuilder($this->em); $rsm->addScalarResult('key', 'key', Types::STRING) ->addScalarResult('metadata', 'metadata', Types::JSON) diff --git a/src/Bundle/ChillMainBundle/Security/Authorization/AuthorizationHelper.php b/src/Bundle/ChillMainBundle/Security/Authorization/AuthorizationHelper.php index 03adbdbc9..53ee73216 100644 --- a/src/Bundle/ChillMainBundle/Security/Authorization/AuthorizationHelper.php +++ b/src/Bundle/ChillMainBundle/Security/Authorization/AuthorizationHelper.php @@ -1,21 +1,6 @@ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ +declare(strict_types=1); namespace Chill\MainBundle\Security\Authorization; @@ -43,7 +28,6 @@ use Chill\MainBundle\Entity\RoleScope; * Helper for authorizations. * * Provides methods for user and entities information. - * */ class AuthorizationHelper implements AuthorizationHelperInterface { @@ -74,11 +58,7 @@ class AuthorizationHelper implements AuthorizationHelperInterface /** * Determines if a user is active on this center * - * If - * - * @param User $user * @param Center|Center[] $center May be an array of center - * @return bool */ public function userCanReachCenter(User $user, $center): bool { @@ -89,7 +69,9 @@ class AuthorizationHelper implements AuthorizationHelperInterface } } return false; - } elseif ($center instanceof Center) { + } + + if ($center instanceof Center) { foreach ($user->getGroupCenters() as $groupCenter) { if ($center->getId() === $groupCenter->getCenter()->getId()) { return true; @@ -99,12 +81,16 @@ class AuthorizationHelper implements AuthorizationHelperInterface return false; } - throw new \UnexpectedValueException(sprintf("The entity given is not an ". - "instance of %s, %s given", Center::class, get_class($center))); + throw new \UnexpectedValueException( + sprintf( + 'The entity given is not an instance of %s, %s given', + Center::class, + get_class($center) + ) + ); } /** - * * Determines if the user has access to the given entity. * * if the entity implements Chill\MainBundle\Entity\HasScopeInterface, @@ -243,7 +229,7 @@ class AuthorizationHelper implements AuthorizationHelperInterface } foreach ($centers as $center) { - if ($this->userCanReachCenter($user, $center, $role)) { + if ($this->userCanReachCenter($user, $center)) { $results[] = $center; } } diff --git a/src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php b/src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php index 99bac1e5a..9b73fa817 100644 --- a/src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php +++ b/src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php @@ -494,6 +494,7 @@ EOF $openingDateString = trim($row[array_search('opening_date', $headers)]); $openingDate = $this->processDate($openingDateString, $this->input->getOption('opening_date_format')); + // @TODO: Fix the constructor parameter, $openingDate does not exists. $person = $openingDate instanceof \DateTime ? new Person($openingDate) : new Person(); // add the center $center = $this->getCenter($row, $headers); diff --git a/src/Bundle/ChillPersonBundle/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index 5ea7aaf00..e17bd5ceb 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -1,26 +1,8 @@ , - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ +namespace Chill\PersonBundle\Entity; use ArrayIterator; use Chill\MainBundle\Doctrine\Model\TrackCreationInterface; @@ -1330,7 +1312,7 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI */ public function getLastAddress(DateTime $from = null) { - return $this->getCurrentPersonAddress($from); + return $this->getCurrentPersonAddress(); } /**