Skip to content

Commit 7926436

Browse files
committed
cleaning shares
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
1 parent e3741d2 commit 7926436

File tree

5 files changed

+270
-61
lines changed

5 files changed

+270
-61
lines changed

lib/Command/Clean.php

+9-58
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,9 @@
2626

2727
namespace OCA\Circles\Command;
2828

29-
use Doctrine\DBAL\Driver\Statement;
3029
use OC\Core\Command\Base;
3130
use OCA\Circles\Db\CirclesRequest;
32-
use OCA\Circles\Db\CoreRequestBuilder;
33-
use OCA\Circles\Db\MembersRequest;
34-
use OCA\Circles\Exceptions\CircleDoesNotExistException;
31+
use OCA\Circles\Service\CleanService;
3532
use OCP\IDBConnection;
3633
use Symfony\Component\Console\Input\InputInterface;
3734
use Symfony\Component\Console\Input\InputOption;
@@ -40,31 +37,31 @@
4037

4138
class Clean extends Base {
4239

40+
4341
/** @var IDBConnection */
4442
private $dbConnection;
4543

4644
/** @var CirclesRequest */
4745
private $circlesRequest;
4846

49-
/** @var MembersRequest */
50-
private $membersRequest;
47+
/** @var CleanService */
48+
private $cleanService;
5149

5250

5351
/**
5452
* Clean constructor.
5553
*
5654
* @param IDBConnection $connection
5755
* @param CirclesRequest $circlesRequest
58-
* @param MembersRequest $membersRequest
56+
* @param CleanService $cleanService
5957
*/
6058
public function __construct(
61-
IDBConnection $connection, CirclesRequest $circlesRequest, MembersRequest $membersRequest
59+
IDBConnection $connection, CirclesRequest $circlesRequest, CleanService $cleanService
6260
) {
6361
parent::__construct();
6462
$this->dbConnection = $connection;
6563
$this->circlesRequest = $circlesRequest;
66-
$this->membersRequest = $membersRequest;
67-
64+
$this->cleanService = $cleanService;
6865
}
6966

7067

@@ -85,63 +82,17 @@ protected function configure() {
8582
protected function execute(InputInterface $input, OutputInterface $output): int {
8683
if ($input->getOption('all')) {
8784
$this->circlesRequest->cleanDatabase();
85+
$this->cleanService->removeDeprecatedShares();
8886

8987
return 0;
9088
}
9189

92-
$this->fixUserType();
93-
$this->removeCirclesWithNoOwner();
94-
$this->removeMembersWithNoCircles();
95-
90+
$this->cleanService->clean();
9691
$output->writeln('done');
9792

9893
return 0;
9994
}
10095

101-
102-
/**
103-
* @return Statement|int
104-
*/
105-
private function fixUserType() {
106-
$qb = $this->dbConnection->getQueryBuilder();
107-
$qb->update(CoreRequestBuilder::TABLE_MEMBERS)
108-
->set('user_type', $qb->createNamedParameter(1))
109-
->where(
110-
$qb->expr()
111-
->eq('user_type', $qb->createNamedParameter(0))
112-
);
113-
114-
return $qb->execute();
115-
}
116-
117-
118-
private function removeCirclesWithNoOwner() {
119-
120-
$circles = $this->circlesRequest->forceGetCircles();
121-
122-
foreach ($circles as $circle) {
123-
if ($circle->getOwner()
124-
->getUserId() === null) {
125-
$this->circlesRequest->destroyCircle($circle->getUniqueId());
126-
}
127-
}
128-
}
129-
130-
131-
private function removeMembersWithNoCircles() {
132-
133-
$members = $this->membersRequest->forceGetAllMembers();
134-
135-
foreach ($members as $member) {
136-
try {
137-
$this->circlesRequest->forceGetCircle($member->getCircleId());
138-
139-
} catch (CircleDoesNotExistException $e) {
140-
$this->membersRequest->removeMember($member);
141-
}
142-
}
143-
144-
}
14596
}
14697

14798

lib/Cron/Maintenance.php

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php declare(strict_types=1);
2+
3+
4+
/**
5+
* Circles - Bring cloud-users closer together.
6+
*
7+
* This file is licensed under the Affero General Public License version 3 or
8+
* later. See the COPYING file.
9+
*
10+
* @author Maxence Lange <maxence@artificial-owl.com>
11+
* @copyright 2017
12+
* @license GNU AGPL version 3 or any later version
13+
*
14+
* This program is free software: you can redistribute it and/or modify
15+
* it under the terms of the GNU Affero General Public License as
16+
* published by the Free Software Foundation, either version 3 of the
17+
* License, or (at your option) any later version.
18+
*
19+
* This program is distributed in the hope that it will be useful,
20+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
21+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22+
* GNU Affero General Public License for more details.
23+
*
24+
* You should have received a copy of the GNU Affero General Public License
25+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
26+
*
27+
*/
28+
29+
30+
namespace OCA\Circles\Cron;
31+
32+
33+
use OC\BackgroundJob\TimedJob;
34+
use OCA\Circles\AppInfo\Application;
35+
use OCA\Circles\Exceptions\GSStatusException;
36+
use OCA\Circles\Service\CirclesService;
37+
use OCA\Circles\Service\CleanService;
38+
use OCA\Circles\Service\GSUpstreamService;
39+
use OCA\Circles\Service\MembersService;
40+
use OCP\AppFramework\QueryException;
41+
42+
43+
/**
44+
* Class Maintenance
45+
*
46+
* @package OCA\Cicles\Cron
47+
*/
48+
class Maintenance extends TimedJob {
49+
50+
51+
/**
52+
* Cache constructor.
53+
*/
54+
public function __construct() {
55+
$this->setInterval(10);
56+
}
57+
58+
59+
/**
60+
* @param $argument
61+
*
62+
* @throws QueryException
63+
*/
64+
protected function run($argument) {
65+
$app = \OC::$server->query(Application::class);
66+
$c = $app->getContainer();
67+
68+
/** @var CleanService $cleanService */
69+
$cleanService = \OC::$server->query(CleanService::class);
70+
$cleanService->clean();
71+
}
72+
73+
}
74+

lib/Db/SharesRequest.php

+35
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,22 @@ public function removeSharesFromMember(Member $member) {
5858
}
5959

6060

61+
/**
62+
* @param string $circleId
63+
*/
64+
public function removeSharesToCircleId(string $circleId) {
65+
$qb = $this->getSharesDeleteSql();
66+
$expr = $qb->expr();
67+
68+
$andX = $expr->andX();
69+
$andX->add($expr->eq('share_type', $qb->createNamedParameter(self::SHARE_TYPE)));
70+
$andX->add($expr->eq('share_with', $qb->createNamedParameter($circleId)));
71+
$qb->andWhere($andX);
72+
73+
$qb->execute();
74+
}
75+
76+
6177
/**
6278
* @param string $circleId
6379
*
@@ -79,5 +95,24 @@ public function getSharesForCircle(string $circleId) {
7995
return $shares;
8096
}
8197

98+
99+
/**
100+
* @return array
101+
*/
102+
public function getShares(): array {
103+
$qb = $this->getSharesSelectSql();
104+
105+
$this->limitToShareType($qb, self::SHARE_TYPE);
106+
107+
$shares = [];
108+
$cursor = $qb->execute();
109+
while ($data = $cursor->fetch()) {
110+
$shares[] = $data;
111+
}
112+
$cursor->closeCursor();
113+
114+
return $shares;
115+
}
116+
82117
}
83118

lib/GlobalScale/CircleDestroy.php

+1-3
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@
3030
namespace OCA\Circles\GlobalScale;
3131

3232

33-
use OCA\Circles\Exceptions\CircleAlreadyExistsException;
34-
use OCA\Circles\Exceptions\MemberAlreadyExistsException;
3533
use OCA\Circles\Model\GlobalScale\GSEvent;
36-
use OCA\Circles\Model\Member;
3734

3835

3936
/**
@@ -67,6 +64,7 @@ public function manage(GSEvent $event): void {
6764
$circle = $event->getCircle();
6865
$this->eventsService->onCircleDestruction($circle);
6966

67+
$this->sharesRequest->removeSharesToCircleId($circle->getUniqueId());
7068
$this->membersRequest->removeAllFromCircle($circle->getUniqueId());
7169
$this->circlesRequest->destroyCircle($circle->getUniqueId());
7270
}

0 commit comments

Comments
 (0)