Event: move validation to annotation and add UniqueEntity constraint on Participation

This commit is contained in:
Julien Fastré 2023-11-28 13:12:43 +01:00
parent 6d04e477f8
commit e586b8ee5e
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
6 changed files with 12 additions and 29 deletions

View File

@ -236,6 +236,7 @@ final class ParticipationController extends AbstractController
return $this->render('@ChillEvent/Participation/new.html.twig', [
'form' => $form->createView(),
'participation' => $participation,
'ignored_participations' => [],
]);
}

View File

@ -24,6 +24,7 @@ use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Class Event.
@ -40,7 +41,8 @@ class Event implements HasCenterInterface, HasScopeInterface, TrackCreationInter
use TrackUpdateTrait;
/**
* @ORM\ManyToOne(targetEntity="Chill\MainBundle\Entity\Center")
* @ORM\ManyToOne(targetEntity="Chill\MainBundle\Entity\Center")A
* @Assert\NotNull()
*/
private ?Center $center = null;
@ -70,6 +72,7 @@ class Event implements HasCenterInterface, HasScopeInterface, TrackCreationInter
/**
* @ORM\Column(type="string", length=150)
* @Assert\NotBlank()
*/
private ?string $name = null;
@ -84,6 +87,7 @@ class Event implements HasCenterInterface, HasScopeInterface, TrackCreationInter
/**
* @ORM\ManyToOne(targetEntity="Chill\EventBundle\Entity\EventType")
* @Assert\NotNull()
*/
private ?EventType $type = null;

View File

@ -22,6 +22,7 @@ use Chill\MainBundle\Entity\Scope;
use Chill\PersonBundle\Entity\Person;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
@ -36,6 +37,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
* })
*
* @ORM\HasLifecycleCallbacks
* @UniqueEntity({"event", "person"}, message="event.validation.person_already_participate_to_event")
*/
class Participation implements \ArrayAccess, HasCenterInterface, HasScopeInterface, TrackUpdateInterface, TrackCreationInterface
{
@ -66,7 +68,6 @@ class Participation implements \ArrayAccess, HasCenterInterface, HasScopeInterfa
/**
* @ORM\ManyToOne(targetEntity="Chill\EventBundle\Entity\Role")
* @Assert\NotNull()
*/
private ?Role $role = null;

View File

@ -32,7 +32,7 @@
<ul class="record_actions">
<ul class="record_actions sticky-form-buttons">
<li class="cancel">
<a href="{{ path('chill_event__event_show', { 'event_id' : participation.event.id } ) }}" class="btn btn-cancel">
{{ 'Back to the event'|trans }}

View File

@ -1,26 +0,0 @@
Chill\EventBundle\Entity\Participation:
properties:
event:
- NotNull: ~
status:
- NotNull: ~
person:
- NotNull: ~
constraints:
- Callback: isConsistent
Chill\EventBundle\Entity\Event:
properties:
name:
- Length:
min: 3
max: 75
minMessage: The event name must have at least {{ limit }} characters.
maxMessage: The event name must have maximum {{ limit }} characters.
type:
- NotNull: ~
circle:
- NotNull: ~
center:
- NotNull: ~

View File

@ -0,0 +1,3 @@
event:
validation:
person_already_participate_to_event: L'usager est déjà inscrit à l'événement