@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at upstream/main 63 lines 1.7 kB view raw
1<?php 2 3final class PhabricatorConfigModuleController 4 extends PhabricatorConfigController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $this->getViewer(); 8 $key = $request->getURIData('module'); 9 10 $all_modules = PhabricatorConfigModule::getAllModules(); 11 12 if (!phutil_nonempty_string($key)) { 13 $key = head_key($all_modules); 14 } 15 16 if (empty($all_modules[$key])) { 17 return new Aphront404Response(); 18 } 19 20 $module = $all_modules[$key]; 21 $content = $module->renderModuleStatus($request); 22 $title = $module->getModuleName(); 23 24 $nav = new AphrontSideNavFilterView(); 25 $nav->setBaseURI(new PhutilURI($this->getApplicationURI())); 26 27 $modules_uri = $this->getApplicationURI('module/'); 28 29 $modules = PhabricatorConfigModule::getAllModules(); 30 31 foreach ($modules as $module_key => $module) { 32 $nav->newLink($module_key) 33 ->setName($module->getModuleName()) 34 ->setHref(urisprintf('%s%s/', $modules_uri, $module_key)) 35 ->setIcon('fa-puzzle-piece'); 36 } 37 38 $nav->selectFilter($key); 39 $header = $this->buildHeaderView($title); 40 41 if ($content instanceof AphrontTableView) { 42 $view = $this->buildConfigBoxView($title, $content); 43 } else { 44 $view = $content; 45 } 46 47 $crumbs = $this->buildApplicationCrumbs() 48 ->addTextCrumb(pht('Extensions/Modules'), $modules_uri) 49 ->addTextCrumb($title) 50 ->setBorder(true); 51 52 $content = id(new PHUITwoColumnView()) 53 ->setHeader($header) 54 ->setFooter($view); 55 56 return $this->newPage() 57 ->setTitle($title) 58 ->setCrumbs($crumbs) 59 ->setNavigation($nav) 60 ->appendChild($content); 61 } 62 63}