Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/packages/query/PhabricatorPackagesVersionQuery.php
12242 views
1
<?php
2
3
final class PhabricatorPackagesVersionQuery
4
extends PhabricatorPackagesQuery {
5
6
private $ids;
7
private $phids;
8
private $packagePHIDs;
9
private $fullKeys;
10
private $names;
11
12
public function withIDs(array $ids) {
13
$this->ids = $ids;
14
return $this;
15
}
16
17
public function withPHIDs(array $phids) {
18
$this->phids = $phids;
19
return $this;
20
}
21
22
public function withPackagePHIDs(array $phids) {
23
$this->packagePHIDs = $phids;
24
return $this;
25
}
26
27
public function withFullKeys(array $keys) {
28
$this->fullKeys = $keys;
29
return $this;
30
}
31
32
public function withNames(array $names) {
33
$this->names = $names;
34
return $this;
35
}
36
37
public function withNameNgrams($ngrams) {
38
return $this->withNgramsConstraint(
39
new PhabricatorPackagesVersionNameNgrams(),
40
$ngrams);
41
}
42
43
public function newResultObject() {
44
return new PhabricatorPackagesVersion();
45
}
46
47
protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
48
$where = parent::buildWhereClauseParts($conn);
49
50
if ($this->ids !== null) {
51
$where[] = qsprintf(
52
$conn,
53
'v.id IN (%Ld)',
54
$this->ids);
55
}
56
57
if ($this->phids !== null) {
58
$where[] = qsprintf(
59
$conn,
60
'v.phid IN (%Ls)',
61
$this->phids);
62
}
63
64
if ($this->packagePHIDs !== null) {
65
$where[] = qsprintf(
66
$conn,
67
'v.packagePHID IN (%Ls)',
68
$this->packagePHIDs);
69
}
70
71
if ($this->names !== null) {
72
$where[] = qsprintf(
73
$conn,
74
'v.name IN (%Ls)',
75
$this->names);
76
}
77
78
if ($this->fullKeys !== null) {
79
$parts = $this->buildFullKeyClauseParts($conn, $this->fullKeys);
80
$where[] = qsprintf($conn, '%Q', $parts);
81
}
82
83
return $where;
84
}
85
86
protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
87
$joins = parent::buildJoinClauseParts($conn);
88
89
$join_publisher = ($this->fullKeys !== null);
90
$join_package = ($this->fullKeys !== null) || $join_publisher;
91
92
if ($join_package) {
93
$package_table = new PhabricatorPackagesPackage();
94
95
$joins[] = qsprintf(
96
$conn,
97
'JOIN %T p ON v.packagePHID = p.phid',
98
$package_table->getTableName());
99
}
100
101
if ($join_publisher) {
102
$publisher_table = new PhabricatorPackagesPublisher();
103
104
$joins[] = qsprintf(
105
$conn,
106
'JOIN %T u ON u.phid = p.publisherPHID',
107
$publisher_table->getTableName());
108
}
109
110
return $joins;
111
}
112
113
protected function willFilterPage(array $versions) {
114
$package_phids = mpull($versions, 'getPackagePHID');
115
116
$packages = id(new PhabricatorPackagesPackageQuery())
117
->setViewer($this->getViewer())
118
->setParentQuery($this)
119
->withPHIDs($package_phids)
120
->execute();
121
$packages = mpull($packages, null, 'getPHID');
122
123
foreach ($versions as $key => $version) {
124
$package = idx($packages, $version->getPackagePHID());
125
126
if (!$package) {
127
unset($versions[$key]);
128
$this->didRejectResult($version);
129
continue;
130
}
131
132
$version->attachPackage($package);
133
}
134
135
return $versions;
136
}
137
138
protected function getPrimaryTableAlias() {
139
return 'v';
140
}
141
142
143
}
144
145