Skip to content

Commit 5cc3bbf

Browse files
author
epriestley
committedJul 29, 2013
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
1 parent 1720d65 commit 5cc3bbf

22 files changed

+101
-102
lines changed
 

‎resources/sql/patches/20130715.votecomments.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
$comment_phid = PhabricatorPHID::generateNewPHID(
4444
PhabricatorPHIDConstants::PHID_TYPE_XCMT);
4545
$xaction_phid = PhabricatorPHID::generateNewPHID(
46-
PhabricatorPHIDConstants::PHID_TYPE_XACT,
46+
PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST,
4747
PhabricatorSlowvotePHIDTypePoll::TYPECONST);
4848

4949
$source = PhabricatorContentSource::newForSource(

‎resources/sql/patches/20130728.ponderxcomment.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
}
2828

2929
$comment_phid = PhabricatorPHID::generateNewPHID(
30-
PhabricatorPHIDConstants::PHID_TYPE_XACT,
30+
PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST,
3131
$type);
3232

3333
$xaction_phid = PhabricatorPHID::generateNewPHID(
34-
PhabricatorPHIDConstants::PHID_TYPE_XACT,
34+
PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST,
3535
$type);
3636

3737
queryfx(

‎src/__phutil_library_map__.php

+2
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,7 @@
833833
'PhabricatorApplicationTransactionInterface' => 'applications/transactions/interface/PhabricatorApplicationTransactionInterface.php',
834834
'PhabricatorApplicationTransactionNoEffectException' => 'applications/transactions/exception/PhabricatorApplicationTransactionNoEffectException.php',
835835
'PhabricatorApplicationTransactionNoEffectResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionNoEffectResponse.php',
836+
'PhabricatorApplicationTransactionPHIDTypeTransaction' => 'applications/transactions/phid/PhabricatorApplicationTransactionPHIDTypeTransaction.php',
836837
'PhabricatorApplicationTransactionQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionQuery.php',
837838
'PhabricatorApplicationTransactionResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionResponse.php',
838839
'PhabricatorApplicationTransactionTextDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php',
@@ -2844,6 +2845,7 @@
28442845
'PhabricatorApplicationTransactionFeedStory' => 'PhabricatorFeedStory',
28452846
'PhabricatorApplicationTransactionNoEffectException' => 'Exception',
28462847
'PhabricatorApplicationTransactionNoEffectResponse' => 'AphrontProxyResponse',
2848+
'PhabricatorApplicationTransactionPHIDTypeTransaction' => 'PhabricatorPHIDType',
28472849
'PhabricatorApplicationTransactionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
28482850
'PhabricatorApplicationTransactionResponse' => 'AphrontProxyResponse',
28492851
'PhabricatorApplicationTransactionTextDiffDetailView' => 'AphrontView',

‎src/applications/auth/query/PhabricatorAuthProviderConfigTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PhabricatorAuthProviderConfigTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PhabricatorAuthProviderConfigTransaction();
88
}
99

‎src/applications/config/query/PhabricatorConfigTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PhabricatorConfigTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PhabricatorConfigTransaction();
88
}
99

‎src/applications/conpherence/query/ConpherenceTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
final class ConpherenceTransactionQuery
77
extends PhabricatorApplicationTransactionQuery {
88

9-
protected function getTemplateApplicationTransaction() {
9+
public function getTemplateApplicationTransaction() {
1010
return new ConpherenceTransaction();
1111
}
1212

‎src/applications/legalpad/query/LegalpadTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
final class LegalpadTransactionQuery
77
extends PhabricatorApplicationTransactionQuery {
88

9-
protected function getTemplateApplicationTransaction() {
9+
public function getTemplateApplicationTransaction() {
1010
return new LegalpadTransaction();
1111
}
1212

‎src/applications/macro/query/PhabricatorMacroTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PhabricatorMacroTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PhabricatorMacroTransaction();
88
}
99

‎src/applications/phid/PhabricatorPHIDConstants.php

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ final class PhabricatorPHIDConstants {
2020
const PHID_TYPE_CART = 'CART';
2121
const PHID_TYPE_LEGB = 'LEGB';
2222

23-
const PHID_TYPE_XACT = 'XACT';
2423
const PHID_TYPE_XCMT = 'XCMT';
2524

2625
const PHID_TYPE_BOOK = 'BOOK';

‎src/applications/phid/handle/PhabricatorObjectHandleData.php

+1-82
Original file line numberDiff line numberDiff line change
@@ -24,75 +24,10 @@ public static function loadOneHandle($phid, PhabricatorUser $viewer) {
2424
public function loadObjects() {
2525
$phids = array_fuse($this->phids);
2626

27-
$objects = id(new PhabricatorObjectQuery())
27+
return id(new PhabricatorObjectQuery())
2828
->setViewer($this->viewer)
2929
->withPHIDs($phids)
3030
->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();
9631
}
9732

9833
public function loadHandles() {
@@ -111,15 +46,11 @@ public function loadHandles() {
11146
}
11247
}
11348

114-
$all_objects = $this->loadObjects();
11549
$types = phid_group_by_type($phid_map);
11650

11751
$handles = array();
118-
11952
foreach ($types as $type => $phids) {
120-
$objects = array_select_keys($all_objects, $phids);
12153
switch ($type) {
122-
12354
case PhabricatorPHIDConstants::PHID_TYPE_MAGIC:
12455
// Black magic!
12556
foreach ($phids as $phid) {
@@ -144,18 +75,6 @@ public function loadHandles() {
14475
$handles[$phid] = $handle;
14576
}
14677
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-
15978
}
16079
}
16180

‎src/applications/phlux/query/PhluxTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PhluxTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PhluxTransaction();
88
}
99

‎src/applications/pholio/query/PholioTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
final class PholioTransactionQuery
77
extends PhabricatorApplicationTransactionQuery {
88

9-
protected function getTemplateApplicationTransaction() {
9+
public function getTemplateApplicationTransaction() {
1010
return new PholioTransaction();
1111
}
1212

‎src/applications/phortune/query/PhortuneAccountTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PhortuneAccountTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PhortuneAccountTransaction();
88
}
99

‎src/applications/phortune/query/PhortuneProductTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PhortuneProductTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PhortuneProductTransaction();
88
}
99

‎src/applications/ponder/query/PonderAnswerTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PonderAnswerTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PonderAnswerTransaction();
88
}
99

‎src/applications/ponder/query/PonderQuestionTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PonderQuestionTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PonderQuestionTransaction();
88
}
99

‎src/applications/releeph/query/ReleephRequestTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class ReleephRequestTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new ReleephRequestTransaction();
88
}
99

‎src/applications/repository/query/PhabricatorRepositoryTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PhabricatorRepositoryTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PhabricatorRepositoryTransaction();
88
}
99

‎src/applications/slowvote/query/PhabricatorSlowvoteTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
final class PhabricatorSlowvoteTransactionQuery
44
extends PhabricatorApplicationTransactionQuery {
55

6-
protected function getTemplateApplicationTransaction() {
6+
public function getTemplateApplicationTransaction() {
77
return new PhabricatorSlowvoteTransaction();
88
}
99

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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+
}

‎src/applications/transactions/query/PhabricatorApplicationTransactionQuery.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ abstract class PhabricatorApplicationTransactionQuery
1111
private $needComments = true;
1212
private $needHandles = true;
1313

14-
abstract protected function getTemplateApplicationTransaction();
14+
abstract public function getTemplateApplicationTransaction();
1515

1616
protected function buildMoreWhereClauses(AphrontDatabaseConnection $conn_r) {
1717
return array();

‎src/applications/transactions/storage/PhabricatorApplicationTransaction.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public function setMetadataValue($key, $value) {
4747
}
4848

4949
public function generatePHID() {
50-
$type = PhabricatorPHIDConstants::PHID_TYPE_XACT;
50+
$type = PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST;
5151
$subtype = $this->getApplicationTransactionType();
5252

5353
return PhabricatorPHID::generateNewPHID($type, $subtype);

0 commit comments

Comments
 (0)
Failed to load comments.