2011-01-26 18:02:09 +01:00
|
|
|
<?php
|
|
|
|
|
2013-07-21 16:03:10 +02:00
|
|
|
final class PhabricatorObjectHandle
|
2015-06-15 10:02:26 +02:00
|
|
|
extends Phobject
|
2013-07-21 16:03:10 +02:00
|
|
|
implements PhabricatorPolicyInterface {
|
2011-01-26 18:02:09 +01:00
|
|
|
|
2015-05-14 20:14:44 +02:00
|
|
|
const AVAILABILITY_FULL = 'full';
|
|
|
|
const AVAILABILITY_NONE = 'none';
|
2017-04-13 21:16:07 +02:00
|
|
|
const AVAILABILITY_NOEMAIL = 'no-email';
|
2015-05-14 20:14:44 +02:00
|
|
|
const AVAILABILITY_PARTIAL = 'partial';
|
|
|
|
const AVAILABILITY_DISABLED = 'disabled';
|
|
|
|
|
|
|
|
const STATUS_OPEN = 'open';
|
|
|
|
const STATUS_CLOSED = 'closed';
|
|
|
|
|
2011-01-26 18:02:09 +01:00
|
|
|
private $uri;
|
|
|
|
private $phid;
|
|
|
|
private $type;
|
|
|
|
private $name;
|
2011-02-03 02:38:03 +01:00
|
|
|
private $fullName;
|
2013-04-11 17:15:31 +02:00
|
|
|
private $title;
|
2011-02-01 01:00:42 +01:00
|
|
|
private $imageURI;
|
2014-05-23 19:41:24 +02:00
|
|
|
private $icon;
|
2014-06-26 07:01:58 +02:00
|
|
|
private $tagColor;
|
2011-04-23 00:10:42 +02:00
|
|
|
private $timestamp;
|
2015-05-14 20:14:44 +02:00
|
|
|
private $status = self::STATUS_OPEN;
|
|
|
|
private $availability = self::AVAILABILITY_FULL;
|
2011-08-30 21:03:58 +02:00
|
|
|
private $complete;
|
2013-10-05 04:57:15 +02:00
|
|
|
private $objectName;
|
2013-10-17 19:49:21 +02:00
|
|
|
private $policyFiltered;
|
2016-01-24 14:43:57 +01:00
|
|
|
private $subtitle;
|
2016-02-01 18:44:55 +01:00
|
|
|
private $tokenIcon;
|
Allow monogrammed objects to be parsed from the `arc` command line in "Reviewers" and similar fields
Summary:
Ref T10939. This allows the CLI to parse reviewers and subscribers like this:
```Reviewers: epriestley, O123 Some Package Name```
The rule goes:
- If a reviewer or subscriber starts with a monogram (like `X111`), just look that up and ignore everything until the next comma.
- Otherwise, split it on spaces and look up each part.
This means that these are valid:
```
alincoln htaft
alincoln, htaft
#a #b epriestley
O123 Some Package, epriestley, #b
```
I think the only real downside is that this:
```
O123 Some Package epriestley
```
...ignores the "epriestley" part. However, I don't expect users to be typing package monograms manually -- they just need to be representable by `arc land` and `arc diff --edit` and such. Those flows will always add commas and make the parse unambiguous.
Test Plan:
- Added test coverage.
- `amend --show`'d a revision with a package subscriber (this isn't currently possible to produce using the web UI, it came from a future change) and saw `Subscribers: O123 package name, usera, userb`.
- Updated a revision with a package subscriber.
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T10939
Differential Revision: https://secure.phabricator.com/D15911
2016-05-13 16:56:52 +02:00
|
|
|
private $commandLineObjectName;
|
2018-02-05 19:31:56 +01:00
|
|
|
private $mailStampName;
|
2013-10-17 19:49:21 +02:00
|
|
|
|
2017-01-12 21:25:36 +01:00
|
|
|
private $stateIcon;
|
|
|
|
private $stateColor;
|
|
|
|
private $stateName;
|
|
|
|
|
2014-05-23 19:41:24 +02:00
|
|
|
public function setIcon($icon) {
|
|
|
|
$this->icon = $icon;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getIcon() {
|
2014-06-26 17:49:44 +02:00
|
|
|
if ($this->getPolicyFiltered()) {
|
|
|
|
return 'fa-lock';
|
|
|
|
}
|
|
|
|
|
2014-05-23 19:41:24 +02:00
|
|
|
if ($this->icon) {
|
|
|
|
return $this->icon;
|
|
|
|
}
|
|
|
|
return $this->getTypeIcon();
|
|
|
|
}
|
|
|
|
|
2016-01-24 14:43:57 +01:00
|
|
|
public function setSubtitle($subtitle) {
|
|
|
|
$this->subtitle = $subtitle;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getSubtitle() {
|
|
|
|
return $this->subtitle;
|
|
|
|
}
|
|
|
|
|
2014-06-26 07:01:58 +02:00
|
|
|
public function setTagColor($color) {
|
|
|
|
static $colors;
|
|
|
|
if (!$colors) {
|
|
|
|
$colors = array_fuse(array_keys(PHUITagView::getShadeMap()));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isset($colors[$color])) {
|
|
|
|
$this->tagColor = $color;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getTagColor() {
|
2014-06-26 17:49:44 +02:00
|
|
|
if ($this->getPolicyFiltered()) {
|
|
|
|
return 'disabled';
|
|
|
|
}
|
|
|
|
|
2014-06-26 07:01:58 +02:00
|
|
|
if ($this->tagColor) {
|
|
|
|
return $this->tagColor;
|
|
|
|
}
|
2015-04-17 16:00:43 +02:00
|
|
|
|
2014-06-26 07:01:58 +02:00
|
|
|
return 'blue';
|
2014-06-26 07:01:42 +02:00
|
|
|
}
|
|
|
|
|
2015-04-17 16:00:43 +02:00
|
|
|
public function getIconColor() {
|
|
|
|
if ($this->tagColor) {
|
|
|
|
return $this->tagColor;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2016-02-01 18:44:55 +01:00
|
|
|
public function setTokenIcon($icon) {
|
|
|
|
$this->tokenIcon = $icon;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getTokenIcon() {
|
|
|
|
if ($this->tokenIcon !== null) {
|
|
|
|
return $this->tokenIcon;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->getIcon();
|
|
|
|
}
|
|
|
|
|
2014-02-14 19:23:56 +01:00
|
|
|
public function getTypeIcon() {
|
|
|
|
if ($this->getPHIDType()) {
|
|
|
|
return $this->getPHIDType()->getTypeIcon();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2013-10-17 19:49:21 +02:00
|
|
|
public function setPolicyFiltered($policy_filered) {
|
|
|
|
$this->policyFiltered = $policy_filered;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getPolicyFiltered() {
|
|
|
|
return $this->policyFiltered;
|
|
|
|
}
|
2013-10-05 04:57:15 +02:00
|
|
|
|
|
|
|
public function setObjectName($object_name) {
|
|
|
|
$this->objectName = $object_name;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getObjectName() {
|
|
|
|
if (!$this->objectName) {
|
|
|
|
return $this->getName();
|
|
|
|
}
|
|
|
|
return $this->objectName;
|
|
|
|
}
|
2011-01-26 18:02:09 +01:00
|
|
|
|
2018-02-05 19:31:56 +01:00
|
|
|
public function setMailStampName($mail_stamp_name) {
|
|
|
|
$this->mailStampName = $mail_stamp_name;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getMailStampName() {
|
|
|
|
return $this->mailStampName;
|
|
|
|
}
|
|
|
|
|
2011-01-26 18:02:09 +01:00
|
|
|
public function setURI($uri) {
|
|
|
|
$this->uri = $uri;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getURI() {
|
|
|
|
return $this->uri;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setPHID($phid) {
|
|
|
|
$this->phid = $phid;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getPHID() {
|
|
|
|
return $this->phid;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setName($name) {
|
|
|
|
$this->name = $name;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getName() {
|
2013-07-21 16:03:10 +02:00
|
|
|
if ($this->name === null) {
|
2013-10-17 19:49:21 +02:00
|
|
|
if ($this->getPolicyFiltered()) {
|
|
|
|
return pht('Restricted %s', $this->getTypeName());
|
|
|
|
} else {
|
|
|
|
return pht('Unknown Object (%s)', $this->getTypeName());
|
|
|
|
}
|
2013-07-21 16:03:10 +02:00
|
|
|
}
|
2011-01-26 18:02:09 +01:00
|
|
|
return $this->name;
|
|
|
|
}
|
|
|
|
|
2015-05-14 20:14:44 +02:00
|
|
|
public function setAvailability($availability) {
|
|
|
|
$this->availability = $availability;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getAvailability() {
|
|
|
|
return $this->availability;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function isDisabled() {
|
|
|
|
return ($this->getAvailability() == self::AVAILABILITY_DISABLED);
|
|
|
|
}
|
|
|
|
|
Add object status to Handles
Summary:
We use ObjectHandles as proxy objects which can refer to any other object in the
system. Add the concept of the underlying object's "status" (e.g., open, closed
or busy).
This allows us to render completed tasks and revisions with strikethrough. In
the future, if we implement OOO or something, we could render users with a
"busy" status if they're on vacation, etc.
Test Plan: Viewed a task with closed revisions and dependencies:
https://secure.phabricator.com/file/view/PHID-FILE-6183e81286fa3288d33d/
Reviewed By: codeblock
Reviewers: codeblock, hunterbridges, jungejason, tuomaspelkonen, aran
CC: aran, codeblock
Differential Revision: 772
2011-08-03 15:37:18 +02:00
|
|
|
public function setStatus($status) {
|
|
|
|
$this->status = $status;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getStatus() {
|
|
|
|
return $this->status;
|
|
|
|
}
|
|
|
|
|
2011-02-03 02:38:03 +01:00
|
|
|
public function setFullName($full_name) {
|
|
|
|
$this->fullName = $full_name;
|
|
|
|
return $this;
|
|
|
|
}
|
2011-02-03 04:38:43 +01:00
|
|
|
|
2011-02-03 02:38:03 +01:00
|
|
|
public function getFullName() {
|
2011-02-21 05:08:16 +01:00
|
|
|
if ($this->fullName !== null) {
|
|
|
|
return $this->fullName;
|
|
|
|
}
|
|
|
|
return $this->getName();
|
2011-02-03 02:38:03 +01:00
|
|
|
}
|
2013-06-05 00:28:24 +02:00
|
|
|
|
Allow monogrammed objects to be parsed from the `arc` command line in "Reviewers" and similar fields
Summary:
Ref T10939. This allows the CLI to parse reviewers and subscribers like this:
```Reviewers: epriestley, O123 Some Package Name```
The rule goes:
- If a reviewer or subscriber starts with a monogram (like `X111`), just look that up and ignore everything until the next comma.
- Otherwise, split it on spaces and look up each part.
This means that these are valid:
```
alincoln htaft
alincoln, htaft
#a #b epriestley
O123 Some Package, epriestley, #b
```
I think the only real downside is that this:
```
O123 Some Package epriestley
```
...ignores the "epriestley" part. However, I don't expect users to be typing package monograms manually -- they just need to be representable by `arc land` and `arc diff --edit` and such. Those flows will always add commas and make the parse unambiguous.
Test Plan:
- Added test coverage.
- `amend --show`'d a revision with a package subscriber (this isn't currently possible to produce using the web UI, it came from a future change) and saw `Subscribers: O123 package name, usera, userb`.
- Updated a revision with a package subscriber.
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T10939
Differential Revision: https://secure.phabricator.com/D15911
2016-05-13 16:56:52 +02:00
|
|
|
public function setCommandLineObjectName($command_line_object_name) {
|
|
|
|
$this->commandLineObjectName = $command_line_object_name;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getCommandLineObjectName() {
|
|
|
|
if ($this->commandLineObjectName !== null) {
|
|
|
|
return $this->commandLineObjectName;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->getObjectName();
|
|
|
|
}
|
|
|
|
|
2013-04-11 17:15:31 +02:00
|
|
|
public function setTitle($title) {
|
|
|
|
$this->title = $title;
|
|
|
|
return $this;
|
|
|
|
}
|
2013-06-05 00:28:24 +02:00
|
|
|
|
2013-04-11 17:15:31 +02:00
|
|
|
public function getTitle() {
|
|
|
|
return $this->title;
|
|
|
|
}
|
2011-02-03 02:38:03 +01:00
|
|
|
|
2011-01-26 18:02:09 +01:00
|
|
|
public function setType($type) {
|
|
|
|
$this->type = $type;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getType() {
|
|
|
|
return $this->type;
|
|
|
|
}
|
|
|
|
|
2011-02-01 01:00:42 +01:00
|
|
|
public function setImageURI($uri) {
|
|
|
|
$this->imageURI = $uri;
|
|
|
|
return $this;
|
|
|
|
}
|
2011-02-02 22:59:52 +01:00
|
|
|
|
2011-02-01 01:00:42 +01:00
|
|
|
public function getImageURI() {
|
|
|
|
return $this->imageURI;
|
|
|
|
}
|
2011-01-26 18:02:09 +01:00
|
|
|
|
2011-04-23 00:10:42 +02:00
|
|
|
public function setTimestamp($timestamp) {
|
|
|
|
$this->timestamp = $timestamp;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getTimestamp() {
|
|
|
|
return $this->timestamp;
|
|
|
|
}
|
|
|
|
|
Improve search result listing
Summary:
Make it prettier, paginate, add user pictures, show document types, clean some
stuff up a little. Plenty of room for improvement but this should make it a lot
more useful.
Test Plan:
Here's what the new one looks like:
https://secure.phabricator.com/file/view/PHID-FILE-edce2b83c2e3a121c2b7/
Reviewed By: jungejason
Reviewers: tomo, jungejason, aran, tuomaspelkonen, mroch
Commenters: tomo
CC: aran, tomo, jungejason, epriestley
Differential Revision: 545
2011-06-28 23:35:02 +02:00
|
|
|
public function getTypeName() {
|
2013-07-21 16:03:10 +02:00
|
|
|
if ($this->getPHIDType()) {
|
|
|
|
return $this->getPHIDType()->getTypeName();
|
2013-07-21 15:34:21 +02:00
|
|
|
}
|
|
|
|
|
2013-07-26 23:05:19 +02:00
|
|
|
return $this->getType();
|
Improve search result listing
Summary:
Make it prettier, paginate, add user pictures, show document types, clean some
stuff up a little. Plenty of room for improvement but this should make it a lot
more useful.
Test Plan:
Here's what the new one looks like:
https://secure.phabricator.com/file/view/PHID-FILE-edce2b83c2e3a121c2b7/
Reviewed By: jungejason
Reviewers: tomo, jungejason, aran, tuomaspelkonen, mroch
Commenters: tomo
CC: aran, tomo, jungejason, epriestley
Differential Revision: 545
2011-06-28 23:35:02 +02:00
|
|
|
}
|
|
|
|
|
2011-11-16 18:49:18 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Set whether or not the underlying object is complete. See
|
2012-04-20 07:26:27 +02:00
|
|
|
* @{method:isComplete} for an explanation of what it means to be complete.
|
2011-11-16 18:49:18 +01:00
|
|
|
*
|
|
|
|
* @param bool True if the handle represents a complete object.
|
|
|
|
* @return this
|
|
|
|
*/
|
2011-08-30 21:03:58 +02:00
|
|
|
public function setComplete($complete) {
|
|
|
|
$this->complete = $complete;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2011-11-16 18:49:18 +01:00
|
|
|
|
2011-08-30 21:03:58 +02:00
|
|
|
/**
|
|
|
|
* Determine if the handle represents an object which was completely loaded
|
|
|
|
* (i.e., the underlying object exists) vs an object which could not be
|
|
|
|
* completely loaded (e.g., the type or data for the PHID could not be
|
|
|
|
* identified or located).
|
|
|
|
*
|
2013-09-11 21:27:28 +02:00
|
|
|
* Basically, @{class:PhabricatorHandleQuery} gives you back a handle for
|
2011-08-30 21:03:58 +02:00
|
|
|
* any PHID you give it, but it gives you a complete handle only for valid
|
|
|
|
* PHIDs.
|
|
|
|
*
|
|
|
|
* @return bool True if the handle represents a complete object.
|
|
|
|
*/
|
|
|
|
public function isComplete() {
|
|
|
|
return $this->complete;
|
|
|
|
}
|
|
|
|
|
2017-01-12 21:25:36 +01:00
|
|
|
public function setStateIcon($state_icon) {
|
|
|
|
$this->stateIcon = $state_icon;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getStateIcon() {
|
|
|
|
return $this->stateIcon;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setStateColor($state_color) {
|
|
|
|
$this->stateColor = $state_color;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getStateColor() {
|
|
|
|
return $this->stateColor;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setStateName($state_name) {
|
|
|
|
$this->stateName = $state_name;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getStateName() {
|
|
|
|
return $this->stateName;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function renderStateIcon() {
|
|
|
|
$icon = $this->getStateIcon();
|
|
|
|
if ($icon === null) {
|
|
|
|
$icon = 'fa-question-circle-o';
|
|
|
|
}
|
|
|
|
|
|
|
|
$color = $this->getStateColor();
|
|
|
|
|
|
|
|
$name = $this->getStateName();
|
|
|
|
if ($name === null) {
|
|
|
|
$name = pht('Unknown');
|
|
|
|
}
|
|
|
|
|
|
|
|
return id(new PHUIIconView())
|
|
|
|
->setIcon($icon, $color)
|
|
|
|
->addSigil('has-tooltip')
|
|
|
|
->setMetadata(
|
|
|
|
array(
|
|
|
|
'tip' => $name,
|
|
|
|
));
|
|
|
|
}
|
2011-11-16 18:49:18 +01:00
|
|
|
|
2013-04-06 20:40:43 +02:00
|
|
|
public function renderLink($name = null) {
|
2015-12-24 19:14:10 +01:00
|
|
|
return $this->renderLinkWithAttributes($name, array());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function renderHovercardLink($name = null) {
|
2016-02-03 17:26:30 +01:00
|
|
|
Javelin::initBehavior('phui-hovercards');
|
2015-12-24 19:14:10 +01:00
|
|
|
|
|
|
|
$attributes = array(
|
|
|
|
'sigil' => 'hovercard',
|
|
|
|
'meta' => array(
|
|
|
|
'hoverPHID' => $this->getPHID(),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
return $this->renderLinkWithAttributes($name, $attributes);
|
|
|
|
}
|
|
|
|
|
|
|
|
private function renderLinkWithAttributes($name, array $attributes) {
|
2013-04-06 20:40:43 +02:00
|
|
|
if ($name === null) {
|
|
|
|
$name = $this->getLinkName();
|
|
|
|
}
|
2013-08-06 18:20:04 +02:00
|
|
|
$classes = array();
|
2013-10-17 19:49:21 +02:00
|
|
|
$classes[] = 'phui-handle';
|
2013-04-11 17:15:31 +02:00
|
|
|
$title = $this->title;
|
2012-01-17 01:54:05 +01:00
|
|
|
|
2015-05-14 20:14:44 +02:00
|
|
|
if ($this->status != self::STATUS_OPEN) {
|
2013-08-06 18:20:04 +02:00
|
|
|
$classes[] = 'handle-status-'.$this->status;
|
2012-01-17 01:54:05 +01:00
|
|
|
}
|
|
|
|
|
2016-11-10 02:05:41 +01:00
|
|
|
$circle = null;
|
2015-05-14 20:14:44 +02:00
|
|
|
if ($this->availability != self::AVAILABILITY_FULL) {
|
|
|
|
$classes[] = 'handle-availability-'.$this->availability;
|
2016-11-10 02:05:41 +01:00
|
|
|
$circle = array(
|
|
|
|
phutil_tag(
|
|
|
|
'span',
|
|
|
|
array(
|
|
|
|
'class' => 'perfect-circle',
|
|
|
|
),
|
|
|
|
"\xE2\x80\xA2"),
|
|
|
|
' ',
|
|
|
|
);
|
Add object status to Handles
Summary:
We use ObjectHandles as proxy objects which can refer to any other object in the
system. Add the concept of the underlying object's "status" (e.g., open, closed
or busy).
This allows us to render completed tasks and revisions with strikethrough. In
the future, if we implement OOO or something, we could render users with a
"busy" status if they're on vacation, etc.
Test Plan: Viewed a task with closed revisions and dependencies:
https://secure.phabricator.com/file/view/PHID-FILE-6183e81286fa3288d33d/
Reviewed By: codeblock
Reviewers: codeblock, hunterbridges, jungejason, tuomaspelkonen, aran
CC: aran, codeblock
Differential Revision: 772
2011-08-03 15:37:18 +02:00
|
|
|
}
|
|
|
|
|
2014-07-24 00:05:46 +02:00
|
|
|
if ($this->getType() == PhabricatorPeopleUserPHIDType::TYPECONST) {
|
2013-08-06 18:20:04 +02:00
|
|
|
$classes[] = 'phui-link-person';
|
|
|
|
}
|
|
|
|
|
2013-10-17 19:49:21 +02:00
|
|
|
$uri = $this->getURI();
|
|
|
|
|
|
|
|
$icon = null;
|
|
|
|
if ($this->getPolicyFiltered()) {
|
|
|
|
$icon = id(new PHUIIconView())
|
2016-01-28 05:38:01 +01:00
|
|
|
->setIcon('fa-lock lightgreytext');
|
2013-10-17 19:49:21 +02:00
|
|
|
}
|
|
|
|
|
2015-12-24 19:14:10 +01:00
|
|
|
$attributes = $attributes + array(
|
|
|
|
'href' => $uri,
|
|
|
|
'class' => implode(' ', $classes),
|
|
|
|
'title' => $title,
|
|
|
|
);
|
|
|
|
|
|
|
|
return javelin_tag(
|
2013-10-17 19:49:21 +02:00
|
|
|
$uri ? 'a' : 'span',
|
2015-12-24 19:14:10 +01:00
|
|
|
$attributes,
|
2016-11-10 02:05:41 +01:00
|
|
|
array($circle, $icon, $name));
|
2011-01-27 23:55:52 +01:00
|
|
|
}
|
2011-01-26 18:02:09 +01:00
|
|
|
|
2014-06-26 07:01:42 +02:00
|
|
|
public function renderTag() {
|
|
|
|
return id(new PHUITagView())
|
2017-05-22 19:03:30 +02:00
|
|
|
->setType(PHUITagView::TYPE_SHADE)
|
|
|
|
->setColor($this->getTagColor())
|
2014-06-26 07:01:58 +02:00
|
|
|
->setIcon($this->getIcon())
|
2014-06-26 07:01:42 +02:00
|
|
|
->setHref($this->getURI())
|
|
|
|
->setName($this->getLinkName());
|
|
|
|
}
|
|
|
|
|
2012-01-30 13:12:15 +01:00
|
|
|
public function getLinkName() {
|
|
|
|
switch ($this->getType()) {
|
2014-07-24 00:05:46 +02:00
|
|
|
case PhabricatorPeopleUserPHIDType::TYPECONST:
|
2012-01-30 13:12:15 +01:00
|
|
|
$name = $this->getName();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$name = $this->getFullName();
|
2012-03-08 21:46:29 +01:00
|
|
|
break;
|
2012-01-30 13:12:15 +01:00
|
|
|
}
|
|
|
|
return $name;
|
|
|
|
}
|
|
|
|
|
2013-07-21 16:03:10 +02:00
|
|
|
protected function getPHIDType() {
|
|
|
|
$types = PhabricatorPHIDType::getAllTypes();
|
|
|
|
return idx($types, $this->getType());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* -( PhabricatorPolicyInterface )----------------------------------------- */
|
|
|
|
|
|
|
|
|
|
|
|
public function getCapabilities() {
|
|
|
|
return array(
|
|
|
|
PhabricatorPolicyCapability::CAN_VIEW,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getPolicy($capability) {
|
|
|
|
return PhabricatorPolicies::POLICY_PUBLIC;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
|
2013-08-07 22:29:09 +02:00
|
|
|
// NOTE: Handles are always visible, they just don't get populated with
|
|
|
|
// data if the user can't see the underlying object.
|
|
|
|
return true;
|
2013-07-21 16:03:10 +02:00
|
|
|
}
|
|
|
|
|
2013-09-27 17:43:41 +02:00
|
|
|
public function describeAutomaticCapability($capability) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2011-01-26 18:02:09 +01:00
|
|
|
}
|