Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14633417
D20398.id48677.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
23 KB
Referenced Files
None
Subscribers
None
D20398.id48677.diff
View Options
diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -9,7 +9,7 @@
'names' => array(
'conpherence.pkg.css' => '3c8a0668',
'conpherence.pkg.js' => '020aebcf',
- 'core.pkg.css' => '9d654dff',
+ 'core.pkg.css' => '1db0892b',
'core.pkg.js' => '794952ae',
'differential.pkg.css' => '8d8360fb',
'differential.pkg.js' => '67e02996',
@@ -164,7 +164,7 @@
'rsrc/css/phui/phui-invisible-character-view.css' => 'c694c4a4',
'rsrc/css/phui/phui-left-right.css' => '68513c34',
'rsrc/css/phui/phui-lightbox.css' => '4ebf22da',
- 'rsrc/css/phui/phui-list.css' => '734a1039',
+ 'rsrc/css/phui/phui-list.css' => 'b05144dd',
'rsrc/css/phui/phui-object-box.css' => 'f434b6be',
'rsrc/css/phui/phui-pager.css' => 'd022c7ad',
'rsrc/css/phui/phui-pinboard-view.css' => '1f08f5d8',
@@ -847,7 +847,7 @@
'phui-invisible-character-view-css' => 'c694c4a4',
'phui-left-right-css' => '68513c34',
'phui-lightbox-css' => '4ebf22da',
- 'phui-list-view-css' => '734a1039',
+ 'phui-list-view-css' => 'b05144dd',
'phui-object-box-css' => 'f434b6be',
'phui-oi-big-ui-css' => 'fa74cc35',
'phui-oi-color-css' => 'b517bfa0',
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
@@ -3062,6 +3062,7 @@
'PhabricatorEdgeEditType' => 'applications/transactions/edittype/PhabricatorEdgeEditType.php',
'PhabricatorEdgeEditor' => 'infrastructure/edges/editor/PhabricatorEdgeEditor.php',
'PhabricatorEdgeGraph' => 'infrastructure/edges/util/PhabricatorEdgeGraph.php',
+ 'PhabricatorEdgeIndexEngineExtension' => 'applications/search/engineextension/PhabricatorEdgeIndexEngineExtension.php',
'PhabricatorEdgeObject' => 'infrastructure/edges/conduit/PhabricatorEdgeObject.php',
'PhabricatorEdgeObjectQuery' => 'infrastructure/edges/query/PhabricatorEdgeObjectQuery.php',
'PhabricatorEdgeQuery' => 'infrastructure/edges/query/PhabricatorEdgeQuery.php',
@@ -4065,11 +4066,13 @@
'PhabricatorProfileMenuEditor' => 'applications/search/editor/PhabricatorProfileMenuEditor.php',
'PhabricatorProfileMenuEngine' => 'applications/search/engine/PhabricatorProfileMenuEngine.php',
'PhabricatorProfileMenuItem' => 'applications/search/menuitem/PhabricatorProfileMenuItem.php',
+ 'PhabricatorProfileMenuItemAffectsObjectEdgeType' => 'applications/search/edge/PhabricatorProfileMenuItemAffectsObjectEdgeType.php',
'PhabricatorProfileMenuItemConfiguration' => 'applications/search/storage/PhabricatorProfileMenuItemConfiguration.php',
'PhabricatorProfileMenuItemConfigurationQuery' => 'applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php',
'PhabricatorProfileMenuItemConfigurationTransaction' => 'applications/search/storage/PhabricatorProfileMenuItemConfigurationTransaction.php',
'PhabricatorProfileMenuItemConfigurationTransactionQuery' => 'applications/search/query/PhabricatorProfileMenuItemConfigurationTransactionQuery.php',
'PhabricatorProfileMenuItemIconSet' => 'applications/search/menuitem/PhabricatorProfileMenuItemIconSet.php',
+ 'PhabricatorProfileMenuItemIndexEngineExtension' => 'applications/search/engineextension/PhabricatorProfileMenuItemIndexEngineExtension.php',
'PhabricatorProfileMenuItemPHIDType' => 'applications/search/phidtype/PhabricatorProfileMenuItemPHIDType.php',
'PhabricatorProfileMenuItemView' => 'applications/search/engine/PhabricatorProfileMenuItemView.php',
'PhabricatorProfileMenuItemViewList' => 'applications/search/engine/PhabricatorProfileMenuItemViewList.php',
@@ -7290,7 +7293,7 @@
'HeraldRuleEditor' => 'PhabricatorApplicationTransactionEditor',
'HeraldRuleField' => 'HeraldField',
'HeraldRuleFieldGroup' => 'HeraldFieldGroup',
- 'HeraldRuleIndexEngineExtension' => 'PhabricatorIndexEngineExtension',
+ 'HeraldRuleIndexEngineExtension' => 'PhabricatorEdgeIndexEngineExtension',
'HeraldRuleListController' => 'HeraldController',
'HeraldRuleListView' => 'AphrontView',
'HeraldRuleNameTransaction' => 'HeraldRuleTransactionType',
@@ -9052,6 +9055,7 @@
'PhabricatorEdgeEditType' => 'PhabricatorPHIDListEditType',
'PhabricatorEdgeEditor' => 'Phobject',
'PhabricatorEdgeGraph' => 'AbstractDirectedGraph',
+ 'PhabricatorEdgeIndexEngineExtension' => 'PhabricatorIndexEngineExtension',
'PhabricatorEdgeObject' => array(
'Phobject',
'PhabricatorPolicyInterface',
@@ -10207,16 +10211,19 @@
'PhabricatorProfileMenuEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorProfileMenuEngine' => 'Phobject',
'PhabricatorProfileMenuItem' => 'Phobject',
+ 'PhabricatorProfileMenuItemAffectsObjectEdgeType' => 'PhabricatorEdgeType',
'PhabricatorProfileMenuItemConfiguration' => array(
'PhabricatorSearchDAO',
'PhabricatorPolicyInterface',
'PhabricatorExtendedPolicyInterface',
'PhabricatorApplicationTransactionInterface',
+ 'PhabricatorIndexableInterface',
),
'PhabricatorProfileMenuItemConfigurationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorProfileMenuItemConfigurationTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorProfileMenuItemConfigurationTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorProfileMenuItemIconSet' => 'PhabricatorIconSet',
+ 'PhabricatorProfileMenuItemIndexEngineExtension' => 'PhabricatorEdgeIndexEngineExtension',
'PhabricatorProfileMenuItemPHIDType' => 'PhabricatorPHIDType',
'PhabricatorProfileMenuItemView' => 'Phobject',
'PhabricatorProfileMenuItemViewList' => 'Phobject',
diff --git a/src/applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php
--- a/src/applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php
+++ b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php
@@ -32,6 +32,8 @@
$curtain = $this->buildCurtainView($dashboard);
+ $usage_box = $this->newUsageView($dashboard);
+
$timeline = $this->buildTransactionTimeline(
$dashboard,
new PhabricatorDashboardTransactionQuery());
@@ -53,6 +55,7 @@
->setMainColumn(
array(
$dashboard_box,
+ $usage_box,
$timeline,
));
@@ -110,5 +113,89 @@
return $curtain;
}
+ private function newUsageView(PhabricatorDashboard $dashboard) {
+ $viewer = $this->getViewer();
+
+ $custom_phids = array();
+ if ($viewer->getPHID()) {
+ $custom_phids[] = $viewer->getPHID();
+ }
+
+ $items = id(new PhabricatorProfileMenuItemConfigurationQuery())
+ ->setViewer($viewer)
+ ->withAffectedObjectPHIDs(
+ array(
+ $dashboard->getPHID(),
+ ))
+ ->withCustomPHIDs($custom_phids, $include_global = true)
+ ->execute();
+
+ $handle_phids = array();
+ foreach ($items as $item) {
+ $handle_phids[] = $item->getProfilePHID();
+ $custom_phid = $item->getCustomPHID();
+ if ($custom_phid) {
+ $handle_phids[] = $custom_phid;
+ }
+ }
+
+ if ($handle_phids) {
+ $handles = $viewer->loadHandles($handle_phids);
+ } else {
+ $handles = array();
+ }
+
+ $items = msortv($items, 'newUsageSortVector');
+
+ $rows = array();
+ foreach ($items as $item) {
+ $profile_phid = $item->getProfilePHID();
+ $custom_phid = $item->getCustomPHID();
+
+ $profile = $handles[$profile_phid]->renderLink();
+ $profile_icon = $handles[$profile_phid]->getIcon();
+
+ if ($custom_phid) {
+ $custom = $handles[$custom_phid]->renderLink();
+ } else {
+ $custom = pht('Global');
+ }
+
+ $type = $item->getProfileMenuTypeDescription();
+
+ $rows[] = array(
+ id(new PHUIIconView())->setIcon($profile_icon),
+ $type,
+ $profile,
+ $custom,
+ );
+ }
+
+ $usage_table = id(new AphrontTableView($rows))
+ ->setHeaders(
+ array(
+ null,
+ pht('Type'),
+ pht('Menu'),
+ pht('Global/Personal'),
+ ))
+ ->setColumnClasses(
+ array(
+ 'center',
+ null,
+ 'pri',
+ 'wide',
+ ));
+
+ $header_view = id(new PHUIHeaderView())
+ ->setHeader(pht('Dashboard Used By'));
+
+ $usage_box = id(new PHUIObjectBoxView())
+ ->setTable($usage_table)
+ ->setHeader($header_view);
+
+ return $usage_box;
+ }
+
}
diff --git a/src/applications/dashboard/phid/PhabricatorDashboardPortalPHIDType.php b/src/applications/dashboard/phid/PhabricatorDashboardPortalPHIDType.php
--- a/src/applications/dashboard/phid/PhabricatorDashboardPortalPHIDType.php
+++ b/src/applications/dashboard/phid/PhabricatorDashboardPortalPHIDType.php
@@ -34,6 +34,7 @@
$portal = $objects[$phid];
$handle
+ ->setIcon('fa-compass')
->setName($portal->getName())
->setURI($portal->getURI());
}
diff --git a/src/applications/herald/engineextension/HeraldRuleIndexEngineExtension.php b/src/applications/herald/engineextension/HeraldRuleIndexEngineExtension.php
--- a/src/applications/herald/engineextension/HeraldRuleIndexEngineExtension.php
+++ b/src/applications/herald/engineextension/HeraldRuleIndexEngineExtension.php
@@ -1,7 +1,7 @@
<?php
final class HeraldRuleIndexEngineExtension
- extends PhabricatorIndexEngineExtension {
+ extends PhabricatorEdgeIndexEngineExtension {
const EXTENSIONKEY = 'herald.actions';
@@ -17,48 +17,13 @@
return true;
}
- public function indexObject(
- PhabricatorIndexEngine $engine,
- $object) {
-
- $edge_type = HeraldRuleActionAffectsObjectEdgeType::EDGECONST;
-
- $old_edges = PhabricatorEdgeQuery::loadDestinationPHIDs(
- $object->getPHID(),
- $edge_type);
- $old_edges = array_fuse($old_edges);
-
- $new_edges = $this->getPHIDsAffectedByActions($object);
- $new_edges = array_fuse($new_edges);
-
- $add_edges = array_diff_key($new_edges, $old_edges);
- $rem_edges = array_diff_key($old_edges, $new_edges);
-
- if (!$add_edges && !$rem_edges) {
- return;
- }
-
- $editor = new PhabricatorEdgeEditor();
-
- foreach ($add_edges as $phid) {
- $editor->addEdge($object->getPHID(), $edge_type, $phid);
- }
-
- foreach ($rem_edges as $phid) {
- $editor->removeEdge($object->getPHID(), $edge_type, $phid);
- }
-
- $editor->save();
+ protected function getIndexEdgeType() {
+ return HeraldRuleActionAffectsObjectEdgeType::EDGECONST;
}
- public function getIndexVersion($object) {
- $phids = $this->getPHIDsAffectedByActions($object);
- sort($phids);
- $phids = implode(':', $phids);
- return PhabricatorHash::digestForIndex($phids);
- }
+ protected function getIndexDestinationPHIDs($object) {
+ $rule = $object;
- private function getPHIDsAffectedByActions(HeraldRule $rule) {
$viewer = $this->getViewer();
$rule = id(new HeraldRuleQuery())
diff --git a/src/applications/search/edge/PhabricatorProfileMenuItemAffectsObjectEdgeType.php b/src/applications/search/edge/PhabricatorProfileMenuItemAffectsObjectEdgeType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/search/edge/PhabricatorProfileMenuItemAffectsObjectEdgeType.php
@@ -0,0 +1,8 @@
+<?php
+
+final class PhabricatorProfileMenuItemAffectsObjectEdgeType
+ extends PhabricatorEdgeType {
+
+ const EDGECONST = 70;
+
+}
diff --git a/src/applications/search/editor/PhabricatorProfileMenuEditor.php b/src/applications/search/editor/PhabricatorProfileMenuEditor.php
--- a/src/applications/search/editor/PhabricatorProfileMenuEditor.php
+++ b/src/applications/search/editor/PhabricatorProfileMenuEditor.php
@@ -121,5 +121,8 @@
return $errors;
}
+ protected function supportsSearch() {
+ return true;
+ }
}
diff --git a/src/applications/search/engineextension/PhabricatorEdgeIndexEngineExtension.php b/src/applications/search/engineextension/PhabricatorEdgeIndexEngineExtension.php
new file mode 100644
--- /dev/null
+++ b/src/applications/search/engineextension/PhabricatorEdgeIndexEngineExtension.php
@@ -0,0 +1,50 @@
+<?php
+
+abstract class PhabricatorEdgeIndexEngineExtension
+ extends PhabricatorIndexEngineExtension {
+
+ abstract protected function getIndexEdgeType();
+ abstract protected function getIndexDestinationPHIDs($object);
+
+ final public function indexObject(
+ PhabricatorIndexEngine $engine,
+ $object) {
+
+ $edge_type = $this->getIndexEdgeType();
+
+ $old_edges = PhabricatorEdgeQuery::loadDestinationPHIDs(
+ $object->getPHID(),
+ $edge_type);
+ $old_edges = array_fuse($old_edges);
+
+ $new_edges = $this->getIndexDestinationPHIDs($object);
+ $new_edges = array_fuse($new_edges);
+
+ $add_edges = array_diff_key($new_edges, $old_edges);
+ $rem_edges = array_diff_key($old_edges, $new_edges);
+
+ if (!$add_edges && !$rem_edges) {
+ return;
+ }
+
+ $editor = new PhabricatorEdgeEditor();
+
+ foreach ($add_edges as $phid) {
+ $editor->addEdge($object->getPHID(), $edge_type, $phid);
+ }
+
+ foreach ($rem_edges as $phid) {
+ $editor->removeEdge($object->getPHID(), $edge_type, $phid);
+ }
+
+ $editor->save();
+ }
+
+ final public function getIndexVersion($object) {
+ $phids = $this->getIndexDestinationPHIDs($object);
+ sort($phids);
+ $phids = implode(':', $phids);
+ return PhabricatorHash::digestForIndex($phids);
+ }
+
+}
diff --git a/src/applications/search/engineextension/PhabricatorProfileMenuItemIndexEngineExtension.php b/src/applications/search/engineextension/PhabricatorProfileMenuItemIndexEngineExtension.php
new file mode 100644
--- /dev/null
+++ b/src/applications/search/engineextension/PhabricatorProfileMenuItemIndexEngineExtension.php
@@ -0,0 +1,28 @@
+<?php
+
+final class PhabricatorProfileMenuItemIndexEngineExtension
+ extends PhabricatorEdgeIndexEngineExtension {
+
+ const EXTENSIONKEY = 'profile.menu.item';
+
+ public function getExtensionName() {
+ return pht('Profile Menu Item');
+ }
+
+ public function shouldIndexObject($object) {
+ if (!($object instanceof PhabricatorProfileMenuItemConfiguration)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ protected function getIndexEdgeType() {
+ return PhabricatorProfileMenuItemAffectsObjectEdgeType::EDGECONST;
+ }
+
+ protected function getIndexDestinationPHIDs($object) {
+ return $object->getAffectedObjectPHIDs();
+ }
+
+}
diff --git a/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php
--- a/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php
+++ b/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php
@@ -36,11 +36,19 @@
return $this->dashboard;
}
+ public function getAffectedObjectPHIDs(
+ PhabricatorProfileMenuItemConfiguration $config) {
+ return array(
+ $this->getDashboardPHID($config),
+ );
+ }
+
+
public function newPageContent(
PhabricatorProfileMenuItemConfiguration $config) {
$viewer = $this->getViewer();
- $dashboard_phid = $config->getMenuItemProperty('dashboardPHID');
+ $dashboard_phid = $this->getDashboardPHID($config);
// Reload the dashboard to attach panels, which we need for rendering.
$dashboard = id(new PhabricatorDashboardQuery())
@@ -71,7 +79,7 @@
$viewer = $this->getViewer();
$dashboard_phids = array();
foreach ($items as $item) {
- $dashboard_phids[] = $item->getMenuItemProperty('dashboardPHID');
+ $dashboard_phids[] = $this->getDashboardPHID($item);
}
$dashboards = id(new PhabricatorDashboardQuery())
@@ -83,7 +91,7 @@
$dashboards = mpull($dashboards, null, 'getPHID');
foreach ($items as $item) {
- $dashboard_phid = $item->getMenuItemProperty('dashboardPHID');
+ $dashboard_phid = $this->getDashboardPHID($item);
$dashboard = idx($dashboards, $dashboard_phid, null);
$menu_item = $item->getMenuItem();
@@ -125,7 +133,7 @@
->setLabel(pht('Dashboard'))
->setIsRequired(true)
->setDatasource(new PhabricatorDashboardDatasource())
- ->setSingleValue($config->getMenuItemProperty('dashboardPHID')),
+ ->setSingleValue($this->getDashboardPHID($config)),
id(new PhabricatorTextEditField())
->setKey('name')
->setLabel(pht('Name'))
@@ -226,6 +234,11 @@
return $errors;
}
+ private function getDashboardPHID(
+ PhabricatorProfileMenuItemConfiguration $config) {
+ return $config->getMenuItemProperty('dashboardPHID');
+ }
+
private function getDashboardHandle() {
return $this->dashboardHandle;
}
diff --git a/src/applications/search/menuitem/PhabricatorProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorProfileMenuItem.php
--- a/src/applications/search/menuitem/PhabricatorProfileMenuItem.php
+++ b/src/applications/search/menuitem/PhabricatorProfileMenuItem.php
@@ -159,4 +159,9 @@
));
}
+ public function getAffectedObjectPHIDs(
+ PhabricatorProfileMenuItemConfiguration $config) {
+ return array();
+ }
+
}
diff --git a/src/applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php b/src/applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php
--- a/src/applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php
+++ b/src/applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php
@@ -8,6 +8,7 @@
private $profilePHIDs;
private $customPHIDs;
private $includeGlobal;
+ private $affectedObjectPHIDs;
public function withIDs(array $ids) {
$this->ids = $ids;
@@ -30,6 +31,11 @@
return $this;
}
+ public function withAffectedObjectPHIDs(array $phids) {
+ $this->affectedObjectPHIDs = $phids;
+ return $this;
+ }
+
public function newResultObject() {
return new PhabricatorProfileMenuItemConfiguration();
}
@@ -44,21 +50,21 @@
if ($this->ids !== null) {
$where[] = qsprintf(
$conn,
- 'id IN (%Ld)',
+ 'config.id IN (%Ld)',
$this->ids);
}
if ($this->phids !== null) {
$where[] = qsprintf(
$conn,
- 'phid IN (%Ls)',
+ 'config.phid IN (%Ls)',
$this->phids);
}
if ($this->profilePHIDs !== null) {
$where[] = qsprintf(
$conn,
- 'profilePHID IN (%Ls)',
+ 'config.profilePHID IN (%Ls)',
$this->profilePHIDs);
}
@@ -66,23 +72,45 @@
if ($this->customPHIDs && $this->includeGlobal) {
$where[] = qsprintf(
$conn,
- 'customPHID IN (%Ls) OR customPHID IS NULL',
+ 'config.customPHID IN (%Ls) OR config.customPHID IS NULL',
$this->customPHIDs);
} else if ($this->customPHIDs) {
$where[] = qsprintf(
$conn,
- 'customPHID IN (%Ls)',
+ 'config.customPHID IN (%Ls)',
$this->customPHIDs);
} else {
$where[] = qsprintf(
$conn,
- 'customPHID IS NULL');
+ 'config.customPHID IS NULL');
}
}
+ if ($this->affectedObjectPHIDs !== null) {
+ $where[] = qsprintf(
+ $conn,
+ 'affected.dst IN (%Ls)',
+ $this->affectedObjectPHIDs);
+ }
+
return $where;
}
+ protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
+ $joins = parent::buildJoinClauseParts($conn);
+
+ if ($this->affectedObjectPHIDs !== null) {
+ $joins[] = qsprintf(
+ $conn,
+ 'JOIN %T affected ON affected.src = config.phid
+ AND affected.type = %d',
+ PhabricatorEdgeConfig::TABLE_NAME_EDGE,
+ PhabricatorProfileMenuItemAffectsObjectEdgeType::EDGECONST);
+ }
+
+ return $joins;
+ }
+
protected function willFilterPage(array $page) {
$items = PhabricatorProfileMenuItem::getAllMenuItems();
foreach ($page as $key => $item) {
@@ -128,4 +156,8 @@
return 'PhabricatorSearchApplication';
}
+ protected function getPrimaryTableAlias() {
+ return 'config';
+ }
+
}
diff --git a/src/applications/search/storage/PhabricatorProfileMenuItemConfiguration.php b/src/applications/search/storage/PhabricatorProfileMenuItemConfiguration.php
--- a/src/applications/search/storage/PhabricatorProfileMenuItemConfiguration.php
+++ b/src/applications/search/storage/PhabricatorProfileMenuItemConfiguration.php
@@ -5,7 +5,8 @@
implements
PhabricatorPolicyInterface,
PhabricatorExtendedPolicyInterface,
- PhabricatorApplicationTransactionInterface {
+ PhabricatorApplicationTransactionInterface,
+ PhabricatorIndexableInterface {
protected $profilePHID;
protected $menuItemKey;
@@ -255,6 +256,49 @@
return false;
}
+ public function getAffectedObjectPHIDs() {
+ return $this->getMenuItem()->getAffectedObjectPHIDs($this);
+ }
+
+ public function getProfileMenuTypeDescription() {
+ $profile_phid = $this->getProfilePHID();
+
+ $home_phid = id(new PhabricatorHomeApplication())->getPHID();
+ if ($profile_phid === $home_phid) {
+ return pht('Home Menu');
+ }
+
+ $favorites_phid = id(new PhabricatorFavoritesApplication())->getPHID();
+ if ($profile_phid === $favorites_phid) {
+ return pht('Favorites Menu');
+ }
+
+ switch (phid_get_type($profile_phid)) {
+ case PhabricatorProjectProjectPHIDType::TYPECONST:
+ return pht('Project Menu');
+ case PhabricatorDashboardPortalPHIDType::TYPECONST:
+ return pht('Portal Menu');
+ }
+
+ return pht('Profile Menu');
+ }
+
+ public function newUsageSortVector() {
+ // Used to sort items in contexts where we're showing the usage of an
+ // object in menus, like "Dashboard Used By" on Dashboard pages.
+
+ // Sort usage as a custom item after usage as a global item.
+ if ($this->getCustomPHID()) {
+ $is_personal = 1;
+ } else {
+ $is_personal = 0;
+ }
+
+ return id(new PhutilSortVector())
+ ->addInt($is_personal)
+ ->addInt($this->getID());
+ }
+
/* -( PhabricatorPolicyInterface )----------------------------------------- */
diff --git a/webroot/rsrc/css/phui/phui-list.css b/webroot/rsrc/css/phui/phui-list.css
--- a/webroot/rsrc/css/phui/phui-list.css
+++ b/webroot/rsrc/css/phui/phui-list.css
@@ -261,7 +261,8 @@
/* - Action Icon ----------------------------------------------------------- */
-.phui-list-sidenav .phui-list-item-has-action-icon .phui-list-item-action-href {
+.phabricator-nav-local .phui-list-item-has-action-icon
+ .phui-list-item-action-href {
position: absolute;
width: 28px;
top: 0;
@@ -273,26 +274,27 @@
display: none;
}
-.phui-list-sidenav .phui-list-item-has-action-icon.phui-list-item-selected
+.phabricator-nav-local .phui-list-item-has-action-icon.phui-list-item-selected
.phui-list-item-href {
padding-right: 32px;
}
-.phui-list-sidenav .phui-list-item-has-action-icon.phui-list-item-selected
+.phabricator-nav-local .phui-list-item-has-action-icon.phui-list-item-selected
.phui-list-item-action-href {
display: block;
}
-.phui-list-sidenav .phui-list-item-has-action-icon
+.phabricator-nav-local .phui-list-item-has-action-icon
.phui-list-item-action-href:hover {
background-color: rgba({$alphablack},.05);
}
-.phui-list-sidenav .phui-list-item-has-action-icon .phui-list-item-action-icon {
+.phabricator-nav-local .phui-list-item-has-action-icon
+ .phui-list-item-action-icon {
opacity: 0.5;
}
-.phui-list-sidenav .phui-list-item-has-action-icon
+.phabricator-nav-local .phui-list-item-has-action-icon
.phui-list-item-action-href:hover
.phui-list-item-action-icon {
opacity: 1;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Jan 11, 9:06 PM (21 h, 26 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6985611
Default Alt Text
D20398.id48677.diff (23 KB)
Attached To
Mode
D20398: Index and surface usage sites for Dashboards
Attached
Detach File
Event Timeline
Log In to Comment