@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 Badges

Summary: Fixes T8949. Adds the ability to render honors on those who have fought and received badges of distinction and honor.

Test Plan: Write 'asdf'. See 'asdf'.

Reviewers: btrahan, epriestley

Reviewed By: epriestley

Subscribers: epriestley, Korvin

Maniphest Tasks: T8949

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

+123 -3
+18
resources/sql/autopatches/20150724.badges.comments.1.sql
··· 1 + CREATE TABLE {$NAMESPACE}_badges.badges_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
··· 1620 1620 'PhabricatorBadgeHasRecipientEdgeType' => 'applications/badges/edge/PhabricatorBadgeHasRecipientEdgeType.php', 1621 1621 'PhabricatorBadgesApplication' => 'applications/badges/application/PhabricatorBadgesApplication.php', 1622 1622 'PhabricatorBadgesBadge' => 'applications/badges/storage/PhabricatorBadgesBadge.php', 1623 + 'PhabricatorBadgesCommentController' => 'applications/badges/controller/PhabricatorBadgesCommentController.php', 1623 1624 'PhabricatorBadgesController' => 'applications/badges/controller/PhabricatorBadgesController.php', 1624 1625 'PhabricatorBadgesCreateCapability' => 'applications/badges/capability/PhabricatorBadgesCreateCapability.php', 1625 1626 'PhabricatorBadgesDAO' => 'applications/badges/storage/PhabricatorBadgesDAO.php', ··· 1638 1639 'PhabricatorBadgesSchemaSpec' => 'applications/badges/storage/PhabricatorBadgesSchemaSpec.php', 1639 1640 'PhabricatorBadgesSearchEngine' => 'applications/badges/query/PhabricatorBadgesSearchEngine.php', 1640 1641 'PhabricatorBadgesTransaction' => 'applications/badges/storage/PhabricatorBadgesTransaction.php', 1642 + 'PhabricatorBadgesTransactionComment' => 'applications/badges/storage/PhabricatorBadgesTransactionComment.php', 1641 1643 'PhabricatorBadgesTransactionQuery' => 'applications/badges/query/PhabricatorBadgesTransactionQuery.php', 1642 1644 'PhabricatorBadgesViewController' => 'applications/badges/controller/PhabricatorBadgesViewController.php', 1643 1645 'PhabricatorBarePageUIExample' => 'applications/uiexample/examples/PhabricatorBarePageUIExample.php', ··· 5373 5375 'PhabricatorFlaggableInterface', 5374 5376 'PhabricatorDestructibleInterface', 5375 5377 ), 5378 + 'PhabricatorBadgesCommentController' => 'PhabricatorBadgesController', 5376 5379 'PhabricatorBadgesController' => 'PhabricatorController', 5377 5380 'PhabricatorBadgesCreateCapability' => 'PhabricatorPolicyCapability', 5378 5381 'PhabricatorBadgesDAO' => 'PhabricatorLiskDAO', ··· 5391 5394 'PhabricatorBadgesSchemaSpec' => 'PhabricatorConfigSchemaSpec', 5392 5395 'PhabricatorBadgesSearchEngine' => 'PhabricatorApplicationSearchEngine', 5393 5396 'PhabricatorBadgesTransaction' => 'PhabricatorApplicationTransaction', 5397 + 'PhabricatorBadgesTransactionComment' => 'PhabricatorApplicationTransactionComment', 5394 5398 'PhabricatorBadgesTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 5395 5399 'PhabricatorBadgesViewController' => 'PhabricatorBadgesController', 5396 5400 'PhabricatorBarePageUIExample' => 'PhabricatorUIExample',
+2
src/applications/badges/application/PhabricatorBadgesApplication.php
··· 41 41 => 'PhabricatorBadgesListController', 42 42 'create/' 43 43 => 'PhabricatorBadgesEditController', 44 + 'comment/(?P<id>[1-9]\d*)/' 45 + => 'PhabricatorBadgesCommentController', 44 46 'edit/(?:(?P<id>\d+)/)?' 45 47 => 'PhabricatorBadgesEditController', 46 48 'view/(?:(?P<id>\d+)/)?'
+63
src/applications/badges/controller/PhabricatorBadgesCommentController.php
··· 1 + <?php 2 + 3 + final class PhabricatorBadgesCommentController 4 + extends PhabricatorBadgesController { 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 + $badge = id(new PhabricatorBadgesQuery()) 15 + ->setViewer($viewer) 16 + ->withIDs(array($id)) 17 + ->executeOne(); 18 + if (!$badge) { 19 + return new Aphront404Response(); 20 + } 21 + 22 + $is_preview = $request->isPreviewRequest(); 23 + $draft = PhabricatorDraft::buildFromRequest($request); 24 + 25 + $view_uri = $this->getApplicationURI('view/'.$badge->getID()); 26 + 27 + $xactions = array(); 28 + $xactions[] = id(new PhabricatorBadgesTransaction()) 29 + ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) 30 + ->attachComment( 31 + id(new PhabricatorBadgesTransactionComment()) 32 + ->setContent($request->getStr('comment'))); 33 + 34 + $editor = id(new PhabricatorBadgesEditor()) 35 + ->setActor($viewer) 36 + ->setContinueOnNoEffect($request->isContinueRequest()) 37 + ->setContentSourceFromRequest($request) 38 + ->setIsPreview($is_preview); 39 + 40 + try { 41 + $xactions = $editor->applyTransactions($badge, $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 + }
+23 -2
src/applications/badges/controller/PhabricatorBadgesViewController.php
··· 52 52 $timeline = $this->buildTransactionTimeline( 53 53 $badge, 54 54 new PhabricatorBadgesTransactionQuery()); 55 - $timeline 56 - ->setShouldTerminate(true); 57 55 58 56 $recipient_phids = $badge->getRecipientPHIDs(); 59 57 $recipient_phids = array_reverse($recipient_phids); ··· 64 62 ->setHandles($handles) 65 63 ->setUser($viewer); 66 64 65 + $add_comment = $this->buildCommentForm($badge); 66 + 67 67 return $this->buildApplicationPage( 68 68 array( 69 69 $crumbs, 70 70 $box, 71 71 $recipient_list, 72 72 $timeline, 73 + $add_comment, 73 74 ), 74 75 array( 75 76 'title' => $title, ··· 152 153 ->setHref($this->getApplicationURI("/recipients/{$id}/"))); 153 154 154 155 return $view; 156 + } 157 + 158 + private function buildCommentForm(PhabricatorBadgesBadge $badge) { 159 + $viewer = $this->getViewer(); 160 + 161 + $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business'); 162 + 163 + $add_comment_header = $is_serious 164 + ? pht('Add Comment') 165 + : pht('Render Honors'); 166 + 167 + $draft = PhabricatorDraft::newFromUserAndKey($viewer, $badge->getPHID()); 168 + 169 + return id(new PhabricatorApplicationTransactionCommentView()) 170 + ->setUser($viewer) 171 + ->setObjectPHID($badge->getPHID()) 172 + ->setDraft($draft) 173 + ->setHeaderText($add_comment_header) 174 + ->setAction($this->getApplicationURI('/comment/'.$badge->getID().'/')) 175 + ->setSubmitButtonName(pht('Add Comment')); 155 176 } 156 177 157 178 }
+1
src/applications/badges/editor/PhabricatorBadgesEditor.php
··· 21 21 $types[] = PhabricatorBadgesTransaction::TYPE_STATUS; 22 22 $types[] = PhabricatorBadgesTransaction::TYPE_QUALITY; 23 23 24 + $types[] = PhabricatorTransactions::TYPE_COMMENT; 24 25 $types[] = PhabricatorTransactions::TYPE_EDGE; 25 26 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; 26 27 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
+2 -1
src/applications/badges/storage/PhabricatorBadgesTransaction.php
··· 19 19 } 20 20 21 21 public function getApplicationTransactionCommentObject() { 22 - return null; 22 + return new PhabricatorBadgesTransactionComment(); 23 23 } 24 + 24 25 25 26 public function getTitle() { 26 27 $author_phid = $this->getAuthorPHID();
+10
src/applications/badges/storage/PhabricatorBadgesTransactionComment.php
··· 1 + <?php 2 + 3 + final class PhabricatorBadgesTransactionComment 4 + extends PhabricatorApplicationTransactionComment { 5 + 6 + public function getApplicationTransactionObject() { 7 + return new PhabricatorBadgesTransaction(); 8 + } 9 + 10 + }