Skip to content

Commit 1098b44

Browse files
authored
Merge pull request #6274 from LibreSign/fix/envelope-single-folder
fix: envelope single folder
2 parents 4540ca7 + 279e3c7 commit 1098b44

13 files changed

Lines changed: 146 additions & 55 deletions

lib/Controller/FileController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ private function fetchPreview(
414414
*
415415
* @param LibresignNewFile $file File to save
416416
* @param string $name The name of file to sign
417-
* @param LibresignFolderSettings $settings Settings to define the pattern to store the file. See more informations at FolderService::getFolderName method.
417+
* @param LibresignFolderSettings $settings Settings to define how and where the file should be stored
418418
* @param list<LibresignNewFile> $files Multiple files to create an envelope (optional, use either file or files)
419419
* @return DataResponse<Http::STATUS_OK, LibresignNextcloudFile, array{}>|DataResponse<Http::STATUS_UNPROCESSABLE_ENTITY, array{message: string}, array{}>
420420
*

lib/Service/EnvelopeService.php

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,15 @@ public function createEnvelope(string $name, string $userId, int $filesCount = 0
5353

5454
$parentFolder = $this->folderService->getFolder();
5555

56-
$folderName = $name . '_' . substr(UUIDUtil::getUUID(), 0, 8);
56+
$uuid = UUIDUtil::getUUID();
57+
$folderName = $name . '_' . $uuid;
5758
$envelopeFolder = $parentFolder->newFolder($folderName);
5859

5960
$envelope = new FileEntity();
6061
$envelope->setNodeId($envelopeFolder->getId());
6162
$envelope->setNodeTypeEnum(NodeType::ENVELOPE);
6263
$envelope->setName($name);
63-
$envelope->setUuid(UUIDUtil::getUUID());
64+
$envelope->setUuid($uuid);
6465
$envelope->setCreatedAt(new DateTime());
6566
$envelope->setStatus(FileEntity::STATUS_DRAFT);
6667

@@ -106,6 +107,23 @@ public function getEnvelopeByFileId(int $fileId): ?FileEntity {
106107
}
107108
}
108109

110+
public function getEnvelopeFolder(FileEntity $envelope): \OCP\Files\Folder {
111+
$userId = $envelope->getUserId();
112+
if (!$userId) {
113+
throw new LibresignException('Envelope does not have a user');
114+
}
115+
116+
$this->folderService->setUserId($userId);
117+
$userFolder = $this->folderService->getFolder();
118+
119+
$envelopeFolderNode = $userFolder->getFirstNodeById($envelope->getNodeId());
120+
if (!$envelopeFolderNode instanceof \OCP\Files\Folder) {
121+
throw new LibresignException('Envelope folder not found');
122+
}
123+
124+
return $envelopeFolderNode;
125+
}
126+
109127
private function getMaxFilesPerEnvelope(): int {
110128
return $this->appConfig->getValueInt(Application::APP_ID, 'envelope_max_files', 50);
111129
}

lib/Service/File/UploadProcessor.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,10 @@ public function getNodeFromUploadedFile(array $data): Node {
4848
$extension = $this->mimeService->getExtension($content);
4949
$this->validateFileContent($content, $extension);
5050

51-
$userFolder = $this->folderService->getFolder();
52-
$folderName = $this->folderService->getFolderName($data, $data['userManager']);
53-
$folderToFile = $userFolder->newFolder($folderName);
51+
$folderToFile = $this->folderService->getFolderForFile($data, $data['userManager']);
52+
if (!$folderToFile instanceof \OCP\Files\Folder) {
53+
throw new LibresignException('Envelope folder not found');
54+
}
5455

5556
@unlink($uploadedFile['tmp_name']);
5657

lib/Service/FileService.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,7 @@ public function getNodeFromData(array $data): Node {
120120

121121
$this->validateFileContent($content, $extension);
122122

123-
$userFolder = $this->folderService->getFolder();
124-
$folderName = $this->folderService->getFolderName($data, $data['userManager']);
125-
$folderToFile = $userFolder->newFolder($folderName);
123+
$folderToFile = $this->folderService->getFolderForFile($data, $data['userManager']);
126124
$filename = $this->resolveFileName($data, $extension);
127125
return $folderToFile->newFile($filename, $content);
128126
}

lib/Service/FolderService.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,29 @@ private function getLibreSignDefaultPath(): string {
124124
return $path;
125125
}
126126

127+
/**
128+
* Get or create the folder where a file should be stored
129+
*
130+
* @param array $data Must contain 'settings' and optionally 'name', 'userManager'
131+
* @param mixed $identifier User or string identifier
132+
* @return Folder The folder where files should be created
133+
* @throws LibresignException
134+
*/
135+
public function getFolderForFile(array $data, $identifier): Folder {
136+
$userFolder = $this->getFolder();
137+
138+
if (isset($data['settings']['envelopeFolderId'])) {
139+
$envelopeFolder = $userFolder->getFirstNodeById($data['settings']['envelopeFolderId']);
140+
if ($envelopeFolder === null || !$envelopeFolder instanceof Folder) {
141+
throw new LibresignException($this->l10n->t('Envelope folder not found'));
142+
}
143+
return $envelopeFolder;
144+
}
145+
146+
$folderName = $this->getFolderName($data, $identifier);
147+
return $userFolder->newFolder($folderName);
148+
}
149+
127150
/**
128151
* @param array{settings: array, name: string} $data
129152
* @param IUser $owner

lib/Service/RequestSignatureService.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,9 @@ public function saveEnvelope(array $data): array {
164164
try {
165165
$envelope = $this->envelopeService->createEnvelope($envelopeName, $userId, $filesCount);
166166

167-
$envelopeFolderName = 'envelope-' . $envelope->getUuid();
167+
$envelopeFolder = $this->envelopeService->getEnvelopeFolder($envelope);
168168
$envelopeSettings = array_merge($data['settings'] ?? [], [
169-
'folderName' => $envelopeFolderName,
169+
'envelopeFolderId' => $envelopeFolder->getId(),
170170
]);
171171

172172
foreach ($data['files'] as $fileData) {

openapi-full.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4847,7 +4847,7 @@
48474847
"settings": {
48484848
"$ref": "#/components/schemas/FolderSettings",
48494849
"default": [],
4850-
"description": "Settings to define the pattern to store the file. See more informations at FolderService::getFolderName method."
4850+
"description": "Settings to define how and where the file should be stored"
48514851
},
48524852
"files": {
48534853
"type": "array",

openapi.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4697,7 +4697,7 @@
46974697
"settings": {
46984698
"$ref": "#/components/schemas/FolderSettings",
46994699
"default": [],
4700-
"description": "Settings to define the pattern to store the file. See more informations at FolderService::getFolderName method."
4700+
"description": "Settings to define how and where the file should be stored"
47014701
},
47024702
"files": {
47034703
"type": "array",

src/types/openapi/openapi-full.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3343,7 +3343,7 @@ export interface operations {
33433343
*/
33443344
name?: string;
33453345
/**
3346-
* @description Settings to define the pattern to store the file. See more informations at FolderService::getFolderName method.
3346+
* @description Settings to define how and where the file should be stored
33473347
* @default []
33483348
*/
33493349
settings?: components["schemas"]["FolderSettings"];

src/types/openapi/openapi.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2865,7 +2865,7 @@ export interface operations {
28652865
*/
28662866
name?: string;
28672867
/**
2868-
* @description Settings to define the pattern to store the file. See more informations at FolderService::getFolderName method.
2868+
* @description Settings to define how and where the file should be stored
28692869
* @default []
28702870
*/
28712871
settings?: components["schemas"]["FolderSettings"];

0 commit comments

Comments
 (0)