Skip to content

Commit 17a1408

Browse files
authored
Merge pull request #6552 from LibreSign/fix/visible-elements-loading
fix: visible elements loading
2 parents fc4e6a6 + e2c64f3 commit 17a1408

File tree

5 files changed

+72
-20
lines changed

5 files changed

+72
-20
lines changed

lib/Controller/PageController.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ public function sign(string $uuid): TemplateResponse {
352352
$this->initialState->provideInitialState('status', $file['status']);
353353
$this->initialState->provideInitialState('statusText', $file['statusText']);
354354
$this->initialState->provideInitialState('signers', $file['signers']);
355+
$this->initialState->provideInitialState('visibleElements', $file['visibleElements'] ?? []);
355356
$this->initialState->provideInitialState('sign_request_uuid', $uuid);
356357
$this->provideSignerSignatues();
357358
$this->initialState->provideInitialState('token_length', TokenService::TOKEN_LENGTH);
@@ -475,8 +476,8 @@ public function signIdDoc($uuid): TemplateResponse {
475476
$this->initialState->provideInitialState('nodeId', $file['nodeId']);
476477
$this->initialState->provideInitialState('status', $file['status']);
477478
$this->initialState->provideInitialState('statusText', $file['statusText']);
478-
$this->initialState->provideInitialState('visibleElements', []);
479-
$this->initialState->provideInitialState('signers', []);
479+
$this->initialState->provideInitialState('visibleElements', $file['visibleElements'] ?? []);
480+
$this->initialState->provideInitialState('signers', $file['signers'] ?? []);
480481
$this->provideSignerSignatues();
481482
$signatureMethods = $this->identifyMethodService->getSignMethodsOfIdentifiedFactors($this->getSignRequestEntity()->getId());
482483
$this->initialState->provideInitialState('signature_methods', $signatureMethods);

lib/Service/FileService.php

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -454,25 +454,23 @@ private function loadLibreSignData(): void {
454454
if (!isset($this->fileData->files) || !is_array($this->fileData->files)) {
455455
$this->fileData->files = [];
456456
}
457+
}
457458

458-
if ($this->options->isShowVisibleElements()) {
459-
$signers = $this->signRequestMapper->getByMultipleFileId([$this->file->getId()]);
460-
$this->fileData->visibleElements = [];
461-
foreach ($this->signRequestMapper->getVisibleElementsFromSigners($signers) as $visibleElements) {
462-
if (empty($visibleElements)) {
463-
continue;
464-
}
465-
$file = array_filter($this->fileData->files, fn (stdClass $file) => $file->id === $visibleElements[0]->getFileId());
466-
if (empty($file)) {
467-
continue;
468-
}
469-
$file = current($file);
470-
$fileMetadata = $this->file->getMetadata();
471-
$this->fileData->visibleElements = array_merge(
472-
$this->fileElementService->formatVisibleElements($visibleElements, $fileMetadata),
473-
$this->fileData->visibleElements
474-
);
459+
private function loadVisibleElements(): void {
460+
if (!$this->options->isShowVisibleElements()) {
461+
return;
462+
}
463+
$signers = $this->signRequestMapper->getByMultipleFileId([$this->file->getId()]);
464+
$this->fileData->visibleElements = [];
465+
$fileMetadata = $this->file->getMetadata();
466+
foreach ($this->signRequestMapper->getVisibleElementsFromSigners($signers) as $visibleElements) {
467+
if (empty($visibleElements)) {
468+
continue;
475469
}
470+
$this->fileData->visibleElements = array_merge(
471+
$this->fileElementService->formatVisibleElements($visibleElements, $fileMetadata),
472+
$this->fileData->visibleElements
473+
);
476474
}
477475
}
478476

@@ -550,6 +548,7 @@ public function toArray(): array {
550548
$this->loadFileMetadata();
551549
$this->loadSettings();
552550
$this->loadSigners();
551+
$this->loadVisibleElements();
553552
$this->loadMessages();
554553
$this->computeEnvelopeSignersProgress();
555554

src/store/sign.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const defaultState = {
2525
nodeType: 'file',
2626
uuid: '',
2727
signers: [],
28+
visibleElements: [],
2829
},
2930
mounted: false,
3031
}
@@ -46,6 +47,7 @@ export const useSignStore = defineStore('sign', {
4647
nodeType: loadState('libresign', 'nodeType', ''),
4748
uuid: loadState('libresign', 'uuid', null),
4849
signers: loadState('libresign', 'signers', []),
50+
visibleElements: loadState('libresign', 'visibleElements', []),
4951
}
5052
const filesStore = useFilesStore()
5153
const sidebarStore = useSidebarStore()

tests/php/Unit/Service/AsyncSigningServiceTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
use OCA\Libresign\Db\SignRequest;
1616
use OCA\Libresign\Enum\FileStatus;
1717
use OCA\Libresign\Service\AsyncSigningService;
18-
use OCA\Libresign\Service\WorkerHealthService;
18+
use OCA\Libresign\Service\Worker\WorkerHealthService;
1919
use OCP\BackgroundJob\IJobList;
2020
use OCP\IUser;
2121
use OCP\Security\ICredentialsManager;

tests/php/Unit/Service/FileServiceTest.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
use OCA\Libresign\Exception\LibresignException;
1111
use OCA\Libresign\Service\FileService;
12+
use PHPUnit\Framework\Attributes\DataProvider;
1213

1314
final class FileServiceTest extends \OCA\Libresign\Tests\Unit\TestCase {
1415
private $fileMapper;
@@ -296,4 +297,53 @@ public function testDeleteWithoutDeletingFile(): void {
296297

297298
$service->delete(1, false);
298299
}
300+
301+
#[DataProvider('providerTestVisibleElements')]
302+
public function testVisibleElements(bool $showVisibleElementsFlag, bool $expectedInResult): void {
303+
$file = new \OCA\Libresign\Db\File();
304+
$file->setId(1);
305+
$file->setUuid('test-uuid');
306+
$file->setName('test.pdf');
307+
$file->setStatus(1);
308+
$file->setCreatedAt(new \DateTime());
309+
$file->setNodeId(100);
310+
$file->setSignatureFlow('');
311+
$file->setDocmdpLevel('');
312+
313+
$file->setUserId('testuser');
314+
315+
$user = $this->createMock(\OCP\IUser::class);
316+
$user->method('getDisplayName')->willReturn('Test User');
317+
318+
$this->fileMapper->method('getById')->willReturn($file);
319+
$this->fileMapper->method('getTextOfStatus')->willReturn('Status text');
320+
$this->userManager->method('get')->willReturn($user);
321+
$this->signRequestMapper->method('getByMultipleFileId')->willReturn([]);
322+
if ($showVisibleElementsFlag) {
323+
$this->signRequestMapper->method('getVisibleElementsFromSigners')->willReturn([]);
324+
}
325+
326+
$service = $this->createFileService();
327+
$chainedService = $service->setFile($file);
328+
329+
if ($showVisibleElementsFlag) {
330+
$chainedService->showVisibleElements();
331+
}
332+
333+
$result = $chainedService->toArray();
334+
335+
if ($expectedInResult) {
336+
$this->assertArrayHasKey('visibleElements', $result);
337+
$this->assertIsArray($result['visibleElements']);
338+
} else {
339+
$this->assertArrayNotHasKey('visibleElements', $result);
340+
}
341+
}
342+
343+
public static function providerTestVisibleElements(): array {
344+
return [
345+
'visible elements included when showVisibleElements() called' => [true, true],
346+
'visible elements not included when showVisibleElements() not called' => [false, false],
347+
];
348+
}
299349
}

0 commit comments

Comments
 (0)