From 48daed26f9501fb40f2f5112a994f75c34bf802f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 27 Apr 2022 14:30:50 +0200 Subject: [PATCH 1/5] replace BadRequestException by BadRequestHttpException --- .../CRUD/Controller/ApiController.php | 16 ++++++++-------- .../CRUD/Controller/CRUDController.php | 3 ++- .../Controller/SearchController.php | 3 +-- .../Controller/WorkflowController.php | 3 +-- .../AccompanyingCourseApiController.php | 10 +++++----- .../Controller/AccompanyingCourseController.php | 4 ++-- .../Controller/HouseholdController.php | 6 +++--- .../Controller/HouseholdMemberController.php | 4 ++-- .../Controller/SingleTaskController.php | 3 +-- 9 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php b/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php index a780af78a..9bf43b37e 100644 --- a/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php +++ b/src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php @@ -16,9 +16,9 @@ use Chill\MainBundle\Serializer\Model\Collection; use Exception; use LogicException; use RuntimeException; -use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Serializer\Exception\NotEncodableValueException; use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; use Symfony\Component\Serializer\SerializerInterface; @@ -55,7 +55,7 @@ class ApiController extends AbstractCRUDController return $this->entityDelete('_entity', $request, $id, $_format); default: - throw new \Symfony\Component\HttpFoundation\Exception\BadRequestException('This method is not implemented'); + throw new BadRequestHttpException('This method is not implemented'); } } @@ -120,7 +120,7 @@ class ApiController extends AbstractCRUDController return $this->entityPostAction('_entity', $request, $_format); default: - throw new \Symfony\Component\HttpFoundation\Exception\BadRequestException('This method is not implemented'); + throw new BadRequestHttpException('This method is not implemented'); } } @@ -160,7 +160,7 @@ class ApiController extends AbstractCRUDController try { $entity = $this->deserialize($action, $request, $_format, $entity); } catch (NotEncodableValueException $e) { - throw new BadRequestException('invalid json', 400, $e); + throw new BadRequestHttpException('invalid json', 400, $e); } $errors = $this->validate($action, $request, $_format, $entity); @@ -273,7 +273,7 @@ class ApiController extends AbstractCRUDController try { $postedData = $this->getSerializer()->deserialize($request->getContent(), $postedDataType, $_format, $postedDataContext); } catch (\Symfony\Component\Serializer\Exception\UnexpectedValueException $e) { - throw new BadRequestException(sprintf('Unable to deserialize posted ' . + throw new BadRequestHttpException(sprintf('Unable to deserialize posted ' . 'data: %s', $e->getMessage()), 0, $e); } @@ -290,7 +290,7 @@ class ApiController extends AbstractCRUDController break; default: - throw new BadRequestException('this method is not supported'); + throw new BadRequestHttpException('this method is not supported'); } $errors = $this->validate($action, $request, $_format, $entity, [$postedData]); @@ -408,7 +408,7 @@ class ApiController extends AbstractCRUDController return $this->json($entity, Response::HTTP_OK, [], $context); } - throw new \Symfony\Component\HttpFoundation\Exception\BadRequestException('This format is not implemented'); + throw new BadRequestHttpException('This format is not implemented'); } protected function entityPostAction($action, Request $request, string $_format): Response @@ -418,7 +418,7 @@ class ApiController extends AbstractCRUDController try { $entity = $this->deserialize($action, $request, $_format, $entity); } catch (NotEncodableValueException $e) { - throw new BadRequestException('invalid json', 400, $e); + throw new BadRequestHttpException('invalid json', 400, $e); } $errors = $this->validate($action, $request, $_format, $entity); diff --git a/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php b/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php index 62d587ab3..edca07b41 100644 --- a/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php +++ b/src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php @@ -25,6 +25,7 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -1140,6 +1141,6 @@ class CRUDController extends AbstractController return $this->json($entity, Response::HTTP_OK, [], $context); } - throw new \Symfony\Component\HttpFoundation\Exception\BadRequestException('This format is not implemented'); + throw new BadRequestHttpException('This format is not implemented'); } } diff --git a/src/Bundle/ChillMainBundle/Controller/SearchController.php b/src/Bundle/ChillMainBundle/Controller/SearchController.php index 41349336a..496538665 100644 --- a/src/Bundle/ChillMainBundle/Controller/SearchController.php +++ b/src/Bundle/ChillMainBundle/Controller/SearchController.php @@ -22,7 +22,6 @@ use Chill\MainBundle\Search\UnknowSearchNameException; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; -use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; @@ -216,7 +215,7 @@ class SearchController extends AbstractController $types = $request->query->get('type', []); if (count($types) === 0) { - throw new BadRequestException('The request must contains at ' + throw new BadRequestHttpException('The request must contains at ' . ' one type'); } diff --git a/src/Bundle/ChillMainBundle/Controller/WorkflowController.php b/src/Bundle/ChillMainBundle/Controller/WorkflowController.php index 103de6d84..2803ff254 100644 --- a/src/Bundle/ChillMainBundle/Controller/WorkflowController.php +++ b/src/Bundle/ChillMainBundle/Controller/WorkflowController.php @@ -25,7 +25,6 @@ use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; -use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; @@ -144,7 +143,7 @@ class WorkflowController extends AbstractController public function getAccessByAccessKey(EntityWorkflowStep $entityWorkflowStep, Request $request): Response { if (null === $accessKey = $request->query->get('accessKey', null)) { - throw new BadRequestException('accessKey is missing'); + throw new BadRequestHttpException('accessKey is missing'); } if (!$this->getUser() instanceof User) { diff --git a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php index f1306640b..21db6b00c 100644 --- a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php +++ b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php @@ -33,10 +33,10 @@ use DateInterval; use DateTimeImmutable; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\Serializer\Exception\RuntimeException; @@ -185,7 +185,7 @@ final class AccompanyingCourseApiController extends ApiController ->deserialize($request->getContent(), Person::class, $_format, []); if (null === $person) { - throw new BadRequestException('person id not found'); + throw new BadRequestHttpException('person id not found'); } // TODO add acl @@ -204,7 +204,7 @@ final class AccompanyingCourseApiController extends ApiController break; default: - throw new BadRequestException('This method is not supported'); + throw new BadRequestHttpException('This method is not supported'); } $errors = $this->validator->validate($accompanyingPeriod); @@ -247,12 +247,12 @@ final class AccompanyingCourseApiController extends ApiController } if (null === $requestor) { - throw new BadRequestException('Could not find any person or thirdparty', 0, null); + throw new BadRequestHttpException('Could not find any person or thirdparty', 0, null); } $accompanyingPeriod->setRequestor($requestor); } else { - throw new BadRequestException('method not supported'); + throw new BadRequestHttpException('method not supported'); } $errors = $this->validator->validate($accompanyingPeriod); diff --git a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseController.php b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseController.php index b15f8adb9..4d78bb42b 100644 --- a/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseController.php +++ b/src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseController.php @@ -21,9 +21,9 @@ use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\Form\Extension\Core\Type\SubmitType; -use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\Validator\ConstraintViolationInterface; @@ -255,7 +255,7 @@ class AccompanyingCourseController extends Controller $personIds = $request->query->get('person_id'); if (false === is_array($personIds)) { - throw new BadRequestException('person_id parameter should be an array'); + throw new BadRequestHttpException('person_id parameter should be an array'); } foreach ($personIds as $personId) { diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php index 7b6dc201e..503867a3e 100644 --- a/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php +++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdController.php @@ -21,8 +21,8 @@ use Chill\PersonBundle\Security\Authorization\HouseholdVoter; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Form\FormInterface; -use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Security; use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; @@ -202,7 +202,7 @@ class HouseholdController extends AbstractController $this->denyAccessUnlessGranted(HouseholdVoter::EDIT, $household); if (!$request->query->has('address_id')) { - throw new BadRequestException('parameter address_id is missing'); + throw new BadRequestHttpException('parameter address_id is missing'); } $address_id = $request->query->getInt('address_id'); @@ -218,7 +218,7 @@ class HouseholdController extends AbstractController } if (null === $address) { - throw new BadRequestException('The edited address does not belongs to the household'); + throw new BadRequestHttpException('The edited address does not belongs to the household'); } $form = $this->createForm(AddressDateType::class, $address, []); diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php index 2ec72a786..a595eb8c7 100644 --- a/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php +++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php @@ -20,9 +20,9 @@ use Chill\PersonBundle\Form\HouseholdMemberType; use Chill\PersonBundle\Household\MembersEditor; use Chill\PersonBundle\Repository\AccompanyingPeriodRepository; use Chill\PersonBundle\Security\Authorization\PersonVoter; -use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Serializer\Exception; @@ -105,7 +105,7 @@ class HouseholdMemberController extends ApiController $ids = $request->query->get('persons', []); if (0 === count($ids)) { - throw new BadRequestException('parameters persons in query ' . + throw new BadRequestHttpException('parameters persons in query ' . 'is not an array or empty'); } diff --git a/src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php b/src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php index b4b6727b2..355015215 100644 --- a/src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php +++ b/src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php @@ -33,7 +33,6 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\FormFactoryInterface; -use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -494,7 +493,7 @@ final class SingleTaskController extends AbstractController ); default: - throw new BadRequestException("format not supported: {$_format}"); + throw new BadRequestHttpException("format not supported: {$_format}"); } } From 916e3ab02def2ae6e36963d36109eb6a66a91dfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 27 Apr 2022 14:31:59 +0200 Subject: [PATCH 2/5] ignore phpcs cache for phpstan --- phpstan.neon.dist | 1 + 1 file changed, 1 insertion(+) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index edec00554..3322f9539 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -3,6 +3,7 @@ parameters: paths: - src/ excludePaths: + - .php_cs* - docs/ - src/Bundle/*/Tests/* - src/Bundle/*/tests/* From 4794039250c3106d5fb3e8901e06ebe65aedb9da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 27 Apr 2022 14:45:42 +0200 Subject: [PATCH 3/5] declare properties used for cache --- phpstan-critical.neon | 5 ----- src/Bundle/ChillPersonBundle/Entity/Person.php | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/phpstan-critical.neon b/phpstan-critical.neon index 262d3012f..1dc516834 100644 --- a/phpstan-critical.neon +++ b/phpstan-critical.neon @@ -5,11 +5,6 @@ parameters: count: 1 path: src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php - - - message: "#^Access to an undefined property Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:\\$currentHouseholdParticipationAt\\.$#" - count: 3 - path: src/Bundle/ChillPersonBundle/Entity/Person.php - - message: "#^Access to an undefined property Chill\\\\PersonBundle\\\\Entity\\\\Household\\\\PersonHouseholdAddress\\:\\:\\$relation\\.$#" count: 1 diff --git a/src/Bundle/ChillPersonBundle/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index ef522f068..7f2630a1e 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -240,6 +240,11 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI */ private array $currentHouseholdAt = []; + /** + * Cache for the computation of current household participation. + */ + private array $currentHouseholdParticipationAt = []; + /** * The current person address. * From fa7850196f9a3d32b7878945ba92b3cb4f7a754e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 27 Apr 2022 14:46:08 +0200 Subject: [PATCH 4/5] force using strict type on comparison --- src/Bundle/ChillReportBundle/Controller/ReportController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Bundle/ChillReportBundle/Controller/ReportController.php b/src/Bundle/ChillReportBundle/Controller/ReportController.php index bca915090..33ddd3a39 100644 --- a/src/Bundle/ChillReportBundle/Controller/ReportController.php +++ b/src/Bundle/ChillReportBundle/Controller/ReportController.php @@ -334,7 +334,7 @@ class ReportController extends AbstractController $cFGroupId = $request->query->get('cFGroup'); - if ($cFGroupId) { + if ($request->query->has('cFGroup')) { return $this->redirect( $this->generateUrl( 'report_new', @@ -391,7 +391,7 @@ class ReportController extends AbstractController { $cFGroupId = $request->query->get('cFGroup'); - if ($cFGroupId) { + if ($request->query->has('cFGroup')) { return $this->redirect( $this->generateUrl( 'report_export_list', From 9789c794025aa30e5b6e5001b53dfed6dd9406ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 27 Apr 2022 14:46:43 +0200 Subject: [PATCH 5/5] use strict type comparison and replace use of BadRequestException by BadRequestHttpException --- .../Controller/HouseholdMemberController.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php b/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php index a595eb8c7..cacba0630 100644 --- a/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php +++ b/src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php @@ -121,7 +121,8 @@ class HouseholdMemberController extends ApiController } } - if ($householdId = $request->query->get('household', false)) { + if ($request->query->has('household')) { + $householdId = $request->query->get('household', false); $household = $em->getRepository(Household::class) ->find($householdId); $allowHouseholdCreate = false; @@ -189,7 +190,7 @@ class HouseholdMemberController extends ApiController ['groups' => ['read']] ); } catch (Exception\InvalidArgumentException|Exception\UnexpectedValueException $e) { - throw new BadRequestException("Deserialization error: {$e->getMessage()}", 45896, $e); + throw new BadRequestHttpException("Deserialization error: {$e->getMessage()}", 45896, $e); } // TODO ACL