3 final class DrydockAuthorizationQuery
extends DrydockQuery
{
7 private $blueprintPHIDs;
9 private $blueprintStates;
10 private $objectStates;
12 public static function isFullyAuthorized(
14 array $blueprint_phids) {
16 if (!$blueprint_phids) {
20 $authorizations = id(new self())
21 ->setViewer(PhabricatorUser
::getOmnipotentUser())
22 ->withObjectPHIDs(array($object_phid))
23 ->withBlueprintPHIDs($blueprint_phids)
25 $authorizations = mpull($authorizations, null, 'getBlueprintPHID');
27 foreach ($blueprint_phids as $phid) {
28 $authorization = idx($authorizations, $phid);
29 if (!$authorization) {
33 if (!$authorization->isAuthorized()) {
41 public function withIDs(array $ids) {
46 public function withPHIDs(array $phids) {
47 $this->phids
= $phids;
51 public function withBlueprintPHIDs(array $phids) {
52 $this->blueprintPHIDs
= $phids;
56 public function withObjectPHIDs(array $phids) {
57 $this->objectPHIDs
= $phids;
61 public function withBlueprintStates(array $states) {
62 $this->blueprintStates
= $states;
66 public function withObjectStates(array $states) {
67 $this->objectStates
= $states;
71 public function newResultObject() {
72 return new DrydockAuthorization();
75 protected function willFilterPage(array $authorizations) {
76 $blueprint_phids = mpull($authorizations, 'getBlueprintPHID');
77 if ($blueprint_phids) {
78 $blueprints = id(new DrydockBlueprintQuery())
79 ->setViewer($this->getViewer())
80 ->setParentQuery($this)
81 ->withPHIDs($blueprint_phids)
83 $blueprints = mpull($blueprints, null, 'getPHID');
85 $blueprints = array();
88 foreach ($authorizations as $key => $authorization) {
89 $blueprint = idx($blueprints, $authorization->getBlueprintPHID());
91 $this->didRejectResult($authorization);
92 unset($authorizations[$key]);
95 $authorization->attachBlueprint($blueprint);
98 $object_phids = mpull($authorizations, 'getObjectPHID');
100 $objects = id(new PhabricatorObjectQuery())
101 ->setViewer($this->getViewer())
102 ->setParentQuery($this)
103 ->withPHIDs($object_phids)
105 $objects = mpull($objects, null, 'getPHID');
110 foreach ($authorizations as $key => $authorization) {
111 $object = idx($objects, $authorization->getObjectPHID());
113 $this->didRejectResult($authorization);
114 unset($authorizations[$key]);
117 $authorization->attachObject($object);
120 return $authorizations;
123 protected function buildWhereClauseParts(AphrontDatabaseConnection
$conn) {
124 $where = parent
::buildWhereClauseParts($conn);
126 if ($this->ids
!== null) {
133 if ($this->phids
!== null) {
140 if ($this->blueprintPHIDs
!== null) {
143 'blueprintPHID IN (%Ls)',
144 $this->blueprintPHIDs
);
147 if ($this->objectPHIDs
!== null) {
150 'objectPHID IN (%Ls)',
154 if ($this->blueprintStates
!== null) {
157 'blueprintAuthorizationState IN (%Ls)',
158 $this->blueprintStates
);
161 if ($this->objectStates
!== null) {
164 'objectAuthorizationState IN (%Ls)',
165 $this->objectStates
);