From bdef1255e39879a895f9865c7bc79ba18183347d Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 9 Jun 2015 13:49:01 -0700 Subject: [PATCH] Make "Order By" field render correctly when showing a SavedQuery with an order alias Summary: If you have a saved query with an order alias, we currently apply the order correctly but don't show the right value in the UI. Map any saved value to the canoncial value when rendering the control. Test Plan: Added some `var_dump()` and verified order key was getting mapped forward correctly. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Differential Revision: https://secure.phabricator.com/D13227 --- .../PhabricatorApplicationSearchEngine.php | 1 + .../field/PhabricatorSearchOrderField.php | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php index 716b1e5c2a..5d0f79e170 100644 --- a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php +++ b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php @@ -269,6 +269,7 @@ abstract class PhabricatorApplicationSearchEngine extends Phobject { $fields[] = id(new PhabricatorSearchOrderField()) ->setLabel(pht('Order By')) ->setKey('order') + ->setOrderAliases($query->getBuiltinOrderAliasMap()) ->setOptions($orders); } diff --git a/src/applications/search/field/PhabricatorSearchOrderField.php b/src/applications/search/field/PhabricatorSearchOrderField.php index 98e3b2beb3..70b94d1b35 100644 --- a/src/applications/search/field/PhabricatorSearchOrderField.php +++ b/src/applications/search/field/PhabricatorSearchOrderField.php @@ -4,6 +4,16 @@ final class PhabricatorSearchOrderField extends PhabricatorSearchField { private $options; + private $orderAliases; + + public function setOrderAliases(array $order_aliases) { + $this->orderAliases = $order_aliases; + return $this; + } + + public function getOrderAliases() { + return $this->orderAliases; + } public function setOptions(array $options) { $this->options = $options; @@ -22,6 +32,16 @@ final class PhabricatorSearchOrderField return $request->getStr($key); } + protected function getValueForControl() { + // If the SavedQuery has an alias for an order, map it to the canonical + // name for the order so the correct option is selected in the dropdown. + $value = parent::getValueForControl(); + if (isset($this->orderAliases[$value])) { + $value = $this->orderAliases[$value]; + } + return $value; + } + protected function newControl() { return id(new AphrontFormSelectControl()) ->setOptions($this->getOptions());