geoblacklight_admin 0.3.2 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/app/controllers/admin/document_downloads_controller.rb +1 -1
- data/app/controllers/admin/ids_controller.rb +3 -0
- data/app/controllers/admin/imports_controller.rb +2 -2
- data/app/helpers/geoblacklight_admin_helper.rb +30 -0
- data/app/jobs/bulk_action_collect_documents.rb +11 -0
- data/app/jobs/geoblacklight_admin/store_image_job.rb +12 -0
- data/app/models/asset.rb +13 -0
- data/app/models/bulk_action.rb +8 -5
- data/app/models/bulk_actions/change_publication_state.rb +21 -0
- data/app/models/concerns/geoblacklight_admin/publication_state_search_behavior.rb +26 -0
- data/app/models/document/date_validator.rb +46 -0
- data/app/models/document.rb +114 -2
- data/app/models/document_access.rb +3 -1
- data/app/models/document_download.rb +3 -1
- data/app/models/element.rb +1 -0
- data/app/services/geoblacklight_admin/image_service/dynamic_map_layer.rb +15 -0
- data/app/services/geoblacklight_admin/image_service/iiif.rb +17 -0
- data/app/services/geoblacklight_admin/image_service/image_map_layer.rb +17 -0
- data/app/services/geoblacklight_admin/image_service/tiled_map_layer.rb +15 -0
- data/app/services/geoblacklight_admin/image_service/wms.rb +28 -0
- data/app/services/geoblacklight_admin/image_service.rb +238 -0
- data/app/services/geoblacklight_admin/item_viewer.rb +31 -0
- data/app/uploaders/asset_uploader.rb +31 -0
- data/app/views/admin/document_assets/index.html.erb +13 -1
- data/app/views/admin/documents/_document.html.erb +1 -1
- data/app/views/admin/documents/_document_kithe.html.erb +47 -0
- data/app/views/admin/documents/_form_nav.html.erb +1 -1
- data/app/views/admin/documents/_form_nav_kithe.html.erb +30 -0
- data/app/views/admin/documents/_result_facets.html.erb +26 -2
- data/app/views/admin/documents/index.html.erb +4 -8
- data/app/views/admin/documents/versions.html.erb +1 -1
- data/app/views/admin/imports/show.html.erb +35 -9
- data/app/views/admin/shared/_navbar.html.erb +6 -6
- data/db/migrate/20231106215104_bulk_action_sti.rb +10 -0
- data/lib/generators/geoblacklight_admin/config_generator.rb +33 -3
- data/{app/controllers/admin → lib/generators/geoblacklight_admin/templates}/api_controller.rb +4 -1
- data/lib/generators/geoblacklight_admin/templates/config/initializers/shrine.rb +3 -2
- data/lib/generators/geoblacklight_admin/templates/config/settings.yml +4 -1
- data/lib/generators/geoblacklight_admin/templates/views/_index_split_default.html.erb +27 -0
- data/lib/geoblacklight_admin/version.rb +1 -1
- data/lib/tasks/geoblacklight_admin/images.rake +30 -0
- metadata +24 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5514d1f3dfc7ba946eb58f955e9c3cfc76b073aeafcc86d0f62e3807bf013aba
|
4
|
+
data.tar.gz: 34c448fd3cb662cabf2f3f6cfd2f82b3b5166f681d7e4c0c3ef542ecad575893
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2dcfb661be04c25e22a1941471c06b1dabcf6ee14744fe2faf815172e32b2a00b06639a808fb35f5bb05fef8ef8b0ddde038c8a786b45d38f5aff3aa856c648a
|
7
|
+
data.tar.gz: 38a23540721636da43ee97a2068f10ed127a85b380ecb6d84f1c1ee0045848295b100d781f48762b0204d738530cccdfbd3578ef1927ff87bbe8f6c55349c61a
|
data/README.md
CHANGED
@@ -82,7 +82,7 @@ module Admin
|
|
82
82
|
|
83
83
|
respond_to do |format|
|
84
84
|
if DocumentDownload.destroy_all(params.dig(:document_download, :downloads, :file))
|
85
|
-
format.html { redirect_to admin_document_downloads_path, notice: "Download Links were
|
85
|
+
format.html { redirect_to admin_document_downloads_path, notice: "Download Links were destroyed." }
|
86
86
|
else
|
87
87
|
format.html { redirect_to admin_document_downloads_path, notice: "Download Links could not be destroyed." }
|
88
88
|
end
|
@@ -141,6 +141,9 @@ module Admin
|
|
141
141
|
# Publication State
|
142
142
|
config.add_facet_field Settings.FIELDS.B1G_PUBLICATION_STATE, show: false
|
143
143
|
|
144
|
+
# Import ID
|
145
|
+
config.add_facet_field Settings.FIELDS.B1G_IMPORT_ID, label: "Import ID", show: false
|
146
|
+
|
144
147
|
# Resouce Class
|
145
148
|
config.add_facet_field Settings.FIELDS.RESOURCE_CLASS, show: false
|
146
149
|
|
@@ -14,8 +14,8 @@ module Admin
|
|
14
14
|
# GET /imports/1
|
15
15
|
# GET /imports/1.json
|
16
16
|
def show
|
17
|
-
@pagy_failed, @import_failed_documents = pagy(@import.import_documents.not_in_state(:success), items:
|
18
|
-
@pagy_success, @import_success_documents = pagy(@import.import_documents.in_state(:success), items:
|
17
|
+
@pagy_failed, @import_failed_documents = pagy(@import.import_documents.not_in_state(:success), items: 50)
|
18
|
+
@pagy_success, @import_success_documents = pagy(@import.import_documents.in_state(:success), items: 50)
|
19
19
|
end
|
20
20
|
|
21
21
|
# GET /imports/new
|
@@ -115,4 +115,34 @@ module GeoblacklightAdminHelper
|
|
115
115
|
""
|
116
116
|
end
|
117
117
|
end
|
118
|
+
|
119
|
+
def link_to_admin_import(import)
|
120
|
+
path = admin_documents_path(
|
121
|
+
{
|
122
|
+
f: {b1g_geom_import_id_ssi: [import]}
|
123
|
+
}
|
124
|
+
)
|
125
|
+
|
126
|
+
link_to import.name, path
|
127
|
+
end
|
128
|
+
|
129
|
+
def link_to_gbl_import(label, import, state = false)
|
130
|
+
path = if state
|
131
|
+
blacklight_path(
|
132
|
+
{
|
133
|
+
f: {b1g_geom_import_id_ssi: [import]},
|
134
|
+
publication_state: state
|
135
|
+
}
|
136
|
+
)
|
137
|
+
else
|
138
|
+
blacklight_path(
|
139
|
+
{
|
140
|
+
f: {b1g_geom_import_id_ssi: [import]},
|
141
|
+
publication_state: "*"
|
142
|
+
}
|
143
|
+
)
|
144
|
+
end
|
145
|
+
|
146
|
+
link_to(label, path)
|
147
|
+
end
|
118
148
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# BulkActionCollectDocuments class
|
4
|
+
class BulkActionCollectDocuments < ApplicationJob
|
5
|
+
queue_as :priority
|
6
|
+
|
7
|
+
def perform(bulk_action_id)
|
8
|
+
bulk_action = BulkAction.find(bulk_action_id)
|
9
|
+
bulk_action.collect_documents
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GeoblacklightAdmin
|
4
|
+
class StoreImageJob < ApplicationJob
|
5
|
+
queue_as :default
|
6
|
+
|
7
|
+
def perform(solr_document_id)
|
8
|
+
document = Document.find_by_friendlier_id(solr_document_id)
|
9
|
+
GeoblacklightAdmin::ImageService.new(document).store
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/app/models/asset.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
class Asset < Kithe::Asset
|
2
|
+
include AttrJson::Record::QueryScopes
|
3
|
+
|
4
|
+
set_shrine_uploader(AssetUploader)
|
5
|
+
|
6
|
+
# AttrJSON
|
7
|
+
attr_json :thumbnail, :boolean, default: "false"
|
8
|
+
attr_json :derivative_storage_type, :string, default: "public"
|
9
|
+
|
10
|
+
DERIVATIVE_STORAGE_TYPE_LOCATIONS = {
|
11
|
+
"public" => :kithe_derivatives
|
12
|
+
}.freeze
|
13
|
+
end
|
data/app/models/bulk_action.rb
CHANGED
@@ -6,7 +6,9 @@ require "cgi"
|
|
6
6
|
# BulkAction
|
7
7
|
class BulkAction < ApplicationRecord
|
8
8
|
# Callbacks
|
9
|
-
|
9
|
+
after_create do
|
10
|
+
BulkActionCollectDocuments.perform_later(id)
|
11
|
+
end
|
10
12
|
|
11
13
|
# Associations
|
12
14
|
has_many :documents, class_name: "BulkActionDocument", autosave: false, dependent: :destroy
|
@@ -38,9 +40,10 @@ class BulkAction < ApplicationRecord
|
|
38
40
|
end
|
39
41
|
|
40
42
|
def check_run_state
|
41
|
-
|
43
|
+
nil if state_machine.current_state == "complete"
|
42
44
|
|
43
|
-
|
45
|
+
# @TODO / background job for collecting documents
|
46
|
+
# state_machine.transition_to!(:complete) if documents.in_state(:queued).blank?
|
44
47
|
end
|
45
48
|
|
46
49
|
def revert!
|
@@ -48,8 +51,6 @@ class BulkAction < ApplicationRecord
|
|
48
51
|
BulkActionRevertJob.perform_later(self)
|
49
52
|
end
|
50
53
|
|
51
|
-
private
|
52
|
-
|
53
54
|
def collect_documents
|
54
55
|
cgi = CGI.unescape(scope)
|
55
56
|
uri = URI.parse(cgi)
|
@@ -60,6 +61,8 @@ class BulkAction < ApplicationRecord
|
|
60
61
|
end
|
61
62
|
end
|
62
63
|
|
64
|
+
private
|
65
|
+
|
63
66
|
def fetch_documents(uri)
|
64
67
|
qargs = Rack::Utils.parse_nested_query(uri.query)
|
65
68
|
fetch_documents = Document.where(friendlier_id: qargs["ids"])
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module BulkActions
|
2
|
+
# Subclass for ChangePublicationState
|
3
|
+
class ChangePublicationState < BulkAction
|
4
|
+
# Add specific methods and validations for ChangePublicationState here
|
5
|
+
end
|
6
|
+
|
7
|
+
# Subclass for PublishDocument
|
8
|
+
class PublishDocument < BulkAction
|
9
|
+
# Add specific methods and validations for PublishDocument here
|
10
|
+
end
|
11
|
+
|
12
|
+
# Subclass for UnpublishDocument
|
13
|
+
class UnpublishDocument < BulkAction
|
14
|
+
# Add specific methods and validations for UnpublishDocument here
|
15
|
+
end
|
16
|
+
|
17
|
+
# Subclass for DraftDocument
|
18
|
+
class DraftDocument < BulkAction
|
19
|
+
# Add specific methods and validations for DraftDocument here
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GeoblacklightAdmin
|
4
|
+
module PublicationStateSearchBehavior
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
self.default_processor_chain += [:publication_state_records]
|
9
|
+
end
|
10
|
+
|
11
|
+
##
|
12
|
+
# Show/Hide records by publication state in search
|
13
|
+
# Defaults to "published" items only
|
14
|
+
# publication_state: ['published', 'unpublished', 'draft']
|
15
|
+
# @param [Blacklight::Solr::Request]
|
16
|
+
# @return [Blacklight::Solr::Request]
|
17
|
+
def publication_state_records(solr_params)
|
18
|
+
solr_params[:fq] ||= []
|
19
|
+
solr_params[:fq] << if blacklight_params["publication_state"]
|
20
|
+
"b1g_publication_state_s:#{blacklight_params["publication_state"]}"
|
21
|
+
else
|
22
|
+
"b1g_publication_state_s:published"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Date Validation
|
4
|
+
#
|
5
|
+
# ex. Bad date field type value
|
6
|
+
# "foo" is not a date
|
7
|
+
# "2023-12-5" is a date
|
8
|
+
class Document
|
9
|
+
# DateValidator
|
10
|
+
class DateValidator < ActiveModel::Validator
|
11
|
+
def validate(record)
|
12
|
+
# Assume true
|
13
|
+
valid_date = true
|
14
|
+
|
15
|
+
date_elements = Element.where(field_type: "date")
|
16
|
+
|
17
|
+
# Sane date values?
|
18
|
+
date_elements.each do |element|
|
19
|
+
unless record.send(element.solr_field).nil?
|
20
|
+
Rails.logger.debug("Date Validator")
|
21
|
+
Rails.logger.debug("Dates: #{record.send(element.solr_field).inspect}")
|
22
|
+
record.send(element.solr_field).each do |date|
|
23
|
+
Rails.logger.debug("\nDate: #{date}")
|
24
|
+
valid_date = proper_date(record, element, date, valid_date)
|
25
|
+
|
26
|
+
break if !valid_date
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
valid_date
|
32
|
+
end
|
33
|
+
|
34
|
+
def proper_date(record, element, date, valid_date)
|
35
|
+
if date.blank?
|
36
|
+
valid_date = true
|
37
|
+
elsif date.class != Date
|
38
|
+
valid_date = false
|
39
|
+
record.errors.add(GeoblacklightAdmin::Schema.instance.solr_fields[element.to_sym], "Bad date field type.")
|
40
|
+
end
|
41
|
+
|
42
|
+
Rails.logger.debug("#{date} - #{valid_date}")
|
43
|
+
valid_date
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/app/models/document.rb
CHANGED
@@ -5,6 +5,13 @@ class Document < Kithe::Work
|
|
5
5
|
include AttrJson::Record::QueryScopes
|
6
6
|
include ActiveModel::Validations
|
7
7
|
|
8
|
+
delegate :viewer_protocol, to: :item_viewer
|
9
|
+
delegate :viewer_endpoint, to: :item_viewer
|
10
|
+
|
11
|
+
def item_viewer
|
12
|
+
GeoblacklightAdmin::ItemViewer.new(references)
|
13
|
+
end
|
14
|
+
|
8
15
|
attr_accessor :skip_callbacks
|
9
16
|
|
10
17
|
has_paper_trail ignore: [:publication_state]
|
@@ -50,6 +57,7 @@ class Document < Kithe::Work
|
|
50
57
|
references_json.include?("downloadUrl")
|
51
58
|
end
|
52
59
|
|
60
|
+
validates_with Document::DateValidator
|
53
61
|
validates_with Document::DateRangeValidator
|
54
62
|
validates_with Document::BboxValidator
|
55
63
|
validates_with Document::GeomValidator
|
@@ -68,12 +76,15 @@ class Document < Kithe::Work
|
|
68
76
|
attr_json :dct_references_s, Document::Reference.to_type, array: true, default: -> { [] }
|
69
77
|
|
70
78
|
# Index Transformations - *_json functions
|
71
|
-
def
|
79
|
+
def references
|
72
80
|
references = ActiveSupport::HashWithIndifferentAccess.new
|
73
81
|
send(GeoblacklightAdmin::Schema.instance.solr_fields[:reference]).each do |ref|
|
74
82
|
references[Document::Reference::REFERENCE_VALUES[ref.category.to_sym][:uri]] = ref.value
|
75
83
|
end
|
76
|
-
|
84
|
+
apply_downloads(references)
|
85
|
+
end
|
86
|
+
|
87
|
+
def references_json
|
77
88
|
references.to_json
|
78
89
|
end
|
79
90
|
|
@@ -121,8 +132,109 @@ class Document < Kithe::Work
|
|
121
132
|
value = prefix + format.to_s
|
122
133
|
value.html_safe
|
123
134
|
end
|
135
|
+
|
136
|
+
##
|
137
|
+
# GBL SolrDocument convience methods
|
138
|
+
#
|
139
|
+
def available?
|
140
|
+
public? || same_institution?
|
141
|
+
end
|
142
|
+
|
143
|
+
def public?
|
144
|
+
rights_field_data.present? && rights_field_data.casecmp("public").zero?
|
145
|
+
end
|
146
|
+
|
147
|
+
def local_restricted?
|
148
|
+
local? && restricted?
|
149
|
+
end
|
150
|
+
|
151
|
+
def local?
|
152
|
+
local = send(Settings.FIELDS.PROVIDER) || ""
|
153
|
+
local.casecmp(Settings.INSTITUTION_LOCAL_NAME)&.zero?
|
154
|
+
end
|
155
|
+
|
156
|
+
def restricted?
|
157
|
+
rights_field_data.blank? || rights_field_data.casecmp("restricted").zero?
|
158
|
+
end
|
159
|
+
|
160
|
+
def rights_field_data
|
161
|
+
send(Settings.FIELDS.ACCESS_RIGHTS) || ""
|
162
|
+
end
|
163
|
+
|
164
|
+
def downloadable?
|
165
|
+
(direct_download || download_types.present? || iiif_download) && available?
|
166
|
+
end
|
167
|
+
|
168
|
+
def direct_download
|
169
|
+
references.download.to_hash if references.download.present?
|
170
|
+
end
|
171
|
+
|
172
|
+
def display_note
|
173
|
+
send(Settings.FIELDS.DISPLAY_NOTE) || ""
|
174
|
+
end
|
175
|
+
|
176
|
+
def hgl_download
|
177
|
+
references.hgl.to_hash if references.hgl.present?
|
178
|
+
end
|
179
|
+
|
180
|
+
def oembed
|
181
|
+
references.oembed.endpoint if references.oembed.present?
|
182
|
+
end
|
183
|
+
|
184
|
+
def same_institution?
|
185
|
+
institution = send(Settings.FIELDS.PROVIDER) || ""
|
186
|
+
institution.casecmp(Settings.INSTITUTION.downcase).zero?
|
187
|
+
end
|
188
|
+
|
189
|
+
def iiif_download
|
190
|
+
references.iiif.to_hash if references.iiif.present?
|
191
|
+
end
|
192
|
+
|
193
|
+
def data_dictionary_download
|
194
|
+
references.data_dictionary.to_hash if references.data_dictionary.present?
|
195
|
+
end
|
196
|
+
|
197
|
+
def external_url
|
198
|
+
references.url&.endpoint
|
199
|
+
end
|
200
|
+
|
201
|
+
def itemtype
|
202
|
+
"http://schema.org/Dataset"
|
203
|
+
end
|
204
|
+
|
205
|
+
def geom_field
|
206
|
+
send(Settings.FIELDS.GEOMETRY) || ""
|
207
|
+
end
|
208
|
+
|
209
|
+
def geometry
|
210
|
+
# @TODO
|
211
|
+
# @geometry ||= Geoblacklight::Geometry.new(geom_field)
|
212
|
+
end
|
213
|
+
|
214
|
+
def wxs_identifier
|
215
|
+
send(Settings.FIELDS.WXS_IDENTIFIER) || ""
|
216
|
+
end
|
217
|
+
|
218
|
+
def file_format
|
219
|
+
send(Settings.FIELDS.FORMAT) || ""
|
220
|
+
end
|
221
|
+
|
222
|
+
##
|
223
|
+
# Provides a convenience method to access a SolrDocument's References
|
224
|
+
# endpoint url without having to check and see if it is available
|
225
|
+
# :type => a string which if its a Geoblacklight::Constants::URI key
|
226
|
+
# will return a coresponding Geoblacklight::Reference
|
227
|
+
def checked_endpoint(type)
|
228
|
+
type = references.send(type)
|
229
|
+
type.endpoint if type.present?
|
230
|
+
end
|
231
|
+
|
124
232
|
### End / From GBL
|
125
233
|
|
234
|
+
def thumbnail
|
235
|
+
members.find { |m| m.respond_to?(:thumbnail) }
|
236
|
+
end
|
237
|
+
|
126
238
|
def access_json
|
127
239
|
access = {}
|
128
240
|
access_urls.each { |au| access[au.institution_code] = au.access_url }
|
@@ -15,8 +15,9 @@ class DocumentAccess < ApplicationRecord
|
|
15
15
|
::CSV.foreach(file.path, headers: true) do |row|
|
16
16
|
logger.debug("CSV Row: #{row.to_hash}")
|
17
17
|
document_access = DocumentAccess.find_or_initialize_by(friendlier_id: row[0], institution_code: row[1])
|
18
|
-
document_access.update(row.to_hash)
|
18
|
+
document_access.update!(row.to_hash)
|
19
19
|
end
|
20
|
+
true
|
20
21
|
end
|
21
22
|
|
22
23
|
def self.destroy_all(file)
|
@@ -25,6 +26,7 @@ class DocumentAccess < ApplicationRecord
|
|
25
26
|
logger.debug("CSV Row: #{row.to_hash}")
|
26
27
|
DocumentAccess.destroy_by(id: row[0], friendlier_id: row[1])
|
27
28
|
end
|
29
|
+
true
|
28
30
|
end
|
29
31
|
|
30
32
|
def to_csv
|
@@ -15,8 +15,9 @@ class DocumentDownload < ApplicationRecord
|
|
15
15
|
::CSV.foreach(file.path, headers: true) do |row|
|
16
16
|
logger.debug("CSV Row: #{row.to_hash}")
|
17
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)
|
18
|
+
document_download.update!(row.to_hash)
|
19
19
|
end
|
20
|
+
true
|
20
21
|
end
|
21
22
|
|
22
23
|
def self.destroy_all(file)
|
@@ -25,6 +26,7 @@ class DocumentDownload < ApplicationRecord
|
|
25
26
|
logger.debug("CSV Row: #{row.to_hash}")
|
26
27
|
DocumentDownload.destroy_by(id: row[0], friendlier_id: row[1])
|
27
28
|
end
|
29
|
+
true
|
28
30
|
end
|
29
31
|
|
30
32
|
def to_csv
|
data/app/models/element.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GeoblacklightAdmin
|
4
|
+
class ImageService
|
5
|
+
module DynamicMapLayer
|
6
|
+
##
|
7
|
+
# Formats and returns a thumbnail url from an ESRI Dynamic Map Layer endpoint.
|
8
|
+
# @param [SolrDocument]
|
9
|
+
# @return [String] image url
|
10
|
+
def self.image_url(document, _size)
|
11
|
+
"#{document.viewer_endpoint}/info/thumbnail/thumbnail.png"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GeoblacklightAdmin
|
4
|
+
class ImageService
|
5
|
+
module Iiif
|
6
|
+
##
|
7
|
+
# Formats and returns a thumbnail url from an International Image
|
8
|
+
# Interoperability Framework endpoint.
|
9
|
+
# @param [SolrDocument]
|
10
|
+
# @param [Integer] thumbnail size
|
11
|
+
# @return [String] iiif thumbnail url
|
12
|
+
def self.image_url(document, size)
|
13
|
+
"#{document.viewer_endpoint.gsub("info.json", "")}full/#{size},/0/default.jpg"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GeoblacklightAdmin
|
4
|
+
class ImageService
|
5
|
+
module ImageMapLayer
|
6
|
+
##
|
7
|
+
# Formats and returns a thumbnail url from an ESRI Image Map Layer endpoint.
|
8
|
+
# information about the layer.
|
9
|
+
# @param [SolrDocument]
|
10
|
+
# @param [Integer] thumbnail size
|
11
|
+
# @return [String] thumbnail url
|
12
|
+
def self.image_url(document, _size)
|
13
|
+
"#{document.viewer_endpoint}/info/thumbnail/thumbnail.png"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GeoblacklightAdmin
|
4
|
+
class ImageService
|
5
|
+
module TiledMapLayer
|
6
|
+
##
|
7
|
+
# Formats and returns an image url from an ESRI Tiled Map Layer endpoint.
|
8
|
+
# @param [SolrDocument]
|
9
|
+
# @return [String] image url
|
10
|
+
def self.image_url(document, _size)
|
11
|
+
"#{document.viewer_endpoint}/info/thumbnail/thumbnail.png"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GeoblacklightAdmin
|
4
|
+
class ImageService
|
5
|
+
module Wms
|
6
|
+
##
|
7
|
+
# Formats and returns a thumbnail url from a Web Map Service endpoint.
|
8
|
+
# This utilizes the GeoServer specific 'reflect' service to generate
|
9
|
+
# parameters like bbox that are difficult to tweak without more detailed
|
10
|
+
# information about the layer.
|
11
|
+
# @param [SolrDocument]
|
12
|
+
# @param [Integer] thumbnail size
|
13
|
+
# @return [String] wms thumbnail url
|
14
|
+
def self.image_url(document, size)
|
15
|
+
# Swap proxy url with princeton geoserver url.
|
16
|
+
# Thumbnail requests send geoserver auth.
|
17
|
+
endpoint = document.viewer_endpoint.gsub(Settings.PROXY_GEOSERVER_URL,
|
18
|
+
Settings.INSTITUTION_GEOSERVER_URL)
|
19
|
+
"#{endpoint}/reflect?" \
|
20
|
+
"&FORMAT=image%2Fpng" \
|
21
|
+
"&TRANSPARENT=TRUE" \
|
22
|
+
"&LAYERS=#{document["gbl_wxsIdentifier_s"]}" \
|
23
|
+
"&WIDTH=#{size}" \
|
24
|
+
"&HEIGHT=#{size}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|