Path: blob/master/src/applications/differential/engine/DifferentialRevisionTimelineEngine.php
12256 views
<?php12final class DifferentialRevisionTimelineEngine3extends PhabricatorTimelineEngine {45protected function newTimelineView() {6$viewer = $this->getViewer();7$xactions = $this->getTransactions();8$revision = $this->getObject();910$view_data = $this->getViewData();11if (!$view_data) {12$view_data = array();13}1415$left = idx($view_data, 'left');16$right = idx($view_data, 'right');1718$diffs = id(new DifferentialDiffQuery())19->setViewer($viewer)20->withIDs(array($left, $right))21->execute();22$diffs = mpull($diffs, null, 'getID');23$left_diff = $diffs[$left];24$right_diff = $diffs[$right];2526$old_ids = idx($view_data, 'old');27$new_ids = idx($view_data, 'new');28$old_ids = array_filter(explode(',', $old_ids));29$new_ids = array_filter(explode(',', $new_ids));3031$type_inline = DifferentialTransaction::TYPE_INLINE;32$changeset_ids = array_merge($old_ids, $new_ids);33$inlines = array();34foreach ($xactions as $xaction) {35if ($xaction->getTransactionType() == $type_inline) {36$inlines[] = $xaction->getComment();37$changeset_ids[] = $xaction->getComment()->getChangesetID();38}39}4041if ($changeset_ids) {42$changesets = id(new DifferentialChangesetQuery())43->setViewer($viewer)44->withIDs($changeset_ids)45->execute();46$changesets = mpull($changesets, null, 'getID');47} else {48$changesets = array();49}5051foreach ($inlines as $key => $inline) {52$inlines[$key] = $inline->newInlineCommentObject();53}5455// NOTE: This is a bit sketchy: this method adjusts the inlines as a56// side effect, which means it will ultimately adjust the transaction57// comments and affect timeline rendering.5859$old = array_select_keys($changesets, $old_ids);60$new = array_select_keys($changesets, $new_ids);61id(new PhabricatorInlineCommentAdjustmentEngine())62->setViewer($viewer)63->setRevision($revision)64->setOldChangesets($old)65->setNewChangesets($new)66->setInlines($inlines)67->execute();6869return id(new DifferentialTransactionView())70->setViewData($view_data)71->setChangesets($changesets)72->setRevision($revision)73->setLeftDiff($left_diff)74->setRightDiff($right_diff);75}7677}787980