@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 Comments to Countdown

Summary: 3, 2, 1, Liftoff! (Adds basic commenting to countdown)

Test Plan: asdf asdf asdf

Reviewers: btrahan, epriestley

Reviewed By: epriestley

Subscribers: epriestley, Korvin

Maniphest Tasks: T8895

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

+130 -5
+18
resources/sql/autopatches/20150724.countdown.comments.1.sql
··· 1 + CREATE TABLE {$NAMESPACE}_countdown.countdown_transaction_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
··· 1820 1820 'PhabricatorCoreConfigOptions' => 'applications/config/option/PhabricatorCoreConfigOptions.php', 1821 1821 'PhabricatorCountdown' => 'applications/countdown/storage/PhabricatorCountdown.php', 1822 1822 'PhabricatorCountdownApplication' => 'applications/countdown/application/PhabricatorCountdownApplication.php', 1823 + 'PhabricatorCountdownCommentController' => 'applications/countdown/controller/PhabricatorCountdownCommentController.php', 1823 1824 'PhabricatorCountdownController' => 'applications/countdown/controller/PhabricatorCountdownController.php', 1824 1825 'PhabricatorCountdownCountdownPHIDType' => 'applications/countdown/phid/PhabricatorCountdownCountdownPHIDType.php', 1825 1826 'PhabricatorCountdownDAO' => 'applications/countdown/storage/PhabricatorCountdownDAO.php', ··· 1835 1836 'PhabricatorCountdownSchemaSpec' => 'applications/countdown/storage/PhabricatorCountdownSchemaSpec.php', 1836 1837 'PhabricatorCountdownSearchEngine' => 'applications/countdown/query/PhabricatorCountdownSearchEngine.php', 1837 1838 'PhabricatorCountdownTransaction' => 'applications/countdown/storage/PhabricatorCountdownTransaction.php', 1839 + 'PhabricatorCountdownTransactionComment' => 'applications/countdown/storage/PhabricatorCountdownTransactionComment.php', 1838 1840 'PhabricatorCountdownTransactionQuery' => 'applications/countdown/query/PhabricatorCountdownTransactionQuery.php', 1839 1841 'PhabricatorCountdownView' => 'applications/countdown/view/PhabricatorCountdownView.php', 1840 1842 'PhabricatorCountdownViewController' => 'applications/countdown/controller/PhabricatorCountdownViewController.php', ··· 5632 5634 'PhabricatorProjectInterface', 5633 5635 ), 5634 5636 'PhabricatorCountdownApplication' => 'PhabricatorApplication', 5637 + 'PhabricatorCountdownCommentController' => 'PhabricatorCountdownController', 5635 5638 'PhabricatorCountdownController' => 'PhabricatorController', 5636 5639 'PhabricatorCountdownCountdownPHIDType' => 'PhabricatorPHIDType', 5637 5640 'PhabricatorCountdownDAO' => 'PhabricatorLiskDAO', ··· 5647 5650 'PhabricatorCountdownSchemaSpec' => 'PhabricatorConfigSchemaSpec', 5648 5651 'PhabricatorCountdownSearchEngine' => 'PhabricatorApplicationSearchEngine', 5649 5652 'PhabricatorCountdownTransaction' => 'PhabricatorApplicationTransaction', 5653 + 'PhabricatorCountdownTransactionComment' => 'PhabricatorApplicationTransactionComment', 5650 5654 'PhabricatorCountdownTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 5651 5655 'PhabricatorCountdownView' => 'AphrontTagView', 5652 5656 'PhabricatorCountdownViewController' => 'PhabricatorCountdownController',
+8 -3
src/applications/countdown/application/PhabricatorCountdownApplication.php
··· 42 42 '/countdown/' => array( 43 43 '(?:query/(?P<queryKey>[^/]+)/)?' 44 44 => 'PhabricatorCountdownListController', 45 - '(?P<id>[1-9]\d*)/' => 'PhabricatorCountdownViewController', 46 - 'edit/(?:(?P<id>[1-9]\d*)/)?' => 'PhabricatorCountdownEditController', 47 - 'delete/(?P<id>[1-9]\d*)/' => 'PhabricatorCountdownDeleteController', 45 + '(?P<id>[1-9]\d*)/' 46 + => 'PhabricatorCountdownViewController', 47 + 'comment/(?P<id>[1-9]\d*)/' 48 + => 'PhabricatorCountdownCommentController', 49 + 'edit/(?:(?P<id>[1-9]\d*)/)?' 50 + => 'PhabricatorCountdownEditController', 51 + 'delete/(?P<id>[1-9]\d*)/' 52 + => 'PhabricatorCountdownDeleteController', 48 53 ), 49 54 ); 50 55 }
+63
src/applications/countdown/controller/PhabricatorCountdownCommentController.php
··· 1 + <?php 2 + 3 + final class PhabricatorCountdownCommentController 4 + extends PhabricatorCountdownController { 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 + $countdown = id(new PhabricatorCountdownQuery()) 15 + ->setViewer($viewer) 16 + ->withIDs(array($id)) 17 + ->executeOne(); 18 + if (!$countdown) { 19 + return new Aphront404Response(); 20 + } 21 + 22 + $is_preview = $request->isPreviewRequest(); 23 + $draft = PhabricatorDraft::buildFromRequest($request); 24 + 25 + $view_uri = '/'.$countdown->getMonogram(); 26 + 27 + $xactions = array(); 28 + $xactions[] = id(new PhabricatorCountdownTransaction()) 29 + ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) 30 + ->attachComment( 31 + id(new PhabricatorCountdownTransactionComment()) 32 + ->setContent($request->getStr('comment'))); 33 + 34 + $editor = id(new PhabricatorCountdownEditor()) 35 + ->setActor($viewer) 36 + ->setContinueOnNoEffect($request->isContinueRequest()) 37 + ->setContentSourceFromRequest($request) 38 + ->setIsPreview($is_preview); 39 + 40 + try { 41 + $xactions = $editor->applyTransactions($countdown, $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 + }
+25 -1
src/applications/countdown/controller/PhabricatorCountdownViewController.php
··· 58 58 $timeline = $this->buildTransactionTimeline( 59 59 $countdown, 60 60 new PhabricatorCountdownTransactionQuery()); 61 - $timeline->setShouldTerminate(true); 61 + 62 + $add_comment = $this->buildCommentForm($countdown); 62 63 63 64 $content = array( 64 65 $crumbs, 65 66 $object_box, 66 67 $countdown_view, 67 68 $timeline, 69 + $add_comment, 68 70 ); 69 71 70 72 return $this->buildApplicationPage( 71 73 $content, 72 74 array( 73 75 'title' => $title, 76 + 'pageObjects' => array($countdown->getPHID()), 74 77 )); 75 78 } 76 79 ··· 139 142 } 140 143 141 144 return $view; 145 + } 146 + 147 + private function buildCommentForm(PhabricatorCountdown $countdown) { 148 + $viewer = $this->getViewer(); 149 + 150 + $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business'); 151 + 152 + $add_comment_header = $is_serious 153 + ? pht('Add Comment') 154 + : pht('Last Words'); 155 + 156 + $draft = PhabricatorDraft::newFromUserAndKey( 157 + $viewer, $countdown->getPHID()); 158 + 159 + return id(new PhabricatorApplicationTransactionCommentView()) 160 + ->setUser($viewer) 161 + ->setObjectPHID($countdown->getPHID()) 162 + ->setDraft($draft) 163 + ->setHeaderText($add_comment_header) 164 + ->setAction($this->getApplicationURI('/comment/'.$countdown->getID().'/')) 165 + ->setSubmitButtonName(pht('Add Comment')); 142 166 } 143 167 144 168 }
+1
src/applications/countdown/editor/PhabricatorCountdownEditor.php
··· 22 22 $types[] = PhabricatorTransactions::TYPE_SPACE; 23 23 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; 24 24 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; 25 + $types[] = PhabricatorTransactions::TYPE_COMMENT; 25 26 26 27 return $types; 27 28 }
+1 -1
src/applications/countdown/storage/PhabricatorCountdownTransaction.php
··· 21 21 } 22 22 23 23 public function getApplicationTransactionCommentObject() { 24 - return null; 24 + return new PhabricatorCountdownTransactionComment(); 25 25 } 26 26 27 27 public function getTitle() {
+10
src/applications/countdown/storage/PhabricatorCountdownTransactionComment.php
··· 1 + <?php 2 + 3 + final class PhabricatorCountdownTransactionComment 4 + extends PhabricatorApplicationTransactionComment { 5 + 6 + public function getApplicationTransactionObject() { 7 + return new PhabricatorCountdownTransaction(); 8 + } 9 + 10 + }