[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/phragment/controller/ -> PhragmentVersionController.php (source)

   1  <?php
   2  
   3  final class PhragmentVersionController extends PhragmentController {
   4  
   5    private $id;
   6  
   7    public function shouldAllowPublic() {
   8      return true;
   9    }
  10  
  11    public function willProcessRequest(array $data) {
  12      $this->id = idx($data, 'id', 0);
  13    }
  14  
  15    public function processRequest() {
  16      $request = $this->getRequest();
  17      $viewer = $request->getUser();
  18  
  19      $version = id(new PhragmentFragmentVersionQuery())
  20        ->setViewer($viewer)
  21        ->withIDs(array($this->id))
  22        ->executeOne();
  23      if ($version === null) {
  24        return new Aphront404Response();
  25      }
  26  
  27      $parents = $this->loadParentFragments($version->getFragment()->getPath());
  28      if ($parents === null) {
  29        return new Aphront404Response();
  30      }
  31      $current = idx($parents, count($parents) - 1, null);
  32  
  33      $crumbs = $this->buildApplicationCrumbsWithPath($parents);
  34      $crumbs->addTextCrumb(pht('View Version %d', $version->getSequence()));
  35  
  36      $phids = array();
  37      $phids[] = $version->getFilePHID();
  38  
  39      $this->loadHandles($phids);
  40  
  41      $file = id(new PhabricatorFileQuery())
  42        ->setViewer($viewer)
  43        ->withPHIDs(array($version->getFilePHID()))
  44        ->executeOne();
  45      if ($file !== null) {
  46        $file_uri = $file->getDownloadURI();
  47      }
  48  
  49      $header = id(new PHUIHeaderView())
  50        ->setHeader(pht(
  51          '%s at version %d',
  52          $version->getFragment()->getName(),
  53          $version->getSequence()))
  54        ->setPolicyObject($version)
  55        ->setUser($viewer);
  56  
  57      $actions = id(new PhabricatorActionListView())
  58        ->setUser($viewer)
  59        ->setObject($version)
  60        ->setObjectURI($version->getURI());
  61      $actions->addAction(
  62        id(new PhabricatorActionView())
  63          ->setName(pht('Download Version'))
  64          ->setDisabled($file === null || !$this->isCorrectlyConfigured())
  65          ->setHref($this->isCorrectlyConfigured() ? $file_uri : null)
  66          ->setIcon('fa-download'));
  67  
  68      $properties = id(new PHUIPropertyListView())
  69        ->setUser($viewer)
  70        ->setObject($version)
  71        ->setActionList($actions);
  72      $properties->addProperty(
  73        pht('File'),
  74        $this->renderHandlesForPHIDs(array($version->getFilePHID())));
  75  
  76      $box = id(new PHUIObjectBoxView())
  77        ->setHeader($header)
  78        ->addPropertyList($properties);
  79  
  80      return $this->buildApplicationPage(
  81        array(
  82          $crumbs,
  83          $this->renderConfigurationWarningIfRequired(),
  84          $box,
  85          $this->renderPreviousVersionList($version),
  86        ),
  87        array(
  88          'title' => pht('View Version'),
  89        ));
  90    }
  91  
  92    private function renderPreviousVersionList(
  93      PhragmentFragmentVersion $version) {
  94  
  95      $request = $this->getRequest();
  96      $viewer = $request->getUser();
  97  
  98      $previous_versions = id(new PhragmentFragmentVersionQuery())
  99        ->setViewer($viewer)
 100        ->withFragmentPHIDs(array($version->getFragmentPHID()))
 101        ->withSequenceBefore($version->getSequence())
 102        ->execute();
 103  
 104      $list = id(new PHUIObjectItemListView())
 105        ->setUser($viewer);
 106  
 107      foreach ($previous_versions as $previous_version) {
 108        $item = id(new PHUIObjectItemView());
 109        $item->setHeader('Version '.$previous_version->getSequence());
 110        $item->setHref($previous_version->getURI());
 111        $item->addAttribute(phabricator_datetime(
 112          $previous_version->getDateCreated(),
 113          $viewer));
 114        $patch_uri = $this->getApplicationURI(
 115          'patch/'.$previous_version->getID().'/'.$version->getID());
 116        $item->addAction(id(new PHUIListItemView())
 117          ->setIcon('fa-file-o')
 118          ->setName(pht('Get Patch'))
 119          ->setHref($this->isCorrectlyConfigured() ? $patch_uri : null)
 120          ->setDisabled(!$this->isCorrectlyConfigured()));
 121        $list->addItem($item);
 122      }
 123  
 124      $item = id(new PHUIObjectItemView());
 125      $item->setHeader('Prior to Version 0');
 126      $item->addAttribute('Prior to any content (empty file)');
 127      $item->addAction(id(new PHUIListItemView())
 128        ->setIcon('fa-file-o')
 129        ->setName(pht('Get Patch'))
 130        ->setHref($this->getApplicationURI(
 131          'patch/x/'.$version->getID())));
 132      $list->addItem($item);
 133  
 134      return $list;
 135    }
 136  
 137  }


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