cul_scv_hydra 0.3.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.
- data/app/models/bag_aggregator.rb +16 -0
- data/app/models/content_aggregator.rb +16 -0
- data/app/models/dcdocument.rb +9 -0
- data/app/models/generic_aggregator.rb +16 -0
- data/app/models/generic_object.rb +16 -0
- data/app/models/jp2_image_aggregator.rb +38 -0
- data/app/models/mets_structured_aggregator.rb +16 -0
- data/app/models/resource.rb +59 -0
- data/app/models/static_audio_aggregator.rb +21 -0
- data/app/models/static_image_aggregator.rb +21 -0
- data/config/fedora.yml +6 -0
- data/config/predicate_mappings.yml +56 -0
- data/config/solr.yml +15 -0
- data/config/solr_mappings.yml +26 -0
- data/config/solr_value_maps.yml +29 -0
- data/lib/cul_scv_hydra.rb +14 -0
- data/lib/cul_scv_hydra/access_controls_enforcement.rb +53 -0
- data/lib/cul_scv_hydra/active_fedora.rb +18 -0
- data/lib/cul_scv_hydra/active_fedora/model.rb +8 -0
- data/lib/cul_scv_hydra/active_fedora/model/aggregator.rb +45 -0
- data/lib/cul_scv_hydra/active_fedora/model/common.rb +221 -0
- data/lib/cul_scv_hydra/active_fedora/model/dcdocument.rb +43 -0
- data/lib/cul_scv_hydra/active_fedora/model/resource.rb +79 -0
- data/lib/cul_scv_hydra/controllers.rb +13 -0
- data/lib/cul_scv_hydra/controllers/aggregates.rb +95 -0
- data/lib/cul_scv_hydra/controllers/aggregator_controller_helper.rb +27 -0
- data/lib/cul_scv_hydra/controllers/catalog.rb +13 -0
- data/lib/cul_scv_hydra/controllers/content_aggregators.rb +83 -0
- data/lib/cul_scv_hydra/controllers/datastreams.rb +146 -0
- data/lib/cul_scv_hydra/controllers/helpers.rb +11 -0
- data/lib/cul_scv_hydra/controllers/helpers/active_fedora_helper_behavior.rb +9 -0
- data/lib/cul_scv_hydra/controllers/helpers/application_helper_behavior.rb +17 -0
- data/lib/cul_scv_hydra/controllers/helpers/dc_metadata_helper_behavior.rb +9 -0
- data/lib/cul_scv_hydra/controllers/helpers/hydra_assets_helper_behavior.rb +46 -0
- data/lib/cul_scv_hydra/controllers/helpers/hydra_autocomplete_helper_behavior.rb +35 -0
- data/lib/cul_scv_hydra/controllers/helpers/hydra_uploader_helper_behavior.rb +34 -0
- data/lib/cul_scv_hydra/controllers/helpers/resources_helper_behavior.rb +160 -0
- data/lib/cul_scv_hydra/controllers/resources.rb +162 -0
- data/lib/cul_scv_hydra/controllers/static_image_aggregators.rb +106 -0
- data/lib/cul_scv_hydra/controllers/suggestions.rb +127 -0
- data/lib/cul_scv_hydra/controllers/terms.rb +152 -0
- data/lib/cul_scv_hydra/engine.rb +9 -0
- data/lib/cul_scv_hydra/om.rb +11 -0
- data/lib/cul_scv_hydra/om/dc_metadata.rb +70 -0
- data/lib/cul_scv_hydra/om/scv_mods_document.rb +132 -0
- data/lib/cul_scv_hydra/om/standard_mods.rb +111 -0
- data/lib/cul_scv_hydra/solrizer.rb +12 -0
- data/lib/cul_scv_hydra/solrizer/extractor.rb +27 -0
- data/lib/cul_scv_hydra/solrizer/field_mapper.rb +30 -0
- data/lib/cul_scv_hydra/solrizer/terminology_based_solrizer.rb +112 -0
- data/lib/cul_scv_hydra/solrizer/value_mapper.rb +35 -0
- data/lib/cul_scv_hydra/version.rb +10 -0
- metadata +333 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'active-fedora'
|
2
|
+
module Cul::Scv::Hydra::Controllers
|
3
|
+
module AggregatorControllerHelper
|
4
|
+
def load_fedora_document
|
5
|
+
if params.has_key? :asset_id
|
6
|
+
af_base = ActiveFedora::Base.load_instance(params[:asset_id])
|
7
|
+
else
|
8
|
+
af_base = ActiveFedora::Base.load_instance(params[:id])
|
9
|
+
end
|
10
|
+
the_model = ActiveFedora::ContentModel.known_models_for( af_base ).first
|
11
|
+
if the_model.nil? or the_model == ActiveFedora::Base
|
12
|
+
the_model = DcDocument
|
13
|
+
end
|
14
|
+
|
15
|
+
@document_fedora = af_base.adapt_to the_model
|
16
|
+
end
|
17
|
+
def load_resources
|
18
|
+
@document_fedora ||= load_fedora_document
|
19
|
+
if @document_fedora.is_a? Cul::Scv::Hydra::ActiveFedora::Model::Aggregator
|
20
|
+
@resources = @document_fedora.resources
|
21
|
+
else
|
22
|
+
logger.debug "Only aggregators have parts!"
|
23
|
+
end
|
24
|
+
@resources
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'cul_scv_hydra/controllers/aggregator_controller_helper'
|
2
|
+
require 'cul_scv_hydra/controllers/helpers/active_fedora_helper_behavior'
|
3
|
+
module Cul::Scv::Hydra::Controllers
|
4
|
+
module Catalog
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
included do
|
7
|
+
include Cul::Scv::Hydra::Controllers::AggregatorControllerHelper
|
8
|
+
include Cul::Scv::Hydra::Controllers::Helpers::ActiveFedoraHelperBehavior
|
9
|
+
before_filter :require_solr, :only=>[:show, :edit, :index, :delete]
|
10
|
+
before_filter :load_resources, :only=>[:show, :edit]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'hydra'
|
2
|
+
require 'cul_scv_hydra/controllers/helpers/resources_helper_behavior'
|
3
|
+
module Cul::Scv::Hydra::Controllers
|
4
|
+
module ContentAggregators
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
included do
|
7
|
+
include Hydra::AssetsControllerHelper
|
8
|
+
include Cul::Scv::Hydra::Controllers::Helpers::ResourcesHelperBehavior
|
9
|
+
include Hydra::RepositoryController
|
10
|
+
include MediaShelf::ActiveFedoraHelper
|
11
|
+
include Blacklight::SolrHelper
|
12
|
+
before_filter :require_solr, :only=>[:index, :new, :create, :edit, :show, :destroy]
|
13
|
+
prepend_before_filter :sanitize_update_params
|
14
|
+
end
|
15
|
+
|
16
|
+
def index
|
17
|
+
if params[:layout] == "false"
|
18
|
+
# action = "index_embedded"
|
19
|
+
layout = false
|
20
|
+
end
|
21
|
+
if !params[:container_id].nil?
|
22
|
+
container_uri = "info:fedora/#{params[:container_id]}"
|
23
|
+
escaped_uri = container_uri.gsub(/(:)/, '\\:')
|
24
|
+
extra_controller_params = {:q=>"cul_member_of_s:#{escaped_uri}"}
|
25
|
+
@response, @document_list = get_search_results( extra_controller_params )
|
26
|
+
|
27
|
+
# Including this line so permissions tests can be run against the container
|
28
|
+
@container_response, @document = get_solr_response_for_doc_id(params[:container_id])
|
29
|
+
|
30
|
+
# Including these lines for backwards compatibility (until we can use Rails3 callbacks)
|
31
|
+
@container = ActiveFedora::Base.load_instance(params[:container_id])
|
32
|
+
@solr_result = @container.file_objects(:response_format=>:solr)
|
33
|
+
else
|
34
|
+
# @solr_result = ActiveFedora::SolrService.instance.conn.query('has_model_field:info\:fedora/ldpd\:Resource', @search_params)
|
35
|
+
@solr_result = Resource.find_by_solr(:all)
|
36
|
+
end
|
37
|
+
render :action=>params[:action], :layout=>layout
|
38
|
+
end
|
39
|
+
|
40
|
+
def new
|
41
|
+
@asset = ContentAggregator.new
|
42
|
+
apply_depositor_metadata(@asset)
|
43
|
+
set_collection_type(@asset, params[:content_type])
|
44
|
+
if !params[:container_id].nil?
|
45
|
+
associate_resource_with_container(@asset, params[:container_id])
|
46
|
+
end
|
47
|
+
@asset.save
|
48
|
+
msg = "Created a Content Aggregator with pid #{@asset.pid}. Now it's ready to be edited."
|
49
|
+
flash[:notice]= msg
|
50
|
+
|
51
|
+
session[:scripts] = params[:combined] == "true"
|
52
|
+
redirect_to url_for(:action=>"edit", :id=>@asset.pid, :new_asset=>true, :controller=>'catalog')
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
# Common destroy method for all AssetsControllers
|
57
|
+
def destroy
|
58
|
+
# The correct implementation, with garbage collection:
|
59
|
+
# if params.has_key?(:container_id)
|
60
|
+
# container = ActiveFedora::Base.load_instance(params[:container_id])
|
61
|
+
# container.file_objects_remove(params[:id])
|
62
|
+
# FileAsset.garbage_collect(params[:id])
|
63
|
+
# else
|
64
|
+
|
65
|
+
# The dirty implementation (leaves relationship in container object, deletes regardless of whether the file object has other containers)
|
66
|
+
ActiveFedora::Base.load_instance(params[:id]).delete
|
67
|
+
render :text => "Deleted #{params[:id]} from #{params[:container_id]}."
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def show
|
72
|
+
@image_agg = ContentAggregator.find(params[:id])
|
73
|
+
if (@image_agg.nil?)
|
74
|
+
logger.warn("No such object: " + params[:id])
|
75
|
+
flash[:notice]= "No such object."
|
76
|
+
redirect_to(:action => 'index', :q => nil , :f => nil)
|
77
|
+
else
|
78
|
+
@id_array = @image_agg.containers(:response_format => :id_array)
|
79
|
+
end
|
80
|
+
render :action=>params[:action], :layout=>(params[:layout]=="false")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
require 'cul_scv_hydra/controllers/helpers/application_helper_behavior'
|
2
|
+
module Cul::Scv::Hydra::Controllers
|
3
|
+
module Datastreams
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
include Cul::Scv::Hydra::Controllers::Helpers::ApplicationHelperBehavior
|
8
|
+
include Hydra::AssetsControllerHelper
|
9
|
+
include Hydra::AssetsControllerHelper
|
10
|
+
include Hydra::FileAssetsHelper
|
11
|
+
include Hydra::RepositoryController
|
12
|
+
include MediaShelf::ActiveFedoraHelper
|
13
|
+
include Blacklight::SolrHelper
|
14
|
+
before_filter :require_solr, :only=>[:index, :create, :show, :destroy]
|
15
|
+
prepend_before_filter :sanitize_update_params
|
16
|
+
end
|
17
|
+
|
18
|
+
def index
|
19
|
+
if params[:layout] == "false"
|
20
|
+
# action = "index_embedded"
|
21
|
+
layout = false
|
22
|
+
end
|
23
|
+
unless params[:asset_id].nil?
|
24
|
+
|
25
|
+
# Including this line so permissions tests can be run against the container
|
26
|
+
@container_response, @document = get_solr_response_for_doc_id(params[:asset_id])
|
27
|
+
|
28
|
+
# Including these lines for backwards compatibility (until we can use Rails3 callbacks)
|
29
|
+
@container = ActiveFedora::Base.load_instance(params[:asset_id])
|
30
|
+
@ds = @container.datastreams(params[:id])
|
31
|
+
else
|
32
|
+
# What are we doing here without a containing object?
|
33
|
+
raise "called DatastreamsController#index without containing object"
|
34
|
+
end
|
35
|
+
render :action=>params[:action], :layout=>layout
|
36
|
+
end
|
37
|
+
|
38
|
+
def new
|
39
|
+
render :partial=>"new", :layout=>false
|
40
|
+
end
|
41
|
+
|
42
|
+
# Creates and Saves a Datastream to contain the the Uploaded file
|
43
|
+
def create
|
44
|
+
if params[:asset_id].nil?
|
45
|
+
raise "Cannot created a datastream without a containing object"
|
46
|
+
else
|
47
|
+
@container = ActiveFedora::Base.load_instance(params[:asset_id])
|
48
|
+
end
|
49
|
+
|
50
|
+
if params[:id].nil?
|
51
|
+
raise "Cannot created a datastream without a datastream id"
|
52
|
+
end
|
53
|
+
|
54
|
+
if params.has_key?(:Filedata)
|
55
|
+
file_name = filename_from_params
|
56
|
+
mime_type = params[:mime_type] || mime_type(file_name)
|
57
|
+
@container.add_file_datastream(posted_file, :dsid=>params[:id], :label=>file_name, :mimeType=>mime_type, :size=>posted_file.size)
|
58
|
+
@container.save
|
59
|
+
# apply_depositor_metadata(@file_asset)
|
60
|
+
|
61
|
+
flash[:notice] = "The file #{params[:Filename]} has been saved as #{params[:datastream_id]} in <a href=\"#{asset_url(@container.pid)}\">#{@container.pid}</a>."
|
62
|
+
|
63
|
+
## Apply any posted file metadata
|
64
|
+
unless params[:asset].nil?
|
65
|
+
# logger.debug("applying submitted file metadata: #{@sanitized_params.inspect}")
|
66
|
+
# apply_file_metadata
|
67
|
+
end
|
68
|
+
# If redirect_params has not been set, use {:action=>:index}
|
69
|
+
logger.debug "Created #{@container.pid}##{params[:datastream_id]}."
|
70
|
+
elsif params.has_key?(:Source)
|
71
|
+
file_name = filename_from_url(params[:Source])
|
72
|
+
mime_type = params[:mime_type] || mime_type(file_name)
|
73
|
+
ds_props = {:dsid=>params[:id], :label=>file_name, :mimeType=>mime_type, :dsLocation=>params[:Source]}
|
74
|
+
@container.add_datastream(ActiveFedora::Datastream.new(ds_props))
|
75
|
+
@container.save
|
76
|
+
|
77
|
+
flash[:notice] = "#{params[:Source]} has been saved as #{params[:datastream_id]} in <a href=\"#{asset_url(@container.pid)}\">#{@container.pid}</a>."
|
78
|
+
else
|
79
|
+
flash[:notice] = "You must specify a file to upload or a source URL."
|
80
|
+
end
|
81
|
+
|
82
|
+
unless params[:container_id].nil?
|
83
|
+
redirect_params = {:controller=>"catalog", :id=>params[:asset_id], :action=>:edit}
|
84
|
+
end
|
85
|
+
|
86
|
+
redirect_params ||= {:action=>:index}
|
87
|
+
|
88
|
+
redirect_to redirect_params
|
89
|
+
end
|
90
|
+
|
91
|
+
# Datastream destroy method
|
92
|
+
def destroy
|
93
|
+
@container = ActiveFedora::Base.load_instance(params[:asset_id])
|
94
|
+
@container.datastreams[params[:datastream_id]].delete
|
95
|
+
render :text => "Deleted #{params[:datastream_id]} from #{params[:asset_id]}."
|
96
|
+
# Does the index need to be updated on delete here?
|
97
|
+
@container.save
|
98
|
+
end
|
99
|
+
|
100
|
+
def update
|
101
|
+
self.create
|
102
|
+
end
|
103
|
+
|
104
|
+
def show
|
105
|
+
@container = ActiveFedora::Base.find(params[:asset_id])
|
106
|
+
if (@container.nil?)
|
107
|
+
logger.warn("No such fedora object: " + params[:asset_id])
|
108
|
+
flash[:notice]= "No such fedora object."
|
109
|
+
redirect_to(:action => 'index', :q => nil , :f => nil)
|
110
|
+
return
|
111
|
+
else
|
112
|
+
# get array of parent (container) objects for this FileAsset
|
113
|
+
@downloadable = false
|
114
|
+
# A FileAsset is downloadable iff the user has read or higher access to a parent
|
115
|
+
@response, @document = get_solr_response_for_doc_id(params[:asset_id])
|
116
|
+
if reader?
|
117
|
+
@downloadable = true
|
118
|
+
end
|
119
|
+
|
120
|
+
if @downloadable
|
121
|
+
if @container.datastreams_in_memory.include?(params[:id])
|
122
|
+
ds = @container.datastreams_in_memory[params[:id]]
|
123
|
+
opts = {:filename => ds.label}
|
124
|
+
if params[:mime_type].nil?
|
125
|
+
opts[:type] = ds.attributes["mimeType"]
|
126
|
+
else
|
127
|
+
opts[:type] = params[:mime_type]
|
128
|
+
end
|
129
|
+
if params[:disposition].nil?
|
130
|
+
opts[:disposition] = "attachment"
|
131
|
+
else
|
132
|
+
opts[:disposition] = params[:disposition]
|
133
|
+
end
|
134
|
+
logger.debug opts.inspect
|
135
|
+
send_data ds.content, opts
|
136
|
+
return
|
137
|
+
end
|
138
|
+
else
|
139
|
+
flash[:notice]= "You do not have sufficient access privileges to download this document, which has been marked private."
|
140
|
+
redirect_to(:action => 'index', :q => nil , :f => nil)
|
141
|
+
return
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Cul::Scv::Hydra::Controllers
|
2
|
+
module Helpers
|
3
|
+
end
|
4
|
+
end
|
5
|
+
require 'cul_scv_hydra/controllers/helpers/active_fedora_helper_behavior.rb'
|
6
|
+
require 'cul_scv_hydra/controllers/helpers/application_helper_behavior.rb'
|
7
|
+
require 'cul_scv_hydra/controllers/helpers/dc_metadata_helper_behavior.rb'
|
8
|
+
require 'cul_scv_hydra/controllers/helpers/hydra_assets_helper_behavior.rb'
|
9
|
+
require 'cul_scv_hydra/controllers/helpers/hydra_autocomplete_helper_behavior.rb'
|
10
|
+
require 'cul_scv_hydra/controllers/helpers/hydra_uploader_helper_behavior.rb'
|
11
|
+
require 'cul_scv_hydra/controllers/helpers/resources_helper_behavior.rb'
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Cul::Scv::Hydra::Controllers::Helpers
|
2
|
+
module ActiveFedoraHelperBehavior
|
3
|
+
def load_dc_document_from_solr(doc)
|
4
|
+
pid = doc[:id] ? doc[:id] : doc[:id.to_s]
|
5
|
+
result = pid ? Cul::Scv::Hydra::ActiveFedora::Model::DcDocument.load_instance_from_solr(pid,doc) : nil
|
6
|
+
result
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'cul_scv_hydra/active_fedora/model/dcdocument'
|
2
|
+
# Methods added to this helper will be available to all templates in the application.
|
3
|
+
module Cul::Scv::Hydra::Controllers::Helpers
|
4
|
+
module ApplicationHelperBehavior
|
5
|
+
def load_dc_document_from_solr(doc)
|
6
|
+
pid = doc[:id] ? doc[:id] : doc[:id.to_s]
|
7
|
+
result = pid ? Cul::Scv::Hydra::ActiveFedora::Model::DcDocument.load_instance_from_solr(pid,doc) : nil
|
8
|
+
result
|
9
|
+
end
|
10
|
+
def get_aggregate_count(doc)
|
11
|
+
count = 0
|
12
|
+
obj = load_dc_document_from_solr(doc)
|
13
|
+
count += obj.parts.length unless obj.nil?
|
14
|
+
count
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Cul::Scv::Hydra::Controllers::Helpers
|
2
|
+
module DcMetadataHelperBehavior
|
3
|
+
def dcmi_types
|
4
|
+
['', 'Collection', 'Dataset', 'Event', 'Image', 'InteractiveResource',
|
5
|
+
'MovingImage', 'PhysicalObject', 'Service', 'Software', 'Sound',
|
6
|
+
'StillImage', 'Text']
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'mediashelf/active_fedora_helper'
|
2
|
+
|
3
|
+
module Cul::Scv::Hydra::Controllers::Helpers::HydraAssetsHelperBehavior
|
4
|
+
include MediaShelf::ActiveFedoraHelper
|
5
|
+
|
6
|
+
def link_to_create_asset(link_label, content_type, container_id=nil)
|
7
|
+
opts = {:action => 'new', :controller => "#{content_type}s", :content_type => content_type}
|
8
|
+
opts[:container_id] = container_id unless container_id.nil?
|
9
|
+
if current_user
|
10
|
+
link_to link_label, opts, :class=>"create_asset"
|
11
|
+
else
|
12
|
+
link_to link_label, {:action => 'new', :controller => 'user_sessions', :redirect_params => opts}, :class=>"create_asset"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_file_asset_description(document)
|
17
|
+
obj = load_af_instance_from_solr(document)
|
18
|
+
if obj.nil? || obj.file_objects.empty?
|
19
|
+
return ""
|
20
|
+
else
|
21
|
+
fobj = Resource.load_instance_from_solr(obj.file_objects.first.pid)
|
22
|
+
fad = ""
|
23
|
+
unless fobj.nil?
|
24
|
+
unless fobj.datastreams["descMetadata"].nil?
|
25
|
+
fad = short_description(fobj.datastreams["descMetadata"].get_values("description").first)
|
26
|
+
else
|
27
|
+
fad = short_description(fobj.datastreams["DC"].get_values("description").first)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
fad
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def apply_depositor_metadata(user, is_public=false)
|
35
|
+
if self.is_a? ActiveFedora::Base
|
36
|
+
rights_md = self.datastreams['rightsMetadata']
|
37
|
+
if rights_md
|
38
|
+
rights_md.permissions({"person"=>user}, "edit")
|
39
|
+
rights_md.permissions({"person"=>user}, "read")
|
40
|
+
if is_public
|
41
|
+
rights_md.permissions({"group"=>"public"}, "read")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Cul::Scv::Hydra::Controllers::Helpers
|
2
|
+
module HydraAutocompleteHelperBehavior
|
3
|
+
def autocomplete_fedora_text_field(resource, datastream_name, field_key, opts={})
|
4
|
+
field_name = field_name_for(field_key)
|
5
|
+
field_values = get_values_from_datastream(resource, datastream_name, field_key, opts)
|
6
|
+
field_values = [""] if field_values.empty?
|
7
|
+
field_values = [field_values.first] unless opts.fetch(:multiple, true)
|
8
|
+
required = opts.fetch(:required, true) ? "required" : ""
|
9
|
+
body = ""
|
10
|
+
field_values.each_with_index do |current_value, z|
|
11
|
+
base_id = generate_base_id(field_name, current_value, field_values, opts)
|
12
|
+
name = "asset[#{datastream_name}][#{field_name}][#{z}]"
|
13
|
+
body << "<input class=\"editable-edit edit autocomplete\" id=\"#{base_id}\" data-datastream-name=\"#{datastream_name}\" name=\"#{name}\" value=\"#{h(current_value.strip)}\" #{required} type=\"text\" />"
|
14
|
+
body << "<a href=\"\" title=\"Delete '#{h(current_value)}'\" class=\"destructive field\">Delete</a>" if opts.fetch(:multiple, true) && !current_value.empty?
|
15
|
+
end
|
16
|
+
result = field_selectors_for(datastream_name, field_key)
|
17
|
+
result << body
|
18
|
+
return body
|
19
|
+
end
|
20
|
+
def field_name_for(field_key)
|
21
|
+
if field_key.kind_of?(Array)
|
22
|
+
return OM::XML::Terminology.pointers_to_flat_array(field_key, true).join("__")
|
23
|
+
else
|
24
|
+
return field_key.to_s
|
25
|
+
end
|
26
|
+
end
|
27
|
+
def generate_base_id(field_name, current_value, values, opts)
|
28
|
+
if opts.fetch(:multiple, true)
|
29
|
+
return field_name+"__"+values.index(current_value).to_s
|
30
|
+
else
|
31
|
+
return field_name
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Cul::Scv::Hydra::Controllers::Helpers
|
2
|
+
module HydraUploaderHelperBehavior
|
3
|
+
|
4
|
+
# Generate the appropriate url for posting uploads to
|
5
|
+
# Uses the +container_id+ method to figure out what container uploads should go into
|
6
|
+
def upload_url(in_place=false)
|
7
|
+
if in_place
|
8
|
+
upload_url = asset_datastream_path(:asset_id=>container_id, :id=>'CONTENT')
|
9
|
+
else
|
10
|
+
upload_url = asset_resources_path(:container_id=>container_id)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def asset_id
|
15
|
+
if !params[:asset_id].nil?
|
16
|
+
return params[:asset_id]
|
17
|
+
else
|
18
|
+
return params[:id]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# The id of the container that uploads should be posted into
|
23
|
+
# If params[:container_id] is not set, it uses params[:id] (assumes that you're uploading items into the current object)
|
24
|
+
def container_id
|
25
|
+
if !params[:container_id].nil?
|
26
|
+
return params[:container_id]
|
27
|
+
elsif !params[:asset_id].nil?
|
28
|
+
return params[:asset_id]
|
29
|
+
else
|
30
|
+
return params[:id]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|