Changeset View
Changeset View
Standalone View
Standalone View
src/applications/differential/storage/DifferentialRevision.php
<?php | <?php | ||||
final class DifferentialRevision extends DifferentialDAO | final class DifferentialRevision extends DifferentialDAO | ||||
implements | implements | ||||
PhabricatorTokenReceiverInterface, | PhabricatorTokenReceiverInterface, | ||||
PhabricatorPolicyInterface, | PhabricatorPolicyInterface, | ||||
PhabricatorExtendedPolicyInterface, | PhabricatorExtendedPolicyInterface, | ||||
PhabricatorFlaggableInterface, | PhabricatorFlaggableInterface, | ||||
PhrequentTrackableInterface, | PhrequentTrackableInterface, | ||||
HarbormasterBuildableInterface, | HarbormasterBuildableInterface, | ||||
PhabricatorSubscribableInterface, | PhabricatorSubscribableInterface, | ||||
PhabricatorCustomFieldInterface, | PhabricatorCustomFieldInterface, | ||||
PhabricatorApplicationTransactionInterface, | PhabricatorApplicationTransactionInterface, | ||||
PhabricatorTimelineInterface, | |||||
PhabricatorMentionableInterface, | PhabricatorMentionableInterface, | ||||
PhabricatorDestructibleInterface, | PhabricatorDestructibleInterface, | ||||
PhabricatorProjectInterface, | PhabricatorProjectInterface, | ||||
PhabricatorFulltextInterface, | PhabricatorFulltextInterface, | ||||
PhabricatorFerretInterface, | PhabricatorFerretInterface, | ||||
PhabricatorConduitResultInterface, | PhabricatorConduitResultInterface, | ||||
PhabricatorDraftInterface { | PhabricatorDraftInterface { | ||||
▲ Show 20 Lines • Show All 971 Lines • ▼ Show 20 Lines | /* -( PhabricatorApplicationTransactionInterface )------------------------- */ | ||||
public function getApplicationTransactionObject() { | public function getApplicationTransactionObject() { | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getApplicationTransactionTemplate() { | public function getApplicationTransactionTemplate() { | ||||
return new DifferentialTransaction(); | return new DifferentialTransaction(); | ||||
} | } | ||||
public function willRenderTimeline( | |||||
PhabricatorApplicationTransactionView $timeline, | |||||
AphrontRequest $request) { | |||||
$viewer = $request->getViewer(); | |||||
$render_data = $timeline->getRenderData(); | |||||
$left = $request->getInt('left', idx($render_data, 'left')); | |||||
$right = $request->getInt('right', idx($render_data, 'right')); | |||||
$diffs = id(new DifferentialDiffQuery()) | |||||
->setViewer($request->getUser()) | |||||
->withIDs(array($left, $right)) | |||||
->execute(); | |||||
$diffs = mpull($diffs, null, 'getID'); | |||||
$left_diff = $diffs[$left]; | |||||
$right_diff = $diffs[$right]; | |||||
$old_ids = $request->getStr('old', idx($render_data, 'old')); | |||||
$new_ids = $request->getStr('new', idx($render_data, 'new')); | |||||
$old_ids = array_filter(explode(',', $old_ids)); | |||||
$new_ids = array_filter(explode(',', $new_ids)); | |||||
$type_inline = DifferentialTransaction::TYPE_INLINE; | |||||
$changeset_ids = array_merge($old_ids, $new_ids); | |||||
$inlines = array(); | |||||
foreach ($timeline->getTransactions() as $xaction) { | |||||
if ($xaction->getTransactionType() == $type_inline) { | |||||
$inlines[] = $xaction->getComment(); | |||||
$changeset_ids[] = $xaction->getComment()->getChangesetID(); | |||||
} | |||||
} | |||||
if ($changeset_ids) { | |||||
$changesets = id(new DifferentialChangesetQuery()) | |||||
->setViewer($request->getUser()) | |||||
->withIDs($changeset_ids) | |||||
->execute(); | |||||
$changesets = mpull($changesets, null, 'getID'); | |||||
} else { | |||||
$changesets = array(); | |||||
} | |||||
foreach ($inlines as $key => $inline) { | |||||
$inlines[$key] = DifferentialInlineComment::newFromModernComment( | |||||
$inline); | |||||
} | |||||
$query = id(new DifferentialInlineCommentQuery()) | |||||
->needHidden(true) | |||||
->setViewer($viewer); | |||||
// NOTE: This is a bit sketchy: this method adjusts the inlines as a | |||||
// side effect, which means it will ultimately adjust the transaction | |||||
// comments and affect timeline rendering. | |||||
$query->adjustInlinesForChangesets( | |||||
$inlines, | |||||
array_select_keys($changesets, $old_ids), | |||||
array_select_keys($changesets, $new_ids), | |||||
$this); | |||||
return $timeline | |||||
->setChangesets($changesets) | |||||
->setRevision($this) | |||||
->setLeftDiff($left_diff) | |||||
->setRightDiff($right_diff); | |||||
} | |||||
/* -( PhabricatorDestructibleInterface )----------------------------------- */ | /* -( PhabricatorDestructibleInterface )----------------------------------- */ | ||||
public function destroyObjectPermanently( | public function destroyObjectPermanently( | ||||
PhabricatorDestructionEngine $engine) { | PhabricatorDestructionEngine $engine) { | ||||
$this->openTransaction(); | $this->openTransaction(); | ||||
▲ Show 20 Lines • Show All 125 Lines • ▼ Show 20 Lines | |||||
/* -( PhabricatorDraftInterface )------------------------------------------ */ | /* -( PhabricatorDraftInterface )------------------------------------------ */ | ||||
public function newDraftEngine() { | public function newDraftEngine() { | ||||
return new DifferentialRevisionDraftEngine(); | return new DifferentialRevisionDraftEngine(); | ||||
} | } | ||||
/* -( PhabricatorTimelineInterface )--------------------------------------- */ | |||||
public function newTimelineEngine() { | |||||
return new DifferentialRevisionTimelineEngine(); | |||||
} | |||||
} | } |