hydra-head 4.0.0.rc2 → 4.0.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +8 -1
- data/Gemfile.lock +46 -46
- data/HISTORY.textile +2 -0
- data/app/controllers/hydra/application_controller.rb +5 -0
- data/app/controllers/hydra/contributors_controller.rb +2 -1
- data/app/controllers/hydra/permissions_controller.rb +2 -2
- data/app/helpers/hydra/hydra_assets_helper_behavior.rb +4 -3
- data/app/models/ability.rb +97 -0
- data/app/models/common_metadata_asset.rb +2 -2
- data/app/models/generic_content.rb +2 -4
- data/app/models/generic_image.rb +3 -3
- data/app/models/hydra/datastream/common_mods_index_methods.rb +45 -0
- data/app/models/hydra/datastream/mods_article.rb +528 -0
- data/app/models/hydra/datastream/mods_dataset.rb +166 -0
- data/app/models/hydra/datastream/mods_generic_content.rb +496 -0
- data/app/models/hydra/datastream/mods_image.rb +496 -0
- data/app/models/hydra/datastream/rights_metadata.rb +190 -0
- data/app/models/mods_asset.rb +4 -4
- data/app/models/uses_default_partials.rb +2 -2
- data/app/views/catalog/_edit_partials/_default.html.erb +1 -1
- data/app/views/catalog/show.html.erb +1 -1
- data/app/views/contributors/_edit_conference.html.erb +1 -1
- data/app/views/contributors/_edit_organization.html.erb +1 -1
- data/app/views/contributors/_edit_person.html.erb +1 -1
- data/app/views/contributors/_show_organization.html.erb +1 -1
- data/app/views/hydra/file_assets/_index.html.erb +1 -1
- data/app/views/hydra/file_assets/_result.html.erb +1 -1
- data/app/views/hydra/permissions/index.html.erb +1 -1
- data/app/views/hydra/permissions/new.html.erb +1 -1
- data/app/views/mods_assets/_show_permissions.html.erb +1 -1
- data/hydra-head.gemspec +4 -6
- data/lib/hydra/access_controls_enforcement.rb +10 -6
- data/lib/hydra/access_controls_evaluation.rb +7 -71
- data/lib/hydra/assets.rb +1 -4
- data/lib/hydra/common_mods_index_methods.rb +5 -0
- data/lib/hydra/controller.rb +4 -7
- data/lib/hydra/file_assets.rb +3 -8
- data/lib/hydra/model_methods.rb +3 -2
- data/lib/hydra/model_mixins/common_metadata.rb +2 -2
- data/lib/hydra/model_mixins/mods_object.rb +3 -3
- data/lib/hydra/models/file_asset.rb +3 -3
- data/lib/hydra/mods_article.rb +7 -1
- data/lib/hydra/mods_dataset.rb +8 -0
- data/lib/hydra/mods_generic_content.rb +5 -0
- data/lib/hydra/mods_image.rb +5 -0
- data/lib/hydra/repository_controller.rb +14 -15
- data/lib/hydra/rights_metadata.rb +5 -1
- data/lib/hydra/submission_workflow.rb +1 -1
- data/lib/hydra-head/version.rb +1 -1
- data/lib/hydra.rb +1 -0
- data/lib/mediashelf/active_fedora_helper.rb +71 -0
- data/lib/uva/mods_index_methods.rb +5 -0
- data/test_support/etc/Gemfile +3 -2
- data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +5 -7
- data/test_support/spec/controllers/file_assets_controller_spec.rb +3 -14
- data/test_support/spec/controllers/hydra-assets_controller_spec.rb +2 -2
- data/test_support/spec/helpers/access_controls_enforcement_spec.rb +14 -0
- data/test_support/spec/helpers/access_controls_evaluation_spec.rb +7 -16
- data/test_support/spec/helpers/hydra-repository_controller_spec.rb +0 -14
- data/test_support/spec/helpers/hydra_assets_helper_spec.rb +11 -11
- data/test_support/spec/helpers/hydra_model_methods_spec.rb +2 -2
- data/test_support/spec/integration/file_asset_spec.rb +0 -1
- data/test_support/spec/lib/common_mods_index_methods_spec.rb +1 -1
- data/test_support/spec/lib/hydra_submission_workflow_spec.rb +1 -1
- data/test_support/spec/models/ability_spec.rb +16 -0
- data/test_support/spec/models/file_asset_spec.rb +0 -1
- data/test_support/spec/models/hydra_rights_metadata_spec.rb +4 -5
- data/test_support/spec/models/mods_asset_spec.rb +2 -11
- data/vendor/cache/{active-fedora-4.0.0.rc13.gem → active-fedora-4.0.0.rc18.gem} +0 -0
- data/vendor/cache/blacklight-3.3.1.gem +0 -0
- data/vendor/cache/cancan-1.6.7.gem +0 -0
- data/vendor/cache/compass-0.12.1.gem +0 -0
- data/vendor/cache/compass-rails-1.0.1.gem +0 -0
- data/vendor/cache/compass-susy-plugin-0.9.gem +0 -0
- data/vendor/cache/factory_girl-2.6.4.gem +0 -0
- data/vendor/cache/gherkin-2.9.1.gem +0 -0
- data/vendor/cache/mail-2.4.4.gem +0 -0
- data/vendor/cache/nokogiri-1.5.2.gem +0 -0
- data/vendor/cache/om-1.6.0.rc3.gem +0 -0
- data/vendor/cache/orm_adapter-0.0.7.gem +0 -0
- data/vendor/cache/rack-cache-1.2.gem +0 -0
- data/vendor/cache/rspec-2.9.0.gem +0 -0
- data/vendor/cache/rspec-core-2.9.0.gem +0 -0
- data/vendor/cache/rspec-expectations-2.9.0.gem +0 -0
- data/vendor/cache/rspec-mocks-2.9.0.gem +0 -0
- data/vendor/cache/rspec-rails-2.9.0.gem +0 -0
- data/vendor/cache/sass-rails-3.2.5.gem +0 -0
- data/vendor/cache/stomp-1.2.2.gem +0 -0
- metadata +71 -59
- data/lib/hydra/image.rb +0 -178
- data/uninstall.rb +0 -1
- data/vendor/cache/compass-0.12.rc.1.gem +0 -0
- data/vendor/cache/factory_girl-2.6.1.gem +0 -0
- data/vendor/cache/gherkin-2.9.0.gem +0 -0
- data/vendor/cache/mail-2.4.3.gem +0 -0
- data/vendor/cache/nokogiri-1.5.0.gem +0 -0
- data/vendor/cache/om-1.5.3.gem +0 -0
- data/vendor/cache/orm_adapter-0.0.6.gem +0 -0
- data/vendor/cache/rack-cache-1.1.gem +0 -0
- data/vendor/cache/rspec-2.6.0.gem +0 -0
- data/vendor/cache/rspec-core-2.6.4.gem +0 -0
- data/vendor/cache/rspec-expectations-2.6.0.gem +0 -0
- data/vendor/cache/rspec-mocks-2.6.0.gem +0 -0
- data/vendor/cache/rspec-rails-2.6.1.gem +0 -0
- data/vendor/cache/sass-rails-3.2.4.gem +0 -0
- data/vendor/cache/stomp-1.2.1.gem +0 -0
data/app/models/mods_asset.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# A Basic Model for Assets that conform to Hydra commonMetadata cModel and have basic MODS metadata (currently "Article" is the MODS exemplar)
|
2
2
|
class ModsAsset < ActiveFedora::Base
|
3
3
|
|
4
|
-
# declares a rightsMetadata datastream with type Hydra::RightsMetadata
|
4
|
+
# declares a rightsMetadata datastream with type Hydra::Datastream::RightsMetadata
|
5
5
|
# basically, it is another expression of
|
6
|
-
# has_metadata :name => "rightsMetadata", :type => Hydra::RightsMetadata
|
6
|
+
# has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
|
7
7
|
include Hydra::ModelMixins::CommonMetadata
|
8
8
|
|
9
|
-
# declares a descMetadata datastream with type Hydra::ModsArticle
|
9
|
+
# declares a descMetadata datastream with type Hydra::Datastream::ModsArticle
|
10
10
|
# basically, it is another expression of
|
11
|
-
# has_metadata :name => "descMetadata", :type => Hydra::ModsArticle
|
11
|
+
# has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsArticle
|
12
12
|
include Hydra::ModelMixins::ModsObject
|
13
13
|
|
14
14
|
# adds helpful methods for basic hydra objects
|
@@ -4,9 +4,9 @@
|
|
4
4
|
# a Fedora object for the Hypatia SET hydra content type
|
5
5
|
class UsesDefaultPartials < ActiveFedora::Base
|
6
6
|
|
7
|
-
has_metadata :name => "descMetadata", :type => Hydra::ModsGenericContent
|
7
|
+
has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsGenericContent
|
8
8
|
|
9
|
-
has_metadata :name => "rightsMetadata", :type => Hydra::RightsMetadata
|
9
|
+
has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
|
10
10
|
|
11
11
|
# adds helpful methods for basic hydra objects.
|
12
12
|
include Hydra::ModelMethods
|
@@ -18,7 +18,7 @@
|
|
18
18
|
<span class="next"><%= link_to_next_document(@next_document)%></span>
|
19
19
|
</div>
|
20
20
|
<%- end -%>
|
21
|
-
<%- if
|
21
|
+
<%- if can?(:edit, @document) && controller.action_name != "delete" -%>
|
22
22
|
<span class="edit-browse">
|
23
23
|
<%= edit_and_browse_links %>
|
24
24
|
</span>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<% if @document_fedora.class.respond_to?(:conference_relator_terms) %>
|
6
6
|
<% choices = @document_fedora.class.conference_relator_terms %>
|
7
7
|
<% else %>
|
8
|
-
<% choices = Hydra::ModsArticle.conference_relator_terms %>
|
8
|
+
<% choices = Hydra::Datastream::ModsArticle.conference_relator_terms %>
|
9
9
|
<% end %>
|
10
10
|
<li>
|
11
11
|
<dl class="conference contributor" id="<%= base_id %>">
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<% if @document_fedora.class.respond_to?(:organization_relator_terms) %>
|
6
6
|
<% choices = @document_fedora.class.organization_relator_terms %>
|
7
7
|
<% else %>
|
8
|
-
<% choices = Hydra::ModsArticle.organization_relator_terms %>
|
8
|
+
<% choices = Hydra::Datastream::ModsArticle.organization_relator_terms %>
|
9
9
|
<% end %>
|
10
10
|
|
11
11
|
<dl class="organization contributor" id="<%= base_id %>">
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<% if @document_fedora.class.respond_to?(:person_relator_terms) %>
|
6
6
|
<% choices = @document_fedora.class.person_relator_terms %>
|
7
7
|
<% else %>
|
8
|
-
<% choices = Hydra::ModsArticle.person_relator_terms %>
|
8
|
+
<% choices = Hydra::Datastream::ModsArticle.person_relator_terms %>
|
9
9
|
<% end %>
|
10
10
|
<fieldset class="person contributor" id="<%= base_id %>">
|
11
11
|
<%- if @document_fedora.datastreams["descMetadata"].class.terminology.has_term?(:person, :computing_id) %>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<% if @document_fedora.class.respond_to?(:organization_relator_terms) %>
|
6
6
|
<% choices = @document_fedora.class.organization_relator_terms %>
|
7
7
|
<% else %>
|
8
|
-
<% choices = Hydra::ModsArticle.organization_relator_terms %>
|
8
|
+
<% choices = Hydra::Datastream::ModsArticle.organization_relator_terms %>
|
9
9
|
<% end %>
|
10
10
|
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:organization => organization_counter}, :namePart]).first.empty? %>
|
11
11
|
<li id="<%= base_id %>">
|
@@ -7,7 +7,7 @@
|
|
7
7
|
</table>
|
8
8
|
<% end %>
|
9
9
|
|
10
|
-
<% if !@document.nil? &&
|
10
|
+
<% if !@document.nil? && can?(:edit, @document) && params[:number_of_files].to_i > 0 %>
|
11
11
|
<%- container_content_type_param = defined?(container_content_type) ? "?container_content_type=#{container_content_type}" : "" %>
|
12
12
|
<fieldset id='uploader'>
|
13
13
|
<legend>File Upload</legend>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
</td>
|
5
5
|
<td>
|
6
6
|
|
7
|
-
<% if
|
7
|
+
<% if can? :edit, @document %>
|
8
8
|
<%= button_to("Delete", "/file_assets/" + result["id"] + "?container_id=" + @document[:id], :confirm => "Are you sure you want to delete this file?", :method => :delete, :class => "delete-button") %>
|
9
9
|
|
10
10
|
<% end %>
|
@@ -1 +1 @@
|
|
1
|
-
<%= render :partial=>"permissions/index" %>
|
1
|
+
<%= render :partial=>"hydra/permissions/index" %>
|
@@ -1 +1 @@
|
|
1
|
-
<%= render :partial=>"permissions/new" %>
|
1
|
+
<%= render :partial=>"hydra/permissions/new" %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%- document ||= @document -%>
|
2
2
|
<div>
|
3
3
|
<dl class="defList">
|
4
|
-
<% if
|
4
|
+
<% if can? :edit, document %>
|
5
5
|
<h3>Group</h3>
|
6
6
|
<%= get_data_with_label(document, "Discover Access:", 'discover_access_group_t', :default=>"private") %>
|
7
7
|
<%= get_data_with_label(document, "Read & Download Access:", 'read_access_group_t', :default=>"private") %>
|
data/hydra-head.gemspec
CHANGED
@@ -13,22 +13,20 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = %q{Hydra-Head is a Rails Engine containing the core code for a Hydra application. The full hydra stack includes: Blacklight, Fedora, Solr, active-fedora, solrizer, and om}
|
14
14
|
|
15
15
|
s.add_dependency "rails", '~> 3.2.1'
|
16
|
-
s.add_dependency "blacklight", '~>3.
|
16
|
+
s.add_dependency "blacklight", '~>3.3.1'
|
17
17
|
s.add_dependency "devise"
|
18
|
-
s.add_dependency "active-fedora", '~>4.0.0.
|
18
|
+
s.add_dependency "active-fedora", '~>4.0.0.rc18'
|
19
19
|
s.add_dependency 'RedCloth', '=4.2.9'
|
20
20
|
s.add_dependency 'solrizer-fedora', '>=1.2.5'
|
21
21
|
s.add_dependency 'block_helpers'
|
22
22
|
s.add_dependency 'sanitize'
|
23
|
-
s.add_dependency '
|
24
|
-
|
23
|
+
s.add_dependency 'cancan'
|
25
24
|
|
26
25
|
s.add_development_dependency 'sqlite3-ruby'
|
27
26
|
|
28
27
|
s.add_development_dependency 'yard'
|
29
28
|
s.add_development_dependency 'jettywrapper', ">=1.0.4"
|
30
|
-
|
31
|
-
s.add_development_dependency 'rspec-rails', '~> 2.6.0'
|
29
|
+
s.add_development_dependency 'rspec-rails'
|
32
30
|
s.add_development_dependency 'mocha'
|
33
31
|
s.add_development_dependency 'cucumber-rails', '>=1.2.0'
|
34
32
|
s.add_development_dependency 'factory_girl'
|
@@ -18,9 +18,13 @@ module Hydra::AccessControlsEnforcement
|
|
18
18
|
# end
|
19
19
|
def enforce_access_controls(opts={})
|
20
20
|
controller_action = params[:action].to_s
|
21
|
-
if params[:action] == "destroy"
|
21
|
+
controller_action = "edit" if params[:action] == "destroy"
|
22
22
|
delegate_method = "enforce_#{controller_action}_permissions"
|
23
|
-
self.
|
23
|
+
if self.respond_to?(delegate_method.to_sym, true)
|
24
|
+
self.send(delegate_method.to_sym)
|
25
|
+
else
|
26
|
+
true
|
27
|
+
end
|
24
28
|
end
|
25
29
|
|
26
30
|
|
@@ -71,7 +75,7 @@ module Hydra::AccessControlsEnforcement
|
|
71
75
|
if params[:viewing_context] == "browse"
|
72
76
|
session[:viewing_context] = params[:viewing_context]
|
73
77
|
elsif session[:viewing_context] == "edit"
|
74
|
-
if
|
78
|
+
if can? :edit, params[:id]
|
75
79
|
logger.debug("enforce_viewing_context_for_show_requests redirecting to edit")
|
76
80
|
if params[:files]
|
77
81
|
redirect_to :action=>:edit, :files=>true
|
@@ -104,7 +108,7 @@ module Hydra::AccessControlsEnforcement
|
|
104
108
|
end
|
105
109
|
end
|
106
110
|
end
|
107
|
-
unless
|
111
|
+
unless can? :read, params[:id]
|
108
112
|
flash[:notice]= "You do not have sufficient access privileges to read this document, which has been marked private."
|
109
113
|
redirect_to(:action => 'index', :q => nil , :f => nil) and return false
|
110
114
|
end
|
@@ -116,7 +120,7 @@ module Hydra::AccessControlsEnforcement
|
|
116
120
|
def enforce_edit_permissions(opts={})
|
117
121
|
logger.debug("Enforcing edit permissions")
|
118
122
|
load_permissions_from_solr
|
119
|
-
if !
|
123
|
+
if !can? :edit, params[:id]
|
120
124
|
session[:viewing_context] = "browse"
|
121
125
|
flash[:notice] = "You do not have sufficient privileges to edit this document. You have been redirected to the read-only view."
|
122
126
|
redirect_to :action=>:show
|
@@ -164,7 +168,7 @@ module Hydra::AccessControlsEnforcement
|
|
164
168
|
# end
|
165
169
|
def add_access_controls_to_solr_params(solr_parameters, user_parameters)
|
166
170
|
apply_gated_discovery(solr_parameters, user_parameters)
|
167
|
-
if !
|
171
|
+
if !can? :read, params[:id]
|
168
172
|
solr_parameters[:qt] = Blacklight.config[:public_qt]
|
169
173
|
end
|
170
174
|
end
|
@@ -16,86 +16,22 @@ module Hydra::AccessControlsEvaluation
|
|
16
16
|
# @example
|
17
17
|
# test_permission(:edit)
|
18
18
|
def test_permission(permission_type)
|
19
|
-
|
20
|
-
|
21
|
-
logger.warn("SolrDocument is nil")
|
22
|
-
end
|
23
|
-
|
24
|
-
if current_user.nil?
|
25
|
-
user = "public"
|
26
|
-
logger.debug("current_user is nil, assigning public")
|
27
|
-
else
|
28
|
-
user = user_key
|
29
|
-
end
|
30
|
-
|
31
|
-
user_groups = RoleMapper.roles(user)
|
32
|
-
# everyone is automatically a member of the group 'public'
|
33
|
-
user_groups.push 'public' unless user_groups.include?('public')
|
34
|
-
# logged-in users are automatically members of the group "registered"
|
35
|
-
user_groups.push 'registered' unless (user == "public" || user_groups.include?('registered') )
|
36
|
-
|
37
|
-
logger.debug("User #{user} is a member of groups: #{user_groups.inspect}")
|
38
|
-
case permission_type
|
39
|
-
when :edit
|
40
|
-
logger.debug("Checking edit permissions for user: #{user}")
|
41
|
-
group_intersection = user_groups & edit_groups
|
42
|
-
result = !group_intersection.empty? || edit_persons.include?(user)
|
43
|
-
when :read
|
44
|
-
logger.debug("Checking read permissions for user: #{user}")
|
45
|
-
group_intersection = user_groups & read_groups
|
46
|
-
result = !group_intersection.empty? || read_persons.include?(user)
|
47
|
-
else
|
48
|
-
result = false
|
49
|
-
end
|
50
|
-
logger.debug("test_permission result: #{result}")
|
51
|
-
return result
|
52
|
-
# else
|
53
|
-
# logger.debug("nil user, test_permission returning false")
|
54
|
-
# return false
|
55
|
-
# end
|
19
|
+
ActiveSupport::Deprecation.warn("test_permission has been deprecated. Use can? instead")
|
20
|
+
can? permission_type, @permissions_solr_document
|
56
21
|
end
|
57
|
-
|
22
|
+
|
58
23
|
# Test whether the the current user has edit permissions.
|
59
24
|
# This is available as a view helper method as well as within your controllers.
|
60
25
|
def editor?
|
61
|
-
|
26
|
+
logger.warn("editor? has been deprecated. Use can? instead")
|
27
|
+
can? :edit, @permissions_solr_document
|
62
28
|
end
|
63
29
|
|
64
30
|
# Test whether the the current user has read permissions.
|
65
31
|
# This is available as a view helper method as well as within your controllers.
|
66
32
|
def reader?
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
private
|
71
|
-
def edit_groups
|
72
|
-
edit_group_field = Hydra.config[:permissions][:edit][:group]
|
73
|
-
eg = ((@permissions_solr_document == nil || @permissions_solr_document.fetch(edit_group_field,nil) == nil) ? [] : @permissions_solr_document.fetch(edit_group_field,nil))
|
74
|
-
logger.debug("edit_groups: #{eg.inspect}")
|
75
|
-
return eg
|
76
|
-
end
|
77
|
-
|
78
|
-
# edit implies read, so read_groups is the union of edit and read groups
|
79
|
-
def read_groups
|
80
|
-
read_group_field = Hydra.config[:permissions][:read][:group]
|
81
|
-
rg = edit_groups | ((@permissions_solr_document == nil || @permissions_solr_document.fetch(read_group_field,nil) == nil) ? [] : @permissions_solr_document.fetch(read_group_field,nil))
|
82
|
-
logger.debug("read_groups: #{rg.inspect}")
|
83
|
-
return rg
|
84
|
-
end
|
85
|
-
|
86
|
-
def edit_persons
|
87
|
-
edit_person_field = Hydra.config[:permissions][:edit][:individual]
|
88
|
-
ep = ((@permissions_solr_document == nil || @permissions_solr_document.fetch(edit_person_field,nil) == nil) ? [] : @permissions_solr_document.fetch(edit_person_field,nil))
|
89
|
-
logger.debug("edit_persons: #{ep.inspect}")
|
90
|
-
return ep
|
91
|
-
end
|
92
|
-
|
93
|
-
# edit implies read, so read_persons is the union of edit and read persons
|
94
|
-
def read_persons
|
95
|
-
read_individual_field = Hydra.config[:permissions][:read][:individual]
|
96
|
-
rp = edit_persons | ((@permissions_solr_document == nil || @permissions_solr_document.fetch(read_individual_field,nil) == nil) ? [] : @permissions_solr_document.fetch(read_individual_field,nil))
|
97
|
-
logger.debug("read_persons: #{rp.inspect}")
|
98
|
-
return rp
|
33
|
+
logger.warn("reader? has been deprecated. Use can? instead")
|
34
|
+
can? :read, @permissions_solr_document
|
99
35
|
end
|
100
36
|
|
101
37
|
end
|
data/lib/hydra/assets.rb
CHANGED
@@ -90,7 +90,7 @@ module Hydra::Assets
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def destroy
|
93
|
-
af = ActiveFedora::Base.find(params[:id])
|
93
|
+
af = ActiveFedora::Base.find(params[:id], :cast=>true)
|
94
94
|
assets = af.destroy_child_assets
|
95
95
|
af.delete
|
96
96
|
msg = "Deleted #{params[:id]}"
|
@@ -105,9 +105,6 @@ module Hydra::Assets
|
|
105
105
|
|
106
106
|
protected
|
107
107
|
|
108
|
-
def load_document
|
109
|
-
@document = load_document_from_params
|
110
|
-
end
|
111
108
|
|
112
109
|
|
113
110
|
def mods_assets_update_validation
|
@@ -8,6 +8,11 @@
|
|
8
8
|
# This method returns a Hash of person_full_name_facet values which extract the persons affiliation and puts it in an mods_organization_facet
|
9
9
|
|
10
10
|
module Hydra::CommonModsIndexMethods
|
11
|
+
|
12
|
+
def self.included(base)
|
13
|
+
ActiveSupport::Deprecation.warn("Hydra::CommonModsIndexMethods has been deprecated. Use Hydra::Datastream::CommonModsIndexMethods instead")
|
14
|
+
end
|
15
|
+
|
11
16
|
# Extracts the first and last names of persons and creates Solr::Field objects with for person_full_name_facet
|
12
17
|
#
|
13
18
|
# == Returns:
|
data/lib/hydra/controller.rb
CHANGED
@@ -24,15 +24,12 @@ module Hydra::Controller
|
|
24
24
|
# Sets @document_fedora with the loaded object
|
25
25
|
# Sets @file_assets with file objects that are children of the loaded object
|
26
26
|
def load_fedora_document
|
27
|
-
@document_fedora = ActiveFedora::Base.find(params[:id])
|
28
|
-
unless @document_fedora.class.include?(
|
29
|
-
@document_fedora.class.send :include,
|
30
|
-
end
|
31
|
-
unless @document_fedora.class.include?(ActiveFedora::FileManagement)
|
32
|
-
@document_fedora.class.send :include, ActiveFedora::FileManagement
|
27
|
+
@document_fedora = ActiveFedora::Base.find(params[:id], :cast=>true)
|
28
|
+
unless @document_fedora.class.include?(Hydra::ModelMethods)
|
29
|
+
@document_fedora.class.send :include, Hydra::ModelMethods
|
33
30
|
end
|
34
31
|
|
35
|
-
@file_assets = @document_fedora.
|
32
|
+
@file_assets = @document_fedora.parts(:response_format=>:solr)
|
36
33
|
end
|
37
34
|
|
38
35
|
|
data/lib/hydra/file_assets.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module Hydra::FileAssets
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
|
-
|
5
4
|
included do
|
6
5
|
include Hydra::AccessControlsEnforcement
|
7
6
|
include Hydra::AssetsControllerHelper
|
@@ -33,7 +32,7 @@ module Hydra::FileAssets
|
|
33
32
|
@container_response, @document = get_solr_response_for_doc_id(params[:asset_id])
|
34
33
|
|
35
34
|
# Including these lines for backwards compatibility (until we can use Rails3 callbacks)
|
36
|
-
@container = ActiveFedora::Base.find(params[:asset_id])
|
35
|
+
@container = ActiveFedora::Base.find(params[:asset_id], :cast=>true)
|
37
36
|
@solr_result = @container.file_objects(:response_format=>:solr)
|
38
37
|
end
|
39
38
|
|
@@ -98,7 +97,7 @@ module Hydra::FileAssets
|
|
98
97
|
|
99
98
|
# Common destroy method for all AssetsControllers
|
100
99
|
def destroy
|
101
|
-
ActiveFedora::Base.find(params[:id]).delete
|
100
|
+
ActiveFedora::Base.find(params[:id], :cast=>true).delete
|
102
101
|
|
103
102
|
flash[:notice] = "Deleted #{params[:id]} from #{params[:container_id]}."
|
104
103
|
|
@@ -125,11 +124,7 @@ module Hydra::FileAssets
|
|
125
124
|
pid = @file_asset.container_id
|
126
125
|
@downloadable = false
|
127
126
|
# A FileAsset is downloadable iff the user has read or higher access to a parent
|
128
|
-
|
129
|
-
@response, @permissions_solr_document = get_solr_response_for_doc_id(pid)
|
130
|
-
rescue Blacklight::Exceptions::InvalidSolrID
|
131
|
-
end
|
132
|
-
if reader?
|
127
|
+
if can? :read, @file_asset
|
133
128
|
@downloadable = true
|
134
129
|
end
|
135
130
|
|
data/lib/hydra/model_methods.rb
CHANGED
@@ -2,8 +2,9 @@ module Hydra::ModelMethods
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
included do
|
5
|
-
|
6
|
-
|
5
|
+
unless self.class == Module
|
6
|
+
self.has_many :parts, :class_name=>'ActiveFedora::Base', :property=>:is_part_of
|
7
|
+
end
|
7
8
|
end
|
8
9
|
|
9
10
|
#
|
@@ -15,10 +15,10 @@ module Hydra::ModelMixins
|
|
15
15
|
|
16
16
|
def self.included(klazz)
|
17
17
|
# Uses the Hydra Rights Metadata Schema for tracking access permissions & copyright
|
18
|
-
klazz.has_metadata :name => "rightsMetadata", :type => Hydra::RightsMetadata
|
18
|
+
klazz.has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
|
19
19
|
|
20
20
|
# Ensure that objects assert the commonMetadata cModel
|
21
21
|
# klazz.relationships << :has_model => "info:fedora/hydra-cModel:commonMetadata"
|
22
22
|
end
|
23
23
|
end
|
24
|
-
end
|
24
|
+
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# Include this into models to specify that the descMetadata datastream contains basic MODS metadata
|
2
2
|
#
|
3
3
|
# Explicitly declares:
|
4
|
-
# descMetadata datastream using Hydra::ModsArticle Terminology
|
4
|
+
# descMetadata datastream using Hydra::Datastream::ModsArticle Terminology
|
5
5
|
#
|
6
6
|
module Hydra::ModelMixins::ModsObject
|
7
7
|
|
8
8
|
def self.included(klazz)
|
9
9
|
# Uses the Hydra MODS Basic profile for tracking descriptive metadata
|
10
|
-
klazz.has_metadata :name => "descMetadata", :type => Hydra::ModsArticle
|
10
|
+
klazz.has_metadata :name => "descMetadata", :type => Hydra::Datastream::ModsArticle
|
11
11
|
|
12
12
|
# Ensure that objects assert the modsObject cModel
|
13
13
|
# klazz.relationships << :has_model => "info:fedora/hydra-cModel:modsObject"
|
14
14
|
end
|
15
15
|
|
16
|
-
end
|
16
|
+
end
|
@@ -28,12 +28,12 @@ module Hydra
|
|
28
28
|
|
29
29
|
|
30
30
|
def label
|
31
|
-
descMetadata.
|
31
|
+
descMetadata.title.first
|
32
32
|
end
|
33
33
|
|
34
34
|
def label=(label)
|
35
35
|
super
|
36
|
-
descMetadata.
|
36
|
+
descMetadata.title = label
|
37
37
|
end
|
38
38
|
|
39
39
|
# augments add_file_datastream to also put file size (in bytes/KB/MB/GB/TB) in dc:extent
|
@@ -46,7 +46,7 @@ module Hydra
|
|
46
46
|
else
|
47
47
|
size = ""
|
48
48
|
end
|
49
|
-
datastreams["descMetadata"].
|
49
|
+
datastreams["descMetadata"].extent = size
|
50
50
|
end
|
51
51
|
|
52
52
|
# Override ActiveFedora::Base.to_solr to...
|
data/lib/hydra/mods_article.rb
CHANGED
@@ -2,9 +2,15 @@ require "uva/mods_index_methods"
|
|
2
2
|
module Hydra
|
3
3
|
|
4
4
|
class ModsArticle < ActiveFedora::NokogiriDatastream
|
5
|
-
include Hydra::CommonModsIndexMethods
|
5
|
+
include Hydra::Datastream::CommonModsIndexMethods
|
6
6
|
include Uva::ModsIndexMethods
|
7
7
|
|
8
|
+
def initialize(digital_object, dsid, options={})
|
9
|
+
ActiveSupport::Deprecation.warn("Hydra::ModsArticle has been deprecated. Use Hydra::Datastream::ModsArticle instead")
|
10
|
+
super
|
11
|
+
|
12
|
+
end
|
13
|
+
|
8
14
|
set_terminology do |t|
|
9
15
|
t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
|
10
16
|
|
data/lib/hydra/mods_dataset.rb
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
require "uva/mods_index_methods"
|
2
2
|
module Hydra
|
3
|
+
|
3
4
|
class ModsDataset < ActiveFedora::NokogiriDatastream
|
4
5
|
include Hydra::CommonModsIndexMethods
|
6
|
+
|
7
|
+
def initialize(digital_object, dsid, options={})
|
8
|
+
ActiveSupport::Deprecation.warn("Hydra::ModsDataset has been deprecated. Use Hydra::Datastream::ModsDataset instead")
|
9
|
+
super
|
10
|
+
|
11
|
+
end
|
12
|
+
|
5
13
|
set_terminology do |t|
|
6
14
|
t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
|
7
15
|
|
@@ -2,6 +2,11 @@ module Hydra
|
|
2
2
|
class ModsGenericContent < ActiveFedora::NokogiriDatastream
|
3
3
|
include Hydra::CommonModsIndexMethods
|
4
4
|
|
5
|
+
def initialize(digital_object, dsid, options={})
|
6
|
+
ActiveSupport::Deprecation.warn("Hydra::ModsGenericContent has been deprecated. Use Hydra::Datastream::ModsGenericContent instead")
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
5
10
|
set_terminology do |t|
|
6
11
|
t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
|
7
12
|
|
data/lib/hydra/mods_image.rb
CHANGED
@@ -2,6 +2,11 @@ module Hydra
|
|
2
2
|
class ModsImage < ActiveFedora::NokogiriDatastream
|
3
3
|
include Hydra::CommonModsIndexMethods
|
4
4
|
|
5
|
+
def initialize(digital_object, dsid, options={})
|
6
|
+
ActiveSupport::Deprecation.warn("Hydra::ModsImage has been deprecated. Use Hydra::Datastream::ModsImage instead")
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
5
10
|
set_terminology do |t|
|
6
11
|
t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
|
7
12
|
|
@@ -38,15 +38,6 @@ module Hydra::RepositoryController
|
|
38
38
|
::ActiveFedora::SolrService.solr_name(field_name, field_type)
|
39
39
|
end
|
40
40
|
|
41
|
-
# Uses submitted params Hash to figure out what Model to load
|
42
|
-
# params should contain :content_type and :id
|
43
|
-
def load_document_from_params
|
44
|
-
af_model = retrieve_af_model(params[:content_type])
|
45
|
-
unless af_model
|
46
|
-
af_model = ModsAsset
|
47
|
-
end
|
48
|
-
return af_model.find(params[:id])
|
49
|
-
end
|
50
41
|
|
51
42
|
# Returns a list of datastreams for download.
|
52
43
|
# Uses user's roles and "mime_type" value in submitted params to decide what to return.
|
@@ -55,7 +46,7 @@ module Hydra::RepositoryController
|
|
55
46
|
if opts[:canonical]
|
56
47
|
mime_type = opts[:mime_type] ? opts[:mime_type] : "application/pdf"
|
57
48
|
result = filter_datastreams_for_mime_type(fedora_object.datastreams, mime_type).sort.first[1]
|
58
|
-
elsif
|
49
|
+
elsif can? :edit, fedora_object
|
59
50
|
if params["mime_type"] == "all"
|
60
51
|
result = fedora_object.datastreams
|
61
52
|
else
|
@@ -82,6 +73,19 @@ module Hydra::RepositoryController
|
|
82
73
|
end
|
83
74
|
|
84
75
|
protected
|
76
|
+
def load_document
|
77
|
+
@document = load_document_from_params
|
78
|
+
end
|
79
|
+
|
80
|
+
# Uses submitted params Hash to figure out what Model to load
|
81
|
+
# params should contain :content_type and :id
|
82
|
+
def load_document_from_params
|
83
|
+
af_model = retrieve_af_model(params[:content_type])
|
84
|
+
unless af_model
|
85
|
+
af_model = ModsAsset
|
86
|
+
end
|
87
|
+
return af_model.find(params[:id])
|
88
|
+
end
|
85
89
|
|
86
90
|
def retrieve_af_model(class_name, opts={})
|
87
91
|
if !class_name.nil?
|
@@ -98,11 +102,6 @@ module Hydra::RepositoryController
|
|
98
102
|
return false
|
99
103
|
end
|
100
104
|
|
101
|
-
def load_af_instance_from_solr(doc)
|
102
|
-
pid = doc[:id] ? doc[:id] : doc[:id.to_s]
|
103
|
-
pid ? ActiveFedora::Base.load_instance_from_solr(pid,doc) : nil
|
104
|
-
end
|
105
|
-
|
106
105
|
private
|
107
106
|
|
108
107
|
def filter_datastreams_for_mime_type(datastreams_hash, mime_type)
|
@@ -1,7 +1,11 @@
|
|
1
|
-
require "active-fedora"
|
2
1
|
module Hydra
|
3
2
|
class RightsMetadata < ActiveFedora::NokogiriDatastream
|
4
3
|
|
4
|
+
def initialize(digital_object, dsid, options={})
|
5
|
+
ActiveSupport::Deprecation.warn("Hydra::RightsMetadata has been deprecated. Use Hydra::Datastream::RightsMetadata instead")
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
5
9
|
set_terminology do |t|
|
6
10
|
t.root(:path=>"rightsMetadata", :xmlns=>"http://hydra-collab.stanford.edu/schemas/rightsMetadata/v1", :schema=>"http://github.com/projecthydra/schemas/tree/v1/rightsMetadata.xsd")
|
7
11
|
t.copyright {
|
@@ -118,7 +118,7 @@ module Hydra::SubmissionWorkflow
|
|
118
118
|
begin
|
119
119
|
af = ActiveFedora::Base.load_instance_from_solr(params[:id])
|
120
120
|
return "#{ActiveFedora::ContentModel.known_models_for( af ).first}".underscore.pluralize.to_sym
|
121
|
-
rescue
|
121
|
+
rescue Exception => e #TODO this should be ActiveFedora::ObjectNotFoundError
|
122
122
|
nil
|
123
123
|
end
|
124
124
|
end
|
data/lib/hydra-head/version.rb
CHANGED