DefaultController.php 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?php
  2. namespace Muzich\GroupBundle\Controller;
  3. use Muzich\CoreBundle\lib\Controller;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  5. use Muzich\CoreBundle\Entity\Group;
  6. use Muzich\CoreBundle\Form\Group\GroupForm;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Muzich\CoreBundle\Managers\GroupManager;
  9. class DefaultController extends Controller
  10. {
  11. protected function getGroupForm($group)
  12. {
  13. return $this->createForm(
  14. new GroupForm(),
  15. $group
  16. );
  17. }
  18. /**
  19. * Page listant les groupes possédés par l'utilisateur. Comporte egallement
  20. * un formulaire pour ajouter un groupe.
  21. *
  22. * @Template()
  23. */
  24. public function myListAction()
  25. {
  26. $user = $this->getUser(true, array('join' => array(
  27. 'groups_owned'
  28. )));
  29. $new_group = new Group();
  30. $form_new = $this->getGroupForm($new_group);
  31. return array(
  32. 'groups' => $user->getGroupsOwned(),
  33. 'form_new' => $form_new->createView(),
  34. 'form_new_name' => $form_new->getName(),
  35. 'open_add_group' => false
  36. );
  37. }
  38. /**
  39. * Procédure d'ajout d'un groupe
  40. *
  41. * @param Request $request
  42. * @return redirect|template
  43. */
  44. public function addAction(Request $request)
  45. {
  46. $user = $this->getUser();
  47. /**
  48. * Bug lors des tests: L'user n'est pas 'lié' a celui en base par doctrine.
  49. * Docrine le voit si on faire une requete directe.
  50. */
  51. if ($this->container->getParameter('env') == 'test')
  52. {
  53. $user = $this->getDoctrine()->getRepository('MuzichCoreBundle:User')->findOneById(
  54. $this->container->get('security.context')->getToken()->getUser()->getId(),
  55. array()
  56. )->getSingleResult();
  57. }
  58. $em = $this->getDoctrine()->getEntityManager();
  59. $new_group = new Group();
  60. $new_group->setOwner($user);
  61. $form_new = $this->getGroupForm($new_group);
  62. $form_new->bind($request);
  63. if ($form_new->isValid())
  64. {
  65. $factory = new GroupManager($new_group, $em, $this->container);
  66. $factory->proceedTags(json_decode($new_group->getTags()));
  67. $em->persist($new_group);
  68. $em->flush();
  69. $this->setFlash('success', 'group.create.success');
  70. return $this->redirect($this->generateUrl('groups_own_list'));
  71. }
  72. else
  73. {
  74. $user = $this->getUser(true, array('join' => array(
  75. 'groups_owned'
  76. )));
  77. //$this->setFlash('error', 'group.create.failure');
  78. return $this->render(
  79. 'MuzichGroupBundle:Default:myList.html.twig',
  80. array(
  81. 'groups' => $user->getGroupsOwned(),
  82. 'form_new' => $form_new->createView(),
  83. 'form_new_name' => $form_new->getName(),
  84. 'open_add_group' => true
  85. )
  86. );
  87. }
  88. }
  89. /**
  90. * Modification d'un groupe
  91. *
  92. * @Template()
  93. * @param Request $request
  94. * @param string $slug
  95. * @return array
  96. */
  97. public function editAction(Request $request, $slug)
  98. {
  99. $user = $this->getUser();
  100. try {
  101. $group = $this->getDoctrine()
  102. ->getEntityManager()->createQuery('SELECT g, t FROM MuzichCoreBundle:Group g
  103. LEFT JOIN g.tags t WHERE g.slug = :gslug')
  104. ->setParameter('gslug', $slug)
  105. ->getSingleResult()
  106. ;
  107. } catch (\Doctrine\ORM\NoResultException $e) {
  108. return $this->createNotFoundException();
  109. }
  110. if ($group->getOwner()->getId() != $user->getId())
  111. {
  112. return $this->createNotFoundException();
  113. }
  114. $prompt_tags = array();
  115. foreach ($group->getTags() as $tag)
  116. {
  117. $prompt_tags[$tag->getTag()->getId()] = $tag->getTag()->getName();
  118. }
  119. $group->setTags($group->getTagsIdsJson());
  120. $form = $this->getGroupForm($group);
  121. return array(
  122. 'group' => $group,
  123. 'form' => $form->createView(),
  124. 'form_name' => 'group',
  125. 'search_tags' => $prompt_tags
  126. );
  127. }
  128. public function updateAction(Request $request, $slug)
  129. {
  130. $em = $this->getDoctrine()->getEntityManager();
  131. $group = $this->findGroupWithSlug($slug);
  132. if ($group->getOwner()->getId() != $this->getUserId())
  133. {
  134. throw $this->createNotFoundException('Vous n\'ête pas le créateur de ce groupe.');
  135. }
  136. $prompt_tags = array();
  137. foreach ($group->getTags() as $tag)
  138. {
  139. $prompt_tags[$tag->getTag()->getId()] = $tag->getTag()->getName();
  140. }
  141. // Pour être compatible avec le formulaire
  142. $group->setTags($group->getTagsIdsJson());
  143. $form = $this->getGroupForm($group);
  144. $form->bind($request);
  145. if ($form->isValid())
  146. {
  147. $factory = new GroupManager($group, $em, $this->container);
  148. $factory->proceedTags(json_decode($group->getTags()));
  149. $em->persist($group);
  150. $em->flush();
  151. $this->setFlash('success', 'group.update.success');
  152. return $this->redirect($this->generateUrl('show_group', array('slug' => $group->getSlug())));
  153. }
  154. else
  155. {
  156. return $this->render(
  157. 'MuzichGroupBundle:Default:edit.html.twig',
  158. array(
  159. 'group' => $group,
  160. 'form' => $form->createView(),
  161. 'form_name' => 'group',
  162. 'search_tags' => $prompt_tags
  163. )
  164. );
  165. }
  166. }
  167. public function deleteAction($group_id, $token)
  168. {
  169. $user = $this->getUser();
  170. if ($user->getPersonalHash($group_id) != $token)
  171. {
  172. throw $this->createNotFoundException('Accès non autorisé.');
  173. }
  174. $group = $this->findGroupWithId($group_id);
  175. if ($user->getId() != $group->getOwner()->getId())
  176. {
  177. throw $this->createNotFoundException('Accès non autorisé.');
  178. }
  179. $em = $this->getDoctrine()->getEntityManager();
  180. // Il faudra le faire avec doctrine:
  181. $elements = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
  182. ->findBy(array('group' => $group->getId()))
  183. ;
  184. foreach ($elements as $element)
  185. {
  186. $element->setGroup(null);
  187. $em->persist($element);
  188. }
  189. $em->remove($group);
  190. $em->flush();
  191. return $this->redirect($this->container->get('request')->headers->get('referer'));
  192. }
  193. }