diff --git a/src/Controller/ActivityController.php b/src/Controller/ActivityController.php index 1ed1e58..f845d66 100644 --- a/src/Controller/ActivityController.php +++ b/src/Controller/ActivityController.php @@ -7,6 +7,7 @@ use App\Entity\ActivityEntity; use App\Form\Activity\ActivityAddForm; use App\Form\Activity\ActivityDeleteForm; +use App\Form\Activity\ActivityEditForm; /** * Controller for activity related pages @@ -100,10 +101,39 @@ $entityManager = $this->getDoctrine()->getManager(); /** @var ActivityRepository $actorRepository */ $activityRepository = $entityManager->getRepository(ActivityEntity::class); - + + // Get activity $activity = $activityRepository->find($id); + + // Activity edit form + /** @var ActivityEditForm $activityEditForm */ + $activityEditForm = $this->createNamedCustomForm('edit', ActivityEditForm::class); + $activityEditForm->handleRequest($request); + if($activityEditForm->isSubmitted() && $activityEditForm->isValid()) { + $errors = $activityEditForm->validate(); + $errors = $activityEditForm->validate(); + if (empty($errors)) { + $activityEditForm->updateActivity($activity); + $entityManager->persist($activity); + $entityManager->flush(); + return $this->ajaxFormAnswer([ + 'message' => 'Modification enregistrées', + 'refresh' => true, + ]); + } else { + return $this->ajaxFormAnswer([ + 'error' => join('
', $errors), + 'code' => Response::HTTP_BAD_REQUEST, + ]); + } + } + + // Update fields + $activityEditForm->updateFields($activity); + return $this->render('activity/activity.html.twig', [ 'activity' => $activity, + 'activityEditForm' => $activityEditForm, ]); } } \ No newline at end of file diff --git a/src/Form/Activity/ActivityEditForm.php b/src/Form/Activity/ActivityEditForm.php new file mode 100644 index 0000000..6917746 --- /dev/null +++ b/src/Form/Activity/ActivityEditForm.php @@ -0,0 +1,100 @@ +form->setData([ + 'name' => $activity->getName(), + 'actor' => $activity->getActor(), + 'status' => $activity->getStatus(), + 'startDate' => $activity->getStartDate(), + 'endDate' => $activity->getEndDate(), + 'realStartDate' => $activity->getRealStartDate(), + 'realEndDate' => $activity->getRealEndDate(), + ]); + + return $this; + } + + /** + * Update activity with user data + * + * @param ActivityEntity $activity + * @return self + */ + public function updateActivity(ActivityEntity $activity): self + { + $data = $this->form->getData(); + $activity->setName($data['name']); + $activity->setActor($data['actor']); + $activity->setStatus($data['status']); + $activity->setStartDate($data['startDate']); + $activity->setEndDate($data['endDate']); + $activity->setRealStartDate($data['realStartDate']); + $activity->setRealEndDate($data['realEndDate']); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getTemplate(): string + { + return '_includes/html/form/activity/edit.html.twig'; + } + + /** + * {@inheritdoc} + */ + protected function addFields($formBuilder, $options): void + { + $formBuilder->add('name', TextType::class) + ->add('actor', EntityType::class, [ + 'class' => ActorEntity::class, + 'choice_label' => 'displayName', + 'required' => false, + ]) + ->add('status', ChoiceType::class, [ + 'choices' => ActivityEntity::VALID_STATUS, + 'choice_label' => function ($choice, $key, $value) { + return StatusEnum::STATUS_NAME[$choice]; + }, + ]) + ->add('startDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('endDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('realStartDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('realEndDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('submit', SubmitType::class); + } +} \ No newline at end of file diff --git a/templates/_includes/html/form/activity/edit.html.twig b/templates/_includes/html/form/activity/edit.html.twig new file mode 100644 index 0000000..420c365 --- /dev/null +++ b/templates/_includes/html/form/activity/edit.html.twig @@ -0,0 +1,44 @@ +{% import '_includes/macros/status.html.twig' as statusTools %} + +{{ form_start(form, {attr: {class: 'ajax-form'}}) }} +
+
+
+ {{ form_label(form.name, 'Nom', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.name, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.status, 'Status', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.status, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.actor, 'Acteur', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.actor, {attr: {class: 'w-100'}}) }} +
+ +
+
+
+ {{ form_label(form.startDate, 'Début planifié', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.startDate, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.endDate, 'Début réel', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.endDate, {attr: {class: 'w-100'}}) }} +
+
+
+
+ {{ form_label(form.realStartDate, 'Fin planifié', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.realStartDate, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.realEndDate, 'Fin réelle', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.realEndDate, {attr: {class: 'w-100'}}) }} +
+
+
+{{ form_widget(form.submit, {attr: {class: 'w-100'}, label: 'Enregistrer'}) }} +

+

+{{ form_end(form) }} \ No newline at end of file diff --git a/templates/activity/activity.html.twig b/templates/activity/activity.html.twig index f6db2a4..d033013 100644 --- a/templates/activity/activity.html.twig +++ b/templates/activity/activity.html.twig @@ -1,8 +1,18 @@ {% extends '_includes/html/base.html.twig' %} {% set pageName='Activités - '~activity.name %} -{% set page='Activités - '~activity.name %} +{% set page=activity.name %} {% set returnPath=[{label: 'Activités', url: url('activity_activities', {}, false), title: 'Liste des activités'}] %} {% block pageContent %} +
+
+
+

Editer

+
+
+ {% include '_includes/html/genericForm.html.twig' with {form: activityEditForm} only %} +
+
+
{% endblock %} \ No newline at end of file diff --git a/templates/actor/actor.html.twig b/templates/actor/actor.html.twig index a51c06d..82aae40 100644 --- a/templates/actor/actor.html.twig +++ b/templates/actor/actor.html.twig @@ -6,19 +6,23 @@ {% block pageContent %}
-
-

Editer

-
-
- {% include '_includes/html/genericForm.html.twig' with {'form': editForm} only %} +
+
+

Editer

+
+
+ {% include '_includes/html/genericForm.html.twig' with {'form': editForm} only %} +
-
-

Supprimer l'acteur

-
-
- {% include '_includes/html/genericForm.html.twig' with {'form': deleteForm, 'data': {actor: actor, variant: 'full'}} only %} +
+
+

Supprimer l'acteur

+
+
+ {% include '_includes/html/genericForm.html.twig' with {'form': deleteForm, 'data': {actor: actor, variant: 'full'}} only %} +
{% endblock %} \ No newline at end of file