Correct Aphlict websocket URI construction after PHP8 compatibility changes
[phabricator.git] / src / applications / packages / query / PhabricatorPackagesVersionQuery.php
blob447907c4a09a9dfb9c876870caaaec5738d50cd1
1 <?php
3 final class PhabricatorPackagesVersionQuery
4 extends PhabricatorPackagesQuery {
6 private $ids;
7 private $phids;
8 private $packagePHIDs;
9 private $fullKeys;
10 private $names;
12 public function withIDs(array $ids) {
13 $this->ids = $ids;
14 return $this;
17 public function withPHIDs(array $phids) {
18 $this->phids = $phids;
19 return $this;
22 public function withPackagePHIDs(array $phids) {
23 $this->packagePHIDs = $phids;
24 return $this;
27 public function withFullKeys(array $keys) {
28 $this->fullKeys = $keys;
29 return $this;
32 public function withNames(array $names) {
33 $this->names = $names;
34 return $this;
37 public function withNameNgrams($ngrams) {
38 return $this->withNgramsConstraint(
39 new PhabricatorPackagesVersionNameNgrams(),
40 $ngrams);
43 public function newResultObject() {
44 return new PhabricatorPackagesVersion();
47 protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
48 $where = parent::buildWhereClauseParts($conn);
50 if ($this->ids !== null) {
51 $where[] = qsprintf(
52 $conn,
53 'v.id IN (%Ld)',
54 $this->ids);
57 if ($this->phids !== null) {
58 $where[] = qsprintf(
59 $conn,
60 'v.phid IN (%Ls)',
61 $this->phids);
64 if ($this->packagePHIDs !== null) {
65 $where[] = qsprintf(
66 $conn,
67 'v.packagePHID IN (%Ls)',
68 $this->packagePHIDs);
71 if ($this->names !== null) {
72 $where[] = qsprintf(
73 $conn,
74 'v.name IN (%Ls)',
75 $this->names);
78 if ($this->fullKeys !== null) {
79 $parts = $this->buildFullKeyClauseParts($conn, $this->fullKeys);
80 $where[] = qsprintf($conn, '%Q', $parts);
83 return $where;
86 protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
87 $joins = parent::buildJoinClauseParts($conn);
89 $join_publisher = ($this->fullKeys !== null);
90 $join_package = ($this->fullKeys !== null) || $join_publisher;
92 if ($join_package) {
93 $package_table = new PhabricatorPackagesPackage();
95 $joins[] = qsprintf(
96 $conn,
97 'JOIN %T p ON v.packagePHID = p.phid',
98 $package_table->getTableName());
101 if ($join_publisher) {
102 $publisher_table = new PhabricatorPackagesPublisher();
104 $joins[] = qsprintf(
105 $conn,
106 'JOIN %T u ON u.phid = p.publisherPHID',
107 $publisher_table->getTableName());
110 return $joins;
113 protected function willFilterPage(array $versions) {
114 $package_phids = mpull($versions, 'getPackagePHID');
116 $packages = id(new PhabricatorPackagesPackageQuery())
117 ->setViewer($this->getViewer())
118 ->setParentQuery($this)
119 ->withPHIDs($package_phids)
120 ->execute();
121 $packages = mpull($packages, null, 'getPHID');
123 foreach ($versions as $key => $version) {
124 $package = idx($packages, $version->getPackagePHID());
126 if (!$package) {
127 unset($versions[$key]);
128 $this->didRejectResult($version);
129 continue;
132 $version->attachPackage($package);
135 return $versions;
138 protected function getPrimaryTableAlias() {
139 return 'v';