fcrepo_admin 0.5.0 → 0.5.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b41a170f6b9f8ad2296559c6ff76f85c1b325c2
4
- data.tar.gz: ce970e804c3e9fec32d7ac493bdb001e775f765d
3
+ metadata.gz: d96f1bb3976444ea4f8397a4e929415d07637a93
4
+ data.tar.gz: 2a297f927e6d1d723502f857bd4e2fe6947574fd
5
5
  SHA512:
6
- metadata.gz: 13935a3cdf2cc95bd0048caf3a25c3e1442b4229b2f874ad93c0eb47bb4bbc2164a9f78da5acbef5dec5ca39e949d7db46b4fa1b167d821d16e88b8308ecff08
7
- data.tar.gz: bd682bf0c49d2f06dd2aef3c630d4da5ed723c2efc6e1d1005a3801f40d25f7df096a4267f9e63566481556b691213915fcb6c4ffb969b04397477a584688d53
6
+ metadata.gz: d00acee3472c6f98978af43063abc5d7c47c4dcebbe68cb8ce9327bd32a04a8daf9739a8eee8ddbc0d6178cbdc3b8816283a47e34af514002af8bdee7250cb18
7
+ data.tar.gz: 80d93b9748fc1021c2128b2076765b5e8640f107ff7ece56b2fa1bb51e555f9be664ac6e32938c0e55340ec36c70918a3891032f659849d6866d8374df46e67e
@@ -1,3 +1,9 @@
1
+ ==== 0.5.1 (2013-05-21)
2
+
3
+ * Association show view paginated (Fixes #18).
4
+ * Association show view uses blacklight document list rendering.
5
+ * Object show view loads Solr document for object and incorporates Blacklight document show fields.
6
+
1
7
  === 0.5.0 (2013-05-17)
2
8
 
3
9
  * Feature: Configurable settings.
@@ -4,8 +4,8 @@ A Rails engine providing an administrative interface to a Fedora Commons reposit
4
4
 
5
5
  === Status
6
6
 
7
- This project should be considered *experimental* and not ready for production deployment.
8
- Versions earlier than 1.0 may change API and/or UI without notice or regard for backward compatibility.
7
+ This project should be considered *experimental*. Versions earlier than 1.0 may change API and/or UI without notice
8
+ or regard for backward compatibility.
9
9
 
10
10
  === Requirements
11
11
 
@@ -90,7 +90,7 @@ You should start with this content:
90
90
  end
91
91
  end
92
92
 
93
- Refer to the default configuration settings at https://github.com/projecthydra/fcrepo-admin/blob/master/lib/fcrepo_admin.rb.
93
+ Refer to the default configuration settings at https://github.com/projecthydra/fcrepo-admin/blob/master/lib/fcrepo_admin/configurable.rb.
94
94
 
95
95
  All configuration options are set by module methods prefixed by FcrepoAdmin, for example:
96
96
 
@@ -3,8 +3,6 @@ module FcrepoAdmin
3
3
 
4
4
  layout 'fcrepo_admin/objects'
5
5
 
6
- include Hydra::Controller::ControllerBehavior
7
- include Hydra::PolicyAwareAccessControlsEnforcement
8
6
  include FcrepoAdmin::Controller::ControllerBehavior
9
7
 
10
8
  before_filter :load_and_authorize_object
@@ -14,9 +12,12 @@ module FcrepoAdmin
14
12
  end
15
13
 
16
14
  def show
15
+ render(:text => "Association not found", :status => 404) if @association.nil?
17
16
  if @association.collection?
18
17
  get_collection_from_solr
19
- else
18
+ else
19
+ # This shouldn't normally happen b/c UI links directly to target object view in this case
20
+ # but we'll handle it gracefully anyway.
20
21
  target = @object.send("#{@association.name}_id")
21
22
  if target
22
23
  redirect_to :controller => 'objects', :action => 'show', :id => target, :use_route => 'fcrepo_admin'
@@ -34,20 +35,27 @@ module FcrepoAdmin
34
35
  end
35
36
 
36
37
  def get_collection_query_result
37
- args = {raw: true}
38
- apply_gated_discovery(args, {}) # add args to enforce Hydra permissions and admin policies
39
- ActiveFedora::SolrService.query(construct_collection_query, args)
38
+ ActiveFedora::SolrService.query(construct_collection_query, collection_query_args)
39
+ end
40
+
41
+ def collection_query_args
42
+ page = params[:page] ||= 1
43
+ rows = FcrepoAdmin.associated_objects_per_page
44
+ start = (page.to_i - 1) * rows
45
+ args = {raw: true, start: start, rows: rows}
46
+ apply_gated_discovery(args, nil) # add args to enforce Hydra access controls
47
+ args
40
48
  end
41
49
 
42
50
  def construct_collection_query
43
51
  # Copied from ActiveFedora::Associations::AssociationCollection#construct_query
44
52
  clauses = {@association.options[:property] => @object.internal_uri}
45
53
  clauses[:has_model] = @association.class_name.constantize.to_class_uri if @association.class_name && @association.class_name != 'ActiveFedora::Base'
46
- query = ActiveFedora::SolrService.construct_query_for_rel(clauses)
54
+ ActiveFedora::SolrService.construct_query_for_rel(clauses)
47
55
  end
48
56
 
49
57
  def load_association
50
- @association = @object.reflections[params[:id].to_sym] # XXX raise exception if nil
58
+ @association = @object.reflections[params[:id].to_sym]
51
59
  end
52
60
 
53
61
  end
@@ -6,8 +6,6 @@ module FcrepoAdmin
6
6
  layout 'fcrepo_admin/datastreams', :except => :index
7
7
  layout 'fcrepo_admin/objects', :only => :index
8
8
 
9
- include Hydra::Controller::ControllerBehavior
10
- include Hydra::PolicyAwareAccessControlsEnforcement
11
9
  include FcrepoAdmin::Controller::ControllerBehavior
12
10
 
13
11
  before_filter :load_and_authorize_object
@@ -3,11 +3,10 @@ module FcrepoAdmin
3
3
 
4
4
  layout 'fcrepo_admin/objects'
5
5
 
6
- include Hydra::Controller::ControllerBehavior
7
- include Hydra::PolicyAwareAccessControlsEnforcement
8
6
  include FcrepoAdmin::Controller::ControllerBehavior
9
7
 
10
8
  before_filter :load_and_authorize_object
9
+ before_filter :load_solr_document, :only => :show
11
10
 
12
11
  def show
13
12
  end
@@ -25,5 +24,12 @@ module FcrepoAdmin
25
24
  def permissions
26
25
  end
27
26
 
27
+ protected
28
+
29
+ def load_solr_document
30
+ query = ActiveFedora::SolrService.construct_query_for_pids([@object.pid])
31
+ @document = SolrDocument.new(ActiveFedora::SolrService.query(query).first, nil)
32
+ end
33
+
28
34
  end
29
35
  end
@@ -0,0 +1,12 @@
1
+
2
+ <% # header bar for doc items in index view -%>
3
+ <div class="documentHeader clearfix">
4
+
5
+ <% # main title container for doc partial view -%>
6
+ <h5 class="index_title"><%= t('blacklight.search.documents.counter', :counter => (document_counter + 1 + @response.params[:start].to_i)) %><%= link_to_document document, :label=>document_show_link_field(document), :counter => (document_counter + 1 + @response.params[:start].to_i) %></h5>
7
+
8
+
9
+ <% # bookmark functions for items/docs -%>
10
+ <%= render_index_doc_actions document, :wrapping_class => "documentFunctions span2" %>
11
+ </div>
12
+
@@ -1,12 +1,16 @@
1
1
  <h3><%= t("fcrepo_admin.object.associations.title") %>: <%= @association.name %></h3>
2
2
 
3
3
  <% if @response.total > 0 %>
4
- <%= content_tag :ol, :start => @response.params[:start].to_i + 1 do %>
5
- <% @documents.each do |doc| %>
6
- <li>
7
- <%= link_to doc.id, fcrepo_admin.object_path(doc.id) %>
8
- </li>
9
- <% end %>
4
+ <% if @response.total > associated_objects_per_page %>
5
+ <div class="pagination">
6
+ <%= render_pagination_info @response %>
7
+ </div>
8
+ <% end %>
9
+ <%= render :partial => 'catalog/document_list', :locals => {:documents => @documents} %>
10
+ <% if @response.total > associated_objects_per_page %>
11
+ <div class="pagination">
12
+ <%= paginate_rsolr_response @response, :layout => 'blacklight' %>
13
+ </div>
10
14
  <% end %>
11
15
  <% else %>
12
16
  <div class="alert">
@@ -1,6 +1,6 @@
1
1
  <h4><%= t("fcrepo_admin.object.permissions.inherited") %></h4>
2
2
 
3
- <% if object_is_governable? %>
3
+ <% if object.governable? %>
4
4
  <div class="alert alert-info">
5
5
  <% if object_is_governed_by %>
6
6
  <%= t("fcrepo_admin.object.apo.governed_by") %>:
@@ -4,7 +4,7 @@
4
4
  <%= render :partial => 'direct_permissions', :locals => {:object => @object} %>
5
5
  </div>
6
6
  <div class="span5">
7
- <%= render 'inherited_permissions' %>
7
+ <%= render :partial => 'inherited_permissions', :locals => {:object => @object} %>
8
8
  </div>
9
9
  </div>
10
10
 
@@ -1,3 +1,6 @@
1
+ <div class="row">
2
+ <%= render_document_partial @document, :show %>
3
+ </div>
1
4
  <div class="row">
2
5
  <div class="span5">
3
6
  <%= render :partial => 'datastreams', :locals => {:object => @object} %>
@@ -4,54 +4,8 @@ require 'hydra/head'
4
4
 
5
5
  module FcrepoAdmin
6
6
 
7
- #
8
- # FcrepoAdmin configuration settings
9
- #
10
- mattr_accessor :read_only
11
- self.read_only = false
12
-
13
- # MIME types representing text content that do not have "text" media type.
14
- mattr_accessor :extra_text_mime_types
15
- self.extra_text_mime_types = ['application/xml', 'application/rdf+xml', 'application/json']
16
-
17
- # Datastream profile keys for values to display on datastream index view
18
- mattr_accessor :datastream_index_columns
19
- self.datastream_index_columns = ["dsLabel", "dsMIME", "dsSize", "dsCreateDate"]
20
-
21
- # Datastream profile keys for values to display on datastream history view
22
- mattr_accessor :datastream_history_columns
23
- self.datastream_history_columns = ["dsCreateDate"]
24
-
25
- # Datastream context navigation items
26
- mattr_accessor :datastream_nav_items
27
- self.datastream_nav_items = [:dsid, :version, :current_version, :summary, :content, :download, :edit, :upload, :history]
28
-
29
- mattr_accessor :datastream_show_profile_keys
30
- self.datastream_show_profile_keys = ["dsLabel", "dsMIME", "dsVersionID", "dsCreateDate", "dsState",
31
- "dsFormatURI", "dsControlGroup", "dsSize", "dsVersionable",
32
- "dsInfoType", "dsLocation", "dsLocationType", "dsChecksumType",
33
- "dsChecksum"]
34
-
35
- # Sanity check on amount of text data to make editable via web form
36
- mattr_accessor :max_editable_datastream_size
37
- self.max_editable_datastream_size = 1024 * 64
38
-
39
- # Object context navigation items
40
- mattr_accessor :object_nav_items
41
- self.object_nav_items = [:pid, :summary, :datastreams, :permissions, :associations, :audit_trail]
42
-
43
- # Datastream profile values to display on object show view
44
- mattr_accessor :object_show_datastream_columns
45
- self.object_show_datastream_columns = ["dsLabel"]
46
-
47
- # Methods on ActiveFedora::Base objects that represent Fcrepo object properties
48
- mattr_accessor :object_properties
49
- self.object_properties = [:label, :state, :create_date, :modified_date, :owner_id]
50
-
51
- #
52
- # Autoloading
53
- #
54
7
  autoload :Ability, 'fcrepo_admin/ability'
8
+ autoload :Configurable, 'fcrepo_admin/configurable'
55
9
 
56
10
  module Helpers
57
11
  autoload :BlacklightHelperBehavior, 'fcrepo_admin/helpers/blacklight_helper_behavior'
@@ -65,4 +19,6 @@ module FcrepoAdmin
65
19
  autoload :ControllerBehavior, 'fcrepo_admin/controller/controller_behavior'
66
20
  end
67
21
 
22
+ include FcrepoAdmin::Configurable
23
+
68
24
  end
@@ -0,0 +1,55 @@
1
+ module FcrepoAdmin::Configurable
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ #
6
+ # FcrepoAdmin configuration settings
7
+ #
8
+ mattr_accessor :read_only
9
+ self.read_only = false
10
+
11
+ # MIME types representing text content that do not have "text" media type.
12
+ mattr_accessor :extra_text_mime_types
13
+ self.extra_text_mime_types = ['application/xml', 'application/rdf+xml', 'application/json']
14
+
15
+ # Datastream profile keys for values to display on datastream index view
16
+ mattr_accessor :datastream_index_columns
17
+ self.datastream_index_columns = ["dsLabel", "dsMIME", "dsSize", "dsCreateDate"]
18
+
19
+ # Datastream profile keys for values to display on datastream history view
20
+ mattr_accessor :datastream_history_columns
21
+ self.datastream_history_columns = ["dsCreateDate"]
22
+
23
+ # Datastream context navigation items
24
+ mattr_accessor :datastream_nav_items
25
+ self.datastream_nav_items = [:dsid, :version, :current_version, :summary, :content, :download, :edit, :upload, :history]
26
+
27
+ # Datastream profile keys to display on datastream show page
28
+ mattr_accessor :datastream_show_profile_keys
29
+ self.datastream_show_profile_keys = ["dsLabel", "dsMIME", "dsVersionID", "dsCreateDate", "dsState",
30
+ "dsFormatURI", "dsControlGroup", "dsSize", "dsVersionable",
31
+ "dsInfoType", "dsLocation", "dsLocationType", "dsChecksumType",
32
+ "dsChecksum"]
33
+
34
+ # Sanity check on amount of text data to make editable via web form
35
+ mattr_accessor :max_editable_datastream_size
36
+ self.max_editable_datastream_size = 1024 * 64
37
+
38
+ # Object context navigation items
39
+ mattr_accessor :object_nav_items
40
+ self.object_nav_items = [:pid, :summary, :datastreams, :permissions, :associations, :audit_trail, :bookmark]
41
+
42
+ # Datastream profile values to display on object show view
43
+ mattr_accessor :object_show_datastream_columns
44
+ self.object_show_datastream_columns = ["dsLabel"]
45
+
46
+ # Methods on ActiveFedora::Base objects that represent Fcrepo object properties
47
+ mattr_accessor :object_properties
48
+ self.object_properties = [:label, :state, :create_date, :modified_date, :owner_id]
49
+
50
+ # Number of objects to display per page on object associations show view
51
+ mattr_accessor :associated_objects_per_page
52
+ self.associated_objects_per_page = 10
53
+ end
54
+
55
+ end
@@ -3,8 +3,6 @@ module FcrepoAdmin::Controller
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- helper_method :object_is_auditable?
7
- helper_method :object_is_governable?
8
6
  helper_method :object_is_governed_by
9
7
  end
10
8
 
@@ -28,28 +26,8 @@ module FcrepoAdmin::Controller
28
26
  authorize! params[:action].to_sym, @object
29
27
  end
30
28
 
31
- def object_is_auditable?
32
- begin
33
- @object && @object.is_a?(ActiveFedora::Auditable)
34
- rescue
35
- false
36
- end
37
- end
38
-
39
29
  def object_is_governed_by
40
- @object_is_governed_by ||= object_is_governable? && @object.send(is_governed_by_association_name)
41
- end
42
-
43
- def object_is_governable?
44
- !is_governed_by_association_name.nil?
45
- end
46
-
47
- def is_governed_by_association_name
48
- @object.reflections.each do |name, reflection|
49
- if reflection.macro == :belongs_to && reflection.options[:property] == :is_governed_by # TODO add policy class
50
- return reflection.name
51
- end
52
- end
30
+ @object_is_governed_by ||= @object.send(@object.governed_by_association.name) rescue nil
53
31
  end
54
32
 
55
33
  # #solr_response_for_raw_result and #solr_documents_for_response
@@ -17,11 +17,9 @@ ActiveFedora::Base.class_eval do
17
17
  end
18
18
 
19
19
  def governable?
20
- !is_governed_by_association.nil?
20
+ !governed_by_association.nil?
21
21
  end
22
22
 
23
- private
24
-
25
23
  def governed_by_association
26
24
  self.reflections.each do |name, reflection|
27
25
  # FIXME add class name condition, i.e.:
@@ -16,5 +16,9 @@ module FcrepoAdmin::Helpers
16
16
  end
17
17
  end
18
18
 
19
+ def associated_objects_per_page
20
+ FcrepoAdmin.associated_objects_per_page
21
+ end
22
+
19
23
  end
20
24
  end
@@ -139,7 +139,7 @@ module FcrepoAdmin::Helpers
139
139
  def format_datastream_profile_value(ds, key)
140
140
  case
141
141
  when key == "dsSize" then number_to_human_size(ds.dsSize)
142
- when key == "dsCreateDate" then ds.dsCreateDate.strftime("%Y-%m-%dT%H:%M:%S.%LZ")
142
+ when key == "dsCreateDate" then ds.dsCreateDate.localtime
143
143
  when key == "dsLocation" && ds.content_is_url? then link_to(ds.dsLocation, ds.dsLocation)
144
144
  when key == "dsState" then format_datastream_state(ds)
145
145
  when key == "dsControlGroup" then format_datastream_control_group(ds)
@@ -10,7 +10,30 @@ module FcrepoAdmin::Helpers
10
10
  end
11
11
 
12
12
  def object_properties
13
- FcrepoAdmin.object_properties.inject(Hash.new) { |h, p| h[p] = @object.send(p); h }
13
+ FcrepoAdmin.object_properties.inject(Hash.new) { |hash, prop| hash[prop] = object_property(prop); hash }
14
+ end
15
+
16
+ def object_property(prop)
17
+ case
18
+ when prop == :state then object_state
19
+ when prop == :create_date then object_date(@object.create_date)
20
+ when prop == :modified_date then object_date(@object.modified_date)
21
+ else @object.send(prop)
22
+ end
23
+ end
24
+
25
+ def object_date(dt)
26
+ Time.parse(dt).localtime
27
+ end
28
+
29
+ def object_state
30
+ state = @object.state
31
+ value = case
32
+ when state == 'A' then "A (Active)"
33
+ when state == 'I' then "I (Inactive)"
34
+ when state == 'D' then "D (Deleted)"
35
+ end
36
+ value
14
37
  end
15
38
 
16
39
  def object_show_datastream_columns
@@ -37,6 +60,8 @@ module FcrepoAdmin::Helpers
37
60
  when item == :permissions then link_to_object item, @object.has_permissions? && can?(:permissions, @object)
38
61
  when item == :associations then link_to_object item
39
62
  when item == :audit_trail then link_to_object item, @object.auditable? && can?(:audit_trail, @object)
63
+ when item == :bookmark
64
+ render(:partial => 'catalog/bookmark_control', :locals => {:document=> @document}) if @document
40
65
  else custom_object_nav_item item
41
66
  end
42
67
  end
@@ -61,6 +86,6 @@ module FcrepoAdmin::Helpers
61
86
  def custom_object_nav_item(item)
62
87
  # Override this method with your custom item behavior
63
88
  end
64
-
89
+
65
90
  end
66
91
  end
@@ -1,3 +1,3 @@
1
1
  module FcrepoAdmin
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fcrepo_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chandek-Stark
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-05-17 00:00:00.000000000 Z
14
+ date: 2013-05-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: hydra-head
@@ -250,6 +250,7 @@ files:
250
250
  - app/mailers/.gitkeep
251
251
  - app/models/.gitkeep
252
252
  - app/views/fcrepo_admin/associations/_associations.html.erb
253
+ - app/views/fcrepo_admin/associations/_document_header.html.erb
253
254
  - app/views/fcrepo_admin/associations/index.html.erb
254
255
  - app/views/fcrepo_admin/associations/show.html.erb
255
256
  - app/views/fcrepo_admin/catalog/_document.html.erb
@@ -286,6 +287,7 @@ files:
286
287
  - lib/assets/.gitkeep
287
288
  - lib/fcrepo_admin.rb
288
289
  - lib/fcrepo_admin/ability.rb
290
+ - lib/fcrepo_admin/configurable.rb
289
291
  - lib/fcrepo_admin/controller/controller_behavior.rb
290
292
  - lib/fcrepo_admin/decorators/active_fedora/base_decorator.rb
291
293
  - lib/fcrepo_admin/decorators/active_fedora/datastream_decorator.rb