diff --git a/src/applications/conduit/controller/PhabricatorConduitConsoleController.php b/src/applications/conduit/controller/PhabricatorConduitConsoleController.php --- a/src/applications/conduit/controller/PhabricatorConduitConsoleController.php +++ b/src/applications/conduit/controller/PhabricatorConduitConsoleController.php @@ -101,65 +101,10 @@ ->appendChild($properties); $content[] = $info_box; + $content[] = $method->getMethodDocumentation(); $content[] = $form_box; $content[] = $this->renderExampleBox($method, null); - $query = $method->newQueryObject(); - if ($query) { - $orders = $query->getBuiltinOrders(); - - $rows = array(); - foreach ($orders as $key => $order) { - $rows[] = array( - $key, - $order['name'], - implode(', ', $order['vector']), - ); - } - - $table = id(new AphrontTableView($rows)) - ->setHeaders( - array( - pht('Key'), - pht('Description'), - pht('Columns'), - )) - ->setColumnClasses( - array( - 'pri', - '', - 'wide', - )); - $content[] = id(new PHUIObjectBoxView()) - ->setHeaderText(pht('Builtin Orders')) - ->setTable($table); - - $columns = $query->getOrderableColumns(); - - $rows = array(); - foreach ($columns as $key => $column) { - $rows[] = array( - $key, - idx($column, 'unique') ? pht('Yes') : pht('No'), - ); - } - - $table = id(new AphrontTableView($rows)) - ->setHeaders( - array( - pht('Key'), - pht('Unique'), - )) - ->setColumnClasses( - array( - 'pri', - 'wide', - )); - $content[] = id(new PHUIObjectBoxView()) - ->setHeaderText(pht('Column Orders')) - ->setTable($table); - } - $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb($method->getAPIMethodName()); diff --git a/src/applications/conduit/method/ConduitAPIMethod.php b/src/applications/conduit/method/ConduitAPIMethod.php --- a/src/applications/conduit/method/ConduitAPIMethod.php +++ b/src/applications/conduit/method/ConduitAPIMethod.php @@ -37,6 +37,10 @@ */ abstract public function getMethodDescription(); + public function getMethodDocumentation() { + return null; + } + abstract protected function defineParamTypes(); abstract protected function defineReturnType(); diff --git a/src/applications/conduit/query/ConduitResultSearchEngineExtension.php b/src/applications/conduit/query/ConduitResultSearchEngineExtension.php --- a/src/applications/conduit/query/ConduitResultSearchEngineExtension.php +++ b/src/applications/conduit/query/ConduitResultSearchEngineExtension.php @@ -9,6 +9,10 @@ return true; } + public function getExtensionOrder() { + return 1000; + } + public function getExtensionName() { return pht('Support for ConduitResultInterface'); } diff --git a/src/applications/policy/engineextension/PhabricatorPolicySearchEngineExtension.php b/src/applications/policy/engineextension/PhabricatorPolicySearchEngineExtension.php --- a/src/applications/policy/engineextension/PhabricatorPolicySearchEngineExtension.php +++ b/src/applications/policy/engineextension/PhabricatorPolicySearchEngineExtension.php @@ -17,6 +17,10 @@ return ($object instanceof PhabricatorPolicyInterface); } + public function getExtensionOrder() { + return 6000; + } + public function getFieldSpecificationsForConduit($object) { return array( 'policy' => array( diff --git a/src/applications/project/engineextension/PhabricatorProjectsSearchEngineExtension.php b/src/applications/project/engineextension/PhabricatorProjectsSearchEngineExtension.php --- a/src/applications/project/engineextension/PhabricatorProjectsSearchEngineExtension.php +++ b/src/applications/project/engineextension/PhabricatorProjectsSearchEngineExtension.php @@ -15,7 +15,7 @@ } public function getExtensionOrder() { - return 2000; + return 3000; } public function supportsObject($object) { diff --git a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php --- a/src/applications/search/engine/PhabricatorApplicationSearchEngine.php +++ b/src/applications/search/engine/PhabricatorApplicationSearchEngine.php @@ -1068,11 +1068,6 @@ $fields[$conduit_key] = $field; } - $viewer = $this->requireViewer(); - foreach ($fields as $key => $field) { - $field->setViewer($viewer); - } - // These are handled separately for Conduit, so don't show them as // supported. unset($fields['ids']); @@ -1080,6 +1075,27 @@ unset($fields['order']); unset($fields['limit']); + // TODO: Clean these up, shortly. + $fields = array( + 'ids' => id(new PhabricatorSearchDatasourceField()) + ->setKey('ids') + ->setLabel(pht('IDs')) + ->setDescription( + pht('Search for objects with specific IDs.')) + ->setConduitParameterType(new ConduitIntListParameterType()), + 'phids' => id(new PhabricatorSearchDatasourceField()) + ->setKey('phids') + ->setLabel(pht('PHIDs')) + ->setDescription( + pht('Search for objects with specific PHIDs.')) + ->setConduitParameterType(new ConduitPHIDListParameterType()), + ) + $fields; + + $viewer = $this->requireViewer(); + foreach ($fields as $key => $field) { + $field->setViewer($viewer); + } + return $fields; } diff --git a/src/applications/search/engine/PhabricatorSearchEngineAPIMethod.php b/src/applications/search/engine/PhabricatorSearchEngineAPIMethod.php --- a/src/applications/search/engine/PhabricatorSearchEngineAPIMethod.php +++ b/src/applications/search/engine/PhabricatorSearchEngineAPIMethod.php @@ -39,6 +39,12 @@ } final public function getMethodDescription() { + return pht( + 'This is a standard **ApplicationSearch** method which will let you '. + 'list, query, or search for objects.'); + } + + final public function getMethodDocumentation() { $viewer = $this->getViewer(); $engine = $this->newSearchEngine() @@ -48,26 +54,29 @@ $out = array(); - $out[] = pht(<<buildQueriesBox($engine); + $out[] = $this->buildConstraintsBox($engine); + $out[] = $this->buildOrderBox($engine, $query); + $out[] = $this->buildFieldsBox($engine); + $out[] = $this->buildPagingBox($engine); -EOTEXT - ); + return $out; + } - $out[] = pht(<<getViewer(); -You can use a builtin or saved query as a starting point by passing it with -`queryKey`. If you don't specify a `queryKey`, the query will start with no -constraints. + $info = pht(<<loadAllNamedQueries(); - $table = array(); - $table[] = "| {$head_querykey} | {$head_name} | {$head_builtin} |"; - $table[] = '|------------------|--------------|-----------------|'; + $rows = array(); foreach ($named_queries as $named_query) { - $key = $named_query->getQueryKey(); - $name = $named_query->getQueryName(); $builtin = $named_query->getIsBuiltin() ? pht('Builtin') : pht('Custom'); - $table[] = "| `{$key}` | {$name} | {$builtin} |"; + $rows[] = array( + $named_query->getQueryKey(), + $named_query->getQueryName(), + $builtin, + ); } - $table = implode("\n", $table); - $out[] = $table; - $out[] = pht(<<setHeaders( + array( + pht('Query Key'), + pht('Name'), + pht('Builtin'), + )) + ->setColumnClasses( + array( + 'prewrap', + 'pri wide', + null, + )); + + return id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Builtin and Saved Queries')) + ->setCollapsed(true) + ->appendChild($this->buildRemarkup($info)) + ->appendChild($table); + } + + private function buildConstraintsBox( + PhabricatorApplicationSearchEngine $engine) { + + $info = pht(<<getSearchFieldsForConduit(); - $table = array(); - $table[] = "| {$head_key} | {$head_label} | {$head_type} | {$head_desc} |"; - $table[] = '|-------------|---------------|--------------|--------------|'; - $table[] = "| `ids` | **IDs** | `list` | {$desc_ids} |"; - $table[] = "| `phids` | **PHIDs** | `list` | {$desc_phids} |"; + $rows = array(); foreach ($fields as $field) { $key = $field->getConduitKey(); $label = $field->getLabel(); $type_object = $field->getConduitParameterType(); if ($type_object) { - $type = '`'.$type_object->getTypeName().'`'; + $type = $type_object->getTypeName(); $description = $field->getDescription(); } else { - $type = ''; - $description = '//'.pht('Not Supported').'//'; + $type = null; + $description = phutil_tag('em', array(), pht('Not supported.')); } - $table[] = "| `{$key}` | **{$label}** | {$type} | {$description}"; + $rows[] = array( + $key, + $label, + $type, + $description, + ); } - $table = implode("\n", $table); - $out[] = $table; + $table = id(new AphrontTableView($rows)) + ->setHeaders( + array( + pht('Key'), + pht('Label'), + pht('Type'), + pht('Description'), + )) + ->setColumnClasses( + array( + 'prewrap', + 'pri', + 'prewrap', + 'wide', + )); + + return id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Custom Query Constraints')) + ->setCollapsed(true) + ->appendChild($this->buildRemarkup($info)) + ->appendChild($table); + } + + private function buildOrderBox( + PhabricatorApplicationSearchEngine $engine, + $query) { - $out[] = pht(<<getBuiltinOrders(); - $table = array(); - $table[] = "| {$head_builtin} | {$head_label} | {$head_columns} |"; - $table[] = '|-----------------|---------------------|-----------------|'; + $rows = array(); foreach ($orders as $key => $order) { - $name = $order['name']; - $columns = implode(', ', $order['vector']); - $table[] = "| `{$key}` | {$name} | {$columns} |"; + $rows[] = array( + $key, + $order['name'], + implode(', ', $order['vector']), + ); } - $table = implode("\n", $table); - $out[] = $table; - $out[] = pht(<<setHeaders( + array( + pht('Key'), + pht('Description'), + pht('Columns'), + )) + ->setColumnClasses( + array( + 'pri', + '', + 'wide', + )); + + $columns_info = pht(<<getOrderableColumns(); - - $table = array(); - $table[] = "| {$head_column} | {$head_unique} |"; - $table[] = '|----------------|----------------|'; + $rows = array(); foreach ($columns as $key => $column) { - $unique = idx($column, 'unique') - ? pht('Yes') - : pht('No'); - - $table[] = "| `{$key}` | {$unique} |"; + $rows[] = array( + $key, + idx($column, 'unique') ? pht('Yes') : pht('No'), + ); } - $table = implode("\n", $table); - $out[] = $table; - - $out[] = pht(<<setHeaders( + array( + pht('Key'), + pht('Unique'), + )) + ->setColumnClasses( + array( + 'pri', + 'wide', + )); + + + return id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Result Ordering')) + ->setCollapsed(true) + ->appendChild($this->buildRemarkup($orders_info)) + ->appendChild($orders_table) + ->appendChild($this->buildRemarkup($columns_info)) + ->appendChild($columns_table); + } - $out[] = pht(<<getAllConduitFieldSpecifications(); - $table = array(); - $table[] = "| {$head_key} | {$head_type} | {$head_description} |"; - $table[] = '|-------------|--------------|---------------------|'; + $rows = array(); foreach ($specs as $key => $spec) { $type = idx($spec, 'type'); $description = idx($spec, 'description'); - $table[] = "| `{$key}` | `{$type}` | {$description} |"; + $rows[] = array( + $key, + $type, + $description, + ); } - $table = implode("\n", $table); - $out[] = $table; - $out[] = pht(<<setHeaders( + array( + pht('Key'), + pht('Type'), + pht('Description'), + )) + ->setColumnClasses( + array( + 'pri', + 'mono', + 'wide', + )); + + return id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Object Fields')) + ->setCollapsed(true) + ->appendChild($this->buildRemarkup($info)) + ->appendChild($table); + } + + private function buildPagingBox( + PhabricatorApplicationSearchEngine $engine) { + $info = pht(<<setHeaderText(pht('Paging and Limits')) + ->setCollapsed(true) + ->appendChild($this->buildRemarkup($info)); } + private function buildRemarkup($remarkup) { + $viewer = $this->getViewer(); + + $view = new PHUIRemarkupView($viewer, $remarkup); + + return id(new PHUIBoxView()) + ->appendChild($view) + ->addPadding(PHUI::PADDING_LARGE); + } } diff --git a/src/applications/search/engineextension/PhabricatorLiskSearchEngineExtension.php b/src/applications/search/engineextension/PhabricatorLiskSearchEngineExtension.php --- a/src/applications/search/engineextension/PhabricatorLiskSearchEngineExtension.php +++ b/src/applications/search/engineextension/PhabricatorLiskSearchEngineExtension.php @@ -13,6 +13,10 @@ return pht('Lisk Builtin Properties'); } + public function getExtensionOrder() { + return 5000; + } + public function supportsObject($object) { if (!($object instanceof LiskDAO)) { return false; diff --git a/src/applications/search/engineextension/PhabricatorSearchEngineExtension.php b/src/applications/search/engineextension/PhabricatorSearchEngineExtension.php --- a/src/applications/search/engineextension/PhabricatorSearchEngineExtension.php +++ b/src/applications/search/engineextension/PhabricatorSearchEngineExtension.php @@ -33,7 +33,7 @@ abstract public function supportsObject($object); public function getExtensionOrder() { - return 5000; + return 7000; } public function getSearchFields($object) { diff --git a/src/applications/spaces/engineextension/PhabricatorSpacesSearchEngineExtension.php b/src/applications/spaces/engineextension/PhabricatorSpacesSearchEngineExtension.php --- a/src/applications/spaces/engineextension/PhabricatorSpacesSearchEngineExtension.php +++ b/src/applications/spaces/engineextension/PhabricatorSpacesSearchEngineExtension.php @@ -15,7 +15,7 @@ } public function getExtensionOrder() { - return 3000; + return 4000; } public function supportsObject($object) { diff --git a/src/applications/subscriptions/engineextension/PhabricatorSubscriptionsSearchEngineExtension.php b/src/applications/subscriptions/engineextension/PhabricatorSubscriptionsSearchEngineExtension.php --- a/src/applications/subscriptions/engineextension/PhabricatorSubscriptionsSearchEngineExtension.php +++ b/src/applications/subscriptions/engineextension/PhabricatorSubscriptionsSearchEngineExtension.php @@ -15,7 +15,7 @@ } public function getExtensionOrder() { - return 1000; + return 2000; } public function supportsObject($object) {