1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-15 03:12:41 +01:00
phorge-phorge/src/applications/conduit/controller/PhabricatorConduitController.php
Chad Little 38626dce64 Remove spacer from sidebars.
Summary: This removes all calls to addSpacer and the method. We were applying it inconsistently and it was causing spacing issues with redesigning the sidenav. My feeling is we can recreate the space in CSS if the design dictates, which would apply it consistently.

Test Plan: Go to Applications, click on every application.

Reviewers: epriestley, btrahan

Reviewed By: epriestley

CC: aran, Korvin

Differential Revision: https://secure.phabricator.com/D4420
2013-01-13 08:17:12 -08:00

120 lines
3.2 KiB
PHP

<?php
/**
* @group conduit
*/
abstract class PhabricatorConduitController extends PhabricatorController {
private $filter;
protected $showSideNav;
public function buildStandardPageResponse($view, array $data) {
$page = $this->buildStandardPageView();
$page->setApplicationName('Conduit');
$page->setBaseURI('/conduit/');
$page->setTitle(idx($data, 'title'));
$page->setGlyph("\xE2\x87\xB5");
if ($this->showSideNav()) {
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI('/conduit/'));
$method_filters = $this->getMethodFilters();
foreach ($method_filters as $group => $methods) {
$nav->addLabel($group);
foreach ($methods as $method) {
$method_name = $method['full_name'];
$display_name = $method_name;
switch ($method['status']) {
case ConduitAPIMethod::METHOD_STATUS_DEPRECATED:
$display_name = '('.$display_name.')';
break;
}
$nav->addFilter('method/'.$method_name,
$display_name);
}
}
$nav->selectFilter($this->getFilter());
$nav->appendChild($view);
$body = $nav;
} else {
$body = $view;
}
$page->appendChild($body);
$response = new AphrontWebpageResponse();
return $response->setContent($page->render());
}
private function getFilter() {
return $this->filter;
}
protected function setFilter($filter) {
$this->filter = $filter;
return $this;
}
private function showSideNav() {
return $this->showSideNav !== false;
}
protected function setShowSideNav($show_side_nav) {
$this->showSideNav = $show_side_nav;
return $this;
}
protected function getAllMethodImplementationClasses() {
$classes = id(new PhutilSymbolLoader())
->setAncestorClass('ConduitAPIMethod')
->setType('class')
->setConcreteOnly(true)
->selectSymbolsWithoutLoading();
return array_values(ipull($classes, 'name'));
}
protected function getMethodFilters() {
$classes = $this->getAllMethodImplementationClasses();
$method_names = array();
foreach ($classes as $method_class) {
$method_name = ConduitAPIMethod::getAPIMethodNameFromClassName(
$method_class);
$group_name = head(explode('.', $method_name));
$method_object = newv($method_class, array());
$status = $method_object->getMethodStatus();
$key = sprintf(
'%02d %s %s',
$this->getOrderForMethodStatus($status),
$group_name,
$method_name);
$method_names[$key] = array(
'full_name' => $method_name,
'group_name' => $group_name,
'status' => $status,
'description' => $method_object->getMethodDescription(),
);
}
ksort($method_names);
$method_names = igroup($method_names, 'group_name');
ksort($method_names);
return $method_names;
}
private function getOrderForMethodStatus($status) {
$map = array(
ConduitAPIMethod::METHOD_STATUS_STABLE => 0,
ConduitAPIMethod::METHOD_STATUS_UNSTABLE => 1,
ConduitAPIMethod::METHOD_STATUS_DEPRECATED => 2,
);
return idx($map, $status, 0);
}
}