-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathAlbumRepository.php
95 lines (78 loc) · 2.76 KB
/
AlbumRepository.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
namespace FOQ\AlbumBundle\Document;
use Doctrine\ODM\MongoDB\DocumentRepository;
use FOS\UserBundle\Model\User;
use MongoId;
class AlbumRepository extends DocumentRepository
{
public function findOneByUserAndSlug(User $user, $slug)
{
return $this->createQueryBuilder()
->field('user.$id')->equals(new MongoId($user->getId()))
->field('slug')->equals($slug)
->getQuery()
->getSingleResult();
}
public function findOneByUserAndSlugForUser(User $user, $slug, User $forUser = null)
{
return $this->createPublishedOrOwnQuery($forUser)
->field('user.$id')->equals(new MongoId($user->getId()))
->field('slug')->equals($slug)
->getQuery()
->getSingleResult();
}
public function findByUser(User $user, $limit = null)
{
$query = $this->createQueryByUser($user);
if($limit) {
$query->limit($limit);
}
return $query->getQuery()->execute();
}
public function findPublishedByUser(User $user, $limit = null)
{
$query = $this->createPublishedQueryByUser($user);
if($limit) {
$query->limit($limit);
}
return $query->getQuery()->execute();
}
public function createPublicSortedQuery(User $forUser = null, array $sortOrder = array('field' => 'date', 'order' => 'desc'))
{
return $this->createPublishedOrOwnQuery($forUser)
->sort($sortOrder['field'], $sortOrder['order']);
}
public function createPublicUserSortedQuery(User $user, User $forUser = null, array $sortOrder = array('field' => 'date', 'order' => 'desc'))
{
return $this->createPublishedOrOwnQuery($forUser)
->field('user.$id')->equals(new MongoId($user->getId()))
->sort($sortOrder['field'], $sortOrder['order']);
}
public function createPublishedOrOwnQuery(User $user = null)
{
$query = $this->createQueryBuilder();
if ($user) {
$query
->addOr($query->expr()->field('published')->equals(true))
->addOr($query->expr()->field('user.$id')->equals(new MongoId($user->getId())));
} else {
$query->field('published')->equals(true);
}
return $query;
}
public function createPublishedQueryByUser(User $user)
{
return $this->createQueryByUser($user)->field('published')->equals(true);
}
public function createQueryByUser(User $user)
{
$query = $this->createQueryBuilder();
$query->field('user.$id')->equals(new MongoId($user->getId()));
return $query;
}
public function createNewAlbum()
{
$albumClass = $this->getDocumentName();
return new $albumClass();
}
}