mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-11 17:32:41 +01:00
b8bc0aa2b0
Summary: Ref T4986. Instead of requiring users to know the name of an application search engine class, let them select from a list. Test Plan: Created a new panel. {F165468} Reviewers: chad Reviewed By: chad Subscribers: epriestley Maniphest Tasks: T4986 Differential Revision: https://secure.phabricator.com/D9500
205 lines
5.5 KiB
PHP
205 lines
5.5 KiB
PHP
<?php
|
|
|
|
final class PhabricatorConduitSearchEngine
|
|
extends PhabricatorApplicationSearchEngine {
|
|
|
|
public function getResultTypeDescription() {
|
|
return pht('Conduit Methods');
|
|
}
|
|
|
|
public function getApplicationClassName() {
|
|
return 'PhabricatorApplicationConduit';
|
|
}
|
|
|
|
public function getPageSize(PhabricatorSavedQuery $saved) {
|
|
return PHP_INT_MAX - 1;
|
|
}
|
|
|
|
public function buildSavedQueryFromRequest(AphrontRequest $request) {
|
|
$saved = new PhabricatorSavedQuery();
|
|
|
|
$saved->setParameter('isStable', $request->getStr('isStable'));
|
|
$saved->setParameter('isUnstable', $request->getStr('isUnstable'));
|
|
$saved->setParameter('isDeprecated', $request->getStr('isDeprecated'));
|
|
|
|
$saved->setParameter(
|
|
'applicationNames',
|
|
$request->getStrList('applicationNames'));
|
|
|
|
$saved->setParameter('nameContains', $request->getStr('nameContains'));
|
|
|
|
return $saved;
|
|
}
|
|
|
|
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
|
|
$query = id(new PhabricatorConduitMethodQuery());
|
|
|
|
$query->withIsStable($saved->getParameter('isStable'));
|
|
$query->withIsUnstable($saved->getParameter('isUnstable'));
|
|
$query->withIsDeprecated($saved->getParameter('isDeprecated'));
|
|
|
|
$names = $saved->getParameter('applicationNames', array());
|
|
if ($names) {
|
|
$query->withApplicationNames($names);
|
|
}
|
|
|
|
$contains = $saved->getParameter('nameContains');
|
|
if (strlen($contains)) {
|
|
$query->withNameContains($contains);
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
public function buildSearchForm(
|
|
AphrontFormView $form,
|
|
PhabricatorSavedQuery $saved) {
|
|
|
|
$form
|
|
->appendChild(
|
|
id(new AphrontFormTextControl())
|
|
->setLabel('Name Contains')
|
|
->setName('nameContains')
|
|
->setValue($saved->getParameter('nameContains')));
|
|
|
|
$names = $saved->getParameter('applicationNames', array());
|
|
$form
|
|
->appendChild(
|
|
id(new AphrontFormTextControl())
|
|
->setLabel('Applications')
|
|
->setName('applicationNames')
|
|
->setValue(implode(', ', $names))
|
|
->setCaption(pht(
|
|
'Example: %s',
|
|
phutil_tag('tt', array(), 'differential, paste'))));
|
|
|
|
$is_stable = $saved->getParameter('isStable');
|
|
$is_unstable = $saved->getParameter('isUnstable');
|
|
$is_deprecated = $saved->getParameter('isDeprecated');
|
|
$form
|
|
->appendChild(
|
|
id(new AphrontFormCheckboxControl())
|
|
->setLabel('Stability')
|
|
->addCheckbox(
|
|
'isStable',
|
|
1,
|
|
hsprintf(
|
|
'<strong>%s</strong>: %s',
|
|
pht('Stable Methods'),
|
|
pht('Show established API methods with stable interfaces.')),
|
|
$is_stable)
|
|
->addCheckbox(
|
|
'isUnstable',
|
|
1,
|
|
hsprintf(
|
|
'<strong>%s</strong>: %s',
|
|
pht('Unstable Methods'),
|
|
pht('Show new methods which are subject to change.')),
|
|
$is_unstable)
|
|
->addCheckbox(
|
|
'isDeprecated',
|
|
1,
|
|
hsprintf(
|
|
'<strong>%s</strong>: %s',
|
|
pht('Deprecated Methods'),
|
|
pht(
|
|
'Show old methods which will be deleted in a future '.
|
|
'version of Phabricator.')),
|
|
$is_deprecated));
|
|
|
|
|
|
}
|
|
|
|
protected function getURI($path) {
|
|
return '/conduit/'.$path;
|
|
}
|
|
|
|
public function getBuiltinQueryNames() {
|
|
$names = array(
|
|
'modern' => pht('Modern Methods'),
|
|
'all' => pht('All Methods'),
|
|
);
|
|
|
|
return $names;
|
|
}
|
|
|
|
public function buildSavedQueryFromBuiltin($query_key) {
|
|
|
|
$query = $this->newSavedQuery();
|
|
$query->setQueryKey($query_key);
|
|
|
|
switch ($query_key) {
|
|
case 'modern':
|
|
return $query
|
|
->setParameter('isStable', true)
|
|
->setParameter('isUnstable', true);
|
|
case 'all':
|
|
return $query
|
|
->setParameter('isStable', true)
|
|
->setParameter('isUnstable', true)
|
|
->setParameter('isDeprecated', true);
|
|
}
|
|
|
|
return parent::buildSavedQueryFromBuiltin($query_key);
|
|
}
|
|
|
|
protected function renderResultList(
|
|
array $methods,
|
|
PhabricatorSavedQuery $query,
|
|
array $handles) {
|
|
assert_instances_of($methods, 'ConduitAPIMethod');
|
|
|
|
$viewer = $this->requireViewer();
|
|
|
|
$out = array();
|
|
|
|
$last = null;
|
|
$list = null;
|
|
foreach ($methods as $method) {
|
|
$app = $method->getApplicationName();
|
|
if ($app !== $last) {
|
|
$last = $app;
|
|
if ($list) {
|
|
$out[] = $list;
|
|
}
|
|
$list = id(new PHUIObjectItemListView());
|
|
|
|
$app_object = $method->getApplication();
|
|
if ($app_object) {
|
|
$app_name = $app_object->getName();
|
|
} else {
|
|
$app_name = $app;
|
|
}
|
|
}
|
|
|
|
$method_name = $method->getAPIMethodName();
|
|
|
|
$item = id(new PHUIObjectItemView())
|
|
->setHeader($method_name)
|
|
->setHref($this->getApplicationURI('method/'.$method_name.'/'))
|
|
->addAttribute($method->getMethodDescription());
|
|
|
|
switch ($method->getMethodStatus()) {
|
|
case ConduitAPIMethod::METHOD_STATUS_STABLE:
|
|
break;
|
|
case ConduitAPIMethod::METHOD_STATUS_UNSTABLE:
|
|
$item->addIcon('warning-grey', pht('Unstable'));
|
|
$item->setBarColor('yellow');
|
|
break;
|
|
case ConduitAPIMethod::METHOD_STATUS_DEPRECATED:
|
|
$item->addIcon('warning', pht('Deprecated'));
|
|
$item->setBarColor('red');
|
|
break;
|
|
}
|
|
|
|
$list->addItem($item);
|
|
}
|
|
|
|
if ($list) {
|
|
$out[] = $list;
|
|
}
|
|
|
|
return $out;
|
|
}
|
|
|
|
}
|