Page MenuHomePhabricator

D12433.diff
No OneTemporary

D12433.diff

diff --git a/src/applications/almanac/query/AlmanacServiceQuery.php b/src/applications/almanac/query/AlmanacServiceQuery.php
--- a/src/applications/almanac/query/AlmanacServiceQuery.php
+++ b/src/applications/almanac/query/AlmanacServiceQuery.php
@@ -192,4 +192,33 @@
return parent::didFilterPage($services);
}
+ public function getOrderableColumns() {
+ return parent::getOrderableColumns() + array(
+ 'name' => array(
+ 'table' => 'service',
+ 'column' => 'name',
+ 'type' => 'string',
+ 'unique' => true,
+ 'reverse' => true,
+ ),
+ );
+ }
+
+ protected function getValueMap($cursor, array $keys) {
+ $service = $this->loadCursorObject($cursor);
+ return array(
+ 'id' => $service->getID(),
+ 'name' => $service->getServiceName(),
+ );
+ }
+
+ public function getBuiltinOrders() {
+ return array(
+ 'name' => array(
+ 'vector' => array('name'),
+ 'name' => pht('Service Name'),
+ ),
+ ) + parent::getBuiltinOrders();
+ }
+
}
diff --git a/src/applications/almanac/query/AlmanacServiceSearchEngine.php b/src/applications/almanac/query/AlmanacServiceSearchEngine.php
--- a/src/applications/almanac/query/AlmanacServiceSearchEngine.php
+++ b/src/applications/almanac/query/AlmanacServiceSearchEngine.php
@@ -14,18 +14,28 @@
public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery();
+ $this->saveQueryOrder($saved, $request);
+
return $saved;
}
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
$query = id(new AlmanacServiceQuery());
+ $this->setQueryOrder($query, $saved);
+
return $query;
}
public function buildSearchForm(
AphrontFormView $form,
- PhabricatorSavedQuery $saved_query) {}
+ PhabricatorSavedQuery $saved) {
+
+ $this->appendOrderFieldsToForm(
+ $form,
+ $saved,
+ new AlmanacServiceQuery());
+ }
protected function getURI($path) {
return '/almanac/service/'.$path;
diff --git a/src/applications/almanac/typeahead/AlmanacServiceDatasource.php b/src/applications/almanac/typeahead/AlmanacServiceDatasource.php
--- a/src/applications/almanac/typeahead/AlmanacServiceDatasource.php
+++ b/src/applications/almanac/typeahead/AlmanacServiceDatasource.php
@@ -16,10 +16,10 @@
$raw_query = $this->getRawQuery();
$services = id(new AlmanacServiceQuery())
- ->setViewer($viewer)
->withNamePrefix($raw_query)
- ->setLimit($this->getLimit())
- ->execute();
+ ->setOrder('name');
+
+ $services = $this->executeQuery($services);
if ($services) {
$handles = id(new PhabricatorHandleQuery())
diff --git a/src/applications/repository/query/PhabricatorRepositorySearchEngine.php b/src/applications/repository/query/PhabricatorRepositorySearchEngine.php
--- a/src/applications/repository/query/PhabricatorRepositorySearchEngine.php
+++ b/src/applications/repository/query/PhabricatorRepositorySearchEngine.php
@@ -27,7 +27,6 @@
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
$query = id(new PhabricatorRepositoryQuery())
- ->setDefaultBuiltinOrder()
->needProjectPHIDs(true)
->needCommitCounts(true)
->needMostRecentCommits(true);
@@ -43,10 +42,7 @@
$query->withStatus($status);
}
- $order = $saved->getParameter('order');
- if ($order) {
- $query->setOrder($order);
- }
+ $this->setQueryOrder($query, $saved);
$hosted = $saved->getParameter('hosted');
$hosted = idx($this->getHostedValues(), $hosted);
diff --git a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php
--- a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php
+++ b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php
@@ -580,6 +580,47 @@
/* -( Result Ordering )---------------------------------------------------- */
+
+ /**
+ * Save order selection to a @{class:PhabricatorSavedQuery}.
+ */
+ protected function saveQueryOrder(
+ PhabricatorSavedQuery $saved,
+ AphrontRequest $request) {
+
+ $saved->setParameter('order', $request->getStr('order'));
+
+ return $this;
+ }
+
+
+ /**
+ * Set query ordering from a saved value.
+ */
+ protected function setQueryOrder(
+ PhabricatorCursorPagedPolicyAwareQuery $query,
+ PhabricatorSavedQuery $saved) {
+
+ $order = $saved->getParameter('order');
+ if (strlen($order)) {
+ $builtin = $query->getBuiltinOrders();
+ if (isset($builtin[$order])) {
+ $query->setOrder($order);
+ } else {
+ // If the order is invalid or not available, we choose the first
+ // builtin order. This isn't always the default order for the query,
+ // but is the first value in the "Order" dropdown, and makes the query
+ // behavior more consistent with the UI. In queries where the two
+ // orders differ, this order is the preferred order for humans.
+ $query->setOrder(head_key($builtin));
+ }
+ }
+
+ return $this;
+ }
+
+
+
protected function appendOrderFieldsToForm(
AphrontFormView $form,
PhabricatorSavedQuery $saved,
diff --git a/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php b/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php
--- a/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php
+++ b/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php
@@ -480,26 +480,6 @@
/**
- * Select the default builtin result ordering.
- *
- * This sets the result order to the default order among the builtin result
- * orders (see @{method:getBuiltinOrders}). This is often the same as the
- * query's builtin default order vector, but some objects have different
- * default vectors (which are internally-facing) and builtin orders (which
- * are user-facing).
- *
- * For example, repositories sort by ID internally (which is efficient and
- * consistent), but sort by most recent commit as a default builtin (which
- * better aligns with user expectations).
- *
- * @return this
- */
- public function setDefaultBuiltinOrder() {
- return $this->setOrder(head_key($this->getBuiltinOrders()));
- }
-
-
- /**
* Get builtin orders for this class.
*
* In application UIs, we want to be able to present users with a small

File Metadata

Mime Type
text/plain
Expires
Sat, May 18, 7:17 PM (4 w, 13 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6301117
Default Alt Text
D12433.diff (6 KB)

Event Timeline