kopia lustrzana https://github.com/nextcloud/social
limit on Accepted followers
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>pull/134/head
rodzic
374f312102
commit
1248d3fc80
|
@ -218,10 +218,10 @@ class CoreRequestBuilder {
|
|||
*
|
||||
* @param IQueryBuilder $qb
|
||||
* @param bool $accepted
|
||||
* @param string $alias
|
||||
*/
|
||||
protected function limitToAccepted(IQueryBuilder &$qb, bool $accepted) {
|
||||
$this->limitToDBField($qb, 'accepted', ($accepted) ? '1' : '0');
|
||||
|
||||
protected function limitToAccepted(IQueryBuilder &$qb, bool $accepted, string $alias = '') {
|
||||
$this->limitToDBField($qb, 'accepted', ($accepted) ? '1' : '0', true, $alias);
|
||||
}
|
||||
|
||||
|
||||
|
@ -458,13 +458,37 @@ class CoreRequestBuilder {
|
|||
* @param IQueryBuilder $qb
|
||||
* @param string $field
|
||||
* @param int $value
|
||||
* @param string $alias
|
||||
*/
|
||||
protected function limitToDBFieldInt(IQueryBuilder &$qb, string $field, int $value) {
|
||||
protected function limitToDBFieldInt(
|
||||
IQueryBuilder &$qb, string $field, int $value, string $alias = ''
|
||||
) {
|
||||
$expr = $this->exprLimitToDBFieldInt($qb, $field, $value, $alias);
|
||||
$qb->andWhere($expr);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param IQueryBuilder $qb
|
||||
* @param string $field
|
||||
* @param int $value
|
||||
* @param string $alias
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function exprLimitToDBFieldInt(
|
||||
IQueryBuilder &$qb, string $field, int $value, string $alias = ''
|
||||
): string {
|
||||
$expr = $qb->expr();
|
||||
$pf = ($qb->getType() === QueryBuilder::SELECT) ? $this->defaultSelectAlias . '.' : '';
|
||||
|
||||
$pf = '';
|
||||
if ($qb->getType() === QueryBuilder::SELECT) {
|
||||
$pf = (($alias === '') ? $this->defaultSelectAlias : $alias) . '.';
|
||||
}
|
||||
$field = $pf . $field;
|
||||
|
||||
$qb->andWhere($expr->eq($field, $qb->createNamedParameter($value)));
|
||||
|
||||
return $expr->eq($field, $qb->createNamedParameter($value));
|
||||
}
|
||||
|
||||
|
||||
|
@ -688,6 +712,7 @@ class CoreRequestBuilder {
|
|||
}
|
||||
|
||||
$andX = $expr->andX();
|
||||
$andX->add($this->exprLimitToDBFieldInt($qb, 'accepted', 1, $prefix . '_f'));
|
||||
if ($asFollower === true) {
|
||||
$andX->add(
|
||||
$expr->eq(
|
||||
|
|
|
@ -152,6 +152,7 @@ class FollowsRequest extends FollowsRequestBuilder {
|
|||
public function getByFollowId(string $followId): array {
|
||||
$qb = $this->getFollowsSelectSql();
|
||||
$this->limitToFollowId($qb, $followId);
|
||||
$this->limitToAccepted($qb, true);
|
||||
$this->leftJoinCacheActors($qb, 'actor_id');
|
||||
|
||||
$follows = [];
|
||||
|
@ -173,6 +174,7 @@ class FollowsRequest extends FollowsRequestBuilder {
|
|||
public function getFollowersByActorId(string $actorId): array {
|
||||
$qb = $this->getFollowsSelectSql();
|
||||
$this->limitToOBjectId($qb, $actorId);
|
||||
$this->limitToAccepted($qb, true);
|
||||
$this->leftJoinCacheActors($qb, 'actor_id');
|
||||
$this->leftJoinDetails($qb, 'id', 'ca');
|
||||
$qb->orderBy('creation', 'desc');
|
||||
|
@ -196,6 +198,7 @@ class FollowsRequest extends FollowsRequestBuilder {
|
|||
public function getFollowingByActorId(string $actorId): array {
|
||||
$qb = $this->getFollowsSelectSql();
|
||||
$this->limitToActorId($qb, $actorId);
|
||||
$this->limitToAccepted($qb, true);
|
||||
$this->leftJoinCacheActors($qb, 'object_id');
|
||||
$this->leftJoinDetails($qb, 'id', 'ca');
|
||||
$qb->orderBy('creation', 'desc');
|
||||
|
|
|
@ -83,7 +83,9 @@ class FollowsRequestBuilder extends CoreRequestBuilder {
|
|||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
|
||||
/** @noinspection PhpMethodParametersCountMismatchInspection */
|
||||
$qb->select('f.id', 'f.type', 'f.actor_id', 'f.object_id', 'f.follow_id', 'f.creation')
|
||||
$qb->select(
|
||||
'f.id', 'f.type', 'f.actor_id', 'f.object_id', 'f.follow_id', 'f.accepted', 'f.creation'
|
||||
)
|
||||
->from(self::TABLE_SERVER_FOLLOWS, 'f');
|
||||
|
||||
$this->defaultSelectAlias = 'f';
|
||||
|
|
|
@ -156,17 +156,22 @@ class NotesRequest extends NotesRequestBuilder {
|
|||
|
||||
|
||||
/**
|
||||
* Should returns:
|
||||
* * Own posts,
|
||||
* * Followed accounts
|
||||
*
|
||||
* @param string $actorId
|
||||
* @param int $since
|
||||
* @param int $limit
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getHomeNotesForActorId(string $actorId, int $since = 0, int $limit = 5): array {
|
||||
public function getStreamHome(string $actorId, int $since = 0, int $limit = 5): array {
|
||||
$qb = $this->getNotesSelectSql();
|
||||
|
||||
$this->rightJoinFollowing($qb);
|
||||
$this->limitToActorId($qb, $actorId, 'f');
|
||||
$this->limitToAccepted($qb, true, 'f');
|
||||
$qb->orWhere($this->exprLimitToDBField($qb, 'attributed_to', $actorId));
|
||||
|
||||
$this->limitPaginate($qb, $since, $limit);
|
||||
|
@ -184,19 +189,20 @@ class NotesRequest extends NotesRequestBuilder {
|
|||
|
||||
|
||||
/**
|
||||
* Should returns:
|
||||
* * Private message.
|
||||
* - group messages.
|
||||
|
||||
* @param string $actorId
|
||||
* @param int $since
|
||||
* @param int $limit
|
||||
* @param bool $localOnly
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getPublicNotes(int $since = 0, int $limit = 5, bool $localOnly = true): array {
|
||||
public function getStreamDirect(string $actorId, int $since = 0, int $limit = 5): array {
|
||||
$qb = $this->getNotesSelectSql();
|
||||
$this->limitToRecipient($qb, ActivityService::TO_PUBLIC);
|
||||
$this->limitToRecipient($qb, $actorId, true);
|
||||
$this->limitPaginate($qb, $since, $limit);
|
||||
if ($localOnly) {
|
||||
$this->limitToLocal($qb, true);
|
||||
}
|
||||
$this->leftJoinCacheActors($qb, 'attributed_to');
|
||||
|
||||
$notes = [];
|
||||
|
@ -211,17 +217,23 @@ class NotesRequest extends NotesRequestBuilder {
|
|||
|
||||
|
||||
/**
|
||||
* @param string $actorId
|
||||
* Should returns:
|
||||
* - All local public/federated posts
|
||||
*
|
||||
* @param int $since
|
||||
* @param int $limit
|
||||
* @param bool $localOnly
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getDirectNotesForActorId(string $actorId, int $since = 0, int $limit = 5
|
||||
public function getStreamTimeline(int $since = 0, int $limit = 5, bool $localOnly = true
|
||||
): array {
|
||||
$qb = $this->getNotesSelectSql();
|
||||
$this->limitToRecipient($qb, $actorId, true);
|
||||
$this->limitToRecipient($qb, ActivityService::TO_PUBLIC);
|
||||
$this->limitPaginate($qb, $since, $limit);
|
||||
if ($localOnly) {
|
||||
$this->limitToLocal($qb, true);
|
||||
}
|
||||
$this->leftJoinCacheActors($qb, 'attributed_to');
|
||||
|
||||
$notes = [];
|
||||
|
|
|
@ -32,6 +32,7 @@ namespace OCA\Social\Model\ActivityPub;
|
|||
|
||||
|
||||
use JsonSerializable;
|
||||
use OCA\Social\Exceptions\InvalidResourceEntryException;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -48,6 +49,9 @@ class Follow extends ACore implements JsonSerializable {
|
|||
/** @var string */
|
||||
private $followId = '';
|
||||
|
||||
/** @var bool */
|
||||
private $accepted = false;
|
||||
|
||||
|
||||
/**
|
||||
* Follow constructor.
|
||||
|
@ -80,8 +84,29 @@ class Follow extends ACore implements JsonSerializable {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isAccepted(): bool {
|
||||
return $this->accepted;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $accepted
|
||||
*
|
||||
* @return Follow
|
||||
*/
|
||||
public function setAccepted(bool $accepted): Follow {
|
||||
$this->accepted = $accepted;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
*
|
||||
* @throws InvalidResourceEntryException
|
||||
*/
|
||||
public function import(array $data) {
|
||||
parent::import($data);
|
||||
|
@ -94,6 +119,7 @@ class Follow extends ACore implements JsonSerializable {
|
|||
public function importFromDatabase(array $data) {
|
||||
parent::importFromDatabase($data);
|
||||
|
||||
$this->setAccepted(($this->getInt('accepted', $data, 0) === 1) ? true : false);
|
||||
$this->setFollowId($this->get('follow_id', $data, ''));
|
||||
}
|
||||
|
||||
|
@ -105,6 +131,8 @@ class Follow extends ACore implements JsonSerializable {
|
|||
return array_merge(
|
||||
parent::jsonSerialize(),
|
||||
[
|
||||
'follow_id' => $this->getFollowId(),
|
||||
'accepted' => $this->isAccepted()
|
||||
]
|
||||
);
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue