Skip to content

Commit 83a982f

Browse files
committed
feat: add signingOrder field to API responses and sort signers
Include signingOrder field in signer data returned by FileService. Sort signers by signingOrder (ascending) and displayName as secondary sort to maintain consistent ordering in the UI. Signed-off-by: Vitor Mattos <[email protected]>
1 parent f23e9d6 commit 83a982f

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

lib/Service/FileService.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,7 @@ private function loadLibreSignSigners(): void {
387387
$this->fileData->signers[$index]['me'] = false;
388388
$this->fileData->signers[$index]['signRequestId'] = $signer->getId();
389389
$this->fileData->signers[$index]['description'] = $signer->getDescription();
390+
$this->fileData->signers[$index]['signingOrder'] = $signer->getSigningOrder();
390391
$this->fileData->signers[$index]['visibleElements'] = $this->getVisibleElements($signer->getId());
391392
$this->fileData->signers[$index]['request_sign_date'] = $signer->getCreatedAt()->format(DateTimeInterface::ATOM);
392393
if (empty($this->fileData->signers[$index]['signed'])) {
@@ -468,6 +469,18 @@ private function loadLibreSignSigners(): void {
468469
}, []);
469470
ksort($this->fileData->signers[$index]);
470471
}
472+
473+
usort($this->fileData->signers, function ($a, $b) {
474+
$orderA = $a['signingOrder'] ?? PHP_INT_MAX;
475+
$orderB = $b['signingOrder'] ?? PHP_INT_MAX;
476+
477+
if ($orderA !== $orderB) {
478+
return $orderA <=> $orderB;
479+
}
480+
481+
return strcasecmp($a['displayName'], $b['displayName']);
482+
});
483+
471484
$this->signersLibreSignLoaded = true;
472485
}
473486

@@ -821,6 +834,7 @@ private function associateAllAndFormat(IUser $user, array $files, array $signers
821834
'request_sign_date' => $signer->getCreatedAt()->format(DateTimeInterface::ATOM),
822835
'signed' => null,
823836
'signRequestId' => $signer->getId(),
837+
'signingOrder' => $signer->getSigningOrder(),
824838
'me' => array_reduce($identifyMethodsOfSigner, function (bool $carry, IdentifyMethod $identifyMethod) use ($user): bool {
825839
if ($identifyMethod->getIdentifierKey() === IdentifyMethodService::IDENTIFY_ACCOUNT) {
826840
if ($user->getUID() === $identifyMethod->getIdentifierValue()) {
@@ -888,6 +902,17 @@ private function associateAllAndFormat(IUser $user, array $files, array $signers
888902
$files[$key]['signers'] = [];
889903
$files[$key]['statusText'] = $this->l10n->t('no signers');
890904
} else {
905+
usort($files[$key]['signers'], function ($a, $b) {
906+
$orderA = $a['signingOrder'] ?? PHP_INT_MAX;
907+
$orderB = $b['signingOrder'] ?? PHP_INT_MAX;
908+
909+
if ($orderA !== $orderB) {
910+
return $orderA <=> $orderB;
911+
}
912+
913+
return strcasecmp($a['displayName'], $b['displayName']);
914+
});
915+
891916
$files[$key]['statusText'] = $this->fileMapper->getTextOfStatus((int)$files[$key]['status']);
892917
}
893918
unset($files[$key]['id']);

0 commit comments

Comments
 (0)