[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/project/controller/ -> PhabricatorProjectMembersEditController.php (source)

   1  <?php
   2  
   3  final class PhabricatorProjectMembersEditController
   4    extends PhabricatorProjectController {
   5  
   6    private $id;
   7  
   8    public function willProcessRequest(array $data) {
   9      $this->id = $data['id'];
  10    }
  11  
  12    public function processRequest() {
  13      $request = $this->getRequest();
  14      $user = $request->getUser();
  15  
  16      $project = id(new PhabricatorProjectQuery())
  17        ->setViewer($user)
  18        ->withIDs(array($this->id))
  19        ->needMembers(true)
  20        ->requireCapabilities(
  21          array(
  22            PhabricatorPolicyCapability::CAN_VIEW,
  23            PhabricatorPolicyCapability::CAN_EDIT,
  24          ))
  25        ->executeOne();
  26      if (!$project) {
  27        return new Aphront404Response();
  28      }
  29  
  30      $member_phids = $project->getMemberPHIDs();
  31  
  32      if ($request->isFormPost()) {
  33        $member_spec = array();
  34  
  35        $remove = $request->getStr('remove');
  36        if ($remove) {
  37          $member_spec['-'] = array_fuse(array($remove));
  38        }
  39  
  40        $add_members = $request->getArr('phids');
  41        if ($add_members) {
  42          $member_spec['+'] = array_fuse($add_members);
  43        }
  44  
  45        $type_member = PhabricatorEdgeConfig::TYPE_PROJ_MEMBER;
  46  
  47        $xactions = array();
  48  
  49        $xactions[] = id(new PhabricatorProjectTransaction())
  50          ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
  51          ->setMetadataValue('edge:type', $type_member)
  52          ->setNewValue($member_spec);
  53  
  54        $editor = id(new PhabricatorProjectTransactionEditor($project))
  55          ->setActor($user)
  56          ->setContentSourceFromRequest($request)
  57          ->setContinueOnNoEffect(true)
  58          ->setContinueOnMissingFields(true)
  59          ->applyTransactions($project, $xactions);
  60  
  61        return id(new AphrontRedirectResponse())
  62          ->setURI($request->getRequestURI());
  63      }
  64  
  65      $member_phids = array_reverse($member_phids);
  66      $handles = $this->loadViewerHandles($member_phids);
  67  
  68      $state = array();
  69      foreach ($handles as $handle) {
  70        $state[] = array(
  71          'phid' => $handle->getPHID(),
  72          'name' => $handle->getFullName(),
  73        );
  74      }
  75  
  76      $header_name = pht('Edit Members');
  77      $title = pht('Edit Members');
  78  
  79      $form = new AphrontFormView();
  80      $form
  81        ->setUser($user)
  82        ->appendChild(
  83          id(new AphrontFormTokenizerControl())
  84            ->setName('phids')
  85            ->setLabel(pht('Add Members'))
  86            ->setDatasource(new PhabricatorPeopleDatasource()))
  87        ->appendChild(
  88          id(new AphrontFormSubmitControl())
  89            ->addCancelButton('/project/view/'.$project->getID().'/')
  90            ->setValue(pht('Add Members')));
  91  
  92      $member_list = $this->renderMemberList($project, $handles);
  93  
  94      $form_box = id(new PHUIObjectBoxView())
  95        ->setHeaderText($title)
  96        ->setForm($form);
  97  
  98      $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView())
  99        ->addTextCrumb(
 100          $project->getName(),
 101          '/project/view/'.$project->getID().'/')
 102        ->addTextCrumb(pht('Edit Members'), $this->getApplicationURI());
 103  
 104      return $this->buildApplicationPage(
 105        array(
 106          $crumbs,
 107          $form_box,
 108          $member_list,
 109        ),
 110        array(
 111          'title' => $title,
 112        ));
 113    }
 114  
 115    private function renderMemberList(
 116      PhabricatorProject $project,
 117      array $handles) {
 118  
 119      $request = $this->getRequest();
 120      $viewer = $request->getUser();
 121  
 122      $list = id(new PHUIObjectItemListView())
 123        ->setNoDataString(pht('This project does not have any members.'));
 124  
 125      foreach ($handles as $handle) {
 126        $remove_uri = $this->getApplicationURI(
 127          '/members/'.$project->getID().'/remove/?phid='.$handle->getPHID());
 128  
 129        $item = id(new PHUIObjectItemView())
 130          ->setHeader($handle->getFullName())
 131          ->setHref($handle->getURI())
 132          ->setImageURI($handle->getImageURI());
 133  
 134        $item->addAction(
 135          id(new PHUIListItemView())
 136            ->setIcon('fa-times')
 137            ->setName(pht('Remove'))
 138            ->setHref($remove_uri)
 139            ->setWorkflow(true));
 140  
 141        $list->addItem($item);
 142      }
 143  
 144      return $list;
 145    }
 146  }


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