From 9bcb5d73412ffd517b5cb08de519c1acdaf097e0 Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 11 Dec 2025 12:48:32 -0300 Subject: [PATCH 1/2] feat: add status field to signer data in file info Include signer status in the signers array returned by file info endpoint to allow frontend to display draft/pending status. Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- lib/Service/FileService.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Service/FileService.php b/lib/Service/FileService.php index a96489333b..3567ea4ea4 100644 --- a/lib/Service/FileService.php +++ b/lib/Service/FileService.php @@ -835,6 +835,7 @@ private function associateAllAndFormat(IUser $user, array $files, array $signers 'signed' => null, 'signRequestId' => $signer->getId(), 'signingOrder' => $signer->getSigningOrder(), + 'status' => $signer->getStatus(), 'me' => array_reduce($identifyMethodsOfSigner, function (bool $carry, IdentifyMethod $identifyMethod) use ($user): bool { if ($identifyMethod->getIdentifierKey() === IdentifyMethodService::IDENTIFY_ACCOUNT) { if ($user->getUID() === $identifyMethod->getIdentifierValue()) { From 48f55a546e3aa8b1bbd07aab6b2f9fa12b58cfe4 Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 11 Dec 2025 12:48:41 -0300 Subject: [PATCH 2/2] feat: respect draft status when creating sign requests When file status is draft, new sign requests should also start as draft regardless of signing order. This prevents automatic notifications and keeps requests in draft mode until file is ready. Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- lib/Service/RequestSignatureService.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/Service/RequestSignatureService.php b/lib/Service/RequestSignatureService.php index 4dd1e358ce..12a750d67d 100644 --- a/lib/Service/RequestSignatureService.php +++ b/lib/Service/RequestSignatureService.php @@ -203,6 +203,7 @@ private function associateToSigners(array $data, int $fileId): array { $this->deleteIdentifyMethodIfNotExits($data['users'], $fileId); $this->sequentialSigningService->resetOrderCounter(); + $fileStatus = $data['status'] ?? null; foreach ($data['users'] as $user) { $userProvidedOrder = isset($user['signingOrder']) ? (int)$user['signingOrder'] : null; @@ -216,9 +217,10 @@ private function associateToSigners(array $data, int $fileId): array { ], displayName: $user['displayName'] ?? '', description: $user['description'] ?? '', - notify: empty($user['notify']) && $this->isStatusAbleToNotify($data['status'] ?? null), + notify: empty($user['notify']) && $this->isStatusAbleToNotify($fileStatus), fileId: $fileId, signingOrder: $signingOrder, + fileStatus: $fileStatus, ); } } else { @@ -226,9 +228,10 @@ private function associateToSigners(array $data, int $fileId): array { identifyMethods: $user['identify'], displayName: $user['displayName'] ?? '', description: $user['description'] ?? '', - notify: empty($user['notify']) && $this->isStatusAbleToNotify($data['status'] ?? null), + notify: empty($user['notify']) && $this->isStatusAbleToNotify($fileStatus), fileId: $fileId, signingOrder: $signingOrder, + fileStatus: $fileStatus, ); } } @@ -250,6 +253,7 @@ private function associateToSigner( bool $notify, int $fileId, int $signingOrder = 0, + ?int $fileStatus = null, ): SignRequestEntity { $identifyMethodsIncances = $this->identifyMethod->getByUserData($identifyMethods); if (empty($identifyMethodsIncances)) { @@ -268,7 +272,7 @@ private function associateToSigner( $currentStatus = $signRequest->getStatusEnum(); if ($isNewSignRequest || $currentStatus === \OCA\Libresign\Enum\SignRequestStatus::DRAFT) { - $initialStatus = $this->determineInitialStatus($signingOrder); + $initialStatus = $this->determineInitialStatus($signingOrder, $fileStatus); $signRequest->setStatusEnum($initialStatus); } @@ -284,7 +288,11 @@ private function associateToSigner( return $signRequest; } - private function determineInitialStatus(int $signingOrder): \OCA\Libresign\Enum\SignRequestStatus { + private function determineInitialStatus(int $signingOrder, ?int $fileStatus = null): \OCA\Libresign\Enum\SignRequestStatus { + if ($fileStatus === FileEntity::STATUS_DRAFT) { + return \OCA\Libresign\Enum\SignRequestStatus::DRAFT; + } + if (!$this->sequentialSigningService->isOrderedNumericFlow()) { return \OCA\Libresign\Enum\SignRequestStatus::ABLE_TO_SIGN; }