From 8f0be2dd2d2a80d4fc015a1c0fadceebc8f02511 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 161c0f6e019e39c4eb16827c080fc61c159f764f 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; }