Path: blob/master/src/applications/fund/controller/FundInitiativeViewController.php
12262 views
<?php12final class FundInitiativeViewController3extends FundController {45public function shouldAllowPublic() {6return true;7}89public function handleRequest(AphrontRequest $request) {10$viewer = $request->getViewer();11$id = $request->getURIData('id');1213$initiative = id(new FundInitiativeQuery())14->setViewer($viewer)15->withIDs(array($id))16->executeOne();17if (!$initiative) {18return new Aphront404Response();19}2021$crumbs = $this->buildApplicationCrumbs();22$crumbs->addTextCrumb($initiative->getMonogram());23$crumbs->setBorder(true);2425$title = pht(26'%s %s',27$initiative->getMonogram(),28$initiative->getName());2930if ($initiative->isClosed()) {31$status_icon = 'fa-ban';32$status_color = 'indigo';33} else {34$status_icon = 'fa-check';35$status_color = 'bluegrey';36}37$status_name = idx(38FundInitiative::getStatusNameMap(),39$initiative->getStatus());4041$header = id(new PHUIHeaderView())42->setHeader($initiative->getName())43->setUser($viewer)44->setPolicyObject($initiative)45->setStatus($status_icon, $status_color, $status_name)46->setHeaderIcon('fa-heart');4748$curtain = $this->buildCurtain($initiative);49$details = $this->buildPropertySectionView($initiative);5051$timeline = $this->buildTransactionTimeline(52$initiative,53new FundInitiativeTransactionQuery());54$timeline->setQuoteRef($initiative->getMonogram());5556$comment_view = $this->buildCommentForm($initiative, $timeline);5758$view = id(new PHUITwoColumnView())59->setHeader($header)60->setCurtain($curtain)61->setMainColumn(array(62$timeline,63$comment_view,64))65->addPropertySection(pht('Details'), $details);6667return $this->newPage()68->setTitle($title)69->setCrumbs($crumbs)70->setPageObjectPHIDs(array($initiative->getPHID()))71->appendChild($view);72}7374private function buildPropertySectionView(FundInitiative $initiative) {75$viewer = $this->getRequest()->getUser();7677$view = id(new PHUIPropertyListView())78->setUser($viewer);7980$owner_phid = $initiative->getOwnerPHID();81$merchant_phid = $initiative->getMerchantPHID();8283$view->addProperty(84pht('Owner'),85$viewer->renderHandle($owner_phid));8687$view->addProperty(88pht('Payable to Merchant'),89$viewer->renderHandle($merchant_phid));9091$view->addProperty(92pht('Total Funding'),93$initiative->getTotalAsCurrency()->formatForDisplay());9495$description = $initiative->getDescription();96if (strlen($description)) {97$description = new PHUIRemarkupView($viewer, $description);98$view->addSectionHeader(99pht('Description'), PHUIPropertyListView::ICON_SUMMARY);100$view->addTextContent($description);101}102103$risks = $initiative->getRisks();104if (strlen($risks)) {105$risks = new PHUIRemarkupView($viewer, $risks);106$view->addSectionHeader(107pht('Risks/Challenges'), 'fa-ambulance');108$view->addTextContent($risks);109}110111return $view;112}113114private function buildCurtain(FundInitiative $initiative) {115$viewer = $this->getViewer();116117$id = $initiative->getID();118119$can_edit = PhabricatorPolicyFilter::hasCapability(120$viewer,121$initiative,122PhabricatorPolicyCapability::CAN_EDIT);123124$curtain = $this->newCurtainView($initiative);125126$curtain->addAction(127id(new PhabricatorActionView())128->setName(pht('Edit Initiative'))129->setIcon('fa-pencil')130->setDisabled(!$can_edit)131->setWorkflow(!$can_edit)132->setHref($this->getApplicationURI("/edit/{$id}/")));133134if ($initiative->isClosed()) {135$close_name = pht('Reopen Initiative');136$close_icon = 'fa-check';137} else {138$close_name = pht('Close Initiative');139$close_icon = 'fa-times';140}141142$curtain->addAction(143id(new PhabricatorActionView())144->setName($close_name)145->setIcon($close_icon)146->setDisabled(!$can_edit)147->setWorkflow(true)148->setHref($this->getApplicationURI("/close/{$id}/")));149150$curtain->addAction(151id(new PhabricatorActionView())152->setName(pht('Back Initiative'))153->setIcon('fa-money')154->setDisabled($initiative->isClosed())155->setWorkflow(true)156->setHref($this->getApplicationURI("/back/{$id}/")));157158$curtain->addAction(159id(new PhabricatorActionView())160->setName(pht('View Backers'))161->setIcon('fa-bank')162->setHref($this->getApplicationURI("/backers/{$id}/")));163164return $curtain;165}166167private function buildCommentForm(FundInitiative $initiative, $timeline) {168$viewer = $this->getViewer();169$box = id(new FundInitiativeEditEngine())170->setViewer($viewer)171->buildEditEngineCommentView($initiative)172->setTransactionTimeline($timeline);173174return $box;175}176177178}179180181