PlaylistManager.php 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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 findOneAccessiblePlaylistWithId($playlist_id, User $user = null)
  26. {
  27. return $this->entity_manager->getRepository('MuzichCoreBundle:Playlist')
  28. ->findOnePlaylistOwnedOrPublic($playlist_id, $user)
  29. ->getQuery()->getOneOrNullResult()
  30. ;
  31. }
  32. public function getPlaylistElements(Playlist $playlist, $offset = null)
  33. {
  34. $element_ids = $playlist->getElementsIds();
  35. $query_builder = $this->entity_manager->getRepository('MuzichCoreBundle:Element')
  36. ->getElementsWithIdsOrderingQueryBuilder($element_ids)
  37. ;
  38. if ($offset)
  39. {
  40. $query_builder->setFirstResult( $offset-1 )
  41. ->setMaxResults( count($element_ids) );
  42. }
  43. return $query_builder->getQuery()->getResult();
  44. }
  45. public function getNewPlaylist(User $owner)
  46. {
  47. $playlist = new Playlist();
  48. $playlist->setOwner($owner);
  49. return $playlist;
  50. }
  51. public function addPickedPlaylistToUser(User $user, Playlist $playlist)
  52. {
  53. if (!$user->havePlaylistPicked($playlist))
  54. {
  55. $user_playlist_picked = new UserPlaylistPicked();
  56. $user_playlist_picked->init($user, $playlist);
  57. $user->getUserPlaylistsPickeds()->add($user_playlist_picked);
  58. $this->entity_manager->persist($user);
  59. $this->entity_manager->persist($user_playlist_picked);
  60. }
  61. }
  62. public function removePickedPlaylistToUser(User $user, Playlist $playlist)
  63. {
  64. if ($user->havePlaylistPicked($playlist))
  65. {
  66. $user_playlists_pickeds = new ArrayCollection();
  67. foreach ($user->getUserPlaylistsPickeds() as $user_playlist_picked)
  68. {
  69. if ($user_playlist_picked->getPlaylist()->getId() == $playlist->getId())
  70. {
  71. $this->entity_manager->remove($user_playlist_picked);
  72. }
  73. else
  74. {
  75. $user_playlists_pickeds->add($user_playlist_picked);
  76. }
  77. }
  78. $user->setUserPlaylistsPickeds($user_playlists_pickeds);
  79. $this->entity_manager->persist($user);
  80. }
  81. }
  82. public function copyPlaylist(User $user, Playlist $playlist)
  83. {
  84. $playlist_copied = new Playlist();
  85. $playlist_copied->setOwner($user);
  86. $playlist_copied->setTags($playlist->getTags());
  87. $playlist_copied->setElements($playlist->getElements());
  88. $playlist_copied->setCopied($playlist);
  89. $playlist->addCopy($playlist_copied);
  90. $user->getPlaylistsOwneds()->add($playlist_copied);
  91. $this->entity_manager->persist($playlist_copied);
  92. $this->entity_manager->persist($user);
  93. }
  94. public function addElementToPlaylist(Element $element, Playlist $playlist)
  95. {
  96. $playlist->addElement($element);
  97. $this->actualizePlaylistTags($playlist);
  98. }
  99. public function addElementsToPlaylist($elements, Playlist $playlist)
  100. {
  101. foreach ($elements as $element)
  102. {
  103. $playlist->addElement($element);
  104. }
  105. $this->actualizePlaylistTags($playlist);
  106. }
  107. public function removeElementFromPlaylist(Element $element, Playlist $playlist)
  108. {
  109. $playlist->removeElement($element);
  110. $this->actualizePlaylistTags($playlist);
  111. }
  112. protected function actualizePlaylistTags(Playlist $playlist)
  113. {
  114. $tag_lib = new TagLib();
  115. $playlist->cleanTags();
  116. foreach ($tag_lib->getOrderedEntityTagsWithElements($this->getPlaylistElements($playlist)) as $tag)
  117. {
  118. $playlist->addTag($tag);
  119. }
  120. $this->entity_manager->persist($playlist);
  121. }
  122. }