geoblacklight_admin 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/admin/document_licensed_accesses_controller.rb +169 -0
  3. data/app/controllers/admin/documents_controller.rb +12 -12
  4. data/app/controllers/admin/elements_controller.rb +1 -1
  5. data/app/controllers/admin/import_distributions_controller.rb +2 -1
  6. data/app/controllers/admin/imports_controller.rb +2 -1
  7. data/app/indexers/document_indexer.rb +2 -2
  8. data/app/javascript/controllers/results_controller.js +5 -15
  9. data/app/jobs/bulk_action_run_document_job.rb +12 -2
  10. data/app/jobs/export_job.rb +40 -30
  11. data/app/jobs/export_json_bulk_job.rb +1 -1
  12. data/app/jobs/export_json_job.rb +1 -1
  13. data/app/jobs/import_document_job.rb +12 -1
  14. data/app/jobs/import_run_job.rb +5 -0
  15. data/app/models/asset.rb +13 -3
  16. data/app/models/document/controlled_lists.rb +3 -2
  17. data/app/models/document/date_validator.rb +14 -12
  18. data/app/models/document.rb +21 -107
  19. data/app/models/{document_access.rb → document_licensed_access.rb} +8 -6
  20. data/app/models/geoblacklight_admin/schema.rb +0 -10
  21. data/app/models/import_document.rb +5 -0
  22. data/app/services/export_csv_document_distributions_service.rb +8 -4
  23. data/app/services/export_csv_document_licensed_access_links_service.rb +27 -0
  24. data/app/services/export_csv_service.rb +5 -1
  25. data/app/views/admin/document_assets/_assets_table.html.erb +4 -0
  26. data/app/views/admin/document_assets/index.html.erb +3 -1
  27. data/app/views/admin/document_distributions/destroy_all.html.erb +1 -1
  28. data/app/views/admin/document_distributions/index.html.erb +5 -7
  29. data/app/views/admin/document_licensed_accesses/_document_licensed_access.json.jbuilder +4 -0
  30. data/app/views/admin/{document_accesses → document_licensed_accesses}/_form.html.erb +4 -5
  31. data/app/views/admin/{document_accesses → document_licensed_accesses}/destroy_all.html.erb +7 -7
  32. data/app/views/admin/document_licensed_accesses/edit.html.erb +5 -0
  33. data/app/views/admin/{document_accesses → document_licensed_accesses}/import.html.erb +12 -9
  34. data/app/views/admin/document_licensed_accesses/index.html.erb +78 -0
  35. data/app/views/admin/document_licensed_accesses/index.json.jbuilder +3 -0
  36. data/app/views/admin/document_licensed_accesses/new.html.erb +8 -0
  37. data/app/views/admin/documents/_form_control.html.erb +0 -10
  38. data/app/views/admin/documents/_form_nav.html.erb +3 -12
  39. data/app/views/admin/documents/_form_nav_kithe.html.erb +0 -4
  40. data/app/views/admin/documents/_result_selected_options.html.erb +14 -18
  41. data/app/views/admin/documents/features/_document_references.html.erb +18 -20
  42. data/app/views/admin/documents/features/_licensed_access.html.erb +3 -0
  43. data/app/views/admin/elements/index.html.erb +0 -18
  44. data/app/views/admin/import_distributions/_form.html.erb +1 -1
  45. data/app/views/admin/import_distributions/_show_queued_tab.html.erb +36 -0
  46. data/app/views/admin/import_distributions/index.html.erb +3 -3
  47. data/app/views/admin/import_distributions/new.html.erb +3 -1
  48. data/app/views/admin/import_distributions/show.html.erb +5 -0
  49. data/app/views/admin/imports/_form.html.erb +1 -1
  50. data/app/views/admin/imports/_show_queued_tab.html.erb +31 -0
  51. data/app/views/admin/imports/index.html.erb +3 -3
  52. data/app/views/admin/imports/new.html.erb +3 -1
  53. data/app/views/admin/imports/show.html.erb +6 -0
  54. data/app/views/admin/notifications/_notification.html.haml +0 -1
  55. data/app/views/admin/notifications/index.html.erb +2 -2
  56. data/app/views/admin/notifications/update.js.erb +1 -1
  57. data/app/views/admin/shared/_navbar.html.erb +9 -8
  58. data/config/routes.rb +2 -25
  59. data/db/migrate/20240321000000_rename_document_accesses_to_document_licensed_accesses.rb +5 -0
  60. data/db/seeds_form_elements.csv +1 -2
  61. data/db/seeds_form_elements.numbers +0 -0
  62. data/lib/generators/geoblacklight_admin/config_generator.rb +4 -26
  63. data/lib/generators/geoblacklight_admin/templates/config/initializers/mime_types.rb +1 -1
  64. data/lib/geoblacklight_admin/version.rb +1 -1
  65. metadata +17 -30
  66. data/app/controllers/admin/document_accesses_controller.rb +0 -169
  67. data/app/controllers/admin/document_downloads_controller.rb +0 -129
  68. data/app/models/document_download.rb +0 -39
  69. data/app/services/export_csv_document_access_links_service.rb +0 -47
  70. data/app/services/export_csv_document_downloads_service.rb +0 -47
  71. data/app/views/admin/document_accesses/_document_access.json.jbuilder +0 -4
  72. data/app/views/admin/document_accesses/edit.html.erb +0 -5
  73. data/app/views/admin/document_accesses/index.html.erb +0 -78
  74. data/app/views/admin/document_accesses/index.json.jbuilder +0 -3
  75. data/app/views/admin/document_accesses/new.html.erb +0 -6
  76. data/app/views/admin/document_accesses/show.html.erb +0 -19
  77. data/app/views/admin/document_accesses/show.json.jbuilder +0 -3
  78. data/app/views/admin/document_downloads/_document_download.json.jbuilder +0 -4
  79. data/app/views/admin/document_downloads/_form.html.erb +0 -15
  80. data/app/views/admin/document_downloads/destroy_all.html.erb +0 -70
  81. data/app/views/admin/document_downloads/edit.html.erb +0 -5
  82. data/app/views/admin/document_downloads/import.html.erb +0 -74
  83. data/app/views/admin/document_downloads/index.html.erb +0 -72
  84. data/app/views/admin/document_downloads/index.json.jbuilder +0 -3
  85. data/app/views/admin/document_downloads/new.html.erb +0 -5
  86. data/app/views/admin/document_downloads/show.html.erb +0 -24
  87. data/app/views/admin/document_downloads/show.json.jbuilder +0 -3
  88. data/app/views/admin/documents/features/_institutional_access_links.html.erb +0 -3
  89. data/app/views/admin/documents/features/_multiple_download_links.html.erb +0 -30
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geoblacklight_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Larson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-14 00:00:00.000000000 Z
11
+ date: 2025-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_storage_validations
@@ -819,12 +819,11 @@ files:
819
819
  - app/controllers/admin/assets_controller.rb
820
820
  - app/controllers/admin/bookmarks_controller.rb
821
821
  - app/controllers/admin/bulk_actions_controller.rb
822
- - app/controllers/admin/document_accesses_controller.rb
823
822
  - app/controllers/admin/document_assets_controller.rb
824
823
  - app/controllers/admin/document_data_dictionaries_controller.rb
825
824
  - app/controllers/admin/document_data_dictionary_entries_controller.rb
826
825
  - app/controllers/admin/document_distributions_controller.rb
827
- - app/controllers/admin/document_downloads_controller.rb
826
+ - app/controllers/admin/document_licensed_accesses_controller.rb
828
827
  - app/controllers/admin/documents_controller.rb
829
828
  - app/controllers/admin/elements_controller.rb
830
829
  - app/controllers/admin/form_elements_controller.rb
@@ -896,12 +895,11 @@ files:
896
895
  - app/models/document/date_validator.rb
897
896
  - app/models/document/geom_validator.rb
898
897
  - app/models/document/reference.rb
899
- - app/models/document_access.rb
900
898
  - app/models/document_data_dictionary.rb
901
899
  - app/models/document_data_dictionary/csv_header_validator.rb
902
900
  - app/models/document_data_dictionary_entry.rb
903
901
  - app/models/document_distribution.rb
904
- - app/models/document_download.rb
902
+ - app/models/document_licensed_access.rb
905
903
  - app/models/document_state_machine.rb
906
904
  - app/models/document_thumbnail_state_machine.rb
907
905
  - app/models/document_thumbnail_transition.rb
@@ -942,9 +940,8 @@ files:
942
940
  - app/models/reference_type.rb
943
941
  - app/models/user.rb
944
942
  - app/notifications/export_notification.rb
945
- - app/services/export_csv_document_access_links_service.rb
946
943
  - app/services/export_csv_document_distributions_service.rb
947
- - app/services/export_csv_document_downloads_service.rb
944
+ - app/services/export_csv_document_licensed_access_links_service.rb
948
945
  - app/services/export_csv_service.rb
949
946
  - app/services/export_json_service.rb
950
947
  - app/services/geoblacklight_admin/image_service.rb
@@ -981,16 +978,6 @@ files:
981
978
  - app/views/admin/bulk_actions/new.html.erb
982
979
  - app/views/admin/bulk_actions/show.html.erb
983
980
  - app/views/admin/bulk_actions/show.json.jbuilder
984
- - app/views/admin/document_accesses/_document_access.json.jbuilder
985
- - app/views/admin/document_accesses/_form.html.erb
986
- - app/views/admin/document_accesses/destroy_all.html.erb
987
- - app/views/admin/document_accesses/edit.html.erb
988
- - app/views/admin/document_accesses/import.html.erb
989
- - app/views/admin/document_accesses/index.html.erb
990
- - app/views/admin/document_accesses/index.json.jbuilder
991
- - app/views/admin/document_accesses/new.html.erb
992
- - app/views/admin/document_accesses/show.html.erb
993
- - app/views/admin/document_accesses/show.json.jbuilder
994
981
  - app/views/admin/document_assets/_assets_table.html.erb
995
982
  - app/views/admin/document_assets/_form.html.erb
996
983
  - app/views/admin/document_assets/display_attach_form.html.erb
@@ -1020,16 +1007,14 @@ files:
1020
1007
  - app/views/admin/document_distributions/new.html.erb
1021
1008
  - app/views/admin/document_distributions/show.html.erb
1022
1009
  - app/views/admin/document_distributions/show.json.jbuilder
1023
- - app/views/admin/document_downloads/_document_download.json.jbuilder
1024
- - app/views/admin/document_downloads/_form.html.erb
1025
- - app/views/admin/document_downloads/destroy_all.html.erb
1026
- - app/views/admin/document_downloads/edit.html.erb
1027
- - app/views/admin/document_downloads/import.html.erb
1028
- - app/views/admin/document_downloads/index.html.erb
1029
- - app/views/admin/document_downloads/index.json.jbuilder
1030
- - app/views/admin/document_downloads/new.html.erb
1031
- - app/views/admin/document_downloads/show.html.erb
1032
- - app/views/admin/document_downloads/show.json.jbuilder
1010
+ - app/views/admin/document_licensed_accesses/_document_licensed_access.json.jbuilder
1011
+ - app/views/admin/document_licensed_accesses/_form.html.erb
1012
+ - app/views/admin/document_licensed_accesses/destroy_all.html.erb
1013
+ - app/views/admin/document_licensed_accesses/edit.html.erb
1014
+ - app/views/admin/document_licensed_accesses/import.html.erb
1015
+ - app/views/admin/document_licensed_accesses/index.html.erb
1016
+ - app/views/admin/document_licensed_accesses/index.json.jbuilder
1017
+ - app/views/admin/document_licensed_accesses/new.html.erb
1033
1018
  - app/views/admin/documents/_document.html.erb
1034
1019
  - app/views/admin/documents/_document_bookmark.html.erb
1035
1020
  - app/views/admin/documents/_document_fields.html.erb
@@ -1053,8 +1038,7 @@ files:
1053
1038
  - app/views/admin/documents/edit.html.erb
1054
1039
  - app/views/admin/documents/features/_assets.html.erb
1055
1040
  - app/views/admin/documents/features/_document_references.html.erb
1056
- - app/views/admin/documents/features/_institutional_access_links.html.erb
1057
- - app/views/admin/documents/features/_multiple_download_links.html.erb
1041
+ - app/views/admin/documents/features/_licensed_access.html.erb
1058
1042
  - app/views/admin/documents/fetch.json_aardvark.jbuilder
1059
1043
  - app/views/admin/documents/fetch.json_btaa_aardvark.jbuilder
1060
1044
  - app/views/admin/documents/fetch.json_file.jbuilder
@@ -1089,6 +1073,7 @@ files:
1089
1073
  - app/views/admin/import_distributions/_form.html.erb
1090
1074
  - app/views/admin/import_distributions/_import_distribution.json.jbuilder
1091
1075
  - app/views/admin/import_distributions/_show_failed_tab.html.erb
1076
+ - app/views/admin/import_distributions/_show_queued_tab.html.erb
1092
1077
  - app/views/admin/import_distributions/_show_success_tab.html.erb
1093
1078
  - app/views/admin/import_distributions/edit.html.erb
1094
1079
  - app/views/admin/import_distributions/index.html.erb
@@ -1100,6 +1085,7 @@ files:
1100
1085
  - app/views/admin/imports/_form.html.erb
1101
1086
  - app/views/admin/imports/_import.json.jbuilder
1102
1087
  - app/views/admin/imports/_show_failed_tab.html.erb
1088
+ - app/views/admin/imports/_show_queued_tab.html.erb
1103
1089
  - app/views/admin/imports/_show_success_tab.html.erb
1104
1090
  - app/views/admin/imports/edit.html.erb
1105
1091
  - app/views/admin/imports/index.html.erb
@@ -1166,6 +1152,7 @@ files:
1166
1152
  - db/import_references_schema_support.numbers
1167
1153
  - db/migrate/20230316183001_add_geoblacklight_admin_gem.rb
1168
1154
  - db/migrate/20231106215104_bulk_action_sti.rb
1155
+ - db/migrate/20240321000000_rename_document_accesses_to_document_licensed_accesses.rb
1169
1156
  - db/migrate/20240619171628_create_document_thumbnail_statesman.rb
1170
1157
  - db/migrate/20241009200524_create_admin_reference_types.rb
1171
1158
  - db/migrate/20241010161420_create_document_references.rb
@@ -1,169 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Admin::DocumentAccessesController
4
- #
5
- # This controller manages the CRUD operations for DocumentAccess objects
6
- # within the admin namespace. It provides actions to list, show, create,
7
- # update, and destroy document access records. It also includes custom
8
- # actions for importing and destroying all document access links.
9
- #
10
- # Actions:
11
- # - index: Lists all document accesses, optionally filtered by document_id.
12
- # - show: Displays a specific document access.
13
- # - new: Renders a form for creating a new document access.
14
- # - edit: Renders a form for editing an existing document access.
15
- # - create: Creates a new document access.
16
- # - update: Updates an existing document access.
17
- # - destroy: Deletes a specific document access.
18
- # - destroy_all: Deletes all document access links provided in the params.
19
- # - import: Imports document access links from a file provided in the params.
20
- #
21
- # Before Actions:
22
- # - set_document: Sets the @document instance variable if document_id is present.
23
- # - set_document_access: Sets the @document_access instance variable for specific actions.
24
- #
25
- # Private Methods:
26
- # - set_document: Finds and sets the document based on the document_id parameter.
27
- # - set_document_access: Finds and sets the document access based on the id parameter.
28
- # - document_access_params: Permits only trusted parameters for document access.
29
- module Admin
30
- class DocumentAccessesController < Admin::AdminController
31
- before_action :set_document
32
- before_action :set_document_access, only: %i[show edit update destroy]
33
-
34
- # GET /documents/#id/access
35
- # GET /documents/#id/access.json
36
- # Lists all document accesses, optionally filtered by document_id.
37
- def index
38
- if params[:document_id]
39
- @document_accesses = DocumentAccess.where(friendlier_id: @document.friendlier_id).order(institution_code: :asc)
40
- else
41
- @pagy, @document_accesses = pagy(DocumentAccess.all.order(friendlier_id: :asc, updated_at: :desc), items: 20)
42
- end
43
- end
44
-
45
- # GET /document_accesses/1
46
- # GET /document_accesses/1.json
47
- # Displays a specific document access.
48
- def show
49
- end
50
-
51
- # GET /document_accesses/new
52
- # Renders a form for creating a new document access.
53
- def new
54
- @document_access = DocumentAccess.new
55
- end
56
-
57
- # GET /document_accesses/1/edit
58
- # Renders a form for editing an existing document access.
59
- def edit
60
- end
61
-
62
- # POST /document_accesses
63
- # POST /document_accesses.json
64
- # Creates a new document access.
65
- def create
66
- @document_access = DocumentAccess.new(document_access_params)
67
- logger.debug("DA Params: #{DocumentAccess.new(document_access_params).inspect}")
68
- logger.debug("Document ACCESS: #{@document_access.inspect}")
69
-
70
- respond_to do |format|
71
- if @document_access.save
72
- format.html do
73
- redirect_to admin_document_document_accesses_path(@document), notice: "Document access was successfully created."
74
- end
75
- format.json { render :show, status: :created, location: @document_access }
76
- else
77
- format.html { render :new }
78
- format.json { render json: @document_access.errors, status: :unprocessable_entity }
79
- end
80
- end
81
- end
82
-
83
- # PATCH/PUT /document_accesses/1
84
- # PATCH/PUT /document_accesses/1.json
85
- # Updates an existing document access.
86
- def update
87
- respond_to do |format|
88
- if @document_access.update(document_access_params)
89
- format.html do
90
- redirect_to admin_document_document_accesses_path(@document), notice: "Document access was successfully updated."
91
- end
92
- format.json { render :show, status: :ok, location: @document_access }
93
- else
94
- format.html { render :edit }
95
- format.json { render json: @document_access.errors, status: :unprocessable_entity }
96
- end
97
- end
98
- end
99
-
100
- # DELETE /document_accesses/1
101
- # DELETE /document_accesses/1.json
102
- # Deletes a specific document access.
103
- def destroy
104
- @document_access.destroy
105
- respond_to do |format|
106
- format.html do
107
- redirect_to admin_document_document_accesses_path(@document), notice: "Document access was successfully destroyed."
108
- end
109
- format.json { head :no_content }
110
- end
111
- end
112
-
113
- # DELETE /document_accesses/destroy_all
114
- # Deletes all document access links provided in the params.
115
- def destroy_all
116
- logger.debug("Destroy Access Links")
117
- return unless params.dig(:document_access, :assets, :file)
118
-
119
- respond_to do |format|
120
- if DocumentAccess.destroy_all(params.dig(:document_access, :assets, :file))
121
- format.html { redirect_to admin_document_accesses_path, notice: "Document Access Links were created destroyed." }
122
- else
123
- format.html { redirect_to admin_document_accesses_path, notice: "Document Access Links could not be destroyed." }
124
- end
125
- rescue => e
126
- format.html { redirect_to admin_document_accesses_path, notice: "Document Access Links could not be destroyed. #{e}" }
127
- end
128
- end
129
-
130
- # GET /documents/#id/access/import
131
- # POST /documents/#id/access/import
132
- # Imports document access links from a file provided in the params.
133
- def import
134
- logger.debug("Import Action")
135
- return unless params.dig(:document_access, :assets, :file)
136
-
137
- respond_to do |format|
138
- if DocumentAccess.import(params.dig(:document_access, :assets, :file))
139
- format.html { redirect_to admin_document_accesses_path, notice: "Document access links were created successfully." }
140
- else
141
- format.html { redirect_to admin_document_accesses_path, notice: "Access URLs could not be created." }
142
- end
143
- rescue => e
144
- format.html { redirect_to admin_document_accesses_path, notice: "Access URLs could not be created. #{e}" }
145
- end
146
- end
147
-
148
- private
149
-
150
- # Use callbacks to share common setup or constraints between actions.
151
- # Finds and sets the document based on the document_id parameter.
152
- def set_document
153
- return unless params[:document_id] # If not nested
154
-
155
- @document = Document.includes(:leaf_representative).find_by!(friendlier_id: params[:document_id])
156
- end
157
-
158
- # Finds and sets the document access based on the id parameter.
159
- def set_document_access
160
- @document_access = DocumentAccess.find(params[:id])
161
- end
162
-
163
- # Only allow a list of trusted parameters through.
164
- # Permits only trusted parameters for document access.
165
- def document_access_params
166
- params.require(:document_access).permit(:friendlier_id, :institution_code, :access_url)
167
- end
168
- end
169
- end
@@ -1,129 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Admin::DocumentDownloadsController
4
- module Admin
5
- class DocumentDownloadsController < Admin::AdminController
6
- before_action :set_document
7
- before_action :set_document_download, only: %i[show edit update destroy]
8
-
9
- # GET /document_downloads or /document_downloads.json
10
- def index
11
- @document_downloads = DocumentDownload.all
12
- if params[:document_id]
13
- @document_downloads = DocumentDownload.where(friendlier_id: @document.friendlier_id).order(position: :asc)
14
- else
15
- @pagy, @document_downloads = pagy(DocumentDownload.all.order(friendlier_id: :asc, updated_at: :desc), items: 20)
16
- end
17
- end
18
-
19
- # GET /document_downloads/1 or /document_downloads/1.json
20
- def show
21
- end
22
-
23
- # GET /document_downloads/new
24
- def new
25
- @document_download = DocumentDownload.new
26
- end
27
-
28
- # GET /document_downloads/1/edit
29
- def edit
30
- end
31
-
32
- # POST /document_downloads or /document_downloads.json
33
- def create
34
- @document_download = DocumentDownload.new(document_download_params)
35
-
36
- logger.debug("DD Params: #{DocumentDownload.new(document_download_params).inspect}")
37
- logger.debug("Document DOWNLOAD: #{@document_download.inspect}")
38
-
39
- respond_to do |format|
40
- if @document_download.save
41
- format.html do
42
- redirect_to admin_document_document_downloads_path(@document_download.document),
43
- notice: "Document download was successfully created."
44
- end
45
- format.json { render :show, status: :created, location: @document_download }
46
- else
47
- format.html { render :new, status: :unprocessable_entity }
48
- format.json { render json: @document_download.errors, status: :unprocessable_entity }
49
- end
50
- end
51
- end
52
-
53
- # PATCH/PUT /document_downloads/1 or /document_downloads/1.json
54
- def update
55
- respond_to do |format|
56
- if @document_download.update(document_download_params)
57
- format.html do
58
- redirect_to admin_document_document_downloads_path(@document_download.document),
59
- notice: "Document download was successfully updated."
60
- end
61
- format.json { render :show, status: :ok, location: @document_download }
62
- else
63
- format.html { render :edit, status: :unprocessable_entity }
64
- format.json { render json: @document_download.errors, status: :unprocessable_entity }
65
- end
66
- end
67
- end
68
-
69
- # DELETE /document_downloads/1 or /document_downloads/1.json
70
- def destroy
71
- @document_download.destroy
72
-
73
- respond_to do |format|
74
- format.html { redirect_to admin_document_downloads_url, notice: "Document download was successfully destroyed." }
75
- format.json { head :no_content }
76
- end
77
- end
78
-
79
- def destroy_all
80
- logger.debug("Destroy Downloads")
81
- return unless params.dig(:document_download, :downloads, :file)
82
-
83
- respond_to do |format|
84
- if DocumentDownload.destroy_all(params.dig(:document_download, :downloads, :file))
85
- format.html { redirect_to admin_document_downloads_path, notice: "Download Links were destroyed." }
86
- else
87
- format.html { redirect_to admin_document_downloads_path, notice: "Download Links could not be destroyed." }
88
- end
89
- rescue => e
90
- format.html { redirect_to admin_document_downloads_path, notice: "Download Links could not be destroyed. #{e}" }
91
- end
92
- end
93
-
94
- # GET /documents/#id/downloads/import
95
- # POST /documents/#id/downloads/import
96
- def import
97
- logger.debug("Import Downloads")
98
- return unless params.dig(:document_download, :downloads, :file)
99
-
100
- respond_to do |format|
101
- if DocumentDownload.import(params.dig(:document_download, :downloads, :file))
102
- format.html { redirect_to admin_document_downloads_path, notice: "Download Links were created successfully." }
103
- else
104
- format.html { redirect_to admin_document_downloads_path, notice: "Download Links could not be created." }
105
- end
106
- rescue => e
107
- format.html { redirect_to admin_document_downloads_path, notice: "Download Links could not be created. #{e}" }
108
- end
109
- end
110
-
111
- private
112
-
113
- # Use callbacks to share common setup or constraints between actions.
114
- def set_document
115
- return unless params[:document_id] # If not nested
116
-
117
- @document = Document.includes(:leaf_representative).find_by!(friendlier_id: params[:document_id])
118
- end
119
-
120
- def set_document_download
121
- @document_download = DocumentDownload.find(params[:id])
122
- end
123
-
124
- # Only allow a list of trusted parameters through.
125
- def document_download_params
126
- params.require(:document_download).permit(:friendlier_id, :label, :value, :position)
127
- end
128
- end
129
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "csv"
4
-
5
- # DocumentDownload
6
- class DocumentDownload < ApplicationRecord
7
- belongs_to :document, inverse_of: :document_downloads, foreign_key: :friendlier_id, primary_key: :friendlier_id
8
- after_save :reindex_document
9
-
10
- # Validations
11
- validates :label, :value, presence: true
12
-
13
- def self.import(file)
14
- logger.debug("CSV Import")
15
- ::CSV.foreach(file.path, headers: true) do |row|
16
- logger.debug("CSV Row: #{row.to_hash}")
17
- document_download = DocumentDownload.find_or_initialize_by(friendlier_id: row[0], label: row[1], value: row[2])
18
- document_download.update!(row.to_hash)
19
- end
20
- true
21
- end
22
-
23
- def self.destroy_all(file)
24
- logger.debug("CSV Destroy")
25
- ::CSV.foreach(file.path, headers: true) do |row|
26
- logger.debug("CSV Row: #{row.to_hash}")
27
- DocumentDownload.destroy_by(id: row[0], friendlier_id: row[1])
28
- end
29
- true
30
- end
31
-
32
- def to_csv
33
- attributes.values
34
- end
35
-
36
- def reindex_document
37
- document.save
38
- end
39
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "csv"
4
-
5
- # ExportCsvDocumentAccessLinksService
6
- class ExportCsvDocumentAccessLinksService
7
- def self.short_name
8
- "Document Access Links"
9
- end
10
-
11
- def self.call(document_ids)
12
- ActionCable.server.broadcast("export_channel", {progress: 0})
13
-
14
- document_ids = document_ids.flatten
15
- total = document_ids.size
16
- count = 0
17
- slice_count = 100
18
- csv_file = []
19
-
20
- Rails.logger.debug { "\n\nExportCsvDocumentAccessLinksService: #{document_ids.inspect}\n\n" }
21
-
22
- CSV.generate(headers: true) do |_csv|
23
- csv_file << DocumentAccess.column_names
24
- document_ids.each_slice(slice_count) do |slice|
25
- # Broadcast progress percentage
26
- count += slice_count
27
- progress = ((count.to_f / total) * 100).round
28
- progress = 100 if progress > 100
29
-
30
- ActionCable.server.broadcast("export_channel", {progress: progress})
31
- slice.each do |doc_id|
32
- doc = Document.find_by(friendlier_id: doc_id)
33
-
34
- Rails.logger.debug { "\n\nDocAccessLinks: #{doc.document_accesses.size}\n\n" }
35
-
36
- doc.document_accesses.each do |access|
37
- csv_file << access.to_csv
38
- end
39
- rescue NoMethodError
40
- Rails.logger.debug { "\n\nExport Failed: #{doc_id.inspect}\n\n" }
41
- end
42
- end
43
- end
44
-
45
- csv_file
46
- end
47
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "csv"
4
-
5
- # ExportCsvDocumentDownloadsService
6
- class ExportCsvDocumentDownloadsService
7
- def self.short_name
8
- "Document Downloads"
9
- end
10
-
11
- def self.call(document_ids)
12
- ActionCable.server.broadcast("export_channel", {progress: 0})
13
-
14
- document_ids = document_ids.flatten
15
- total = document_ids.size
16
- count = 0
17
- slice_count = 100
18
- csv_file = []
19
-
20
- Rails.logger.debug { "\n\nExportCsvDocumentDownloadsService: #{document_ids.inspect}\n\n" }
21
-
22
- CSV.generate(headers: true) do |_csv|
23
- csv_file << DocumentDownload.column_names
24
- document_ids.each_slice(slice_count) do |slice|
25
- # Broadcast progress percentage
26
- count += slice_count
27
- progress = ((count.to_f / total) * 100).round
28
- progress = 100 if progress > 100
29
-
30
- ActionCable.server.broadcast("export_channel", {progress: progress})
31
- slice.each do |doc_id|
32
- doc = Document.find_by(friendlier_id: doc_id)
33
-
34
- Rails.logger.debug { "\n\nDocDownloads: #{doc.document_downloads.size}\n\n" }
35
-
36
- doc.document_downloads.each do |download|
37
- csv_file << download.to_csv
38
- end
39
- rescue NoMethodError
40
- Rails.logger.debug { "\n\nExport Failed: #{doc_id.inspect}\n\n" }
41
- end
42
- end
43
- end
44
-
45
- csv_file
46
- end
47
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- json.extract! document_access, :id, :kithe_model_id, :institution_code, :access_url, :created_at, :updated_at
4
- json.url document_access_url(document_access, format: :json)
@@ -1,5 +0,0 @@
1
- <h1>Editing Document Access</h1>
2
-
3
- <%= render 'form', document_access: @document_access %>
4
-
5
- <%= link_to 'Back', admin_document_document_accesses_path(@document) %>
@@ -1,78 +0,0 @@
1
- <%- @page_title = "GBL♦Admin - Document - Access Links" %>
2
-
3
- <div class="row mb-2">
4
- <div class="col">
5
- <h1 style="width:100%;">
6
- Document &middot; Access Links
7
-
8
- <% if params[:document_id] %>
9
- <%= link_to '+ Import CSV', import_admin_document_document_accesses_path(@document), { class: 'btn btn-primary float-right' } %>
10
-
11
- <%= link_to '+ New Access URL', new_admin_document_document_access_path(@document), { class: 'btn btn-primary float-right mr-2' } %>
12
- <% else %>
13
- <%= link_to '- Delete CSV', destroy_all_admin_document_accesses_path, { class: 'btn btn-danger float-right' } %>
14
- <%= link_to '+ Import CSV', import_admin_document_accesses_path, { class: 'btn btn-primary float-right mr-4' } %>
15
- <% end %>
16
- </h1>
17
- <% if params[:document_id] %>
18
- <h2 class='h3'>
19
- <%= link_to(@document.title, admin_document_path(@document)) %>
20
- &middot;
21
- <%= @document_accesses.count %> urls
22
- </h2>
23
- <% else %>
24
- <h2 class='h3'>Institutional Access Links</h2>
25
- <% end %>
26
-
27
- <% if @pagy %>
28
- <h6>
29
- <span class='float-left mt-3'>
30
- <%== pagy_info(@pagy) %>
31
- </span>
32
- <span class='float-right'>
33
- <%== pagy_bootstrap_nav(@pagy) %>
34
- </span>
35
- </h6>
36
- <% end %>
37
-
38
-
39
- <table class="table table-striped table-bordered sortable">
40
- <thead class="thead-dark">
41
- <tr>
42
- <th class="header">id</th>
43
- <th class="header">friendlier_id</th>
44
- <th class="header">institution_code</th>
45
- <th class="header">institution_name</th>
46
- <th class="header" style="max-width:200px;">access_url</th>
47
- <th class="header" colspan="2">Actions</th>
48
- </tr>
49
- </thead>
50
-
51
- <tbody>
52
- <% @document_accesses.each do |document_access| %>
53
- <tr>
54
- <td><%= document_access.id %></td>
55
- <td><%= link_to document_access.friendlier_id, admin_document_path(document_access.document) %></td>
56
- <td><%= document_access.institution_code %></td>
57
- <td><%= b1g_institution_codes[document_access.institution_code] %></td>
58
- <td><%= link_to(document_access.access_url, document_access.access_url) %></td>
59
- <td><%= link_to 'Edit', edit_admin_document_document_access_path(document_access.document, document_access) %></td>
60
- <td><%= link_to 'Destroy', admin_document_document_access_path(document_access.document, document_access), method: :delete, data: { confirm: 'Are you sure?' } %></td>
61
- </tr>
62
- <% end %>
63
- </tbody>
64
- </table>
65
-
66
- <% if @pagy %>
67
- <h6>
68
- <span class='float-left mt-3'>
69
- <%== pagy_info(@pagy) %>
70
- </span>
71
- <span class='float-right'>
72
- <%== pagy_bootstrap_nav(@pagy) %>
73
- </span>
74
- </h6>
75
- <% end %>
76
- </div>
77
- </div>
78
- </div>
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- json.array! @document_accesses, partial: "document_accesses/document_access", as: :document_access
@@ -1,6 +0,0 @@
1
- <h1>New Document Access</h1>
2
- <h2 class='h3'><%= @document.title %></h2>
3
-
4
- <%= render 'form', document_access: @document_access %>
5
-
6
- <%= link_to 'Back', admin_document_document_accesses_path(@document) %>