Summary: Ref T8989, Phurl URL should always show an info banner if the URL isn't valid Test Plan: Phurl objects with URL "google.com" should show an error banner, but objects with URL "http://google.com" should not show banner. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: Korvin Maniphest Tasks: T8989 Differential Revision: https://secure.phabricator.com/D14386
151 lines
4.1 KiB
PHP
151 lines
4.1 KiB
PHP
<?php
|
|
|
|
final class PhabricatorPhurlURLViewController
|
|
extends PhabricatorPhurlController {
|
|
|
|
public function shouldAllowPublic() {
|
|
return true;
|
|
}
|
|
|
|
public function handleRequest(AphrontRequest $request) {
|
|
$viewer = $request->getViewer();
|
|
$id = $request->getURIData('id');
|
|
|
|
$timeline = null;
|
|
|
|
$url = id(new PhabricatorPhurlURLQuery())
|
|
->setViewer($viewer)
|
|
->withIDs(array($id))
|
|
->executeOne();
|
|
if (!$url) {
|
|
return new Aphront404Response();
|
|
}
|
|
|
|
$title = $url->getMonogram();
|
|
$page_title = $title.' '.$url->getName();
|
|
$crumbs = $this->buildApplicationCrumbs();
|
|
$crumbs->addTextCrumb($title, $url->getURI());
|
|
|
|
$timeline = $this->buildTransactionTimeline(
|
|
$url,
|
|
new PhabricatorPhurlURLTransactionQuery());
|
|
|
|
$header = $this->buildHeaderView($url);
|
|
$actions = $this->buildActionView($url);
|
|
$properties = $this->buildPropertyView($url);
|
|
|
|
$properties->setActionList($actions);
|
|
$url_error = id(new PHUIInfoView())
|
|
->setErrors(array(pht('This URL is invalid due to a bad protocol.')))
|
|
->setIsHidden($url->isValid());
|
|
$box = id(new PHUIObjectBoxView())
|
|
->setHeader($header)
|
|
->addPropertyList($properties)
|
|
->setInfoView($url_error);
|
|
|
|
$is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
|
|
$add_comment_header = $is_serious
|
|
? pht('Add Comment')
|
|
: pht('More Cowbell');
|
|
$draft = PhabricatorDraft::newFromUserAndKey($viewer, $url->getPHID());
|
|
$comment_uri = $this->getApplicationURI(
|
|
'/phurl/comment/'.$url->getID().'/');
|
|
$add_comment_form = id(new PhabricatorApplicationTransactionCommentView())
|
|
->setUser($viewer)
|
|
->setObjectPHID($url->getPHID())
|
|
->setDraft($draft)
|
|
->setHeaderText($add_comment_header)
|
|
->setAction($comment_uri)
|
|
->setSubmitButtonName(pht('Add Comment'));
|
|
|
|
return $this->buildApplicationPage(
|
|
array(
|
|
$crumbs,
|
|
$box,
|
|
$timeline,
|
|
$add_comment_form,
|
|
),
|
|
array(
|
|
'title' => $page_title,
|
|
'pageObjects' => array($url->getPHID()),
|
|
));
|
|
}
|
|
|
|
private function buildHeaderView(PhabricatorPhurlURL $url) {
|
|
$viewer = $this->getViewer();
|
|
$icon = 'fa-compress';
|
|
$color = 'green';
|
|
$status = pht('Active');
|
|
|
|
$header = id(new PHUIHeaderView())
|
|
->setUser($viewer)
|
|
->setHeader($url->getName())
|
|
->setStatus($icon, $color, $status)
|
|
->setPolicyObject($url);
|
|
|
|
return $header;
|
|
}
|
|
|
|
private function buildActionView(PhabricatorPhurlURL $url) {
|
|
$viewer = $this->getViewer();
|
|
$id = $url->getID();
|
|
|
|
$actions = id(new PhabricatorActionListView())
|
|
->setObjectURI($url->getURI())
|
|
->setUser($viewer)
|
|
->setObject($url);
|
|
|
|
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
|
$viewer,
|
|
$url,
|
|
PhabricatorPolicyCapability::CAN_EDIT);
|
|
|
|
$actions
|
|
->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Edit'))
|
|
->setIcon('fa-pencil')
|
|
->setHref($this->getApplicationURI("url/edit/{$id}/"))
|
|
->setDisabled(!$can_edit)
|
|
->setWorkflow(!$can_edit))
|
|
->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Visit URL'))
|
|
->setIcon('fa-external-link')
|
|
->setHref("u/{$id}")
|
|
->setDisabled(!$url->isValid()));
|
|
|
|
return $actions;
|
|
}
|
|
|
|
private function buildPropertyView(PhabricatorPhurlURL $url) {
|
|
$viewer = $this->getViewer();
|
|
|
|
$properties = id(new PHUIPropertyListView())
|
|
->setUser($viewer)
|
|
->setObject($url);
|
|
|
|
$properties->addProperty(
|
|
pht('Original URL'),
|
|
$url->getLongURL());
|
|
|
|
$properties->invokeWillRenderEvent();
|
|
|
|
if (strlen($url->getDescription())) {
|
|
$description = PhabricatorMarkupEngine::renderOneObject(
|
|
id(new PhabricatorMarkupOneOff())->setContent($url->getDescription()),
|
|
'default',
|
|
$viewer);
|
|
|
|
$properties->addSectionHeader(
|
|
pht('Description'),
|
|
PHUIPropertyListView::ICON_SUMMARY);
|
|
|
|
$properties->addTextContent($description);
|
|
}
|
|
|
|
return $properties;
|
|
}
|
|
|
|
}
|