public final function renderChangeDetails(PhabricatorUser $viewer)
 {
     $impl = $this->getTransactionImplementation();
     $impl->setViewer($viewer);
     $view = $impl->newChangeDetailView();
     if ($view !== null) {
         return $view;
     }
     return parent::renderChangeDetails($viewer);
 }
 public function renderChangeDetails(PhabricatorUser $viewer)
 {
     switch ($this->getTransactionType()) {
         case self::TYPE_DESCRIPTION:
             $old = $this->getOldValue();
             $new = $this->getNewValue();
             return $this->renderTextCorpusChangeDetails($viewer, $old, $new);
         case self::TYPE_PATHS:
             $old = $this->getOldValue();
             $new = $this->getNewValue();
             $diffs = PhabricatorOwnersPath::getTransactionValueChanges($old, $new);
             list($rem, $add) = $diffs;
             $rows = array();
             foreach ($rem as $ref) {
                 $rows[] = array('class' => 'diff-removed', 'change' => '-') + $ref;
             }
             foreach ($add as $ref) {
                 $rows[] = array('class' => 'diff-added', 'change' => '+') + $ref;
             }
             $rowc = array();
             foreach ($rows as $key => $row) {
                 $rowc[] = $row['class'];
                 $rows[$key] = array($row['change'], $row['excluded'] ? pht('Exclude') : pht('Include'), $viewer->renderHandle($row['repositoryPHID']), $row['path']);
             }
             $table = id(new AphrontTableView($rows))->setRowClasses($rowc)->setHeaders(array(null, pht('Type'), pht('Repository'), pht('Path')))->setColumnClasses(array(null, null, null, 'wide'));
             return $table;
     }
     return parent::renderChangeDetails($viewer);
 }
 public function renderChangeDetails(PhabricatorUser $viewer)
 {
     switch ($this->getTransactionType()) {
         case self::TYPE_DESCRIPTION:
             $old = $this->getOldValue();
             $new = $this->getNewValue();
             return $this->renderTextCorpusChangeDetails($viewer, $old, $new);
     }
     return parent::renderChangeDetails($viewer);
 }
 public function renderChangeDetails(PhabricatorUser $viewer)
 {
     switch ($this->getTransactionType()) {
         case self::TYPE_CONTENT:
             $old = $this->getOldValue();
             $new = $this->getNewValue();
             $files = id(new PhabricatorFileQuery())->setViewer($viewer)->withPHIDs(array_filter(array($old, $new)))->execute();
             $files = mpull($files, null, 'getPHID');
             $old_text = '';
             if (idx($files, $old)) {
                 $old_text = $files[$old]->loadFileData();
             }
             $new_text = '';
             if (idx($files, $new)) {
                 $new_text = $files[$new]->loadFileData();
             }
             return $this->renderTextCorpusChangeDetails($viewer, $old_text, $new_text);
     }
     return parent::renderChangeDetails($viewer);
 }