Page MenuHomePhabricator

D9282.id.diff
No OneTemporary

D9282.id.diff

diff --git a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php
--- a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php
+++ b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php
@@ -214,6 +214,18 @@
$header = id(new PhabricatorActionHeaderView())
->setHeaderTitle($panel->getName())
->setHeaderColor(PhabricatorActionHeaderView::HEADER_LIGHTBLUE);
+
+ $panel_type = $panel->getImplementation();
+ try {
+ $header = $panel_type->adjustPanelHeader(
+ $this->getViewer(),
+ $panel,
+ $this,
+ $header);
+ } catch (Exception $ex) {
+ phlog($ex);
+ $header->setHeaderColor(PhabricatorActionHeaderView::HEADER_RED);
+ }
break;
}
return $header;
@@ -247,6 +259,7 @@
return $header;
}
+
/**
* Detect graph cycles in panels, and deeply nested panels.
*
diff --git a/src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php b/src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php
--- a/src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php
+++ b/src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php
@@ -30,6 +30,14 @@
return true;
}
+ public function adjustPanelHeader(
+ PhabricatorUser $viewer,
+ PhabricatorDashboardPanel $panel,
+ PhabricatorDashboardPanelRenderingEngine $engine,
+ PhabricatorActionHeaderView $header) {
+ return $header;
+ }
+
public static function getAllPanelTypes() {
static $types;
diff --git a/src/applications/dashboard/paneltype/PhabricatorDashboardPanelTypeQuery.php b/src/applications/dashboard/paneltype/PhabricatorDashboardPanelTypeQuery.php
--- a/src/applications/dashboard/paneltype/PhabricatorDashboardPanelTypeQuery.php
+++ b/src/applications/dashboard/paneltype/PhabricatorDashboardPanelTypeQuery.php
@@ -40,16 +40,7 @@
PhabricatorDashboardPanel $panel,
PhabricatorDashboardPanelRenderingEngine $engine) {
- $class = $panel->getProperty('class');
-
- $engine = PhabricatorApplicationSearchEngine::getEngineByClassName($class);
- if (!$engine) {
- throw new Exception(
- pht(
- 'The application search engine "%s" is not known to Phabricator!',
- $class));
- }
-
+ $engine = $this->getSearchEngine($panel);
$engine->setViewer($viewer);
$key = $panel->getProperty('key');
@@ -58,7 +49,7 @@
} else {
$saved = id(new PhabricatorSavedQueryQuery())
->setViewer($viewer)
- ->withEngineClassNames(array($class))
+ ->withEngineClassNames(array(get_class($engine)))
->withQueryKeys(array($key))
->executeOne();
}
@@ -68,7 +59,7 @@
pht(
'Query "%s" is unknown to application search engine "%s"!',
$key,
- $class));
+ get_class($engine)));
}
$query = $engine->buildQueryFromSavedQuery($saved);
@@ -86,4 +77,35 @@
return $engine->renderResults($results, $saved);
}
+
+ public function adjustPanelHeader(
+ PhabricatorUser $viewer,
+ PhabricatorDashboardPanel $panel,
+ PhabricatorDashboardPanelRenderingEngine $engine,
+ PhabricatorActionHeaderView $header) {
+
+ $search_engine = $this->getSearchEngine($panel);
+ $key = $panel->getProperty('key');
+
+ $action_edit = id(new PHUIIconView())
+ ->setIconFont('fa-list')
+ ->setHref($search_engine->getQueryResultsPageURI($key));
+ $header->addAction($action_edit);
+
+ return $header;
+ }
+
+ private function getSearchEngine(PhabricatorDashboardPanel $panel) {
+ $class = $panel->getProperty('class');
+ $engine = PhabricatorApplicationSearchEngine::getEngineByClassName($class);
+ if (!$engine) {
+ throw new Exception(
+ pht(
+ 'The application search engine "%s" is not known to Phabricator!',
+ $class));
+ }
+
+ return $engine;
+ }
+
}

File Metadata

Mime Type
text/plain
Expires
Sep 9 2025, 8:06 PM (5 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8882265
Default Alt Text
D9282.id.diff (4 KB)

Event Timeline