2012-08-15 19:45:06 +02:00
|
|
|
<?php
|
|
|
|
|
2015-05-12 15:55:46 +02:00
|
|
|
final class PHUIHeaderView extends AphrontTagView {
|
2013-09-17 18:12:37 +02:00
|
|
|
|
2013-09-24 17:42:04 +02:00
|
|
|
const PROPERTY_STATUS = 1;
|
2012-08-15 19:45:06 +02:00
|
|
|
|
|
|
|
private $objectName;
|
|
|
|
private $header;
|
Modernize Macro application
Summary: Adds feed, email, notifications, comments, partial editing, subscriptions, enable/disable, flags and crumbs to Macro.
Test Plan:
{F26839}
{F26840}
{F26841}
{F26842}
{F26843}
{F26844}
{F26845}
Reviewers: vrana, btrahan, chad
Reviewed By: vrana
CC: aran
Maniphest Tasks: T2157, T175, T2104
Differential Revision: https://secure.phabricator.com/D4141
2012-12-11 23:01:03 +01:00
|
|
|
private $tags = array();
|
2013-07-10 01:23:22 +02:00
|
|
|
private $image;
|
2014-05-08 23:21:32 +02:00
|
|
|
private $imageURL = null;
|
2013-07-10 01:23:22 +02:00
|
|
|
private $subheader;
|
2014-06-24 18:39:32 +02:00
|
|
|
private $headerColor;
|
2013-09-05 21:29:07 +02:00
|
|
|
private $noBackground;
|
|
|
|
private $bleedHeader;
|
2013-09-19 20:56:58 +02:00
|
|
|
private $properties = array();
|
2013-12-03 17:34:04 +01:00
|
|
|
private $actionLinks = array();
|
2014-02-16 18:25:29 +01:00
|
|
|
private $buttonBar = null;
|
2013-09-19 20:56:58 +02:00
|
|
|
private $policyObject;
|
Add setEpoch for PHUIHeaderView, use in all Documents
Summary: Sets a consistent last update time in the header of PHUIDocuments, Legalpad, Diviner, Phriction. I'm not set on the exact language, just that there is consistency, feel free to suggest changes.
Test Plan:
Test Legalpad, Diviner, Phriction.
{F368270}
Reviewers: btrahan, epriestley
Reviewed By: epriestley
Subscribers: Korvin, epriestley
Differential Revision: https://secure.phabricator.com/D12384
2015-04-13 03:08:09 +02:00
|
|
|
private $epoch;
|
2012-08-15 19:45:06 +02:00
|
|
|
|
|
|
|
public function setHeader($header) {
|
|
|
|
$this->header = $header;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setObjectName($object_name) {
|
|
|
|
$this->objectName = $object_name;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-09-05 21:29:07 +02:00
|
|
|
public function setNoBackground($nada) {
|
|
|
|
$this->noBackground = $nada;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2014-01-14 23:09:52 +01:00
|
|
|
public function addTag(PHUITagView $tag) {
|
Modernize Macro application
Summary: Adds feed, email, notifications, comments, partial editing, subscriptions, enable/disable, flags and crumbs to Macro.
Test Plan:
{F26839}
{F26840}
{F26841}
{F26842}
{F26843}
{F26844}
{F26845}
Reviewers: vrana, btrahan, chad
Reviewed By: vrana
CC: aran
Maniphest Tasks: T2157, T175, T2104
Differential Revision: https://secure.phabricator.com/D4141
2012-12-11 23:01:03 +01:00
|
|
|
$this->tags[] = $tag;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-07-10 01:23:22 +02:00
|
|
|
public function setImage($uri) {
|
|
|
|
$this->image = $uri;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2014-05-08 23:21:32 +02:00
|
|
|
public function setImageURL($url) {
|
|
|
|
$this->imageURL = $url;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-07-10 01:23:22 +02:00
|
|
|
public function setSubheader($subheader) {
|
|
|
|
$this->subheader = $subheader;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-09-05 21:29:07 +02:00
|
|
|
public function setBleedHeader($bleed) {
|
|
|
|
$this->bleedHeader = $bleed;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2014-06-24 18:39:32 +02:00
|
|
|
public function setHeaderColor($color) {
|
|
|
|
$this->headerColor = $color;
|
2013-08-28 19:29:02 +02:00
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-09-19 20:56:58 +02:00
|
|
|
public function setPolicyObject(PhabricatorPolicyInterface $object) {
|
|
|
|
$this->policyObject = $object;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-09-17 18:12:37 +02:00
|
|
|
public function addProperty($property, $value) {
|
|
|
|
$this->properties[$property] = $value;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-12-03 17:34:04 +01:00
|
|
|
public function addActionLink(PHUIButtonView $button) {
|
|
|
|
$this->actionLinks[] = $button;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2014-02-16 18:25:29 +01:00
|
|
|
public function setButtonBar(PHUIButtonBarView $bb) {
|
|
|
|
$this->buttonBar = $bb;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2013-10-07 02:10:29 +02:00
|
|
|
public function setStatus($icon, $color, $name) {
|
|
|
|
$header_class = 'phui-header-status';
|
|
|
|
|
|
|
|
if ($color) {
|
2014-05-19 01:10:54 +02:00
|
|
|
$icon = $icon.' '.$color;
|
2013-10-07 02:10:29 +02:00
|
|
|
$header_class = $header_class.'-'.$color;
|
|
|
|
}
|
|
|
|
|
|
|
|
$img = id(new PHUIIconView())
|
2014-05-19 01:10:54 +02:00
|
|
|
->setIconFont($icon);
|
2013-10-07 02:10:29 +02:00
|
|
|
|
|
|
|
$tag = phutil_tag(
|
|
|
|
'span',
|
|
|
|
array(
|
|
|
|
'class' => "{$header_class} plr",
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
$img,
|
|
|
|
$name,
|
|
|
|
));
|
|
|
|
|
|
|
|
return $this->addProperty(self::PROPERTY_STATUS, $tag);
|
|
|
|
}
|
|
|
|
|
Add setEpoch for PHUIHeaderView, use in all Documents
Summary: Sets a consistent last update time in the header of PHUIDocuments, Legalpad, Diviner, Phriction. I'm not set on the exact language, just that there is consistency, feel free to suggest changes.
Test Plan:
Test Legalpad, Diviner, Phriction.
{F368270}
Reviewers: btrahan, epriestley
Reviewed By: epriestley
Subscribers: Korvin, epriestley
Differential Revision: https://secure.phabricator.com/D12384
2015-04-13 03:08:09 +02:00
|
|
|
public function setEpoch($epoch) {
|
|
|
|
$age = time() - $epoch;
|
|
|
|
$age = floor($age / (60 * 60 * 24));
|
|
|
|
if ($age < 1) {
|
|
|
|
$when = pht('Today');
|
|
|
|
} else if ($age == 1) {
|
|
|
|
$when = pht('Yesterday');
|
|
|
|
} else {
|
|
|
|
$when = pht('%d Days Ago', $age);
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->setStatus('fa-clock-o bluegrey', null, pht('Updated %s', $when));
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2015-05-12 15:55:46 +02:00
|
|
|
protected function getTagName() {
|
|
|
|
return 'div';
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getTagAttributes() {
|
2013-09-17 18:12:37 +02:00
|
|
|
require_celerity_resource('phui-header-view-css');
|
2012-08-15 19:45:06 +02:00
|
|
|
|
2013-07-10 14:11:08 +02:00
|
|
|
$classes = array();
|
2013-09-17 18:12:37 +02:00
|
|
|
$classes[] = 'phui-header-shell';
|
2013-07-10 14:11:08 +02:00
|
|
|
|
2013-09-05 21:29:07 +02:00
|
|
|
if ($this->noBackground) {
|
2013-09-17 18:12:37 +02:00
|
|
|
$classes[] = 'phui-header-no-backgound';
|
2013-09-05 21:29:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->bleedHeader) {
|
2013-09-18 23:57:34 +02:00
|
|
|
$classes[] = 'phui-bleed-header';
|
2013-09-05 21:29:07 +02:00
|
|
|
}
|
|
|
|
|
2014-06-24 18:39:32 +02:00
|
|
|
if ($this->headerColor) {
|
2013-08-28 19:29:02 +02:00
|
|
|
$classes[] = 'sprite-gradient';
|
2014-06-24 18:39:32 +02:00
|
|
|
$classes[] = 'gradient-'.$this->headerColor.'-header';
|
2013-08-28 19:29:02 +02:00
|
|
|
}
|
|
|
|
|
2013-09-19 20:56:58 +02:00
|
|
|
if ($this->properties || $this->policyObject || $this->subheader) {
|
2013-09-17 18:12:37 +02:00
|
|
|
$classes[] = 'phui-header-tall';
|
|
|
|
}
|
|
|
|
|
2015-05-12 15:55:46 +02:00
|
|
|
if ($this->image) {
|
|
|
|
$classes[] = 'phui-header-has-image';
|
|
|
|
}
|
|
|
|
|
|
|
|
return array(
|
|
|
|
'class' => $classes,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getTagContent() {
|
2013-07-10 01:23:22 +02:00
|
|
|
$image = null;
|
|
|
|
if ($this->image) {
|
|
|
|
$image = phutil_tag(
|
2014-05-08 23:21:32 +02:00
|
|
|
($this->imageURL ? 'a' : 'span'),
|
2013-07-10 01:23:22 +02:00
|
|
|
array(
|
2014-05-08 23:21:32 +02:00
|
|
|
'href' => $this->imageURL,
|
2013-09-17 18:12:37 +02:00
|
|
|
'class' => 'phui-header-image',
|
2013-07-10 01:23:22 +02:00
|
|
|
'style' => 'background-image: url('.$this->image.')',
|
|
|
|
),
|
2014-05-08 23:21:32 +02:00
|
|
|
' ');
|
2013-07-10 01:23:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
$header = array();
|
2015-01-14 01:10:57 +01:00
|
|
|
|
2015-06-05 19:42:49 +02:00
|
|
|
$header[] = $this->renderObjectSpaceInformation();
|
|
|
|
|
|
|
|
if ($this->objectName) {
|
|
|
|
$header[] = array(
|
|
|
|
phutil_tag(
|
|
|
|
'a',
|
|
|
|
array(
|
|
|
|
'href' => '/'.$this->objectName,
|
|
|
|
),
|
|
|
|
$this->objectName),
|
|
|
|
' ',
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2015-01-14 01:10:57 +01:00
|
|
|
if ($this->actionLinks) {
|
|
|
|
$actions = array();
|
|
|
|
foreach ($this->actionLinks as $button) {
|
|
|
|
$button->setColor(PHUIButtonView::SIMPLE);
|
|
|
|
$button->addClass(PHUI::MARGIN_SMALL_LEFT);
|
|
|
|
$button->addClass('phui-header-action-link');
|
|
|
|
$actions[] = $button;
|
|
|
|
}
|
|
|
|
$header[] = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'phui-header-action-links',
|
|
|
|
),
|
|
|
|
$actions);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->buttonBar) {
|
|
|
|
$header[] = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'phui-header-action-links',
|
|
|
|
),
|
|
|
|
$this->buttonBar);
|
|
|
|
}
|
2013-07-10 01:23:22 +02:00
|
|
|
$header[] = $this->header;
|
2012-08-15 19:45:06 +02:00
|
|
|
|
Modernize Macro application
Summary: Adds feed, email, notifications, comments, partial editing, subscriptions, enable/disable, flags and crumbs to Macro.
Test Plan:
{F26839}
{F26840}
{F26841}
{F26842}
{F26843}
{F26844}
{F26845}
Reviewers: vrana, btrahan, chad
Reviewed By: vrana
CC: aran
Maniphest Tasks: T2157, T175, T2104
Differential Revision: https://secure.phabricator.com/D4141
2012-12-11 23:01:03 +01:00
|
|
|
if ($this->tags) {
|
2013-03-30 18:10:30 +01:00
|
|
|
$header[] = ' ';
|
2013-01-25 21:57:47 +01:00
|
|
|
$header[] = phutil_tag(
|
2012-12-11 23:01:35 +01:00
|
|
|
'span',
|
Modernize Macro application
Summary: Adds feed, email, notifications, comments, partial editing, subscriptions, enable/disable, flags and crumbs to Macro.
Test Plan:
{F26839}
{F26840}
{F26841}
{F26842}
{F26843}
{F26844}
{F26845}
Reviewers: vrana, btrahan, chad
Reviewed By: vrana
CC: aran
Maniphest Tasks: T2157, T175, T2104
Differential Revision: https://secure.phabricator.com/D4141
2012-12-11 23:01:03 +01:00
|
|
|
array(
|
2013-09-17 18:12:37 +02:00
|
|
|
'class' => 'phui-header-tags',
|
Modernize Macro application
Summary: Adds feed, email, notifications, comments, partial editing, subscriptions, enable/disable, flags and crumbs to Macro.
Test Plan:
{F26839}
{F26840}
{F26841}
{F26842}
{F26843}
{F26844}
{F26845}
Reviewers: vrana, btrahan, chad
Reviewed By: vrana
CC: aran
Maniphest Tasks: T2157, T175, T2104
Differential Revision: https://secure.phabricator.com/D4141
2012-12-11 23:01:03 +01:00
|
|
|
),
|
2013-03-30 18:10:30 +01:00
|
|
|
array_interleave(' ', $this->tags));
|
Modernize Macro application
Summary: Adds feed, email, notifications, comments, partial editing, subscriptions, enable/disable, flags and crumbs to Macro.
Test Plan:
{F26839}
{F26840}
{F26841}
{F26842}
{F26843}
{F26844}
{F26845}
Reviewers: vrana, btrahan, chad
Reviewed By: vrana
CC: aran
Maniphest Tasks: T2157, T175, T2104
Differential Revision: https://secure.phabricator.com/D4141
2012-12-11 23:01:03 +01:00
|
|
|
}
|
|
|
|
|
2013-07-10 01:23:22 +02:00
|
|
|
if ($this->subheader) {
|
|
|
|
$header[] = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
2013-09-17 18:12:37 +02:00
|
|
|
'class' => 'phui-header-subheader',
|
2013-07-10 01:23:22 +02:00
|
|
|
),
|
|
|
|
$this->subheader);
|
|
|
|
}
|
|
|
|
|
2013-09-19 20:56:58 +02:00
|
|
|
if ($this->properties || $this->policyObject) {
|
2013-09-17 18:12:37 +02:00
|
|
|
$property_list = array();
|
|
|
|
foreach ($this->properties as $type => $property) {
|
|
|
|
switch ($type) {
|
2013-09-24 17:42:04 +02:00
|
|
|
case self::PROPERTY_STATUS:
|
2013-09-17 18:12:37 +02:00
|
|
|
$property_list[] = $property;
|
|
|
|
break;
|
|
|
|
default:
|
2015-05-22 09:27:56 +02:00
|
|
|
throw new Exception(pht('Incorrect Property Passed'));
|
2013-09-17 18:12:37 +02:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-09-19 20:56:58 +02:00
|
|
|
if ($this->policyObject) {
|
2013-09-27 17:43:41 +02:00
|
|
|
$property_list[] = $this->renderPolicyProperty($this->policyObject);
|
2013-09-19 20:56:58 +02:00
|
|
|
}
|
|
|
|
|
2013-09-17 18:12:37 +02:00
|
|
|
$header[] = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'phui-header-subheader',
|
|
|
|
),
|
|
|
|
$property_list);
|
|
|
|
}
|
|
|
|
|
2015-05-12 15:55:46 +02:00
|
|
|
return array(
|
|
|
|
$image,
|
|
|
|
phutil_tag(
|
|
|
|
'h1',
|
|
|
|
array(
|
|
|
|
'class' => 'phui-header-view grouped',
|
|
|
|
),
|
|
|
|
$header),
|
|
|
|
);
|
2012-08-15 19:45:06 +02:00
|
|
|
}
|
|
|
|
|
2013-09-27 17:43:41 +02:00
|
|
|
private function renderPolicyProperty(PhabricatorPolicyInterface $object) {
|
2015-06-05 19:42:49 +02:00
|
|
|
$viewer = $this->getUser();
|
|
|
|
|
|
|
|
$policies = PhabricatorPolicyQuery::loadPolicies($viewer, $object);
|
2012-08-15 19:45:06 +02:00
|
|
|
|
2013-09-27 17:43:41 +02:00
|
|
|
$view_capability = PhabricatorPolicyCapability::CAN_VIEW;
|
|
|
|
$policy = idx($policies, $view_capability);
|
|
|
|
if (!$policy) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
$phid = $object->getPHID();
|
|
|
|
|
|
|
|
$icon = id(new PHUIIconView())
|
2014-05-19 01:10:54 +02:00
|
|
|
->setIconFont($policy->getIcon().' bluegrey');
|
2013-09-27 17:43:41 +02:00
|
|
|
|
|
|
|
$link = javelin_tag(
|
|
|
|
'a',
|
|
|
|
array(
|
2013-09-29 00:55:38 +02:00
|
|
|
'class' => 'policy-link',
|
2013-09-27 17:43:41 +02:00
|
|
|
'href' => '/policy/explain/'.$phid.'/'.$view_capability.'/',
|
|
|
|
'sigil' => 'workflow',
|
|
|
|
),
|
2013-10-14 23:17:25 +02:00
|
|
|
$policy->getShortName());
|
2013-09-27 17:43:41 +02:00
|
|
|
|
|
|
|
return array($icon, $link);
|
|
|
|
}
|
2015-06-05 19:42:49 +02:00
|
|
|
|
|
|
|
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),
|
|
|
|
' | ',
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-08-15 19:45:06 +02:00
|
|
|
}
|