Path: blob/master/src/applications/badges/query/PhabricatorBadgesAwardQuery.php
12256 views
<?php12final class PhabricatorBadgesAwardQuery3extends PhabricatorCursorPagedPolicyAwareQuery {45private $badgePHIDs;6private $recipientPHIDs;7private $awarderPHIDs;8private $badgeStatuses = null;910protected function willFilterPage(array $awards) {11$badge_phids = array();12foreach ($awards as $key => $award) {13$badge_phids[] = $award->getBadgePHID();14}1516$badges = id(new PhabricatorBadgesQuery())17->setViewer($this->getViewer())18->withPHIDs($badge_phids)19->execute();2021$badges = mpull($badges, null, 'getPHID');22foreach ($awards as $key => $award) {23$award_badge = idx($badges, $award->getBadgePHID());24if (!$award_badge) {25unset($awards[$key]);26$this->didRejectResult($award);27continue;28}29$award->attachBadge($award_badge);30}3132return $awards;33}3435public function withBadgePHIDs(array $phids) {36$this->badgePHIDs = $phids;37return $this;38}3940public function withRecipientPHIDs(array $phids) {41$this->recipientPHIDs = $phids;42return $this;43}4445public function withAwarderPHIDs(array $phids) {46$this->awarderPHIDs = $phids;47return $this;48}4950public function withBadgeStatuses(array $statuses) {51$this->badgeStatuses = $statuses;52return $this;53}5455private function shouldJoinBadge() {56return (bool)$this->badgeStatuses;57}5859public function newResultObject() {60return new PhabricatorBadgesAward();61}6263protected function getPrimaryTableAlias() {64return 'badges_award';65}6667protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {68$where = parent::buildWhereClauseParts($conn);6970if ($this->badgePHIDs !== null) {71$where[] = qsprintf(72$conn,73'badges_award.badgePHID IN (%Ls)',74$this->badgePHIDs);75}7677if ($this->recipientPHIDs !== null) {78$where[] = qsprintf(79$conn,80'badges_award.recipientPHID IN (%Ls)',81$this->recipientPHIDs);82}8384if ($this->awarderPHIDs !== null) {85$where[] = qsprintf(86$conn,87'badges_award.awarderPHID IN (%Ls)',88$this->awarderPHIDs);89}9091if ($this->badgeStatuses !== null) {92$where[] = qsprintf(93$conn,94'badges_badge.status IN (%Ls)',95$this->badgeStatuses);96}979899return $where;100}101102protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {103$join = parent::buildJoinClauseParts($conn);104$badges = new PhabricatorBadgesBadge();105106if ($this->shouldJoinBadge()) {107$join[] = qsprintf(108$conn,109'JOIN %T badges_badge ON badges_award.badgePHID = badges_badge.phid',110$badges->getTableName());111}112113return $join;114}115116public function getQueryApplicationClass() {117return 'PhabricatorBadgesApplication';118}119120}121122123