mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Refactor filters to support "me" as a user option.
Replaced `PickUserDynamicType` with `PickUserOrMeDynamicType` across filters to enable handling of the "me" option. Introduced normalization and denormalization methods for "me" and adjusted all relevant queries and test cases to accommodate this enhancement.
This commit is contained in:
parent
e1404bf16d
commit
3f5ce5f841
@ -14,7 +14,7 @@ namespace Chill\ActivityBundle\Export\Filter;
|
||||
use Chill\ActivityBundle\Export\Declarations;
|
||||
use Chill\MainBundle\Export\ExportGenerationContext;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||
use Chill\MainBundle\Form\Type\PickUserOrMeDynamicType;
|
||||
use Chill\MainBundle\Repository\UserRepositoryInterface;
|
||||
use Chill\MainBundle\Templating\Entity\UserRender;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
@ -31,11 +31,11 @@ final readonly class ActivityUsersFilter implements FilterInterface
|
||||
return null;
|
||||
}
|
||||
|
||||
public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
|
||||
public function alterQuery(QueryBuilder $qb, $data, ExportGenerationContext $exportGenerationContext): void
|
||||
{
|
||||
$orX = $qb->expr()->orX();
|
||||
|
||||
foreach ($data['accepted_users'] as $key => $user) {
|
||||
foreach ($this->userOrMe($data['accepted_users'], $exportGenerationContext) as $key => $user) {
|
||||
$orX->add($qb->expr()->isMemberOf(':activity_users_filter_u'.$key, 'activity.users'));
|
||||
$qb->setParameter('activity_users_filter_u'.$key, $user);
|
||||
}
|
||||
@ -50,7 +50,7 @@ final readonly class ActivityUsersFilter implements FilterInterface
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$builder->add('accepted_users', PickUserDynamicType::class, [
|
||||
$builder->add('accepted_users', PickUserOrMeDynamicType::class, [
|
||||
'multiple' => true,
|
||||
'label' => 'Users',
|
||||
]);
|
||||
@ -63,12 +63,12 @@ final readonly class ActivityUsersFilter implements FilterInterface
|
||||
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
return ['accepted_users' => $this->normalizeDoctrineEntity($formData['accepted_users'])];
|
||||
return ['accepted_users' => $this->normalizeUserOrMe($formData['accepted_users'])];
|
||||
}
|
||||
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
return ['accepted_users' => $this->denormalizeDoctrineEntity($formData['accepted_users'], $this->userRepository)];
|
||||
return ['accepted_users' => $this->denormalizeUserOrMe($formData['accepted_users'], $this->userRepository)];
|
||||
}
|
||||
|
||||
public function getFormDefaultData(): array
|
||||
@ -80,7 +80,7 @@ final readonly class ActivityUsersFilter implements FilterInterface
|
||||
{
|
||||
$users = [];
|
||||
|
||||
foreach ($data['accepted_users'] as $u) {
|
||||
foreach ($this->userOrMe($data['accepted_users'], $context) as $u) {
|
||||
$users[] = $this->userRender->renderString($u, []);
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@ class ByCreatorFilter implements FilterInterface
|
||||
->andWhere(
|
||||
$qb->expr()->in('activity.createdBy', ':users')
|
||||
)
|
||||
->setParameter('users', $data['accepted_users']);
|
||||
->setParameter('users', $this->userOrMe($data['accepted_users'], $exportGenerationContext));
|
||||
}
|
||||
|
||||
public function applyOn(): string
|
||||
@ -47,7 +47,7 @@ class ByCreatorFilter implements FilterInterface
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$builder->add('accepted_users', PickUserDynamicType::class, [
|
||||
$builder->add('accepted_users', PickUserOrMeDynamicType::class, [
|
||||
'multiple' => true,
|
||||
]);
|
||||
}
|
||||
@ -59,12 +59,12 @@ class ByCreatorFilter implements FilterInterface
|
||||
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
return ['accepted_users' => $this->normalizeDoctrineEntity($formData['accepted_users'])];
|
||||
return ['accepted_users' => $this->normalizeUserOrMe($formData['accepted_users'])];
|
||||
}
|
||||
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
return ['accepted_users' => $this->denormalizeDoctrineEntity($formData['accepted_users'], $this->userRepository)];
|
||||
return ['accepted_users' => $this->denormalizeUserOrMe($formData['accepted_users'], $this->userRepository)];
|
||||
}
|
||||
|
||||
public function getFormDefaultData(): array
|
||||
@ -76,7 +76,7 @@ class ByCreatorFilter implements FilterInterface
|
||||
{
|
||||
$users = [];
|
||||
|
||||
foreach ($data['accepted_users'] as $u) {
|
||||
foreach ($this->userOrMe($data['accepted_users'], $context) as $u) {
|
||||
$users[] = $this->userRender->renderString($u, []);
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ namespace Chill\ActivityBundle\Export\Filter;
|
||||
use Chill\ActivityBundle\Export\Declarations;
|
||||
use Chill\MainBundle\Export\ExportGenerationContext;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||
use Chill\MainBundle\Form\Type\PickUserOrMeDynamicType;
|
||||
use Chill\MainBundle\Repository\UserRepositoryInterface;
|
||||
use Chill\MainBundle\Templating\Entity\UserRender;
|
||||
use Doctrine\ORM\Query\Expr\Andx;
|
||||
@ -32,7 +32,7 @@ final readonly class UserFilter implements FilterInterface
|
||||
return null;
|
||||
}
|
||||
|
||||
public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
|
||||
public function alterQuery(QueryBuilder $qb, $data, ExportGenerationContext $exportGenerationContext): void
|
||||
{
|
||||
$where = $qb->getDQLPart('where');
|
||||
|
||||
@ -45,7 +45,7 @@ final readonly class UserFilter implements FilterInterface
|
||||
}
|
||||
|
||||
$qb->add('where', $where);
|
||||
$qb->setParameter('users', $data['accepted_users']);
|
||||
$qb->setParameter('users', $this->userOrMe($data['accepted_users'], $exportGenerationContext));
|
||||
}
|
||||
|
||||
public function applyOn(): string
|
||||
@ -55,7 +55,7 @@ final readonly class UserFilter implements FilterInterface
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$builder->add('accepted_users', PickUserDynamicType::class, [
|
||||
$builder->add('accepted_users', PickUserOrMeDynamicType::class, [
|
||||
'multiple' => true,
|
||||
'label' => 'Creators',
|
||||
]);
|
||||
@ -68,12 +68,12 @@ final readonly class UserFilter implements FilterInterface
|
||||
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
return ['accepted_users' => $this->normalizeDoctrineEntity($formData['accepted_users'])];
|
||||
return ['accepted_users' => $this->normalizeUserOrMe($formData['accepted_users'])];
|
||||
}
|
||||
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
return ['accepted_users' => $this->denormalizeDoctrineEntity($formData['accepted_users'], $this->userRepository)];
|
||||
return ['accepted_users' => $this->denormalizeUserOrMe($formData['accepted_users'], $this->userRepository)];
|
||||
}
|
||||
|
||||
public function getFormDefaultData(): array
|
||||
@ -85,7 +85,7 @@ final readonly class UserFilter implements FilterInterface
|
||||
{
|
||||
$users = [];
|
||||
|
||||
foreach ($data['accepted_users'] as $u) {
|
||||
foreach ($this->userOrMe($data['accepted_users'], $context) as $u) {
|
||||
$users[] = $this->userRender->renderString($u, []);
|
||||
}
|
||||
|
||||
|
@ -45,14 +45,20 @@ final class ByCreatorFilterTest extends AbstractFilterTest
|
||||
->from(User::class, 'u')
|
||||
->select('u')
|
||||
->getQuery()
|
||||
->setMaxResults(1)
|
||||
->getResult();
|
||||
$data = [];
|
||||
|
||||
foreach ($array as $a) {
|
||||
$data[] = [
|
||||
'accepted_users' => $a,
|
||||
];
|
||||
}
|
||||
|
||||
$data[] = [
|
||||
'accepted_users' => 'me',
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
@ -55,6 +55,10 @@ final class UserFilterTest extends AbstractFilterTest
|
||||
];
|
||||
}
|
||||
|
||||
$data[] = [
|
||||
'accepted_users' => 'me',
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ namespace Chill\AsideActivityBundle\Export\Filter;
|
||||
use Chill\AsideActivityBundle\Export\Declarations;
|
||||
use Chill\MainBundle\Export\ExportGenerationContext;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||
use Chill\MainBundle\Form\Type\PickUserOrMeDynamicType;
|
||||
use Chill\MainBundle\Repository\UserRepository;
|
||||
use Chill\MainBundle\Templating\Entity\UserRender;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
@ -37,7 +37,7 @@ final readonly class ByUserFilter implements FilterInterface
|
||||
|
||||
$qb
|
||||
->andWhere($clause)
|
||||
->setParameter('users', $data['accepted_users']);
|
||||
->setParameter('users', $this->userOrMe($data['accepted_users'], $exportGenerationContext));
|
||||
}
|
||||
|
||||
public function applyOn(): string
|
||||
@ -47,7 +47,7 @@ final readonly class ByUserFilter implements FilterInterface
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$builder->add('accepted_users', PickUserDynamicType::class, [
|
||||
$builder->add('accepted_users', PickUserOrMeDynamicType::class, [
|
||||
'multiple' => true,
|
||||
'label' => 'Creators',
|
||||
]);
|
||||
@ -60,12 +60,12 @@ final readonly class ByUserFilter implements FilterInterface
|
||||
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
return ['accepted_users' => $this->normalizeDoctrineEntity($formData['accepted_users'])];
|
||||
return ['accepted_users' => $this->normalizeUserOrMe($formData['accepted_users'])];
|
||||
}
|
||||
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
return ['accepted_users' => $this->denormalizeDoctrineEntity($formData['accepted_users'], $this->userRepository)];
|
||||
return ['accepted_users' => $this->denormalizeUserOrMe($formData['accepted_users'], $this->userRepository)];
|
||||
}
|
||||
|
||||
public function getFormDefaultData(): array
|
||||
@ -77,7 +77,7 @@ final readonly class ByUserFilter implements FilterInterface
|
||||
{
|
||||
$users = [];
|
||||
|
||||
foreach ($data['accepted_users'] as $u) {
|
||||
foreach ($this->userOrMe($data['accepted_users'], $context) as $u) {
|
||||
$users[] = $this->userRender->renderString($u, []);
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace Chill\MainBundle\Export;
|
||||
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Repository\UserRepositoryInterface;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\Persistence\ObjectRepository;
|
||||
|
||||
@ -63,6 +65,79 @@ trait ExportDataNormalizerTrait
|
||||
return $object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizer the "user or me" values.
|
||||
*
|
||||
* @param 'me'|User|iterable<'me'|User> $user
|
||||
*
|
||||
* @return int|'me'|list<'me'|int>
|
||||
*/
|
||||
private function normalizeUserOrMe(string|User|iterable $user): int|string|array
|
||||
{
|
||||
if (is_iterable($user)) {
|
||||
$users = [];
|
||||
foreach ($user as $u) {
|
||||
$users[] = $this->normalizeUserOrMe($u);
|
||||
}
|
||||
|
||||
return $users;
|
||||
}
|
||||
|
||||
if ('me' === $user) {
|
||||
return $user;
|
||||
}
|
||||
|
||||
return $user->getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param 'me'|int|iterable<'me'|int> $userId
|
||||
*
|
||||
* @return 'me'|User|array|null
|
||||
*/
|
||||
private function denormalizeUserOrMe(string|int|iterable $userId, UserRepositoryInterface $userRepository): string|User|array|null
|
||||
{
|
||||
if (is_iterable($userId)) {
|
||||
$users = [];
|
||||
foreach ($userId as $id) {
|
||||
$users[] = $this->denormalizeUserOrMe($id, $userRepository);
|
||||
}
|
||||
|
||||
return $users;
|
||||
}
|
||||
|
||||
if ('me' === $userId) {
|
||||
return 'me';
|
||||
}
|
||||
|
||||
return $userRepository->find($userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param 'me'|User|iterable<'me'|User> $user
|
||||
*
|
||||
* @return User|list<User>
|
||||
*/
|
||||
private function userOrMe(string|User|iterable $user, ExportGenerationContext $context): User|array
|
||||
{
|
||||
if (is_iterable($user)) {
|
||||
$users = [];
|
||||
foreach ($user as $u) {
|
||||
$users[] = $this->userOrMe($u, $context);
|
||||
}
|
||||
|
||||
return array_values(
|
||||
array_filter($users, static fn (?User $user) => null !== $user)
|
||||
);
|
||||
}
|
||||
|
||||
if ('me' === $user) {
|
||||
return $context->byUser;
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a provided date into a specific string format.
|
||||
*
|
||||
|
@ -14,7 +14,7 @@ namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Export\ExportGenerationContext;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||
use Chill\MainBundle\Form\Type\PickUserOrMeDynamicType;
|
||||
use Chill\MainBundle\Repository\UserRepositoryInterface;
|
||||
use Chill\PersonBundle\Export\Declarations;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
@ -40,7 +40,7 @@ final readonly class CreatorFilter implements FilterInterface
|
||||
|
||||
$qb
|
||||
->andWhere($qb->expr()->in('acp_creator', ':creators'))
|
||||
->setParameter('creators', $data['accepted_creators']);
|
||||
->setParameter('creators', $this->userOrMe($data['accepted_creators'], $exportGenerationContext));
|
||||
}
|
||||
|
||||
public function applyOn(): string
|
||||
@ -51,7 +51,7 @@ final readonly class CreatorFilter implements FilterInterface
|
||||
public function buildForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$builder
|
||||
->add('accepted_creators', PickUserDynamicType::class, [
|
||||
->add('accepted_creators', PickUserOrMeDynamicType::class, [
|
||||
'multiple' => true,
|
||||
'label' => false,
|
||||
]);
|
||||
@ -64,12 +64,12 @@ final readonly class CreatorFilter implements FilterInterface
|
||||
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
return ['accepted_creators' => $this->normalizeDoctrineEntity($formData['accepted_creators'])];
|
||||
return ['accepted_creators' => $this->normalizeUserOrMe($formData['accepted_creators'])];
|
||||
}
|
||||
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
return ['accepted_creators' => $this->denormalizeDoctrineEntity($formData['accepted_creators'], $this->userRepository)];
|
||||
return ['accepted_creators' => $this->denormalizeUserOrMe($formData['accepted_creators'], $this->userRepository)];
|
||||
}
|
||||
|
||||
public function getFormDefaultData(): array
|
||||
@ -85,7 +85,7 @@ final readonly class CreatorFilter implements FilterInterface
|
||||
', ',
|
||||
array_map(
|
||||
static fn (User $u) => $u->getLabel(),
|
||||
$data['accepted_creators'] instanceof Collection ? $data['accepted_creators']->toArray() : $data['accepted_creators']
|
||||
$data['accepted_creators'] instanceof Collection ? $this->userOrMe($data['accepted_creators']->toArray(), $context) : $this->userOrMe($data['accepted_creators'], $context)
|
||||
)
|
||||
),
|
||||
], ];
|
||||
|
@ -14,7 +14,7 @@ namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
|
||||
use Chill\MainBundle\Export\ExportGenerationContext;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Form\Type\PickRollingDateType;
|
||||
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||
use Chill\MainBundle\Form\Type\PickUserOrMeDynamicType;
|
||||
use Chill\MainBundle\Repository\UserRepository;
|
||||
use Chill\MainBundle\Service\RollingDate\RollingDate;
|
||||
use Chill\MainBundle\Service\RollingDate\RollingDateConverterInterface;
|
||||
@ -68,7 +68,7 @@ final readonly class ReferrerFilterBetweenDates implements FilterInterface
|
||||
->andWhere(
|
||||
"{$history}.user IN (:{$users})",
|
||||
)
|
||||
->setParameter($users, $data['accepted_referrers'])
|
||||
->setParameter($users, $this->userOrMe($data['accepted_referrers'], $exportGenerationContext))
|
||||
->setParameter($start, $this->rollingDateConverter->convert($data['start_date']))
|
||||
->setParameter($end, $this->rollingDateConverter->convert($data['end_date']));
|
||||
}
|
||||
@ -81,7 +81,7 @@ final readonly class ReferrerFilterBetweenDates implements FilterInterface
|
||||
public function buildForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$builder
|
||||
->add('accepted_referrers', PickUserDynamicType::class, [
|
||||
->add('accepted_referrers', PickUserOrMeDynamicType::class, [
|
||||
'multiple' => true,
|
||||
])
|
||||
->add('start_date', PickRollingDateType::class, [
|
||||
@ -101,12 +101,14 @@ final readonly class ReferrerFilterBetweenDates implements FilterInterface
|
||||
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
return ['accepted_referrers' => $this->normalizeDoctrineEntity($formData['accepted_referrers']), 'start_date' => $formData['start_date']->normalize(), 'end_date' => $formData['end_date']->normalize()];
|
||||
return ['accepted_referrers' => $this->normalizeUserOrMe($formData['accepted_referrers']),
|
||||
'start_date' => $formData['start_date']->normalize(), 'end_date' => $formData['end_date']->normalize()];
|
||||
}
|
||||
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
return ['accepted_referrers' => $this->denormalizeDoctrineEntity($formData['accepted_referrers'], $this->userRepository), 'start_date' => RollingDate::fromNormalized($formData['start_date']), 'end_date' => RollingDate::fromNormalized($formData['end_date'])];
|
||||
return ['accepted_referrers' => $this->denormalizeUserOrMe($formData['accepted_referrers'], $this->userRepository),
|
||||
'start_date' => RollingDate::fromNormalized($formData['start_date']), 'end_date' => RollingDate::fromNormalized($formData['end_date'])];
|
||||
}
|
||||
|
||||
public function getFormDefaultData(): array
|
||||
@ -122,7 +124,7 @@ final readonly class ReferrerFilterBetweenDates implements FilterInterface
|
||||
{
|
||||
$users = [];
|
||||
|
||||
foreach ($data['accepted_referrers'] as $r) {
|
||||
foreach ($this->userOrMe($data['accepted_referrers'], $context) as $r) {
|
||||
$users[] = $this->userRender->renderString($r, []);
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Export\ExportGenerationContext;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Form\Type\PickRollingDateType;
|
||||
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||
use Chill\MainBundle\Form\Type\PickUserOrMeDynamicType;
|
||||
use Chill\MainBundle\Repository\UserRepositoryInterface;
|
||||
use Chill\MainBundle\Service\RollingDate\RollingDate;
|
||||
use Chill\MainBundle\Service\RollingDate\RollingDateConverterInterface;
|
||||
@ -44,7 +44,7 @@ final readonly class UserWorkingOnCourseFilter implements FilterInterface
|
||||
public function buildForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$builder
|
||||
->add('users', PickUserDynamicType::class, [
|
||||
->add('users', PickUserOrMeDynamicType::class, [
|
||||
'multiple' => true,
|
||||
])
|
||||
->add('start_date', PickRollingDateType::class, [
|
||||
@ -63,12 +63,12 @@ final readonly class UserWorkingOnCourseFilter implements FilterInterface
|
||||
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
return ['users' => $this->normalizeDoctrineEntity($formData['users']), 'start_date' => $formData['start_date']->normalize(), 'end_date' => $formData['end_date']->normalize()];
|
||||
return ['users' => $this->normalizeUserOrMe($formData['users']), 'start_date' => $formData['start_date']->normalize(), 'end_date' => $formData['end_date']->normalize()];
|
||||
}
|
||||
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
return ['users' => $this->denormalizeDoctrineEntity($formData['users'], $this->userRepository), 'start_date' => RollingDate::fromNormalized($formData['start_date']), 'end_date' => RollingDate::fromNormalized($formData['end_date'])];
|
||||
return ['users' => $this->denormalizeUserOrMe($formData['users'], $this->userRepository), 'start_date' => RollingDate::fromNormalized($formData['start_date']), 'end_date' => RollingDate::fromNormalized($formData['end_date'])];
|
||||
}
|
||||
|
||||
public function getFormDefaultData(): array
|
||||
@ -92,7 +92,7 @@ final readonly class UserWorkingOnCourseFilter implements FilterInterface
|
||||
'%users%' => implode(
|
||||
', ',
|
||||
array_map(
|
||||
fn (User $u) => $this->userRender->renderString($u, []),
|
||||
fn (User $u) => $this->userRender->renderString($this->userOrMe($u, $context), []),
|
||||
$data['users'] instanceof Collection ? $data['users']->toArray() : $data['users']
|
||||
)
|
||||
),
|
||||
@ -121,7 +121,7 @@ final readonly class UserWorkingOnCourseFilter implements FilterInterface
|
||||
"WHERE {$ai_alias}.user IN (:{$ai_users}) AND IDENTITY({$ai_alias}.accompanyingPeriod) = acp.id AND {$ai_alias}.infoDate >= :{$start} and {$ai_alias}.infoDate < :{$end}"
|
||||
)
|
||||
)
|
||||
->setParameter($ai_users, $data['users'])
|
||||
->setParameter($ai_users, $this->userOrMe($data['users'], $exportGenerationContext))
|
||||
->setParameter($start, $this->rollingDateConverter->convert($data['start_date']))
|
||||
->setParameter($end, $this->rollingDateConverter->convert($data['end_date']))
|
||||
;
|
||||
|
@ -14,7 +14,7 @@ namespace Chill\PersonBundle\Export\Filter\SocialWorkFilters;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Export\ExportGenerationContext;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||
use Chill\MainBundle\Form\Type\PickUserOrMeDynamicType;
|
||||
use Chill\MainBundle\Repository\UserRepositoryInterface;
|
||||
use Chill\PersonBundle\Export\Declarations;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
@ -40,7 +40,7 @@ final readonly class CreatorFilter implements FilterInterface
|
||||
$qb
|
||||
->leftJoin('acpw.createdBy', "{$p}_creator")
|
||||
->andWhere($qb->expr()->in("{$p}_creator", ":{$p}_creators"))
|
||||
->setParameter("{$p}_creators", $data['creators']);
|
||||
->setParameter("{$p}_creators", $this->userOrMe($data['creators'], $exportGenerationContext));
|
||||
}
|
||||
|
||||
public function applyOn(): string
|
||||
@ -51,7 +51,7 @@ final readonly class CreatorFilter implements FilterInterface
|
||||
public function buildForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$builder
|
||||
->add('creators', PickUserDynamicType::class, [
|
||||
->add('creators', PickUserOrMeDynamicType::class, [
|
||||
'multiple' => true,
|
||||
'label' => 'export.filter.work.by_creator.Creators',
|
||||
]);
|
||||
@ -64,12 +64,12 @@ final readonly class CreatorFilter implements FilterInterface
|
||||
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
return ['creators' => $this->normalizeDoctrineEntity($formData['creators'])];
|
||||
return ['creators' => $this->normalizeUserOrMe($formData['creators'])];
|
||||
}
|
||||
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
return ['creators' => $this->denormalizeDoctrineEntity($formData['creators'], $this->userRepository)];
|
||||
return ['creators' => $this->denormalizeUserOrMe($formData['creators'], $this->userRepository)];
|
||||
}
|
||||
|
||||
public function describeAction($data, ExportGenerationContext $context): array
|
||||
@ -79,7 +79,7 @@ final readonly class CreatorFilter implements FilterInterface
|
||||
'%creators%' => implode(
|
||||
', ',
|
||||
array_map(
|
||||
static fn (User $u) => $u->getLabel(),
|
||||
fn (User|string $u) => $this->userOrMe($u, $context)->getLabel(),
|
||||
$data['creators'] instanceof Collection ? $data['creators']->toArray() : $data['creators']
|
||||
)
|
||||
),
|
||||
|
@ -14,7 +14,7 @@ namespace Chill\PersonBundle\Export\Filter\SocialWorkFilters;
|
||||
use Chill\MainBundle\Export\ExportGenerationContext;
|
||||
use Chill\MainBundle\Export\FilterInterface;
|
||||
use Chill\MainBundle\Form\Type\PickRollingDateType;
|
||||
use Chill\MainBundle\Form\Type\PickUserDynamicType;
|
||||
use Chill\MainBundle\Form\Type\PickUserOrMeDynamicType;
|
||||
use Chill\MainBundle\Repository\UserRepositoryInterface;
|
||||
use Chill\MainBundle\Service\RollingDate\RollingDate;
|
||||
use Chill\MainBundle\Service\RollingDate\RollingDateConverterInterface;
|
||||
@ -44,7 +44,7 @@ final readonly class ReferrerFilter implements FilterInterface
|
||||
->andWhere("{$p}_acpwusers_history.user IN (:{$p}_agents)");
|
||||
|
||||
$qb
|
||||
->setParameter("{$p}_agents", $data['accepted_agents'])
|
||||
->setParameter("{$p}_agents", $this->userOrMe($data['accepted_agents'], $exportGenerationContext))
|
||||
->setParameter("{$p}_calc_date", $this->rollingDateConverter->convert(
|
||||
$data['agent_at'] ?? new RollingDate(RollingDate::T_TODAY)
|
||||
))
|
||||
@ -59,7 +59,7 @@ final readonly class ReferrerFilter implements FilterInterface
|
||||
public function buildForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$builder
|
||||
->add('accepted_agents', PickUserDynamicType::class, [
|
||||
->add('accepted_agents', PickUserOrMeDynamicType::class, [
|
||||
'multiple' => true,
|
||||
'label' => 'export.filter.work.by_treating_agent.Accepted agents',
|
||||
])
|
||||
@ -78,7 +78,7 @@ final readonly class ReferrerFilter implements FilterInterface
|
||||
public function normalizeFormData(array $formData): array
|
||||
{
|
||||
return [
|
||||
'accepted_agents' => $this->normalizeDoctrineEntity($formData['accepted_agents']),
|
||||
'accepted_agents' => $this->normalizeUserOrMe($formData['accepted_agents']),
|
||||
'agent_at' => array_key_exists('agent_at', $formData) ? $formData['agent_at']?->normalize() : (new RollingDate(RollingDate::T_TODAY))->normalize(),
|
||||
];
|
||||
}
|
||||
@ -86,7 +86,7 @@ final readonly class ReferrerFilter implements FilterInterface
|
||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||
{
|
||||
return [
|
||||
'accepted_agents' => $this->denormalizeDoctrineEntity($formData['accepted_agents'], $this->userRepository),
|
||||
'accepted_agents' => $this->denormalizeUserOrMe($formData['accepted_agents'], $this->userRepository),
|
||||
'agent_at' => array_key_exists('agent_at', $formData) ? RollingDate::fromNormalized($formData['agent_at']) : new RollingDate(RollingDate::T_TODAY),
|
||||
];
|
||||
}
|
||||
@ -103,7 +103,7 @@ final readonly class ReferrerFilter implements FilterInterface
|
||||
{
|
||||
$users = [];
|
||||
|
||||
foreach ($data['accepted_agents'] as $r) {
|
||||
foreach ($this->userOrMe($data['accepted_agents'], $context) as $r) {
|
||||
$users[] = $r;
|
||||
}
|
||||
|
||||
|
@ -65,6 +65,11 @@ class ReferrerFilterBetweenDatesTest extends AbstractFilterTest
|
||||
'start_date' => new RollingDate(RollingDate::T_YEAR_PREVIOUS_START),
|
||||
'end_date' => new RollingDate(RollingDate::T_TODAY),
|
||||
],
|
||||
[
|
||||
'accepted_referrers' => 'me',
|
||||
'start_date' => new RollingDate(RollingDate::T_YEAR_PREVIOUS_START),
|
||||
'end_date' => new RollingDate(RollingDate::T_TODAY),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,9 @@ class CreatorFilterTest extends AbstractFilterTest
|
||||
[
|
||||
'creators' => $creators,
|
||||
],
|
||||
[
|
||||
'creators' => [...$creators, 'me'],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -56,6 +56,11 @@ final class ReferrerFilterTest extends AbstractFilterTest
|
||||
];
|
||||
}
|
||||
|
||||
$data[] = [
|
||||
'accepted_agents' => 'me',
|
||||
'agent_at' => new RollingDate(RollingDate::T_TODAY),
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user