Skip to content

Commit a427189

Browse files
mejo-azul
authored andcommitted
Register the landing page of new collectives in our database (Fixes: #197)
1 parent 2f9497c commit a427189

File tree

4 files changed

+53
-4
lines changed

4 files changed

+53
-4
lines changed

lib/Mount/CollectiveFolderManager.php

+5-2
Original file line numberDiff line numberDiff line change
@@ -212,13 +212,14 @@ public function getFolder(int $id): Folder {
212212
}
213213

214214
/**
215-
* @param int $id
215+
* @param int $id
216216
* @param string $lang
217217
*
218+
* @return Folder
218219
* @throws InvalidPathException
219220
* @throws NotPermittedException
220221
*/
221-
public function createFolder(int $id, string $lang): void {
222+
public function createFolder(int $id, string $lang): Folder {
222223
try {
223224
$folder = $this->getFolder($id);
224225
} catch (NotFoundException $e) {
@@ -234,5 +235,7 @@ public function createFolder(int $id, string $lang): void {
234235
$folder->newFile($landingPageFileName, $content);
235236
}
236237
}
238+
239+
return $folder;
237240
}
238241
}

lib/Service/CollectiveService.php

+27-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22

33
namespace OCA\Collectives\Service;
44

5+
use OC\Files\Node\File;
56
use OCA\Collectives\Db\Collective;
67
use OCA\Collectives\Db\CollectiveMapper;
8+
use OCA\Collectives\Db\Page;
9+
use OCA\Collectives\Db\PageMapper;
710
use OCA\Collectives\Model\CollectiveInfo;
11+
use OCA\Collectives\Model\PageFile;
812
use OCA\Collectives\Mount\CollectiveFolderManager;
913
use OCP\Files\InvalidPathException;
14+
use OCP\Files\NotFoundException as FilesNotFoundException;
1015
use OCP\Files\NotPermittedException as FilesNotPermittedException;
1116
use OCP\IL10N;
1217

@@ -23,6 +28,9 @@ class CollectiveService {
2328
/** @var CircleHelper */
2429
private $circleHelper;
2530

31+
/** @var PageMapper */
32+
private $pageMapper;
33+
2634
/** @var IL10N */
2735
private $l10n;
2836

@@ -33,18 +41,21 @@ class CollectiveService {
3341
* @param CollectiveHelper $collectiveHelper
3442
* @param CollectiveFolderManager $collectiveFolderManager
3543
* @param CircleHelper $circleHelper
44+
* @param PageMapper $pageMapper
3645
* @param IL10N $l10n
3746
*/
3847
public function __construct(
3948
CollectiveMapper $collectiveMapper,
4049
CollectiveHelper $collectiveHelper,
4150
CollectiveFolderManager $collectiveFolderManager,
4251
CircleHelper $circleHelper,
52+
PageMapper $pageMapper,
4353
IL10N $l10n) {
4454
$this->collectiveMapper = $collectiveMapper;
4555
$this->collectiveHelper = $collectiveHelper;
4656
$this->collectiveFolderManager = $collectiveFolderManager;
4757
$this->circleHelper = $circleHelper;
58+
$this->pageMapper = $pageMapper;
4859
$this->l10n = $l10n;
4960
}
5061

@@ -121,11 +132,26 @@ public function createCollective(string $userId, string $userLang, string $safeN
121132

122133
// Create folder for collective and optionally copy default landing page
123134
try {
124-
$this->collectiveFolderManager->createFolder($collective->getId(), $userLang);
135+
$collectiveFolder = $this->collectiveFolderManager->createFolder($collective->getId(), $userLang);
125136
} catch (InvalidPathException | FilesNotPermittedException $e) {
126137
throw new NotPermittedException($e->getMessage());
127138
}
128139

140+
// Register landing page
141+
try {
142+
$file = $collectiveFolder->get(PageFile::INDEX_PAGE_TITLE . PageFile::SUFFIX);
143+
if (!$file instanceof File) {
144+
throw new NotFoundException('Unable to get landing page for collective');
145+
}
146+
147+
$page = new Page();
148+
$page->setFileId($file->getId());
149+
$page->setLastUserId($userId);
150+
$this->pageMapper->updateOrInsert($page);
151+
} catch (FilesNotFoundException | InvalidPathException $e) {
152+
throw new NotFoundException($e->getMessage());
153+
}
154+
129155
return [$collectiveInfo, $message];
130156
}
131157

tests/Unit/Service/CollectiveServiceTest.php

+19
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
namespace Unit\Service;
44

5+
use OC\Files\Node\File;
6+
use OC\Files\Node\Folder;
57
use OCA\Circles\Model\Circle;
68
use OCA\Collectives\Db\Collective;
79
use OCA\Collectives\Db\CollectiveMapper;
10+
use OCA\Collectives\Db\PageMapper;
811
use OCA\Collectives\Mount\CollectiveFolderManager;
912
use OCA\Collectives\Service\CircleExistsException;
1013
use OCA\Collectives\Service\CircleHelper;
@@ -34,10 +37,25 @@ protected function setUp(): void {
3437
->disableOriginalConstructor()
3538
->getMock();
3639

40+
$folder = $this->getMockBuilder(Folder::class)
41+
->disableOriginalConstructor()
42+
->getMock();
43+
$file = $this->getMockBuilder(File::class)
44+
->disableOriginalConstructor()
45+
->getMock();
46+
$folder->method('get')
47+
->willReturn($file);
48+
$collectiveFolderManager->method('createFolder')
49+
->willReturn($folder);
50+
3751
$this->circleHelper = $this->getMockBuilder(CircleHelper::class)
3852
->disableOriginalConstructor()
3953
->getMock();
4054

55+
$pageMapper = $this->getMockBuilder(PageMapper::class)
56+
->disableOriginalConstructor()
57+
->getMock();
58+
4159
$this->l10n = $this->getMockBuilder(IL10N::class)
4260
->disableOriginalConstructor()
4361
->getMock();
@@ -47,6 +65,7 @@ protected function setUp(): void {
4765
$collectiveHelper,
4866
$collectiveFolderManager,
4967
$this->circleHelper,
68+
$pageMapper,
5069
$this->l10n
5170
);
5271
}

tests/psalm-baseline.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,11 @@
128128
</UndefinedDocblockClass>
129129
</file>
130130
<file src="lib/Service/CollectiveService.php">
131-
<UndefinedClass occurrences="3">
131+
<UndefinedClass occurrences="4">
132132
<code>$circle</code>
133133
<code>$circle</code>
134134
<code>$circle</code>
135+
<code>File</code>
135136
</UndefinedClass>
136137
</file>
137138
<file src="lib/Versions/CollectiveVersion.php">

0 commit comments

Comments
 (0)