diff --git a/src/applications/pholio/controller/PholioMockViewController.php b/src/applications/pholio/controller/PholioMockViewController.php
index 5372ccc706..62bb5bad2b 100644
--- a/src/applications/pholio/controller/PholioMockViewController.php
+++ b/src/applications/pholio/controller/PholioMockViewController.php
@@ -40,28 +40,136 @@ final class PholioMockViewController extends PholioController {
return new Aphront404Response();
}
+ $phids = array();
+ $phids[] = $mock->getAuthorPHID();
+ $this->loadHandles($phids);
+
+
+ $engine = id(new PhabricatorMarkupEngine())
+ ->setViewer($user);
+ $engine->addObject($mock, PholioMock::MARKUP_FIELD_DESCRIPTION);
+ $engine->process();
+
$title = 'M'.$mock->getID().' '.$mock->getName();
$header = id(new PhabricatorHeaderView())
->setHeader($title);
- $actions = id(new PhabricatorActionListView())
- ->setUser($user)
- ->setObject($mock);
+ $actions = $this->buildActionView($mock);
+ $properties = $this->buildPropertyView($mock, $engine);
- $properties = new PhabricatorPropertyListView();
+ $carousel =
+ '
'.
+ 'Carousel Goes Here
';
+ $comments =
+ ''.
+ 'Comments/Transactions Go Here
';
+
+ $add_comment = $this->buildAddCommentView($mock);
$content = array(
$header,
$actions,
- $properties
+ $properties,
+ $carousel,
+ $comments,
+ $add_comment,
);
return $this->buildApplicationPage(
$content,
array(
'title' => $title,
+ 'device' => true,
));
}
+ private function buildActionView(PholioMock $mock) {
+ $user = $this->getRequest()->getUser();
+
+ $actions = id(new PhabricatorActionListView())
+ ->setUser($user)
+ ->setObject($mock);
+
+ $can_edit = PhabricatorPolicyFilter::hasCapability(
+ $user,
+ $mock,
+ PhabricatorPolicyCapability::CAN_EDIT);
+
+ $actions->addAction(
+ id(new PhabricatorActionView())
+ ->setIcon('edit')
+ ->setName(pht('Edit Mock'))
+ ->setHref($this->getApplicationURI('/edit/'.$mock->getID()))
+ ->setDisabled(!$can_edit)
+ ->setWorkflow(!$can_edit));
+
+ return $actions;
+ }
+
+ private function buildPropertyView(
+ PholioMock $mock,
+ PhabricatorMarkupEngine $engine) {
+
+ $user = $this->getRequest()->getUser();
+
+ $properties = new PhabricatorPropertyListView();
+
+ $properties->addProperty(
+ pht('Author'),
+ $this->getHandle($mock->getAuthorPHID())->renderLink());
+
+ $properties->addProperty(
+ pht('Created'),
+ phabricator_datetime($mock->getDateCreated(), $user));
+
+ $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions(
+ $user,
+ $mock);
+
+ $properties->addProperty(
+ pht('Visible To'),
+ $descriptions[PhabricatorPolicyCapability::CAN_VIEW]);
+
+ $properties->addTextContent(
+ $engine->getOutput($mock, PholioMock::MARKUP_FIELD_DESCRIPTION));
+
+ return $properties;
+ }
+
+ private function buildAddCommentView(PholioMock $mock) {
+ $user = $this->getRequest()->getUser();
+
+ $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business');
+
+ $title = $is_serious
+ ? pht('Add Comment')
+ : pht('History Beckons');
+
+ $header = id(new PhabricatorHeaderView())
+ ->setHeader($title);
+
+ $action = $is_serious
+ ? pht('Add Comment')
+ : pht('Answer The Call');
+
+ $form = id(new AphrontFormView())
+ ->setUser($user)
+ ->setAction($this->getApplicationURI('/addcomment/'.$mock->getID().'/'))
+ ->setWorkflow(true)
+ ->setFlexible(true)
+ ->appendChild(
+ id(new PhabricatorRemarkupControl())
+ ->setName('comment')
+ ->setLabel(pht('Comment')))
+ ->appendChild(
+ id(new AphrontFormSubmitControl())
+ ->setValue($action));
+
+ return array(
+ $header,
+ $form,
+ );
+ }
+
}
diff --git a/src/infrastructure/markup/PhabricatorMarkupEngine.php b/src/infrastructure/markup/PhabricatorMarkupEngine.php
index ea133a3a1a..0936609c5b 100644
--- a/src/infrastructure/markup/PhabricatorMarkupEngine.php
+++ b/src/infrastructure/markup/PhabricatorMarkupEngine.php
@@ -362,7 +362,7 @@ final class PhabricatorMarkupEngine {
/**
* @task engine
*/
- private static function newMarkupEngine(array $options) {
+ public static function newMarkupEngine(array $options) {
$options += self::getMarkupEngineDefaultConfiguration();