mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-15 09:11:07 +01:00
02e1dc7443
Summary: The feed handler in the IRC bot calls Conduit to render feed stories, which sometimes end up here with no user. "Fix" it. This patch is really bad but the underlying code is a mess too. Fixing this is properly is blocked on T2222/T2217. Until those land, stop fataling at least. Test Plan: @dctrwatson confirmed this fixed things. Reviewers: dctrwatson, btrahan Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D6497
245 lines
5.1 KiB
PHP
245 lines
5.1 KiB
PHP
<?php
|
|
|
|
final class PHUIFeedStoryView extends AphrontView {
|
|
|
|
private $title;
|
|
private $image;
|
|
private $imageHref;
|
|
private $appIcon;
|
|
private $phid;
|
|
private $epoch;
|
|
private $viewed;
|
|
private $href;
|
|
private $pontification = null;
|
|
private $tokenBar = array();
|
|
private $projects = array();
|
|
private $actions = array();
|
|
private $chronologicalKey;
|
|
|
|
public function setChronologicalKey($chronological_key) {
|
|
$this->chronologicalKey = $chronological_key;
|
|
return $this;
|
|
}
|
|
|
|
public function getChronologicalKey() {
|
|
return $this->chronologicalKey;
|
|
}
|
|
|
|
public function setTitle($title) {
|
|
$this->title = $title;
|
|
return $this;
|
|
}
|
|
|
|
public function setEpoch($epoch) {
|
|
$this->epoch = $epoch;
|
|
return $this;
|
|
}
|
|
|
|
public function setImage($image) {
|
|
$this->image = $image;
|
|
return $this;
|
|
}
|
|
|
|
public function setImageHref($image_href) {
|
|
$this->imageHref = $image_href;
|
|
return $this;
|
|
}
|
|
|
|
public function setAppIcon($icon) {
|
|
$this->appIcon = $icon;
|
|
return $this;
|
|
}
|
|
|
|
public function setViewed($viewed) {
|
|
$this->viewed = $viewed;
|
|
return $this;
|
|
}
|
|
|
|
public function getViewed() {
|
|
return $this->viewed;
|
|
}
|
|
|
|
public function setHref($href) {
|
|
$this->href = $href;
|
|
return $this;
|
|
}
|
|
|
|
public function setTokenBar(array $tokens) {
|
|
$this->tokenBar = $tokens;
|
|
return $this;
|
|
}
|
|
|
|
public function addProject($project) {
|
|
$this->projects[] = $project;
|
|
return $this;
|
|
}
|
|
|
|
public function addAction(PHUIIconView $action) {
|
|
$this->actions[] = $action;
|
|
return $this;
|
|
}
|
|
|
|
public function setPontification($text, $title = null) {
|
|
if ($title) {
|
|
$title = phutil_tag('h3', array(), $title);
|
|
}
|
|
$copy = phutil_tag(
|
|
'div',
|
|
array(
|
|
'class' => 'phui-feed-story-bigtext-post',
|
|
),
|
|
array(
|
|
$title,
|
|
$text));
|
|
$this->appendChild($copy);
|
|
return $this;
|
|
}
|
|
|
|
public function getHref() {
|
|
return $this->href;
|
|
}
|
|
|
|
public function renderNotification() {
|
|
$classes = array(
|
|
'phabricator-notification',
|
|
);
|
|
|
|
if (!$this->viewed) {
|
|
$classes[] = 'phabricator-notification-unread';
|
|
}
|
|
|
|
return javelin_tag(
|
|
'div',
|
|
array(
|
|
'class' => implode(' ', $classes),
|
|
'sigil' => 'notification',
|
|
'meta' => array(
|
|
'href' => $this->getHref(),
|
|
),
|
|
),
|
|
$this->title);
|
|
}
|
|
|
|
public function render() {
|
|
|
|
require_celerity_resource('phui-feed-story-css');
|
|
|
|
$actor = '';
|
|
if ($this->image) {
|
|
$actor = new PHUIIconView();
|
|
$actor->setImage($this->image);
|
|
$actor->addClass('phui-feed-story-actor-image');
|
|
if ($this->imageHref) {
|
|
$actor->setHref($this->imageHref);
|
|
}
|
|
}
|
|
|
|
$action_list = array();
|
|
$icons = null;
|
|
foreach ($this->actions as $action) {
|
|
$action_list[] = phutil_tag(
|
|
'li',
|
|
array(
|
|
'class' => 'phui-feed-story-action-item'
|
|
),
|
|
$action);
|
|
}
|
|
if (!empty($action_list)) {
|
|
$icons = phutil_tag(
|
|
'ul',
|
|
array(
|
|
'class' => 'phui-feed-story-action-list'
|
|
),
|
|
$action_list);
|
|
}
|
|
|
|
$head = phutil_tag(
|
|
'div',
|
|
array(
|
|
'class' => 'phui-feed-story-head',
|
|
),
|
|
array(
|
|
$actor,
|
|
nonempty($this->title, pht('Untitled Story')),
|
|
$icons
|
|
));
|
|
|
|
$body = null;
|
|
$foot = null;
|
|
$image_style = null;
|
|
|
|
if (!empty($this->tokenBar)) {
|
|
$tokenview = phutil_tag(
|
|
'div',
|
|
array(
|
|
'class' => 'phui-feed-token-bar'
|
|
),
|
|
$this->tokenBar);
|
|
$this->appendChild($tokenview);
|
|
}
|
|
|
|
$body_content = $this->renderChildren();
|
|
if ($body_content) {
|
|
$body = phutil_tag(
|
|
'div',
|
|
array(
|
|
'class' => 'phui-feed-story-body',
|
|
),
|
|
$body_content);
|
|
}
|
|
|
|
if ($this->epoch) {
|
|
// TODO: This is really bad; when rendering through Conduit and via
|
|
// renderText() we don't have a user.
|
|
if ($this->user) {
|
|
$foot = phabricator_datetime($this->epoch, $this->user);
|
|
} else {
|
|
$foot = null;
|
|
}
|
|
} else {
|
|
$foot = pht('No time specified.');
|
|
}
|
|
|
|
if ($this->chronologicalKey) {
|
|
$foot = phutil_tag(
|
|
'a',
|
|
array(
|
|
'href' => '/feed/'.$this->chronologicalKey.'/',
|
|
),
|
|
$foot);
|
|
}
|
|
|
|
$icon = null;
|
|
if ($this->appIcon) {
|
|
$icon = new PHUIIconView();
|
|
$icon->setSpriteIcon($this->appIcon);
|
|
$icon->setSpriteSheet(PHUIIconView::SPRITE_APPS);
|
|
}
|
|
|
|
$foot = phutil_tag(
|
|
'div',
|
|
array(
|
|
'class' => 'phui-feed-story-foot',
|
|
),
|
|
array(
|
|
$icon,
|
|
$foot));
|
|
|
|
return id(new PHUIBoxView())
|
|
->addClass('phui-feed-story')
|
|
->setShadow(true)
|
|
->addMargin(PHUI::MARGIN_MEDIUM_BOTTOM)
|
|
->appendChild(array($head, $body, $foot));
|
|
}
|
|
|
|
public function setAppIconFromPHID($phid) {
|
|
switch (phid_get_type($phid)) {
|
|
case PhabricatorPHIDConstants::PHID_TYPE_MOCK:
|
|
$this->setAppIcon("pholio-dark");
|
|
break;
|
|
case PhabricatorPHIDConstants::PHID_TYPE_MCRO:
|
|
$this->setAppIcon("macro-dark");
|
|
break;
|
|
}
|
|
}
|
|
}
|