diff --git a/Controller/EventController.php b/Controller/EventController.php index c64f712f9..c0b64a5f0 100644 --- a/Controller/EventController.php +++ b/Controller/EventController.php @@ -16,6 +16,10 @@ use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\HiddenType; +use Chill\EventBundle\Form\Type\PickCenterType; +use Chill\MainBundle\Entity\Center; +use Symfony\Bridge\Doctrine\Form\Type\EntityType; +use Symfony\Component\Form\FormFactoryInterface; /** @@ -34,15 +38,25 @@ class EventController extends Controller */ protected $authorizationHelper; + /** + * @var FormFactoryInterface + */ + protected $formFactoryInterface; + /** * EventController constructor. * * @param EventDispatcherInterface $eventDispatcher */ - public function __construct(EventDispatcherInterface $eventDispatcher, AuthorizationHelper $authorizationHelper) + public function __construct( + EventDispatcherInterface $eventDispatcher, + AuthorizationHelper $authorizationHelper, + FormFactoryInterface $formFactoryInterface + ) { $this->eventDispatcher = $eventDispatcher; $this->authorizationHelper = $authorizationHelper; + $this->formFactoryInterface = $formFactoryInterface; } @@ -98,14 +112,63 @@ class EventController extends Controller return $form; } + + /** + * First step of new Event form + */ + public function newPickCenterAction() + { + $role = new Role('CHILL_EVENT_CREATE'); + /** @var Center $centers */ + $centers = $this->authorizationHelper->getReachableCenters($this->getUser(), $role); + + $form = $this->formFactoryInterface + ->createNamedBuilder(null) + ->setMethod('GET') + ->setAction( + $this->generateUrl('chill_event__event_new')) + ->add('center_id', EntityType::class, array( + 'class' => Center::class, + 'choices' => $centers, + 'placeholder' => '', + 'label' => 'To which centre should the event be associated ?' + )) + ->add('submit', SubmitType::class, array( + 'label' => 'Next step' + )) + ->getForm(); + + if (count($centers) === 1) + { + return $this->redirectToRoute('chill_event__event_new', array( + 'center_id' => $centers[0]->getId() + )); + } + + return $this->render('ChillEventBundle:Event:newPickCenter.html.twig', array( + 'form' => $form->createView() + )); + + } + /** * Displays a form to create a new Event entity. - * + * @param Center $center + * @param Request $request + * @return \Symfony\Component\HttpFoundation\Response */ - public function newAction() + public function newAction(Center $center = null, Request $request) { + if ($center === null) + { + $center_id = $request->query->get('center_id'); + $center = $this->getDoctrine()->getRepository(Center::class)->find($center_id); + } + $entity = new Event(); + $entity->setCenter($center); + $form = $this->createCreateForm($entity); return $this->render('ChillEventBundle:Event:new.html.twig', array( diff --git a/Resources/config/routing/event.yml b/Resources/config/routing/event.yml index 1bdb59e62..26ce81c2d 100644 --- a/Resources/config/routing/event.yml +++ b/Resources/config/routing/event.yml @@ -12,9 +12,9 @@ chill_event__event_show: path: /{event_id}/show defaults: { _controller: "ChillEventBundle:Event:show" } -chill_event__event_new: - path: /new - defaults: { _controller: "ChillEventBundle:Event:new" } +chill_event__event_new_pickcenter: + path: /new/pick-center + defaults: { _controller: "ChillEventBundle:Event:newPickCenter" } options: menus: section: @@ -22,6 +22,10 @@ chill_event__event_new: label: Add an event icons: [plus, calendar-o] +chill_event__event_new: + path: /new + defaults: { _controller: "ChillEventBundle:Event:new" } + chill_event__event_create: path: /create defaults: { _controller: "ChillEventBundle:Event:create" } diff --git a/Resources/config/services/controller.yml b/Resources/config/services/controller.yml index ed37ca7a6..30e53e62d 100644 --- a/Resources/config/services/controller.yml +++ b/Resources/config/services/controller.yml @@ -3,4 +3,5 @@ services: arguments: $eventDispatcher: '@Symfony\Component\EventDispatcher\EventDispatcherInterface' $authorizationHelper: '@Chill\MainBundle\Security\Authorization\AuthorizationHelper' + $formFactoryInterface: '@Symfony\Component\Form\FormFactoryInterface' tags: ['controller.service_arguments'] diff --git a/Resources/translations/messages.fr.yml b/Resources/translations/messages.fr.yml index ed65e2df4..27a56aa80 100644 --- a/Resources/translations/messages.fr.yml +++ b/Resources/translations/messages.fr.yml @@ -56,3 +56,8 @@ CHILL_EVENT_PARTICIPATION_CREATE: Créer une participation à un événement CHILL_EVENT_PARTICIPATION_UPDATE: Modifier une participation à un événement CHILL_EVENT_SEE: Voir un événement CHILL_EVENT_SEE_DETAILS: Voir les détails d'un événement + +# TODO check place to put this +Next step: Étape suivante +To which centre should the event be associated ?: À quel centre doit être associé l'événement ? + diff --git a/Resources/views/Event/newPickCenter.html.twig b/Resources/views/Event/newPickCenter.html.twig new file mode 100644 index 000000000..753610009 --- /dev/null +++ b/Resources/views/Event/newPickCenter.html.twig @@ -0,0 +1,26 @@ +{% extends 'ChillEventBundle::layout.html.twig' %} + +{% block title 'Event creation'|trans %} + +{% block event_content -%} +

{{ 'Event creation'|trans }}

+ + {{ form_start(form) }} + {{ form_errors(form) }} + + {{ form_row(form.center_id) }} + + + + {{ form_end(form) }} + +{% endblock %}