Path: blob/master/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php
12256 views
<?php12final class PhabricatorApplicationDetailViewController3extends PhabricatorApplicationsController {456public function shouldAllowPublic() {7return true;8}910public function handleRequest(AphrontRequest $request) {11$viewer = $this->getViewer();12$application = $request->getURIData('application');1314$selected = id(new PhabricatorApplicationQuery())15->setViewer($viewer)16->withClasses(array($application))17->executeOne();18if (!$selected) {19return new Aphront404Response();20}2122$title = $selected->getName();2324$crumbs = $this->buildApplicationCrumbs();25$crumbs->addTextCrumb($selected->getName());26$crumbs->setBorder(true);2728$header = id(new PHUIHeaderView())29->setHeader($title)30->setUser($viewer)31->setPolicyObject($selected)32->setHeaderIcon($selected->getIcon());3334if ($selected->isInstalled()) {35$header->setStatus('fa-check', 'bluegrey', pht('Installed'));36} else {37$header->setStatus('fa-ban', 'dark', pht('Uninstalled'));38}3940$timeline = $this->buildTransactionTimeline(41$selected,42new PhabricatorApplicationApplicationTransactionQuery());43$timeline->setShouldTerminate(true);4445$curtain = $this->buildCurtain($selected);46$details = $this->buildPropertySectionView($selected);47$policies = $this->buildPolicyView($selected);4849$configs =50PhabricatorApplicationConfigurationPanel::loadAllPanelsForApplication(51$selected);5253$panels = array();54foreach ($configs as $config) {55$config->setViewer($viewer);56$config->setApplication($selected);57$panel = $config->buildConfigurationPagePanel();58$panel->setBackground(PHUIObjectBoxView::BLUE_PROPERTY);59$panels[] = $panel;60}6162$view = id(new PHUITwoColumnView())63->setHeader($header)64->setCurtain($curtain)65->setMainColumn(array(66$policies,67$panels,68$timeline,69))70->addPropertySection(pht('Details'), $details);7172return $this->newPage()73->setTitle($title)74->setCrumbs($crumbs)75->appendChild(76array(77$view,78));79}8081private function buildPropertySectionView(82PhabricatorApplication $application) {8384$viewer = $this->getViewer();85$properties = id(new PHUIPropertyListView());8687$properties->addProperty(88pht('Description'),89$application->getShortDescription());9091if ($application->getFlavorText()) {92$properties->addProperty(93null,94phutil_tag('em', array(), $application->getFlavorText()));95}9697if ($application->isPrototype()) {98$proto_href = PhabricatorEnv::getDoclink(99'User Guide: Prototype Applications');100$learn_more = phutil_tag(101'a',102array(103'href' => $proto_href,104'target' => '_blank',105),106pht('Learn More'));107108$properties->addProperty(109pht('Prototype'),110pht(111'This application is a prototype. %s',112$learn_more));113}114115$overview = $application->getOverview();116if (strlen($overview)) {117$overview = new PHUIRemarkupView($viewer, $overview);118$properties->addSectionHeader(119pht('Overview'), PHUIPropertyListView::ICON_SUMMARY);120$properties->addTextContent($overview);121}122123return $properties;124}125126private function buildPolicyView(127PhabricatorApplication $application) {128129$viewer = $this->getViewer();130$properties = id(new PHUIPropertyListView());131132$header = id(new PHUIHeaderView())133->setHeader(pht('Policies'));134135$descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions(136$viewer,137$application);138139foreach ($application->getCapabilities() as $capability) {140$properties->addProperty(141$application->getCapabilityLabel($capability),142idx($descriptions, $capability));143}144145return id(new PHUIObjectBoxView())146->setHeader($header)147->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)148->appendChild($properties);149150}151152private function buildCurtain(PhabricatorApplication $application) {153$viewer = $this->getViewer();154155$can_edit = PhabricatorPolicyFilter::hasCapability(156$viewer,157$application,158PhabricatorPolicyCapability::CAN_EDIT);159160$key = get_class($application);161$edit_uri = $this->getApplicationURI("edit/{$key}/");162$install_uri = $this->getApplicationURI("{$key}/install/");163$uninstall_uri = $this->getApplicationURI("{$key}/uninstall/");164165$curtain = $this->newCurtainView($application);166167$curtain->addAction(168id(new PhabricatorActionView())169->setName(pht('Edit Policies'))170->setIcon('fa-pencil')171->setDisabled(!$can_edit)172->setWorkflow(!$can_edit)173->setHref($edit_uri));174175if ($application->canUninstall()) {176if ($application->isInstalled()) {177$curtain->addAction(178id(new PhabricatorActionView())179->setName(pht('Uninstall'))180->setIcon('fa-times')181->setDisabled(!$can_edit)182->setWorkflow(true)183->setHref($uninstall_uri));184} else {185$action = id(new PhabricatorActionView())186->setName(pht('Install'))187->setIcon('fa-plus')188->setDisabled(!$can_edit)189->setWorkflow(true)190->setHref($install_uri);191192$prototypes_enabled = PhabricatorEnv::getEnvConfig(193'phabricator.show-prototypes');194if ($application->isPrototype() && !$prototypes_enabled) {195$action->setDisabled(true);196}197198$curtain->addAction($action);199}200} else {201$curtain->addAction(202id(new PhabricatorActionView())203->setName(pht('Uninstall'))204->setIcon('fa-times')205->setWorkflow(true)206->setDisabled(true)207->setHref($uninstall_uri));208}209210return $curtain;211}212213}214215216