diff --git a/public/scripts/ajaxForm.js b/public/scripts/ajaxForm.js index 9121fe1..8d539e8 100644 --- a/public/scripts/ajaxForm.js +++ b/public/scripts/ajaxForm.js @@ -9,7 +9,13 @@ // Refresh the page if (data.refresh) { - window.location.reload(); + if (data.error == '' && data.message == '') { + window.location.reload(); + } else { + setTimeout(function() { + window.location.reload(); + }, 3000); + } } // Reset the form @@ -20,13 +26,13 @@ // Update the form error parent.querySelector('.form-error').innerHTML = data.error; setTimeout(function() { - parent.querySelector('.form-error').innerHTML = 0; + parent.querySelector('.form-error').innerHTML = ''; }, 3000); - + // Update the form message parent.querySelector('.form-message').innerHTML = data.message; setTimeout(function() { - parent.querySelector('.form-message').innerHTML = 0; + parent.querySelector('.form-message').innerHTML = ''; }, 3000); } diff --git a/src/Controller/ActorsController.php b/src/Controller/ActorsController.php index 6f2b861..eb11017 100644 --- a/src/Controller/ActorsController.php +++ b/src/Controller/ActorsController.php @@ -8,6 +8,7 @@ use App\Entity\ActorEntity; use App\Form\Actors\ActorDeleteForm; use Symfony\Component\Routing\Generator\UrlGenerator; +use App\Form\Actors\ActorEditForm; class ActorsController extends AbstractExtendedController { @@ -103,26 +104,20 @@ // Get actor $actor = $actorRepository->find($id); - // Actor delete form - /** @var ActorDeleteForm $actorDeleteForm */ - $actorDeleteForm = $this->createNamedCustomForm('actorDelete', ActorDeleteForm::class); - $actorDeleteForm->handleRequest($request); - if ($actorDeleteForm->isSubmitted() && $actorDeleteForm->isValid()) { - $errors = $actorDeleteForm->validate(); + // Actor edit form + /** @var ActorEditForm $actorEditForm */ + $actorEditForm = $this->createNamedCustomForm('edit', ActorEditForm::class); + $actorEditForm->handleRequest($request); + if ($actorEditForm->isSubmitted() && $actorEditForm->isValid()) { + $errors = $actorEditForm->validate(); if (empty($errors)) { - $actor = $actorDeleteForm->getActor($actorRepository); - if (!is_null($actor)) { - $entityManager->remove($actor); - $entityManager->flush(); - return $this->ajaxFormAnswer([ - 'redirect' => $this->generateUrl('actors_actors', [], UrlGenerator::ABSOLUTE_PATH), - ]); - } else { - return $this->ajaxFormAnswer([ - 'error' => 'Utilisateur non trouvé', - 'code' => Response::HTTP_BAD_REQUEST, - ]); - } + $actorEditForm->updateActor($actor); + $entityManager->persist($actor); + $entityManager->flush(); + return $this->ajaxFormAnswer([ + 'message' => 'Modification enregistrées', + 'refresh' => true, + ]); } else { return $this->ajaxFormAnswer([ 'error' => join('
', $errors), @@ -131,8 +126,32 @@ } } + // Actor delete form + /** @var ActorDeleteForm $actorDeleteForm */ + $actorDeleteForm = $this->createNamedCustomForm('delete', ActorDeleteForm::class); + $actorDeleteForm->handleRequest($request); + if ($actorDeleteForm->isSubmitted() && $actorDeleteForm->isValid()) { + $errors = $actorDeleteForm->validate(); + if (empty($errors)) { + $entityManager->remove($actor); + $entityManager->flush(); + return $this->ajaxFormAnswer([ + 'redirect' => $this->generateUrl('actors_actors', [], UrlGenerator::ABSOLUTE_PATH), + ]); + } else { + return $this->ajaxFormAnswer([ + 'error' => join('
', $errors), + 'code' => Response::HTTP_BAD_REQUEST, + ]); + } + } + + // Update fields + $actorEditForm->updateFields($actor); + return $this->render('actors/actor.html.twig', [ 'actor' => $actor, + 'editForm' => $actorEditForm, 'deleteForm' => $actorDeleteForm, ]); } diff --git a/src/Entity/ActorEntity.php b/src/Entity/ActorEntity.php index d52eadd..c529dd1 100644 --- a/src/Entity/ActorEntity.php +++ b/src/Entity/ActorEntity.php @@ -173,6 +173,6 @@ { $this->active = $active; - return $this->active; + return $this; } } \ No newline at end of file diff --git a/src/Form/Actors/ActorEditForm.php b/src/Form/Actors/ActorEditForm.php new file mode 100644 index 0000000..1c63674 --- /dev/null +++ b/src/Form/Actors/ActorEditForm.php @@ -0,0 +1,75 @@ +form->setData([ + 'firstName' => $actor->getFirstName(), + 'lastName' => $actor->getLastName(), + 'nickname' => $actor->getNickname(), + 'active' => $actor->getActive(), + ]); + + return $this; + } + + /** + * Update actor with the content + * + * @param ActorEntity $actor + * @return self + */ + public function updateActor(ActorEntity $actor): self + { + $data = $this->form->getData(); + $actor->setFirstName($data['firstName']); + $actor->setLastName($data['lastName']); + $actor->setNickname($data['nickname'] ?? ""); + $actor->setActive($data['active']); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getTemplate(): string + { + return '_includes/html/form/actors/edit.html.twig'; + } + + /** + * {@inheritdoc} + */ + protected function addFields($formBuilder, $options): void + { + $formBuilder->add('firstName', TextType::class, [ + 'required' => true + ]) + ->add('lastName', TextType::class, [ + 'required' => true + ]) + ->add('nickname', TextType::class, [ + 'required' => false + ]) + ->add('active', CheckboxType::class, [ + 'required' => false + ]) + ->add('submit', SubmitType::class); + } +} \ No newline at end of file diff --git a/templates/_includes/html/form/actors/edit.html.twig b/templates/_includes/html/form/actors/edit.html.twig new file mode 100644 index 0000000..e0da1a7 --- /dev/null +++ b/templates/_includes/html/form/actors/edit.html.twig @@ -0,0 +1,21 @@ +{{ form_start(form, {attr: {class: 'ajax-form'}}) }} +
+ {{ form_label(form.firstName, 'Prénom', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.firstName, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.lastName, 'Nom', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.lastName, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.nickname, 'Surnom', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.nickname, {attr: {class: 'w-100', title: 'Le nom tel qu\'il sera affiché.\nS\'il n\'est pas définit, il sera sous la form Prénom NOM.'}}) }} +
+
+ {{ form_widget(form.active) }} + {{ form_label(form.active, 'Actif') }} +
+{{ form_widget(form.submit, {attr: {class: 'w-100'}, label: 'Enregistrer'}) }} +

+

+{{ form_end(form) }} \ No newline at end of file diff --git a/templates/actors/actor.html.twig b/templates/actors/actor.html.twig index 99fd3c3..0fd67b3 100644 --- a/templates/actors/actor.html.twig +++ b/templates/actors/actor.html.twig @@ -4,13 +4,15 @@ {% set returnLink=url("actors_actors", {}, false) %} {% block pageContent %} -
+

Editer

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

Supprimer l'acteur