• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

LibreSign / libresign / 19868867326

02 Dec 2025 06:11PM UTC coverage: 41.504%. First build
19868867326

Pull #4464

github

web-flow
Merge 35e90ed92 into 198609762
Pull Request #4464: refactor: attach document

89 of 247 new or added lines in 14 files covered. (36.03%)

5100 of 12288 relevant lines covered (41.5%)

4.18 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

46.97
/lib/Service/IdDocsService.php
1
<?php
2

3
declare(strict_types=1);
4
/**
5
 * SPDX-FileCopyrightText: 2025 LibreCode coop and contributors
6
 * SPDX-License-Identifier: AGPL-3.0-or-later
7
 */
8

9
namespace OCA\Libresign\Service;
10

11
use OCA\Libresign\AppInfo\Application;
12
use OCA\Libresign\Db\FileMapper;
13
use OCA\Libresign\Db\FileTypeMapper;
14
use OCA\Libresign\Db\IdDocsMapper;
15
use OCA\Libresign\Db\SignRequest;
16
use OCA\Libresign\Exception\LibresignException;
17
use OCA\Libresign\Helper\ValidateHelper;
18
use OCP\IAppConfig;
19
use OCP\IL10N;
20
use OCP\IUser;
21

22
class IdDocsService {
23

24
        public function __construct(
25
                private IL10N $l10n,
26
                private FileTypeMapper $fileTypeMapper,
27
                private ValidateHelper $validateHelper,
28
                private RequestSignatureService $requestSignatureService,
29
                private IdDocsMapper $idDocsMapper,
30
                private FileMapper $fileMapper,
31
                private IAppConfig $appConfig,
32
        ) {
33
        }
31✔
34

35
        private function validateTypeOfFile(int $fileIndex, array $file): void {
36
                $profileFileTypes = $this->fileTypeMapper->getTypes();
2✔
37
                if (!array_key_exists($file['type'], $profileFileTypes)) {
2✔
38
                        throw new LibresignException(json_encode([
1✔
39
                                'type' => 'danger',
1✔
40
                                'file' => $fileIndex,
1✔
41
                                'message' => $this->l10n->t('Invalid file type.')
1✔
42
                        ]));
1✔
43
                }
44
        }
45

46
        private function validateIdDoc(int $fileIndex, array $file, IUser $user): void {
47
                $profileFileTypes = $this->fileTypeMapper->getTypes();
1✔
48
                if (!array_key_exists($file['type'], $profileFileTypes)) {
1✔
NEW
49
                        throw new LibresignException(json_encode([
×
NEW
50
                                'type' => 'danger',
×
NEW
51
                                'file' => $fileIndex,
×
NEW
52
                                'message' => $this->l10n->t('Invalid file type.')
×
NEW
53
                        ]));
×
54
                }
55

56
                try {
57
                        $this->validateHelper->validateFileTypeExists($file['type']);
1✔
58
                        $this->validateHelper->validateNewFile($file, ValidateHelper::TYPE_ACCOUNT_DOCUMENT, $user);
1✔
59
                        $this->validateHelper->validateUserHasNoFileWithThisType($user->getUID(), $file['type']);
1✔
NEW
60
                } catch (\Exception $e) {
×
NEW
61
                        throw new LibresignException(json_encode([
×
NEW
62
                                'type' => 'danger',
×
NEW
63
                                'file' => $fileIndex,
×
NEW
64
                                'message' => $e->getMessage()
×
NEW
65
                        ]));
×
66
                }
67
        }
68

69
        public function validateIdDocs(array $files, IUser $user): void {
70
                foreach ($files as $fileIndex => $file) {
2✔
71
                        $this->validateTypeOfFile($fileIndex, $file);
2✔
72
                        $this->validateIdDoc($fileIndex, $file, $user);
1✔
73
                }
74
        }
75

76
        public function addIdDocs(array $files, IUser $user): void {
77
                $this->validateIdDocs($files, $user);
2✔
78
                foreach ($files as $fileData) {
1✔
79
                        $dataToSave = $fileData;
1✔
80
                        $dataToSave['userManager'] = $user;
1✔
81
                        $dataToSave['name'] = $fileData['name'] ?? $fileData['type'];
1✔
82
                        $file = $this->requestSignatureService->saveFile($dataToSave);
1✔
83

84
                        $this->idDocsMapper->save($file->getId(), null, $user->getUID(), $fileData['type']);
1✔
85
                }
86
        }
87

88
        public function addFilesToDocumentFolder(array $files, SignRequest $signRequest): void {
NEW
89
                foreach ($files as $fileIndex => $file) {
×
NEW
90
                        $this->validateTypeOfFile($fileIndex, $file);
×
91
                }
NEW
92
                foreach ($files as $fileData) {
×
NEW
93
                        $dataToSave = $fileData;
×
NEW
94
                        $dataToSave['signRequest'] = $signRequest;
×
NEW
95
                        $dataToSave['name'] = $fileData['name'] ?? $fileData['type'];
×
NEW
96
                        $file = $this->requestSignatureService->saveFile($dataToSave);
×
97

NEW
98
                        $this->idDocsMapper->save($file->getId(), $signRequest->getId(), null, $fileData['type']);
×
99
                }
100
        }
101

102
        public function list(array $filter, ?int $page = null, ?int $length = null): array {
103
                $page = $page ?? 1;
1✔
104
                $length = $length ?? (int)$this->appConfig->getValueInt(Application::APP_ID, 'length_of_page', 100);
1✔
105
                $data = $this->idDocsMapper->list($filter, $page, $length);
1✔
106
                $data['pagination']->setRouteName('ocs.libresign.File.list');
1✔
107
                return [
1✔
108
                        'data' => $data['data'],
1✔
109
                        'pagination' => $data['pagination']->getPagination($page, $length, $filter)
1✔
110
                ];
1✔
111
        }
112

113
        public function deleteIdDoc(int $nodeId, IUser $user): void {
NEW
114
                $this->validateHelper->validateIdDocIsOwnedByUser($nodeId, $user->getUID());
×
NEW
115
                $idDocs = $this->idDocsMapper->getByUserIdAndNodeId($user->getUID(), $nodeId);
×
NEW
116
                $this->idDocsMapper->delete($idDocs);
×
NEW
117
                $file = $this->fileMapper->getById($idDocs->getFileId());
×
NEW
118
                $this->fileMapper->delete($file);
×
119
        }
120

121
        public function getIdDocsByUser(IUser $user): array {
NEW
122
                $idDocs = $this->idDocsMapper->getByUserId($user->getUID());
×
NEW
123
                $files = [];
×
NEW
124
                foreach ($idDocs as $idDoc) {
×
NEW
125
                        $file = $this->fileMapper->getById($idDoc->getFileId());
×
NEW
126
                        $files[] = [
×
NEW
127
                                'nodeId' => $file->getNodeId(),
×
NEW
128
                                'fileId' => $idDoc->getFileId(),
×
NEW
129
                                'type' => $idDoc->getFileType(),
×
NEW
130
                                'name' => $file->getName(),
×
NEW
131
                        ];
×
132
                }
NEW
133
                return $files;
×
134
        }
135
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc