Path: blob/master/src/applications/harbormaster/query/HarbormasterBuildableQuery.php
12256 views
<?php12final class HarbormasterBuildableQuery3extends PhabricatorCursorPagedPolicyAwareQuery {45private $ids;6private $phids;7private $buildablePHIDs;8private $containerPHIDs;9private $statuses;10private $manualBuildables;1112private $needContainerObjects;13private $needBuilds;14private $needTargets;1516public function withIDs(array $ids) {17$this->ids = $ids;18return $this;19}2021public function withPHIDs(array $phids) {22$this->phids = $phids;23return $this;24}2526public function withBuildablePHIDs(array $buildable_phids) {27$this->buildablePHIDs = $buildable_phids;28return $this;29}3031public function withContainerPHIDs(array $container_phids) {32$this->containerPHIDs = $container_phids;33return $this;34}3536public function withManualBuildables($manual) {37$this->manualBuildables = $manual;38return $this;39}4041public function needContainerObjects($need) {42$this->needContainerObjects = $need;43return $this;44}4546public function withStatuses(array $statuses) {47$this->statuses = $statuses;48return $this;49}5051public function needBuilds($need) {52$this->needBuilds = $need;53return $this;54}5556public function needTargets($need) {57$this->needTargets = $need;58return $this;59}6061public function newResultObject() {62return new HarbormasterBuildable();63}6465protected function willFilterPage(array $page) {66$buildables = array();6768$buildable_phids = array_filter(mpull($page, 'getBuildablePHID'));69if ($buildable_phids) {70$buildables = id(new PhabricatorObjectQuery())71->setViewer($this->getViewer())72->withPHIDs($buildable_phids)73->setParentQuery($this)74->execute();75$buildables = mpull($buildables, null, 'getPHID');76}7778foreach ($page as $key => $buildable) {79$buildable_phid = $buildable->getBuildablePHID();80if (empty($buildables[$buildable_phid])) {81unset($page[$key]);82continue;83}84$buildable->attachBuildableObject($buildables[$buildable_phid]);85}8687return $page;88}8990protected function didFilterPage(array $page) {91if ($this->needContainerObjects) {92$container_phids = array_filter(mpull($page, 'getContainerPHID'));9394if ($container_phids) {95$containers = id(new PhabricatorObjectQuery())96->setViewer($this->getViewer())97->withPHIDs($container_phids)98->setParentQuery($this)99->execute();100$containers = mpull($containers, null, 'getPHID');101} else {102$containers = array();103}104105foreach ($page as $key => $buildable) {106$container_phid = $buildable->getContainerPHID();107$buildable->attachContainerObject(idx($containers, $container_phid));108}109}110111if ($this->needBuilds || $this->needTargets) {112$builds = id(new HarbormasterBuildQuery())113->setViewer($this->getViewer())114->setParentQuery($this)115->withBuildablePHIDs(mpull($page, 'getPHID'))116->needBuildTargets($this->needTargets)117->execute();118$builds = mgroup($builds, 'getBuildablePHID');119foreach ($page as $key => $buildable) {120$buildable->attachBuilds(idx($builds, $buildable->getPHID(), array()));121}122}123124return $page;125}126127protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {128$where = parent::buildWhereClauseParts($conn);129130if ($this->ids !== null) {131$where[] = qsprintf(132$conn,133'id IN (%Ld)',134$this->ids);135}136137if ($this->phids !== null) {138$where[] = qsprintf(139$conn,140'phid IN (%Ls)',141$this->phids);142}143144if ($this->buildablePHIDs !== null) {145$where[] = qsprintf(146$conn,147'buildablePHID IN (%Ls)',148$this->buildablePHIDs);149}150151if ($this->containerPHIDs !== null) {152$where[] = qsprintf(153$conn,154'containerPHID in (%Ls)',155$this->containerPHIDs);156}157158if ($this->statuses !== null) {159$where[] = qsprintf(160$conn,161'buildableStatus in (%Ls)',162$this->statuses);163}164165if ($this->manualBuildables !== null) {166$where[] = qsprintf(167$conn,168'isManualBuildable = %d',169(int)$this->manualBuildables);170}171172return $where;173}174175public function getQueryApplicationClass() {176return 'PhabricatorHarbormasterApplication';177}178179}180181182