hydra-file-access 5.0.0.pre1
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/.gitignore +2 -0
- data/Rakefile +5 -0
- data/app/assets/images/hydra/powered_by_hydra.png +0 -0
- data/app/assets/images/hydra/search-button.png +0 -0
- data/app/assets/javascripts/date-picker/booking/index.html +368 -0
- data/app/assets/javascripts/date-picker/calendarHTML.txt +84 -0
- data/app/assets/javascripts/date-picker/css/datepicker.css +511 -0
- data/app/assets/javascripts/date-picker/css/demo.css +229 -0
- data/app/assets/javascripts/date-picker/index.html +798 -0
- data/app/assets/javascripts/date-picker/js/datepicker.js +2898 -0
- data/app/assets/javascripts/date-picker/js/datepicker.packed.js +1 -0
- data/app/assets/javascripts/date-picker/js/lang/ar.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/cs.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/da.js +10 -0
- data/app/assets/javascripts/date-picker/js/lang/de.js +10 -0
- data/app/assets/javascripts/date-picker/js/lang/en.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/eo.js +13 -0
- data/app/assets/javascripts/date-picker/js/lang/es.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/et.js +23 -0
- data/app/assets/javascripts/date-picker/js/lang/fi.js +7 -0
- data/app/assets/javascripts/date-picker/js/lang/fr.js +69 -0
- data/app/assets/javascripts/date-picker/js/lang/he.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/hu.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/id.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/it.js +11 -0
- data/app/assets/javascripts/date-picker/js/lang/kr.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/lt.js +8 -0
- data/app/assets/javascripts/date-picker/js/lang/lv.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/nl.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/no.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/pl.js +10 -0
- data/app/assets/javascripts/date-picker/js/lang/pt-br.js +11 -0
- data/app/assets/javascripts/date-picker/js/lang/pt.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/ru.js +11 -0
- data/app/assets/javascripts/date-picker/js/lang/se.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/si.js +9 -0
- data/app/assets/javascripts/date-picker/js/lang/tr.js +9 -0
- data/app/assets/javascripts/date-picker/language/index.html +240 -0
- data/app/assets/javascripts/date-picker/media/Thumbs.db +0 -0
- data/app/assets/javascripts/date-picker/media/backstripes.gif +0 -0
- data/app/assets/javascripts/date-picker/media/bg_header.jpg +0 -0
- data/app/assets/javascripts/date-picker/media/bullet1.gif +0 -0
- data/app/assets/javascripts/date-picker/media/bullet2.gif +0 -0
- data/app/assets/javascripts/date-picker/media/cal-grey.gif +0 -0
- data/app/assets/javascripts/date-picker/media/cal.gif +0 -0
- data/app/assets/javascripts/date-picker/media/gradient-e5e5e5-ffffff.gif +0 -0
- data/app/assets/javascripts/hydra/hydra-head.js +195 -0
- data/app/assets/javascripts/hydra/mediashelf.datepicker.js +39 -0
- data/app/assets/javascripts/hydra/mediashelf.placeholder.js +67 -0
- data/app/assets/javascripts/jquery.form.js +1076 -0
- data/app/assets/javascripts/jquery.ui.datepicker.js +1793 -0
- data/app/assets/javascripts/spin.min.js +2 -0
- data/app/assets/stylesheets/hydra/html_refactor.css +79 -0
- data/app/assets/stylesheets/hydra/hydrangea-split-button.css +18 -0
- data/app/assets/stylesheets/hydra/hydrangea.css +288 -0
- data/app/assets/stylesheets/hydra/ie-styles.css +149 -0
- data/app/assets/stylesheets/hydra/styles.css +946 -0
- data/app/assets/stylesheets/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-icons_217bc0_256x240.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-icons_2e83ff_256x240.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-icons_469bdd_256x240.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-icons_6da8d5_256x240.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-icons_d8e7f3_256x240.png +0 -0
- data/app/assets/stylesheets/redmond/images/ui-icons_f9bd01_256x240.png +0 -0
- data/app/assets/stylesheets/redmond/jquery-ui-1.8.5.custom.css +572 -0
- data/app/controllers/hydra/application_controller.rb +5 -0
- data/app/controllers/hydra/file_assets_controller.rb +3 -0
- data/app/helpers/application_helper.rb +3 -0
- data/app/helpers/hydra/application_helper_behavior.rb +8 -0
- data/app/helpers/hydra/hydra_helper_behavior.rb +70 -0
- data/app/helpers/hydra_helper.rb +4 -0
- data/app/models/file_asset.rb +5 -0
- data/app/models/uses_default_partials.rb +23 -0
- data/app/views/_add_assets_links.html.erb +14 -0
- data/app/views/_user_util_links.html.erb +24 -0
- data/app/views/generic_content_objects/_contributor_form.html.erb +11 -0
- data/app/views/generic_content_objects/_description_form.html.erb +7 -0
- data/app/views/generic_content_objects/_edit_description.html.erb +23 -0
- data/app/views/generic_content_objects/_new.html.erb +0 -0
- data/app/views/generic_content_objects/_show_description.html.erb +41 -0
- data/app/views/generic_contents/_edit.html.erb +10 -0
- data/app/views/generic_contents/_index.html.erb +21 -0
- data/app/views/generic_contents/_show.html.erb +6 -0
- data/app/views/generic_contents/_show_content.html.erb +7 -0
- data/app/views/generic_images/_edit.html.erb +36 -0
- data/app/views/generic_images/_index.html.erb +24 -0
- data/app/views/generic_images/_show.html.erb +13 -0
- data/app/views/generic_images/_show_all.html.erb +14 -0
- data/app/views/generic_images/_show_content.html.erb +7 -0
- data/app/views/hydra/file_assets/_asset_saved_flash.html.erb +2 -0
- data/app/views/hydra/file_assets/_deletable_result.html.erb +5 -0
- data/app/views/hydra/file_assets/_file_assets_form.html.erb +11 -0
- data/app/views/hydra/file_assets/_index.html.erb +29 -0
- data/app/views/hydra/file_assets/_new.html.erb +6 -0
- data/app/views/hydra/file_assets/_result.html.erb +11 -0
- data/app/views/hydra/file_assets/index.html.erb +5 -0
- data/app/views/hydra/permissions/_edit_person_permissions.html.erb +30 -0
- data/app/views/hydra/permissions/_index.html.erb +46 -0
- data/app/views/hydra/permissions/_new.html.erb +14 -0
- data/app/views/hydra/permissions/_permissions_form.html.erb +23 -0
- data/app/views/hydra/permissions/index.html.erb +1 -0
- data/app/views/hydra/permissions/new.html.erb +1 -0
- data/app/views/mods_assets/_additional_info_form.html.erb +44 -0
- data/app/views/mods_assets/_contributor_form.html.erb +14 -0
- data/app/views/mods_assets/_edit.html.erb +10 -0
- data/app/views/mods_assets/_edit_description.html.erb +73 -0
- data/app/views/mods_assets/_edit_journal.html.erb +57 -0
- data/app/views/mods_assets/_index.html.erb +1 -0
- data/app/views/mods_assets/_index_list.html.erb +37 -0
- data/app/views/mods_assets/_index_table.html.erb +7 -0
- data/app/views/mods_assets/_progress_box.html.erb +82 -0
- data/app/views/mods_assets/_publication_form.html.erb +13 -0
- data/app/views/mods_assets/_show.html.erb +39 -0
- data/app/views/mods_assets/_show_additional_info.html.erb +17 -0
- data/app/views/mods_assets/_show_contributors.html.erb +7 -0
- data/app/views/mods_assets/_show_description.html.erb +35 -0
- data/app/views/mods_assets/_show_file_assets.html.erb +22 -0
- data/app/views/mods_assets/_show_journal.html.erb +42 -0
- data/app/views/mods_assets/_show_permissions.html.erb +15 -0
- data/app/views/mods_assets/_show_publication.html.erb +8 -0
- data/app/views/shared/_delete_asset_confirmation.html.erb +17 -0
- data/config/jetty.yml +7 -0
- data/hydra-file-access.gemspec +39 -0
- data/lib/hydra-file-access.rb +15 -0
- data/lib/hydra/assets.rb +5 -0
- data/lib/hydra/assets_controller_helper.rb +122 -0
- data/lib/hydra/controller/assets_controller_behavior.rb +153 -0
- data/lib/hydra/controller/file_assets_behavior.rb +140 -0
- data/lib/hydra/file_access/engine.rb +12 -0
- data/lib/hydra/file_assets.rb +11 -0
- data/lib/hydra/submission_workflow.rb +139 -0
- data/lib/hydra/ui.rb +6 -0
- data/spec/.gitignore +1 -0
- data/spec/controllers/file_assets_controller_spec.rb +180 -0
- data/spec/fixtures/small_file.txt +1 -0
- data/spec/helpers/access_controls_evaluation_spec.rb +19 -0
- data/spec/helpers/assets_controller_helper_spec.rb +63 -0
- data/spec/helpers/file_assets_helper_spec.rb +116 -0
- data/spec/helpers/hydra_helper_spec.rb +21 -0
- data/spec/helpers/hydra_model_methods_spec.rb +88 -0
- data/spec/integration/file_asset_spec.rb +68 -0
- data/spec/lib/hydra_submission_workflow_spec.rb +141 -0
- data/spec/models/file_asset_spec.rb +25 -0
- data/spec/spec_helper.rb +27 -0
- data/spec/support/Gemfile +12 -0
- data/spec/support/app/models/generic_content.rb +26 -0
- data/spec/support/app/models/sample.rb +33 -0
- data/spec/support/app/models/solr_document.rb +5 -0
- data/spec/support/db/migrate/20111101221803_create_searches.rb +16 -0
- data/spec/support/lib/generators/test_app_generator.rb +39 -0
- data/spec/support/matchers/helper_matcher.rb +14 -0
- data/spec/support/matchers/solr_matchers.rb +60 -0
- data/spec/support/spec/factories/users.rb +11 -0
- data/spec/support/spec/fixtures/hydra_test_generic_content.foxml.xml +138 -0
- data/spec/support/spec/fixtures/hydrangea_fixture_file_asset1.foxml.xml +4946 -0
- data/spec/support/spec/fixtures/hydrangea_fixture_mods_article1.foxml.xml +234 -0
- data/spec/support/spec/fixtures/hydrangea_fixture_mods_article2.foxml.xml +177 -0
- data/spec/support/spec/fixtures/hydrangea_fixture_mods_article3.foxml.xml +170 -0
- data/spec/support/spec/fixtures/hydrangea_fixture_uploaded_svg1.foxml.xml +676 -0
- data/tasks/rspec.rake +55 -0
- metadata +516 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<%= form_tag(url_for(:controller=>"hydra/assets", :action=>"update", :id=>params[:id]), :class => "step") do -%>
|
|
2
|
+
<%= hidden_field_tag("_method","put") %>
|
|
3
|
+
<p id="title_field" class="fedora-text-field">
|
|
4
|
+
<%= fedora_field_label("descMetadata", [:title_info,:main_title], "Title<span class=\"required-note\">Required</span>".html_safe) %>
|
|
5
|
+
<%= fedora_text_field(@document_fedora,"descMetadata", [:title_info, :main_title], :multiple=>false, :required=>true) %>
|
|
6
|
+
</p>
|
|
7
|
+
<%= render :partial=>"mods_assets/edit_journal", :collection=>@document_fedora.datastreams["descMetadata"].find_by_terms(:journal) %>
|
|
8
|
+
<%= hidden_field_tag(:wf_step, params[:wf_step], :id => "publisher_wf_step") %>
|
|
9
|
+
<%= hidden_field_tag(:new_asset, true, :id => "publisher_new_asset") if params[:new_asset] %>
|
|
10
|
+
<%= hidden_field_tag(:content_type,"mods_asset", :id => "publisher_content_type") %>
|
|
11
|
+
<%= submit_tag(submit_name, :name=>"continue", :class=>"save-submit") %>
|
|
12
|
+
<%= submit_tag("Save and Finish", :name=>"finish", :class=>"save-submit") unless params[:new_asset] %>
|
|
13
|
+
<%- end -%>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<div class="document_viewer" id="cover_container">
|
|
2
|
+
|
|
3
|
+
<h1 class="document-heading">
|
|
4
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [:title_info, :main_title]).first.empty? %>
|
|
5
|
+
<%= get_values_from_datastream(@document_fedora,"descMetadata", [:title_info, :main_title]).first %>
|
|
6
|
+
<% else %>
|
|
7
|
+
<%= params[:id] %>
|
|
8
|
+
<% end %>
|
|
9
|
+
</h1>
|
|
10
|
+
|
|
11
|
+
<h2 class="section-title">Description</h2>
|
|
12
|
+
<div class="description">
|
|
13
|
+
<%= render :partial => 'mods_assets/show_description' %>
|
|
14
|
+
</div>
|
|
15
|
+
<%# copied to show_file_assets %>
|
|
16
|
+
<% unless @document_fedora.file_objects(:response_format=>:solr).empty? %>
|
|
17
|
+
<h2 class="section-title">Files</h2>
|
|
18
|
+
<div class="uploads" id="uploads_<%= format_pid(params[:id]) %>">
|
|
19
|
+
<table id="file_assets" class="multipleEdit">
|
|
20
|
+
<tr>
|
|
21
|
+
<th>File Name</th>
|
|
22
|
+
<th>Size</th>
|
|
23
|
+
<th>Uploaded</th>
|
|
24
|
+
</tr>
|
|
25
|
+
<% @document_fedora.file_objects(:response_format=>:solr).each do |result| %>
|
|
26
|
+
<tr class="file_asset" >
|
|
27
|
+
<td><%= link_to result[solr_name("title", :text)], hydra_file_asset_path(result["id"]) %></td>
|
|
28
|
+
<td><%= result[solr_name("extent", :text)] %></td>
|
|
29
|
+
<td>
|
|
30
|
+
<% dt = DateTime.parse(result[ solr_name("system_create", :date)] ) -%>
|
|
31
|
+
<%= l dt, :format => :hydra %>
|
|
32
|
+
</td>
|
|
33
|
+
</tr>
|
|
34
|
+
<% end %>
|
|
35
|
+
</table>
|
|
36
|
+
</div>
|
|
37
|
+
<% end %>
|
|
38
|
+
|
|
39
|
+
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [:subject, :topic]).first.empty? %>
|
|
2
|
+
<fieldset>
|
|
3
|
+
<legend>Keywords</legend>
|
|
4
|
+
<div class="browse_value">
|
|
5
|
+
<%= get_values_from_datastream(@document_fedora,"descMetadata", [:subject, :topic]).join(', ') %>
|
|
6
|
+
</div>
|
|
7
|
+
</fieldset>
|
|
8
|
+
<% end %>
|
|
9
|
+
|
|
10
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [:abstract]).first.empty? %>
|
|
11
|
+
<fieldset>
|
|
12
|
+
<legend>Abstract</legend>
|
|
13
|
+
<div id="abstract" class="browse_value">
|
|
14
|
+
<%= Sanitize.clean( RedCloth.new(get_values_from_datastream(@document_fedora,"descMetadata", [:abstract]).first, [:sanitize_html]).to_html, Sanitize::Config::BASIC).html_safe %>
|
|
15
|
+
</div>
|
|
16
|
+
</fieldset>
|
|
17
|
+
<% end %>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<div id="contributors_list">
|
|
2
|
+
<ol>
|
|
3
|
+
<%= render :partial=>"contributors/show_person", :collection=>@document_fedora.datastreams["descMetadata"].find_by_terms(:person) %>
|
|
4
|
+
<%= render :partial=>"contributors/show_organization", :collection=>@document_fedora.datastreams["descMetadata"].find_by_terms(:organization) %>
|
|
5
|
+
<%= render :partial=>"contributors/show_conference", :collection=>@document_fedora.datastreams["descMetadata"].find_by_terms(:conference) %>
|
|
6
|
+
</ol>
|
|
7
|
+
</div>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<%# copied div below to show_contributor partial %>
|
|
2
|
+
<div id="contributors_list">
|
|
3
|
+
<ol>
|
|
4
|
+
|
|
5
|
+
<%= render :partial=>"contributors/show_person", :collection=>@document_fedora.datastreams["descMetadata"].find_by_terms(:person) %>
|
|
6
|
+
<%= render :partial=>"contributors/show_organization", :collection=>@document_fedora.datastreams["descMetadata"].find_by_terms(:organization) %>
|
|
7
|
+
<%= render :partial=>"contributors/show_conference", :collection=>@document_fedora.datastreams["descMetadata"].find_by_terms(:conference) %>
|
|
8
|
+
</ol>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<%# copied fieldset to show_publication partial %>
|
|
12
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => 0}, :title_info, :main_title]).first.empty? %>
|
|
13
|
+
<fieldset><legend>Published</legend>
|
|
14
|
+
<div id="journal" class="browse_value">
|
|
15
|
+
<%= render :partial=>"mods_assets/show_journal", :collection=>@document_fedora.datastreams["descMetadata"].find_by_terms(:journal) %>
|
|
16
|
+
</div>
|
|
17
|
+
</fieldset>
|
|
18
|
+
<% end %>
|
|
19
|
+
|
|
20
|
+
<%# copied fieldsets to show_additional_info partial %>
|
|
21
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [:subject, :topic]).first.empty? %>
|
|
22
|
+
<fieldset><legend>Keywords</legend>
|
|
23
|
+
<div class="browse_value">
|
|
24
|
+
<%= get_values_from_datastream(@document_fedora,"descMetadata", [:subject, :topic]).join(', ') %>
|
|
25
|
+
</div>
|
|
26
|
+
</fieldset>
|
|
27
|
+
<% end %>
|
|
28
|
+
|
|
29
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [:abstract]).first.empty? %>
|
|
30
|
+
<fieldset><legend>Abstract</legend>
|
|
31
|
+
<div id="abstract" class="browse_value">
|
|
32
|
+
<%= Sanitize.clean( RedCloth.new(get_values_from_datastream(@document_fedora,"descMetadata", [:abstract]).first, [:sanitize_html]).to_html, Sanitize::Config::BASIC).html_safe %>
|
|
33
|
+
</div>
|
|
34
|
+
</fieldset>
|
|
35
|
+
<% end %>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<% unless @document_fedora.file_objects(:response_format=>:solr).empty? %>
|
|
2
|
+
<h2 class="section-title">Files</h2>
|
|
3
|
+
<div class="uploads" id="uploads_<%= format_pid(params[:id]) %>">
|
|
4
|
+
<table id="file_assets" class="multipleEdit">
|
|
5
|
+
<tr>
|
|
6
|
+
<th>File Name</th>
|
|
7
|
+
<th>Size</th>
|
|
8
|
+
<th>Uploaded</th>
|
|
9
|
+
</tr>
|
|
10
|
+
<% @document_fedora.file_objects(:response_format=>:solr).each do |result| %>
|
|
11
|
+
<tr class="file_asset" >
|
|
12
|
+
<td><%= link_to result[solr_name("title", :text)], hydra_file_asset_path(result["id"]) %></td>
|
|
13
|
+
<td><%= result[solr_name("extent", :text)] %></td>
|
|
14
|
+
<td>
|
|
15
|
+
<% dt = DateTime.parse(result[ solr_name("system_create", :date)] ) -%>
|
|
16
|
+
<%= l dt, :format => :hydra %>
|
|
17
|
+
</td>
|
|
18
|
+
</tr>
|
|
19
|
+
<% end %>
|
|
20
|
+
</table>
|
|
21
|
+
</div>
|
|
22
|
+
<% end %>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<% journal = show_journal %>
|
|
2
|
+
<% journal_counter = show_journal_counter %>
|
|
3
|
+
<% base_id = "journal_#{journal_counter}" %>
|
|
4
|
+
|
|
5
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter}, :title_info, :main_title]).first.empty? %>
|
|
6
|
+
|
|
7
|
+
<div class="journal">
|
|
8
|
+
<%= get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter}, :title_info, :main_title]).first.strip %><% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:issue,:publication_date]).first.empty? -%>, <%= get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:issue,:publication_date]) %>
|
|
9
|
+
<% end %>
|
|
10
|
+
</div>
|
|
11
|
+
<% end %>
|
|
12
|
+
|
|
13
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:origin_info, :publisher]).first.empty? %>
|
|
14
|
+
<div class="publisher">
|
|
15
|
+
<%= get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:origin_info, :publisher]) %>
|
|
16
|
+
</div>
|
|
17
|
+
<% end %>
|
|
18
|
+
|
|
19
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter}, :issn]).first.empty? %>
|
|
20
|
+
<div class="issn">
|
|
21
|
+
<%#= fedora_field_label("descMetadata", [{:journal => journal_counter}, :issn], "ISSN:") %>
|
|
22
|
+
<%= get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter}, :issn]) %>
|
|
23
|
+
</div>
|
|
24
|
+
<% end %>
|
|
25
|
+
|
|
26
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:issue,:start_page]).first.empty? %>
|
|
27
|
+
<div class="citation">
|
|
28
|
+
<%#= fedora_field_label("descMetadata", [{:journal => journal_counter},:issue,:start_page], "Pages:") %>
|
|
29
|
+
<%= get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:issue,:start_page]) %>
|
|
30
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:issue,:end_page]).first.empty? %>
|
|
31
|
+
- <%= get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:issue,:end_page]) %>
|
|
32
|
+
<% end %>
|
|
33
|
+
</div>
|
|
34
|
+
<% end %>
|
|
35
|
+
<% journal_issue_values = get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:issue,:level]).inspect %>
|
|
36
|
+
<% unless journal_issue_values.empty? || journal_issue_values.first.empty? %>
|
|
37
|
+
<div class="issue">
|
|
38
|
+
<%#= fedora_field_label("descMetadata", [{:journal => journal_counter},:issue,:level], "Issue:") %>
|
|
39
|
+
<%= get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => journal_counter},:issue,:level]) %>
|
|
40
|
+
</div>
|
|
41
|
+
<% end %>
|
|
42
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<%- document ||= @document -%>
|
|
2
|
+
<div>
|
|
3
|
+
<dl class="defList">
|
|
4
|
+
<% if can? :edit, document %>
|
|
5
|
+
<h3>Group</h3>
|
|
6
|
+
<%= get_data_with_label(document, "Discover Access:", 'discover_access_group_t', :default=>"private") %>
|
|
7
|
+
<%= get_data_with_label(document, "Read & Download Access:", 'read_access_group_t', :default=>"private") %>
|
|
8
|
+
<%= get_data_with_label(document, "Edit & Upload Access:", 'edit_access_group_t', :default=>"private") %>
|
|
9
|
+
<h3>Individual</h3>
|
|
10
|
+
<%= get_data_with_label(document, "Discover Access:", 'discover_access_t', :default=>"private") %>
|
|
11
|
+
<%= get_data_with_label(document, "Read & Download Access:", 'read_access_t', :default=>"private") %>
|
|
12
|
+
<%= get_data_with_label(document, "Edit & Upload Access:", 'edit_access_t', :default=>"private") %>
|
|
13
|
+
<% end %>
|
|
14
|
+
</dl>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<% unless get_values_from_datastream(@document_fedora,"descMetadata", [{:journal => 0}, :title_info, :main_title]).first.empty? %>
|
|
2
|
+
<fieldset>
|
|
3
|
+
<legend>Published</legend>
|
|
4
|
+
<div id="journal" class="browse_value">
|
|
5
|
+
<%= render :partial=>"mods_assets/show_journal", :collection=>@document_fedora.datastreams["descMetadata"].find_by_terms(:journal) %>
|
|
6
|
+
</div>
|
|
7
|
+
</fieldset>
|
|
8
|
+
<% end %>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<div id="delete_dialog_container" style="display:none;">
|
|
2
|
+
<div id="delete_dialog">
|
|
3
|
+
<%= form_tag(url_for(:action => "destroy", :controller => "hydra/assets", :id => pid, :method => "delete")) %>
|
|
4
|
+
<div>
|
|
5
|
+
<span>Permanently delete <%= title %> and its assets from the repository?</span><br/>
|
|
6
|
+
<div id="deletable_assets"></div>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="button">
|
|
9
|
+
<%= submit_tag("Delete") %>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="button">
|
|
12
|
+
<%= button_to_function("Cancel", "$('div#delete_dialog_container').fadeOut();"); %>
|
|
13
|
+
</div>
|
|
14
|
+
<%= hidden_field_tag("_method", "delete") %>
|
|
15
|
+
</form>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
data/config/jetty.yml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
version = File.read(File.expand_path("../../HYDRA_VERSION", __FILE__)).strip
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |gem|
|
|
6
|
+
gem.authors = ["Matt Zumwalt, Bess Sadler, Julie Meloni, Naomi Dushay, Jessie Keck, John Scofield, Justin Coyne & many more. See https://github.com/projecthydra/hydra-head/contributors"]
|
|
7
|
+
gem.email = ["hydra-tech@googlegroups.com"]
|
|
8
|
+
gem.homepage = "http://projecthydra.org"
|
|
9
|
+
gem.summary = %q{Hydra-Head Rails Engine (requires Rails3) }
|
|
10
|
+
gem.description = %q{Hydra-File-Access is a plugin Rails Engine containing the code for manipulating files in a Hydra application. The full hydra stack includes: Blacklight, Fedora, Solr, active-fedora, solrizer, and om}
|
|
11
|
+
|
|
12
|
+
gem.files = `git ls-files`.split($\)
|
|
13
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
14
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
15
|
+
gem.name = "hydra-file-access"
|
|
16
|
+
gem.require_paths = ["lib"]
|
|
17
|
+
gem.version = version
|
|
18
|
+
# gem.required_ruby_version = '>= 1.9.3'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
gem.add_dependency "rails", '~>3.2.3'
|
|
22
|
+
gem.add_dependency "blacklight", '~>3.4'
|
|
23
|
+
gem.add_dependency "devise"
|
|
24
|
+
gem.add_dependency "active-fedora", '~>4.1'
|
|
25
|
+
gem.add_dependency 'RedCloth', '=4.2.9'
|
|
26
|
+
gem.add_dependency 'block_helpers'
|
|
27
|
+
gem.add_dependency 'sanitize'
|
|
28
|
+
gem.add_dependency 'hydra-mods', ">= 0.0.5"
|
|
29
|
+
gem.add_dependency 'deprecation', ">= 0.0.5"
|
|
30
|
+
gem.add_dependency 'hydra-core', version
|
|
31
|
+
|
|
32
|
+
gem.add_development_dependency 'sqlite3'
|
|
33
|
+
gem.add_development_dependency 'yard'
|
|
34
|
+
gem.add_development_dependency 'jettywrapper', ">=1.3.0"
|
|
35
|
+
gem.add_development_dependency 'rspec-rails'
|
|
36
|
+
gem.add_development_dependency 'cucumber-rails', '>=1.2.0'
|
|
37
|
+
gem.add_development_dependency 'factory_girl_rails', '<2.0.0' #>=2.0.0 requires ruby 1.9
|
|
38
|
+
gem.add_development_dependency 'solrizer-fedora', '>=2.1.0'
|
|
39
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Hydra
|
|
2
|
+
module FileAccess
|
|
3
|
+
require 'hydra/file_access/engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
|
|
4
|
+
end
|
|
5
|
+
autoload :Assets
|
|
6
|
+
autoload :AssetsControllerHelper
|
|
7
|
+
autoload :SubmissionWorkflow
|
|
8
|
+
autoload :UI
|
|
9
|
+
|
|
10
|
+
module Controller
|
|
11
|
+
extend ActiveSupport::Autoload
|
|
12
|
+
autoload :FileAssetsBehavior
|
|
13
|
+
autoload :AssetsControllerBehavior
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/hydra/assets.rb
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
require "om"
|
|
2
|
+
# TODO: All of this should be moved into module Hydra::Assets and this file should be eliminated.
|
|
3
|
+
module Hydra::AssetsControllerHelper
|
|
4
|
+
|
|
5
|
+
# This makes sure that assets have the current user marked as their depositor/owner.
|
|
6
|
+
# Relies on the asset's model to define _what_ apply_depositor_metadata should do. Most Hydra assets will rely on {Hydra::ModelMethods#apply_depositor_metadata}
|
|
7
|
+
#
|
|
8
|
+
# Attempts to call apply_depositor_metadata on the +asset+, passing user_key as the depositor
|
|
9
|
+
# Does nothing if the asset doesn't respond to .apply_depositor_metadata
|
|
10
|
+
# @param asset to call apply_depositor_metadata on
|
|
11
|
+
def apply_depositor_metadata(asset)
|
|
12
|
+
if asset.respond_to?(:apply_depositor_metadata) && user_key
|
|
13
|
+
asset.apply_depositor_metadata(user_key)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def set_collection_type(asset, collection)
|
|
18
|
+
if asset.respond_to?(:set_collection_type)
|
|
19
|
+
asset.set_collection_type(collection)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Builds a Hash that you can feed into ActiveFedora::Base.update_datstream_attributes
|
|
24
|
+
# If params[:asset] is empty, returns an empty Hash
|
|
25
|
+
# @return [Hash] a Hash that you can feed into ActiveFedora::Base.update_datstream_attributes
|
|
26
|
+
# {
|
|
27
|
+
# "descMetadata"=>{ [{:person=>0}, :role]=>{"0"=>"role1", "1"=>"role2", "2"=>"role3"} },
|
|
28
|
+
# "properties"=>{ "notes"=>"foo" }
|
|
29
|
+
# }
|
|
30
|
+
def sanitize_update_params
|
|
31
|
+
@sanitized_params ||= {}
|
|
32
|
+
|
|
33
|
+
unless params["asset"].nil?
|
|
34
|
+
params["asset"].each_pair do |datastream_name,fields|
|
|
35
|
+
|
|
36
|
+
@sanitized_params[datastream_name] = {}
|
|
37
|
+
|
|
38
|
+
# TEMPORARY HACK: special case for supporting textile
|
|
39
|
+
if params["field_id"]=="abstract_0"
|
|
40
|
+
params[:field_selectors] = {"descMetadata" => {"abstract" => [:abstract]}}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if params.fetch("field_selectors",false) && params["field_selectors"].fetch(datastream_name, false)
|
|
44
|
+
# If there is an entry in field_selectors for the datastream (implying a nokogiri datastream), retrieve the field_selector for this field.
|
|
45
|
+
# if no field selector, exists, use the field name
|
|
46
|
+
fields.each_pair do |field_name,field_values|
|
|
47
|
+
parent_select = OM.destringify( params["field_selectors"][datastream_name].fetch(field_name, field_name) )
|
|
48
|
+
# calling on unique because duplicate keys can be problematic for multi-valued fields. (HYDRA-785)
|
|
49
|
+
parent_select.uniq! if parent_select.respond_to?(:uniq!)
|
|
50
|
+
|
|
51
|
+
@sanitized_params[datastream_name][parent_select] = field_values
|
|
52
|
+
end
|
|
53
|
+
else
|
|
54
|
+
@sanitized_params[datastream_name] = unescape_keys(params[:asset][datastream_name])
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
return @sanitized_params
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Tidies up the response from updating the document, making it more JSON-friendly
|
|
63
|
+
# @param [Hash] response_from_update the response from updating the object's values
|
|
64
|
+
# @return [Hash] A Hash where value of "updated" is an array with fieldname / index / value Hash for each field updated
|
|
65
|
+
def tidy_response_from_update(response_from_update)
|
|
66
|
+
response = Hash["updated"=>[]]
|
|
67
|
+
last_result_value = ""
|
|
68
|
+
response_from_update.each_pair do |field_name,changed_values|
|
|
69
|
+
changed_values.each_pair do |index,value|
|
|
70
|
+
response["updated"] << {"field_name"=>field_name,"index"=>index,"value"=>value}
|
|
71
|
+
last_result_value = value
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
# If handling submission from jeditable (which will only submit one value at a time), return the value it submitted
|
|
75
|
+
if params.has_key?(:field_id)
|
|
76
|
+
response = last_result_value
|
|
77
|
+
end
|
|
78
|
+
return response
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# Updates the document based on the provided parameters
|
|
83
|
+
# This method can be overridden to perform additional update work in the hydra head.
|
|
84
|
+
# @param [ActiveFedora::Base] document
|
|
85
|
+
# @param [Hash] params should be the type expected by ActiveFedora::Base.update_datastream_attributes
|
|
86
|
+
def update_document(document, params)
|
|
87
|
+
# this will only work if there is only one datastream being updated.
|
|
88
|
+
# once ActiveFedora::MetadataDatastream supports .update_datastream_attributes, use that method instead (will also be able to pass through params["asset"] as-is without usin prep_updater_method_args!)
|
|
89
|
+
# result = document.update_indexed_attributes(params[:params], params[:opts])
|
|
90
|
+
result = document.update_datastream_attributes(params)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# moved destringify into OM gem.
|
|
94
|
+
# ie. OM.destringify( params )
|
|
95
|
+
# Note: OM now handles destringifying params internally. You probably don't have to do it!
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def send_datastream(datastream)
|
|
101
|
+
self.send_data datastream.content, :filename=>datastream.dsLabel, :type=>datastream.mimeType
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
#underscores are escaped w/ + signs, which are unescaped by rails to spaces
|
|
105
|
+
def unescape_keys(attrs)
|
|
106
|
+
h=Hash.new
|
|
107
|
+
attrs.each do |k,v|
|
|
108
|
+
h[k.gsub(/ /, '_')]=v
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
h
|
|
112
|
+
end
|
|
113
|
+
def escape_keys(attrs)
|
|
114
|
+
h=Hash.new
|
|
115
|
+
attrs.each do |k,v|
|
|
116
|
+
h[k.gsub(/_/, '+')]=v
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
h
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
end
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# @deprecated Create Model-specific Controllers instead ie. ArticlesController, ETDController, etc.
|
|
2
|
+
# Also see Hydra::Controller::AssetsControllerBehavior for more info.
|
|
3
|
+
# will move to lib/hydra/controller / assets_controller_behavior.rb in release 5.x
|
|
4
|
+
require 'om'
|
|
5
|
+
|
|
6
|
+
module Hydra::Controller::AssetsControllerBehavior
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
include Blacklight::SolrHelper
|
|
10
|
+
include Hydra::Controller::RepositoryControllerBehavior
|
|
11
|
+
include Hydra::AssetsControllerHelper
|
|
12
|
+
include Blacklight::Catalog
|
|
13
|
+
|
|
14
|
+
included do
|
|
15
|
+
helper :hydra
|
|
16
|
+
before_filter :search_session, :history_session
|
|
17
|
+
before_filter :load_document, :only => :update # allows other filters to operate on the document before the update method is called
|
|
18
|
+
|
|
19
|
+
include Hydra::SubmissionWorkflow
|
|
20
|
+
include Hydra::AccessControlsEnforcement
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
prepend_before_filter :sanitize_update_params, :only=>:update
|
|
24
|
+
before_filter :check_embargo_date_format, :only=>:update
|
|
25
|
+
before_filter :enforce_access_controls
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def show
|
|
29
|
+
if params.has_key?("field")
|
|
30
|
+
|
|
31
|
+
@response, @document = get_solr_response_for_doc_id
|
|
32
|
+
result = @document["#{params["field"]}_t"]
|
|
33
|
+
unless result.nil?
|
|
34
|
+
if params.has_key?("field_index")
|
|
35
|
+
result = result[params["field_index"].to_i-1]
|
|
36
|
+
elsif result.kind_of?(Array)
|
|
37
|
+
result = result.first
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
respond_to do |format|
|
|
41
|
+
format.html { render :text=>result }
|
|
42
|
+
format.textile { render :text=> RedCloth.new(result, [:sanitize_html]).to_html }
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
redirect_to catalog_path(params[:id])
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Uses the update_indexed_attributes method provided by ActiveFedora::Base
|
|
50
|
+
# This should behave pretty much like the ActiveRecord update_indexed_attributes method
|
|
51
|
+
# For more information, see the ActiveFedora docs.
|
|
52
|
+
#
|
|
53
|
+
# @example Appends a new "subject" value of "My Topic" to on the descMetadata datastream in in the _PID_ document.
|
|
54
|
+
# put :update, :id=>"_PID_", "asset"=>{"descMetadata"=>{"subject"=>{"-1"=>"My Topic"}}
|
|
55
|
+
# @example Sets the 1st and 2nd "medium" values on the descMetadata datastream in the _PID_ document, overwriting any existing values.
|
|
56
|
+
# put :update, :id=>"_PID_", "asset"=>{"descMetadata"=>{"medium"=>{"0"=>"Paper Document", "1"=>"Image"}}
|
|
57
|
+
def update
|
|
58
|
+
logger.debug("attributes submitted: #{@sanitized_params.inspect}")
|
|
59
|
+
|
|
60
|
+
@response = update_document(@document, @sanitized_params)
|
|
61
|
+
|
|
62
|
+
@document.save
|
|
63
|
+
flash[:notice] = "Your changes have been saved."
|
|
64
|
+
|
|
65
|
+
#logger.debug("returning #{@response.inspect}")
|
|
66
|
+
|
|
67
|
+
respond_to do |want|
|
|
68
|
+
want.html {
|
|
69
|
+
redirect_to next_step(params[:id])
|
|
70
|
+
}
|
|
71
|
+
want.js {
|
|
72
|
+
render :json=> tidy_response_from_update(@response)
|
|
73
|
+
}
|
|
74
|
+
want.textile {
|
|
75
|
+
if @response.kind_of?(Hash)
|
|
76
|
+
textile_response = tidy_response_from_update(@response).values.first
|
|
77
|
+
end
|
|
78
|
+
render :text=> RedCloth.new(textile_response, [:sanitize_html]).to_html
|
|
79
|
+
}
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def new
|
|
84
|
+
af_model = retrieve_af_model(params[:content_type])
|
|
85
|
+
raise "Can't find a model for #{params[:content_type]}" unless af_model
|
|
86
|
+
@asset = af_model.new
|
|
87
|
+
apply_depositor_metadata(@asset)
|
|
88
|
+
set_collection_type(@asset, params[:content_type])
|
|
89
|
+
@asset.save
|
|
90
|
+
model_display_name = af_model.to_s.camelize.scan(/[A-Z][^A-Z]*/).join(" ")
|
|
91
|
+
msg = "Created a #{model_display_name} with pid #{@asset.pid}. Now it's ready to be edited."
|
|
92
|
+
flash[:notice]= msg
|
|
93
|
+
session[:scripts] = params[:combined] == "true"
|
|
94
|
+
|
|
95
|
+
redirect_to edit_catalog_path(@asset.pid, :new_asset=>true)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def destroy
|
|
99
|
+
af = ActiveFedora::Base.find(params[:id], :cast=>true)
|
|
100
|
+
assets = af.destroy_child_assets
|
|
101
|
+
af.delete
|
|
102
|
+
msg = "Deleted #{params[:id]}"
|
|
103
|
+
msg.concat(" and associated file_asset(s): #{assets.join(", ")}") unless assets.empty?
|
|
104
|
+
flash[:notice]= msg
|
|
105
|
+
redirect_to catalog_index_path()
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
# This is a method to simply remove the item from SOLR but keep the object in fedora.
|
|
110
|
+
alias_method :withdraw, :destroy
|
|
111
|
+
|
|
112
|
+
protected
|
|
113
|
+
|
|
114
|
+
def check_embargo_date_format
|
|
115
|
+
if params.keys.include? [:embargo, :embargo_release_date]
|
|
116
|
+
em_date = params[[:embargo, :embargo_release_date]]["0"]
|
|
117
|
+
unless em_date.blank?
|
|
118
|
+
begin
|
|
119
|
+
!Date.parse(em_date)
|
|
120
|
+
rescue
|
|
121
|
+
params[[:embargo,:embargo_release_date]]["0"] = ""
|
|
122
|
+
raise "Unacceptable date format"
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def mods_assets_update_validation
|
|
130
|
+
desc_metadata = params[:asset][:descMetadata]
|
|
131
|
+
rights_metadata = params[:asset][:rightsMetadata]
|
|
132
|
+
if !rights_metadata.nil? and rights_metadata.has_key?(:embargo_embargo_release_date)
|
|
133
|
+
unless rights_metadata[:embargo_embargo_release_date]["0"].blank?
|
|
134
|
+
begin
|
|
135
|
+
parsed_date = Date.parse(rights_metadata[:embargo_embargo_release_date]["0"]).to_s
|
|
136
|
+
params[:asset][:rightsMetadata][:embargo_embargo_release_date]["0"] = parsed_date
|
|
137
|
+
rescue
|
|
138
|
+
flash[:error] = "You must enter a valid release date."
|
|
139
|
+
return false
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
if !desc_metadata.nil? and desc_metadata.has_key?(:title_info_main_title) and desc_metadata.has_key?(:journal_0_title_info_main_title)
|
|
145
|
+
if desc_metadata[:title_info_main_title]["0"].blank? or desc_metadata[:journal_0_title_info_main_title]["0"].blank?
|
|
146
|
+
flash[:error] = "The title fields are required."
|
|
147
|
+
return false
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
return true
|
|
152
|
+
end
|
|
153
|
+
end
|