diff --git a/Controller/ActivityController.php b/Controller/ActivityController.php index f7a6dc80a..b0c09bc2e 100644 --- a/Controller/ActivityController.php +++ b/Controller/ActivityController.php @@ -309,30 +309,68 @@ class ActivityController extends Controller 'delete_form' => $deleteForm->createView(), )); } + /** * Deletes a Activity entity. * */ - public function deleteAction(Request $request, $id) + public function deleteAction(Request $request, $id, $person_id) { - $form = $this->createDeleteForm($id); - $form->handleRequest($request); + $em = $this->getDoctrine()->getManager(); + + /* @var $activity Activity */ + $activity = $em->getRepository('ChillActivityBundle:Activity') + ->find($id); + $person = $activity->getPerson(); - if ($form->isValid()) { - $em = $this->getDoctrine()->getManager(); - $entity = $em->getRepository('ChillActivityBundle:Activity')->find($id); - - if (!$entity) { - throw $this->createNotFoundException('Unable to find Activity entity.'); - } - - $this->denyAccessUnlessGranted('CHILL_ACTIVITY_UPDATE', $entity); - - $em->remove($entity); - $em->flush(); + if (!$activity) { + throw $this->createNotFoundException('Unable to find Activity entity.'); } + + $this->denyAccessUnlessGranted('CHILL_ACTIVITY_DELETE', $activity); + + $form = $this->createDeleteForm($id, $person); + + if ($request->getMethod() === Request::METHOD_DELETE) { + $form->handleRequest($request); - return $this->redirect($this->generateUrl('activity')); + if ($form->isValid()) { + $logger = $this->get('chill.main.logger'); + + $logger->notice("An activity has been removed", array( + 'by_user' => $this->getUser()->getUsername(), + 'activity_id' => $activity->getId(), + 'person_id' => $activity->getPerson()->getId(), + 'remark' => $activity->getRemark(), + 'scope_id' => $activity->getScope()->getId(), + 'reasons_ids' => $activity->getReasons() + ->map(function ($ar) { return $ar->getId(); }) + ->toArray(), + 'type_id' => $activity->getType()->getId(), + 'duration' => $activity->getDurationTime()->format('U'), + 'date' => $activity->getDate()->format('Y-m-d'), + 'attendee' => $activity->getAttendee() + )); + + $em->remove($activity); + $em->flush(); + + $this->addFlash('success', $this->get('translator') + ->trans("The activity has been successfully removed.")); + + return $this->redirect($this->generateUrl( + 'chill_activity_activity_list', array( + 'person_id' => $person_id + ))); + } + } + + return $this->render('ChillActivityBundle:Activity:confirm_delete.html.twig', array( + 'activity' => $activity, + 'delete_form' => $form->createView() + )); + + } /** diff --git a/DataFixtures/ORM/LoadActivitytACL.php b/DataFixtures/ORM/LoadActivitytACL.php index e9d2d3092..e423f39f6 100644 --- a/DataFixtures/ORM/LoadActivitytACL.php +++ b/DataFixtures/ORM/LoadActivitytACL.php @@ -61,7 +61,7 @@ class LoadActivitytACL extends AbstractFixture implements OrderedFixtureInterfac break; } - printf("Adding CHILL_ACTIVITY_UPDATE & CHILL_ACTIVITY_CREATE to %s " + printf("Adding CHILL_ACTIVITY_UPDATE & CHILL_ACTIVITY_CREATE & CHILL_ACTIVITY_DELETE to %s " . "permission group, scope '%s' \n", $permissionsGroup->getName(), $scope->getName()['en']); $roleScopeUpdate = (new RoleScope()) @@ -72,8 +72,14 @@ class LoadActivitytACL extends AbstractFixture implements OrderedFixtureInterfac ->setRole('CHILL_ACTIVITY_CREATE') ->setScope($scope); $permissionsGroup->addRoleScope($roleScopeCreate); + $roleScopeDelete = (new RoleScope()) + ->setRole('CHILL_ACTIVITY_DELETE') + ->setScope($scope); + $permissionsGroup->addRoleScope($roleScopeDelete); + $manager->persist($roleScopeUpdate); $manager->persist($roleScopeCreate); + $manager->persist($roleScopeDelete); } } diff --git a/DependencyInjection/ChillActivityExtension.php b/DependencyInjection/ChillActivityExtension.php index d5a96f21b..20bcbbfed 100644 --- a/DependencyInjection/ChillActivityExtension.php +++ b/DependencyInjection/ChillActivityExtension.php @@ -79,7 +79,8 @@ class ChillActivityExtension extends Extension implements PrependExtensionInterf 'role_hierarchy' => array( ActivityVoter::UPDATE => array(ActivityVoter::SEE), ActivityVoter::CREATE => array(ActivityVoter::SEE), - ActivityVoter::SEE => array(ActivityStatsVoter::STATS) + ActivityVoter::SEE => array(ActivityStatsVoter::STATS), + ActivityVoter::DELETE => array(ActivityVoter::SEE) ) )); } diff --git a/Resources/config/routing/activity.yml b/Resources/config/routing/activity.yml index b2bc76201..6d287eec7 100644 --- a/Resources/config/routing/activity.yml +++ b/Resources/config/routing/activity.yml @@ -37,4 +37,4 @@ chill_activity_activity_update: chill_activity_activity_delete: path: /{_locale}/person/{person_id}/activity/{id}/delete defaults: { _controller: "ChillActivityBundle:Activity:delete" } - methods: [POST, DELETE] + methods: [GET, POST, DELETE] diff --git a/Resources/translations/messages.fr.yml b/Resources/translations/messages.fr.yml index 9660908e0..8672649f3 100644 --- a/Resources/translations/messages.fr.yml +++ b/Resources/translations/messages.fr.yml @@ -53,6 +53,7 @@ Choose a type: Choisir un type CHILL_ACTIVITY_CREATE: Créer une activité CHILL_ACTIVITY_UPDATE: Modifier une activité CHILL_ACTIVITY_SEE: Voir une activité +CHILL_ACTIVITY_DELETE: Supprimer une activité # admin Activity configuration menu: Configuration des activités @@ -86,4 +87,9 @@ ActivityType list: Types d'activités Create a new activity type: Créer un nouveau type d'activité ActivityType creation: Nouveau type d'activité ActivityType: Type d'activité -ActivityType edit: Modifier une activité \ No newline at end of file +ActivityType edit: Modifier une activité + +# activity delete +Remove activity: Supprimer une activité +Are you sure you want to remove the activity about "%name%" ?: Êtes-vous sûr de vouloir supprimer une activité qui concerne "%name%" ? +The activity has been successfully removed.: L'activité a été supprimée. \ No newline at end of file diff --git a/Resources/views/Activity/confirm_delete.html.twig b/Resources/views/Activity/confirm_delete.html.twig new file mode 100644 index 000000000..3d3f9b0ae --- /dev/null +++ b/Resources/views/Activity/confirm_delete.html.twig @@ -0,0 +1,19 @@ +{% extends "ChillPersonBundle::layout.html.twig" %} + +{% set activeRouteKey = 'chill_activity_activity_list' %} +{% set person = activity.person %} + +{% block title 'Remove activity'|trans %} + +{% block personcontent %} + +{{ include('ChillMainBundle:Util:confirmation_template.html.twig', + { + 'title' : 'Remove activity'|trans, + 'confirm_question' : 'Are you sure you want to remove the activity about "%name%" ?'|trans({ '%name%' : person.firstname ~ ' ' ~ person.lastname } ), + 'cancel_route' : 'chill_activity_activity_list', + 'cancel_parameters' : { 'person_id' : activity.person.id, 'id' : activity.id }, + 'form' : delete_form + } ) }} + +{% endblock %} diff --git a/Resources/views/Activity/list.html.twig b/Resources/views/Activity/list.html.twig index cfaf9cf89..16f9ebed9 100644 --- a/Resources/views/Activity/list.html.twig +++ b/Resources/views/Activity/list.html.twig @@ -51,9 +51,18 @@