Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/project/conduit/ConduitAPI_project_Method.php b/src/applications/project/conduit/ConduitAPI_project_Method.php
index 1cc89e6d5f..1bf0260587 100644
--- a/src/applications/project/conduit/ConduitAPI_project_Method.php
+++ b/src/applications/project/conduit/ConduitAPI_project_Method.php
@@ -1,43 +1,47 @@
<?php
/**
* @group conduit
*/
abstract class ConduitAPI_project_Method extends ConduitAPIMethod {
public function getApplication() {
return PhabricatorApplication::getByClass(
'PhabricatorApplicationProject');
}
protected function buildProjectInfoDictionary(PhabricatorProject $project) {
$results = $this->buildProjectInfoDictionaries(array($project));
return idx($results, $project->getPHID());
}
protected function buildProjectInfoDictionaries(array $projects) {
assert_instances_of($projects, 'PhabricatorProject');
if (!$projects) {
return array();
}
$result = array();
foreach ($projects as $project) {
$member_phids = $project->getMemberPHIDs();
$member_phids = array_values($member_phids);
+ $project_slugs = $project->getSlugs();
+ $project_slugs = array_values(mpull($project_slugs, 'getSlug'));
+
$result[$project->getPHID()] = array(
'id' => $project->getID(),
'phid' => $project->getPHID(),
'name' => $project->getName(),
'members' => $member_phids,
+ 'slugs' => $project_slugs,
'dateCreated' => $project->getDateCreated(),
'dateModified' => $project->getDateModified(),
);
}
return $result;
}
}
diff --git a/src/applications/project/conduit/ConduitAPI_project_query_Method.php b/src/applications/project/conduit/ConduitAPI_project_query_Method.php
index 21cf0ca6c7..74905bf616 100644
--- a/src/applications/project/conduit/ConduitAPI_project_query_Method.php
+++ b/src/applications/project/conduit/ConduitAPI_project_query_Method.php
@@ -1,89 +1,108 @@
<?php
/**
* @group conduit
*/
final class ConduitAPI_project_query_Method extends ConduitAPI_project_Method {
public function getMethodDescription() {
return 'Execute searches for Projects.';
}
public function defineParamTypes() {
$statuses = array(
PhabricatorProjectQuery::STATUS_ANY,
PhabricatorProjectQuery::STATUS_OPEN,
PhabricatorProjectQuery::STATUS_CLOSED,
PhabricatorProjectQuery::STATUS_ACTIVE,
PhabricatorProjectQuery::STATUS_ARCHIVED,
);
$status_const = $this->formatStringConstants($statuses);
return array(
'ids' => 'optional list<int>',
'phids' => 'optional list<phid>',
'slugs' => 'optional list<string>',
'status' => 'optional '.$status_const,
'members' => 'optional list<phid>',
'limit' => 'optional int',
'offset' => 'optional int',
);
}
public function defineReturnType() {
return 'list';
}
public function defineErrorTypes() {
return array();
}
protected function execute(ConduitAPIRequest $request) {
$query = new PhabricatorProjectQuery();
$query->setViewer($request->getUser());
$query->needMembers(true);
+ $query->needSlugs(true);
$ids = $request->getValue('ids');
if ($ids) {
$query->withIDs($ids);
}
$status = $request->getValue('status');
if ($status) {
$query->withStatus($status);
}
$phids = $request->getValue('phids');
if ($phids) {
$query->withPHIDs($phids);
}
$slugs = $request->getValue('slugs');
if ($slugs) {
$query->withSlugs($slugs);
}
$members = $request->getValue('members');
if ($members) {
$query->withMemberPHIDs($members);
}
$limit = $request->getValue('limit');
if ($limit) {
$query->setLimit($limit);
}
$offset = $request->getValue('offset');
if ($offset) {
$query->setOffset($offset);
}
- $results = $query->execute();
- return $this->buildProjectInfoDictionaries($results);
+ $pager = $this->newPager($request);
+ $results = $query->executeWithCursorPager($pager);
+ $projects = $this->buildProjectInfoDictionaries($results);
+
+ // TODO: This is pretty hideous.
+ $slug_map = array();
+ foreach ($slugs as $slug) {
+ foreach ($projects as $project) {
+ if (in_array($slug, $project['slugs'])) {
+ $slug_map[$slug] = $project['phid'];
+ }
+ }
+ }
+
+ $result = array(
+ 'data' => $projects,
+ 'slugMap' => $slug_map,
+ );
+
+ return $this->addPagerResults($result, $pager);
}
}

File Metadata

Mime Type
text/x-diff
Expires
Fri, Oct 31, 3:18 AM (7 h, 44 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
311971
Default Alt Text
(4 KB)

Event Timeline