Merge pull request #6103 from LibreSign/fix/respect-draft-status-in-sign-requests

fix: respect draft status in sign requests
This commit is contained in:
Vitor Mattos 2025-12-11 12:58:18 -03:00 committed by GitHub
commit 24cc223fcc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 4 deletions

View file

@ -835,6 +835,7 @@ class FileService {
'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()) {

View file

@ -203,6 +203,7 @@ class RequestSignatureService {
$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 @@ class RequestSignatureService {
],
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 @@ class RequestSignatureService {
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 @@ class RequestSignatureService {
bool $notify,
int $fileId,
int $signingOrder = 0,
?int $fileStatus = null,
): SignRequestEntity {
$identifyMethodsIncances = $this->identifyMethod->getByUserData($identifyMethods);
if (empty($identifyMethodsIncances)) {
@ -268,7 +272,7 @@ class RequestSignatureService {
$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 @@ class RequestSignatureService {
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;
}