Changeset View
Changeset View
Standalone View
Standalone View
src/applications/diviner/controller/DivinerAtomController.php
| <?php | <?php | ||||
| final class DivinerAtomController extends DivinerController { | final class DivinerAtomController extends DivinerController { | ||||
| private $bookName; | |||||
| private $atomType; | |||||
| private $atomName; | |||||
| private $atomContext; | |||||
| private $atomIndex; | |||||
| public function shouldAllowPublic() { | public function shouldAllowPublic() { | ||||
| return true; | return true; | ||||
| } | } | ||||
| public function willProcessRequest(array $data) { | public function handleRequest(AphrontRequest $request) { | ||||
| $this->bookName = $data['book']; | |||||
| $this->atomType = $data['type']; | |||||
| $this->atomName = $data['name']; | |||||
| $this->atomContext = nonempty(idx($data, 'context'), null); | |||||
| $this->atomIndex = nonempty(idx($data, 'index'), null); | |||||
| } | |||||
| public function processRequest() { | |||||
| $request = $this->getRequest(); | |||||
| $viewer = $request->getUser(); | $viewer = $request->getUser(); | ||||
| $book_name = $request->getURIData('book'); | |||||
| $atom_type = $request->getURIData('type'); | |||||
| $atom_name = $request->getURIData('name'); | |||||
| $atom_context = nonempty($request->getURIData('context'), null); | |||||
| $atom_index = nonempty($request->getURIData('index'), null); | |||||
| require_celerity_resource('diviner-shared-css'); | require_celerity_resource('diviner-shared-css'); | ||||
| $book = id(new DivinerBookQuery()) | $book = id(new DivinerBookQuery()) | ||||
| ->setViewer($viewer) | ->setViewer($viewer) | ||||
| ->withNames(array($this->bookName)) | ->withNames(array($book_name)) | ||||
| ->executeOne(); | ->executeOne(); | ||||
| if (!$book) { | if (!$book) { | ||||
| return new Aphront404Response(); | return new Aphront404Response(); | ||||
| } | } | ||||
| $symbol = id(new DivinerAtomQuery()) | $symbol = id(new DivinerAtomQuery()) | ||||
| ->setViewer($viewer) | ->setViewer($viewer) | ||||
| ->withBookPHIDs(array($book->getPHID())) | ->withBookPHIDs(array($book->getPHID())) | ||||
| ->withTypes(array($this->atomType)) | ->withTypes(array($atom_type)) | ||||
| ->withNames(array($this->atomName)) | ->withNames(array($atom_name)) | ||||
| ->withContexts(array($this->atomContext)) | ->withContexts(array($atom_context)) | ||||
| ->withIndexes(array($this->atomIndex)) | ->withIndexes(array($atom_index)) | ||||
| ->withIsDocumentable(true) | ->withIsDocumentable(true) | ||||
| ->needAtoms(true) | ->needAtoms(true) | ||||
| ->needExtends(true) | ->needExtends(true) | ||||
| ->needChildren(true) | ->needChildren(true) | ||||
| ->executeOne(); | ->executeOne(); | ||||
| if (!$symbol) { | if (!$symbol) { | ||||
| return new Aphront404Response(); | return new Aphront404Response(); | ||||
| Show All 17 Lines | $header = id(new PHUIHeaderView()) | ||||
| ->setHeader($this->renderFullSignature($symbol)) | ->setHeader($this->renderFullSignature($symbol)) | ||||
| ->addTag( | ->addTag( | ||||
| id(new PHUITagView()) | id(new PHUITagView()) | ||||
| ->setType(PHUITagView::TYPE_STATE) | ->setType(PHUITagView::TYPE_STATE) | ||||
| ->setBackgroundColor(PHUITagView::COLOR_BLUE) | ->setBackgroundColor(PHUITagView::COLOR_BLUE) | ||||
| ->setName(DivinerAtom::getAtomTypeNameString( | ->setName(DivinerAtom::getAtomTypeNameString( | ||||
| $atom ? $atom->getType() : $symbol->getType()))); | $atom ? $atom->getType() : $symbol->getType()))); | ||||
| $properties = id(new PHUIPropertyListView()); | $properties = new PHUIPropertyListView(); | ||||
| $group = $atom ? $atom->getProperty('group') : $symbol->getGroupName(); | $group = $atom ? $atom->getProperty('group') : $symbol->getGroupName(); | ||||
| if ($group) { | if ($group) { | ||||
| $group_name = $book->getGroupName($group); | $group_name = $book->getGroupName($group); | ||||
| } else { | } else { | ||||
| $group_name = null; | $group_name = null; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | $toc = $engine->getEngineMetadata( | ||||
| $field, | $field, | ||||
| PhutilRemarkupHeaderBlockRule::KEY_HEADER_TOC, | PhutilRemarkupHeaderBlockRule::KEY_HEADER_TOC, | ||||
| array()); | array()); | ||||
| if (!$atom) { | if (!$atom) { | ||||
| $document->appendChild( | $document->appendChild( | ||||
| id(new PHUIInfoView()) | id(new PHUIInfoView()) | ||||
| ->setSeverity(PHUIInfoView::SEVERITY_NOTICE) | ->setSeverity(PHUIInfoView::SEVERITY_NOTICE) | ||||
| ->appendChild( | ->appendChild(pht('This atom no longer exists.'))); | ||||
| pht( | |||||
| 'This atom no longer exists.'))); | |||||
| } | } | ||||
| if ($atom) { | if ($atom) { | ||||
| $document->appendChild($this->buildParametersAndReturn(array($symbol))); | $document->appendChild($this->buildParametersAndReturn(array($symbol))); | ||||
| } | } | ||||
| if ($methods) { | if ($methods) { | ||||
| $tasks = $this->composeTasks($symbol); | $tasks = $this->composeTasks($symbol); | ||||
| ▲ Show 20 Lines • Show All 151 Lines • ▼ Show 20 Lines | if ($implements) { | ||||
| ); | ); | ||||
| } | } | ||||
| } | } | ||||
| $view->addProperty( | $view->addProperty( | ||||
| pht('Implements'), | pht('Implements'), | ||||
| phutil_implode_html(phutil_tag('br'), $items)); | phutil_implode_html(phutil_tag('br'), $items)); | ||||
| } | } | ||||
| } | } | ||||
| private function renderAtomTag(DivinerLiveSymbol $symbol) { | private function renderAtomTag(DivinerLiveSymbol $symbol) { | ||||
| return id(new PHUITagView()) | return id(new PHUITagView()) | ||||
| ->setType(PHUITagView::TYPE_OBJECT) | ->setType(PHUITagView::TYPE_OBJECT) | ||||
| ->setName($symbol->getName()) | ->setName($symbol->getName()) | ||||
| ->setHref($symbol->getURI()); | ->setHref($symbol->getURI()); | ||||
| } | } | ||||
| Show All 12 Lines | final class DivinerAtomController extends DivinerController { | ||||
| private function getImplementsLineage(DivinerLiveSymbol $symbol) { | private function getImplementsLineage(DivinerLiveSymbol $symbol) { | ||||
| $implements = array(); | $implements = array(); | ||||
| // Do these first so we get interfaces ordered from most to least specific. | // Do these first so we get interfaces ordered from most to least specific. | ||||
| foreach ($symbol->getExtends() as $extends) { | foreach ($symbol->getExtends() as $extends) { | ||||
| if ($extends->getType() == 'interface') { | if ($extends->getType() == 'interface') { | ||||
| $implements[$extends->getName()] = array( | $implements[$extends->getName()] = array( | ||||
| 'interface' => $extends, | 'interface' => $extends, | ||||
| 'via' => $symbol, | 'via' => $symbol, | ||||
epriestley: Per discussion elsewhere, consider not making this or other alignment changes. | |||||
Done Inline ActionsYeah sorry... got a bit carried away. joshuaspence: Yeah sorry... got a bit carried away. | |||||
| ); | ); | ||||
| } | } | ||||
| } | } | ||||
| // Now do parent interfaces. | // Now do parent interfaces. | ||||
| foreach ($symbol->getExtends() as $extends) { | foreach ($symbol->getExtends() as $extends) { | ||||
| if ($extends->getType() == 'class') { | if ($extends->getType() == 'class') { | ||||
| $implements += $this->getImplementsLineage($extends); | $implements += $this->getImplementsLineage($extends); | ||||
| ▲ Show 20 Lines • Show All 121 Lines • ▼ Show 20 Lines | private function composeTasks(DivinerLiveSymbol $symbol) { | ||||
| $specs = array_select_keys($specs, $keys) + $specs; | $specs = array_select_keys($specs, $keys) + $specs; | ||||
| return $specs; | return $specs; | ||||
| } | } | ||||
| private function renderFullSignature( | private function renderFullSignature( | ||||
| DivinerLiveSymbol $symbol, | DivinerLiveSymbol $symbol, | ||||
| $is_link = false) { | $is_link = false) { | ||||
| switch ($symbol->getType()) { | switch ($symbol->getType()) { | ||||
| case DivinerAtom::TYPE_CLASS: | case DivinerAtom::TYPE_CLASS: | ||||
| case DivinerAtom::TYPE_INTERFACE: | case DivinerAtom::TYPE_INTERFACE: | ||||
| case DivinerAtom::TYPE_METHOD: | case DivinerAtom::TYPE_METHOD: | ||||
| case DivinerAtom::TYPE_FUNCTION: | case DivinerAtom::TYPE_FUNCTION: | ||||
| break; | break; | ||||
| default: | default: | ||||
| return $symbol->getTitle(); | return $symbol->getTitle(); | ||||
| ▲ Show 20 Lines • Show All 214 Lines • Show Last 20 Lines | |||||
Per discussion elsewhere, consider not making this or other alignment changes.