PlaylistRepository.php 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?php
  2. namespace Muzich\CoreBundle\Repository;
  3. use Doctrine\ORM\EntityRepository;
  4. use Doctrine\ORM\Mapping as ORM;
  5. use Muzich\CoreBundle\Entity\User;
  6. class PlaylistRepository extends EntityRepository
  7. {
  8. protected function getPlaylistsQueryBuilder()
  9. {
  10. return $this->getEntityManager()->createQueryBuilder()
  11. ->select('p')
  12. ->from('MuzichCoreBundle:Playlist', 'p')
  13. ;
  14. }
  15. public function getPublicPlaylistsQueryBuilder()
  16. {
  17. return $this->getPlaylistsQueryBuilder()
  18. ->andWhere('p.public = 1')
  19. ;
  20. }
  21. public function getUserPublicPlaylistsQueryBuilder(User $user)
  22. {
  23. return $this->getPublicPlaylistsQueryBuilder()
  24. ->andWhere('p.owner = :owner_id')
  25. ->setParameter('owner_id', $user->getId())
  26. ;
  27. }
  28. public function getUserPublicPlaylistsOrOwnedQueryBuilder(User $viewed_user, User $current_user = null)
  29. {
  30. if (!$current_user)
  31. {
  32. return $this->getUserPublicPlaylistsQueryBuilder($viewed_user);
  33. }
  34. if ($viewed_user->getId() != $current_user->getId())
  35. {
  36. return $this->getUserPublicPlaylistsQueryBuilder($viewed_user);
  37. }
  38. return $this->getPlaylistsQueryBuilder()
  39. ->where('p.owner = :owner_id')
  40. ->setParameter('owner_id', $current_user->getId())
  41. ;
  42. }
  43. public function findOnePlaylistOwnedOrPublic($playlist_id, User $user = null)
  44. {
  45. $query_builder = $this->getPlaylistsQueryBuilder()
  46. ->andWhere('p.id = :playlist_id');
  47. if ($user)
  48. {
  49. $query_builder->andWhere('p.public = 1 OR p.owner = :owner_id');
  50. $query_builder->setParameters(array(
  51. 'playlist_id' => $playlist_id,
  52. 'owner_id' => $user->getId()
  53. ));
  54. }
  55. else
  56. {
  57. $query_builder->andWhere('p.public = 1');
  58. $query_builder->setParameters(array(
  59. 'playlist_id' => $playlist_id
  60. ));
  61. }
  62. return $query_builder;
  63. }
  64. /**
  65. * Retourne un tableau de groupe correspondant a un chaine de caractère
  66. * La recherche est effectué sur le name.
  67. *
  68. * @param type $string
  69. * @return Doctrine\ORM\Query
  70. */
  71. public function findByString($string)
  72. {
  73. return $this->getEntityManager()
  74. ->createQuery("
  75. SELECT g FROM MuzichCoreBundle:Group g
  76. WHERE UPPER(g.name) LIKE :str
  77. ORDER BY g.name ASC"
  78. )
  79. ->setParameters(array(
  80. 'str' => '%'.strtoupper(trim($string)).'%'
  81. ))
  82. ;
  83. }
  84. /**
  85. * Retourne une Query sleectionnant un Group par son slug
  86. *
  87. * @param type string
  88. * @return Doctrine\ORM\Query
  89. */
  90. public function findOneBySlug($slug)
  91. {
  92. return $this->getEntityManager()
  93. ->createQuery("
  94. SELECT g FROM MuzichCoreBundle:Group g
  95. LEFT JOIN g.tags tr
  96. LEFT JOIN tr.tag t
  97. WHERE g.slug = :str
  98. ")
  99. ->setParameters(array(
  100. 'str' => $slug
  101. ))
  102. ;
  103. }
  104. /**
  105. * Retourne un tableau de groupes étant publics, ou possédé par l'user
  106. *
  107. * @param int $user_id
  108. * @return array id => name
  109. */
  110. public function getPublicAndOwnedArray($user_id)
  111. {
  112. $group_array = array();
  113. foreach ($this->getEntityManager()
  114. ->createQuery('
  115. SELECT g.id, g.name FROM MuzichCoreBundle:Group g
  116. LEFT JOIN g.owner o
  117. WHERE g.open = \'1\' OR o.id = :uid'
  118. )->setParameter('uid', $user_id)
  119. ->getArrayResult() as $group)
  120. {
  121. $group_array[$group['id']] = $group['name'];
  122. }
  123. return $group_array;
  124. }
  125. /**
  126. * Retourne tous les tags des elements postés
  127. *
  128. * @return doctrine_collection
  129. */
  130. public function getElementsTags($group_id, $current_user_id)
  131. {
  132. $parameters = array('gid' => $group_id);
  133. $current_user_sql = '';
  134. if ($current_user_id)
  135. {
  136. $parameters['uidt'] = '%"'.$current_user_id.'"%';
  137. $current_user_sql = 'OR t.privateids LIKE :uidt';
  138. }
  139. return $this->getEntityManager()
  140. ->createQuery('
  141. SELECT t FROM MuzichCoreBundle:Tag t
  142. LEFT JOIN t.elements e
  143. WHERE e.group = :gid
  144. AND (t.tomoderate = \'FALSE\' OR t.tomoderate IS NULL
  145. '.$current_user_sql.')
  146. ORDER BY t.name ASC'
  147. )
  148. ->setParameters($parameters)
  149. ->getResult()
  150. ;
  151. }
  152. public function getElementIdsOwned($group_id)
  153. {
  154. $ids = array();
  155. foreach ($this->getEntityManager()
  156. ->createQuery('SELECT e.id FROM MuzichCoreBundle:Element e
  157. WHERE e.group = :gid')
  158. ->setParameter('gid', $group_id)
  159. ->getScalarResult() as $row)
  160. {
  161. $ids[] = $row['id'];
  162. }
  163. return $ids;
  164. }
  165. public function countFollowers($group_id)
  166. {
  167. $data = $this->getEntityManager()
  168. ->createQuery('SELECT COUNT(f) FROM MuzichCoreBundle:FollowGroup f
  169. WHERE f.group = :gid')
  170. ->setParameter('gid', $group_id)
  171. ->getScalarResult()
  172. ;
  173. if (count($data))
  174. {
  175. if (count($data[0]))
  176. {
  177. return $data[0][1];
  178. }
  179. }
  180. return 0;
  181. }
  182. }