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.
Files changed (169) hide show
  1. data/.gitignore +2 -0
  2. data/Rakefile +5 -0
  3. data/app/assets/images/hydra/powered_by_hydra.png +0 -0
  4. data/app/assets/images/hydra/search-button.png +0 -0
  5. data/app/assets/javascripts/date-picker/booking/index.html +368 -0
  6. data/app/assets/javascripts/date-picker/calendarHTML.txt +84 -0
  7. data/app/assets/javascripts/date-picker/css/datepicker.css +511 -0
  8. data/app/assets/javascripts/date-picker/css/demo.css +229 -0
  9. data/app/assets/javascripts/date-picker/index.html +798 -0
  10. data/app/assets/javascripts/date-picker/js/datepicker.js +2898 -0
  11. data/app/assets/javascripts/date-picker/js/datepicker.packed.js +1 -0
  12. data/app/assets/javascripts/date-picker/js/lang/ar.js +9 -0
  13. data/app/assets/javascripts/date-picker/js/lang/cs.js +9 -0
  14. data/app/assets/javascripts/date-picker/js/lang/da.js +10 -0
  15. data/app/assets/javascripts/date-picker/js/lang/de.js +10 -0
  16. data/app/assets/javascripts/date-picker/js/lang/en.js +9 -0
  17. data/app/assets/javascripts/date-picker/js/lang/eo.js +13 -0
  18. data/app/assets/javascripts/date-picker/js/lang/es.js +9 -0
  19. data/app/assets/javascripts/date-picker/js/lang/et.js +23 -0
  20. data/app/assets/javascripts/date-picker/js/lang/fi.js +7 -0
  21. data/app/assets/javascripts/date-picker/js/lang/fr.js +69 -0
  22. data/app/assets/javascripts/date-picker/js/lang/he.js +9 -0
  23. data/app/assets/javascripts/date-picker/js/lang/hu.js +9 -0
  24. data/app/assets/javascripts/date-picker/js/lang/id.js +9 -0
  25. data/app/assets/javascripts/date-picker/js/lang/it.js +11 -0
  26. data/app/assets/javascripts/date-picker/js/lang/kr.js +9 -0
  27. data/app/assets/javascripts/date-picker/js/lang/lt.js +8 -0
  28. data/app/assets/javascripts/date-picker/js/lang/lv.js +9 -0
  29. data/app/assets/javascripts/date-picker/js/lang/nl.js +9 -0
  30. data/app/assets/javascripts/date-picker/js/lang/no.js +9 -0
  31. data/app/assets/javascripts/date-picker/js/lang/pl.js +10 -0
  32. data/app/assets/javascripts/date-picker/js/lang/pt-br.js +11 -0
  33. data/app/assets/javascripts/date-picker/js/lang/pt.js +9 -0
  34. data/app/assets/javascripts/date-picker/js/lang/ru.js +11 -0
  35. data/app/assets/javascripts/date-picker/js/lang/se.js +9 -0
  36. data/app/assets/javascripts/date-picker/js/lang/si.js +9 -0
  37. data/app/assets/javascripts/date-picker/js/lang/tr.js +9 -0
  38. data/app/assets/javascripts/date-picker/language/index.html +240 -0
  39. data/app/assets/javascripts/date-picker/media/Thumbs.db +0 -0
  40. data/app/assets/javascripts/date-picker/media/backstripes.gif +0 -0
  41. data/app/assets/javascripts/date-picker/media/bg_header.jpg +0 -0
  42. data/app/assets/javascripts/date-picker/media/bullet1.gif +0 -0
  43. data/app/assets/javascripts/date-picker/media/bullet2.gif +0 -0
  44. data/app/assets/javascripts/date-picker/media/cal-grey.gif +0 -0
  45. data/app/assets/javascripts/date-picker/media/cal.gif +0 -0
  46. data/app/assets/javascripts/date-picker/media/gradient-e5e5e5-ffffff.gif +0 -0
  47. data/app/assets/javascripts/hydra/hydra-head.js +195 -0
  48. data/app/assets/javascripts/hydra/mediashelf.datepicker.js +39 -0
  49. data/app/assets/javascripts/hydra/mediashelf.placeholder.js +67 -0
  50. data/app/assets/javascripts/jquery.form.js +1076 -0
  51. data/app/assets/javascripts/jquery.ui.datepicker.js +1793 -0
  52. data/app/assets/javascripts/spin.min.js +2 -0
  53. data/app/assets/stylesheets/hydra/html_refactor.css +79 -0
  54. data/app/assets/stylesheets/hydra/hydrangea-split-button.css +18 -0
  55. data/app/assets/stylesheets/hydra/hydrangea.css +288 -0
  56. data/app/assets/stylesheets/hydra/ie-styles.css +149 -0
  57. data/app/assets/stylesheets/hydra/styles.css +946 -0
  58. data/app/assets/stylesheets/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  59. data/app/assets/stylesheets/redmond/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  60. data/app/assets/stylesheets/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  61. data/app/assets/stylesheets/redmond/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  62. data/app/assets/stylesheets/redmond/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  63. data/app/assets/stylesheets/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  64. data/app/assets/stylesheets/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  65. data/app/assets/stylesheets/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  66. data/app/assets/stylesheets/redmond/images/ui-icons_217bc0_256x240.png +0 -0
  67. data/app/assets/stylesheets/redmond/images/ui-icons_2e83ff_256x240.png +0 -0
  68. data/app/assets/stylesheets/redmond/images/ui-icons_469bdd_256x240.png +0 -0
  69. data/app/assets/stylesheets/redmond/images/ui-icons_6da8d5_256x240.png +0 -0
  70. data/app/assets/stylesheets/redmond/images/ui-icons_cd0a0a_256x240.png +0 -0
  71. data/app/assets/stylesheets/redmond/images/ui-icons_d8e7f3_256x240.png +0 -0
  72. data/app/assets/stylesheets/redmond/images/ui-icons_f9bd01_256x240.png +0 -0
  73. data/app/assets/stylesheets/redmond/jquery-ui-1.8.5.custom.css +572 -0
  74. data/app/controllers/hydra/application_controller.rb +5 -0
  75. data/app/controllers/hydra/file_assets_controller.rb +3 -0
  76. data/app/helpers/application_helper.rb +3 -0
  77. data/app/helpers/hydra/application_helper_behavior.rb +8 -0
  78. data/app/helpers/hydra/hydra_helper_behavior.rb +70 -0
  79. data/app/helpers/hydra_helper.rb +4 -0
  80. data/app/models/file_asset.rb +5 -0
  81. data/app/models/uses_default_partials.rb +23 -0
  82. data/app/views/_add_assets_links.html.erb +14 -0
  83. data/app/views/_user_util_links.html.erb +24 -0
  84. data/app/views/generic_content_objects/_contributor_form.html.erb +11 -0
  85. data/app/views/generic_content_objects/_description_form.html.erb +7 -0
  86. data/app/views/generic_content_objects/_edit_description.html.erb +23 -0
  87. data/app/views/generic_content_objects/_new.html.erb +0 -0
  88. data/app/views/generic_content_objects/_show_description.html.erb +41 -0
  89. data/app/views/generic_contents/_edit.html.erb +10 -0
  90. data/app/views/generic_contents/_index.html.erb +21 -0
  91. data/app/views/generic_contents/_show.html.erb +6 -0
  92. data/app/views/generic_contents/_show_content.html.erb +7 -0
  93. data/app/views/generic_images/_edit.html.erb +36 -0
  94. data/app/views/generic_images/_index.html.erb +24 -0
  95. data/app/views/generic_images/_show.html.erb +13 -0
  96. data/app/views/generic_images/_show_all.html.erb +14 -0
  97. data/app/views/generic_images/_show_content.html.erb +7 -0
  98. data/app/views/hydra/file_assets/_asset_saved_flash.html.erb +2 -0
  99. data/app/views/hydra/file_assets/_deletable_result.html.erb +5 -0
  100. data/app/views/hydra/file_assets/_file_assets_form.html.erb +11 -0
  101. data/app/views/hydra/file_assets/_index.html.erb +29 -0
  102. data/app/views/hydra/file_assets/_new.html.erb +6 -0
  103. data/app/views/hydra/file_assets/_result.html.erb +11 -0
  104. data/app/views/hydra/file_assets/index.html.erb +5 -0
  105. data/app/views/hydra/permissions/_edit_person_permissions.html.erb +30 -0
  106. data/app/views/hydra/permissions/_index.html.erb +46 -0
  107. data/app/views/hydra/permissions/_new.html.erb +14 -0
  108. data/app/views/hydra/permissions/_permissions_form.html.erb +23 -0
  109. data/app/views/hydra/permissions/index.html.erb +1 -0
  110. data/app/views/hydra/permissions/new.html.erb +1 -0
  111. data/app/views/mods_assets/_additional_info_form.html.erb +44 -0
  112. data/app/views/mods_assets/_contributor_form.html.erb +14 -0
  113. data/app/views/mods_assets/_edit.html.erb +10 -0
  114. data/app/views/mods_assets/_edit_description.html.erb +73 -0
  115. data/app/views/mods_assets/_edit_journal.html.erb +57 -0
  116. data/app/views/mods_assets/_index.html.erb +1 -0
  117. data/app/views/mods_assets/_index_list.html.erb +37 -0
  118. data/app/views/mods_assets/_index_table.html.erb +7 -0
  119. data/app/views/mods_assets/_progress_box.html.erb +82 -0
  120. data/app/views/mods_assets/_publication_form.html.erb +13 -0
  121. data/app/views/mods_assets/_show.html.erb +39 -0
  122. data/app/views/mods_assets/_show_additional_info.html.erb +17 -0
  123. data/app/views/mods_assets/_show_contributors.html.erb +7 -0
  124. data/app/views/mods_assets/_show_description.html.erb +35 -0
  125. data/app/views/mods_assets/_show_file_assets.html.erb +22 -0
  126. data/app/views/mods_assets/_show_journal.html.erb +42 -0
  127. data/app/views/mods_assets/_show_permissions.html.erb +15 -0
  128. data/app/views/mods_assets/_show_publication.html.erb +8 -0
  129. data/app/views/shared/_delete_asset_confirmation.html.erb +17 -0
  130. data/config/jetty.yml +7 -0
  131. data/hydra-file-access.gemspec +39 -0
  132. data/lib/hydra-file-access.rb +15 -0
  133. data/lib/hydra/assets.rb +5 -0
  134. data/lib/hydra/assets_controller_helper.rb +122 -0
  135. data/lib/hydra/controller/assets_controller_behavior.rb +153 -0
  136. data/lib/hydra/controller/file_assets_behavior.rb +140 -0
  137. data/lib/hydra/file_access/engine.rb +12 -0
  138. data/lib/hydra/file_assets.rb +11 -0
  139. data/lib/hydra/submission_workflow.rb +139 -0
  140. data/lib/hydra/ui.rb +6 -0
  141. data/spec/.gitignore +1 -0
  142. data/spec/controllers/file_assets_controller_spec.rb +180 -0
  143. data/spec/fixtures/small_file.txt +1 -0
  144. data/spec/helpers/access_controls_evaluation_spec.rb +19 -0
  145. data/spec/helpers/assets_controller_helper_spec.rb +63 -0
  146. data/spec/helpers/file_assets_helper_spec.rb +116 -0
  147. data/spec/helpers/hydra_helper_spec.rb +21 -0
  148. data/spec/helpers/hydra_model_methods_spec.rb +88 -0
  149. data/spec/integration/file_asset_spec.rb +68 -0
  150. data/spec/lib/hydra_submission_workflow_spec.rb +141 -0
  151. data/spec/models/file_asset_spec.rb +25 -0
  152. data/spec/spec_helper.rb +27 -0
  153. data/spec/support/Gemfile +12 -0
  154. data/spec/support/app/models/generic_content.rb +26 -0
  155. data/spec/support/app/models/sample.rb +33 -0
  156. data/spec/support/app/models/solr_document.rb +5 -0
  157. data/spec/support/db/migrate/20111101221803_create_searches.rb +16 -0
  158. data/spec/support/lib/generators/test_app_generator.rb +39 -0
  159. data/spec/support/matchers/helper_matcher.rb +14 -0
  160. data/spec/support/matchers/solr_matchers.rb +60 -0
  161. data/spec/support/spec/factories/users.rb +11 -0
  162. data/spec/support/spec/fixtures/hydra_test_generic_content.foxml.xml +138 -0
  163. data/spec/support/spec/fixtures/hydrangea_fixture_file_asset1.foxml.xml +4946 -0
  164. data/spec/support/spec/fixtures/hydrangea_fixture_mods_article1.foxml.xml +234 -0
  165. data/spec/support/spec/fixtures/hydrangea_fixture_mods_article2.foxml.xml +177 -0
  166. data/spec/support/spec/fixtures/hydrangea_fixture_mods_article3.foxml.xml +170 -0
  167. data/spec/support/spec/fixtures/hydrangea_fixture_uploaded_svg1.foxml.xml +676 -0
  168. data/tasks/rspec.rake +55 -0
  169. 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,7 @@
1
+ default:
2
+ jetty_port: <%= ENV['TEST_JETTY_PORT'] || 8983 %>
3
+ jetty_home: ../jetty
4
+ startup_wait: 30
5
+ java_opts:
6
+ - "-Xmx256m"
7
+ - "-XX:MaxPermSize=128m"
@@ -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
@@ -0,0 +1,5 @@
1
+ module Hydra
2
+ module Assets
3
+ include Hydra::Controller::AssetsControllerBehavior
4
+ end
5
+ end
@@ -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