EventElement.php 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace Muzich\CoreBundle\Propagator;
  3. use Muzich\CoreBundle\Propagator\EventPropagator;
  4. use Muzich\CoreBundle\Entity\Element;
  5. use Muzich\CoreBundle\Actions\User\Event as UserEventAction;
  6. use Muzich\CoreBundle\Actions\User\Reputation as UserReputation;
  7. use Muzich\CoreBundle\Entity\Event;
  8. use Muzich\CoreBundle\Entity\User;
  9. use Muzich\CoreBundle\Managers\CommentsManager;
  10. /**
  11. * Propagateur d'événement concernant les éléments
  12. *
  13. * @author bux
  14. */
  15. class EventElement extends EventPropagator
  16. {
  17. /**
  18. * Cette procédure doit être appelé après l'ajout d'un commentaire sur un
  19. * événement. Actuellement il:
  20. * * Met a jour ou créer un objet événement (nouveau commentaire) pour le
  21. * propriétaire de l'élément.
  22. * * Met a jour ou créer un objet événement (nouveau commentaire) pour les
  23. * utilisateurs qui follow cet élément.
  24. *
  25. * @param Element $element
  26. */
  27. public function commentAdded(Element $element, User $user)
  28. {
  29. // On avertis le propriétaire si ce n'est pas lui même qui vient de commenter
  30. if ($user->getId() != $element->getOwner()->getId())
  31. {
  32. $uea = new UserEventAction($element->getOwner(), $this->container);
  33. $event = $uea->proceed(Event::TYPE_COMMENT_ADDED_ELEMENT, $element->getId());
  34. $this->container->get('doctrine')->getEntityManager()->persist($event);
  35. }
  36. // Pour chaque utilisateur qui a demandé a être avertis d'un nouveau commentaire
  37. $cm = new CommentsManager($element->getComments());
  38. $uids = $cm->getFollowersIds();
  39. if (count($uids))
  40. {
  41. $users = $this->container->get('doctrine')->getEntityManager()
  42. ->getRepository('MuzichCoreBundle:User')
  43. ->getUsersWithIds($uids)
  44. ;
  45. if (count($users))
  46. {
  47. foreach ($users as $user_c)
  48. {
  49. // On n'avertis pas l'utilisateur de son propre commentaire
  50. if ($user->getId() != $user_c->getId())
  51. {
  52. $uea = new UserEventAction($user_c, $this->container);
  53. $event = $uea->proceed(Event::TYPE_COMMENT_ADDED_ELEMENT, $element->getId());
  54. $this->container->get('doctrine')->getEntityManager()->persist($event);
  55. }
  56. }
  57. }
  58. }
  59. }
  60. /**
  61. * Un point a été ajouté par quelqu'un a cet élément
  62. * Conséquences:
  63. * * L'auteur du partage gagne x point de reputation
  64. *
  65. * @param Element $element
  66. */
  67. public function onePointAdded(Element $element)
  68. {
  69. $ur = new UserReputation($element->getOwner());
  70. $ur->addPoints(
  71. $this->container->getParameter('reputation_element_point_value')
  72. );
  73. }
  74. /**
  75. * Un point a été retiré par quelqu'un a cet élément
  76. * Conséquences:
  77. * * L'auteur du partage perd x point de reputation
  78. *
  79. * @param Element $element
  80. */
  81. public function onePointRemoved(Element $element)
  82. {
  83. $ur = new UserReputation($element->getOwner());
  84. $ur->removePoints(
  85. $this->container->getParameter('reputation_element_point_value')
  86. );
  87. }
  88. /**
  89. * L'élément a été ajouté aux favoris d'un utilisateur
  90. *
  91. * @param Element $element
  92. */
  93. public function addedToFavorites(Element $element)
  94. {
  95. $ur = new UserReputation($element->getOwner());
  96. $ur->addPoints(
  97. $this->container->getParameter('reputation_element_favorite_value')
  98. );
  99. $uea = new UserEventAction($element->getOwner(), $this->container);
  100. $event = $uea->proceed(Event::TYPE_FAV_ADDED_ELEMENT, $element->getId());
  101. $this->container->get('doctrine')->getEntityManager()->persist($event);
  102. }
  103. /**
  104. * L'élément a été retiré des favoris d'un utilisateur
  105. *
  106. * @param Element $element
  107. */
  108. public function removedFromFavorites(Element $element)
  109. {
  110. $ur = new UserReputation($element->getOwner());
  111. $ur->removePoints(
  112. $this->container->getParameter('reputation_element_favorite_value')
  113. );
  114. }
  115. /**
  116. * Des tags viennent d'être proposé a un élément
  117. *
  118. * @param Element $element
  119. */
  120. public function tagsProposed(Element $element)
  121. {
  122. $uea = new UserEventAction($element->getOwner(), $this->container);
  123. $event = $uea->proceed(Event::TYPE_TAGS_PROPOSED, $element->getId());
  124. $this->container->get('doctrine')->getEntityManager()->persist($event);
  125. }
  126. }