Make the Phriction "History" view more aware of drafts

Summary: Ref T13077. Updates the "History" view to be slightly better organized and draft-aware.

Test Plan: Viewed page history in Phriction.

Reviewers: amckinley

Maniphest Tasks: T13077

Differential Revision: https://secure.phabricator.com/D19626
This commit is contained in:
epriestley 2018-08-29 15:46:13 -07:00
parent 3b1294cf45
commit 18e8d9a452
2 changed files with 75 additions and 60 deletions

View file

@ -31,32 +31,18 @@ final class PhrictionHistoryController
->executeWithCursorPager($pager); ->executeWithCursorPager($pager);
$author_phids = mpull($history, 'getAuthorPHID'); $author_phids = mpull($history, 'getAuthorPHID');
$handles = $this->loadViewerHandles($author_phids); $handles = $viewer->loadHandles($author_phids);
$max_version = (int)$document->getMaxVersion();
$current_version = $document->getContent()->getVersion();
$list = new PHUIObjectItemListView(); $list = new PHUIObjectItemListView();
$list->setFlush(true); $list->setFlush(true);
foreach ($history as $content) { foreach ($history as $content) {
$author = $handles[$content->getAuthorPHID()]->renderLink();
$slug_uri = PhrictionDocument::getSlugURI($document->getSlug()); $slug_uri = PhrictionDocument::getSlugURI($document->getSlug());
$version = $content->getVersion(); $version = $content->getVersion();
$diff_uri = new PhutilURI('/phriction/diff/'.$document->getID().'/'); $base_uri = new PhutilURI('/phriction/diff/'.$document->getID().'/');
$vs_previous = null;
if ($content->getVersion() != 1) {
$vs_previous = $diff_uri
->alter('l', $content->getVersion() - 1)
->alter('r', $content->getVersion());
}
$vs_head = null;
if ($content->getPHID() != $document->getContentPHID()) {
$vs_head = $diff_uri
->alter('l', $content->getVersion())
->alter('r', $current->getVersion());
}
$change_type = PhrictionChangeType::getChangeTypeLabel( $change_type = PhrictionChangeType::getChangeTypeLabel(
$content->getChangeType()); $content->getChangeType());
@ -68,63 +54,90 @@ final class PhrictionHistoryController
$color = 'lightbluetext'; $color = 'lightbluetext';
break; break;
case PhrictionChangeType::CHANGE_MOVE_HERE: case PhrictionChangeType::CHANGE_MOVE_HERE:
$color = 'yellow'; $color = 'yellow';
break; break;
case PhrictionChangeType::CHANGE_MOVE_AWAY: case PhrictionChangeType::CHANGE_MOVE_AWAY:
$color = 'orange'; $color = 'orange';
break; break;
case PhrictionChangeType::CHANGE_STUB: case PhrictionChangeType::CHANGE_STUB:
$color = 'green'; $color = 'green';
break; break;
default: default:
throw new Exception(pht('Unknown change type!')); $color = 'indigo';
break; break;
} }
$version_uri = $slug_uri.'?v='.$version;
$item = id(new PHUIObjectItemView()) $item = id(new PHUIObjectItemView())
->setHeader(pht('%s by %s', $change_type, $author)) ->setHref($version_uri);
->setStatusIcon('fa-file '.$color)
->addAttribute(
phutil_tag(
'a',
array(
'href' => $slug_uri.'?v='.$version,
),
pht('Version %s', $version)))
->addAttribute(pht('%s %s',
phabricator_date($content->getDateCreated(), $viewer),
phabricator_time($content->getDateCreated(), $viewer)));
if ($content->getDescription()) { if ($version > $current_version) {
$item->addAttribute($content->getDescription()); $icon = 'fa-spinner';
} $color = 'pink';
$header = pht('Draft %d', $version);
if ($vs_previous) {
$item->addIcon(
'fa-reply',
pht('Show Change'),
array(
'href' => $vs_previous,
));
} else { } else {
$item->addIcon( $icon = 'fa-file-o';
'fa-reply grey', $header = pht('Version %d', $version);
phutil_tag('em', array(), pht('No previous change')));
} }
if ($vs_head) { if ($version == $current_version) {
$item->addIcon( $item->setEffect('selected');
'fa-reply-all',
pht('Show Later Changes'),
array(
'href' => $vs_head,
));
} else {
$item->addIcon(
'fa-reply-all grey',
phutil_tag('em', array(), pht('No later changes')));
} }
$item
->setHeader($header)
->setStatusIcon($icon.' '.$color);
$description = $content->getDescription();
if (strlen($description)) {
$item->addAttribute($description);
}
$item->addIcon(
null,
phabricator_datetime($content->getDateCreated(), $viewer));
$author_phid = $content->getAuthorPHID();
$item->addByline($viewer->renderHandle($author_phid));
$diff_uri = null;
if ($version > 1) {
$diff_uri = $base_uri
->alter('l', $version - 1)
->alter('r', $version);
} else {
$diff_uri = null;
}
if ($content->getVersion() != $max_version) {
$compare_uri = $base_uri
->alter('l', $version)
->alter('r', $max_version);
} else {
$compare_uri = null;
}
$button_bar = id(new PHUIButtonBarView())
->addButton(
id(new PHUIButtonView())
->setTag('a')
->setColor('grey')
->setIcon('fa-chevron-down')
->setDisabled(!$diff_uri)
->setHref($diff_uri)
->setText(pht('Diff')))
->addButton(
id(new PHUIButtonView())
->setTag('a')
->setColor('grey')
->setIcon('fa-chevron-circle-up')
->setDisabled(!$compare_uri)
->setHref($compare_uri)
->setText(pht('Compare')));
$item->setSideColumn($button_bar);
$list->addItem($item); $list->addItem($item);
} }

View file

@ -709,8 +709,9 @@ final class PHUIObjectItemView extends AphrontTagView {
} }
/* Fixed width, right column container. */ /* Fixed width, right column container. */
$column3 = null;
if ($this->sideColumn) { if ($this->sideColumn) {
$column2 = phutil_tag( $column3 = phutil_tag(
'div', 'div',
array( array(
'class' => 'phui-oi-col2 phui-oi-side-column', 'class' => 'phui-oi-col2 phui-oi-side-column',
@ -731,6 +732,7 @@ final class PHUIObjectItemView extends AphrontTagView {
$column0, $column0,
$column1, $column1,
$column2, $column2,
$column3,
))); )));
$box = phutil_tag( $box = phutil_tag(