[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/drydock/query/ -> DrydockLogQuery.php (source)

   1  <?php
   2  
   3  final class DrydockLogQuery extends DrydockQuery {
   4  
   5    private $resourceIDs;
   6    private $leaseIDs;
   7  
   8    public function withResourceIDs(array $ids) {
   9      $this->resourceIDs = $ids;
  10      return $this;
  11    }
  12  
  13    public function withLeaseIDs(array $ids) {
  14      $this->leaseIDs = $ids;
  15      return $this;
  16    }
  17  
  18    public function loadPage() {
  19      $table = new DrydockLog();
  20      $conn_r = $table->establishConnection('r');
  21  
  22      $data = queryfx_all(
  23        $conn_r,
  24        'SELECT log.* FROM %T log %Q %Q %Q',
  25        $table->getTableName(),
  26        $this->buildWhereClause($conn_r),
  27        $this->buildOrderClause($conn_r),
  28        $this->buildLimitClause($conn_r));
  29  
  30      return $table->loadAllFromArray($data);
  31    }
  32  
  33    public function willFilterPage(array $logs) {
  34      $resource_ids = array_filter(mpull($logs, 'getResourceID'));
  35      if ($resource_ids) {
  36        $resources = id(new DrydockResourceQuery())
  37          ->setParentQuery($this)
  38          ->setViewer($this->getViewer())
  39          ->withIDs($resource_ids)
  40          ->execute();
  41      } else {
  42        $resources = array();
  43      }
  44  
  45      foreach ($logs as $key => $log) {
  46        $resource = null;
  47        if ($log->getResourceID()) {
  48          $resource = idx($resources, $log->getResourceID());
  49          if (!$resource) {
  50            unset($logs[$key]);
  51            continue;
  52          }
  53        }
  54        $log->attachResource($resource);
  55      }
  56  
  57      $lease_ids = array_filter(mpull($logs, 'getLeaseID'));
  58      if ($lease_ids) {
  59        $leases = id(new DrydockLeaseQuery())
  60          ->setParentQuery($this)
  61          ->setViewer($this->getViewer())
  62          ->withIDs($lease_ids)
  63          ->execute();
  64      } else {
  65        $leases = array();
  66      }
  67  
  68      foreach ($logs as $key => $log) {
  69        $lease = null;
  70        if ($log->getLeaseID()) {
  71          $lease = idx($leases, $log->getLeaseID());
  72          if (!$lease) {
  73            unset($logs[$key]);
  74            continue;
  75          }
  76        }
  77        $log->attachLease($lease);
  78      }
  79  
  80      // These logs are meaningless and their policies aren't computable. They
  81      // shouldn't exist, but throw them away if they do.
  82      foreach ($logs as $key => $log) {
  83        if (!$log->getResource() && !$log->getLease()) {
  84          unset($logs[$key]);
  85        }
  86      }
  87  
  88      return $logs;
  89    }
  90  
  91    private function buildWhereClause(AphrontDatabaseConnection $conn_r) {
  92      $where = array();
  93  
  94      if ($this->resourceIDs) {
  95        $where[] = qsprintf(
  96          $conn_r,
  97          'resourceID IN (%Ld)',
  98          $this->resourceIDs);
  99      }
 100  
 101      if ($this->leaseIDs) {
 102        $where[] = qsprintf(
 103          $conn_r,
 104          'leaseID IN (%Ld)',
 105          $this->leaseIDs);
 106      }
 107  
 108      $where[] = $this->buildPagingClause($conn_r);
 109  
 110      return $this->formatWhereClause($where);
 111    }
 112  
 113  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1