From 6fd80f9f2e4995181993014bf4923a9a4b53150a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Sun, 5 Nov 2023 23:08:13 +0100 Subject: [PATCH] [export] fix data type from form: either collection or array --- .changes/unreleased/Fixed-20231105-230426.yaml | 5 +++++ .../Export/Filter/ActivityTypeFilter.php | 2 +- .../Export/Filter/PersonFilters/ActivityReasonFilter.php | 3 ++- .../ChillActivityBundle/Export/Filter/UsersJobFilter.php | 3 ++- .../Export/Filter/UsersScopeFilter.php | 3 ++- .../Tests/Export/Filter/ActivityReasonFilterTest.php | 6 +++++- .../Tests/Export/Filter/ActivityTypeFilterTest.php | 3 +++ .../src/Export/Filter/ByActivityTypeFilter.php | 3 ++- .../src/Export/Filter/ByLocationFilter.php | 8 +++++++- .../src/Export/Filter/ByUserJobFilter.php | 3 ++- .../src/Export/Filter/ByUserScopeFilter.php | 3 ++- .../AccompanyingCourseFilters/SocialIssueFilter.php | 5 ++++- .../Filter/AccompanyingCourseFilters/UserJobFilter.php | 3 ++- .../Filter/AccompanyingCourseFilters/UserScopeFilter.php | 3 ++- .../AccompanyingCourseFilters/SocialIssueFilterTest.php | 1 + .../AccompanyingCourseFilters/UserJobFilterTest.php | 5 +++++ .../AccompanyingCourseFilters/UserScopeFilterTest.php | 4 ++++ 17 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 .changes/unreleased/Fixed-20231105-230426.yaml diff --git a/.changes/unreleased/Fixed-20231105-230426.yaml b/.changes/unreleased/Fixed-20231105-230426.yaml new file mode 100644 index 000000000..a7186fe14 --- /dev/null +++ b/.changes/unreleased/Fixed-20231105-230426.yaml @@ -0,0 +1,5 @@ +kind: Fixed +body: Fix "problem during download" on some filters, which used a wrong data type +time: 2023-11-05T23:04:26.346839079+01:00 +custom: + Issue: "183" diff --git a/src/Bundle/ChillActivityBundle/Export/Filter/ActivityTypeFilter.php b/src/Bundle/ChillActivityBundle/Export/Filter/ActivityTypeFilter.php index 43f9ba0da..ae47146df 100644 --- a/src/Bundle/ChillActivityBundle/Export/Filter/ActivityTypeFilter.php +++ b/src/Bundle/ChillActivityBundle/Export/Filter/ActivityTypeFilter.php @@ -80,7 +80,7 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter // collect all the reasons'name used in this filter in one array $reasonsNames = array_map( fn (ActivityType $t): string => $this->translatableStringHelper->localize($t->getName()), - $this->activityTypeRepository->findBy(['id' => $data['types']->toArray()]) + $this->activityTypeRepository->findBy(['id' => $data['types'] instanceof \Doctrine\Common\Collections\Collection ? $data['types']->toArray() : $data['types']]) ); return ['Filtered by activity type: only %list%', [ diff --git a/src/Bundle/ChillActivityBundle/Export/Filter/PersonFilters/ActivityReasonFilter.php b/src/Bundle/ChillActivityBundle/Export/Filter/PersonFilters/ActivityReasonFilter.php index 3f71add31..b8ce3259f 100644 --- a/src/Bundle/ChillActivityBundle/Export/Filter/PersonFilters/ActivityReasonFilter.php +++ b/src/Bundle/ChillActivityBundle/Export/Filter/PersonFilters/ActivityReasonFilter.php @@ -17,6 +17,7 @@ use Chill\ActivityBundle\Repository\ActivityReasonRepository; use Chill\MainBundle\Export\ExportElementValidatedInterface; use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Templating\TranslatableStringHelper; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Query\Expr; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; @@ -79,7 +80,7 @@ class ActivityReasonFilter implements ExportElementValidatedInterface, FilterInt // collect all the reasons'name used in this filter in one array $reasonsNames = array_map( fn (ActivityReason $r): string => '"'.$this->translatableStringHelper->localize($r->getName()).'"', - $this->activityReasonRepository->findBy(['id' => $data['reasons']->toArray()]) + $this->activityReasonRepository->findBy(['id' => $data['reasons'] instanceof Collection ? $data['reasons']->toArray() : $data['reasons']]) ); return [ diff --git a/src/Bundle/ChillActivityBundle/Export/Filter/UsersJobFilter.php b/src/Bundle/ChillActivityBundle/Export/Filter/UsersJobFilter.php index b65994b9d..23bd4f84c 100644 --- a/src/Bundle/ChillActivityBundle/Export/Filter/UsersJobFilter.php +++ b/src/Bundle/ChillActivityBundle/Export/Filter/UsersJobFilter.php @@ -17,6 +17,7 @@ use Chill\MainBundle\Entity\User\UserJobHistory; use Chill\MainBundle\Entity\UserJob; use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Templating\TranslatableStringHelperInterface; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\FormBuilderInterface; @@ -80,7 +81,7 @@ class UsersJobFilter implements FilterInterface ', ', array_map( fn (UserJob $job) => $this->translatableStringHelper->localize($job->getLabel()), - $data['jobs']->toArray() + $data['jobs'] instanceof Collection ? $data['jobs']->toArray() : $data['jobs'] ) ), ]]; diff --git a/src/Bundle/ChillActivityBundle/Export/Filter/UsersScopeFilter.php b/src/Bundle/ChillActivityBundle/Export/Filter/UsersScopeFilter.php index 4c4a83c20..4ce9c845a 100644 --- a/src/Bundle/ChillActivityBundle/Export/Filter/UsersScopeFilter.php +++ b/src/Bundle/ChillActivityBundle/Export/Filter/UsersScopeFilter.php @@ -18,6 +18,7 @@ use Chill\MainBundle\Entity\User\UserScopeHistory; use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Repository\ScopeRepositoryInterface; use Chill\MainBundle\Templating\TranslatableStringHelperInterface; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\FormBuilderInterface; @@ -83,7 +84,7 @@ class UsersScopeFilter implements FilterInterface ', ', array_map( fn (Scope $s) => $this->translatableStringHelper->localize($s->getName()), - $data['scopes']->toArray() + $data['scopes'] instanceof Collection ? $data['scopes']->toArray() : $data['scopes'] ) ), ]]; diff --git a/src/Bundle/ChillActivityBundle/Tests/Export/Filter/ActivityReasonFilterTest.php b/src/Bundle/ChillActivityBundle/Tests/Export/Filter/ActivityReasonFilterTest.php index 3d1f1fa2d..c018efa18 100644 --- a/src/Bundle/ChillActivityBundle/Tests/Export/Filter/ActivityReasonFilterTest.php +++ b/src/Bundle/ChillActivityBundle/Tests/Export/Filter/ActivityReasonFilterTest.php @@ -52,6 +52,7 @@ final class ActivityReasonFilterTest extends AbstractFilterTest public function getFormData() { self::bootKernel(); + $data = []; $em = self::$container ->get(EntityManagerInterface::class); @@ -62,10 +63,13 @@ final class ActivityReasonFilterTest extends AbstractFilterTest // generate an array of 5 different combination of results for ($i = 0; 5 > $i; ++$i) { - yield ['reasons' => new ArrayCollection(array_splice($reasons, ($i + 1) * -1))]; + $data[] = ['reasons' => new ArrayCollection(array_splice($reasons, ($i + 1) * -1))]; + $data[] = ['reasons' => array_splice($reasons, ($i + 1) * -1)]; } self::ensureKernelShutdown(); + + return $data; } public function getQueryBuilders(): iterable diff --git a/src/Bundle/ChillActivityBundle/Tests/Export/Filter/ActivityTypeFilterTest.php b/src/Bundle/ChillActivityBundle/Tests/Export/Filter/ActivityTypeFilterTest.php index 5f94b4579..376614228 100644 --- a/src/Bundle/ChillActivityBundle/Tests/Export/Filter/ActivityTypeFilterTest.php +++ b/src/Bundle/ChillActivityBundle/Tests/Export/Filter/ActivityTypeFilterTest.php @@ -57,6 +57,9 @@ final class ActivityTypeFilterTest extends AbstractFilterTest $data[] = [ 'types' => new ArrayCollection([$a]), ]; + /*$data[] = [ + 'types' => [$a], + ];*/ } return $data; diff --git a/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByActivityTypeFilter.php b/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByActivityTypeFilter.php index b78640d49..708b12ef1 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByActivityTypeFilter.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByActivityTypeFilter.php @@ -17,6 +17,7 @@ use Chill\AsideActivityBundle\Repository\AsideActivityCategoryRepository; use Chill\AsideActivityBundle\Templating\Entity\CategoryRender; use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Templating\TranslatableStringHelperInterface; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\FormBuilderInterface; @@ -76,7 +77,7 @@ class ByActivityTypeFilter implements FilterInterface { $types = array_map( fn (AsideActivityCategory $t): string => $this->translatableStringHelper->localize($t->getTitle()), - $data['types']->toArray() + $data['types'] instanceof Collection ? $data['types']->toArray() : $data['types'] ); return ['export.filter.Filtered by aside activity type: only %type%', [ diff --git a/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByLocationFilter.php b/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByLocationFilter.php index 0be041dc9..6de002606 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByLocationFilter.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByLocationFilter.php @@ -16,6 +16,7 @@ use Chill\MainBundle\Entity\Location; use Chill\MainBundle\Entity\User; use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Form\Type\PickUserLocationType; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\QueryBuilder; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Security\Core\Security; @@ -54,7 +55,12 @@ final readonly class ByLocationFilter implements FilterInterface public function describeAction($data, $format = 'string'): array { - $locations = $data['locations']->map(fn (Location $l): string => $l->getName()); + $extractFunction = fn (Location $l): string => $l->getName(); + if ($data['locations'] instanceof Collection) { + $locations = $data['locations']->map($extractFunction); + } else { + $locations = array_map($extractFunction, $data['locations']); + } return ['export.filter.Filtered by aside activity location: only %location%', [ '%location%' => implode(', ', $locations), diff --git a/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserJobFilter.php b/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserJobFilter.php index 3d5bb6530..d7255d9fa 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserJobFilter.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserJobFilter.php @@ -17,6 +17,7 @@ use Chill\MainBundle\Entity\User\UserJobHistory; use Chill\MainBundle\Entity\UserJob; use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Templating\TranslatableStringHelperInterface; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\FormBuilderInterface; @@ -80,7 +81,7 @@ class ByUserJobFilter implements FilterInterface ', ', array_map( fn (UserJob $job) => $this->translatableStringHelper->localize($job->getLabel()), - $data['jobs']->toArray() + $data['jobs'] instanceof Collection ? $data['jobs']->toArray() : $data['jobs'] ) ), ]]; diff --git a/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserScopeFilter.php b/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserScopeFilter.php index 846814785..8f8d50462 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserScopeFilter.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserScopeFilter.php @@ -18,6 +18,7 @@ use Chill\MainBundle\Entity\User\UserScopeHistory; use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Repository\ScopeRepositoryInterface; use Chill\MainBundle\Templating\TranslatableStringHelperInterface; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\FormBuilderInterface; @@ -83,7 +84,7 @@ class ByUserScopeFilter implements FilterInterface ', ', array_map( fn (Scope $s) => $this->translatableStringHelper->localize($s->getName()), - $data['scopes']->toArray() + $data['scopes'] instanceof Collection ? $data['scopes']->toArray() : $data['scopes'] ) ), ]]; diff --git a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/SocialIssueFilter.php b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/SocialIssueFilter.php index 7b5bb81dc..52010ff81 100644 --- a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/SocialIssueFilter.php +++ b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/SocialIssueFilter.php @@ -16,6 +16,7 @@ use Chill\PersonBundle\Entity\SocialWork\SocialIssue; use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Form\Type\PickSocialIssueType; use Chill\PersonBundle\Templating\Entity\SocialIssueRender; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\QueryBuilder; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -50,7 +51,9 @@ class SocialIssueFilter implements FilterInterface $qb->andWhere($clause) ->setParameter( 'socialissues', - SocialIssue::getDescendantsWithThisForIssues($data['accepted_socialissues']->toArray()) + SocialIssue::getDescendantsWithThisForIssues( + $data['accepted_socialissues'] instanceof Collection ? $data['accepted_socialissues']->toArray() : $data['accepted_socialissues'] + ) ); } diff --git a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php index df8afefa9..3c6c12c63 100644 --- a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php +++ b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php @@ -17,6 +17,7 @@ use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Repository\UserJobRepositoryInterface; use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\PersonBundle\Export\Declarations; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; @@ -105,7 +106,7 @@ class UserJobFilter implements FilterInterface ', ', array_map( fn (UserJob $job) => $this->translatableStringHelper->localize($job->getLabel()), - $data['jobs']->toArray() + $data['jobs'] instanceof Collection ? $data['jobs']->toArray() : $data['jobs'] ) ), ], diff --git a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserScopeFilter.php b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserScopeFilter.php index f9ee7dcd9..e7ed194f1 100644 --- a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserScopeFilter.php +++ b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserScopeFilter.php @@ -17,6 +17,7 @@ use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Repository\ScopeRepositoryInterface; use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\PersonBundle\Export\Declarations; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; @@ -104,7 +105,7 @@ class UserScopeFilter implements FilterInterface ', ', array_map( fn (Scope $s) => $this->translatableStringHelper->localize($s->getName()), - $data['scopes']->toArray() + $data['scopes'] instanceof Collection ? $data['scopes']->toArray() : $data['scopes'] ) ), ], diff --git a/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/SocialIssueFilterTest.php b/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/SocialIssueFilterTest.php index 4f72d1ece..37d8ca8db 100644 --- a/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/SocialIssueFilterTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/SocialIssueFilterTest.php @@ -52,6 +52,7 @@ final class SocialIssueFilterTest extends AbstractFilterTest ->getResult(); yield ['accepted_socialissues' => new ArrayCollection($array)]; + yield ['accepted_socialissues' => $array]; } public function getQueryBuilders(): array diff --git a/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/UserJobFilterTest.php b/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/UserJobFilterTest.php index 115510ff5..560fe26a7 100644 --- a/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/UserJobFilterTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/UserJobFilterTest.php @@ -52,6 +52,11 @@ final class UserJobFilterTest extends AbstractFilterTest 'jobs' => new ArrayCollection($jobs), 'date_calc' => new RollingDate(RollingDate::T_TODAY), ]; + + yield [ + 'jobs' => $jobs, + 'date_calc' => new RollingDate(RollingDate::T_TODAY), + ]; } public function getQueryBuilders(): array diff --git a/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/UserScopeFilterTest.php b/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/UserScopeFilterTest.php index c6828b721..ec98f1bfd 100644 --- a/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/UserScopeFilterTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingCourseFilters/UserScopeFilterTest.php @@ -53,6 +53,10 @@ final class UserScopeFilterTest extends AbstractFilterTest 'date_calc' => new RollingDate(RollingDate::T_TODAY), 'scopes' => new ArrayCollection($scopes), ], + [ + 'date_calc' => new RollingDate(RollingDate::T_TODAY), + 'scopes' => $scopes, + ], ]; }