diff --git a/resources/sql/autopatches/20141007.fundrisks.sql b/resources/sql/autopatches/20141007.fundrisks.sql new file mode 100644 --- /dev/null +++ b/resources/sql/autopatches/20141007.fundrisks.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_fund.fund_initiative + ADD risks LONGTEXT NOT NULL COLLATE utf8_bin; diff --git a/src/applications/fund/controller/FundInitiativeBackController.php b/src/applications/fund/controller/FundInitiativeBackController.php --- a/src/applications/fund/controller/FundInitiativeBackController.php +++ b/src/applications/fund/controller/FundInitiativeBackController.php @@ -118,7 +118,8 @@ ->setError($e_amount)); return $this->newDialog() - ->setTitle(pht('Back Initiative')) + ->setTitle( + pht('Back %s %s', $initiative->getMonogram(), $initiative->getName())) ->setErrors($errors) ->appendChild($form->buildLayoutView()) ->addCancelButton($initiative_uri) diff --git a/src/applications/fund/controller/FundInitiativeEditController.php b/src/applications/fund/controller/FundInitiativeEditController.php --- a/src/applications/fund/controller/FundInitiativeEditController.php +++ b/src/applications/fund/controller/FundInitiativeEditController.php @@ -52,6 +52,7 @@ $v_merchant = $initiative->getMerchantPHID(); $v_desc = $initiative->getDescription(); + $v_risk = $initiative->getRisks(); if ($is_new) { $v_projects = array(); @@ -66,6 +67,7 @@ if ($request->isFormPost()) { $v_name = $request->getStr('name'); $v_desc = $request->getStr('description'); + $v_risk = $request->getStr('risks'); $v_view = $request->getStr('viewPolicy'); $v_edit = $request->getStr('editPolicy'); $v_merchant = $request->getStr('merchantPHID'); @@ -73,6 +75,7 @@ $type_name = FundInitiativeTransaction::TYPE_NAME; $type_desc = FundInitiativeTransaction::TYPE_DESCRIPTION; + $type_risk = FundInitiativeTransaction::TYPE_RISKS; $type_merchant = FundInitiativeTransaction::TYPE_MERCHANT; $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY; $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY; @@ -88,6 +91,10 @@ ->setNewValue($v_desc); $xactions[] = id(new FundInitiativeTransaction()) + ->setTransactionType($type_risk) + ->setNewValue($v_risk); + + $xactions[] = id(new FundInitiativeTransaction()) ->setTransactionType($type_merchant) ->setNewValue($v_merchant); @@ -197,6 +204,11 @@ ->setLabel(pht('Description')) ->setValue($v_desc)) ->appendChild( + id(new PhabricatorRemarkupControl()) + ->setName('risks') + ->setLabel(pht('Risks/Challenges')) + ->setValue($v_risk)) + ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Projects')) ->setName('projects') diff --git a/src/applications/fund/controller/FundInitiativeViewController.php b/src/applications/fund/controller/FundInitiativeViewController.php --- a/src/applications/fund/controller/FundInitiativeViewController.php +++ b/src/applications/fund/controller/FundInitiativeViewController.php @@ -96,7 +96,7 @@ $this->getHandle($owner_phid)->renderLink()); $view->addProperty( - pht('Payable To Merchant'), + pht('Payable to Merchant'), $this->getHandle($merchant_phid)->renderLink()); $view->addProperty( @@ -116,6 +116,17 @@ $view->addTextContent($description); } + $risks = $initiative->getRisks(); + if (strlen($risks)) { + $risks = PhabricatorMarkupEngine::renderOneObject( + id(new PhabricatorMarkupOneOff())->setContent($risks), + 'default', + $viewer); + + $view->addSectionHeader(pht('Risks/Challenges')); + $view->addTextContent($risks); + } + return $view; } diff --git a/src/applications/fund/editor/FundInitiativeEditor.php b/src/applications/fund/editor/FundInitiativeEditor.php --- a/src/applications/fund/editor/FundInitiativeEditor.php +++ b/src/applications/fund/editor/FundInitiativeEditor.php @@ -16,6 +16,7 @@ $types[] = FundInitiativeTransaction::TYPE_NAME; $types[] = FundInitiativeTransaction::TYPE_DESCRIPTION; + $types[] = FundInitiativeTransaction::TYPE_RISKS; $types[] = FundInitiativeTransaction::TYPE_STATUS; $types[] = FundInitiativeTransaction::TYPE_BACKER; $types[] = FundInitiativeTransaction::TYPE_MERCHANT; @@ -33,6 +34,8 @@ return $object->getName(); case FundInitiativeTransaction::TYPE_DESCRIPTION: return $object->getDescription(); + case FundInitiativeTransaction::TYPE_RISKS: + return $object->getRisks(); case FundInitiativeTransaction::TYPE_STATUS: return $object->getStatus(); case FundInitiativeTransaction::TYPE_BACKER: @@ -51,6 +54,7 @@ switch ($xaction->getTransactionType()) { case FundInitiativeTransaction::TYPE_NAME: case FundInitiativeTransaction::TYPE_DESCRIPTION: + case FundInitiativeTransaction::TYPE_RISKS: case FundInitiativeTransaction::TYPE_STATUS: case FundInitiativeTransaction::TYPE_BACKER: case FundInitiativeTransaction::TYPE_MERCHANT: @@ -71,6 +75,9 @@ case FundInitiativeTransaction::TYPE_DESCRIPTION: $object->setDescription($xaction->getNewValue()); return; + case FundInitiativeTransaction::TYPE_RISKS: + $object->setRisks($xaction->getNewValue()); + return; case FundInitiativeTransaction::TYPE_MERCHANT: $object->setMerchantPHID($xaction->getNewValue()); return; @@ -106,6 +113,7 @@ switch ($xaction->getTransactionType()) { case FundInitiativeTransaction::TYPE_NAME: case FundInitiativeTransaction::TYPE_DESCRIPTION: + case FundInitiativeTransaction::TYPE_RISKS: case FundInitiativeTransaction::TYPE_STATUS: case FundInitiativeTransaction::TYPE_MERCHANT: case FundInitiativeTransaction::TYPE_BACKER: diff --git a/src/applications/fund/query/FundBackerSearchEngine.php b/src/applications/fund/query/FundBackerSearchEngine.php --- a/src/applications/fund/query/FundBackerSearchEngine.php +++ b/src/applications/fund/query/FundBackerSearchEngine.php @@ -126,29 +126,35 @@ $viewer = $this->requireViewer(); - $list = id(new PHUIObjectItemListView()); + $rows = array(); foreach ($backers as $backer) { - $backer_handle = $handles[$backer->getBackerPHID()]; - - $currency = $backer->getAmountAsCurrency(); - - $header = pht( - '%s for %s', - $currency->formatForDisplay(), - $handles[$backer->getInitiativePHID()]->renderLink()); - - $item = id(new PHUIObjectItemView()) - ->setHeader($header) - ->addIcon( - 'none', - phabricator_datetime($backer->getDateCreated(), $viewer)) - ->addByline(pht('Backer: %s', $backer_handle->renderLink())); - - $list->addItem($item); + $rows[] = array( + $handles[$backer->getInitiativePHID()]->renderLink(), + $handles[$backer->getBackerPHID()]->renderLink(), + $backer->getAmountAsCurrency()->formatForDisplay(), + phabricator_datetime($backer->getDateCreated(), $viewer), + ); } + $table = id(new AphrontTableView($rows)) + ->setHeaders( + array( + pht('Initiative'), + pht('Backer'), + pht('Amount'), + pht('Date'), + )) + ->setColumnClasses( + array( + null, + null, + 'wide right', + 'right', + )); - return $list; + return id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Backers')) + ->appendChild($table); } } diff --git a/src/applications/fund/storage/FundInitiative.php b/src/applications/fund/storage/FundInitiative.php --- a/src/applications/fund/storage/FundInitiative.php +++ b/src/applications/fund/storage/FundInitiative.php @@ -15,6 +15,7 @@ protected $ownerPHID; protected $merchantPHID; protected $description; + protected $risks; protected $viewPolicy; protected $editPolicy; protected $status; diff --git a/src/applications/fund/storage/FundInitiativeTransaction.php b/src/applications/fund/storage/FundInitiativeTransaction.php --- a/src/applications/fund/storage/FundInitiativeTransaction.php +++ b/src/applications/fund/storage/FundInitiativeTransaction.php @@ -5,6 +5,7 @@ const TYPE_NAME = 'fund:name'; const TYPE_DESCRIPTION = 'fund:description'; + const TYPE_RISKS = 'fund:risks'; const TYPE_STATUS = 'fund:status'; const TYPE_BACKER = 'fund:backer'; const TYPE_MERCHANT = 'fund:merchant'; @@ -64,6 +65,10 @@ $new); } break; + case FundInitiativeTransaction::TYPE_RISKS: + return pht( + '%s edited the risks for this initiative.', + $this->renderHandleLink($author_phid)); case FundInitiativeTransaction::TYPE_DESCRIPTION: return pht( '%s edited the description of this initiative.', @@ -159,6 +164,7 @@ $old = $this->getOldValue(); switch ($this->getTransactionType()) { case FundInitiativeTransaction::TYPE_DESCRIPTION: + case FundInitiativeTransaction::TYPE_RISKS: return ($old === null); } return parent::shouldHide(); @@ -167,6 +173,7 @@ public function hasChangeDetails() { switch ($this->getTransactionType()) { case FundInitiativeTransaction::TYPE_DESCRIPTION: + case FundInitiativeTransaction::TYPE_RISKS: return ($this->getOldValue() !== null); }