Skip to content

Commit

Permalink
Protection du pouvoir par la présence (#1597)
Browse files Browse the repository at this point in the history
* Protection du pouvoir par la présence

* Ajout de la contrainte
  • Loading branch information
stakovicz authored Jan 27, 2025
1 parent 0be1977 commit 393b42f
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,38 +82,36 @@

<div class="afup-form-container">
<p>
<span class="obligatoire">*</span>&nbsp; Indique un champ obligatoire
<span class="obligatoire">*</span>&nbsp;Indique un champ obligatoire
</p>

{{ form_errors(form.presence) }}

{% for key, presenceItem in form.presence.children %}
<div class="rangee">
<div>
{{ form_label(presenceItem, null, {"label_attr": {"class": "libelle"}}) }}
<span class="element">
{{ form_widget(presenceItem) }}
</span>
{{ form_widget(presenceItem) }}
</div>
{% if presenceItem.vars.value == '2' %}
{{ form_errors(form.id_personne_avec_pouvoir) }}
<div id="pouvoir">
{{ form_errors(form.id_personne_avec_pouvoir) }}
{{ form_label(form.id_personne_avec_pouvoir) }}
{{ form_widget(form.id_personne_avec_pouvoir) }}
</div>
{% endif %}
{% endfor %}


<div class="right">
{{ form_widget(form.save, {"attr": {"class": "button button--call-to-action"}}) }}
</div>
<div class="clear"></div>
</div>
<script>
const ABSENCE = '2';
const hasError = {{ form.children.id_personne_avec_pouvoir.vars.errors|length >= 1 ? 'true' : 'false' }};
const pouvoirElement = document.getElementById('pouvoir');
pouvoirElement.classList.add('sr-only');
if (!hasError) {
pouvoirElement.classList.add('sr-only');
}
const presencesElement = document.getElementsByName('form[presence]');
presencesElement.forEach(function (presenceElement) {
Expand Down
56 changes: 34 additions & 22 deletions sources/AppBundle/Controller/MemberShipController.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;

class MemberShipController extends SiteBaseController
{
Expand Down Expand Up @@ -544,41 +546,51 @@ public function generalMeetingAction(Request $request)
$attendee = $generalMeetingRepository->getAttendee($user->getUsername(), $latestDate);
$lastGeneralMeetingDescription = $generalMeetingRepository->obtenirDescription($latestDate);

$defaultPresence = 0;
$defaultPowerId = null;
$data = [
'presence' => 0,
'id_personne_avec_pouvoir' => null,
];
if (null !== $attendee) {
$defaultPresence = $attendee->getPresence();
$defaultPowerId = $attendee->getPowerId();
}

$form = $this->createFormBuilder()
$data['presence'] = $attendee->getPresence();
$data['id_personne_avec_pouvoir'] = $attendee->getPowerId();
}

$form = $this->createFormBuilder($data, [
'constraints' => [
new Assert\Callback([
'callback' => static function (array $data, ExecutionContextInterface $context) {
if ($data['presence'] === 1 && $data['id_personne_avec_pouvoir']) {
$context
->buildViolation("Vous ne pouvez pas donner votre pouvoir et indiquer que vous participez en même temps.")
->atPath('[id_personne_avec_pouvoir]')
->addViolation()
;
}
}]
)
]
])
->add('presence', ChoiceType::class, [
'expanded' => true,
'choices' => [
'Je participe' => 1,
'Je ne participe pas' => 2
]
])
->add(
'id_personne_avec_pouvoir',
ChoiceType::class,
[
'choices' => array_flip($generalMeetingRepository->getPowerSelectionList($latestDate, $user->getUsername())),
'label' => 'Je donne mon pouvoir à',
'required' => false,
]
)
->add('save', SubmitType::class, ['label' => 'Confirmer'])
->setData([
'presence' => $defaultPresence,
'id_personne_avec_pouvoir' => $defaultPowerId,
->add('id_personne_avec_pouvoir', ChoiceType::class, [
'choices' => array_flip($generalMeetingRepository->getPowerSelectionList($latestDate, $user->getUsername())),
'label' => 'Je donne mon pouvoir à',
'required' => false,
])
->add('save', SubmitType::class, [
'label' => 'Confirmer'
])
->getForm();

$form->handleRequest($request);

if ($form->isValid()) {
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();

if (null !== $attendee) {
$ok = $generalMeetingRepository->editAttendee(
$user->getUsername(),
Expand Down

0 comments on commit 393b42f

Please sign in to comment.