2015-06-22 13:46:26 -07:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class PhabricatorMetaMTAMailQuery
|
|
|
|
extends PhabricatorCursorPagedPolicyAwareQuery {
|
|
|
|
|
|
|
|
private $ids;
|
|
|
|
private $phids;
|
2015-06-23 11:37:14 -07:00
|
|
|
private $actorPHIDs;
|
|
|
|
private $recipientPHIDs;
|
2015-06-22 13:46:26 -07:00
|
|
|
|
|
|
|
public function withIDs(array $ids) {
|
|
|
|
$this->ids = $ids;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function withPHIDs(array $phids) {
|
|
|
|
$this->phids = $phids;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2015-06-23 11:37:14 -07:00
|
|
|
public function withActorPHIDs(array $phids) {
|
|
|
|
$this->actorPHIDs = $phids;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function withRecipientPHIDs(array $phids) {
|
|
|
|
$this->recipientPHIDs = $phids;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2015-06-22 13:46:26 -07:00
|
|
|
protected function loadPage() {
|
|
|
|
return $this->loadStandardPage($this->newResultObject());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function buildWhereClause(AphrontDatabaseConnection $conn_r) {
|
|
|
|
$where = array();
|
|
|
|
|
|
|
|
if ($this->ids !== null) {
|
|
|
|
$where[] = qsprintf(
|
|
|
|
$conn_r,
|
|
|
|
'mail.id IN (%Ld)',
|
|
|
|
$this->ids);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->phids !== null) {
|
|
|
|
$where[] = qsprintf(
|
|
|
|
$conn_r,
|
|
|
|
'mail.phid IN (%Ls)',
|
|
|
|
$this->phids);
|
|
|
|
}
|
|
|
|
|
2015-06-23 11:37:14 -07:00
|
|
|
if ($this->actorPHIDs !== null) {
|
|
|
|
$where[] = qsprintf(
|
|
|
|
$conn_r,
|
|
|
|
'mail.actorPHID IN (%Ls)',
|
|
|
|
$this->actorPHIDs);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->recipientPHIDs !== null) {
|
|
|
|
$where[] = qsprintf(
|
|
|
|
$conn_r,
|
|
|
|
'recipient.dst IN (%Ls)',
|
|
|
|
$this->recipientPHIDs);
|
|
|
|
}
|
|
|
|
|
2015-06-23 12:55:44 -07:00
|
|
|
if ($this->actorPHIDs === null && $this->recipientPHIDs === null) {
|
|
|
|
$viewer = $this->getViewer();
|
|
|
|
$where[] = qsprintf(
|
|
|
|
$conn_r,
|
|
|
|
'edge.dst = %s OR actorPHID = %s',
|
|
|
|
$viewer->getPHID(),
|
|
|
|
$viewer->getPHID());
|
|
|
|
}
|
2015-06-23 11:37:14 -07:00
|
|
|
|
2015-06-22 13:46:26 -07:00
|
|
|
$where[] = $this->buildPagingClause($conn_r);
|
|
|
|
|
|
|
|
return $this->formatWhereClause($where);
|
|
|
|
}
|
|
|
|
|
2015-06-23 11:37:14 -07:00
|
|
|
protected function buildJoinClause(AphrontDatabaseConnection $conn) {
|
|
|
|
$joins = array();
|
|
|
|
|
2015-06-23 12:55:44 -07:00
|
|
|
if ($this->actorPHIDs === null && $this->recipientPHIDs === null) {
|
|
|
|
$joins[] = qsprintf(
|
|
|
|
$conn,
|
|
|
|
'LEFT JOIN %T edge ON mail.phid = edge.src AND edge.type = %d',
|
|
|
|
PhabricatorEdgeConfig::TABLE_NAME_EDGE,
|
|
|
|
PhabricatorMetaMTAMailHasRecipientEdgeType::EDGECONST);
|
|
|
|
}
|
2015-06-23 11:37:14 -07:00
|
|
|
|
|
|
|
if ($this->recipientPHIDs !== null) {
|
|
|
|
$joins[] = qsprintf(
|
|
|
|
$conn,
|
|
|
|
'LEFT JOIN %T recipient '.
|
|
|
|
'ON mail.phid = recipient.src AND recipient.type = %d',
|
|
|
|
PhabricatorEdgeConfig::TABLE_NAME_EDGE,
|
|
|
|
PhabricatorMetaMTAMailHasRecipientEdgeType::EDGECONST);
|
|
|
|
}
|
|
|
|
|
|
|
|
return implode(' ', $joins);
|
|
|
|
}
|
|
|
|
|
2015-06-22 13:46:26 -07:00
|
|
|
protected function getPrimaryTableAlias() {
|
|
|
|
return 'mail';
|
|
|
|
}
|
|
|
|
|
|
|
|
public function newResultObject() {
|
|
|
|
return new PhabricatorMetaMTAMail();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getQueryApplicationClass() {
|
|
|
|
return 'PhabricatorMetaMTAApplication';
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|