Skip to content

Commit df69d10

Browse files
support custom folders
1 parent 3caa908 commit df69d10

File tree

4 files changed

+108
-71
lines changed

4 files changed

+108
-71
lines changed

app/controllers/e_sign/eeg045_delete_restore_envelope_controller.rb

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
# frozen_string_literal: true
22

3+
require_relative '../../services/utils'
4+
35
class ESign::Eeg045DeleteRestoreEnvelopeController < EgController
46
before_action -> { check_auth('eSignature') }
57
before_action -> { @example = Utils::ManifestUtils.new.get_example(@manifest, 45, 'eSignature') }
68

79
DELETE_FOLDER_ID = 'recyclebin'
8-
RESTORE_FOLDER_ID = 'sentitems'
910

1011
def delete_envelope
1112
args = {
@@ -16,36 +17,48 @@ def delete_envelope
1617
folder_id: DELETE_FOLDER_ID
1718
}
1819

19-
delete_restore_envelope_service = ESign::Eg045DeleteRestoreEnvelopeService.new(args)
20+
delete_restore_envelope_service = ESign::Eg045DeleteRestoreEnvelopeService.new
2021

21-
delete_restore_envelope_service.move_envelope
22+
delete_restore_envelope_service.move_envelope args
2223

2324
session[:envelope_id] = args[:envelope_id]
2425
additional_page_data = @example['AdditionalPage'].find { |p| p['Name'] == 'envelope_is_deleted' }
2526
@title = @example['ExampleName']
26-
@message = additional_page_data['ResultsPageText']
27+
@message = format_string(additional_page_data['ResultsPageText'], args[:envelope_id])
2728
@redirect_url = "/#{session[:eg]}restore"
2829

2930
render 'ds_common/example_done'
3031
end
3132

3233
def restore_envelope
34+
folder_name = param_gsub(params['folder_name'])
3335
args = {
3436
account_id: session['ds_account_id'],
3537
base_path: session['ds_base_path'],
3638
access_token: session['ds_access_token'],
3739
envelope_id: param_gsub(session[:envelope_id]),
38-
folder_id: RESTORE_FOLDER_ID,
3940
from_folder_id: DELETE_FOLDER_ID
4041
}
4142

42-
delete_restore_envelope_service = ESign::Eg045DeleteRestoreEnvelopeService.new(args)
43+
delete_restore_envelope_service = ESign::Eg045DeleteRestoreEnvelopeService.new
44+
45+
folders = delete_restore_envelope_service.get_folders args
46+
args[:folder_id] = Utils::DocuSignUtils.new.get_folder_id_by_name(folders.folders, folder_name)
47+
48+
if args[:folder_id].nil? || args[:folder_id].empty?
49+
additional_page_data = @example['AdditionalPage'].find { |p| p['Name'] == 'folder_does_not_exist' }
50+
@title = @example['ExampleName']
51+
@message = format_string(additional_page_data['ResultsPageText'], folder_name)
52+
@redirect_url = "/#{session[:eg]}restore"
53+
54+
return render 'ds_common/example_done'
55+
end
4356

44-
delete_restore_envelope_service.move_envelope
57+
delete_restore_envelope_service.move_envelope args
4558

4659
session[:envelope_id] = args[:envelope_id]
4760
@title = @example['ExampleName']
48-
@message = @example['ResultsPageText']
61+
@message = format_string(@example['ResultsPageText'], session[:envelope_id], args[:folder_id], folder_name)
4962
render 'ds_common/example_done'
5063
end
5164

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
# frozen_string_literal: true
22

33
class ESign::Eg045DeleteRestoreEnvelopeService
4-
attr_reader :args
5-
64
include ApiCreator
75

8-
def initialize(args)
9-
@args = args
10-
end
11-
12-
def move_envelope
6+
def move_envelope(args)
137
#ds-snippet-start:eSign45Step2
148
folders_api = create_folders_api(args)
159
#ds-snippet-end:eSign45Step2
@@ -24,4 +18,12 @@ def move_envelope
2418
folders_api.move_envelopes(args[:account_id], args[:folder_id], folders_request)
2519
#ds-snippet-end:eSign45Step4
2620
end
21+
22+
def get_folders(args)
23+
folders_api = create_folders_api(args)
24+
25+
#ds-snippet-start:eSign45Step5
26+
folders_api.list(args[:account_id])
27+
#ds-snippet-end:eSign45Step5
28+
end
2729
end

app/services/utils.rb

Lines changed: 71 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,71 @@
1-
module Utils
2-
class ManifestUtils
3-
def get_manifest(manifest_url)
4-
uri = URI(manifest_url)
5-
res = Net::HTTP.get_response(uri)
6-
JSON.parse(res.body)
7-
end
8-
9-
def get_example(manifest, number, api_name = 'eSignature')
10-
manifest['APIs'].each do |api|
11-
next unless api_name == api['Name']
12-
13-
api['Groups'].each do |group|
14-
group['Examples'].each do |example|
15-
return example if example['ExampleNumber'] == number
16-
end
17-
end
18-
end
19-
end
20-
end
21-
22-
class DocuSignUtils
23-
def get_user_id(args)
24-
configuration = DocuSign_eSign::Configuration.new
25-
configuration.host = args[:base_path]
26-
api_client = DocuSign_eSign::ApiClient.new configuration
27-
api_client.set_base_path(args[:base_path])
28-
api_client.set_default_header('Authorization', "Bearer #{args[:access_token]}")
29-
user_info = api_client.get_user_info(args[:access_token])
30-
user_info.sub
31-
end
32-
end
33-
34-
class FileUtils
35-
def replace_template_id(file_path, template_id)
36-
content = File.read(file_path)
37-
38-
content.gsub!('template-id', template_id)
39-
40-
File.write(file_path, content)
41-
end
42-
end
43-
44-
class URLUtils
45-
def get_parameter_value_from_url(url, param_name)
46-
parsed_url = URI.parse(url)
47-
query_params = URI.decode_www_form(parsed_url.query || '')
48-
49-
# Access the parameter value (returns a list)
50-
param_value_list = query_params.assoc(param_name)
51-
52-
# If the parameter exists, return the first value; otherwise, return nil
53-
param_value_list ? param_value_list[1] : nil
54-
end
55-
end
56-
end
1+
module Utils
2+
class ManifestUtils
3+
def get_manifest(manifest_url)
4+
uri = URI(manifest_url)
5+
res = Net::HTTP.get_response(uri)
6+
JSON.parse(res.body)
7+
end
8+
9+
def get_example(manifest, number, api_name = 'eSignature')
10+
manifest['APIs'].each do |api|
11+
next unless api_name == api['Name']
12+
13+
api['Groups'].each do |group|
14+
group['Examples'].each do |example|
15+
return example if example['ExampleNumber'] == number
16+
end
17+
end
18+
end
19+
end
20+
end
21+
22+
class DocuSignUtils
23+
def get_user_id(args)
24+
configuration = DocuSign_eSign::Configuration.new
25+
configuration.host = args[:base_path]
26+
api_client = DocuSign_eSign::ApiClient.new configuration
27+
api_client.set_base_path(args[:base_path])
28+
api_client.set_default_header('Authorization', "Bearer #{args[:access_token]}")
29+
user_info = api_client.get_user_info(args[:access_token])
30+
user_info.sub
31+
end
32+
33+
def get_folder_id_by_name(folders, folder_name)
34+
folders.each do |folder|
35+
if folder.name.downcase == folder_name.downcase
36+
return folder.folder_id
37+
end
38+
39+
if folder.folders&.any?
40+
folder_id = get_folder_id_by_name(folder.folders, folder_name)
41+
return folder_id if folder_id
42+
end
43+
end
44+
45+
nil
46+
end
47+
end
48+
49+
class FileUtils
50+
def replace_template_id(file_path, template_id)
51+
content = File.read(file_path)
52+
53+
content.gsub!('template-id', template_id)
54+
55+
File.write(file_path, content)
56+
end
57+
end
58+
59+
class URLUtils
60+
def get_parameter_value_from_url(url, param_name)
61+
parsed_url = URI.parse(url)
62+
query_params = URI.decode_www_form(parsed_url.query || '')
63+
64+
# Access the parameter value (returns a list)
65+
param_value_list = query_params.assoc(param_name)
66+
67+
# If the parameter exists, return the first value; otherwise, return nil
68+
param_value_list ? param_value_list[1] : nil
69+
end
70+
end
71+
end

app/views/e_sign/eeg045_delete_restore_envelope/restore.html.erb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,19 @@
33
<%= sanitize format_string(@manifest["SupportingTexts"]["HelpingTexts"]["EnvelopeWillBeRestored"], @envelope_id) %>
44

55
<% form_index = 0 %>
6+
<% folder_name_index = 1 %>
67

78
<form class="eg" action="" method="post" data-busy="form">
89
<% if @example["Forms"][form_index]["FormName"] %>
910
<%= sanitize @example["Forms"][form_index]["FormName"] %>
1011
<% end %>
1112

13+
<div class="form-group">
14+
<label for="folder_name"><%= @example["Forms"][form_index]["Inputs"][folder_name_index]["InputName"] %></label>
15+
<input type="text" class="form-control" id="folder_name" name="folder_name" required
16+
placeholder="<%= @example["Forms"][form_index]["Inputs"][folder_name_index]["InputPlaceholder"] %>">
17+
</div>
18+
1219
<%= render('partials/submit_button') %>
1320
</form>
1421

0 commit comments

Comments
 (0)