2014-10-17 14:01:57 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class AlmanacServiceQuery
|
2014-11-06 00:28:36 +01:00
|
|
|
extends AlmanacQuery {
|
2014-10-17 14:01:57 +02:00
|
|
|
|
|
|
|
private $ids;
|
|
|
|
private $phids;
|
|
|
|
private $names;
|
2014-12-17 20:10:27 +01:00
|
|
|
private $serviceClasses;
|
2014-12-18 23:31:36 +01:00
|
|
|
private $devicePHIDs;
|
|
|
|
private $locked;
|
2014-12-19 21:36:14 +01:00
|
|
|
private $namePrefix;
|
|
|
|
private $nameSuffix;
|
2014-12-18 23:31:36 +01:00
|
|
|
|
2014-12-12 21:07:11 +01:00
|
|
|
private $needBindings;
|
2014-10-17 14:01:57 +02:00
|
|
|
|
|
|
|
public function withIDs(array $ids) {
|
|
|
|
$this->ids = $ids;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function withPHIDs(array $phids) {
|
|
|
|
$this->phids = $phids;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function withNames(array $names) {
|
|
|
|
$this->names = $names;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2014-12-17 20:10:27 +01:00
|
|
|
public function withServiceClasses(array $classes) {
|
|
|
|
$this->serviceClasses = $classes;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2014-12-18 23:31:36 +01:00
|
|
|
public function withDevicePHIDs(array $phids) {
|
|
|
|
$this->devicePHIDs = $phids;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function withLocked($locked) {
|
|
|
|
$this->locked = $locked;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2014-12-19 21:36:14 +01:00
|
|
|
public function withNamePrefix($prefix) {
|
|
|
|
$this->namePrefix = $prefix;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function withNameSuffix($suffix) {
|
|
|
|
$this->nameSuffix = $suffix;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2014-12-12 21:07:11 +01:00
|
|
|
public function needBindings($need_bindings) {
|
|
|
|
$this->needBindings = $need_bindings;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2014-10-17 14:01:57 +02:00
|
|
|
protected function loadPage() {
|
2015-06-08 21:21:48 +02:00
|
|
|
return $this->loadStandardPage(new AlmanacService());
|
2014-10-17 14:01:57 +02:00
|
|
|
}
|
|
|
|
|
2015-06-08 21:21:48 +02:00
|
|
|
protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
|
|
|
|
$joins = parent::buildJoinClauseParts($conn);
|
2014-12-18 23:31:36 +01:00
|
|
|
|
|
|
|
if ($this->devicePHIDs !== null) {
|
|
|
|
$joins[] = qsprintf(
|
2015-06-08 21:21:48 +02:00
|
|
|
$conn,
|
2014-12-18 23:31:36 +01:00
|
|
|
'JOIN %T binding ON service.phid = binding.servicePHID',
|
|
|
|
id(new AlmanacBinding())->getTableName());
|
|
|
|
}
|
|
|
|
|
2015-06-08 21:21:48 +02:00
|
|
|
return $joins;
|
2014-12-18 23:31:36 +01:00
|
|
|
}
|
|
|
|
|
2015-06-08 21:21:48 +02:00
|
|
|
protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
|
|
|
|
$where = parent::buildWhereClauseParts($conn);
|
2014-10-17 14:01:57 +02:00
|
|
|
|
|
|
|
if ($this->ids !== null) {
|
|
|
|
$where[] = qsprintf(
|
2015-06-08 21:21:48 +02:00
|
|
|
$conn,
|
2014-12-18 23:31:36 +01:00
|
|
|
'service.id IN (%Ld)',
|
2014-10-17 14:01:57 +02:00
|
|
|
$this->ids);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->phids !== null) {
|
|
|
|
$where[] = qsprintf(
|
2015-06-08 21:21:48 +02:00
|
|
|
$conn,
|
2014-12-18 23:31:36 +01:00
|
|
|
'service.phid IN (%Ls)',
|
2014-10-17 14:01:57 +02:00
|
|
|
$this->phids);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->names !== null) {
|
|
|
|
$hashes = array();
|
|
|
|
foreach ($this->names as $name) {
|
|
|
|
$hashes[] = PhabricatorHash::digestForIndex($name);
|
|
|
|
}
|
|
|
|
|
|
|
|
$where[] = qsprintf(
|
2015-06-08 21:21:48 +02:00
|
|
|
$conn,
|
2014-12-18 23:31:36 +01:00
|
|
|
'service.nameIndex IN (%Ls)',
|
2014-10-17 14:01:57 +02:00
|
|
|
$hashes);
|
|
|
|
}
|
|
|
|
|
2014-12-17 20:10:27 +01:00
|
|
|
if ($this->serviceClasses !== null) {
|
|
|
|
$where[] = qsprintf(
|
2015-06-08 21:21:48 +02:00
|
|
|
$conn,
|
2014-12-18 23:31:36 +01:00
|
|
|
'service.serviceClass IN (%Ls)',
|
2014-12-17 20:10:27 +01:00
|
|
|
$this->serviceClasses);
|
|
|
|
}
|
|
|
|
|
2014-12-18 23:31:36 +01:00
|
|
|
if ($this->devicePHIDs !== null) {
|
|
|
|
$where[] = qsprintf(
|
2015-06-08 21:21:48 +02:00
|
|
|
$conn,
|
2014-12-18 23:31:36 +01:00
|
|
|
'binding.devicePHID IN (%Ls)',
|
|
|
|
$this->devicePHIDs);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->locked !== null) {
|
|
|
|
$where[] = qsprintf(
|
2015-06-08 21:21:48 +02:00
|
|
|
$conn,
|
2014-12-18 23:31:36 +01:00
|
|
|
'service.isLocked = %d',
|
|
|
|
(int)$this->locked);
|
|
|
|
}
|
|
|
|
|
2014-12-19 21:36:14 +01:00
|
|
|
if ($this->namePrefix !== null) {
|
|
|
|
$where[] = qsprintf(
|
2015-06-08 21:21:48 +02:00
|
|
|
$conn,
|
2014-12-19 21:36:14 +01:00
|
|
|
'service.name LIKE %>',
|
|
|
|
$this->namePrefix);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->nameSuffix !== null) {
|
|
|
|
$where[] = qsprintf(
|
2015-06-08 21:21:48 +02:00
|
|
|
$conn,
|
2014-12-19 21:36:14 +01:00
|
|
|
'service.name LIKE %<',
|
|
|
|
$this->nameSuffix);
|
|
|
|
}
|
|
|
|
|
2015-06-08 21:21:48 +02:00
|
|
|
return $where;
|
2014-10-17 14:01:57 +02:00
|
|
|
}
|
|
|
|
|
2014-12-17 20:10:27 +01:00
|
|
|
protected function willFilterPage(array $services) {
|
|
|
|
$service_types = AlmanacServiceType::getAllServiceTypes();
|
|
|
|
|
|
|
|
foreach ($services as $key => $service) {
|
|
|
|
$service_class = $service->getServiceClass();
|
|
|
|
$service_type = idx($service_types, $service_class);
|
|
|
|
if (!$service_type) {
|
|
|
|
$this->didRejectResult($service);
|
|
|
|
unset($services[$key]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$service->attachServiceType($service_type);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $services;
|
|
|
|
}
|
|
|
|
|
2014-12-12 21:07:11 +01:00
|
|
|
protected function didFilterPage(array $services) {
|
|
|
|
if ($this->needBindings) {
|
|
|
|
$service_phids = mpull($services, 'getPHID');
|
|
|
|
$bindings = id(new AlmanacBindingQuery())
|
|
|
|
->setViewer($this->getViewer())
|
|
|
|
->withServicePHIDs($service_phids)
|
|
|
|
->execute();
|
|
|
|
$bindings = mgroup($bindings, 'getServicePHID');
|
|
|
|
|
|
|
|
foreach ($services as $service) {
|
|
|
|
$service_bindings = idx($bindings, $service->getPHID(), array());
|
|
|
|
$service->attachBindings($service_bindings);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return parent::didFilterPage($services);
|
|
|
|
}
|
|
|
|
|
2015-06-08 23:09:58 +02:00
|
|
|
protected function getPrimaryTableAlias() {
|
2015-06-08 21:21:48 +02:00
|
|
|
return 'service';
|
|
|
|
}
|
|
|
|
|
2015-04-16 16:43:13 +02:00
|
|
|
public function getOrderableColumns() {
|
|
|
|
return parent::getOrderableColumns() + array(
|
|
|
|
'name' => array(
|
2015-06-08 21:21:48 +02:00
|
|
|
'table' => $this->getPrimaryTableAlias(),
|
2015-04-16 16:43:13 +02:00
|
|
|
'column' => 'name',
|
|
|
|
'type' => 'string',
|
|
|
|
'unique' => true,
|
|
|
|
'reverse' => true,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2015-06-27 00:45:43 +02:00
|
|
|
protected function getPagingValueMap($cursor, array $keys) {
|
2015-04-16 16:43:13 +02:00
|
|
|
$service = $this->loadCursorObject($cursor);
|
|
|
|
return array(
|
|
|
|
'id' => $service->getID(),
|
2015-06-27 00:45:43 +02:00
|
|
|
'name' => $service->getName(),
|
2015-04-16 16:43:13 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getBuiltinOrders() {
|
|
|
|
return array(
|
|
|
|
'name' => array(
|
|
|
|
'vector' => array('name'),
|
|
|
|
'name' => pht('Service Name'),
|
|
|
|
),
|
|
|
|
) + parent::getBuiltinOrders();
|
|
|
|
}
|
|
|
|
|
2014-10-17 14:01:57 +02:00
|
|
|
}
|