[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

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

   1  <?php
   2  
   3  final class PhabricatorProjectColumnDetailController
   4    extends PhabricatorProjectBoardController {
   5  
   6    private $id;
   7    private $projectID;
   8  
   9    public function willProcessRequest(array $data) {
  10      $this->projectID = $data['projectID'];
  11      $this->id = idx($data, 'id');
  12    }
  13  
  14    public function processRequest() {
  15      $request = $this->getRequest();
  16      $viewer = $request->getUser();
  17  
  18      $project = id(new PhabricatorProjectQuery())
  19        ->setViewer($viewer)
  20        ->requireCapabilities(
  21          array(
  22            PhabricatorPolicyCapability::CAN_VIEW,
  23          ))
  24        ->withIDs(array($this->projectID))
  25        ->executeOne();
  26  
  27      if (!$project) {
  28        return new Aphront404Response();
  29      }
  30      $this->setProject($project);
  31  
  32      $column = id(new PhabricatorProjectColumnQuery())
  33        ->setViewer($viewer)
  34        ->withIDs(array($this->id))
  35        ->requireCapabilities(
  36          array(
  37            PhabricatorPolicyCapability::CAN_VIEW,
  38          ))
  39          ->executeOne();
  40      if (!$column) {
  41        return new Aphront404Response();
  42      }
  43  
  44      $xactions = id(new PhabricatorProjectColumnTransactionQuery())
  45        ->setViewer($viewer)
  46        ->withObjectPHIDs(array($column->getPHID()))
  47        ->execute();
  48  
  49      $engine = id(new PhabricatorMarkupEngine())
  50        ->setViewer($viewer);
  51  
  52      $timeline = id(new PhabricatorApplicationTransactionView())
  53        ->setUser($viewer)
  54        ->setObjectPHID($column->getPHID())
  55        ->setTransactions($xactions);
  56  
  57      $title = pht('%s', $column->getDisplayName());
  58      $crumbs = $this->buildApplicationCrumbs();
  59      $crumbs->addTextCrumb(
  60        pht('Board'),
  61        $this->getApplicationURI('board/'.$project->getID().'/'));
  62      $crumbs->addTextCrumb($title);
  63  
  64      $header = $this->buildHeaderView($column);
  65      $actions = $this->buildActionView($column);
  66      $properties = $this->buildPropertyView($column, $actions);
  67  
  68      $box = id(new PHUIObjectBoxView())
  69        ->setHeader($header)
  70        ->addPropertyList($properties);
  71  
  72      return $this->buildApplicationPage(
  73        array(
  74          $crumbs,
  75          $box,
  76          $timeline,
  77        ),
  78        array(
  79          'title' => $title,
  80        ));
  81    }
  82  
  83    private function buildHeaderView(PhabricatorProjectColumn $column) {
  84      $viewer = $this->getRequest()->getUser();
  85  
  86      $header = id(new PHUIHeaderView())
  87        ->setUser($viewer)
  88        ->setHeader($column->getDisplayName())
  89        ->setPolicyObject($column);
  90  
  91      if ($column->isHidden()) {
  92        $header->setStatus('fa-ban', 'dark', pht('Hidden'));
  93      }
  94  
  95      return $header;
  96    }
  97  
  98    private function buildActionView(PhabricatorProjectColumn $column) {
  99      $viewer = $this->getRequest()->getUser();
 100  
 101      $id = $column->getID();
 102      $project_id = $this->getProject()->getID();
 103      $base_uri = '/board/'.$project_id.'/';
 104  
 105      $actions = id(new PhabricatorActionListView())
 106        ->setObjectURI($this->getApplicationURI($base_uri.'column/'.$id.'/'))
 107        ->setUser($viewer);
 108  
 109      $can_edit = PhabricatorPolicyFilter::hasCapability(
 110        $viewer,
 111        $column,
 112        PhabricatorPolicyCapability::CAN_EDIT);
 113  
 114      $actions->addAction(
 115        id(new PhabricatorActionView())
 116          ->setName(pht('Edit Column'))
 117          ->setIcon('fa-pencil')
 118          ->setHref($this->getApplicationURI($base_uri.'edit/'.$id.'/'))
 119          ->setDisabled(!$can_edit)
 120          ->setWorkflow(!$can_edit));
 121  
 122      return $actions;
 123    }
 124  
 125    private function buildPropertyView(
 126      PhabricatorProjectColumn $column,
 127      PhabricatorActionListView $actions) {
 128      $viewer = $this->getRequest()->getUser();
 129  
 130      $properties = id(new PHUIPropertyListView())
 131        ->setUser($viewer)
 132        ->setObject($column)
 133        ->setActionList($actions);
 134  
 135      $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions(
 136        $viewer,
 137        $column);
 138  
 139      $properties->addProperty(
 140        pht('Editable By'),
 141        $descriptions[PhabricatorPolicyCapability::CAN_EDIT]);
 142  
 143  
 144      $limit = $column->getPointLimit();
 145      $properties->addProperty(
 146        pht('Point Limit'),
 147        $limit ? $limit : pht('No Limit'));
 148  
 149      return $properties;
 150    }
 151  
 152  }


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