Compare commits

...

20 Commits

Author SHA1 Message Date
6280453523 Fix activity date filter: validation of form using RollingDate 2023-11-05 23:29:33 +01:00
68f56671a4 DX: fix data type with new rules for phpstan 2023-11-05 23:19:00 +01:00
dc860d0c46 DX: new CS for new version of php-cs-fixer 2023-11-05 23:14:19 +01:00
6fd80f9f2e [export] fix data type from form: either collection or array 2023-11-05 23:08:13 +01:00
b2aa465b03 unreleased changie file deleted 2023-10-26 17:44:49 +02:00
0fa8944c29 Update changelog 2023-10-26 17:39:55 +02:00
7494dbfc7c changie made 2023-10-26 17:38:22 +02:00
642958bde2 Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2023-10-26 17:35:22 +02:00
57bd6d1be4 remove dump 2023-10-26 17:33:39 +02:00
bbcbbf078f remove dump 2023-10-26 17:04:56 +02:00
ba778b1cf8 update changelog 2023-10-26 16:07:34 +02:00
728fd642fa Merge branch 'replace_translator' 2023-10-26 16:05:17 +02:00
4150eb56b4 changie v2.10.2 2023-10-26 15:23:01 +02:00
2927561c02 added changie 2023-10-26 15:22:22 +02:00
5188891108 php style fixer 2023-10-26 15:21:20 +02:00
c6deb21606 replace old method of getting translator with injection of translatorInterface 2023-10-26 15:20:19 +02:00
cdfb084fe4 update changelog 2023-10-26 14:17:15 +02:00
5ce21aadce Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2023-10-26 14:14:51 +02:00
b9000a38d3 add changie 2023-10-26 14:14:36 +02:00
89a185a34f replace get->('translator') with injection of translatorInterface 2023-10-26 14:13:12 +02:00
36 changed files with 157 additions and 158 deletions

View File

@@ -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"

View File

@@ -0,0 +1,5 @@
kind: Fixed
body: Fix filter "activity by date"
time: 2023-11-05T23:26:08.685518729+01:00
custom:
Issue: "184"

3
.changes/v2.10.2.md Normal file
View File

@@ -0,0 +1,3 @@
## v2.10.2 - 2023-10-26
### Fixed
* ([#175](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/175)) Use injection of translator instead of ->get().

3
.changes/v2.10.3.md Normal file
View File

@@ -0,0 +1,3 @@
## v2.10.3 - 2023-10-26
### Fixed
* ([#175](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/175)) Replace old method of getting translator with injection of translatorInterface

3
.changes/v2.10.4.md Normal file
View File

@@ -0,0 +1,3 @@
## v2.10.4 - 2023-10-26
### Fixed
* Fix null value constraint errors when merging relationships in doubles

View File

@@ -6,6 +6,18 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).
## v2.10.4 - 2023-10-26
### Fixed
* Fix null value constraint errors when merging relationships in doubles
## v2.10.3 - 2023-10-26
### Fixed
* ([#175](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/175)) Replace old method of getting translator with injection of translatorInterface
## v2.10.2 - 2023-10-26
### Fixed
* ([#175](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/175)) Use injection of translator instead of ->get().
## v2.10.1 - 2023-10-24
### Fixed
* Fix export controller when generating an export without any data in session

View File

@@ -673,8 +673,8 @@ final class ActivityController extends AbstractController
throw $this->createNotFoundException('Accompanying Period not found');
}
// TODO Add permission
// $this->denyAccessUnlessGranted('CHILL_PERSON_SEE', $person);
// TODO Add permission
// $this->denyAccessUnlessGranted('CHILL_PERSON_SEE', $person);
} else {
throw $this->createNotFoundException('Person or Accompanying Period not found');
}

View File

@@ -13,16 +13,12 @@ namespace Chill\ActivityBundle\Export\Filter;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\Export\FilterType;
use Chill\MainBundle\Form\Type\PickRollingDateType;
use Chill\MainBundle\Service\RollingDate\RollingDate;
use Chill\MainBundle\Service\RollingDate\RollingDateConverterInterface;
use Doctrine\ORM\Query\Expr;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Contracts\Translation\TranslatorInterface;
class ActivityDateFilter implements FilterInterface
@@ -74,46 +70,6 @@ class ActivityDateFilter implements FilterInterface
->add('date_to', PickRollingDateType::class, [
'label' => 'Activities before this date',
]);
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
/** @var \Symfony\Component\Form\FormInterface $filterForm */
$filterForm = $event->getForm()->getParent();
$enabled = $filterForm->get(FilterType::ENABLED_FIELD)->getData();
if (true === $enabled) {
// if the filter is enabled, add some validation
$form = $event->getForm();
$date_from = $form->get('date_from')->getData();
$date_to = $form->get('date_to')->getData();
// check that fields are not empty
if (null === $date_from) {
$form->get('date_from')->addError(new FormError(
$this->translator->trans('This field '
.'should not be empty')
));
}
if (null === $date_to) {
$form->get('date_to')->addError(new FormError(
$this->translator->trans('This field '
.'should not be empty')
));
}
// check that date_from is before date_to
if (
(null !== $date_from && null !== $date_to)
&& $date_from >= $date_to
) {
$form->get('date_to')->addError(new FormError(
$this->translator->trans('This date should be after '
.'the date given in "Implied in an activity after '
.'this date" field')
));
}
}
});
}
public function getFormDefaultData(): array

View File

@@ -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%', [

View File

@@ -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 [

View File

@@ -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']
)
),
]];

View File

@@ -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']
)
),
]];

View File

@@ -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

View File

@@ -57,6 +57,9 @@ final class ActivityTypeFilterTest extends AbstractFilterTest
$data[] = [
'types' => new ArrayCollection([$a]),
];
/*$data[] = [
'types' => [$a],
];*/
}
return $data;

View File

@@ -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%', [

View File

@@ -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),

View File

@@ -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']
)
),
]];

View File

@@ -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']
)
),
]];

View File

@@ -18,12 +18,15 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Class CustomFieldController.
*/
class CustomFieldController extends AbstractController
{
public function __construct(private readonly TranslatorInterface $translator) {}
/**
* Creates a new CustomField entity.
*
@@ -40,13 +43,13 @@ class CustomFieldController extends AbstractController
$em->persist($entity);
$em->flush();
$this->addFlash('success', $this->get('translator')
$this->addFlash('success', $this->translator
->trans('The custom field has been created'));
return $this->redirectToRoute('customfieldsgroup_show', ['id' => $entity->getCustomFieldsGroup()->getId()]);
}
$this->addFlash('error', $this->get('translator')
$this->addFlash('error', $this->translator
->trans('The custom field form contains errors'));
return $this->render('@ChillCustomFields/CustomField/new.html.twig', [
@@ -130,13 +133,13 @@ class CustomFieldController extends AbstractController
if ($editForm->isSubmitted() && $editForm->isValid()) {
$em->flush();
$this->addFlash('success', $this->get('translator')
$this->addFlash('success', $this->translator
->trans('The custom field has been updated'));
return $this->redirectToRoute('customfield_edit', ['id' => $id]);
}
$this->addFlash('error', $this->get('translator')
$this->addFlash('error', $this->translator
->trans('The custom field form contains errors'));
return $this->render('@ChillCustomFields/CustomField/edit.html.twig', [

View File

@@ -118,7 +118,7 @@ class EventController extends AbstractController
$this->addFlash(
'success',
$this->get('translator')
$this->translator
->trans('The event has been sucessfully removed')
);
@@ -249,7 +249,7 @@ class EventController extends AbstractController
$em->persist($entity);
$em->flush();
$this->addFlash('success', $this->get('translator')
$this->addFlash('success', $this->translator
->trans('The event was created'));
return $this->redirectToRoute('chill_event__event_show', ['event_id' => $entity->getId()]);
@@ -364,7 +364,7 @@ class EventController extends AbstractController
if ($editForm->isValid()) {
$em->flush();
$this->addFlash('success', $this->get('translator')
$this->addFlash('success', $this->translator
->trans('The event was updated'));
return $this->redirectToRoute('chill_event__event_edit', ['event_id' => $event_id]);

View File

@@ -23,6 +23,7 @@ use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Class ParticipationController.
@@ -32,7 +33,7 @@ class ParticipationController extends AbstractController
/**
* ParticipationController constructor.
*/
public function __construct(private readonly LoggerInterface $logger) {}
public function __construct(private readonly LoggerInterface $logger, private readonly TranslatorInterface $translator) {}
/**
* @\Symfony\Component\Routing\Annotation\Route(path="/{_locale}/event/participation/create", name="chill_event_participation_create")
@@ -177,7 +178,7 @@ class ParticipationController extends AbstractController
$em->flush();
$this->addFlash('success', $this->get('translator')->trans(
$this->addFlash('success', $this->translator->trans(
'The participations were created'
));
@@ -211,7 +212,7 @@ class ParticipationController extends AbstractController
$em->persist($participation);
$em->flush();
$this->addFlash('success', $this->get('translator')->trans(
$this->addFlash('success', $this->translator->trans(
'The participation was created'
));
@@ -260,7 +261,7 @@ class ParticipationController extends AbstractController
$this->addFlash(
'success',
$this->get('translator')
$this->translator
->trans('The participation has been sucessfully removed')
);
@@ -340,7 +341,7 @@ class ParticipationController extends AbstractController
switch ($event->getParticipations()->count()) {
case 0:
// if there aren't any participation, redirect to the 'show' view with an add flash
$this->addFlash('warning', $this->get('translator')
$this->addFlash('warning', $this->translator
->trans('There are no participation to edit for this event'));
return $this->redirectToRoute(
@@ -434,7 +435,7 @@ class ParticipationController extends AbstractController
$em->flush();
$this->addFlash('success', $this->get('translator')->trans(
$this->addFlash('success', $this->translator->trans(
'The participation was updated'
));
@@ -480,7 +481,7 @@ class ParticipationController extends AbstractController
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', $this->get('translator')->trans('The participations '
$this->addFlash('success', $this->translator->trans('The participations '
.'have been successfully updated.'));
return $this->redirectToRoute(
@@ -652,7 +653,7 @@ class ParticipationController extends AbstractController
if ([] === $newParticipations) {
// if we do not have nay participants, redirect to event view
$this->addFlash('error', $this->get('translator')->trans(
$this->addFlash('error', $this->translator->trans(
'None of the requested people may participate '
.'the event: they are maybe already participating.'
));

View File

@@ -32,12 +32,13 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class UserController extends CRUDController
{
final public const FORM_GROUP_CENTER_COMPOSED = 'composed_groupcenter';
public function __construct(private readonly LoggerInterface $logger, private readonly ValidatorInterface $validator, private readonly UserPasswordEncoderInterface $passwordEncoder, private readonly UserRepository $userRepository, protected ParameterBagInterface $parameterBag) {}
public function __construct(private readonly LoggerInterface $logger, private readonly ValidatorInterface $validator, private readonly UserPasswordEncoderInterface $passwordEncoder, private readonly UserRepository $userRepository, protected ParameterBagInterface $parameterBag, private readonly TranslatorInterface $translator) {}
/**
* @Route("/{_locale}/admin/main/user/{uid}/add_link_groupcenter",
@@ -65,7 +66,7 @@ class UserController extends CRUDController
if (0 === $this->validator->validate($user)->count()) {
$em->flush();
$this->addFlash('success', $this->get('translator')->trans('The '
$this->addFlash('success', $this->translator->trans('The '
.'permissions have been successfully added to the user'));
$returnPathParams = $request->query->has('returnPath') ?
@@ -115,14 +116,14 @@ class UserController extends CRUDController
try {
$user->removeGroupCenter($groupCenter);
} catch (\RuntimeException $ex) {
$this->addFlash('error', $this->get('translator')->trans($ex->getMessage()));
$this->addFlash('error', $this->translator->trans($ex->getMessage()));
return $this->redirectToRoute('chill_crud_admin_user_edit', ['id' => $uid]);
}
$em->flush();
$this->addFlash('success', $this->get('translator')
$this->addFlash('success', $this->translator
->trans('The permissions where removed.'));
return $this->redirectToRoute('chill_crud_admin_user_edit', ['id' => $uid]);
@@ -207,7 +208,7 @@ class UserController extends CRUDController
$user->setCurrentLocation($currentLocation);
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', $this->get('translator')->trans('Current location successfully updated'));
$this->addFlash('success', $this->translator->trans('Current location successfully updated'));
return $this->redirect(
$request->query->has('returnPath') ? $request->query->get('returnPath') :
@@ -243,7 +244,7 @@ class UserController extends CRUDController
$user->setPassword($this->passwordEncoder->encodePassword($user, $password));
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', $this->get('translator')->trans('Password successfully updated!'));
$this->addFlash('success', $this->translator->trans('Password successfully updated!'));
return $this->redirect(
$request->query->has('returnPath') ? $request->query->get('returnPath') :

View File

@@ -25,8 +25,8 @@ class PersonMoveRelationHandler implements PersonMoveSqlHandlerInterface
public function getSqls(string $className, string $field, Person $from, Person $to): array
{
$insertSql = sprintf(<<<'SQL'
INSERT INTO chill_person_relationships (id, relation_id, reverse, fromperson_id, toperson_id)
SELECT nextval('chill_person_relationships_id_seq'), relation_id, reverse, fromperson_id, toperson_id
INSERT INTO chill_person_relationships (id, relation_id, reverse, createdat, createdby_id, fromperson_id, toperson_id)
SELECT nextval('chill_person_relationships_id_seq'), relation_id, reverse, createdat, createdby_id, fromperson_id, toperson_id
FROM chill_person_relationships cpr
WHERE fromperson_id = %d OR toperson_id = %d
AND NOT EXISTS (

View File

@@ -113,7 +113,7 @@ class AccompanyingCourseController extends \Symfony\Bundle\FrameworkBundle\Contr
$em->remove($accompanyingCourse);
$em->flush();
$this->addFlash('success', $this->get('translator')
$this->addFlash('success', $this->translator
->trans('The accompanying course has been successfully removed.'));
if (null !== $person_id) {

View File

@@ -26,6 +26,7 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Validator\ConstraintViolationListInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use function array_filter;
/**
@@ -33,24 +34,12 @@ use function array_filter;
*/
class AccompanyingPeriodController extends AbstractController
{
/**
* @var EventDispatcherInterface
*/
protected $eventDispatcher;
/**
* @var ValidatorInterface
*/
protected $validator;
public function __construct(
protected AccompanyingPeriodACLAwareRepositoryInterface $accompanyingPeriodACLAwareRepository,
EventDispatcherInterface $eventDispatcher,
ValidatorInterface $validator
) {
$this->eventDispatcher = $eventDispatcher;
$this->validator = $validator;
}
private readonly EventDispatcherInterface $eventDispatcher,
private readonly ValidatorInterface $validator,
private readonly TranslatorInterface $translator
) {}
/**
* @throws \Exception
@@ -65,7 +54,7 @@ class AccompanyingPeriodController extends AbstractController
if (false === $person->isOpen()) {
$this->get('session')->getFlashBag()
->add('error', $this->get('translator')
->add('error', $this->translator
->trans(
'Beware period is closed',
['%name%' => $person->__toString()]
@@ -92,7 +81,7 @@ class AccompanyingPeriodController extends AbstractController
if (0 === \count($errors)) {
$this->get('session')->getFlashBag()
->add('success', $this->get('translator')
->add('success', $this->translator
->trans('An accompanying period has been closed.', [
'%name%' => $person->__toString(),
]));
@@ -104,7 +93,7 @@ class AccompanyingPeriodController extends AbstractController
]);
}
$this->get('session')->getFlashBag()
->add('error', $this->get('translator')
->add('error', $this->translator
->trans('Error! Period not closed!'));
foreach ($errors as $error) {
@@ -115,7 +104,7 @@ class AccompanyingPeriodController extends AbstractController
$this->get('session')->getFlashBag()
->add(
'error',
$this->get('translator')
$this->translator
->trans('Pediod closing form is not valid')
);
@@ -175,7 +164,7 @@ class AccompanyingPeriodController extends AbstractController
$em->flush();
$flashBag->add(
'success',
$this->get('translator')->trans(
$this->translator->trans(
'A period has been created.'
)
);
@@ -184,7 +173,7 @@ class AccompanyingPeriodController extends AbstractController
'person_id' => $person->getId(),
]);
}
$flashBag->add('error', $this->get('translator')
$flashBag->add('error', $this->translator
->trans('Error! Period not created!'));
foreach ($errors as $error) {
@@ -244,7 +233,7 @@ class AccompanyingPeriodController extends AbstractController
// in case the person is already open
if ($person->isOpen()) {
$this->get('session')->getFlashBag()
->add('error', $this->get('translator')
->add('error', $this->translator
->trans(
'Error! Period %name% is not closed ; it can be open',
['%name%' => $person->__toString()]
@@ -276,7 +265,7 @@ class AccompanyingPeriodController extends AbstractController
if (\count($errors) <= 0) {
$this->get('session')->getFlashBag()
->add('success', $this->get('translator')
->add('success', $this->translator
->trans(
'An accompanying period has been opened.',
['%name%' => $person->__toString()]
@@ -289,7 +278,7 @@ class AccompanyingPeriodController extends AbstractController
]);
}
$this->get('session')->getFlashBag()
->add('error', $this->get('translator')
->add('error', $this->translator
->trans('Period not opened'));
foreach ($errors as $error) {
@@ -300,7 +289,7 @@ class AccompanyingPeriodController extends AbstractController
$this->get('session')->getFlashBag()
->add(
'error',
$this->get('translator')
$this->translator
->trans('Period not opened : form is invalid')
);
}
@@ -340,7 +329,7 @@ class AccompanyingPeriodController extends AbstractController
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', $this->get('translator')->trans(
$this->addFlash('success', $this->translator->trans(
'The period has been re-opened'
));
@@ -413,7 +402,7 @@ class AccompanyingPeriodController extends AbstractController
$flashBag->add(
'success',
$this->get('translator')->trans('An accompanying period has been updated.')
$this->translator->trans('An accompanying period has been updated.')
);
return $this->redirectToRoute('chill_person_accompanying_period_list', [
@@ -421,7 +410,7 @@ class AccompanyingPeriodController extends AbstractController
]);
}
$flashBag->add('error', $this->get('translator')
$flashBag->add('error', $this->translator
->trans('Error when updating the period'));
foreach ($errors as $error) {

View File

@@ -18,6 +18,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Class PersonAddressController
@@ -25,18 +26,10 @@ use Symfony\Component\Validator\Validator\ValidatorInterface;
*/
class PersonAddressController extends AbstractController
{
/**
* @var ValidatorInterface
*/
protected $validator;
/**
* PersonAddressController constructor.
*/
public function __construct(ValidatorInterface $validator)
{
$this->validator = $validator;
}
public function __construct(private readonly ValidatorInterface $validator, private readonly TranslatorInterface $translator) {}
/**
* @\Symfony\Component\Routing\Annotation\Route(path="/{_locale}/person/{person_id}/address/create", name="chill_person_address_create", methods={"POST"})
@@ -77,14 +70,14 @@ class PersonAddressController extends AbstractController
$this->addFlash(
'success',
$this->get('translator')->trans('The new address was created successfully')
$this->translator->trans('The new address was created successfully')
);
return $this->redirectToRoute('chill_person_address_list', [
'person_id' => $person->getId(),
]);
} else {
$this->addFlash('error', $this->get('translator')
$this->addFlash('error', $this->translator
->trans('Error! Address not created!'));
}
}
@@ -213,7 +206,7 @@ class PersonAddressController extends AbstractController
$this->getDoctrine()->getManager()
->flush();
$this->addFlash('success', $this->get('translator')->trans(
$this->addFlash('success', $this->translator->trans(
'The address has been successfully updated'
));
@@ -221,7 +214,7 @@ class PersonAddressController extends AbstractController
'person_id' => $person->getId(),
]);
} else {
$this->addFlash('error', $this->get('translator')
$this->addFlash('error', $this->translator
->trans('Error when updating the period'));
}
}

View File

@@ -82,7 +82,6 @@ class PersonDuplicateController extends \Symfony\Bundle\FrameworkBundle\Controll
$connection->beginTransaction();
foreach ($sqls as $sql) {
dump($sql);
$connection->executeQuery($sql);
}
$connection->commit();

View File

@@ -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']
)
);
}

View File

@@ -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']
)
),
],

View File

@@ -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']
)
),
],

View File

@@ -52,6 +52,7 @@ final class SocialIssueFilterTest extends AbstractFilterTest
->getResult();
yield ['accepted_socialissues' => new ArrayCollection($array)];
yield ['accepted_socialissues' => $array];
}
public function getQueryBuilders(): array

View File

@@ -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

View File

@@ -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,
],
];
}

View File

@@ -22,39 +22,22 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Class ReportController.
*/
class ReportController extends AbstractController
{
/**
* @var AuthorizationHelper
*/
protected $authorizationHelper;
/**
* @var EventDispatcherInterface
*/
protected $eventDispatcher;
/**
* @var PaginatorFactory
*/
protected $paginator;
/**
* ReportController constructor.
*/
public function __construct(
EventDispatcherInterface $eventDispatcher,
AuthorizationHelper $authorizationHelper,
PaginatorFactory $paginator
) {
$this->eventDispatcher = $eventDispatcher;
$this->authorizationHelper = $authorizationHelper;
$this->paginator = $paginator;
}
private readonly EventDispatcherInterface $eventDispatcher,
private readonly AuthorizationHelper $authorizationHelper,
private readonly PaginatorFactory $paginator,
private readonly TranslatorInterface $translator
) {}
/**
* Create a new report for a given person and of a given type.
@@ -98,7 +81,7 @@ class ReportController extends AbstractController
->getFlashBag()
->add(
'success',
$this->get('translator')
$this->translator
->trans('Success : report created!')
);
@@ -108,7 +91,7 @@ class ReportController extends AbstractController
$this->get('session')
->getFlashBag()->add(
'error',
$this->get('translator')
$this->translator
->trans('The form is not valid. The report has not been created !')
);
@@ -135,11 +118,11 @@ class ReportController extends AbstractController
$report = $em->getRepository('ChillReportBundle:Report')->find($report_id);
if (!$report) {
throw $this->createNotFoundException($this->get('translator')->trans('Unable to find this report.'));
throw $this->createNotFoundException($this->translator->trans('Unable to find this report.'));
}
if ((int) $person_id !== (int) $report->getPerson()->getId()) {
throw new \RuntimeException($this->get('translator')->trans('This is not the report of the person.'), 1);
throw new \RuntimeException($this->translator->trans('This is not the report of the person.'), 1);
}
$this->denyAccessUnlessGranted('CHILL_REPORT_UPDATE', $report);
@@ -418,7 +401,7 @@ class ReportController extends AbstractController
$report = $em->getRepository('ChillReportBundle:Report')->find($report_id);
if (!$report) {
throw $this->createNotFoundException($this->get('translator')->trans('Unable to find this report.'));
throw $this->createNotFoundException($this->translator->trans('Unable to find this report.'));
}
$this->denyAccessUnlessGranted('CHILL_REPORT_UPDATE', $report);
@@ -433,7 +416,7 @@ class ReportController extends AbstractController
->getFlashBag()
->add(
'success',
$this->get('translator')
$this->translator
->trans('Success : report updated!')
);
@@ -453,7 +436,7 @@ class ReportController extends AbstractController
->getFlashBag()
->add(
'error',
$this->get('translator')
$this->translator
->trans('The form is not valid. The report has not been updated !')
);
@@ -480,7 +463,7 @@ class ReportController extends AbstractController
$entity = $em->getRepository('ChillReportBundle:Report')->find($report_id);
if (!$entity || !$person) {
throw $this->createNotFoundException($this->get('translator')->trans('Unable to find this report.'));
throw $this->createNotFoundException($this->translator->trans('Unable to find this report.'));
}
$this->denyAccessUnlessGranted('CHILL_REPORT_SEE', $entity);

View File

@@ -100,7 +100,7 @@ class ThirdPartyType extends AbstractType
'label' => 'thirdparty.Contact data are confidential',
]);
// Institutional ThirdParty (parent)
// Institutional ThirdParty (parent)
} else {
$builder
->add('nameCompany', TextType::class, [

View File

@@ -52,7 +52,16 @@ class ChillDocumentLockManager implements DocumentLockManagerInterface
public function hasLock(Document $document, RequestInterface $request): bool
{
return $this->redis->exists($this->getCacheId($document)) > 0;
$r = $this->redis->exists($this->getCacheId($document));
if (is_bool($r)) {
return $r;
}
if (is_int($r)) {
return $r > 0;
}
throw new \RuntimeException('data type not supported');
}
public function setLock(Document $document, string $lockId, RequestInterface $request): bool