[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

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

   1  <?php
   2  
   3  final class DiffusionRepositoryEditBasicController
   4    extends DiffusionRepositoryEditController {
   5  
   6    public function processRequest() {
   7      $request = $this->getRequest();
   8      $user = $request->getUser();
   9      $drequest = $this->diffusionRequest;
  10      $repository = $drequest->getRepository();
  11  
  12      $repository = id(new PhabricatorRepositoryQuery())
  13        ->setViewer($user)
  14        ->requireCapabilities(
  15          array(
  16            PhabricatorPolicyCapability::CAN_VIEW,
  17            PhabricatorPolicyCapability::CAN_EDIT,
  18          ))
  19        ->needProjectPHIDs(true)
  20        ->withIDs(array($repository->getID()))
  21        ->executeOne();
  22  
  23      if (!$repository) {
  24        return new Aphront404Response();
  25      }
  26  
  27      $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/');
  28  
  29      $v_name = $repository->getName();
  30      $v_desc = $repository->getDetail('description');
  31      $v_clone_name = $repository->getDetail('clone-name');
  32      $e_name = true;
  33      $errors = array();
  34  
  35      if ($request->isFormPost()) {
  36        $v_name = $request->getStr('name');
  37        $v_desc = $request->getStr('description');
  38        $v_projects = $request->getArr('projectPHIDs');
  39  
  40        if ($repository->isHosted()) {
  41          $v_clone_name = $request->getStr('cloneName');
  42        }
  43  
  44        if (!strlen($v_name)) {
  45          $e_name = pht('Required');
  46          $errors[] = pht('Repository name is required.');
  47        } else {
  48          $e_name = null;
  49        }
  50  
  51        if (!$errors) {
  52          $xactions = array();
  53          $template = id(new PhabricatorRepositoryTransaction());
  54  
  55          $type_name = PhabricatorRepositoryTransaction::TYPE_NAME;
  56          $type_desc = PhabricatorRepositoryTransaction::TYPE_DESCRIPTION;
  57          $type_edge = PhabricatorTransactions::TYPE_EDGE;
  58          $type_clone_name = PhabricatorRepositoryTransaction::TYPE_CLONE_NAME;
  59  
  60          $xactions[] = id(clone $template)
  61            ->setTransactionType($type_name)
  62            ->setNewValue($v_name);
  63  
  64          $xactions[] = id(clone $template)
  65            ->setTransactionType($type_desc)
  66            ->setNewValue($v_desc);
  67  
  68          $xactions[] = id(clone $template)
  69            ->setTransactionType($type_clone_name)
  70            ->setNewValue($v_clone_name);
  71  
  72          $xactions[] = id(clone $template)
  73            ->setTransactionType($type_edge)
  74            ->setMetadataValue(
  75              'edge:type',
  76              PhabricatorProjectObjectHasProjectEdgeType::EDGECONST)
  77            ->setNewValue(
  78              array(
  79                '=' => array_fuse($v_projects),
  80              ));
  81  
  82          id(new PhabricatorRepositoryEditor())
  83            ->setContinueOnNoEffect(true)
  84            ->setContentSourceFromRequest($request)
  85            ->setActor($user)
  86            ->applyTransactions($repository, $xactions);
  87  
  88          return id(new AphrontRedirectResponse())->setURI($edit_uri);
  89        }
  90      }
  91  
  92      $crumbs = $this->buildApplicationCrumbs();
  93      $crumbs->addTextCrumb(pht('Edit Basics'));
  94  
  95      $title = pht('Edit %s', $repository->getName());
  96      $project_handles = $this->loadViewerHandles($repository->getProjectPHIDs());
  97  
  98      $form = id(new AphrontFormView())
  99        ->setUser($user)
 100        ->appendChild(
 101          id(new AphrontFormTextControl())
 102            ->setName('name')
 103            ->setLabel(pht('Name'))
 104            ->setValue($v_name)
 105            ->setError($e_name));
 106  
 107      if ($repository->isHosted()) {
 108        $form
 109          ->appendChild(
 110            id(new AphrontFormTextControl())
 111              ->setName('cloneName')
 112              ->setLabel(pht('Clone/Checkout As'))
 113              ->setValue($v_clone_name)
 114              ->setCaption(
 115                pht(
 116                  'Optional directory name to use when cloning or checking out '.
 117                  'this repository.')));
 118      }
 119  
 120      $form
 121        ->appendChild(
 122          id(new PhabricatorRemarkupControl())
 123            ->setUser($user)
 124            ->setName('description')
 125            ->setLabel(pht('Description'))
 126            ->setValue($v_desc))
 127        ->appendChild(
 128          id(new AphrontFormTokenizerControl())
 129            ->setDatasource(new PhabricatorProjectDatasource())
 130            ->setName('projectPHIDs')
 131            ->setLabel(pht('Projects'))
 132            ->setValue($project_handles))
 133        ->appendChild(
 134          id(new AphrontFormSubmitControl())
 135            ->setValue(pht('Save'))
 136            ->addCancelButton($edit_uri))
 137        ->appendChild(id(new PHUIFormDividerControl()))
 138        ->appendRemarkupInstructions($this->getReadmeInstructions());
 139  
 140      $object_box = id(new PHUIObjectBoxView())
 141        ->setHeaderText($title)
 142        ->setForm($form)
 143        ->setFormErrors($errors);
 144  
 145      return $this->buildApplicationPage(
 146        array(
 147          $crumbs,
 148          $object_box,
 149        ),
 150        array(
 151          'title' => $title,
 152        ));
 153    }
 154  
 155    private function getReadmeInstructions() {
 156      return pht(<<<EOTEXT
 157  You can also create a `README` file at the repository root (or in any
 158  subdirectory) to provide information about the repository. These formats are
 159  supported:
 160  
 161  | File Name       | Rendered As... |
 162  |-----------------|----------------|
 163  | `README`          | Plain Text |
 164  | `README.txt`      | Plain Text |
 165  | `README.remarkup` | Remarkup |
 166  | `README.md`       | Remarkup |
 167  | `README.rainbow`  | \xC2\xA1Fiesta! |
 168  EOTEXT
 169  );
 170    }
 171  
 172  }


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