Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15399227
D13024.id31409.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
28 KB
Referenced Files
None
Subscribers
None
D13024.id31409.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
@@ -2175,6 +2175,7 @@
'PhabricatorOwnersPackagePHIDType' => 'applications/owners/phid/PhabricatorOwnersPackagePHIDType.php',
'PhabricatorOwnersPackagePathValidator' => 'applications/repository/worker/commitchangeparser/PhabricatorOwnersPackagePathValidator.php',
'PhabricatorOwnersPackageQuery' => 'applications/owners/query/PhabricatorOwnersPackageQuery.php',
+ 'PhabricatorOwnersPackageSearchEngine' => 'applications/owners/query/PhabricatorOwnersPackageSearchEngine.php',
'PhabricatorOwnersPackageTestCase' => 'applications/owners/storage/__tests__/PhabricatorOwnersPackageTestCase.php',
'PhabricatorOwnersPath' => 'applications/owners/storage/PhabricatorOwnersPath.php',
'PhabricatorPHDConfigOptions' => 'applications/config/option/PhabricatorPHDConfigOptions.php',
@@ -5578,6 +5579,7 @@
'PhabricatorOwnersPackageEditor' => 'PhabricatorEditor',
'PhabricatorOwnersPackagePHIDType' => 'PhabricatorPHIDType',
'PhabricatorOwnersPackageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
+ 'PhabricatorOwnersPackageSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorOwnersPackageTestCase' => 'PhabricatorTestCase',
'PhabricatorOwnersPath' => 'PhabricatorOwnersDAO',
'PhabricatorPHDConfigOptions' => 'PhabricatorApplicationConfigOptions',
diff --git a/src/applications/owners/application/PhabricatorOwnersApplication.php b/src/applications/owners/application/PhabricatorOwnersApplication.php
--- a/src/applications/owners/application/PhabricatorOwnersApplication.php
+++ b/src/applications/owners/application/PhabricatorOwnersApplication.php
@@ -42,8 +42,7 @@
public function getRoutes() {
return array(
'/owners/' => array(
- '' => 'PhabricatorOwnersListController',
- 'view/(?P<view>[^/]+)/' => 'PhabricatorOwnersListController',
+ '(?:query/(?P<queryKey>[^/]+)/)?' => 'PhabricatorOwnersListController',
'edit/(?P<id>[1-9]\d*)/' => 'PhabricatorOwnersEditController',
'new/' => 'PhabricatorOwnersEditController',
'package/(?P<id>[1-9]\d*)/' => 'PhabricatorOwnersDetailController',
diff --git a/src/applications/owners/controller/PhabricatorOwnersController.php b/src/applications/owners/controller/PhabricatorOwnersController.php
--- a/src/applications/owners/controller/PhabricatorOwnersController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersController.php
@@ -1,70 +1,3 @@
<?php
-abstract class PhabricatorOwnersController extends PhabricatorController {
-
- private $filter;
-
- private function getSideNavFilter() {
- return $this->filter;
- }
- protected function setSideNavFilter($filter) {
- $this->filter = $filter;
- return $this;
- }
-
- public function buildSideNavView() {
- $nav = new AphrontSideNavFilterView();
- $base_uri = new PhutilURI('/owners/');
- $nav->setBaseURI($base_uri);
-
- $nav->addLabel(pht('Packages'));
- $this->getExtraPackageViews($nav);
- $nav->addFilter('view/owned', pht('Owned'));
- $nav->addFilter('view/projects', pht('Projects'));
- $nav->addFilter('view/all', pht('All'));
-
- $nav->selectFilter($this->getSideNavFilter(), 'view/owned');
-
- $filter = $nav->getSelectedFilter();
- switch ($filter) {
- case 'view/owned':
- $title = pht('Owned Packages');
- break;
- case 'view/all':
- $title = pht('All Packages');
- break;
- case 'view/projects':
- $title = pht('Projects');
- break;
- case 'new':
- $title = pht('New Package');
- break;
- default:
- $title = pht('Package');
- break;
- }
-
- return $nav;
- }
-
- protected function buildApplicationCrumbs() {
- $crumbs = parent::buildApplicationCrumbs();
-
- $crumbs->addAction(
- id(new PHUIListItemView())
- ->setName(pht('Create Package'))
- ->setHref('/owners/new/')
- ->setIcon('fa-plus-square'));
-
- return $crumbs;
- }
-
- public function buildApplicationMenu() {
- return $this->buildSideNavView()->getMenu();
- }
-
- protected function getExtraPackageViews(AphrontSideNavFilterView $view) {
- return;
- }
-
-}
+abstract class PhabricatorOwnersController extends PhabricatorController {}
diff --git a/src/applications/owners/controller/PhabricatorOwnersDetailController.php b/src/applications/owners/controller/PhabricatorOwnersDetailController.php
--- a/src/applications/owners/controller/PhabricatorOwnersDetailController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersDetailController.php
@@ -3,22 +3,20 @@
final class PhabricatorOwnersDetailController
extends PhabricatorOwnersController {
- private $id;
- private $package;
-
- public function willProcessRequest(array $data) {
- $this->id = $data['id'];
+ public function shouldAllowPublic() {
+ return true;
}
- public function processRequest() {
- $request = $this->getRequest();
- $user = $request->getUser();
+ public function handleRequest(AphrontRequest $request) {
+ $viewer = $this->getViewer();
- $package = id(new PhabricatorOwnersPackage())->load($this->id);
+ $package = id(new PhabricatorOwnersPackageQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($request->getURIData('id')))
+ ->executeOne();
if (!$package) {
return new Aphront404Response();
}
- $this->package = $package;
$paths = $package->loadPaths();
$owners = $package->loadOwners();
@@ -30,7 +28,7 @@
if ($repository_phids) {
$repositories = id(new PhabricatorRepositoryQuery())
- ->setViewer($user)
+ ->setViewer($viewer)
->withPHIDs(array_keys($repository_phids))
->execute();
$repositories = mpull($repositories, null, 'getPHID');
@@ -131,9 +129,6 @@
$panel->setHeader($header);
$panel->appendChild($table);
- $key = 'package/'.$package->getID();
- $this->setSideNavFilter($key);
-
$commit_views = array();
$commit_uri = id(new PhutilURI('/audit/'))
@@ -151,7 +146,7 @@
->execute();
if ($attention_commits) {
$view = id(new PhabricatorAuditListView())
- ->setUser($user)
+ ->setUser($viewer)
->setCommits($attention_commits);
$commit_views[] = array(
@@ -172,7 +167,7 @@
->execute();
$view = id(new PhabricatorAuditListView())
- ->setUser($user)
+ ->setUser($viewer)
->setCommits($all_commits)
->setNoDataString(pht('No commits in this package.'));
@@ -210,21 +205,15 @@
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb($package->getName());
- $nav = $this->buildSideNavView();
- $nav->appendChild($crumbs);
- $nav->appendChild($panel);
- $nav->appendChild($commit_panels);
-
return $this->buildApplicationPage(
- $nav,
+ array(
+ $crumbs,
+ $panel,
+ $commit_panels,
+ ),
array(
'title' => pht('Package %s', $package->getName()),
));
}
- protected function getExtraPackageViews(AphrontSideNavFilterView $view) {
- $package = $this->package;
- $view->addFilter('package/'.$package->getID(), pht('Details'));
- }
-
}
diff --git a/src/applications/owners/controller/PhabricatorOwnersEditController.php b/src/applications/owners/controller/PhabricatorOwnersEditController.php
--- a/src/applications/owners/controller/PhabricatorOwnersEditController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersEditController.php
@@ -3,24 +3,27 @@
final class PhabricatorOwnersEditController
extends PhabricatorOwnersController {
- private $id;
-
- public function willProcessRequest(array $data) {
- $this->id = idx($data, 'id');
- }
-
- public function processRequest() {
- $request = $this->getRequest();
- $user = $request->getUser();
-
- if ($this->id) {
- $package = id(new PhabricatorOwnersPackage())->load($this->id);
+ public function handleRequest(AphrontRequest $request) {
+ $viewer = $request->getUser();
+
+ $id = $request->getURIData('id');
+ if ($id) {
+ $package = id(new PhabricatorOwnersPackageQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ // TODO: Support this capability.
+ // PhabricatorPolicyCapability::CAN_EDIT,
+ ))
+ ->executeOne();
if (!$package) {
return new Aphront404Response();
}
} else {
$package = new PhabricatorOwnersPackage();
- $package->setPrimaryOwnerPHID($user->getPHID());
+ $package->setPrimaryOwnerPHID($viewer->getPHID());
}
$e_name = true;
@@ -89,7 +92,7 @@
$package->attachOldPrimaryOwnerPHID($old_primary);
try {
id(new PhabricatorOwnersPackageEditor())
- ->setActor($user)
+ ->setActor($viewer)
->setPackage($package)
->save();
return id(new AphrontRedirectResponse())
@@ -123,15 +126,12 @@
if ($package->getID()) {
$title = pht('Edit Package');
- $side_nav_filter = 'edit/'.$this->id;
} else {
$title = pht('New Package');
- $side_nav_filter = 'new';
}
- $this->setSideNavFilter($side_nav_filter);
$repos = id(new PhabricatorRepositoryQuery())
- ->setViewer($user)
+ ->setViewer($viewer)
->execute();
$default_paths = array();
@@ -171,7 +171,7 @@
: '/owners/';
$form = id(new AphrontFormView())
- ->setUser($user)
+ ->setUser($viewer)
->appendChild(
id(new AphrontFormTextControl())
->setLabel(pht('Name'))
@@ -256,24 +256,14 @@
$crumbs->addTextCrumb(pht('New Package'));
}
- $nav = $this->buildSideNavView();
- $nav->appendChild($crumbs);
- $nav->appendChild($form_box);
-
return $this->buildApplicationPage(
array(
- $nav,
+ $crumbs,
+ $form_box,
),
array(
'title' => $title,
));
}
- protected function getExtraPackageViews(AphrontSideNavFilterView $view) {
- if ($this->id) {
- $view->addFilter('edit/'.$this->id, pht('Edit'));
- } else {
- $view->addFilter('new', pht('New'));
- }
- }
}
diff --git a/src/applications/owners/controller/PhabricatorOwnersListController.php b/src/applications/owners/controller/PhabricatorOwnersListController.php
--- a/src/applications/owners/controller/PhabricatorOwnersListController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersListController.php
@@ -3,341 +3,52 @@
final class PhabricatorOwnersListController
extends PhabricatorOwnersController {
- protected $view;
-
- public function willProcessRequest(array $data) {
- $this->view = idx($data, 'view', 'owned');
- $this->setSideNavFilter('view/'.$this->view);
+ public function shouldAllowPublic() {
+ return true;
}
- public function processRequest() {
-
- $request = $this->getRequest();
- $user = $request->getUser();
-
- $package = new PhabricatorOwnersPackage();
- $owner = new PhabricatorOwnersOwner();
- $path = new PhabricatorOwnersPath();
-
- $repository_phid = '';
- if ($request->getStr('repository') != '') {
- $repository_phid = id(new PhabricatorRepositoryQuery())
- ->setViewer($user)
- ->withCallsigns(array($request->getStr('repository')))
- ->executeOne()
- ->getPHID();
- }
-
- switch ($this->view) {
- case 'search':
- $packages = array();
-
- $conn_r = $package->establishConnection('r');
-
- $where = array('1 = 1');
- $join = array();
- $having = '';
-
- if ($request->getStr('name')) {
- $where[] = qsprintf(
- $conn_r,
- 'p.name LIKE %~',
- $request->getStr('name'));
- }
-
- if ($repository_phid || $request->getStr('path')) {
-
- $join[] = qsprintf(
- $conn_r,
- 'JOIN %T path ON path.packageID = p.id',
- $path->getTableName());
-
- if ($repository_phid) {
- $where[] = qsprintf(
- $conn_r,
- 'path.repositoryPHID = %s',
- $repository_phid);
- }
-
- if ($request->getStr('path')) {
- $where[] = qsprintf(
- $conn_r,
- '(path.path LIKE %~ AND NOT path.excluded) OR
- %s LIKE CONCAT(REPLACE(path.path, %s, %s), %s)',
- $request->getStr('path'),
- $request->getStr('path'),
- '_',
- '\_',
- '%');
- $having = 'HAVING MAX(path.excluded) = 0';
- }
-
- }
-
- if ($request->getArr('owner')) {
- $join[] = qsprintf(
- $conn_r,
- 'JOIN %T o ON o.packageID = p.id',
- $owner->getTableName());
- $where[] = qsprintf(
- $conn_r,
- 'o.userPHID IN (%Ls)',
- $request->getArr('owner'));
- }
-
- $data = queryfx_all(
- $conn_r,
- 'SELECT p.* FROM %T p %Q WHERE %Q GROUP BY p.id %Q',
- $package->getTableName(),
- implode(' ', $join),
- '('.implode(') AND (', $where).')',
- $having);
- $packages = $package->loadAllFromArray($data);
-
- $header = pht('Search Results');
- $nodata = pht('No packages match your query.');
- break;
- case 'owned':
- $data = queryfx_all(
- $package->establishConnection('r'),
- 'SELECT p.* FROM %T p JOIN %T o ON p.id = o.packageID
- WHERE o.userPHID = %s GROUP BY p.id',
- $package->getTableName(),
- $owner->getTableName(),
- $user->getPHID());
- $packages = $package->loadAllFromArray($data);
-
- $header = pht('Owned Packages');
- $nodata = pht('No owned packages');
- break;
- case 'projects':
- $projects = id(new PhabricatorProjectQuery())
- ->setViewer($user)
- ->withMemberPHIDs(array($user->getPHID()))
- ->withStatus(PhabricatorProjectQuery::STATUS_ANY)
- ->execute();
- $owner_phids = mpull($projects, 'getPHID');
- if ($owner_phids) {
- $data = queryfx_all(
- $package->establishConnection('r'),
- 'SELECT p.* FROM %T p JOIN %T o ON p.id = o.packageID
- WHERE o.userPHID IN (%Ls) GROUP BY p.id',
- $package->getTableName(),
- $owner->getTableName(),
- $owner_phids);
- } else {
- $data = array();
- }
- $packages = $package->loadAllFromArray($data);
-
- $header = pht('Project Packages');
- $nodata = pht('No owned packages');
- break;
- case 'all':
- $packages = $package->loadAll();
-
- $header = pht('All Packages');
- $nodata = pht('There are no defined packages.');
- break;
- }
-
- $content = $this->renderPackageTable(
- $packages,
- $header,
- $nodata);
-
- $filter = new AphrontListFilterView();
-
- $owner_phids = $request->getArr('owner');
-
- $callsigns = array('' => pht('(Any Repository)'));
- $repositories = id(new PhabricatorRepositoryQuery())
- ->setViewer($user)
- ->setOrder('callsign')
- ->execute();
- foreach ($repositories as $repository) {
- $callsigns[$repository->getCallsign()] =
- $repository->getCallsign().': '.$repository->getName();
- }
-
- $form = id(new AphrontFormView())
- ->setUser($user)
- ->setAction('/owners/view/search/')
- ->setMethod('GET')
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('name')
- ->setLabel(pht('Name'))
- ->setValue($request->getStr('name')))
- ->appendControl(
- id(new AphrontFormTokenizerControl())
- ->setDatasource(new PhabricatorProjectOrUserDatasource())
- ->setLimit(1)
- ->setName('owner')
- ->setLabel(pht('Owner'))
- ->setValue($owner_phids))
- ->appendChild(
- id(new AphrontFormSelectControl())
- ->setName('repository')
- ->setLabel(pht('Repository'))
- ->setOptions($callsigns)
- ->setValue($request->getStr('repository')))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('path')
- ->setLabel(pht('Path'))
- ->setValue($request->getStr('path')))
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->setValue(pht('Search for Packages')));
-
- $filter->appendChild($form);
- $title = pht('Package Index');
-
- $crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb($header);
- $crumbs->setBorder(true);
-
- $nav = $this->buildSideNavView();
- $nav->appendChild($crumbs);
- $nav->appendChild($filter);
- $nav->appendChild($content);
+ public function handleRequest(AphrontRequest $request) {
+ $controller = id(new PhabricatorApplicationSearchController())
+ ->setQueryKey($request->getURIData('queryKey'))
+ ->setSearchEngine(new PhabricatorOwnersPackageSearchEngine())
+ ->setNavigation($this->buildSideNavView());
- return $this->buildApplicationPage(
- $nav,
- array(
- 'title' => pht('Package Index'),
- ));
+ return $this->delegateToController($controller);
}
- private function renderPackageTable(array $packages, $header, $nodata) {
- assert_instances_of($packages, 'PhabricatorOwnersPackage');
+ public function buildSideNavView($for_app = false) {
+ $viewer = $this->getViewer();
- if ($packages) {
- $package_ids = mpull($packages, 'getID');
+ $nav = new AphrontSideNavFilterView();
+ $nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
- $owners = id(new PhabricatorOwnersOwner())->loadAllWhere(
- 'packageID IN (%Ld)',
- $package_ids);
-
- $paths = id(new PhabricatorOwnersPath())->loadAllWhere(
- 'packageID in (%Ld)',
- $package_ids);
-
- $phids = array();
- foreach ($owners as $owner) {
- $phids[$owner->getUserPHID()] = true;
- }
- $phids = array_keys($phids);
- $handles = $this->loadViewerHandles($phids);
-
- $repository_phids = array();
- foreach ($paths as $path) {
- $repository_phids[$path->getRepositoryPHID()] = true;
- }
-
- if ($repository_phids) {
- $repositories = id(new PhabricatorRepositoryQuery())
- ->setViewer($this->getRequest()->getUser())
- ->withPHIDs(array_keys($repository_phids))
- ->execute();
- } else {
- $repositories = array();
- }
-
- $repositories = mpull($repositories, null, 'getPHID');
- $owners = mgroup($owners, 'getPackageID');
- $paths = mgroup($paths, 'getPackageID');
- } else {
- $handles = array();
- $repositories = array();
- $owners = array();
- $paths = array();
+ if ($for_app) {
+ $nav->addFilter('new/', pht('Create Package'));
}
- $rows = array();
- foreach ($packages as $package) {
+ id(new PhabricatorOwnersPackageSearchEngine())
+ ->setViewer($viewer)
+ ->addNavigationItems($nav->getMenu());
- $pkg_owners = idx($owners, $package->getID(), array());
- foreach ($pkg_owners as $key => $owner) {
- $pkg_owners[$key] = $handles[$owner->getUserPHID()]->renderLink();
- if ($owner->getUserPHID() == $package->getPrimaryOwnerPHID()) {
- $pkg_owners[$key] = phutil_tag('strong', array(), $pkg_owners[$key]);
- }
- }
- $pkg_owners = phutil_implode_html(phutil_tag('br'), $pkg_owners);
+ $nav->selectFilter(null);
- $pkg_paths = idx($paths, $package->getID(), array());
- foreach ($pkg_paths as $key => $path) {
- $repo = idx($repositories, $path->getRepositoryPHID());
- if ($repo) {
- $href = DiffusionRequest::generateDiffusionURI(
- array(
- 'callsign' => $repo->getCallsign(),
- 'branch' => $repo->getDefaultBranch(),
- 'path' => $path->getPath(),
- 'action' => 'browse',
- ));
- $pkg_paths[$key] = hsprintf(
- '%s %s%s',
- ($path->getExcluded() ? "\xE2\x80\x93" : '+'),
- phutil_tag('strong', array(), $repo->getName()),
- phutil_tag(
- 'a',
- array(
- 'href' => (string)$href,
- ),
- $path->getPath()));
- } else {
- $pkg_paths[$key] = $path->getPath();
- }
- }
- $pkg_paths = phutil_implode_html(phutil_tag('br'), $pkg_paths);
+ return $nav;
+ }
- $rows[] = array(
- phutil_tag(
- 'a',
- array(
- 'href' => '/owners/package/'.$package->getID().'/',
- ),
- $package->getName()),
- $pkg_owners,
- $pkg_paths,
- phutil_tag(
- 'a',
- array(
- 'href' => '/audit/?auditorPHIDs='.$package->getPHID(),
- ),
- pht('Related Commits')),
- );
- }
+ public function buildApplicationMenu() {
+ return $this->buildSideNavView(true)->getMenu();
+ }
- $table = new AphrontTableView($rows);
- $table->setHeaders(
- array(
- pht('Name'),
- pht('Owners'),
- pht('Paths'),
- pht('Related Commits'),
- ));
- $table->setColumnClasses(
- array(
- 'pri',
- '',
- 'wide wrap',
- 'narrow',
- ));
+ protected function buildApplicationCrumbs() {
+ $crumbs = parent::buildApplicationCrumbs();
- $panel = new PHUIObjectBoxView();
- $panel->setHeaderText($header);
- $panel->appendChild($table);
+ $crumbs->addAction(
+ id(new PHUIListItemView())
+ ->setName(pht('Create Package'))
+ ->setHref($this->getApplicationURI('new/'))
+ ->setIcon('fa-plus-square'));
- return $panel;
+ return $crumbs;
}
- protected function getExtraPackageViews(AphrontSideNavFilterView $view) {
- if ($this->view == 'search') {
- $view->addFilter('view/search', pht('Search Results'));
- }
- }
}
diff --git a/src/applications/owners/query/PhabricatorOwnersPackageQuery.php b/src/applications/owners/query/PhabricatorOwnersPackageQuery.php
--- a/src/applications/owners/query/PhabricatorOwnersPackageQuery.php
+++ b/src/applications/owners/query/PhabricatorOwnersPackageQuery.php
@@ -3,8 +3,10 @@
final class PhabricatorOwnersPackageQuery
extends PhabricatorCursorPagedPolicyAwareQuery {
+ private $ids;
private $phids;
private $ownerPHIDs;
+ private $repositoryPHIDs;
/**
* Owners are direct owners, and members of owning projects.
@@ -19,6 +21,16 @@
return $this;
}
+ public function withIDs(array $ids) {
+ $this->ids = $ids;
+ return $this;
+ }
+
+ public function withRepositoryPHIDs(array $phids) {
+ $this->repositoryPHIDs = $phids;
+ return $this;
+ }
+
protected function loadPage() {
$table = new PhabricatorOwnersPackage();
$conn_r = $table->establishConnection('r');
@@ -38,27 +50,48 @@
protected function buildJoinClause(AphrontDatabaseConnection $conn_r) {
$joins = array();
- if ($this->ownerPHIDs) {
+ if ($this->ownerPHIDs !== null) {
$joins[] = qsprintf(
$conn_r,
'JOIN %T o ON o.packageID = p.id',
id(new PhabricatorOwnersOwner())->getTableName());
}
+ if ($this->repositoryPHIDs !== null) {
+ $joins[] = qsprintf(
+ $conn_r,
+ 'JOIN %T rpath ON rpath.packageID = p.id',
+ id(new PhabricatorOwnersPath())->getTableName());
+ }
+
return implode(' ', $joins);
}
protected function buildWhereClause(AphrontDatabaseConnection $conn_r) {
$where = array();
- if ($this->phids) {
+ if ($this->phids !== null) {
$where[] = qsprintf(
$conn_r,
'p.phid IN (%Ls)',
$this->phids);
}
- if ($this->ownerPHIDs) {
+ if ($this->ids !== null) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'p.id IN (%Ld)',
+ $this->ids);
+ }
+
+ if ($this->repositoryPHIDs !== null) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'rpath.repositoryPHID IN (%Ls)',
+ $this->repositoryPHIDs);
+ }
+
+ if ($this->ownerPHIDs !== null) {
$base_phids = $this->ownerPHIDs;
$query = new PhabricatorProjectQuery();
diff --git a/src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php b/src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php
new file mode 100644
--- /dev/null
+++ b/src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php
@@ -0,0 +1,134 @@
+<?php
+
+final class PhabricatorOwnersPackageSearchEngine
+ extends PhabricatorApplicationSearchEngine {
+
+ public function getResultTypeDescription() {
+ return pht('Owners Packages');
+ }
+
+ public function getApplicationClassName() {
+ return 'PhabricatorOwnersApplication';
+ }
+
+ public function buildSavedQueryFromRequest(AphrontRequest $request) {
+ $saved = new PhabricatorSavedQuery();
+
+ $saved->setParameter(
+ 'ownerPHIDs',
+ $this->readUsersFromRequest(
+ $request,
+ 'owners',
+ array(
+ PhabricatorProjectProjectPHIDType::TYPECONST,
+ )));
+
+ $saved->setParameter(
+ 'repositoryPHIDs',
+ $this->readPHIDsFromRequest(
+ $request,
+ 'repositories',
+ array(
+ PhabricatorRepositoryRepositoryPHIDType::TYPECONST,
+ )));
+
+ return $saved;
+ }
+
+ public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
+ $query = id(new PhabricatorOwnersPackageQuery());
+
+ $owner_phids = $saved->getParameter('ownerPHIDs', array());
+ if ($owner_phids) {
+ $query->withOwnerPHIDs($owner_phids);
+ }
+
+ $repository_phids = $saved->getParameter('repositoryPHIDs', array());
+ if ($repository_phids) {
+ $query->withRepositoryPHIDs($repository_phids);
+ }
+
+ return $query;
+ }
+
+ public function buildSearchForm(
+ AphrontFormView $form,
+ PhabricatorSavedQuery $saved) {
+
+ $owner_phids = $saved->getParameter('ownerPHIDs', array());
+ $repository_phids = $saved->getParameter('repositoryPHIDs', array());
+
+ $form
+ ->appendControl(
+ id(new AphrontFormTokenizerControl())
+ ->setDatasource(new PhabricatorProjectOrUserDatasource())
+ ->setName('owners')
+ ->setLabel(pht('Owners'))
+ ->setValue($owner_phids))
+ ->appendControl(
+ id(new AphrontFormTokenizerControl())
+ ->setDatasource(new DiffusionRepositoryDatasource())
+ ->setName('repositories')
+ ->setLabel(pht('Repositories'))
+ ->setValue($repository_phids));
+ }
+
+ protected function getURI($path) {
+ return '/owners/'.$path;
+ }
+
+ protected function getBuiltinQueryNames() {
+ $names = array();
+
+ if ($this->requireViewer()->isLoggedIn()) {
+ $names['owned'] = pht('Owned');
+ }
+
+ $names += array(
+ 'all' => pht('All Packages'),
+ );
+
+ return $names;
+ }
+
+ public function buildSavedQueryFromBuiltin($query_key) {
+ $query = $this->newSavedQuery();
+ $query->setQueryKey($query_key);
+
+ switch ($query_key) {
+ case 'all':
+ return $query;
+ case 'owned':
+ return $query->setParameter(
+ 'ownerPHIDs',
+ array($this->requireViewer()->getPHID()));
+ }
+
+ return parent::buildSavedQueryFromBuiltin($query_key);
+ }
+
+ protected function renderResultList(
+ array $packages,
+ PhabricatorSavedQuery $query,
+ array $handles) {
+ assert_instances_of($packages, 'PhabricatorOwnersPackage');
+
+ $viewer = $this->requireViewer();
+
+ $list = id(new PHUIObjectItemListView())
+ ->setUser($viewer);
+ foreach ($packages as $package) {
+ $id = $package->getID();
+
+ $item = id(new PHUIObjectItemView())
+ ->setObject($package)
+ ->setObjectName(pht('Package %d', $id))
+ ->setHeader($package->getName())
+ ->setHref('/owners/package/'.$id.'/');
+
+ $list->addItem($item);
+ }
+
+ return $list;
+ }
+}
diff --git a/src/applications/owners/storage/PhabricatorOwnersPackage.php b/src/applications/owners/storage/PhabricatorOwnersPackage.php
--- a/src/applications/owners/storage/PhabricatorOwnersPackage.php
+++ b/src/applications/owners/storage/PhabricatorOwnersPackage.php
@@ -37,7 +37,7 @@
return array(
// This information is better available from the history table.
self::CONFIG_TIMESTAMPS => false,
- self::CONFIG_AUX_PHID => true,
+ self::CONFIG_AUX_PHID => true,
self::CONFIG_COLUMN_SCHEMA => array(
'name' => 'text128',
'originalName' => 'text255',
@@ -60,7 +60,8 @@
}
public function generatePHID() {
- return PhabricatorPHID::generateNewPHID('OPKG');
+ return PhabricatorPHID::generateNewPHID(
+ PhabricatorOwnersPackagePHIDType::TYPECONST);
}
public function attachUnsavedOwners(array $owners) {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Mar 18, 3:27 AM (3 d, 1 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7709314
Default Alt Text
D13024.id31409.diff (28 KB)
Attached To
Mode
D13024: Use ApplicationSearch in Owners
Attached
Detach File
Event Timeline
Log In to Comment