Path: blob/master/src/applications/drydock/query/DrydockAuthorizationQuery.php
12256 views
<?php12final class DrydockAuthorizationQuery extends DrydockQuery {34private $ids;5private $phids;6private $blueprintPHIDs;7private $objectPHIDs;8private $blueprintStates;9private $objectStates;1011public static function isFullyAuthorized(12$object_phid,13array $blueprint_phids) {1415if (!$blueprint_phids) {16return true;17}1819$authorizations = id(new self())20->setViewer(PhabricatorUser::getOmnipotentUser())21->withObjectPHIDs(array($object_phid))22->withBlueprintPHIDs($blueprint_phids)23->execute();24$authorizations = mpull($authorizations, null, 'getBlueprintPHID');2526foreach ($blueprint_phids as $phid) {27$authorization = idx($authorizations, $phid);28if (!$authorization) {29return false;30}3132if (!$authorization->isAuthorized()) {33return false;34}35}3637return true;38}3940public function withIDs(array $ids) {41$this->ids = $ids;42return $this;43}4445public function withPHIDs(array $phids) {46$this->phids = $phids;47return $this;48}4950public function withBlueprintPHIDs(array $phids) {51$this->blueprintPHIDs = $phids;52return $this;53}5455public function withObjectPHIDs(array $phids) {56$this->objectPHIDs = $phids;57return $this;58}5960public function withBlueprintStates(array $states) {61$this->blueprintStates = $states;62return $this;63}6465public function withObjectStates(array $states) {66$this->objectStates = $states;67return $this;68}6970public function newResultObject() {71return new DrydockAuthorization();72}7374protected function willFilterPage(array $authorizations) {75$blueprint_phids = mpull($authorizations, 'getBlueprintPHID');76if ($blueprint_phids) {77$blueprints = id(new DrydockBlueprintQuery())78->setViewer($this->getViewer())79->setParentQuery($this)80->withPHIDs($blueprint_phids)81->execute();82$blueprints = mpull($blueprints, null, 'getPHID');83} else {84$blueprints = array();85}8687foreach ($authorizations as $key => $authorization) {88$blueprint = idx($blueprints, $authorization->getBlueprintPHID());89if (!$blueprint) {90$this->didRejectResult($authorization);91unset($authorizations[$key]);92continue;93}94$authorization->attachBlueprint($blueprint);95}9697$object_phids = mpull($authorizations, 'getObjectPHID');98if ($object_phids) {99$objects = id(new PhabricatorObjectQuery())100->setViewer($this->getViewer())101->setParentQuery($this)102->withPHIDs($object_phids)103->execute();104$objects = mpull($objects, null, 'getPHID');105} else {106$objects = array();107}108109foreach ($authorizations as $key => $authorization) {110$object = idx($objects, $authorization->getObjectPHID());111if (!$object) {112$this->didRejectResult($authorization);113unset($authorizations[$key]);114continue;115}116$authorization->attachObject($object);117}118119return $authorizations;120}121122protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {123$where = parent::buildWhereClauseParts($conn);124125if ($this->ids !== null) {126$where[] = qsprintf(127$conn,128'id IN (%Ld)',129$this->ids);130}131132if ($this->phids !== null) {133$where[] = qsprintf(134$conn,135'phid IN (%Ls)',136$this->phids);137}138139if ($this->blueprintPHIDs !== null) {140$where[] = qsprintf(141$conn,142'blueprintPHID IN (%Ls)',143$this->blueprintPHIDs);144}145146if ($this->objectPHIDs !== null) {147$where[] = qsprintf(148$conn,149'objectPHID IN (%Ls)',150$this->objectPHIDs);151}152153if ($this->blueprintStates !== null) {154$where[] = qsprintf(155$conn,156'blueprintAuthorizationState IN (%Ls)',157$this->blueprintStates);158}159160if ($this->objectStates !== null) {161$where[] = qsprintf(162$conn,163'objectAuthorizationState IN (%Ls)',164$this->objectStates);165}166167return $where;168}169170}171172173