From 8c01cc97f42b8c819cfd01b3ad96ef305c4bc0d8 Mon Sep 17 00:00:00 2001 From: Tarmo Lehtpuu Date: Thu, 8 Aug 2013 18:54:35 -0700 Subject: [PATCH] Implement macros search by flags. Summary: Reuse the existing flags functionality for searching macros. Currently implemented as a simple select element (for color). Test Plan: Flagged some macros and tried searching by them. Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D6709 --- .../flag/query/PhabricatorFlagQuery.php | 13 +++++++ .../macro/query/PhabricatorMacroQuery.php | 34 +++++++++++++++++++ .../query/PhabricatorMacroSearchEngine.php | 15 +++++++- 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/applications/flag/query/PhabricatorFlagQuery.php b/src/applications/flag/query/PhabricatorFlagQuery.php index 1edeedc0c6..238562b666 100644 --- a/src/applications/flag/query/PhabricatorFlagQuery.php +++ b/src/applications/flag/query/PhabricatorFlagQuery.php @@ -5,6 +5,7 @@ final class PhabricatorFlagQuery { private $ownerPHIDs; private $types; private $objectPHIDs; + private $color; private $limit; private $offset; @@ -39,6 +40,11 @@ final class PhabricatorFlagQuery { return $this; } + public function withColor($color) { + $this->color = $color; + return $this; + } + public function withOrder($order) { $this->order = $order; return $this; @@ -146,6 +152,13 @@ final class PhabricatorFlagQuery { $this->objectPHIDs); } + if (strlen($this->color)) { + $where[] = qsprintf( + $conn_r, + 'flag.color = %d', + $this->color); + } + if ($where) { return 'WHERE ('.implode(') AND (', $where).')'; } else { diff --git a/src/applications/macro/query/PhabricatorMacroQuery.php b/src/applications/macro/query/PhabricatorMacroQuery.php index f5647e6efc..da8f7d9a13 100644 --- a/src/applications/macro/query/PhabricatorMacroQuery.php +++ b/src/applications/macro/query/PhabricatorMacroQuery.php @@ -13,6 +13,7 @@ final class PhabricatorMacroQuery private $nameLike; private $dateCreatedAfter; private $dateCreatedBefore; + private $flagColor; private $status = 'status-any'; const STATUS_ANY = 'status-any'; @@ -27,6 +28,17 @@ final class PhabricatorMacroQuery ); } + public static function getFlagColorsOptions() { + + $options = array('-1' => pht('(No Filtering)')); + + foreach (PhabricatorFlagColor::getColorNameMap() as $color => $name) { + $options[$color] = $name; + } + + return $options; + } + public function withIDs(array $ids) { $this->ids = $ids; return $this; @@ -67,6 +79,11 @@ final class PhabricatorMacroQuery return $this; } + public function withFlagColor($flag_color) { + $this->flagColor = $flag_color; + return $this; + } + protected function loadPage() { $macro_table = new PhabricatorFileImageMacro(); $conn = $macro_table->establishConnection('r'); @@ -151,6 +168,23 @@ final class PhabricatorMacroQuery $this->dateCreatedBefore); } + if ($this->flagColor != '-1' && $this->flagColor !== null) { + $flags = id(new PhabricatorFlagQuery()) + ->withTypes(array(PhabricatorMacroPHIDTypeMacro::TYPECONST)) + ->withColor($this->flagColor) + ->setViewer($this->getViewer()) + ->execute(); + + if (empty($flags)) { + throw new PhabricatorEmptyQueryException('No matching flags.'); + } else { + $where[] = qsprintf( + $conn, + 'm.phid IN (%Ls)', + mpull($flags, 'getObjectPHID')); + } + } + $where[] = $this->buildPagingClause($conn); return $this->formatWhereClause($where); diff --git a/src/applications/macro/query/PhabricatorMacroSearchEngine.php b/src/applications/macro/query/PhabricatorMacroSearchEngine.php index a60fdbed9a..989dbe5fb6 100644 --- a/src/applications/macro/query/PhabricatorMacroSearchEngine.php +++ b/src/applications/macro/query/PhabricatorMacroSearchEngine.php @@ -14,6 +14,7 @@ final class PhabricatorMacroSearchEngine $saved->setParameter('nameLike', $request->getStr('nameLike')); $saved->setParameter('createdStart', $request->getStr('createdStart')); $saved->setParameter('createdEnd', $request->getStr('createdEnd')); + $saved->setParameter('flagColor', $request->getStr('flagColor')); return $saved; } @@ -52,6 +53,11 @@ final class PhabricatorMacroSearchEngine $query->withDateCreatedBefore($end); } + $color = $saved->getParameter('flagColor'); + if (strlen($color)) { + $query->withFlagColor($color); + } + return $query; } @@ -68,6 +74,7 @@ final class PhabricatorMacroSearchEngine $status = $saved_query->getParameter('status'); $names = implode(', ', $saved_query->getParameter('names', array())); $like = $saved_query->getParameter('nameLike'); + $color = $saved_query->getParameter('flagColor', "-1"); $form ->appendChild( @@ -91,7 +98,13 @@ final class PhabricatorMacroSearchEngine id(new AphrontFormTextControl()) ->setName('names') ->setLabel(pht('Exact Names')) - ->setValue($names)); + ->setValue($names)) + ->appendChild( + id(new AphrontFormSelectControl()) + ->setName('flagColor') + ->setLabel(pht('Marked with Flag')) + ->setOptions(PhabricatorMacroQuery::getFlagColorsOptions()) + ->setValue($color)); $this->buildDateRange( $form,