PlaylistManager.php 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace Muzich\CoreBundle\Managers;
  3. use Doctrine\ORM\EntityManager;
  4. use Muzich\CoreBundle\Entity\Playlist;
  5. use Muzich\CoreBundle\Entity\User;
  6. use Muzich\CoreBundle\Entity\Element;
  7. use Muzich\CoreBundle\Entity\UserPlaylistPicked;
  8. use \Doctrine\Common\Collections\ArrayCollection;
  9. use Muzich\CoreBundle\lib\Tag as TagLib;
  10. class PlaylistManager
  11. {
  12. protected $entity_manager;
  13. protected $user;
  14. public function __construct(EntityManager $entity_manager)
  15. {
  16. $this->entity_manager = $entity_manager;
  17. }
  18. public function getUserPublicsOrOwnedPlaylists(User $user_viewed, User $user = null)
  19. {
  20. return $this->entity_manager->getRepository('MuzichCoreBundle:Playlist')
  21. ->getUserPublicPlaylistsOrOwnedQueryBuilder($user_viewed, $user)
  22. ->getQuery()->getResult()
  23. ;
  24. }
  25. public function getOwnedsPlaylists(User $user)
  26. {
  27. return $this->getUserPublicsOrOwnedPlaylists($user, $user);
  28. }
  29. /** @return Playlist */
  30. public function findOneAccessiblePlaylistWithId($playlist_id, User $user = null)
  31. {
  32. return $this->entity_manager->getRepository('MuzichCoreBundle:Playlist')
  33. ->findOnePlaylistOwnedOrPublic($playlist_id, $user)
  34. ->getQuery()->getOneOrNullResult()
  35. ;
  36. }
  37. /** @return Playlist */
  38. public function findOwnedPlaylistWithId($playlist_id, User $user)
  39. {
  40. return $this->entity_manager->getRepository('MuzichCoreBundle:Playlist')
  41. ->findOnePlaylistOwned($playlist_id, $user)
  42. ->getQuery()->getOneOrNullResult()
  43. ;
  44. }
  45. public function getPlaylistElements(Playlist $playlist, $offset = null)
  46. {
  47. $element_ids = $playlist->getElementsIds();
  48. $query_builder = $this->entity_manager->getRepository('MuzichCoreBundle:Element')
  49. ->getElementsWithIdsOrderingQueryBuilder($element_ids)
  50. ;
  51. if ($offset)
  52. {
  53. $query_builder->setFirstResult( $offset-1 )
  54. ->setMaxResults( count($element_ids) );
  55. }
  56. return $query_builder->getQuery()->getResult();
  57. }
  58. public function getNewPlaylist(User $owner = null)
  59. {
  60. $playlist = new Playlist();
  61. $playlist->setOwner($owner);
  62. return $playlist;
  63. }
  64. public function addPickedPlaylistToUser(User $user, Playlist $playlist)
  65. {
  66. if (!$user->havePlaylistPicked($playlist))
  67. {
  68. $user_playlist_picked = new UserPlaylistPicked();
  69. $user_playlist_picked->init($user, $playlist);
  70. $user->getUserPlaylistsPickeds()->add($user_playlist_picked);
  71. $this->entity_manager->persist($user);
  72. $this->entity_manager->persist($user_playlist_picked);
  73. }
  74. }
  75. public function removePickedPlaylistToUser(User $user, Playlist $playlist)
  76. {
  77. if ($user->havePlaylistPicked($playlist))
  78. {
  79. $user_playlists_pickeds = new ArrayCollection();
  80. foreach ($user->getUserPlaylistsPickeds() as $user_playlist_picked)
  81. {
  82. if ($user_playlist_picked->getPlaylist()->getId() == $playlist->getId())
  83. {
  84. $this->entity_manager->remove($user_playlist_picked);
  85. }
  86. else
  87. {
  88. $user_playlists_pickeds->add($user_playlist_picked);
  89. }
  90. }
  91. $user->setUserPlaylistsPickeds($user_playlists_pickeds);
  92. $this->entity_manager->persist($user);
  93. }
  94. }
  95. public function copyPlaylist(User $user, Playlist $playlist)
  96. {
  97. $playlist_copied = new Playlist();
  98. $playlist_copied->setOwner($user);
  99. $playlist_copied->setTags($playlist->getTags());
  100. $playlist_copied->setElements($playlist->getElements());
  101. $playlist_copied->setCopied($playlist);
  102. $playlist->addCopy($playlist_copied);
  103. $user->getPlaylistsOwneds()->add($playlist_copied);
  104. $this->entity_manager->persist($playlist_copied);
  105. $this->entity_manager->persist($user);
  106. }
  107. public function addElementToPlaylist(Element $element, Playlist $playlist)
  108. {
  109. $playlist->addElement($element);
  110. $this->actualizePlaylistTags($playlist);
  111. }
  112. public function addElementsToPlaylist($elements, Playlist $playlist)
  113. {
  114. foreach ($elements as $element)
  115. {
  116. $playlist->addElement($element);
  117. }
  118. $this->actualizePlaylistTags($playlist);
  119. }
  120. public function removePlaylistElementWithId(Playlist $playlist, $element_id)
  121. {
  122. $playlist->removeElementWithId($element_id);
  123. $this->actualizePlaylistTags($playlist);
  124. $this->entity_manager->persist($playlist);
  125. }
  126. protected function actualizePlaylistTags(Playlist $playlist)
  127. {
  128. $tag_lib = new TagLib();
  129. $playlist->cleanTags();
  130. foreach ($tag_lib->getOrderedEntityTagsWithElements($this->getPlaylistElements($playlist)) as $tag)
  131. {
  132. $playlist->addTag($tag);
  133. }
  134. $this->entity_manager->persist($playlist);
  135. }
  136. public function updatePlaylistElementsOrder(Playlist $playlist, $elements_ids_ordereds)
  137. {
  138. $elements_origin_order = $playlist->getElements();
  139. $elements_ordereds = array();
  140. foreach ($elements_ids_ordereds as $element_id)
  141. {
  142. if (($element_record_match = $this->findElementRecordWithId($elements_origin_order, $element_id)))
  143. {
  144. $elements_ordereds[] = $element_record_match;
  145. }
  146. }
  147. $playlist->setElements($elements_ordereds);
  148. $this->entity_manager->persist($playlist);
  149. }
  150. protected function findElementRecordWithId($elements, $searched_id)
  151. {
  152. foreach ($elements as $element_record)
  153. {
  154. if ($element_record['id'] == $searched_id)
  155. {
  156. return $element_record;
  157. }
  158. }
  159. return null;
  160. }
  161. }