From 45554e7ecf255923b21dfeafa56c0384dce3ba3c 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 25bce290e461193132ba80e12e9cc3ca37a10fd4 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; }