Page MenuHomePhabricator

D13173.diff
No OneTemporary

D13173.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
@@ -1228,6 +1228,7 @@
'PHUIPropertyListExample' => 'applications/uiexample/examples/PHUIPropertyListExample.php',
'PHUIPropertyListView' => 'view/phui/PHUIPropertyListView.php',
'PHUIRemarkupPreviewPanel' => 'view/phui/PHUIRemarkupPreviewPanel.php',
+ 'PHUISpacesNamespaceContextView' => 'applications/spaces/view/PHUISpacesNamespaceContextView.php',
'PHUIStatusItemView' => 'view/phui/PHUIStatusItemView.php',
'PHUIStatusListView' => 'view/phui/PHUIStatusListView.php',
'PHUITagExample' => 'applications/uiexample/examples/PHUITagExample.php',
@@ -4589,6 +4590,7 @@
'PHUIPropertyListExample' => 'PhabricatorUIExample',
'PHUIPropertyListView' => 'AphrontView',
'PHUIRemarkupPreviewPanel' => 'AphrontTagView',
+ 'PHUISpacesNamespaceContextView' => 'AphrontView',
'PHUIStatusItemView' => 'AphrontTagView',
'PHUIStatusListView' => 'AphrontTagView',
'PHUITagExample' => 'PhabricatorUIExample',
diff --git a/src/applications/search/controller/PhabricatorSearchHovercardController.php b/src/applications/search/controller/PhabricatorSearchHovercardController.php
--- a/src/applications/search/controller/PhabricatorSearchHovercardController.php
+++ b/src/applications/search/controller/PhabricatorSearchHovercardController.php
@@ -7,18 +7,17 @@
return true;
}
- public function processRequest() {
- $request = $this->getRequest();
- $user = $request->getUser();
+ public function handleRequest(AphrontRequest $request) {
+ $viewer = $this->getViewer();
$phids = $request->getArr('phids');
$handles = id(new PhabricatorHandleQuery())
- ->setViewer($user)
+ ->setViewer($viewer)
->withPHIDs($phids)
->execute();
$objects = id(new PhabricatorObjectQuery())
- ->setViewer($user)
+ ->setViewer($viewer)
->withPHIDs($phids)
->execute();
@@ -26,9 +25,15 @@
foreach ($phids as $phid) {
$handle = $handles[$phid];
+ $object = $objects[$phid];
- $hovercard = new PhabricatorHovercardView();
- $hovercard->setObjectHandle($handle);
+ $hovercard = id(new PhabricatorHovercardView())
+ ->setUser($viewer)
+ ->setObjectHandle($handle);
+
+ if ($object) {
+ $hovercard->setObject($object);
+ }
// Send it to the other side of the world, thanks to PhutilEventEngine
$event = new PhabricatorEvent(
@@ -36,9 +41,9 @@
array(
'hovercard' => $hovercard,
'handle' => $handle,
- 'object' => idx($objects, $phid),
+ 'object' => $object,
));
- $event->setUser($user);
+ $event->setUser($viewer);
PhutilEventEngine::dispatchEvent($event);
$cards[$phid] = $hovercard;
diff --git a/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php b/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
--- a/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
+++ b/src/applications/spaces/query/PhabricatorSpacesNamespaceQuery.php
@@ -145,4 +145,33 @@
return $result;
}
+ /**
+ * Get the Space PHID for an object, if one exists.
+ *
+ * This is intended to simplify performing a bunch of redundant checks; you
+ * can intentionally pass any value in (including `null`).
+ *
+ * @param wild
+ * @return phid|null
+ */
+ public static function getObjectSpacePHID($object) {
+ if (!$object) {
+ return null;
+ }
+
+ if (!($object instanceof PhabricatorSpacesInterface)) {
+ return null;
+ }
+
+ $space_phid = $object->getSpacePHID();
+ if ($space_phid === null) {
+ $default_space = self::getDefaultSpace();
+ if ($default_space) {
+ $space_phid = $default_space->getPHID();
+ }
+ }
+
+ return $space_phid;
+ }
+
}
diff --git a/src/applications/spaces/view/PHUISpacesNamespaceContextView.php b/src/applications/spaces/view/PHUISpacesNamespaceContextView.php
new file mode 100644
--- /dev/null
+++ b/src/applications/spaces/view/PHUISpacesNamespaceContextView.php
@@ -0,0 +1,36 @@
+<?php
+
+final class PHUISpacesNamespaceContextView extends AphrontView {
+
+ private $object;
+
+ public function setObject($object) {
+ $this->object = $object;
+ return $this;
+ }
+
+ public function getObject() {
+ return $this->object;
+ }
+
+ public function render() {
+ $object = $this->getObject();
+
+ $space_phid = PhabricatorSpacesNamespaceQuery::getObjectSpacePHID($object);
+ if (!$space_phid) {
+ return null;
+ }
+
+ $viewer = $this->getUser();
+ return phutil_tag(
+ 'span',
+ array(
+ 'class' => 'spaces-name',
+ ),
+ array(
+ $viewer->renderHandle($space_phid),
+ ' | ',
+ ));
+ }
+
+}
diff --git a/src/view/phui/PHUIHeaderView.php b/src/view/phui/PHUIHeaderView.php
--- a/src/view/phui/PHUIHeaderView.php
+++ b/src/view/phui/PHUIHeaderView.php
@@ -172,9 +172,14 @@
' ');
}
- $header = array();
+ $viewer = $this->getUser();
- $header[] = $this->renderObjectSpaceInformation();
+ $header = array();
+ if ($viewer) {
+ $header[] = id(new PHUISpacesNamespaceContextView())
+ ->setUser($viewer)
+ ->setObject($this->policyObject);
+ }
if ($this->objectName) {
$header[] = array(
@@ -297,40 +302,4 @@
return array($icon, $link);
}
- private function renderObjectSpaceInformation() {
- $viewer = $this->getUser();
-
- $object = $this->policyObject;
- if (!$object) {
- return;
- }
-
- if (!($object instanceof PhabricatorSpacesInterface)) {
- return;
- }
-
- $space_phid = $object->getSpacePHID();
- if ($space_phid === null) {
- $default_space = PhabricatorSpacesNamespaceQuery::getDefaultSpace();
- if ($default_space) {
- $space_phid = $default_space->getPHID();
- }
- }
-
- if ($space_phid === null) {
- return;
- }
-
- return phutil_tag(
- 'span',
- array(
- 'class' => 'spaces-name',
- ),
- array(
- $viewer->renderHandle($space_phid),
- ' | ',
- ));
- }
-
-
}
diff --git a/src/view/phui/PHUIObjectItemListView.php b/src/view/phui/PHUIObjectItemListView.php
--- a/src/view/phui/PHUIObjectItemListView.php
+++ b/src/view/phui/PHUIObjectItemListView.php
@@ -90,6 +90,7 @@
}
protected function getTagContent() {
+ $viewer = $this->getUser();
require_celerity_resource('phui-object-item-list-view-css');
$header = null;
@@ -103,6 +104,11 @@
}
if ($this->items) {
+ if ($viewer) {
+ foreach ($this->items as $item) {
+ $item->setUser($viewer);
+ }
+ }
$items = $this->items;
} else if ($this->allowEmptyList) {
$items = null;
diff --git a/src/view/phui/PHUIObjectItemView.php b/src/view/phui/PHUIObjectItemView.php
--- a/src/view/phui/PHUIObjectItemView.php
+++ b/src/view/phui/PHUIObjectItemView.php
@@ -323,12 +323,21 @@
}
protected function getTagContent() {
+ $viewer = $this->getUser();
+
$content_classes = array();
$content_classes[] = 'phui-object-item-content';
- $header_name = null;
+ $header_name = array();
+
+ if ($viewer) {
+ $header_name[] = id(new PHUISpacesNamespaceContextView())
+ ->setUser($viewer)
+ ->setObject($this->object);
+ }
+
if ($this->objectName) {
- $header_name = array(
+ $header_name[] = array(
phutil_tag(
'span',
array(
diff --git a/src/view/widget/hovercard/PhabricatorHovercardView.php b/src/view/widget/hovercard/PhabricatorHovercardView.php
--- a/src/view/widget/hovercard/PhabricatorHovercardView.php
+++ b/src/view/widget/hovercard/PhabricatorHovercardView.php
@@ -10,6 +10,7 @@
* @var PhabricatorObjectHandle
*/
private $handle;
+ private $object;
private $title = array();
private $detail;
@@ -23,6 +24,15 @@
return $this;
}
+ public function setObject($object) {
+ $this->object = $object;
+ return $this;
+ }
+
+ public function getObject() {
+ return $this->object;
+ }
+
public function setTitle($title) {
$this->title = $title;
return $this;
@@ -65,13 +75,20 @@
throw new PhutilInvalidStateException('setObjectHandle');
}
+ $viewer = $this->getUser();
$handle = $this->handle;
require_celerity_resource('phabricator-hovercard-view-css');
- $title = pht('%s: %s',
- $handle->getTypeName(),
- $this->title ? $this->title : $handle->getName());
+ $title = array(
+ id(new PHUISpacesNamespaceContextView())
+ ->setUser($viewer)
+ ->setObject($this->getObject()),
+ pht(
+ '%s: %s',
+ $handle->getTypeName(),
+ $this->title ? $this->title : $handle->getName()),
+ );
$header = new PHUIActionHeaderView();
$header->setHeaderColor($this->color);

File Metadata

Mime Type
text/plain
Expires
Mon, May 13, 9:54 PM (2 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6275938
Default Alt Text
D13173.diff (8 KB)

Event Timeline