Page MenuHomePhabricator

D17003.id40907.diff
No OneTemporary

D17003.id40907.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -2439,6 +2439,8 @@
'PhabricatorDashboardPanelEditController' => 'applications/dashboard/controller/PhabricatorDashboardPanelEditController.php',
'PhabricatorDashboardPanelEditEngine' => 'applications/dashboard/editor/PhabricatorDashboardPanelEditEngine.php',
'PhabricatorDashboardPanelEditproController' => 'applications/dashboard/controller/PhabricatorDashboardPanelEditproController.php',
+ 'PhabricatorDashboardPanelEngine' => 'applications/dashboard/engine/PhabricatorDashboardPanelEngine.php',
+ 'PhabricatorDashboardPanelEngineController' => 'applications/dashboard/controller/PhabricatorDashboardPanelEngineController.php',
'PhabricatorDashboardPanelHasDashboardEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardPanelHasDashboardEdgeType.php',
'PhabricatorDashboardPanelListController' => 'applications/dashboard/controller/PhabricatorDashboardPanelListController.php',
'PhabricatorDashboardPanelPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardPanelPHIDType.php',
@@ -7385,6 +7387,8 @@
'PhabricatorDashboardPanelEditController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelEditEngine' => 'PhabricatorEditEngine',
'PhabricatorDashboardPanelEditproController' => 'PhabricatorDashboardController',
+ 'PhabricatorDashboardPanelEngine' => 'PhabricatorProfilePanelEngine',
+ 'PhabricatorDashboardPanelEngineController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelHasDashboardEdgeType' => 'PhabricatorEdgeType',
'PhabricatorDashboardPanelListController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelPHIDType' => 'PhabricatorPHIDType',
diff --git a/src/applications/dashboard/application/PhabricatorDashboardApplication.php b/src/applications/dashboard/application/PhabricatorDashboardApplication.php
--- a/src/applications/dashboard/application/PhabricatorDashboardApplication.php
+++ b/src/applications/dashboard/application/PhabricatorDashboardApplication.php
@@ -32,6 +32,9 @@
'edit/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardEditController',
'install/(?P<id>\d+)/' => 'PhabricatorDashboardInstallController',
'uninstall/(?P<id>\d+)/' => 'PhabricatorDashboardUninstallController',
+ '(?P<dashboardID>[1-9]\d*)/panel/'
+ => $this->getPanelRouting(
+ 'PhabricatorDashboardPanelEngineController'),
'addpanel/(?P<id>\d+)/' => 'PhabricatorDashboardAddPanelController',
'movepanel/(?P<id>\d+)/' => 'PhabricatorDashboardMovePanelController',
'removepanel/(?P<id>\d+)/'
diff --git a/src/applications/dashboard/controller/PhabricatorDashboardController.php b/src/applications/dashboard/controller/PhabricatorDashboardController.php
--- a/src/applications/dashboard/controller/PhabricatorDashboardController.php
+++ b/src/applications/dashboard/controller/PhabricatorDashboardController.php
@@ -1,3 +1,83 @@
<?php
-abstract class PhabricatorDashboardController extends PhabricatorController {}
+abstract class PhabricatorDashboardController extends PhabricatorController {
+
+ private $dashboard;
+ private $profileMenu;
+ private $profilePanelEngine;
+
+ protected function setDashboard(PhabricatorDashboard $dashboard) {
+ $this->dashboard = $dashboard;
+ return $this;
+ }
+
+ protected function getDashboard() {
+ return $this->dashboard;
+ }
+
+ protected function loadDashboard() {
+ $viewer = $this->getViewer();
+ $request = $this->getRequest();
+
+ $id = $request->getURIData('dashboardID');
+
+ $dashboard = id(new PhabricatorDashboardQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->executeOne();
+
+ if (!$dashboard) {
+ return new Aphront404Response();
+ }
+
+ $this->setDashboard($dashboard);
+
+ return null;
+ }
+
+ public function buildApplicationMenu() {
+ $menu = $this->newApplicationMenu();
+
+ $profile_menu = $this->getProfileMenu();
+ if ($profile_menu) {
+ $menu->setProfileMenu($profile_menu);
+ }
+
+ $menu->setSearchEngine(new PhabricatorDashboardSearchEngine());
+
+ return $menu;
+ }
+
+ protected function getProfileMenu() {
+ if (!$this->profileMenu) {
+ $engine = $this->getProfilePanelEngine();
+ if ($engine) {
+ $this->profileMenu = $engine->buildNavigation();
+ }
+ }
+
+ return $this->profileMenu;
+ }
+
+ protected function getProfilePanelEngine() {
+ if (!$this->profilePanelEngine) {
+ $viewer = $this->getViewer();
+ $dashboard = $this->getDashboard();
+ if ($dashboard) {
+ $engine = id(new PhabricatorDashboardPanelEngine())
+ ->setViewer($viewer)
+ ->setController($this)
+ ->setProfileObject($dashboard);
+ $this->profilePanelEngine = $engine;
+ }
+ }
+ return $this->profilePanelEngine;
+ }
+
+ protected function setProfilePanelEngine(
+ PhabricatorDashboardPanelEngine $engine) {
+ $this->profilePanelEngine = $engine;
+ return $this;
+ }
+
+}
diff --git a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php
--- a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php
+++ b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php
@@ -156,6 +156,14 @@
->setHref($this->getApplicationURI("copy/{$id}/"))
->setWorkflow(true));
+ $curtain->addAction(
+ id(new PhabricatorActionView())
+ ->setName(pht('Edit Menu'))
+ ->setIcon('fa-th-list')
+ ->setHref($this->getApplicationURI("{$id}/panel/configure/"))
+ ->setDisabled(!$can_edit)
+ ->setWorkflow(!$can_edit));
+
$installed_dashboard = id(new PhabricatorDashboardInstall())
->loadOneWhere(
'objectPHID = %s AND applicationClass = %s',
diff --git a/src/applications/dashboard/controller/PhabricatorDashboardPanelEngineController.php b/src/applications/dashboard/controller/PhabricatorDashboardPanelEngineController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/dashboard/controller/PhabricatorDashboardPanelEngineController.php
@@ -0,0 +1,24 @@
+<?php
+
+final class PhabricatorDashboardPanelEngineController
+ extends PhabricatorDashboardController {
+
+ public function handleRequest(AphrontRequest $request) {
+ $response = $this->loadDashboard();
+ if ($response) {
+ return $response;
+ }
+
+ $viewer = $this->getViewer();
+ $dashboard = $this->getDashboard();
+
+ $engine = id(new PhabricatorDashboardPanelEngine())
+ ->setProfileObject($dashboard)
+ ->setController($this);
+
+ $this->setProfilePanelEngine($engine);
+
+ return $engine->buildResponse();
+ }
+
+}
diff --git a/src/applications/dashboard/engine/PhabricatorDashboardPanelEngine.php b/src/applications/dashboard/engine/PhabricatorDashboardPanelEngine.php
new file mode 100644
--- /dev/null
+++ b/src/applications/dashboard/engine/PhabricatorDashboardPanelEngine.php
@@ -0,0 +1,22 @@
+<?php
+
+final class PhabricatorDashboardPanelEngine
+ extends PhabricatorProfilePanelEngine {
+
+ protected function isPanelEngineConfigurable() {
+ return true;
+ }
+
+ protected function getPanelURI($path) {
+ $project = $this->getProfileObject();
+ $id = $project->getID();
+ return "/dashboard/{$id}/panel/{$path}";
+ }
+
+ protected function getBuiltinProfilePanels($object) {
+ $panels = array();
+
+ return $panels;
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 15, 8:23 PM (3 d, 11 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7703291
Default Alt Text
D17003.id40907.diff (7 KB)

Event Timeline