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

Use application PHIDs for application transactions

Summary: Ref T2715. Ref T3578. Load application transactions through application PHID infrastructure.

Test Plan: Viewed feed, saw successful loads of application transaction objects and rendered feed stories.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2715, T3578

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

+101 -102
+1 -1
resources/sql/patches/20130715.votecomments.php
··· 43 43 $comment_phid = PhabricatorPHID::generateNewPHID( 44 44 PhabricatorPHIDConstants::PHID_TYPE_XCMT); 45 45 $xaction_phid = PhabricatorPHID::generateNewPHID( 46 - PhabricatorPHIDConstants::PHID_TYPE_XACT, 46 + PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST, 47 47 PhabricatorSlowvotePHIDTypePoll::TYPECONST); 48 48 49 49 $source = PhabricatorContentSource::newForSource(
+2 -2
resources/sql/patches/20130728.ponderxcomment.php
··· 27 27 } 28 28 29 29 $comment_phid = PhabricatorPHID::generateNewPHID( 30 - PhabricatorPHIDConstants::PHID_TYPE_XACT, 30 + PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST, 31 31 $type); 32 32 33 33 $xaction_phid = PhabricatorPHID::generateNewPHID( 34 - PhabricatorPHIDConstants::PHID_TYPE_XACT, 34 + PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST, 35 35 $type); 36 36 37 37 queryfx(
+2
src/__phutil_library_map__.php
··· 833 833 'PhabricatorApplicationTransactionInterface' => 'applications/transactions/interface/PhabricatorApplicationTransactionInterface.php', 834 834 'PhabricatorApplicationTransactionNoEffectException' => 'applications/transactions/exception/PhabricatorApplicationTransactionNoEffectException.php', 835 835 'PhabricatorApplicationTransactionNoEffectResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionNoEffectResponse.php', 836 + 'PhabricatorApplicationTransactionPHIDTypeTransaction' => 'applications/transactions/phid/PhabricatorApplicationTransactionPHIDTypeTransaction.php', 836 837 'PhabricatorApplicationTransactionQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionQuery.php', 837 838 'PhabricatorApplicationTransactionResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionResponse.php', 838 839 'PhabricatorApplicationTransactionTextDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php', ··· 2844 2845 'PhabricatorApplicationTransactionFeedStory' => 'PhabricatorFeedStory', 2845 2846 'PhabricatorApplicationTransactionNoEffectException' => 'Exception', 2846 2847 'PhabricatorApplicationTransactionNoEffectResponse' => 'AphrontProxyResponse', 2848 + 'PhabricatorApplicationTransactionPHIDTypeTransaction' => 'PhabricatorPHIDType', 2847 2849 'PhabricatorApplicationTransactionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 2848 2850 'PhabricatorApplicationTransactionResponse' => 'AphrontProxyResponse', 2849 2851 'PhabricatorApplicationTransactionTextDiffDetailView' => 'AphrontView',
+1 -1
src/applications/auth/query/PhabricatorAuthProviderConfigTransactionQuery.php
··· 3 3 final class PhabricatorAuthProviderConfigTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PhabricatorAuthProviderConfigTransaction(); 8 8 } 9 9
+1 -1
src/applications/config/query/PhabricatorConfigTransactionQuery.php
··· 3 3 final class PhabricatorConfigTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PhabricatorConfigTransaction(); 8 8 } 9 9
+1 -1
src/applications/conpherence/query/ConpherenceTransactionQuery.php
··· 6 6 final class ConpherenceTransactionQuery 7 7 extends PhabricatorApplicationTransactionQuery { 8 8 9 - protected function getTemplateApplicationTransaction() { 9 + public function getTemplateApplicationTransaction() { 10 10 return new ConpherenceTransaction(); 11 11 } 12 12
+1 -1
src/applications/legalpad/query/LegalpadTransactionQuery.php
··· 6 6 final class LegalpadTransactionQuery 7 7 extends PhabricatorApplicationTransactionQuery { 8 8 9 - protected function getTemplateApplicationTransaction() { 9 + public function getTemplateApplicationTransaction() { 10 10 return new LegalpadTransaction(); 11 11 } 12 12
+1 -1
src/applications/macro/query/PhabricatorMacroTransactionQuery.php
··· 3 3 final class PhabricatorMacroTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PhabricatorMacroTransaction(); 8 8 } 9 9
-1
src/applications/phid/PhabricatorPHIDConstants.php
··· 20 20 const PHID_TYPE_CART = 'CART'; 21 21 const PHID_TYPE_LEGB = 'LEGB'; 22 22 23 - const PHID_TYPE_XACT = 'XACT'; 24 23 const PHID_TYPE_XCMT = 'XCMT'; 25 24 26 25 const PHID_TYPE_BOOK = 'BOOK';
+1 -82
src/applications/phid/handle/PhabricatorObjectHandleData.php
··· 24 24 public function loadObjects() { 25 25 $phids = array_fuse($this->phids); 26 26 27 - $objects = id(new PhabricatorObjectQuery()) 27 + return id(new PhabricatorObjectQuery()) 28 28 ->setViewer($this->viewer) 29 29 ->withPHIDs($phids) 30 30 ->execute(); 31 - 32 - // For objects which don't support PhabricatorPHIDType yet, load them the 33 - // old way. 34 - $phids = array_diff_key($phids, array_keys($objects)); 35 - $types = phid_group_by_type($phids); 36 - foreach ($types as $type => $phids) { 37 - $objects += $this->loadObjectsOfType($type, $phids); 38 - } 39 - 40 - return $objects; 41 - } 42 - 43 - private function loadObjectsOfType($type, array $phids) { 44 - if (!$this->viewer) { 45 - throw new Exception( 46 - "You must provide a viewer to load handles or objects."); 47 - } 48 - 49 - switch ($type) { 50 - 51 - case PhabricatorPHIDConstants::PHID_TYPE_XACT: 52 - $subtypes = array(); 53 - foreach ($phids as $phid) { 54 - $subtypes[phid_get_subtype($phid)][] = $phid; 55 - } 56 - $xactions = array(); 57 - foreach ($subtypes as $subtype => $subtype_phids) { 58 - // TODO: Do this magically. 59 - // TODO: ^^^ Really do that ^^^ 60 - switch ($subtype) { 61 - case PonderPHIDTypeQuestion::TYPECONST: 62 - $results = id(new PonderQuestionTransactionQuery()) 63 - ->setViewer($this->viewer) 64 - ->withPHIDs($subtype_phids) 65 - ->execute(); 66 - $xactions += mpull($results, null, 'getPHID'); 67 - break; 68 - case PonderPHIDTypeAnswer::TYPECONST: 69 - $results = id(new PonderAnswerTransactionQuery()) 70 - ->setViewer($this->viewer) 71 - ->withPHIDs($subtype_phids) 72 - ->execute(); 73 - $xactions += mpull($results, null, 'getPHID'); 74 - break; 75 - case PholioPHIDTypeMock::TYPECONST: 76 - $results = id(new PholioTransactionQuery()) 77 - ->setViewer($this->viewer) 78 - ->withPHIDs($subtype_phids) 79 - ->execute(); 80 - $xactions += mpull($results, null, 'getPHID'); 81 - break; 82 - case PhabricatorMacroPHIDTypeMacro::TYPECONST: 83 - $results = id(new PhabricatorMacroTransactionQuery()) 84 - ->setViewer($this->viewer) 85 - ->withPHIDs($subtype_phids) 86 - ->execute(); 87 - $xactions += mpull($results, null, 'getPHID'); 88 - break; 89 - } 90 - } 91 - return mpull($xactions, null, 'getPHID'); 92 - 93 - } 94 - 95 - return array(); 96 31 } 97 32 98 33 public function loadHandles() { ··· 111 46 } 112 47 } 113 48 114 - $all_objects = $this->loadObjects(); 115 49 $types = phid_group_by_type($phid_map); 116 50 117 51 $handles = array(); 118 - 119 52 foreach ($types as $type => $phids) { 120 - $objects = array_select_keys($all_objects, $phids); 121 53 switch ($type) { 122 - 123 54 case PhabricatorPHIDConstants::PHID_TYPE_MAGIC: 124 55 // Black magic! 125 56 foreach ($phids as $phid) { ··· 144 75 $handles[$phid] = $handle; 145 76 } 146 77 break; 147 - 148 - default: 149 - foreach ($phids as $phid) { 150 - $handle = new PhabricatorObjectHandle(); 151 - $handle->setType($type); 152 - $handle->setPHID($phid); 153 - $handle->setName('Unknown Object'); 154 - $handle->setFullName('An Unknown Object'); 155 - $handles[$phid] = $handle; 156 - } 157 - break; 158 - 159 78 } 160 79 } 161 80
+1 -1
src/applications/phlux/query/PhluxTransactionQuery.php
··· 3 3 final class PhluxTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PhluxTransaction(); 8 8 } 9 9
+1 -1
src/applications/pholio/query/PholioTransactionQuery.php
··· 6 6 final class PholioTransactionQuery 7 7 extends PhabricatorApplicationTransactionQuery { 8 8 9 - protected function getTemplateApplicationTransaction() { 9 + public function getTemplateApplicationTransaction() { 10 10 return new PholioTransaction(); 11 11 } 12 12
+1 -1
src/applications/phortune/query/PhortuneAccountTransactionQuery.php
··· 3 3 final class PhortuneAccountTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PhortuneAccountTransaction(); 8 8 } 9 9
+1 -1
src/applications/phortune/query/PhortuneProductTransactionQuery.php
··· 3 3 final class PhortuneProductTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PhortuneProductTransaction(); 8 8 } 9 9
+1 -1
src/applications/ponder/query/PonderAnswerTransactionQuery.php
··· 3 3 final class PonderAnswerTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PonderAnswerTransaction(); 8 8 } 9 9
+1 -1
src/applications/ponder/query/PonderQuestionTransactionQuery.php
··· 3 3 final class PonderQuestionTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PonderQuestionTransaction(); 8 8 } 9 9
+1 -1
src/applications/releeph/query/ReleephRequestTransactionQuery.php
··· 3 3 final class ReleephRequestTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new ReleephRequestTransaction(); 8 8 } 9 9
+1 -1
src/applications/repository/query/PhabricatorRepositoryTransactionQuery.php
··· 3 3 final class PhabricatorRepositoryTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PhabricatorRepositoryTransaction(); 8 8 } 9 9
+1 -1
src/applications/slowvote/query/PhabricatorSlowvoteTransactionQuery.php
··· 3 3 final class PhabricatorSlowvoteTransactionQuery 4 4 extends PhabricatorApplicationTransactionQuery { 5 5 6 - protected function getTemplateApplicationTransaction() { 6 + public function getTemplateApplicationTransaction() { 7 7 return new PhabricatorSlowvoteTransaction(); 8 8 } 9 9
+79
src/applications/transactions/phid/PhabricatorApplicationTransactionPHIDTypeTransaction.php
··· 1 + <?php 2 + 3 + final class PhabricatorApplicationTransactionPHIDTypeTransaction 4 + extends PhabricatorPHIDType { 5 + 6 + const TYPECONST = 'XACT'; 7 + 8 + public function getTypeConstant() { 9 + return self::TYPECONST; 10 + } 11 + 12 + public function getTypeName() { 13 + return pht('Transaction'); 14 + } 15 + 16 + public function newObject() { 17 + // NOTE: We could produce an object here, but we'd need to take a PHID type 18 + // and subtype to do so. Currently, we never write edges to transactions, 19 + // so leave this unimplemented for the moment. 20 + return null; 21 + } 22 + 23 + public function loadObjects( 24 + PhabricatorObjectQuery $object_query, 25 + array $phids) { 26 + 27 + static $queries; 28 + if ($queries === null) { 29 + $objects = id(new PhutilSymbolLoader()) 30 + ->setAncestorClass('PhabricatorApplicationTransactionQuery') 31 + ->loadObjects(); 32 + 33 + $queries = array(); 34 + foreach ($objects as $object) { 35 + $type = $object 36 + ->getTemplateApplicationTransaction() 37 + ->getApplicationTransactionType(); 38 + 39 + $queries[$type] = $object; 40 + } 41 + } 42 + 43 + $phid_subtypes = array(); 44 + foreach ($phids as $phid) { 45 + $subtype = phid_get_subtype($phid); 46 + if ($subtype) { 47 + $phid_subtypes[$subtype][] = $phid; 48 + } 49 + } 50 + 51 + $results = array(); 52 + foreach ($phid_subtypes as $subtype => $subtype_phids) { 53 + $query = idx($queries, $subtype); 54 + if (!$query) { 55 + continue; 56 + } 57 + 58 + $xactions = id(clone $query) 59 + ->setViewer($object_query->getViewer()) 60 + ->withPHIDs($subtype_phids) 61 + ->execute(); 62 + 63 + $results += mpull($xactions, null, 'getPHID'); 64 + } 65 + 66 + return $results; 67 + } 68 + 69 + public function loadHandles( 70 + PhabricatorHandleQuery $query, 71 + array $handles, 72 + array $objects) { 73 + 74 + // NOTE: We don't produce meaningful handles here because they're 75 + // impractical to produce and no application uses them. 76 + 77 + } 78 + 79 + }
+1 -1
src/applications/transactions/query/PhabricatorApplicationTransactionQuery.php
··· 11 11 private $needComments = true; 12 12 private $needHandles = true; 13 13 14 - abstract protected function getTemplateApplicationTransaction(); 14 + abstract public function getTemplateApplicationTransaction(); 15 15 16 16 protected function buildMoreWhereClauses(AphrontDatabaseConnection $conn_r) { 17 17 return array();
+1 -1
src/applications/transactions/storage/PhabricatorApplicationTransaction.php
··· 47 47 } 48 48 49 49 public function generatePHID() { 50 - $type = PhabricatorPHIDConstants::PHID_TYPE_XACT; 50 + $type = PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST; 51 51 $subtype = $this->getApplicationTransactionType(); 52 52 53 53 return PhabricatorPHID::generateNewPHID($type, $subtype);