@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at upstream/main 69 lines 1.7 kB view raw
1<?php 2 3final class ConpherenceParticipantCountQuery 4 extends PhabricatorOffsetPagedQuery { 5 6 private $participantPHIDs; 7 private $unread; 8 9 public function withParticipantPHIDs(array $phids) { 10 $this->participantPHIDs = $phids; 11 return $this; 12 } 13 14 public function withUnread($unread) { 15 $this->unread = $unread; 16 return $this; 17 } 18 19 public function execute() { 20 $thread = new ConpherenceThread(); 21 $table = new ConpherenceParticipant(); 22 $conn = $table->establishConnection('r'); 23 24 $rows = queryfx_all( 25 $conn, 26 'SELECT COUNT(*) as count, participantPHID 27 FROM %T participant JOIN %T thread 28 ON participant.conpherencePHID = thread.phid %Q %Q %Q', 29 $table->getTableName(), 30 $thread->getTableName(), 31 $this->buildWhereClause($conn), 32 $this->buildGroupByClause($conn), 33 $this->buildLimitClause($conn)); 34 35 return ipull($rows, 'count', 'participantPHID'); 36 } 37 38 protected function buildWhereClause(AphrontDatabaseConnection $conn) { 39 $where = array(); 40 41 if ($this->participantPHIDs !== null) { 42 $where[] = qsprintf( 43 $conn, 44 'participant.participantPHID IN (%Ls)', 45 $this->participantPHIDs); 46 } 47 48 if ($this->unread !== null) { 49 if ($this->unread) { 50 $where[] = qsprintf( 51 $conn, 52 'participant.seenMessageCount < thread.messageCount'); 53 } else { 54 $where[] = qsprintf( 55 $conn, 56 'participant.seenMessageCount >= thread.messageCount'); 57 } 58 } 59 60 return $this->formatWhereClause($conn, $where); 61 } 62 63 private function buildGroupByClause(AphrontDatabaseConnection $conn) { 64 return qsprintf( 65 $conn, 66 'GROUP BY participantPHID'); 67 } 68 69}