[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |