diff --git a/src/applications/dashboard/query/PhabricatorDashboardPanelQuery.php b/src/applications/dashboard/query/PhabricatorDashboardPanelQuery.php index 242e4d22bc..9641f33338 100644 --- a/src/applications/dashboard/query/PhabricatorDashboardPanelQuery.php +++ b/src/applications/dashboard/query/PhabricatorDashboardPanelQuery.php @@ -1,73 +1,86 @@ ids = $ids; return $this; } public function withPHIDs(array $phids) { $this->phids = $phids; return $this; } public function withArchived($archived) { $this->archived = $archived; return $this; } + public function withPanelTypes(array $types) { + $this->panelTypes = $types; + return $this; + } + protected function loadPage() { $table = new PhabricatorDashboardPanel(); $conn_r = $table->establishConnection('r'); $data = queryfx_all( $conn_r, 'SELECT * FROM %T %Q %Q %Q', $table->getTableName(), $this->buildWhereClause($conn_r), $this->buildOrderClause($conn_r), $this->buildLimitClause($conn_r)); return $table->loadAllFromArray($data); } protected function buildWhereClause($conn_r) { $where = array(); if ($this->ids !== null) { $where[] = qsprintf( $conn_r, 'id IN (%Ld)', $this->ids); } if ($this->phids !== null) { $where[] = qsprintf( $conn_r, 'phid IN (%Ls)', $this->phids); } if ($this->archived !== null) { $where[] = qsprintf( $conn_r, 'isArchived = %d', (int)$this->archived); } + if ($this->panelTypes !== null) { + $where[] = qsprintf( + $conn_r, + 'panelType IN (%Ls)', + $this->panelTypes); + } + $where[] = $this->buildPagingClause($conn_r); return $this->formatWhereClause($where); } public function getQueryApplicationClass() { return 'PhabricatorDashboardApplication'; } } diff --git a/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php b/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php index 229250a55c..2fee57c94e 100644 --- a/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php +++ b/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php @@ -1,120 +1,138 @@ setParameter('status', $request->getStr('status')); + $saved->setParameter('paneltype', $request->getStr('paneltype')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorDashboardPanelQuery()); $status = $saved->getParameter('status'); switch ($status) { case 'active': $query->withArchived(false); break; case 'archived': $query->withArchived(true); break; default: break; } + $paneltype = $saved->getParameter('paneltype'); + if ($paneltype) { + $query->withPanelTypes(array($paneltype)); + } + return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $status = $saved_query->getParameter('status', ''); + $paneltype = $saved_query->getParameter('paneltype', ''); + + $panel_types = PhabricatorDashboardPanelType::getAllPanelTypes(); + $panel_types = mpull($panel_types, 'getPanelTypeName', 'getPanelTypeKey'); + asort($panel_types); + $panel_types = (array('' => pht('(All Types)')) + $panel_types); $form ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Status')) ->setName('status') ->setValue($status) ->setOptions( array( '' => pht('(All Panels)'), 'active' => pht('Active Panels'), 'archived' => pht('Archived Panels'), - ))); + ))) + ->appendChild( + id(new AphrontFormSelectControl()) + ->setLabel(pht('Panel Type')) + ->setName('paneltype') + ->setValue($paneltype) + ->setOptions($panel_types)); } protected function getURI($path) { return '/dashboard/panel/'.$path; } protected function getBuiltinQueryNames() { return array( 'active' => pht('Active Panels'), 'all' => pht('All Panels'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'active': return $query->setParameter('status', 'active'); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $panels, PhabricatorSavedQuery $query, array $handles) { $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($panels as $panel) { $item = id(new PHUIObjectItemView()) ->setObjectName($panel->getMonogram()) ->setHeader($panel->getName()) ->setHref('/'.$panel->getMonogram()) ->setObject($panel); $impl = $panel->getImplementation(); if ($impl) { $type_text = $impl->getPanelTypeName(); $type_icon = 'none'; } else { $type_text = nonempty($panel->getPanelType(), pht('Unknown Type')); $type_icon = 'fa-question'; } $item->addIcon($type_icon, $type_text); if ($panel->getIsArchived()) { $item->setDisabled(true); } $list->addItem($item); } return $list; } }