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'}}) }}
+