diff --git a/src/applications/dashboard/query/PhabricatorDashboardQuery.php b/src/applications/dashboard/query/PhabricatorDashboardQuery.php --- a/src/applications/dashboard/query/PhabricatorDashboardQuery.php +++ b/src/applications/dashboard/query/PhabricatorDashboardQuery.php @@ -7,6 +7,7 @@ private $phids; private $statuses; private $authorPHIDs; + private $canEdit; private $needPanels; private $needProjects; @@ -41,6 +42,11 @@ return $this; } + public function withCanEdit($can_edit) { + $this->canEdit = $can_edit; + return $this; + } + public function withNameNgrams($ngrams) { return $this->withNgramsConstraint( id(new PhabricatorDashboardNgrams()), @@ -59,6 +65,15 @@ $phids = mpull($dashboards, 'getPHID'); + if ($this->canEdit) { + $dashboards = id(new PhabricatorPolicyFilter()) + ->setViewer($this->getViewer()) + ->requireCapabilities(array( + PhabricatorPolicyCapability::CAN_EDIT, + )) + ->apply($dashboards); + } + if ($this->needPanels) { $edge_query = id(new PhabricatorEdgeQuery()) ->withSourcePHIDs($phids) diff --git a/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php b/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php --- a/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php +++ b/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php @@ -34,6 +34,10 @@ ->setKey('statuses') ->setLabel(pht('Status')) ->setOptions(PhabricatorDashboard::getStatusNameMap()), + id(new PhabricatorSearchCheckboxesField()) + ->setKey('editable') + ->setLabel(pht('Editable')) + ->setOptions(array('editable' => null)), ); } @@ -94,6 +98,10 @@ $query->withNameNgrams($map['name']); } + if ($map['editable'] !== null) { + $query->withCanEdit($map['editable']); + } + return $query; } @@ -126,8 +134,10 @@ ->setHref($this->getApplicationURI("view/{$id}/")) ->setObject($dashboard); + $bg_color = 'bg-dark'; if ($dashboard->isArchived()) { $item->setDisabled(true); + $bg_color = 'bg-grey'; } $panels = $dashboard->getPanels(); @@ -142,7 +152,7 @@ $icon = id(new PHUIIconView()) ->setIcon($dashboard->getIcon()) - ->setBackground('bg-dark'); + ->setBackground($bg_color); $item->setImageIcon($icon); $item->setEpoch($dashboard->getDateModified());