geoblacklight_admin 0.5.1 → 0.6.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.
- checksums.yaml +4 -4
- data/README.md +18 -9
- data/Rakefile +83 -47
- data/app/assets/javascripts/geoblacklight_admin/chosen.js +1 -0
- data/app/assets/stylesheets/geoblacklight_admin/_core.scss +24 -0
- data/app/assets/stylesheets/geoblacklight_admin/modules/_nav.scss +0 -5
- data/app/assets/stylesheets/geoblacklight_admin/modules/_tables.scss +1 -1
- data/app/controllers/admin/admin_controller.rb +16 -0
- data/app/controllers/admin/advanced_search_controller.rb +1 -1
- data/app/controllers/admin/assets_controller.rb +41 -5
- data/app/controllers/admin/bookmarks_controller.rb +14 -2
- data/app/controllers/admin/bulk_actions_controller.rb +31 -0
- data/app/controllers/admin/document_accesses_controller.rb +38 -0
- data/app/controllers/admin/document_assets_controller.rb +46 -9
- data/app/controllers/admin/document_distributions_controller.rb +172 -0
- data/app/controllers/admin/documents_controller.rb +41 -55
- data/app/controllers/admin/elements_controller.rb +22 -0
- data/app/controllers/admin/form_elements_controller.rb +31 -0
- data/app/controllers/admin/import_documents_controller.rb +11 -1
- data/app/controllers/admin/imports_controller.rb +32 -2
- data/app/controllers/admin/mappings_controller.rb +15 -0
- data/app/controllers/admin/notifications_controller.rb +27 -0
- data/app/controllers/admin/reference_types_controller.rb +106 -0
- data/app/controllers/admin/search_controller.rb +7 -0
- data/app/controllers/admin/users_controller.rb +10 -0
- data/app/helpers/asset_helper.rb +6 -0
- data/app/helpers/bulk_actions_helper.rb +9 -0
- data/app/helpers/document_helper.rb +36 -0
- data/app/helpers/geoblacklight_admin_helper.rb +88 -8
- data/app/helpers/mappings_helper.rb +26 -0
- data/app/indexers/document_indexer.rb +22 -2
- data/app/javascript/channels/consumer.js +6 -0
- data/app/javascript/channels/export_channel.js +30 -0
- data/app/javascript/channels/index.js +3 -0
- data/app/javascript/controllers/results_controller.js +14 -0
- data/app/javascript/index.js +8 -2
- data/app/jobs/export_job.rb +35 -8
- data/app/jobs/geoblacklight_admin/delete_thumbnail_job.rb +19 -0
- data/app/jobs/geoblacklight_admin/remove_parent_dct_references_uri_job.rb +16 -0
- data/app/jobs/geoblacklight_admin/set_parent_dct_references_uri_job.rb +17 -0
- data/app/jobs/geoblacklight_admin/store_image_job.rb +22 -0
- data/app/models/asset.rb +20 -0
- data/app/models/bulk_action.rb +2 -1
- data/app/models/document/geom_validator.rb +8 -0
- data/app/models/document/reference.rb +65 -65
- data/app/models/document.rb +128 -71
- data/app/models/document_distribution.rb +145 -0
- data/app/models/element.rb +2 -0
- data/app/models/geoblacklight_admin/schema.rb +10 -2
- data/app/models/import_document_state_machine.rb +1 -0
- data/app/models/reference_type.rb +40 -0
- data/app/models/user.rb +4 -2
- data/app/services/export_csv_document_distributions_service.rb +61 -0
- data/app/services/geoblacklight_admin/image_service/tms.rb +0 -4
- data/app/services/geoblacklight_admin/image_service.rb +1 -1
- data/app/services/geoblacklight_admin/item_viewer.rb +4 -4
- data/app/views/admin/bulk_actions/show.html.erb +1 -1
- data/app/views/admin/document_accesses/import.html.erb +6 -2
- data/app/views/admin/document_assets/_assets_table.html.erb +49 -0
- data/app/views/admin/document_assets/_form.html.erb +2 -3
- data/app/views/admin/document_assets/index.html.erb +1 -47
- data/app/views/admin/document_distributions/_document_distribution.html.erb +39 -0
- data/app/views/admin/document_distributions/_document_distribution.json.jbuilder +2 -0
- data/app/views/admin/document_distributions/_form.html.erb +34 -0
- data/app/views/admin/document_distributions/destroy_all.html.erb +82 -0
- data/app/views/admin/document_distributions/edit.html.erb +12 -0
- data/app/views/admin/document_distributions/import.html.erb +80 -0
- data/app/views/admin/document_distributions/index.html.erb +143 -0
- data/app/views/admin/document_distributions/index.json.jbuilder +1 -0
- data/app/views/admin/document_distributions/new.html.erb +11 -0
- data/app/views/admin/document_distributions/show.html.erb +10 -0
- data/app/views/admin/document_distributions/show.json.jbuilder +1 -0
- data/app/views/admin/documents/_document.html.erb +1 -3
- data/app/views/admin/documents/_form.html.erb +2 -4
- data/app/views/admin/documents/_form_control.html.erb +5 -2
- data/app/views/admin/documents/_form_nav.html.erb +14 -5
- data/app/views/admin/documents/_form_nav_kithe.html.erb +4 -1
- data/app/views/admin/documents/_json_aardvark.jbuilder +1 -1
- data/app/views/admin/documents/_json_gbl_v1.jbuilder +1 -1
- data/app/views/admin/documents/_result_selected_options.html.erb +5 -2
- data/app/views/admin/documents/admin.html.erb +5 -5
- data/app/views/admin/documents/features/_document_references.html.erb +23 -0
- data/app/views/admin/documents/features/_multiple_download_links.html.erb +29 -26
- data/app/views/admin/ids/fetch.json.jbuilder +0 -2
- data/app/views/admin/ids/index.json.jbuilder +0 -2
- data/app/views/admin/imports/_form.html.erb +1 -1
- data/app/views/admin/imports/show.html.erb +1 -1
- data/app/views/admin/layouts/application.html.erb +4 -2
- data/app/views/admin/reference_types/_form.html.erb +25 -0
- data/app/views/admin/reference_types/_reference_type.html.erb +52 -0
- data/app/views/admin/reference_types/_reference_type.json.jbuilder +2 -0
- data/app/views/admin/reference_types/edit.html.erb +12 -0
- data/app/views/admin/reference_types/index.html.erb +52 -0
- data/app/views/admin/reference_types/index.json.jbuilder +1 -0
- data/app/views/admin/reference_types/new.html.erb +11 -0
- data/app/views/admin/reference_types/show.html.erb +3 -0
- data/app/views/admin/reference_types/show.json.jbuilder +1 -0
- data/app/views/admin/shared/_footer.html.erb +5 -2
- data/app/views/admin/shared/_js_behaviors.html.erb +2 -3
- data/app/views/admin/shared/_navbar.html.erb +9 -2
- data/app/views/admin/users/index.html.erb +0 -1
- data/app/views/catalog/_show_gbl_admin.html.erb +1 -1
- data/config/initializers/defaults.yml +310 -0
- data/config/initializers/rails_config.rb +8 -0
- data/config/locales/documents.en.yml +14 -0
- data/config/routes.rb +30 -5
- data/db/import_references_schema_support.numbers +0 -0
- data/db/migrate/20230316183001_add_geoblacklight_admin_gem.rb +0 -12
- data/db/migrate/20241009200524_create_admin_reference_types.rb +13 -0
- data/db/migrate/20241010161420_create_document_references.rb +14 -0
- data/db/migrate/20241120238823_rename_references_to_distributions.rb +5 -0
- data/db/seeds.rb +5 -0
- data/db/seeds_elements.csv +1 -1
- data/db/seeds_elements.numbers +0 -0
- data/db/seeds_reference_types.csv +29 -0
- data/db/seeds_reference_types.numbers +0 -0
- data/db/structure.sql +1 -38
- data/lib/compose.yml +31 -0
- data/lib/generators/geoblacklight_admin/config_generator.rb +48 -12
- data/lib/generators/geoblacklight_admin/install_generator.rb +8 -0
- data/lib/generators/geoblacklight_admin/templates/config/database.yml +1 -1
- data/lib/generators/geoblacklight_admin/templates/config/initializers/devise.rb +0 -2
- data/lib/generators/geoblacklight_admin/templates/config/initializers/mime_types.rb +1 -0
- data/lib/generators/geoblacklight_admin/templates/demo-app/Dockerfile +31 -0
- data/lib/generators/geoblacklight_admin/templates/demo-app/compose.yml +42 -0
- data/lib/generators/geoblacklight_admin/templates/demo-app/start-server.sh +21 -0
- data/lib/geoblacklight_admin/engine.rb +4 -0
- data/lib/geoblacklight_admin/tasks/distributions.rake +69 -0
- data/lib/geoblacklight_admin/tasks/images.rake +1 -0
- data/lib/geoblacklight_admin/tasks/solr.rake +31 -0
- data/lib/geoblacklight_admin/version.rb +1 -1
- data/lib/geoblacklight_admin.rb +4 -0
- metadata +78 -41
- data/app/javascript/entrypoints/engine.js +0 -8
- data/config/locales/devise_invitable.en.yml +0 -31
- data/lib/generators/geoblacklight_admin/templates/devise/invitations/edit.html.erb +0 -15
- data/lib/generators/geoblacklight_admin/templates/devise/invitations/new.html.erb +0 -15
- data/lib/generators/geoblacklight_admin/templates/devise/mailer/invitation_instructions.html.erb +0 -11
- data/lib/generators/geoblacklight_admin/templates/devise/mailer/invitation_instructions.text.erb +0 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fb7dfdea7cb8626ae4e65999624310642a89c81cea03a8d0e58a5649c080091b
|
|
4
|
+
data.tar.gz: e08e45d57f47e372d574e7cce41e1babd93697741a1261a22dcf816e07a0b74b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b7e2504e7f0fb46e55e0ba3359577a4d6e90842afa5c6be608e79a52d2b278ec39fe24812b68d8ca6d950ff2ef7842905550bb2a1354ba012f82f8b6349da154
|
|
7
|
+
data.tar.gz: d913fe08b848b6b9a2f2cd730570cecbb1f0e98157540b967306fc903ee7433bdae04a422b7d0b06c20678103bd30440bfaa939b04369c9b9f100bdd55611a65
|
data/README.md
CHANGED
|
@@ -28,12 +28,19 @@ You need a PostgreSQL database to use this project.
|
|
|
28
28
|
|
|
29
29
|
### Install Template
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
#### 1. Create your geoblacklight_admin_development PostgreSQL database
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
|
|
34
|
+
psql postgres
|
|
35
|
+
CREATE DATABASE geoblacklight_admin_development;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
#### 2. Bootstrap a new GeoBlacklight + GBL Admin application using the template script:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
rails _7.2.2_ new gbl_admin -m https://raw.githubusercontent.com/geobtaa/geoblacklight_admin/develop/template.rb
|
|
35
42
|
cd gbl_admin
|
|
36
|
-
bundle exec rake
|
|
43
|
+
bundle exec rake geoblacklight:server
|
|
37
44
|
```
|
|
38
45
|
|
|
39
46
|
You have now generated the .internal_test_app and populated the Elements / FormElements tables for OMG Aardvark support.
|
|
@@ -44,7 +51,7 @@ You have now generated the .internal_test_app and populated the Elements / FormE
|
|
|
44
51
|
2. Click on the "Sign in" link
|
|
45
52
|
3. Enter email: admin@geoblacklight.org and password: 123456
|
|
46
53
|
4. Click on the "GBL Admin" link
|
|
47
|
-
5. Import some CSV (test/fixtures/files/btaa_sample_records.csv)
|
|
54
|
+
5. Import some CSV data (test/fixtures/files/btaa_sample_records.csv)
|
|
48
55
|
|
|
49
56
|
-----
|
|
50
57
|
|
|
@@ -58,10 +65,12 @@ The gem is available as open source under the terms of the [Apache 2.0 License](
|
|
|
58
65
|
## TODOs / Roadmap
|
|
59
66
|
* ~~Send GBLADMIN JavaScript pack to NPM like Blacklight~~
|
|
60
67
|
* ~~Improve test coverage~~
|
|
61
|
-
* Fix CI test runner
|
|
62
|
-
* Debug Rails 7.2 support
|
|
63
|
-
* Separate dct_references_s support into a separate model
|
|
64
|
-
* Import/Export dct_references_s outside of the main document model
|
|
65
|
-
* Migrate our GBL
|
|
68
|
+
* ~~Fix CI test runner~~
|
|
69
|
+
* ~~Debug Rails 7.2 support (remove devise_invitable, see [#915](https://github.com/scambra/devise_invitable/issues/915))~~
|
|
70
|
+
* ~~Separate dct_references_s support into a separate model~~
|
|
71
|
+
* ~~Import/Export dct_references_s outside of the main document model~~
|
|
72
|
+
* Migrate our GBL API controllers to just RSolr-based models
|
|
66
73
|
* DRY up Gem dependencies and Engine routing
|
|
74
|
+
* Gazetteer: Add GeoNames support
|
|
75
|
+
* Gazetteer: Add Who's On First support
|
|
67
76
|
* Remove any remaining GEOMG references
|
data/Rakefile
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require "rubygems"
|
|
4
4
|
require "rails"
|
|
5
|
+
require "database_cleaner/active_record"
|
|
5
6
|
|
|
6
7
|
require "bundler/setup"
|
|
7
8
|
|
|
@@ -13,15 +14,12 @@ load "rails/tasks/statistics.rake"
|
|
|
13
14
|
|
|
14
15
|
require "bundler/gem_tasks"
|
|
15
16
|
|
|
16
|
-
require "solr_wrapper"
|
|
17
|
-
|
|
18
17
|
require "rspec/core/rake_task"
|
|
19
18
|
RSpec::Core::RakeTask.new(:spec)
|
|
20
19
|
|
|
21
20
|
require "rubocop/rake_task"
|
|
22
21
|
RuboCop::RakeTask.new(:rubocop)
|
|
23
22
|
|
|
24
|
-
require "solr_wrapper/rake_task"
|
|
25
23
|
require "engine_cart/rake_task"
|
|
26
24
|
require "geoblacklight_admin/version"
|
|
27
25
|
require "rake/testtask"
|
|
@@ -40,66 +38,104 @@ end
|
|
|
40
38
|
task default: :test
|
|
41
39
|
|
|
42
40
|
desc "Run test suite"
|
|
43
|
-
task ci
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
task :ci do
|
|
42
|
+
# Reset the database if the test app exists
|
|
43
|
+
if File.exist? EngineCart.destination
|
|
44
|
+
within_test_app do
|
|
45
|
+
system "bundle exec rake db:reset"
|
|
46
|
+
end
|
|
49
47
|
end
|
|
50
48
|
|
|
51
|
-
#
|
|
52
|
-
Rake::Task["geoblacklight:
|
|
53
|
-
end
|
|
49
|
+
# Start docker
|
|
50
|
+
Rake::Task["geoblacklight:admin:docker:start"].invoke
|
|
54
51
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
task :coverage do
|
|
58
|
-
ENV["COVERAGE"] = "true"
|
|
59
|
-
# Rake::Task["spec"].invoke
|
|
60
|
-
Rake::Task["test"].invoke
|
|
61
|
-
end
|
|
52
|
+
# Create the test rails app
|
|
53
|
+
Rake::Task["geoblacklight:admin:generate"].invoke
|
|
62
54
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
# Intentionally Empty Block
|
|
66
|
-
end
|
|
55
|
+
# Run Minitest tests with Coverage
|
|
56
|
+
Rake::Task["geoblacklight:admin:coverage"].invoke
|
|
67
57
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
system "bundle exec rake db:seed"
|
|
72
|
-
system "bundle exec rake geoblacklight:downloads:mkdir"
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
58
|
+
# Stop docker
|
|
59
|
+
Rake::Task["geoblacklight:admin:docker:stop"].invoke
|
|
60
|
+
end
|
|
76
61
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
62
|
+
namespace :geoblacklight do
|
|
63
|
+
namespace :admin do
|
|
64
|
+
desc "Run GeoBlacklight Admin and Solr with seed data for interactive development"
|
|
65
|
+
task :server, [:rails_server_args] do |_t, args|
|
|
66
|
+
if File.exist? EngineCart.destination
|
|
67
|
+
within_test_app do
|
|
68
|
+
system "bundle update"
|
|
69
|
+
end
|
|
70
|
+
else
|
|
71
|
+
Rake::Task["engine_cart:generate"].invoke
|
|
82
72
|
end
|
|
83
|
-
else
|
|
84
|
-
Rake::Task["engine_cart:generate"].invoke
|
|
85
|
-
end
|
|
86
73
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
dir: File.join(File.expand_path(".", File.dirname(__FILE__)),
|
|
90
|
-
"solr", "conf")) do
|
|
91
|
-
Rake::Task["geoblacklight:internal:seed"].invoke
|
|
74
|
+
system "docker compose up -d"
|
|
75
|
+
Rake::Task["geoblacklight:admin:internal:seed"].invoke
|
|
92
76
|
|
|
77
|
+
begin
|
|
93
78
|
within_test_app do
|
|
94
|
-
puts "\nSolr server running: http://localhost
|
|
95
|
-
puts "\
|
|
79
|
+
puts "\nSolr server running: http://localhost:8983/solr/#/blacklight-core"
|
|
80
|
+
puts "\nPostgreSQL server running: http://localhost:5555"
|
|
96
81
|
puts " "
|
|
97
82
|
begin
|
|
98
|
-
|
|
83
|
+
system "bundle exec rails s #{args[:rails_server_args]}"
|
|
99
84
|
rescue Interrupt
|
|
100
85
|
puts "Shutting down..."
|
|
101
86
|
end
|
|
102
87
|
end
|
|
88
|
+
ensure
|
|
89
|
+
system "docker compose down"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
desc "Run tests with coverage"
|
|
94
|
+
task :coverage do
|
|
95
|
+
ENV["COVERAGE"] = "true"
|
|
96
|
+
Rake::Task["test"].invoke
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
desc "Create the test rails app"
|
|
100
|
+
task generate: ["engine_cart:generate"] do
|
|
101
|
+
# system "bundle exec rake db:reset"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
namespace :internal do
|
|
105
|
+
task seed: ["engine_cart:generate"] do
|
|
106
|
+
within_test_app do
|
|
107
|
+
system "Settings.reload!"
|
|
108
|
+
system "bundle exec rake db:reset"
|
|
109
|
+
system "bundle exec rake db:seed"
|
|
110
|
+
system "bundle exec rake geoblacklight:downloads:mkdir"
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
desc "Run Solr and seed with sample data"
|
|
116
|
+
task :solr do
|
|
117
|
+
if File.exist? EngineCart.destination
|
|
118
|
+
within_test_app do
|
|
119
|
+
system "bundle update"
|
|
120
|
+
end
|
|
121
|
+
else
|
|
122
|
+
Rake::Task["engine_cart:generate"].invoke
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
namespace :docker do
|
|
127
|
+
desc "Start docker and seed with sample data"
|
|
128
|
+
task :start do
|
|
129
|
+
system "docker compose up -d"
|
|
130
|
+
Rake::Task["geoblacklight:admin:internal:seed"].invoke
|
|
131
|
+
puts "\nSolr server running: http://localhost:8983/solr/#/blacklight-core"
|
|
132
|
+
puts "\nPostgreSQL server running: http://localhost:5555"
|
|
133
|
+
puts " "
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
desc "Stop docker"
|
|
137
|
+
task :stop do
|
|
138
|
+
system "docker compose down"
|
|
103
139
|
end
|
|
104
140
|
end
|
|
105
141
|
end
|
|
@@ -45,10 +45,34 @@ footer.gbl-admin {
|
|
|
45
45
|
box-shadow: inset 0 0 0 50vw rgba(0, 0, 0, 0.8);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
main#gbl-admin {
|
|
49
|
+
min-height: 75vh;
|
|
50
|
+
margin-top: 0rem;
|
|
51
|
+
}
|
|
52
|
+
|
|
48
53
|
main.container-fluid {
|
|
49
54
|
margin-top: 5rem;
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
.navbar-brand.gbl-admin {
|
|
53
58
|
background: none;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
kbd {
|
|
62
|
+
background-color:aliceblue;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
a.btn.btn-gbl-admin {
|
|
66
|
+
color: black;
|
|
67
|
+
border-color: #ffc107;
|
|
68
|
+
margin: 1rem 0;
|
|
69
|
+
|
|
70
|
+
&:visited {
|
|
71
|
+
color: black;
|
|
72
|
+
background-color: #ffc107;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
div.dropdown-menu.show {
|
|
77
|
+
z-index: 2000;
|
|
54
78
|
}
|
|
@@ -1,18 +1,34 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# The Admin module contains controllers for the admin section of the application.
|
|
3
4
|
module Admin
|
|
5
|
+
# AdminController is the base controller for all admin-related controllers.
|
|
6
|
+
# It includes necessary modules and provides authentication for admin users.
|
|
4
7
|
class AdminController < ApplicationController
|
|
8
|
+
# Includes Devise helpers for authentication.
|
|
5
9
|
include Devise::Controllers::Helpers
|
|
10
|
+
# Includes Pagy for pagination.
|
|
6
11
|
include ::Pagy::Backend
|
|
12
|
+
# Sets the layout for the admin section.
|
|
7
13
|
layout "admin/layouts/application"
|
|
8
14
|
|
|
15
|
+
# Before any action, ensure the user is authenticated as an admin.
|
|
9
16
|
before_action :authenticate_admin!
|
|
17
|
+
before_action :set_action_cable_identifier
|
|
10
18
|
|
|
11
19
|
protected
|
|
12
20
|
|
|
21
|
+
# Authenticates the user and checks if they are an admin.
|
|
22
|
+
# Redirects to a specified location with a forbidden status if the user is not an admin.
|
|
13
23
|
def authenticate_admin!
|
|
14
24
|
authenticate_user!
|
|
15
25
|
redirect_to :somewhere, status: :forbidden unless current_user.admin?
|
|
16
26
|
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def set_action_cable_identifier
|
|
31
|
+
cookies.encrypted[:user_id] = current_user&.id
|
|
32
|
+
end
|
|
17
33
|
end
|
|
18
34
|
end
|
|
@@ -76,7 +76,7 @@ module Admin
|
|
|
76
76
|
# config.index.record_display_type = 'format'
|
|
77
77
|
|
|
78
78
|
config.index.title_field = Settings.FIELDS.TITLE
|
|
79
|
-
config.index.document_presenter_class = Geoblacklight::DocumentPresenter
|
|
79
|
+
config.index.document_presenter_class = ::Geoblacklight::DocumentPresenter
|
|
80
80
|
|
|
81
81
|
# solr field configuration for document/show views
|
|
82
82
|
|
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Admin::AssetsController
|
|
4
|
+
#
|
|
5
|
+
# This controller handles the management of assets within the admin namespace.
|
|
6
|
+
# It provides actions to list, show, edit, update, and destroy assets.
|
|
7
|
+
# Additionally, it supports attaching files to assets.
|
|
8
|
+
#
|
|
9
|
+
# Actions:
|
|
10
|
+
# - index: Lists all assets with optional search functionality.
|
|
11
|
+
# - show: Displays a specific asset.
|
|
12
|
+
# - edit: Provides a form to edit an asset.
|
|
13
|
+
# - update: Updates an asset with new data.
|
|
14
|
+
# - destroy: Deletes an asset.
|
|
15
|
+
# - display_attach_form: Displays a form to attach files to an asset.
|
|
16
|
+
# - attach_files: Attaches files to an asset based on provided JSON data.
|
|
17
|
+
#
|
|
18
|
+
# Private Methods:
|
|
19
|
+
# - parent_id_via_friendly_id: Finds a document's ID using its friendlier_id.
|
|
20
|
+
# - set_asset: Finds and sets an asset based on the provided ID.
|
|
21
|
+
# - asset_params: Permits only trusted parameters for asset updates.
|
|
22
|
+
# - date_check?: Checks if a value can be converted to a date.
|
|
4
23
|
module Admin
|
|
5
24
|
class AssetsController < Admin::AdminController
|
|
6
25
|
before_action :set_asset, only: %i[show edit update destroy]
|
|
7
26
|
|
|
8
27
|
# GET /admin/asset_files
|
|
28
|
+
#
|
|
29
|
+
# Lists all assets. Supports searching by ID, friendlier_id, title, or parent_id.
|
|
30
|
+
# If a date is provided as a search query, it filters assets created on that date.
|
|
9
31
|
def index
|
|
10
32
|
scope = Asset
|
|
11
33
|
search_query = params[:q].strip if params[:q].present?
|
|
@@ -29,14 +51,21 @@ module Admin
|
|
|
29
51
|
end
|
|
30
52
|
|
|
31
53
|
# GET /assets/1 or /assets/1.json
|
|
54
|
+
#
|
|
55
|
+
# Displays a specific asset.
|
|
32
56
|
def show
|
|
33
57
|
end
|
|
34
58
|
|
|
35
59
|
# GET /assets/1/edit
|
|
60
|
+
#
|
|
61
|
+
# Provides a form to edit an asset.
|
|
36
62
|
def edit
|
|
37
63
|
end
|
|
38
64
|
|
|
39
65
|
# PATCH/PUT /assets/1 or /assets/1.json
|
|
66
|
+
#
|
|
67
|
+
# Updates an asset with new data. If successful, redirects to the asset's page.
|
|
68
|
+
# Otherwise, re-renders the edit form with errors.
|
|
40
69
|
def update
|
|
41
70
|
respond_to do |format|
|
|
42
71
|
if @asset.update(asset_params.merge!(parent_id: parent_id_via_friendly_id(asset_params[:parent_id])))
|
|
@@ -50,6 +79,8 @@ module Admin
|
|
|
50
79
|
end
|
|
51
80
|
|
|
52
81
|
# DELETE /assets/1 or /assets/1.json
|
|
82
|
+
#
|
|
83
|
+
# Deletes an asset and redirects to the assets list with a success notice.
|
|
53
84
|
def destroy
|
|
54
85
|
@asset.destroy
|
|
55
86
|
|
|
@@ -60,14 +91,16 @@ module Admin
|
|
|
60
91
|
end
|
|
61
92
|
|
|
62
93
|
# /assets/display_attach_form
|
|
94
|
+
#
|
|
95
|
+
# Displays a form to attach files to an asset.
|
|
63
96
|
def display_attach_form
|
|
64
97
|
end
|
|
65
98
|
|
|
66
|
-
# Receives json hashes for direct uploaded files in params[:files],
|
|
67
|
-
# and id in params[:id] (friendlier_id)
|
|
68
|
-
# creates filesets for them and attach.
|
|
69
|
-
#
|
|
70
99
|
# POST /assets/ingest
|
|
100
|
+
#
|
|
101
|
+
# Receives JSON hashes for direct uploaded files in params[:files],
|
|
102
|
+
# and id in params[:id] (friendlier_id). Creates filesets for them and attaches.
|
|
103
|
+
# Redirects to the assets list with a success notice.
|
|
71
104
|
def attach_files
|
|
72
105
|
# @parent = Document.find_by_friendlier_id!(params[:id])
|
|
73
106
|
|
|
@@ -98,20 +131,23 @@ module Admin
|
|
|
98
131
|
|
|
99
132
|
private
|
|
100
133
|
|
|
134
|
+
# Finds a document's ID using its friendlier_id.
|
|
101
135
|
def parent_id_via_friendly_id(friendlier_id)
|
|
102
136
|
Document.find_by_friendlier_id(friendlier_id)&.id
|
|
103
137
|
end
|
|
104
138
|
|
|
105
139
|
# Use callbacks to share common setup or constraints between actions.
|
|
140
|
+
# Finds and sets an asset based on the provided ID.
|
|
106
141
|
def set_asset
|
|
107
142
|
@asset = Asset.find(params[:id])
|
|
108
143
|
end
|
|
109
144
|
|
|
110
145
|
# Only allow a list of trusted parameters through.
|
|
111
146
|
def asset_params
|
|
112
|
-
params.require(:asset).permit(:parent_id)
|
|
147
|
+
params.require(:asset).permit(:parent_id, :thumbnail)
|
|
113
148
|
end
|
|
114
149
|
|
|
150
|
+
# Checks if a value can be converted to a date.
|
|
115
151
|
def date_check?(val)
|
|
116
152
|
val.to_date
|
|
117
153
|
rescue Date::Error
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Admin::BookmarksController
|
|
4
|
+
# This controller handles the management of bookmarks for the admin interface.
|
|
5
|
+
# It allows for listing, creating, and destroying bookmarks associated with the current user.
|
|
4
6
|
module Admin
|
|
5
7
|
class BookmarksController < Admin::AdminController
|
|
6
|
-
before_action :set_document,
|
|
7
|
-
only: %i[create destroy]
|
|
8
|
+
before_action :set_document, only: %i[create destroy]
|
|
8
9
|
|
|
9
10
|
# GET /bookmarks
|
|
10
11
|
# GET /bookmarks.json
|
|
12
|
+
# Lists all bookmarks for the current user, filtered by document type "Kithe::Model".
|
|
13
|
+
# Responds with HTML or CSV format.
|
|
11
14
|
def index
|
|
12
15
|
@pagy, @bookmarks = pagy(current_user.bookmarks.where(document_type: "Kithe::Model"))
|
|
13
16
|
|
|
@@ -20,6 +23,9 @@ module Admin
|
|
|
20
23
|
|
|
21
24
|
# POST /bookmarks
|
|
22
25
|
# POST /bookmarks.json
|
|
26
|
+
# Creates a new bookmark for the current user and the specified document.
|
|
27
|
+
# If successful, redirects to the bookmarks index with a success notice.
|
|
28
|
+
# Otherwise, renders the index with an error status.
|
|
23
29
|
def create
|
|
24
30
|
@bookmark = Admin::Bookmark.find_or_create_by(user: current_user, document: @document)
|
|
25
31
|
|
|
@@ -36,6 +42,8 @@ module Admin
|
|
|
36
42
|
|
|
37
43
|
# DELETE /bookmarks/1
|
|
38
44
|
# DELETE /bookmarks/1.json
|
|
45
|
+
# Destroys the bookmark for the current user and the specified document.
|
|
46
|
+
# Redirects to the bookmarks index with a success notice.
|
|
39
47
|
def destroy
|
|
40
48
|
Admin::Bookmark.destroy_by(user: current_user, document: @document)
|
|
41
49
|
|
|
@@ -47,6 +55,7 @@ module Admin
|
|
|
47
55
|
|
|
48
56
|
private
|
|
49
57
|
|
|
58
|
+
# Sets the document based on the friendlier_id parameter.
|
|
50
59
|
def set_document
|
|
51
60
|
@document = Document.find_by(friendlier_id: params["document"])
|
|
52
61
|
end
|
|
@@ -56,6 +65,9 @@ module Admin
|
|
|
56
65
|
params.fetch(:bookmark, {})
|
|
57
66
|
end
|
|
58
67
|
|
|
68
|
+
# Collects bookmarks into a CSV format.
|
|
69
|
+
# @param bookmarks [Array<Bookmark>] the bookmarks to be converted to CSV
|
|
70
|
+
# @return [String] the generated CSV data
|
|
59
71
|
def collect_csv(bookmarks)
|
|
60
72
|
CSV.generate(headers: true) do |csv|
|
|
61
73
|
csv << GeoblacklightAdmin::Schema.instance.importable_fields.map { |k, _v| k.to_s }
|
|
@@ -1,34 +1,52 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Admin::BulkActionsController
|
|
4
|
+
#
|
|
5
|
+
# This controller manages bulk actions within the admin interface.
|
|
6
|
+
# It provides actions to list, show, create, update, destroy, run, and revert bulk actions.
|
|
4
7
|
module Admin
|
|
5
8
|
class BulkActionsController < Admin::AdminController
|
|
6
9
|
before_action :set_bulk_action, only: %i[show edit update destroy run revert]
|
|
7
10
|
|
|
8
11
|
# GET /bulk_actions
|
|
9
12
|
# GET /bulk_actions.json
|
|
13
|
+
#
|
|
14
|
+
# Lists all bulk actions, paginated.
|
|
15
|
+
# @return [Array<BulkAction>] List of bulk actions
|
|
10
16
|
def index
|
|
11
17
|
@pagy, @bulk_actions = pagy(BulkAction.all.order(created_at: :desc), items: 20)
|
|
12
18
|
end
|
|
13
19
|
|
|
14
20
|
# GET /bulk_actions/1
|
|
15
21
|
# GET /bulk_actions/1.json
|
|
22
|
+
#
|
|
23
|
+
# Shows a specific bulk action and its associated documents.
|
|
24
|
+
# @return [BulkAction] The requested bulk action
|
|
16
25
|
def show
|
|
17
26
|
@pagy, @documents = pagy(@bulk_action.documents, items: 30)
|
|
18
27
|
@bulk_action.check_run_state
|
|
19
28
|
end
|
|
20
29
|
|
|
21
30
|
# GET /bulk_actions/new
|
|
31
|
+
#
|
|
32
|
+
# Initializes a new bulk action with a given scope.
|
|
33
|
+
# @return [BulkAction] A new bulk action instance
|
|
22
34
|
def new
|
|
23
35
|
@bulk_action = BulkAction.new(scope: params[:scope])
|
|
24
36
|
end
|
|
25
37
|
|
|
26
38
|
# GET /bulk_actions/1/edit
|
|
39
|
+
#
|
|
40
|
+
# Prepares a bulk action for editing.
|
|
41
|
+
# @return [BulkAction] The bulk action to be edited
|
|
27
42
|
def edit
|
|
28
43
|
end
|
|
29
44
|
|
|
30
45
|
# POST /bulk_actions
|
|
31
46
|
# POST /bulk_actions.json
|
|
47
|
+
#
|
|
48
|
+
# Creates a new bulk action.
|
|
49
|
+
# @return [BulkAction] The created bulk action
|
|
32
50
|
def create
|
|
33
51
|
@bulk_action = BulkAction.new(bulk_action_params)
|
|
34
52
|
|
|
@@ -47,6 +65,9 @@ module Admin
|
|
|
47
65
|
|
|
48
66
|
# PATCH/PUT /bulk_actions/1
|
|
49
67
|
# PATCH/PUT /bulk_actions/1.json
|
|
68
|
+
#
|
|
69
|
+
# Updates an existing bulk action.
|
|
70
|
+
# @return [BulkAction] The updated bulk action
|
|
50
71
|
def update
|
|
51
72
|
respond_to do |format|
|
|
52
73
|
if @bulk_action.update(bulk_action_params)
|
|
@@ -63,6 +84,9 @@ module Admin
|
|
|
63
84
|
|
|
64
85
|
# DELETE /bulk_actions/1
|
|
65
86
|
# DELETE /bulk_actions/1.json
|
|
87
|
+
#
|
|
88
|
+
# Deletes a bulk action.
|
|
89
|
+
# @return [void]
|
|
66
90
|
def destroy
|
|
67
91
|
@bulk_action.destroy
|
|
68
92
|
respond_to do |format|
|
|
@@ -71,12 +95,16 @@ module Admin
|
|
|
71
95
|
end
|
|
72
96
|
end
|
|
73
97
|
|
|
98
|
+
# Runs a bulk action.
|
|
99
|
+
# @return [void]
|
|
74
100
|
def run
|
|
75
101
|
@bulk_action.run!
|
|
76
102
|
# @bulk_action.state_machine.transition_to!(:queued)
|
|
77
103
|
redirect_to admin_bulk_action_url(@bulk_action), notice: "Bulk action is running. Check back soon for results."
|
|
78
104
|
end
|
|
79
105
|
|
|
106
|
+
# Reverts a bulk action.
|
|
107
|
+
# @return [void]
|
|
80
108
|
def revert
|
|
81
109
|
@bulk_action.revert!
|
|
82
110
|
@bulk_action.state_machine.transition_to!(:queued)
|
|
@@ -87,11 +115,14 @@ module Admin
|
|
|
87
115
|
private
|
|
88
116
|
|
|
89
117
|
# Use callbacks to share common setup or constraints between actions.
|
|
118
|
+
# Finds and sets the bulk action based on the provided ID.
|
|
119
|
+
# @return [BulkAction] The found bulk action
|
|
90
120
|
def set_bulk_action
|
|
91
121
|
@bulk_action = BulkAction.find(params[:id])
|
|
92
122
|
end
|
|
93
123
|
|
|
94
124
|
# Only allow a list of trusted parameters through.
|
|
125
|
+
# @return [ActionController::Parameters] The permitted parameters
|
|
95
126
|
def bulk_action_params
|
|
96
127
|
params.require(:bulk_action).permit(:name, :scope, :request, :field_name, :field_value)
|
|
97
128
|
end
|