[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/diffusion/controller/ -> DiffusionChangeController.php (source)

   1  <?php
   2  
   3  final class DiffusionChangeController extends DiffusionController {
   4  
   5    public function shouldAllowPublic() {
   6      return true;
   7    }
   8  
   9    public function processRequest() {
  10      $drequest = $this->diffusionRequest;
  11      $viewer = $this->getRequest()->getUser();
  12  
  13      $content = array();
  14  
  15      $data = $this->callConduitWithDiffusionRequest(
  16        'diffusion.diffquery',
  17        array(
  18          'commit' => $drequest->getCommit(),
  19          'path' => $drequest->getPath(),
  20        ));
  21  
  22      $drequest->updateSymbolicCommit($data['effectiveCommit']);
  23  
  24      $raw_changes = ArcanistDiffChange::newFromConduit($data['changes']);
  25      $diff = DifferentialDiff::newFromRawChanges(
  26        $viewer,
  27        $raw_changes);
  28      $changesets = $diff->getChangesets();
  29      $changeset = reset($changesets);
  30  
  31      if (!$changeset) {
  32        // TODO: Refine this.
  33        return new Aphront404Response();
  34      }
  35  
  36      $repository = $drequest->getRepository();
  37      $callsign = $repository->getCallsign();
  38      $changesets = array(
  39        0 => $changeset,
  40      );
  41  
  42      $changeset_view = new DifferentialChangesetListView();
  43      $changeset_view->setTitle(pht('Change'));
  44      $changeset_view->setChangesets($changesets);
  45      $changeset_view->setVisibleChangesets($changesets);
  46      $changeset_view->setRenderingReferences(
  47        array(
  48          0 => $drequest->generateURI(array('action' => 'rendering-ref')),
  49        ));
  50  
  51      $raw_params = array(
  52        'action' => 'browse',
  53        'params' => array(
  54          'view' => 'raw',
  55        ),
  56      );
  57  
  58      $right_uri = $drequest->generateURI($raw_params);
  59      $raw_params['params']['before'] = $drequest->getStableCommit();
  60      $left_uri = $drequest->generateURI($raw_params);
  61      $changeset_view->setRawFileURIs($left_uri, $right_uri);
  62  
  63      $changeset_view->setRenderURI('/diffusion/'.$callsign.'/diff/');
  64      $changeset_view->setWhitespace(
  65        DifferentialChangesetParser::WHITESPACE_SHOW_ALL);
  66      $changeset_view->setUser($this->getRequest()->getUser());
  67  
  68      // TODO: This is pretty awkward, unify the CSS between Diffusion and
  69      // Differential better.
  70      require_celerity_resource('differential-core-view-css');
  71      $content[] = $changeset_view->render();
  72  
  73      $crumbs = $this->buildCrumbs(
  74        array(
  75          'branch' => true,
  76          'path'   => true,
  77          'view'   => 'change',
  78        ));
  79  
  80      $links = $this->renderPathLinks($drequest, $mode = 'browse');
  81  
  82      $header = id(new PHUIHeaderView())
  83        ->setHeader($links)
  84        ->setUser($viewer)
  85        ->setPolicyObject($drequest->getRepository());
  86      $actions = $this->buildActionView($drequest);
  87      $properties = $this->buildPropertyView($drequest, $actions);
  88  
  89      $object_box = id(new PHUIObjectBoxView())
  90        ->setHeader($header)
  91        ->addPropertyList($properties);
  92  
  93      return $this->buildApplicationPage(
  94        array(
  95          $crumbs,
  96          $object_box,
  97          $content,
  98        ),
  99        array(
 100          'title' => pht('Change'),
 101          'device' => false,
 102        ));
 103    }
 104  
 105    private function buildActionView(DiffusionRequest $drequest) {
 106      $viewer = $this->getRequest()->getUser();
 107  
 108      $view = id(new PhabricatorActionListView())
 109        ->setUser($viewer);
 110  
 111      $history_uri = $drequest->generateURI(
 112        array(
 113          'action' => 'history',
 114        ));
 115  
 116      $view->addAction(
 117        id(new PhabricatorActionView())
 118          ->setName(pht('View History'))
 119          ->setHref($history_uri)
 120          ->setIcon('fa-clock-o'));
 121  
 122      $browse_uri = $drequest->generateURI(
 123        array(
 124          'action' => 'browse',
 125        ));
 126  
 127      $view->addAction(
 128        id(new PhabricatorActionView())
 129          ->setName(pht('Browse Content'))
 130          ->setHref($browse_uri)
 131          ->setIcon('fa-files-o'));
 132  
 133      return $view;
 134    }
 135  
 136    protected function buildPropertyView(
 137      DiffusionRequest $drequest,
 138      PhabricatorActionListView $actions) {
 139  
 140      $viewer = $this->getRequest()->getUser();
 141  
 142      $view = id(new PHUIPropertyListView())
 143        ->setUser($viewer)
 144        ->setActionList($actions);
 145  
 146      $stable_commit = $drequest->getStableCommit();
 147      $callsign = $drequest->getRepository()->getCallsign();
 148  
 149      $view->addProperty(
 150        pht('Commit'),
 151        phutil_tag(
 152          'a',
 153          array(
 154            'href' => $drequest->generateURI(
 155              array(
 156                'action' => 'commit',
 157                'commit' => $stable_commit,
 158              )),
 159          ),
 160          $drequest->getRepository()->formatCommitName($stable_commit)));
 161  
 162      return $view;
 163    }
 164  
 165  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1