diff --git a/lib/Api/v1/Circles.php b/lib/Api/v1/Circles.php index 2bc933e34..cb8ebd468 100644 --- a/lib/Api/v1/Circles.php +++ b/lib/Api/v1/Circles.php @@ -91,7 +91,6 @@ public static function listCircles($type, $name = '', $level = 0, $userId = '', $personalCircle = true; } - if ($userId === '') { $federatedUserService->initCurrentUser(); } else { @@ -103,6 +102,7 @@ public static function listCircles($type, $name = '', $level = 0, $userId = '', $probe = new CircleProbe(); $probe->includePersonalCircles($personalCircle); + $probe->filterHiddenCircles(); return $circleService->getCircles($probe); } @@ -147,6 +147,7 @@ public static function joinedCircles($userId = '', $forceAll = false) { $probe = new CircleProbe(); $probe->mustBeMember(); $probe->includePersonalCircles($personalCircle); + $probe->filterHiddenCircles(); return $circleService->getCircles($probe); } diff --git a/lib/Collaboration/v2/CollaboratorSearchPlugin.php b/lib/Collaboration/v2/CollaboratorSearchPlugin.php index 1666993b6..7ed364cfe 100644 --- a/lib/Collaboration/v2/CollaboratorSearchPlugin.php +++ b/lib/Collaboration/v2/CollaboratorSearchPlugin.php @@ -87,10 +87,12 @@ public function search($search, $limit, $offset, ISearchResult $searchResult): b $this->federatedUserService->initCurrentUser(); $probe = new CircleProbe(); - $probe->setItemsLimit($limit); - $probe->setItemsOffset($offset); - $probe->setFilterCircle($filterCircle); - + $probe->filterHiddenCircles() + ->filterBackendCircles() + ->setItemsLimit($limit) + ->setItemsOffset($offset) + ->setFilterCircle($filterCircle); + // Issue when searching for circle to be added as member $probe->mustBeMember(); diff --git a/lib/Command/CirclesList.php b/lib/Command/CirclesList.php index e7dccc3ae..6dcc36fe3 100644 --- a/lib/Command/CirclesList.php +++ b/lib/Command/CirclesList.php @@ -131,7 +131,8 @@ protected function configure() { ->addOption('system', '', InputOption::VALUE_NONE, 'include System Circles') ->addOption('hidden', '', InputOption::VALUE_NONE, 'include Hidden Circles') ->addOption('backend', '', InputOption::VALUE_NONE, 'include Backend Circles') - ->addOption('single', '', InputOption::VALUE_NONE, 'returns only Single Circles'); + ->addOption('single', '', InputOption::VALUE_NONE, 'returns only Single Circles') + ->addOption('all', '', InputOption::VALUE_NONE, 'include all Circles'); } @@ -188,9 +189,11 @@ protected function execute(InputInterface $input, OutputInterface $output): int ); $probe = new CircleProbe(); + $probe->filterHiddenCircles() + ->filterBackendCircles(); if ($input->getOption('system')) { - $probe->includeSystemCircles(true); + $probe->includeSystemCircles(); $probe->filterHiddenCircles(false); } @@ -205,6 +208,14 @@ protected function execute(InputInterface $input, OutputInterface $output): int ->includeSingleCircles(); } + if ($input->getOption('all')) { + $probe->includeSystemCircles(); + $probe->includeHiddenCircles(); + $probe->includeBackendCircles(); + $probe->includePersonalCircles(); + $probe->includeSingleCircles(); + } + $circles = $this->circleService->getCircles($probe); } diff --git a/lib/Command/CirclesMemberships.php b/lib/Command/CirclesMemberships.php index 260b95b63..e601cae5e 100644 --- a/lib/Command/CirclesMemberships.php +++ b/lib/Command/CirclesMemberships.php @@ -369,6 +369,7 @@ private function manageAllMemberships() { $probe = new CircleProbe(); $probe->includeSystemCircles() + ->includeSingleCircles() ->includePersonalCircles(); $circles = $this->circleService->getCircles($probe); diff --git a/lib/Command/CirclesTest.php b/lib/Command/CirclesTest.php index f350a468a..03624a8b0 100644 --- a/lib/Command/CirclesTest.php +++ b/lib/Command/CirclesTest.php @@ -39,15 +39,19 @@ use Exception; use OC\Core\Command\Base; use OCA\Circles\AppInfo\Application; +use OCA\Circles\CirclesManager; use OCA\Circles\Db\CoreRequestBuilder; use OCA\Circles\Exceptions\CircleNotFoundException; use OCA\Circles\Model\Circle; use OCA\Circles\Model\FederatedUser; use OCA\Circles\Model\Member; +use OCA\Circles\Model\Probes\CircleProbe; use OCA\Circles\Service\ConfigService; +use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Process\Process; @@ -149,6 +153,176 @@ protected function execute(InputInterface $input, OutputInterface $output): int $this->input = $input; $this->output = $output; + + // loading CirclesManager + /** @var CirclesManager $circlesManager */ + $circlesManager = \OC::$server->get(CirclesManager::class); +// $circlesManager->startSuperSession(); + + + $federatedUser = $circlesManager->getFederatedUser('test1', Member::TYPE_USER); + $circlesManager->startSession($federatedUser); + + $probe = new CircleProbe(); + $probe->mustBeMember(); + + //$probe->includePersonalCircles(); + + // get hidden circles (to get Groups) +// $probe->includeHiddenCircles(); + +// $probe->includePersonalCircles(); +// $probe->addOptionBool('filterPersonalCircles', true); +// $probe->mustBeMember(); + + $circles = $circlesManager->getCircles($probe); + + + // display result + $output = new ConsoleOutput(); + $table = new Table($output->section()); + $table->setHeaders(['SingleId', 'Circle Name', 'Type']); + $table->render(); + + foreach ($circles as $entry) { + $table->appendRow( + [ + $entry->getSingleId(), + $entry->getDisplayName(), + Circle::$DEF_SOURCE[$entry->getSource()] + ] + ); + } + + + return 0; + $federatedUser = $circlesManager->getFederatedUser('test1', Member::TYPE_USER); + $circlesManager->startSession($federatedUser); + $circle = $circlesManager->getCircle($circleId); + $member = $circle->getInitiator(); + + // get the singleId of a Group + $federatedUser = $circlesManager->getFederatedUser('testGroup', Member::TYPE_GROUP); + echo 'singleId: ' . $federatedUser->getSingleId() . "\n"; + +// $federatedUser->getMemberships(); + + + // get Circles available to test1 + $federatedUser = $circlesManager->getFederatedUser('test1', Member::TYPE_USER); + $circlesManager->startSession($federatedUser); + $circles = $circlesManager->getCircles( + null, + null, + [ + 'mustBeMember' => true, + 'include' => Circle::CFG_SYSTEM | Circle::CFG_HIDDEN + ] + ); + + + $output = new ConsoleOutput(); + $table = new Table($output->section()); + $table->setHeaders(['SingleId', 'Circle Name', 'Type']); + $table->render(); + + foreach ($circles as $entry) { + $table->appendRow( + [ + $entry->getSingleId(), + $entry->getDisplayName(), + Circle::$DEF_SOURCE[$entry->getSource()] + ] + ); + } + + + // exit + return 0; + + + $members = array_map( + function (Member $member): string { + return $member->getUserId() . ' ' . $member->getSingleId() . ' - ' . $member->getUserType(); + }, $circle->getInheritedMembers() + ); + + echo json_encode($members, JSON_PRETTY_PRINT); +// $circlesManager->startSession($federatedUser); + +// $circlesManager->destroyCircle('XXHHLGdwQTxENgU'); +// $circles = array_map(function(Circle $circle): string { +// return $circle->getDisplayName(); +// }, $circlesManager->getCircles()); + return 0; + + $circlesManager->stopSession(); + + + //echo json_encode($circles, JSON_PRETTY_PRINT); + + +// $circle = $circlesManager->createCircle('This is a test2'); +// +// +// $federatedUser2 = $circlesManager->getFederatedUser('test3', Member::TYPE_USER); +// $circlesManager->startSession($federatedUser); +// + //// $info = $circlesManager->getCircle($circle->getSingleId()); + ////echo json_encode($info); +// +// $circles = $circlesManager->getCircles(); +// foreach ($circles as $circle) { +// echo $circle->getDisplayName() . "\n"; + //// $circlesManager->startSession($federatedUser2); + //// $circlesManager->destroyCircle($circle->getSingleId()); +// } +// +// +// // testing getCircle() +// +// +// return 0; + + + // testing queryHelper; + + $circlesQueryHelper = $circlesManager->getQueryHelper(); + + $qb = $circlesQueryHelper->getQueryBuilder(); + $qb->select( + 'test.id', + 'test.shared_to', + 'test.data' + ) + ->from('circles_test', 'test'); + + + /** @var FederatedUser $federatedUser */ + $federatedUser = $circlesManager->getFederatedUser('test1', Member::TYPE_USER); + +// $circlesQueryHelper->limitToInheritedMembers('test', 'shared_to', $federatedUser, true); +// $circlesQueryHelper->addCircleDetails('test', 'shared_to'); +// +// $items = []; +// $cursor = $qb->execute(); +// while ($row = $cursor->fetch()) { +// try { +// $items[] = [ +// 'id' => $row['id'], +// 'data' => $row['data'], +// 'circle' => $circlesQueryHelper->extractCircle($row) +// ]; +// } catch (Exception $e) { +// } +// } +// $cursor->closeCursor(); +// +// echo json_encode($items, JSON_PRETTY_PRINT); +// +// return 0; + + if ($input->getOption('are-you-aware-this-will-delete-all-my-data') === 'yes-i-am') { try { $this->testCirclesApp(); diff --git a/lib/Controller/AdminController.php b/lib/Controller/AdminController.php index 30aa1208f..3c13d15a2 100644 --- a/lib/Controller/AdminController.php +++ b/lib/Controller/AdminController.php @@ -44,6 +44,7 @@ use OCA\Circles\Exceptions\SingleCircleNotFoundException; use OCA\Circles\Model\FederatedUser; use OCA\Circles\Model\Member; +use OCA\Circles\Model\Probes\CircleProbe; use OCA\Circles\Service\CircleService; use OCA\Circles\Service\ConfigService; use OCA\Circles\Service\FederatedUserService; @@ -267,7 +268,11 @@ public function circles(string $emulated): DataResponse { try { $this->setLocalFederatedUser($emulated); - return new DataResponse($this->serializeArray($this->circleService->getCircles())); + $probe = new CircleProbe(); + $probe->filterHiddenCircles() + ->filterBackendCircles(); + + return new DataResponse($this->serializeArray($this->circleService->getCircles($probe))); } catch (Exception $e) { $this->e($e, ['emulated' => $emulated]); throw new OCSException($e->getMessage(), $e->getCode()); diff --git a/lib/Controller/LocalController.php b/lib/Controller/LocalController.php index ff4873aaf..9ca0866f7 100644 --- a/lib/Controller/LocalController.php +++ b/lib/Controller/LocalController.php @@ -42,6 +42,7 @@ use OCA\Circles\Exceptions\SingleCircleNotFoundException; use OCA\Circles\Model\FederatedUser; use OCA\Circles\Model\Member; +use OCA\Circles\Model\Probes\CircleProbe; use OCA\Circles\Service\CircleService; use OCA\Circles\Service\ConfigService; use OCA\Circles\Service\FederatedUserService; @@ -413,7 +414,11 @@ public function circles(): DataResponse { try { $this->setCurrentFederatedUser(); - return new DataResponse($this->serializeArray($this->circleService->getCircles())); + $probe = new CircleProbe(); + $probe->filterHiddenCircles() + ->filterBackendCircles(); + + return new DataResponse($this->serializeArray($this->circleService->getCircles($probe))); } catch (Exception $e) { $this->e($e); throw new OCSException($e->getMessage(), $e->getCode()); diff --git a/lib/Db/CircleRequest.php b/lib/Db/CircleRequest.php index deca81457..70ad32ef6 100644 --- a/lib/Db/CircleRequest.php +++ b/lib/Db/CircleRequest.php @@ -227,8 +227,6 @@ public function getCircle( if (is_null($probe)) { $probe = new CircleProbe(); $probe->includeSystemCircles() - ->includeBackendCircles() - ->includeHiddenCircles() ->emulateVisitor(); } diff --git a/lib/Model/Probes/CircleProbe.php b/lib/Model/Probes/CircleProbe.php index 62aab59af..8067d556c 100644 --- a/lib/Model/Probes/CircleProbe.php +++ b/lib/Model/Probes/CircleProbe.php @@ -45,18 +45,13 @@ class CircleProbe extends MemberProbe { private $include = 0; /** @var int */ - private $filter = 0; + private $filter = Circle::CFG_SINGLE; /** * CircleProbe constructor. - * - * @param bool $defaultFilters */ - public function __construct(bool $defaultFilters = true) { - if ($defaultFilters) { - $this->filter = Circle::CFG_SINGLE | Circle::CFG_HIDDEN; - } + public function __construct() { } diff --git a/lib/Service/CircleService.php b/lib/Service/CircleService.php index a91193c62..d4ec6a3b9 100644 --- a/lib/Service/CircleService.php +++ b/lib/Service/CircleService.php @@ -447,13 +447,9 @@ public function getCircle( * @throws InitiatorNotFoundException * @throws RequestBuilderException */ - public function getCircles(?CircleProbe $probe = null): array { + public function getCircles(CircleProbe $probe): array { $this->federatedUserService->mustHaveCurrentUser(); - if (is_null($probe)) { - $probe = new CircleProbe(); - } - return $this->circleRequest->getCircles( $this->federatedUserService->getCurrentUser(), $probe diff --git a/lib/Service/FederatedUserService.php b/lib/Service/FederatedUserService.php index 38381c027..da78eb3d8 100644 --- a/lib/Service/FederatedUserService.php +++ b/lib/Service/FederatedUserService.php @@ -547,7 +547,7 @@ public function commandLineInitiator( if ($circleId !== '') { $probe = new CircleProbe(); $probe->includeSystemCircles() - ->canBeRequestingMembership(); + ->includePersonalCircles(); $localCircle = $this->circleRequest->getCircle($circleId, null, $probe); if ($this->configService->isLocalInstance($localCircle->getInstance())) { $this->setCurrentUser($localCircle->getOwner()); @@ -958,8 +958,7 @@ private function getSingleCircle(FederatedUser $federatedUser, bool $generate = } $this->memberRequest->save($owner); - // TODO: should not be needed - // $this->membershipService->onUpdate($id); + $this->membershipService->onUpdate($id); } return $this->circleRequest->getSingleCircle($federatedUser); diff --git a/lib/Service/MaintenanceService.php b/lib/Service/MaintenanceService.php index a927a4d29..57ba6b37d 100644 --- a/lib/Service/MaintenanceService.php +++ b/lib/Service/MaintenanceService.php @@ -304,6 +304,7 @@ private function removeMembersWithNoCircles(): void { private function removeDeprecatedShares(): void { $probe = new CircleProbe(); $probe->includePersonalCircles() + ->includeSingleCircles() ->includeSystemCircles(); $circles = array_map( @@ -337,10 +338,9 @@ private function refreshDisplayName(): void { $circleFilter->setConfig(Circle::CFG_SINGLE); $probe = new CircleProbe(); - $probe->includeSystemCircles() + $probe->includeSingleCircles() ->setFilterCircle($circleFilter) - ->mustBeMember() - ->canBeRequestingMembership(); + ->mustBeOwner(); $circles = $this->circleService->getCircles($probe); diff --git a/lib/Service/MemberService.php b/lib/Service/MemberService.php index ae3818e44..38b81e016 100644 --- a/lib/Service/MemberService.php +++ b/lib/Service/MemberService.php @@ -63,7 +63,6 @@ use OCA\Circles\Model\Federated\FederatedEvent; use OCA\Circles\Model\FederatedUser; use OCA\Circles\Model\Member; -use OCA\Circles\Model\Probes\CircleProbe; use OCA\Circles\Model\Probes\MemberProbe; /** @@ -175,7 +174,7 @@ public function getMemberById( public function getMembers(string $circleId): array { $this->federatedUserService->mustHaveCurrentUser(); - $probe = new CircleProbe(); + $probe = new MemberProbe(); if ($this->federatedUserService->hasRemoteInstance()) { $probe->setFilterRemoteInstance($this->federatedUserService->getRemoteInstance()); } diff --git a/lib/ShareByCircleProvider.php b/lib/ShareByCircleProvider.php index 0a993a4e8..bb0978037 100644 --- a/lib/ShareByCircleProvider.php +++ b/lib/ShareByCircleProvider.php @@ -548,6 +548,7 @@ public function getSharedWith($userId, $shareType, $node, $limit, $offset): arra $federatedUser = $this->federatedUserService->getLocalFederatedUser($userId); $probe = new CircleProbe(); $probe->includePersonalCircles() + ->includeSystemCircles() ->mustBeMember() ->setItemsLimit((int)$limit) ->setItemsOffset((int)$offset);