Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15427035
D14889.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
D14889.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -3747,6 +3747,7 @@
'ProjectRemarkupRule' => 'applications/project/remarkup/ProjectRemarkupRule.php',
'ProjectRemarkupRuleTestCase' => 'applications/project/remarkup/__tests__/ProjectRemarkupRuleTestCase.php',
'ProjectReplyHandler' => 'applications/project/mail/ProjectReplyHandler.php',
+ 'ProjectSearchConduitAPIMethod' => 'applications/project/conduit/ProjectSearchConduitAPIMethod.php',
'QueryFormattingTestCase' => 'infrastructure/storage/__tests__/QueryFormattingTestCase.php',
'ReleephAuthorFieldSpecification' => 'applications/releeph/field/specification/ReleephAuthorFieldSpecification.php',
'ReleephBranch' => 'applications/releeph/storage/ReleephBranch.php',
@@ -7146,6 +7147,7 @@
'PhabricatorCustomFieldInterface',
'PhabricatorDestructibleInterface',
'PhabricatorFulltextInterface',
+ 'PhabricatorConduitResultInterface',
),
'PhabricatorProjectAddHeraldAction' => 'PhabricatorProjectHeraldAction',
'PhabricatorProjectApplication' => 'PhabricatorApplication',
@@ -8296,6 +8298,7 @@
'ProjectRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'ProjectRemarkupRuleTestCase' => 'PhabricatorTestCase',
'ProjectReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
+ 'ProjectSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
'QueryFormattingTestCase' => 'PhabricatorTestCase',
'ReleephAuthorFieldSpecification' => 'ReleephFieldSpecification',
'ReleephBranch' => array(
diff --git a/src/applications/project/conduit/ProjectSearchConduitAPIMethod.php b/src/applications/project/conduit/ProjectSearchConduitAPIMethod.php
new file mode 100644
--- /dev/null
+++ b/src/applications/project/conduit/ProjectSearchConduitAPIMethod.php
@@ -0,0 +1,24 @@
+<?php
+
+final class ProjectSearchConduitAPIMethod
+ extends PhabricatorSearchEngineAPIMethod {
+
+ public function getAPIMethodName() {
+ return 'project.search';
+ }
+
+ public function newSearchEngine() {
+ return new PhabricatorProjectSearchEngine();
+ }
+
+ public function getMethodSummary() {
+ return pht('Read information about projects.');
+ }
+
+ protected function getCustomQueryMaps($query) {
+ return array(
+ 'slugMap' => $query->getSlugMap(),
+ );
+ }
+
+}
diff --git a/src/applications/project/storage/PhabricatorProject.php b/src/applications/project/storage/PhabricatorProject.php
--- a/src/applications/project/storage/PhabricatorProject.php
+++ b/src/applications/project/storage/PhabricatorProject.php
@@ -9,7 +9,8 @@
PhabricatorSubscribableInterface,
PhabricatorCustomFieldInterface,
PhabricatorDestructibleInterface,
- PhabricatorFulltextInterface {
+ PhabricatorFulltextInterface,
+ PhabricatorConduitResultInterface {
protected $name;
protected $status = PhabricatorProjectStatus::STATUS_ACTIVE;
@@ -525,4 +526,32 @@
return new PhabricatorProjectFulltextEngine();
}
+
+/* -( PhabricatorConduitResultInterface )---------------------------------- */
+
+
+ public function getFieldSpecificationsForConduit() {
+ return array(
+ id(new PhabricatorConduitSearchFieldSpecification())
+ ->setKey('name')
+ ->setType('string')
+ ->setDescription(pht('The name of the project.')),
+ id(new PhabricatorConduitSearchFieldSpecification())
+ ->setKey('slug')
+ ->setType('string')
+ ->setDescription(pht('Primary slug/hashtag.')),
+ );
+ }
+
+ public function getFieldValuesForConduit() {
+ return array(
+ 'name' => $this->getName(),
+ 'slug' => $this->getPrimarySlug(),
+ );
+ }
+
+ public function getConduitSearchAttachments() {
+ return array();
+ }
+
}
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
@@ -1081,7 +1081,9 @@
return $fields;
}
- public function buildConduitResponse(ConduitAPIRequest $request) {
+ public function buildConduitResponse(
+ ConduitAPIRequest $request,
+ ConduitAPIMethod $method) {
$viewer = $this->requireViewer();
$query_key = $request->getValue('queryKey');
@@ -1172,6 +1174,12 @@
$attachment_specs[$key]);
}
+ // If this is empty, we still want to emit a JSON object, not a
+ // JSON list.
+ if (!$attachment_map) {
+ $attachment_map = (object)$attachment_map;
+ }
+
$id = (int)$object->getID();
$phid = $object->getPHID();
@@ -1187,6 +1195,7 @@
return array(
'data' => $data,
+ 'maps' => $method->getQueryMaps($query),
'query' => array(
'queryKey' => $saved_query->getQueryKey(),
),
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
@@ -5,6 +5,23 @@
abstract public function newSearchEngine();
+ final public function getQueryMaps($query) {
+ $maps = $this->getCustomQueryMaps($query);
+
+ // Make sure we emit empty maps as objects, not lists.
+ foreach ($maps as $key => $map) {
+ if (!$map) {
+ $maps[$key] = (object)$map;
+ }
+ }
+
+ return $maps;
+ }
+
+ protected function getCustomQueryMaps($query) {
+ return array();
+ }
+
public function getApplication() {
$engine = $this->newSearchEngine();
$class = $engine->getApplicationClassName();
@@ -36,7 +53,7 @@
$engine = $this->newSearchEngine()
->setViewer($request->getUser());
- return $engine->buildConduitResponse($request);
+ return $engine->buildConduitResponse($request, $this);
}
final public function getMethodDescription() {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 24, 12:16 PM (1 d, 5 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7716981
Default Alt Text
D14889.diff (6 KB)
Attached To
Mode
D14889: Implement a basic project.search third-generation API method
Attached
Detach File
Event Timeline
Log In to Comment