Skip to content

Commit cd820e6

Browse files
committed
added support for custom folders
1 parent dd5814d commit cd820e6

4 files changed

Lines changed: 106 additions & 4 deletions

File tree

src/Controllers/Examples/eSignature/EG045DeleteEnvelope.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use DocuSign\Controllers\eSignBaseController;
99
use DocuSign\eSign\Client\ApiException;
1010
use DocuSign\Services\Examples\eSignature\DeleteRestoreEnvelopeService;
11+
use DocuSign\Services\ManifestService;
1112

1213
class EG045DeleteEnvelope extends eSignBaseController
1314
{
@@ -57,7 +58,11 @@ public function createController(): void
5758
$this->clientService->showDoneTemplate(
5859
$this->codeExampleText["ExampleName"],
5960
$this->codeExampleText["ExampleName"],
60-
$pageText[0]["ResultsPageText"] ?? null,
61+
ManifestService::replacePlaceholders(
62+
"{0}",
63+
$this->args["envelope_id"],
64+
$pageText[0]["ResultsPageText"]
65+
),
6166
null,
6267
"index.php?page=eg045/RestoreEnvelope"
6368
);

src/Controllers/Examples/eSignature/EG045RestoreEnvelope.php

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use DocuSign\Controllers\eSignBaseController;
99
use DocuSign\eSign\Client\ApiException;
1010
use DocuSign\Services\Examples\eSignature\DeleteRestoreEnvelopeService;
11+
use DocuSign\Services\ManifestService;
1112

1213
class EG045RestoreEnvelope extends eSignBaseController
1314
{
@@ -16,7 +17,7 @@ class EG045RestoreEnvelope extends eSignBaseController
1617

1718
const DELETE_FOLDER_ID = "recyclebin";
1819

19-
const RESTORE_FOLDER_ID = "sentitems";
20+
const SENT_ITEMS_FOLDER_NAME = "Sent Items";
2021

2122
/**
2223
* Create a new controller instance.
@@ -40,19 +41,57 @@ public function createController(): void
4041
{
4142
$this->checkDsToken();
4243

44+
$availableFolders = DeleteRestoreEnvelopeService::getFolders(
45+
$this->clientService,
46+
$this->args["account_id"]
47+
);
48+
49+
$folders = DeleteRestoreEnvelopeService::getFolderByName(
50+
$availableFolders->getFolders(),
51+
$this->args["folder_name"]
52+
);
53+
54+
if ($folders == null) {
55+
$pageText = array_values(array_filter(
56+
$this->codeExampleText["AdditionalPage"],
57+
fn($page) => $page["Name"] === "folder_does_not_exist"
58+
));
59+
60+
$this->clientService->showDoneTemplate(
61+
$this->codeExampleText["ExampleName"],
62+
$this->codeExampleText["ExampleName"],
63+
ManifestService::replacePlaceholders("{0}", $this->args["folder_name"], $pageText[0]["ResultsPageText"]),
64+
null,
65+
"index.php?page=eg045/RestoreEnvelope"
66+
);
67+
exit;
68+
}
69+
4370
try {
4471
DeleteRestoreEnvelopeService::moveEnvelopeToFolder(
4572
$this->clientService,
4673
$this->args["account_id"],
4774
$_SESSION["envelope_id"],
48-
self::RESTORE_FOLDER_ID,
75+
$folders->getFolderId(),
4976
self::DELETE_FOLDER_ID,
5077
);
5178

5279
$this->clientService->showDoneTemplate(
5380
$this->codeExampleText["ExampleName"],
5481
$this->codeExampleText["ExampleName"],
55-
$this->codeExampleText["ResultsPageText"],
82+
ManifestService::replacePlaceholders(
83+
"{0}",
84+
$_SESSION["envelope_id"],
85+
ManifestService::replacePlaceholders(
86+
"{1}",
87+
$folders->getType(),
88+
ManifestService::replacePlaceholders(
89+
"{2}",
90+
$this->args["folder_name"],
91+
$this->codeExampleText["ResultsPageText"]
92+
)
93+
)
94+
)
5695
);
5796
} catch (ApiException $e) {
5897
$this->clientService->showErrorTemplate($e);
@@ -67,6 +106,7 @@ public function createController(): void
67106
public function getTemplateArgs(): array
68107
{
69108
return [
109+
'folder_name' => $_POST['folder_name'] != null? $_POST['folder_name'] : self::SENT_ITEMS_FOLDER_NAME,
70110
'account_id' => $_SESSION['ds_account_id'],
71111
'base_path' => $_SESSION['ds_base_path'],
72112
'ds_access_token' => $_SESSION['ds_access_token'],

src/Services/Examples/eSignature/DeleteRestoreEnvelopeService.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace DocuSign\Services\Examples\eSignature;
44

5+
use DocuSign\eSign\Model\Folder;
56
use DocuSign\eSign\Model\FoldersRequest;
67
use DocuSign\eSign\Model\FoldersResponse;
78
use DocuSign\Services\SignatureClientService;
@@ -35,4 +36,46 @@ public static function moveEnvelopeToFolder(
3536

3637
return $foldersApi->moveEnvelopes($accountId, $folderId, $foldersRequest);
3738
}
39+
40+
/**
41+
* Gets all folders in the account
42+
*
43+
* @param SignatureClientService $clientService The client service for eSignature
44+
* @param string $accountId The DocuSign Account ID (GUID or short version)
45+
*
46+
* @return \DocuSign\eSign\Model\FoldersResponse
47+
*/
48+
public static function getFolders(SignatureClientService $clientService, string $accountId): FoldersResponse
49+
{
50+
$foldersApi = $clientService->getFoldersApi();
51+
52+
return $foldersApi->callList($accountId, null);
53+
}
54+
55+
/**
56+
* Gets a folder by its name
57+
*
58+
* @param array $folders All folders in the account
59+
* @param string $targetName The folder name to search for
60+
*
61+
* @return \DocuSign\eSign\Model\Folder|null
62+
*/
63+
public static function getFolderByName(array $folders, string $targetName): ?Folder
64+
{
65+
foreach ($folders as $folder) {
66+
if ($folder->getName() === $targetName) {
67+
return $folder;
68+
}
69+
70+
$subFolders = $folder->getFolders();
71+
if (!empty($subFolders)) {
72+
$nestedFolder = self::getFolderByName($subFolders, $targetName);
73+
if ($nestedFolder !== null) {
74+
return $nestedFolder;
75+
}
76+
}
77+
}
78+
79+
return null;
80+
}
3881
}

templates/esignature/eg045_restore_envelope.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11
{% extends "base.html" %} {% block content %}
22

3+
{% set formNumber = 0 %}
4+
{% set folderNameInputNumber = 1 %}
5+
36
<h4>{{ code_example_text['ExampleName'] | raw }}</h4>
47
<p>{{ code_example_text["ExampleDescription"] | raw }}</p>
58

69
<p>{{ common_texts["HelpingTexts"]["EnvelopeWillBeRestored"]|replace({ ("{0}"):envelope_id }) | raw }}</p>
710

811
<form class="eg" action="" method="post" data-busy="form">
12+
<div class="form-group">
13+
<label for="folder_name">
14+
{{ code_example_text['Forms'][formNumber]['Inputs'][folderNameInputNumber]['InputName'] | raw }}
15+
</label>
16+
17+
<input type="text" class="form-control" id="folder_name" name="folder_name" aria-describedby="folder_name_help"
18+
placeholder="{{code_example_text['Forms'][formNumber]['Inputs'][folderNameInputNumber]['InputPlaceholder']}}"
19+
required
20+
value="{{ code_example_text['Forms'][formNumber]['Inputs'][folderNameInputNumber]['InputPlaceholder'] }}">
21+
</div>
22+
923
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
1024
<button type="submit" class="btn btn-docu">
1125
{{ common_texts["HelpingTexts"]["SubmitButtonRestoreText"] | raw }}

0 commit comments

Comments
 (0)