[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |