@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add commenting to Fund

Summary: Adds basic commenting to Fund Initiatives.

Test Plan: Leave a comment, see comment.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin

Differential Revision: https://secure.phabricator.com/D15554

+127 -3
+18
resources/sql/autopatches/20160331.fund.comments.1.sql
··· 1 + CREATE TABLE {$NAMESPACE}_fund.fund_initiativetransaction_comment ( 2 + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 3 + phid VARCHAR(64) NOT NULL, 4 + transactionPHID VARCHAR(64), 5 + authorPHID VARCHAR(64) NOT NULL, 6 + viewPolicy VARCHAR(64) NOT NULL, 7 + editPolicy VARCHAR(64) NOT NULL, 8 + commentVersion INT UNSIGNED NOT NULL, 9 + content LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, 10 + contentSource LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, 11 + isDeleted BOOL NOT NULL, 12 + dateCreated INT UNSIGNED NOT NULL, 13 + dateModified INT UNSIGNED NOT NULL, 14 + 15 + UNIQUE KEY `key_phid` (phid), 16 + UNIQUE KEY `key_version` (transactionPHID, commentVersion) 17 + 18 + ) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+4
src/__phutil_library_map__.php
··· 1024 1024 'FundInitiative' => 'applications/fund/storage/FundInitiative.php', 1025 1025 'FundInitiativeBackController' => 'applications/fund/controller/FundInitiativeBackController.php', 1026 1026 'FundInitiativeCloseController' => 'applications/fund/controller/FundInitiativeCloseController.php', 1027 + 'FundInitiativeCommentController' => 'applications/fund/controller/FundInitiativeCommentController.php', 1027 1028 'FundInitiativeEditController' => 'applications/fund/controller/FundInitiativeEditController.php', 1028 1029 'FundInitiativeEditor' => 'applications/fund/editor/FundInitiativeEditor.php', 1029 1030 'FundInitiativeFulltextEngine' => 'applications/fund/search/FundInitiativeFulltextEngine.php', ··· 1034 1035 'FundInitiativeReplyHandler' => 'applications/fund/mail/FundInitiativeReplyHandler.php', 1035 1036 'FundInitiativeSearchEngine' => 'applications/fund/query/FundInitiativeSearchEngine.php', 1036 1037 'FundInitiativeTransaction' => 'applications/fund/storage/FundInitiativeTransaction.php', 1038 + 'FundInitiativeTransactionComment' => 'applications/fund/storage/FundInitiativeTransactionComment.php', 1037 1039 'FundInitiativeTransactionQuery' => 'applications/fund/query/FundInitiativeTransactionQuery.php', 1038 1040 'FundInitiativeViewController' => 'applications/fund/controller/FundInitiativeViewController.php', 1039 1041 'FundSchemaSpec' => 'applications/fund/storage/FundSchemaSpec.php', ··· 5238 5240 ), 5239 5241 'FundInitiativeBackController' => 'FundController', 5240 5242 'FundInitiativeCloseController' => 'FundController', 5243 + 'FundInitiativeCommentController' => 'FundController', 5241 5244 'FundInitiativeEditController' => 'FundController', 5242 5245 'FundInitiativeEditor' => 'PhabricatorApplicationTransactionEditor', 5243 5246 'FundInitiativeFulltextEngine' => 'PhabricatorFulltextEngine', ··· 5248 5251 'FundInitiativeReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', 5249 5252 'FundInitiativeSearchEngine' => 'PhabricatorApplicationSearchEngine', 5250 5253 'FundInitiativeTransaction' => 'PhabricatorApplicationTransaction', 5254 + 'FundInitiativeTransactionComment' => 'PhabricatorApplicationTransactionComment', 5251 5255 'FundInitiativeTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 5252 5256 'FundInitiativeViewController' => 'FundController', 5253 5257 'FundSchemaSpec' => 'PhabricatorConfigSchemaSpec',
+1
src/applications/fund/application/PhabricatorFundApplication.php
··· 42 42 '/fund/' => array( 43 43 '(?:query/(?P<queryKey>[^/]+)/)?' => 'FundInitiativeListController', 44 44 'create/' => 'FundInitiativeEditController', 45 + 'comment/(?P<id>[1-9]\d*)/' => 'FundInitiativeCommentController', 45 46 'edit/(?:(?P<id>\d+)/)?' => 'FundInitiativeEditController', 46 47 'close/(?P<id>\d+)/' => 'FundInitiativeCloseController', 47 48 'back/(?P<id>\d+)/' => 'FundInitiativeBackController',
+63
src/applications/fund/controller/FundInitiativeCommentController.php
··· 1 + <?php 2 + 3 + final class FundInitiativeCommentController 4 + extends FundController { 5 + 6 + public function handleRequest(AphrontRequest $request) { 7 + $viewer = $request->getViewer(); 8 + $id = $request->getURIData('id'); 9 + 10 + if (!$request->isFormPost()) { 11 + return new Aphront400Response(); 12 + } 13 + 14 + $initiative = id(new FundInitiativeQuery()) 15 + ->setViewer($viewer) 16 + ->withIDs(array($id)) 17 + ->executeOne(); 18 + if (!$initiative) { 19 + return new Aphront404Response(); 20 + } 21 + 22 + $is_preview = $request->isPreviewRequest(); 23 + $draft = PhabricatorDraft::buildFromRequest($request); 24 + 25 + $view_uri = '/'.$initiative->getMonogram(); 26 + 27 + $xactions = array(); 28 + $xactions[] = id(new FundInitiativeTransaction()) 29 + ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) 30 + ->attachComment( 31 + id(new FundInitiativeTransactionComment()) 32 + ->setContent($request->getStr('comment'))); 33 + 34 + $editor = id(new FundInitiativeEditor()) 35 + ->setActor($viewer) 36 + ->setContinueOnNoEffect($request->isContinueRequest()) 37 + ->setContentSourceFromRequest($request) 38 + ->setIsPreview($is_preview); 39 + 40 + try { 41 + $xactions = $editor->applyTransactions($initiative, $xactions); 42 + } catch (PhabricatorApplicationTransactionNoEffectException $ex) { 43 + return id(new PhabricatorApplicationTransactionNoEffectResponse()) 44 + ->setCancelURI($view_uri) 45 + ->setException($ex); 46 + } 47 + 48 + if ($draft) { 49 + $draft->replaceOrDelete(); 50 + } 51 + 52 + if ($request->isAjax() && $is_preview) { 53 + return id(new PhabricatorApplicationTransactionResponse()) 54 + ->setViewer($viewer) 55 + ->setTransactions($xactions) 56 + ->setIsPreview($is_preview); 57 + } else { 58 + return id(new AphrontRedirectResponse()) 59 + ->setURI($view_uri); 60 + } 61 + } 62 + 63 + }
+29 -2
src/applications/fund/controller/FundInitiativeViewController.php
··· 52 52 $timeline = $this->buildTransactionTimeline( 53 53 $initiative, 54 54 new FundInitiativeTransactionQuery()); 55 - $timeline->setShouldTerminate(true); 55 + 56 + $add_comment = $this->buildCommentForm($initiative); 56 57 57 58 $view = id(new PHUITwoColumnView()) 58 59 ->setHeader($header) 59 60 ->setCurtain($curtain) 60 - ->setMainColumn($timeline) 61 + ->setMainColumn(array( 62 + $timeline, 63 + $add_comment, 64 + )) 61 65 ->addPropertySection(pht('DETAILS'), $details); 62 66 63 67 return $this->newPage() ··· 159 163 160 164 return $curtain; 161 165 } 166 + 167 + private function buildCommentForm(FundInitiative $initiative) { 168 + $viewer = $this->getViewer(); 169 + 170 + $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business'); 171 + 172 + $add_comment_header = $is_serious 173 + ? pht('Add Comment') 174 + : pht('Add Liquidity'); 175 + 176 + $draft = PhabricatorDraft::newFromUserAndKey( 177 + $viewer, $initiative->getPHID()); 178 + 179 + return id(new PhabricatorApplicationTransactionCommentView()) 180 + ->setUser($viewer) 181 + ->setObjectPHID($initiative->getPHID()) 182 + ->setDraft($draft) 183 + ->setHeaderText($add_comment_header) 184 + ->setAction( 185 + $this->getApplicationURI('/comment/'.$initiative->getID().'/')) 186 + ->setSubmitButtonName(pht('Add Comment')); 187 + } 188 + 162 189 163 190 }
+1
src/applications/fund/editor/FundInitiativeEditor.php
··· 23 23 $types[] = FundInitiativeTransaction::TYPE_MERCHANT; 24 24 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; 25 25 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; 26 + $types[] = PhabricatorTransactions::TYPE_COMMENT; 26 27 27 28 return $types; 28 29 }
+1 -1
src/applications/fund/storage/FundInitiativeTransaction.php
··· 27 27 } 28 28 29 29 public function getApplicationTransactionCommentObject() { 30 - return null; 30 + return new FundInitiativeTransactionComment(); 31 31 } 32 32 33 33 public function getRequiredHandlePHIDs() {
+10
src/applications/fund/storage/FundInitiativeTransactionComment.php
··· 1 + <?php 2 + 3 + final class FundInitiativeTransactionComment 4 + extends PhabricatorApplicationTransactionComment { 5 + 6 + public function getApplicationTransactionObject() { 7 + return new FundInitiativeTransaction(); 8 + } 9 + 10 + }