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 @@ -919,6 +919,7 @@ 'DrydockAuthorizationListView' => 'applications/drydock/view/DrydockAuthorizationListView.php', 'DrydockAuthorizationPHIDType' => 'applications/drydock/phid/DrydockAuthorizationPHIDType.php', 'DrydockAuthorizationQuery' => 'applications/drydock/query/DrydockAuthorizationQuery.php', + 'DrydockAuthorizationSearchConduitAPIMethod' => 'applications/drydock/conduit/DrydockAuthorizationSearchConduitAPIMethod.php', 'DrydockAuthorizationSearchEngine' => 'applications/drydock/query/DrydockAuthorizationSearchEngine.php', 'DrydockAuthorizationViewController' => 'applications/drydock/controller/DrydockAuthorizationViewController.php', 'DrydockBlueprint' => 'applications/drydock/storage/DrydockBlueprint.php', @@ -5468,12 +5469,14 @@ 'DrydockAuthorization' => array( 'DrydockDAO', 'PhabricatorPolicyInterface', + 'PhabricatorConduitResultInterface', ), 'DrydockAuthorizationAuthorizeController' => 'DrydockController', 'DrydockAuthorizationListController' => 'DrydockController', 'DrydockAuthorizationListView' => 'AphrontView', 'DrydockAuthorizationPHIDType' => 'PhabricatorPHIDType', 'DrydockAuthorizationQuery' => 'DrydockQuery', + 'DrydockAuthorizationSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', 'DrydockAuthorizationSearchEngine' => 'PhabricatorApplicationSearchEngine', 'DrydockAuthorizationViewController' => 'DrydockController', 'DrydockBlueprint' => array( diff --git a/src/applications/drydock/conduit/DrydockAuthorizationSearchConduitAPIMethod.php b/src/applications/drydock/conduit/DrydockAuthorizationSearchConduitAPIMethod.php new file mode 100644 --- /dev/null +++ b/src/applications/drydock/conduit/DrydockAuthorizationSearchConduitAPIMethod.php @@ -0,0 +1,18 @@ +getBlueprint(); - $query->withBlueprintPHIDs(array($blueprint->getPHID())); + if ($blueprint) { + $query->withBlueprintPHIDs(array($blueprint->getPHID())); + } return $query; } @@ -38,15 +40,46 @@ protected function buildQueryFromParameters(array $map) { $query = $this->newQuery(); + if ($map['blueprintPHIDs']) { + $query->withBlueprintPHIDs($map['blueprintPHIDs']); + } + + if ($map['objectPHIDs']) { + $query->withObjectPHIDs($map['objectPHIDs']); + } + return $query; } protected function buildCustomSearchFields() { - return array(); + return array( + id(new PhabricatorSearchDatasourceField()) + ->setLabel(pht('Blueprints')) + ->setKey('blueprintPHIDs') + ->setConduitParameterType(new ConduitPHIDListParameterType()) + ->setDescription(pht('Search authorizations for specific blueprints.')) + ->setAliases(array('blueprint', 'blueprints')) + ->setDatasource(new DrydockBlueprintDatasource()), + id(new PhabricatorPHIDsSearchField()) + ->setLabel(pht('Objects')) + ->setKey('objectPHIDs') + ->setDescription(pht('Search authorizations from specific objects.')) + ->setAliases(array('object', 'objects')), + ); + } + + protected function getHiddenFields() { + return array( + 'blueprintPHIDs', + 'objectPHIDs', + ); } protected function getURI($path) { $blueprint = $this->getBlueprint(); + if (!$blueprint) { + throw new PhutilInvalidStateException('setBlueprint'); + } $id = $blueprint->getID(); return "/drydock/blueprint/{$id}/authorizations/".$path; } diff --git a/src/applications/drydock/storage/DrydockAuthorization.php b/src/applications/drydock/storage/DrydockAuthorization.php --- a/src/applications/drydock/storage/DrydockAuthorization.php +++ b/src/applications/drydock/storage/DrydockAuthorization.php @@ -2,7 +2,8 @@ final class DrydockAuthorization extends DrydockDAO implements - PhabricatorPolicyInterface { + PhabricatorPolicyInterface, + PhabricatorConduitResultInterface { const OBJECTAUTH_ACTIVE = 'active'; const OBJECTAUTH_INACTIVE = 'inactive'; @@ -204,4 +205,52 @@ } +/* -( PhabricatorConduitResultInterface )---------------------------------- */ + + + public function getFieldSpecificationsForConduit() { + return array( + id(new PhabricatorConduitSearchFieldSpecification()) + ->setKey('blueprintPHID') + ->setType('phid') + ->setDescription(pht( + 'PHID of the blueprint this request was made for.')), + id(new PhabricatorConduitSearchFieldSpecification()) + ->setKey('blueprintAuthorizationState') + ->setType('map') + ->setDescription(pht('Authorization state of this request.')), + id(new PhabricatorConduitSearchFieldSpecification()) + ->setKey('objectPHID') + ->setType('phid') + ->setDescription(pht( + 'PHID of the object which requested authorization.')), + id(new PhabricatorConduitSearchFieldSpecification()) + ->setKey('objectAuthorizationState') + ->setType('map') + ->setDescription(pht('Authorization state of the requesting object.')), + ); + } + + public function getFieldValuesForConduit() { + $blueprint_state = $this->getBlueprintAuthorizationState(); + $object_state = $this->getObjectAuthorizationState(); + return array( + 'blueprintPHID' => $this->getBlueprintPHID(), + 'blueprintAuthorizationState' => array( + 'value' => $blueprint_state, + 'name' => self::getBlueprintStateName($blueprint_state), + ), + 'objectPHID' => $this->getObjectPHID(), + 'objectAuthorizationState' => array( + 'value' => $object_state, + 'name' => self::getObjectStateName($object_state), + ), + ); + } + + public function getConduitSearchAttachments() { + return array( + ); + } + }