only returns population on direct request from the front-end or occ command

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
This commit is contained in:
Maxence Lange 2021-12-12 11:24:36 -01:00
parent 0f103befa5
commit 520031be28
9 changed files with 40 additions and 23 deletions

View file

@ -54,6 +54,7 @@ use OCA\Circles\Exceptions\UserTypeNotFoundException;
use OCA\Circles\Model\Circle;
use OCA\Circles\Model\Member;
use OCA\Circles\Model\ModelManager;
use OCA\Circles\Model\Probes\BasicProbe;
use OCA\Circles\Model\Probes\CircleProbe;
use OCA\Circles\Service\CircleService;
use OCA\Circles\Service\ConfigService;
@ -190,7 +191,8 @@ class CirclesList extends Base {
$probe = new CircleProbe();
$probe->filterHiddenCircles()
->filterBackendCircles();
->filterBackendCircles()
->addDetail(BasicProbe::DETAILS_POPULATION);
if ($input->getOption('system')) {
$probe->includeSystemCircles();

View file

@ -44,6 +44,7 @@ use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Exceptions\SingleCircleNotFoundException;
use OCA\Circles\Model\FederatedUser;
use OCA\Circles\Model\Member;
use OCA\Circles\Model\Probes\BasicProbe;
use OCA\Circles\Model\Probes\CircleProbe;
use OCA\Circles\Service\CircleService;
use OCA\Circles\Service\ConfigService;
@ -270,7 +271,8 @@ class AdminController extends OcsController {
$probe = new CircleProbe();
$probe->filterHiddenCircles()
->filterBackendCircles();
->filterBackendCircles()
->addDetail(BasicProbe::DETAILS_POPULATION);
return new DataResponse($this->serializeArray($this->circleService->getCircles($probe)));
} catch (Exception $e) {

View file

@ -42,6 +42,7 @@ use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Exceptions\SingleCircleNotFoundException;
use OCA\Circles\Model\FederatedUser;
use OCA\Circles\Model\Member;
use OCA\Circles\Model\Probes\BasicProbe;
use OCA\Circles\Model\Probes\CircleProbe;
use OCA\Circles\Service\CircleService;
use OCA\Circles\Service\ConfigService;
@ -419,7 +420,8 @@ class LocalController extends OcsController {
$probe = new CircleProbe();
$probe->filterHiddenCircles()
->filterBackendCircles();
->filterBackendCircles()
->addDetail(BasicProbe::DETAILS_POPULATION);
return new DataResponse($this->serializeArray($this->circleService->getCircles($probe)));
} catch (Exception $e) {

View file

@ -56,6 +56,7 @@ use OCA\Circles\Model\Federated\FederatedEvent;
use OCA\Circles\Model\Federated\RemoteInstance;
use OCA\Circles\Model\FederatedUser;
use OCA\Circles\Model\Member;
use OCA\Circles\Model\Probes\BasicProbe;
use OCA\Circles\Model\Probes\CircleProbe;
use OCA\Circles\Service\CircleService;
use OCA\Circles\Service\ConfigService;
@ -267,7 +268,8 @@ class RemoteController extends Controller {
$probe = new CircleProbe();
$probe->setFilterCircle($filterCircle)
->setFilterMember($filterMember);
->setFilterMember($filterMember)
->addDetail(BasicProbe::DETAILS_POPULATION);
$circles = $this->circleService->getCircles($probe);

View file

@ -41,6 +41,7 @@ use OCA\Circles\IFederatedUser;
use OCA\Circles\Model\Circle;
use OCA\Circles\Model\FederatedUser;
use OCA\Circles\Model\Member;
use OCA\Circles\Model\Probes\BasicProbe;
use OCA\Circles\Model\Probes\CircleProbe;
/**
@ -184,7 +185,10 @@ class CircleRequest extends CircleRequestBuilder {
$qb->limitToRemoteInstance(CoreQueryBuilder::CIRCLE, $probe->getFilterRemoteInstance(), false);
}
$qb->countMembers(CoreQueryBuilder::CIRCLE);
if ($probe->showDetail(BasicProbe::DETAILS_POPULATION)) {
$qb->countMembers(CoreQueryBuilder::CIRCLE);
}
$qb->chunk($probe->getItemsOffset(), $probe->getItemsLimit());
return $this->getItemsFromRequest($qb);
@ -258,7 +262,10 @@ class CircleRequest extends CircleRequestBuilder {
if ($probe->hasFilterRemoteInstance()) {
$qb->limitToRemoteInstance(CoreQueryBuilder::CIRCLE, $probe->getFilterRemoteInstance(), false);
}
$qb->countMembers(CoreQueryBuilder::CIRCLE);
if ($probe->showDetail(BasicProbe::DETAILS_POPULATION)) {
$qb->countMembers(CoreQueryBuilder::CIRCLE);
}
return $this->getItemFromRequest($qb);
}
@ -356,7 +363,8 @@ class CircleRequest extends CircleRequestBuilder {
if (!is_null($initiator)) {
$qb->setOptions(
[CoreQueryBuilder::CIRCLE], [
[CoreQueryBuilder::CIRCLE],
[
'getData' => true,
'initiatorDirectMember' => true
]

View file

@ -709,11 +709,6 @@ class CoreQueryBuilder extends NC22ExtendedQueryBuilder {
return;
}
$getData = $this->getBool('getData', $options, false);
if (!$getData) {
return;
}
$expr = $this->expr();
$this->selectAlias(
$this->createFunction('COUNT(`' . $aliasMemberCount . '`.`member_id`)'),

View file

@ -59,11 +59,11 @@ interface IQueryProbe {
public function getDetails(): int;
/**
* @param int $details
* @param int $detail
*
* @return bool
*/
public function showDetails(int $details): bool;
public function showDetail(int $detail): bool;
/**
* @return Circle

View file

@ -43,7 +43,8 @@ use OCA\Circles\Model\Member;
*/
class BasicProbe implements IQueryProbe {
public const DETAILS_NONE = 0;
public const DETAILS_ALL = 64;
public const DETAILS_POPULATION = 32;
public const DETAILS_ALL = 127;
/** @var int */
@ -122,14 +123,24 @@ class BasicProbe implements IQueryProbe {
return $this->details;
}
/**
* @param int $detail
*
* @return $this
*/
public function addDetail(int $detail): self {
$this->details |= $detail;
return $this;
}
/**
* @param int $details
* @param int $detail
*
* @return bool
*/
public function showDetails(int $details): bool {
return (($this->getDetails() & $details) !== 0);
public function showDetail(int $detail): bool {
return (($this->getDetails() & $detail) !== 0);
}

View file

@ -450,11 +450,6 @@ class MigrationService {
$member->setSingleId($singleMember->getSingleId());
// "cached_update":"2021-05-02 12:13:22",
// "joined":"2021-05-02 12:13:22",
// "contact_checked":null,"
// "circle_source":null}
return $member;
}