feature: update an existing participation

The update allow to modify the status and role of a participation.

ref #8
This commit is contained in:
Julien Fastré 2016-03-24 14:18:03 +01:00
parent 627b9fb08f
commit 993882e925
6 changed files with 148 additions and 2 deletions

View File

@ -148,4 +148,94 @@ class ParticipationController extends Controller
return $form; return $form;
} }
/**
* show an edit form for the participation with the given id.
*
* @param int $participation_id
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException if the participation is not found
* @throws \Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException if the user is not allowed to edit the participation
*/
public function editAction($participation_id)
{
/* @var $participation Participation */
$participation = $this->getDoctrine()->getManager()
->getRepository('ChillEventBundle:Participation')
->find($participation_id);
if ($participation === NULL) {
throw $this->createNotFoundException('The participation is not found');
}
$this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation,
'You are not allowed to edit this participation');
$form = $this->createEditForm($participation);
return $this->render('ChillEventBundle:Participation:edit.html.twig', array(
'form' => $form->createView(),
'participation' => $participation
));
}
public function updateAction($participation_id, Request $request)
{
/* @var $participation Participation */
$participation = $this->getDoctrine()->getManager()
->getRepository('ChillEventBundle:Participation')
->find($participation_id);
if ($participation === NULL) {
throw $this->createNotFoundException('The participation is not found');
}
$this->denyAccessUnlessGranted(ParticipationVoter::UPDATE, $participation,
'You are not allowed to edit this participation');
$form = $this->createEditForm($participation);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->flush();
$this->addFlash('success', $this->get('translator')->trans(
'The participation was updated'
));
return $this->redirectToRoute('event_show', array(
'event_id' => $participation->getEvent()->getId()
));
}
return $this->render('ChillEventBundle:Participation:edit.html.twig', array(
'form' => $form->createView(),
'participation' => $participation
));
}
/**
*
* @param Participation $participation
* @return \Symfony\Component\Form\FormInterface
*/
public function createEditForm(Participation $participation)
{
$form = $this->createForm(ParticipationType::class, $participation, array(
'event_type' => $participation->getEvent()->getType(),
'action' => $this->generateUrl('chill_event_participation_update', array(
'participation_id' => $participation->getId()
))
));
$form->add('submit', SubmitType::class, array(
'label' => 'Edit'
));
return $form;
}
} }

View File

@ -5,3 +5,12 @@ chill_event_participation_new:
chill_event_participation_create: chill_event_participation_create:
path: /create path: /create
defaults: { _controller: ChillEventBundle:Participation:create } defaults: { _controller: ChillEventBundle:Participation:create }
chill_event_participation_edit:
path: /{participation_id}/edit
defaults: { _controller: ChillEventBundle:Participation:edit }
chill_event_participation_update:
path: /{participation_id}/update
defaults: { _controller: ChillEventBundle:Participation:update }
methods: [POST]

View File

@ -19,6 +19,7 @@ Associated person: Personne associée
Associated event: Événement associé Associated event: Événement associé
Back to the event: Retour à l'événement Back to the event: Retour à l'événement
The participation was created: La participation a été créée The participation was created: La participation a été créée
The participation was updated: La participation a été mise à jour
#search #search
Event search: Recherche d'événements Event search: Recherche d'événements

View File

@ -57,14 +57,17 @@
<td>{{ person_macro.render(participation.person) }}</td> <td>{{ person_macro.render(participation.person) }}</td>
<td>{{ participation.role.label|localize_translatable_string }}</td> <td>{{ participation.role.label|localize_translatable_string }}</td>
<td>{{ participation.status.label|localize_translatable_string }}</td> <td>{{ participation.status.label|localize_translatable_string }}</td>
<td>{{ participation.lastUpdate|localizeddate("long", "none") }}</td> <td>{{ participation.lastUpdate|time_diff }} <i class="fa fa-calendar-o" title="{{ participation.lastUpdate|localizeddate("long", "medium")|escape('html_attr') }}"></i></td>
<td> <td>
<ul class="record_actions"> <ul class="record_actions">
{% if is_granted('CHILL_EVENT_PARTICIPATION_UPDATE', participation) %}
<li> <li>
<a href="#" class="sc-button btn-edit"> <a href="{{ path('chill_event_participation_edit', { 'participation_id' : participation.id } ) }}"
class="sc-button btn-edit">
{{ 'Edit'|trans }} {{ 'Edit'|trans }}
</a> </a>
</li> </li>
{% endif %}
</ul> </ul>
</td> </td>
</tr> </tr>

View File

@ -0,0 +1,41 @@
{% extends 'ChillEventBundle::layout.html.twig' %}
{% import 'ChillPersonBundle:Person:macro.html.twig' as person_macro %}
{% block event_content -%}
<h1>{{ 'Participation Edit'|trans }}</h1>
<table>
<tbody>
<tr>
<th>{{ 'Associated person'|trans }}</th>
<td>{{ person_macro.render(participation.person) }}</td>
</tr>
<tr>
<th>{{ 'Associated event'|trans }} </th>
<td>{{ participation.event.label }}</td>
</tr>
<tr>
<th>{{ 'Date'|trans }} </th>
<td>{{ participation.event.date|localizeddate('long', 'none') }}</td>
</tr>
</tbody>
</table>
{{ form_start(form) }}
{{ form_row(form.role) }}
{{ form_row(form.status) }}
<ul class="record_actions">
<li>
<a href="{{ path('event_show', { 'event_id' : participation.event.id } ) }}" class="sc-button btn-cancel">
{{ 'Back to the event'|trans }}
</a>
</li>
<li>
{{ form_widget(form.submit, { 'attr' : { 'class' : 'sc-button btn-create' } } ) }}
</li>
</ul>
{{ form_end(form) }}
{% endblock %}

View File

@ -2,6 +2,8 @@
{% import 'ChillPersonBundle:Person:macro.html.twig' as person_macro %} {% import 'ChillPersonBundle:Person:macro.html.twig' as person_macro %}
{% block title 'Participation creation'|trans %}
{% block event_content -%} {% block event_content -%}
<h1>{{ 'Participation creation'|trans }}</h1> <h1>{{ 'Participation creation'|trans }}</h1>