[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/meta/controller/ -> PhabricatorApplicationDetailViewController.php (source)

   1  <?php
   2  
   3  final class PhabricatorApplicationDetailViewController
   4    extends PhabricatorApplicationsController {
   5  
   6    private $application;
   7  
   8    public function shouldAllowPublic() {
   9      return true;
  10    }
  11  
  12    public function willProcessRequest(array $data) {
  13      $this->application = $data['application'];
  14    }
  15  
  16    public function processRequest() {
  17      $request = $this->getRequest();
  18      $user = $request->getUser();
  19  
  20      $selected = id(new PhabricatorApplicationQuery())
  21        ->setViewer($user)
  22        ->withClasses(array($this->application))
  23        ->executeOne();
  24      if (!$selected) {
  25        return new Aphront404Response();
  26      }
  27  
  28      $title = $selected->getName();
  29  
  30      $crumbs = $this->buildApplicationCrumbs();
  31      $crumbs->addTextCrumb($selected->getName());
  32  
  33      $header = id(new PHUIHeaderView())
  34        ->setHeader($title)
  35        ->setUser($user)
  36        ->setPolicyObject($selected);
  37  
  38      if ($selected->isInstalled()) {
  39        $header->setStatus('fa-check', 'bluegrey', pht('Installed'));
  40      } else {
  41        $header->setStatus('fa-ban', 'dark', pht('Uninstalled'));
  42      }
  43  
  44      $actions = $this->buildActionView($user, $selected);
  45      $properties = $this->buildPropertyView($selected, $actions);
  46  
  47      $object_box = id(new PHUIObjectBoxView())
  48        ->setHeader($header)
  49        ->addPropertyList($properties);
  50  
  51      return $this->buildApplicationPage(
  52        array(
  53          $crumbs,
  54          $object_box,
  55        ),
  56        array(
  57          'title' => $title,
  58        ));
  59    }
  60  
  61    private function buildPropertyView(
  62      PhabricatorApplication $application,
  63      PhabricatorActionListView $actions) {
  64  
  65      $viewer = $this->getRequest()->getUser();
  66  
  67      $properties = id(new PHUIPropertyListView());
  68      $properties->setActionList($actions);
  69  
  70      $properties->addProperty(
  71        pht('Description'),
  72        $application->getShortDescription());
  73  
  74      if ($application->getFlavorText()) {
  75        $properties->addProperty(
  76          null,
  77          phutil_tag('em', array(), $application->getFlavorText()));
  78      }
  79  
  80      if ($application->isPrototype()) {
  81        $proto_href = PhabricatorEnv::getDoclink(
  82          'User Guide: Prototype Applications');
  83        $learn_more = phutil_tag(
  84          'a',
  85          array(
  86            'href' => $proto_href,
  87            'target' => '_blank',
  88          ),
  89          pht('Learn More'));
  90  
  91        $properties->addProperty(
  92          pht('Prototype'),
  93          pht(
  94            'This application is a prototype. %s',
  95            $learn_more));
  96      }
  97  
  98      $overview = $application->getOverview();
  99      if ($overview) {
 100        $properties->addSectionHeader(
 101          pht('Overview'),
 102          PHUIPropertyListView::ICON_SUMMARY);
 103        $properties->addTextContent(
 104          PhabricatorMarkupEngine::renderOneObject(
 105            id(new PhabricatorMarkupOneOff())->setContent($overview),
 106            'default',
 107            $viewer));
 108      }
 109  
 110      $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions(
 111        $viewer,
 112        $application);
 113  
 114      $properties->addSectionHeader(pht('Policies'));
 115  
 116      foreach ($application->getCapabilities() as $capability) {
 117        $properties->addProperty(
 118          $application->getCapabilityLabel($capability),
 119          idx($descriptions, $capability));
 120      }
 121  
 122      return $properties;
 123    }
 124  
 125    private function buildActionView(
 126      PhabricatorUser $user,
 127      PhabricatorApplication $selected) {
 128  
 129      $view = id(new PhabricatorActionListView())
 130        ->setUser($user)
 131        ->setObjectURI($this->getRequest()->getRequestURI());
 132  
 133      if ($selected->getHelpURI()) {
 134        $view->addAction(
 135          id(new PhabricatorActionView())
 136            ->setName(pht('Help / Documentation'))
 137            ->setIcon('fa-life-ring')
 138            ->setHref($selected->getHelpURI()));
 139      }
 140  
 141      $can_edit = PhabricatorPolicyFilter::hasCapability(
 142        $user,
 143        $selected,
 144        PhabricatorPolicyCapability::CAN_EDIT);
 145  
 146      $edit_uri = $this->getApplicationURI('edit/'.get_class($selected).'/');
 147  
 148      $view->addAction(
 149        id(new PhabricatorActionView())
 150          ->setName(pht('Edit Policies'))
 151          ->setIcon('fa-pencil')
 152          ->setDisabled(!$can_edit)
 153          ->setWorkflow(!$can_edit)
 154          ->setHref($edit_uri));
 155  
 156      if ($selected->canUninstall()) {
 157        if ($selected->isInstalled()) {
 158          $view->addAction(
 159            id(new PhabricatorActionView())
 160              ->setName(pht('Uninstall'))
 161              ->setIcon('fa-times')
 162              ->setDisabled(!$can_edit)
 163              ->setWorkflow(true)
 164              ->setHref(
 165                $this->getApplicationURI(get_class($selected).'/uninstall/')));
 166        } else {
 167          $action = id(new PhabricatorActionView())
 168            ->setName(pht('Install'))
 169            ->setIcon('fa-plus')
 170            ->setDisabled(!$can_edit)
 171            ->setWorkflow(true)
 172            ->setHref(
 173               $this->getApplicationURI(get_class($selected).'/install/'));
 174  
 175          $prototypes_enabled = PhabricatorEnv::getEnvConfig(
 176            'phabricator.show-prototypes');
 177          if ($selected->isPrototype() && !$prototypes_enabled) {
 178            $action->setDisabled(true);
 179          }
 180  
 181          $view->addAction($action);
 182        }
 183      } else {
 184        $view->addAction(
 185          id(new PhabricatorActionView())
 186            ->setName(pht('Uninstall'))
 187            ->setIcon('fa-times')
 188            ->setWorkflow(true)
 189            ->setDisabled(true)
 190            ->setHref(
 191              $this->getApplicationURI(get_class($selected).'/uninstall/')));
 192      }
 193  
 194      return $view;
 195    }
 196  
 197  }


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