Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/differential/engine/DifferentialRevisionTimelineEngine.php
12256 views
1
<?php
2
3
final class DifferentialRevisionTimelineEngine
4
extends PhabricatorTimelineEngine {
5
6
protected function newTimelineView() {
7
$viewer = $this->getViewer();
8
$xactions = $this->getTransactions();
9
$revision = $this->getObject();
10
11
$view_data = $this->getViewData();
12
if (!$view_data) {
13
$view_data = array();
14
}
15
16
$left = idx($view_data, 'left');
17
$right = idx($view_data, 'right');
18
19
$diffs = id(new DifferentialDiffQuery())
20
->setViewer($viewer)
21
->withIDs(array($left, $right))
22
->execute();
23
$diffs = mpull($diffs, null, 'getID');
24
$left_diff = $diffs[$left];
25
$right_diff = $diffs[$right];
26
27
$old_ids = idx($view_data, 'old');
28
$new_ids = idx($view_data, 'new');
29
$old_ids = array_filter(explode(',', $old_ids));
30
$new_ids = array_filter(explode(',', $new_ids));
31
32
$type_inline = DifferentialTransaction::TYPE_INLINE;
33
$changeset_ids = array_merge($old_ids, $new_ids);
34
$inlines = array();
35
foreach ($xactions as $xaction) {
36
if ($xaction->getTransactionType() == $type_inline) {
37
$inlines[] = $xaction->getComment();
38
$changeset_ids[] = $xaction->getComment()->getChangesetID();
39
}
40
}
41
42
if ($changeset_ids) {
43
$changesets = id(new DifferentialChangesetQuery())
44
->setViewer($viewer)
45
->withIDs($changeset_ids)
46
->execute();
47
$changesets = mpull($changesets, null, 'getID');
48
} else {
49
$changesets = array();
50
}
51
52
foreach ($inlines as $key => $inline) {
53
$inlines[$key] = $inline->newInlineCommentObject();
54
}
55
56
// NOTE: This is a bit sketchy: this method adjusts the inlines as a
57
// side effect, which means it will ultimately adjust the transaction
58
// comments and affect timeline rendering.
59
60
$old = array_select_keys($changesets, $old_ids);
61
$new = array_select_keys($changesets, $new_ids);
62
id(new PhabricatorInlineCommentAdjustmentEngine())
63
->setViewer($viewer)
64
->setRevision($revision)
65
->setOldChangesets($old)
66
->setNewChangesets($new)
67
->setInlines($inlines)
68
->execute();
69
70
return id(new DifferentialTransactionView())
71
->setViewData($view_data)
72
->setChangesets($changesets)
73
->setRevision($revision)
74
->setLeftDiff($left_diff)
75
->setRightDiff($right_diff);
76
}
77
78
}
79
80