curation_concerns 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +7 -9
- data/.rspec +1 -1
- data/.rubocop.yml +185 -0
- data/.travis.yml +0 -10
- data/CONTRIBUTING.md +117 -0
- data/Gemfile +5 -2
- data/README.md +18 -11
- data/Rakefile +23 -11
- data/VERSION +1 -1
- data/app/assets/images/audio.png +0 -0
- data/app/assets/images/loading.gif +0 -0
- data/app/assets/images/progressbar.gif +0 -0
- data/app/assets/javascripts/curation_concerns/application.js +2 -8
- data/app/assets/javascripts/curation_concerns/curation_concerns.js +1 -15
- data/app/assets/javascripts/curation_concerns/facet_mine.js +4 -10
- data/app/assets/javascripts/curation_concerns/fileupload.js +6 -0
- data/app/assets/javascripts/curation_concerns/uploader.js +183 -0
- data/app/assets/stylesheets/curation_concerns/_curation_concerns.scss +3 -0
- data/app/assets/stylesheets/curation_concerns/_positioning.scss +6 -0
- data/app/assets/stylesheets/curation_concerns/fileupload/jquery.fileupload-ui.scss +86 -0
- data/app/assets/stylesheets/curation_concerns/fileupload/thumbnail-scaling.css +3 -0
- data/app/assets/stylesheets/curation_concerns/fileupload.scss +48 -0
- data/app/assets/stylesheets/curation_concerns/modules/attributes.scss +10 -0
- data/app/assets/stylesheets/curation_concerns/modules/embargoes.scss +1 -1
- data/app/assets/stylesheets/curation_concerns/modules/forms.scss +0 -10
- data/app/assets/stylesheets/curation_concerns/modules/search_results.scss +7 -8
- data/app/controllers/concerns/curation_concerns/api.rb +77 -0
- data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +30 -12
- data/app/controllers/concerns/curation_concerns/catalog_controller.rb +9 -276
- data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +51 -40
- data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +60 -30
- data/app/controllers/concerns/curation_concerns/download_behavior.rb +51 -37
- data/app/controllers/concerns/curation_concerns/embargoes_controller_behavior.rb +29 -29
- data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +198 -0
- data/app/controllers/concerns/curation_concerns/leases_controller_behavior.rb +27 -20
- data/app/controllers/concerns/curation_concerns/manages_embargoes.rb +2 -7
- data/app/controllers/concerns/curation_concerns/parent_container.rb +20 -4
- data/app/controllers/concerns/curation_concerns/single_use_links_controller_behavior.rb +48 -0
- data/app/controllers/concerns/curation_concerns/single_use_links_viewer_controller_behavior.rb +75 -0
- data/app/controllers/concerns/curation_concerns/themed_layout_controller.rb +0 -1
- data/app/controllers/concerns/curation_concerns/upload_sets_controller_behavior.rb +38 -0
- data/app/controllers/concerns/curation_concerns/welcome_controller_behavior.rb +8 -0
- data/app/controllers/concerns/curation_concerns/without_namespace.rb +2 -1
- data/app/controllers/curation_concerns/classify_concerns_controller.rb +9 -9
- data/app/controllers/curation_concerns/file_sets_controller.rb +5 -0
- data/app/controllers/curation_concerns/permissions_controller.rb +2 -3
- data/app/controllers/curation_concerns/single_use_links_controller.rb +5 -0
- data/app/controllers/curation_concerns/single_use_links_viewer_controller.rb +21 -0
- data/app/controllers/downloads_controller.rb +0 -1
- data/app/controllers/embargoes_controller.rb +0 -2
- data/app/controllers/leases_controller.rb +0 -2
- data/app/controllers/registrations_controller.rb +1 -2
- data/app/controllers/upload_sets_controller.rb +3 -0
- data/app/controllers/welcome_controller.rb +3 -0
- data/app/forms/curation_concerns/forms/collection_edit_form.rb +18 -2
- data/app/forms/curation_concerns/forms/file_set_edit_form.rb +15 -0
- data/app/forms/curation_concerns/forms/work_form.rb +57 -0
- data/app/helpers/curation_concerns/ability_helper.rb +24 -24
- data/app/helpers/curation_concerns/catalog_helper.rb +9 -8
- data/app/helpers/curation_concerns/collections_helper.rb +9 -12
- data/app/helpers/curation_concerns/embargo_helper.rb +0 -2
- data/app/helpers/curation_concerns/file_set_helper.rb +31 -0
- data/app/helpers/curation_concerns/lease_helper.rb +0 -3
- data/app/helpers/curation_concerns/main_app_helpers.rb +1 -3
- data/app/helpers/curation_concerns/render_constraints_helper.rb +5 -5
- data/app/helpers/curation_concerns/search_paths_helper.rb +5 -7
- data/app/helpers/curation_concerns/title_helper.rb +3 -7
- data/app/helpers/curation_concerns/url_helper.rb +4 -6
- data/app/inputs/multifile_input.rb +8 -0
- data/app/jobs/visibility_copy_job.rb +22 -0
- data/app/presenters/curation_concerns/collection_presenter.rb +14 -32
- data/app/presenters/curation_concerns/embargo_presenter.rb +26 -0
- data/app/presenters/curation_concerns/file_set_presenter.rb +34 -0
- data/app/presenters/curation_concerns/lease_presenter.rb +30 -0
- data/app/presenters/curation_concerns/model_proxy.rb +27 -0
- data/app/presenters/curation_concerns/permission_badge.rb +61 -0
- data/app/presenters/curation_concerns/presenter_factory.rb +45 -0
- data/app/presenters/curation_concerns/presents_attributes.rb +25 -0
- data/app/presenters/curation_concerns/version_list_presenter.rb +18 -0
- data/app/presenters/curation_concerns/version_presenter.rb +27 -0
- data/app/presenters/curation_concerns/work_show_presenter.rb +33 -0
- data/app/renderers/curation_concerns/attribute_renderer.rb +75 -0
- data/app/search_builders/curation_concerns/deactivated_embargo_search_builder.rb +10 -0
- data/app/search_builders/curation_concerns/deactivated_lease_search_builder.rb +10 -0
- data/app/search_builders/curation_concerns/embargo_search_builder.rb +23 -0
- data/app/search_builders/curation_concerns/expired_embargo_search_builder.rb +11 -0
- data/app/search_builders/curation_concerns/expired_lease_search_builder.rb +11 -0
- data/app/search_builders/curation_concerns/lease_search_builder.rb +23 -0
- data/app/search_builders/curation_concerns/search_builder.rb +10 -16
- data/app/services/curation_concerns/curation_concern.rb +0 -5
- data/app/services/curation_concerns/embargo_service.rb +26 -4
- data/app/services/curation_concerns/lease_service.rb +14 -5
- data/app/services/curation_concerns/parent_service.rb +19 -0
- data/app/services/curation_concerns/restriction_service.rb +24 -0
- data/app/services/rights_service.rb +14 -0
- data/app/views/catalog/_action_menu_partials/_collection.html.erb +1 -1
- data/app/views/catalog/_action_menu_partials/_default.html.erb +5 -3
- data/app/views/catalog/_document_list.html.erb +1 -1
- data/app/views/catalog/index.html.erb +1 -35
- data/app/views/collections/_edit_descriptions.html.erb +3 -4
- data/app/views/collections/_form.html.erb +1 -1
- data/app/views/collections/_form_permission.html.erb +1 -1
- data/app/views/collections/_search_form.html.erb +10 -0
- data/app/views/collections/_show_actions.html.erb +3 -3
- data/app/views/collections/_sort_and_per_page.html.erb +2 -2
- data/app/views/collections/show.html.erb +6 -6
- data/app/views/curation_concerns/base/_attribute_rows.html.erb +7 -0
- data/app/views/curation_concerns/base/_attributes.html.erb +6 -13
- data/app/views/curation_concerns/base/_form.html.erb +4 -5
- data/app/views/curation_concerns/base/_form_descriptive_fields.erb +2 -4
- data/app/views/curation_concerns/base/_form_files_and_links.html.erb +3 -5
- data/app/views/curation_concerns/base/_form_permission.html.erb +13 -26
- data/app/views/curation_concerns/base/_form_permission_note.html.erb +15 -0
- data/app/views/curation_concerns/base/_form_permission_under_embargo.html.erb +2 -2
- data/app/views/curation_concerns/base/_form_permission_under_lease.html.erb +2 -2
- data/app/views/curation_concerns/base/_form_representative_image.html.erb +16 -4
- data/app/views/curation_concerns/base/_form_rights.html.erb +17 -0
- data/app/views/curation_concerns/base/_form_supplementary_fields.html.erb +4 -9
- data/app/views/curation_concerns/base/_related_files.html.erb +4 -4
- data/app/views/curation_concerns/base/_representative_media.html.erb +2 -4
- data/app/views/curation_concerns/base/_versioning.html.erb +23 -0
- data/app/views/curation_concerns/base/show.html.erb +13 -10
- data/app/views/curation_concerns/base/show.json.jbuilder +1 -0
- data/app/views/curation_concerns/base/versions.html.erb +6 -0
- data/app/views/curation_concerns/file_sets/_actions.html.erb +16 -0
- data/app/views/curation_concerns/file_sets/_file_set.html.erb +12 -0
- data/app/views/curation_concerns/{generic_files → file_sets}/_form.html.erb +7 -7
- data/app/views/curation_concerns/file_sets/_multiple_upload.html.erb +3 -0
- data/app/views/curation_concerns/{generic_files → file_sets}/edit.html.erb +0 -0
- data/app/views/curation_concerns/file_sets/jq_upload.json.jbuilder +8 -0
- data/app/views/curation_concerns/file_sets/media_display/_audio.html.erb +6 -0
- data/app/views/curation_concerns/file_sets/media_display/_default.html.erb +4 -0
- data/app/views/curation_concerns/file_sets/media_display/_image.html.erb +8 -0
- data/app/views/curation_concerns/file_sets/media_display/_office_document.html.erb +7 -0
- data/app/views/curation_concerns/file_sets/media_display/_pdf.html.erb +7 -0
- data/app/views/curation_concerns/file_sets/media_display/_video.html.erb +6 -0
- data/app/views/curation_concerns/file_sets/show.html.erb +15 -0
- data/app/views/curation_concerns/file_sets/show.json.jbuilder +1 -0
- data/app/views/curation_concerns/file_sets/upload/_alerts.html.erb +19 -0
- data/app/views/curation_concerns/file_sets/upload/_form.html.erb +6 -0
- data/app/views/curation_concerns/file_sets/upload/_form_fields.html.erb +45 -0
- data/app/views/curation_concerns/file_sets/upload/_script_templates.html.erb +61 -0
- data/app/views/curation_concerns/single_use_links/new_download.html.erb +5 -0
- data/app/views/curation_concerns/single_use_links/new_show.html.erb +5 -0
- data/app/views/curation_concerns/single_use_links_viewer/show.html.erb +10 -0
- data/app/views/error/single_use_error.html.erb +19 -0
- data/app/views/layouts/error.html.erb +33 -0
- data/app/views/leases/_list_expired_active_leases.html.erb +6 -1
- data/app/views/records/_rights_modal.html.erb +1 -0
- data/app/views/records/edit_fields/_default.html.erb +5 -0
- data/app/views/records/show_fields/_default.html.erb +6 -0
- data/app/views/shared/_add_content.html.erb +2 -14
- data/app/views/shared/_add_works.html.erb +14 -0
- data/app/views/shared/_my_actions.html.erb +9 -1
- data/app/views/shared/_site_actions.html.erb +1 -1
- data/app/views/shared/_site_search.html.erb +7 -7
- data/app/views/upload_sets/_edit.js.erb +15 -0
- data/app/views/upload_sets/_metadata.html.erb +50 -0
- data/app/views/upload_sets/_more_metadata.html.erb +7 -0
- data/app/views/upload_sets/edit.html.erb +26 -0
- data/app/views/{catalog/_home_text.html.erb → welcome/index.html.erb} +1 -0
- data/config/initializers/simple_form.rb +14 -0
- data/config/jetty.yml +5 -0
- data/config/locales/curation_concerns.en.yml +25 -4
- data/config/routes.rb +5 -0
- data/curation_concerns.gemspec +4 -6
- data/lib/curation_concerns/callbacks/registry.rb +48 -0
- data/lib/curation_concerns/callbacks.rb +26 -0
- data/lib/curation_concerns/controller_resource.rb +4 -4
- data/lib/curation_concerns/engine.rb +4 -2
- data/lib/curation_concerns/rails/routes.rb +23 -19
- data/lib/curation_concerns/single_use_error.rb +3 -0
- data/lib/curation_concerns/spec_support.rb +0 -2
- data/lib/curation_concerns/version.rb +1 -1
- data/lib/curation_concerns.rb +1 -2
- data/lib/generators/curation_concerns/install_generator.rb +34 -30
- data/lib/generators/curation_concerns/templates/catalog_controller.rb +236 -0
- data/lib/generators/curation_concerns/templates/config/authorities/rights.yml +19 -0
- data/lib/generators/curation_concerns/templates/{curation_concerns.css.scss → curation_concerns.scss} +0 -0
- data/lib/generators/curation_concerns/work/templates/actor_spec.rb.erb +1 -1
- data/lib/generators/curation_concerns/work/templates/controller_spec.rb.erb +1 -1
- data/lib/generators/curation_concerns/work/templates/form.rb.erb +8 -0
- data/lib/generators/curation_concerns/work/templates/form_spec.rb.erb +10 -0
- data/lib/generators/curation_concerns/work/templates/model.rb.erb +2 -2
- data/lib/generators/curation_concerns/work/templates/model_spec.rb.erb +1 -1
- data/lib/generators/curation_concerns/work/work_generator.rb +31 -26
- data/spec/abilities/collection_abilities_spec.rb +13 -13
- data/spec/abilities/embargo_and_lease_ability_spec.rb +23 -0
- data/spec/abilities/file_set_abilities_spec.rb +67 -0
- data/spec/abilities/generic_work_abilities_spec.rb +12 -12
- data/spec/actors/curation_concerns/embargo_actor_spec.rb +38 -0
- data/spec/actors/curation_concerns/file_set_actor_spec.rb +180 -0
- data/spec/actors/curation_concerns/lease_actor_spec.rb +39 -0
- data/spec/actors/curation_concerns/manages_embargoes_actor_spec.rb +44 -38
- data/spec/actors/curation_concerns/work_actor_spec.rb +121 -63
- data/spec/controllers/catalog_controller_spec.rb +30 -32
- data/spec/controllers/curation_concerns/classify_concerns_controller_spec.rb +2 -3
- data/spec/controllers/curation_concerns/collections_controller_spec.rb +93 -76
- data/spec/controllers/curation_concerns/file_sets_controller_json_spec.rb +106 -0
- data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +237 -0
- data/spec/controllers/curation_concerns/generic_works_controller_json_spec.rb +85 -0
- data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +84 -72
- data/spec/controllers/curation_concerns/permissions_controller_spec.rb +8 -11
- data/spec/controllers/curation_concerns/single_use_links_controller_spec.rb +79 -0
- data/spec/controllers/curation_concerns/single_use_links_viewer_controller_spec.rb +74 -0
- data/spec/controllers/downloads_controller_spec.rb +49 -24
- data/spec/controllers/embargoes_controller_spec.rb +42 -51
- data/spec/controllers/leases_controller_spec.rb +53 -42
- data/spec/controllers/upload_sets_controller_spec.rb +76 -0
- data/spec/controllers/welcome_controller_spec.rb +12 -0
- data/spec/factories/collections.rb +5 -1
- data/spec/factories/{generic_files.rb → file_sets.rb} +6 -6
- data/spec/factories/generic_works.rb +5 -6
- data/spec/factories/users.rb +2 -4
- data/spec/features/add_file_spec.rb +11 -12
- data/spec/features/catalog_search_spec.rb +43 -0
- data/spec/features/collection_spec.rb +61 -46
- data/spec/features/create_work_spec.rb +26 -19
- data/spec/features/embargo_spec.rb +13 -12
- data/spec/features/lease_spec.rb +15 -16
- data/spec/features/update_file_spec.rb +11 -13
- data/spec/features/work_generator_spec.rb +34 -26
- data/spec/{helpers/curation_concerns/.keep → fixtures/empty_file.txt} +0 -0
- data/spec/fixtures/test.pdf +0 -0
- data/spec/forms/collection_edit_form_spec.rb +53 -9
- data/spec/forms/file_set_edit_form_spec.rb +53 -0
- data/spec/forms/work_form_spec.rb +54 -0
- data/spec/helpers/catalog_helper_spec.rb +9 -10
- data/spec/helpers/configuration_helper_spec.rb +1 -2
- data/spec/helpers/curation_concerns/collections_helper_spec.rb +8 -9
- data/spec/helpers/curation_concerns/file_set_helper_spec.rb +61 -0
- data/spec/helpers/render_constraints_helper_spec.rb +4 -4
- data/spec/helpers/url_helper_spec.rb +8 -7
- data/spec/indexers/collection_indexer_spec.rb +14 -0
- data/spec/indexers/file_set_indexing_service_spec.rb +69 -0
- data/spec/indexers/generic_work_indexing_service_spec.rb +22 -0
- data/spec/inputs/multifile_input_spec.rb +32 -0
- data/spec/jobs/active_fedora_id_based_job_spec.rb +10 -8
- data/spec/jobs/audit_job_spec.rb +28 -20
- data/spec/jobs/characterize_job_spec.rb +10 -15
- data/spec/jobs/create_derivatives_job_spec.rb +11 -9
- data/spec/jobs/import_url_job_spec.rb +14 -21
- data/spec/jobs/ingest_file_job_spec.rb +45 -0
- data/spec/jobs/ingest_local_file_job_spec.rb +13 -15
- data/spec/jobs/upload_set_update_job_spec.rb +30 -0
- data/spec/jobs/visibility_copy_job_spec.rb +61 -0
- data/spec/lib/curation_concerns/callbacks/registry_spec.rb +54 -0
- data/spec/lib/curation_concerns/callbacks_spec.rb +27 -0
- data/spec/lib/curation_concerns/messages_spec.rb +29 -30
- data/spec/lib/curation_concerns/readable_permissions_spec.rb +18 -20
- data/spec/lib/curation_concerns/writable_permissions_spec.rb +2 -4
- data/spec/matchers/metadata_field_matchers.rb +1 -1
- data/spec/matchers/response_matchers.rb +2 -2
- data/spec/matchers.rb +3 -2
- data/spec/models/checksum_audit_log_spec.rb +37 -32
- data/spec/models/curation_concerns/collection_behavior_spec.rb +50 -37
- data/spec/models/curation_concerns/file_set/derivatives_spec.rb +84 -0
- data/spec/models/curation_concerns/work_behavior_spec.rb +53 -0
- data/spec/models/file_set_spec.rb +601 -0
- data/spec/models/generic_work_spec.rb +15 -14
- data/spec/models/single_use_link_spec.rb +69 -0
- data/spec/models/solr_document_spec.rb +67 -0
- data/spec/models/upload_set_spec.rb +39 -0
- data/spec/models/user_spec.rb +7 -8
- data/spec/presenters/curation_concerns/collection_presenter_spec.rb +8 -24
- data/spec/presenters/curation_concerns/file_set_presenter_spec.rb +59 -0
- data/spec/presenters/curation_concerns/permission_badge_spec.rb +29 -0
- data/spec/presenters/curation_concerns/presenter_factory_spec.rb +29 -0
- data/spec/presenters/curation_concerns/version_list_presenter_spec.rb +32 -0
- data/spec/presenters/curation_concerns/version_presenter_spec.rb +51 -0
- data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +35 -0
- data/spec/presenters/embargo_presenter_spec.rb +48 -0
- data/spec/presenters/lease_presenter_spec.rb +48 -0
- data/spec/renderers/curation_concerns/attribute_renderer_spec.rb +14 -0
- data/spec/routing/curation_concerns/routes_spec.rb +38 -12
- data/spec/routing/route_spec.rb +38 -39
- data/spec/search_builders/curation_concerns/embargo_search_builder_spec.rb +17 -0
- data/spec/search_builders/curation_concerns/lease_search_builder_spec.rb +17 -0
- data/spec/search_builders/curation_concerns/search_builder_spec.rb +60 -0
- data/spec/services/derivative_path_spec.rb +16 -0
- data/spec/services/embargo_service_spec.rb +15 -14
- data/spec/services/file_set_audit_service_spec.rb +71 -0
- data/spec/services/lease_service_spec.rb +13 -13
- data/spec/services/lock_manager_spec.rb +12 -0
- data/spec/services/parent_service_spec.rb +13 -0
- data/spec/services/persist_derivatives_spec.rb +24 -0
- data/spec/services/persist_directly_contained_output_file_service_spec.rb +14 -0
- data/spec/services/repository_audit_service_spec.rb +8 -7
- data/spec/services/rights_service_spec.rb +17 -0
- data/spec/services/thumbnail_path_service_spec.rb +43 -0
- data/spec/services/versioning_service_spec.rb +8 -9
- data/spec/spec_helper.rb +21 -13
- data/spec/support/curation_concerns/factory_helpers.rb +1 -0
- data/spec/support/features/fixture_file_upload.rb +3 -1
- data/spec/support/features/session_helpers.rb +3 -4
- data/spec/support/features.rb +1 -4
- data/spec/support/input_support.rb +11 -0
- data/spec/support/matchers/api_responses.rb +22 -0
- data/spec/support/shared/shared_examples_has_dc_metadata.rb +0 -2
- data/spec/support/shared/shared_examples_is_embargoable.rb +1 -3
- data/spec/support/shared/shared_examples_with_access_rights.rb +13 -16
- data/spec/tasks/rake_spec.rb +9 -11
- data/spec/test_app_templates/Gemfile.extra +4 -1
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +3 -35
- data/spec/views/catalog/index.html.erb_spec.rb +7 -10
- data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +9 -6
- data/spec/views/curation_concerns/base/_form_permission.html.erb_spec.rb +13 -0
- data/spec/views/curation_concerns/base/show.html.erb_spec.rb +35 -15
- data/spec/views/curation_concerns/base/show.json.jbuilder_spec.rb +21 -0
- data/spec/views/curation_concerns/file_sets/_file_set.html.erb_spec.rb +37 -0
- data/spec/views/curation_concerns/file_sets/show.json.jbuilder_spec.rb +21 -0
- data/spec/views/curation_concerns/permissions/confirm.html.erb_spec.rb +6 -6
- data/spec/views/error/single_use_error.html.erb_spec.rb +8 -0
- data/spec/views/layouts/error.html.erb_spec.rb +8 -0
- data/spec/views/shared/_add_content.html.erb_spec.rb +33 -20
- data/spec/views/shared/_my_actions.html.erb_spec.rb +18 -6
- data/spec/views/single_use_links/new_download.html.erb_spec.rb +29 -0
- data/spec/views/single_use_links_viewer/show.html.erb_spec.rb +32 -0
- data/tasks/jetty.rake +1 -1
- data/vendor/assets/javascrips/fileupload/jquery.fileupload-process.js +175 -0
- data/vendor/assets/javascrips/fileupload/jquery.fileupload-ui.js +710 -0
- data/vendor/assets/javascrips/fileupload/jquery.fileupload-validate.js +122 -0
- data/vendor/assets/javascrips/fileupload/jquery.fileupload.js +1477 -0
- data/vendor/assets/javascrips/fileupload/locale.js +27 -0
- data/vendor/assets/javascrips/fileupload/tmpl.js +87 -0
- metadata +242 -213
- data/app/assets/javascripts/curation_concerns/help_modal.js +0 -36
- data/app/assets/javascripts/curation_concerns/link_groups.js.coffee +0 -123
- data/app/assets/javascripts/curation_concerns/link_users.js.coffee +0 -126
- data/app/assets/javascripts/curation_concerns/proxy_rights.js.coffee +0 -95
- data/app/assets/javascripts/curation_concerns/proxy_submission.js +0 -23
- data/app/assets/javascripts/curation_concerns/select_works.js.coffee +0 -20
- data/app/controllers/catalog_controller.rb +0 -3
- data/app/controllers/concerns/curation_concerns/generic_files_controller_behavior.rb +0 -149
- data/app/controllers/curation_concerns/generic_files_controller.rb +0 -13
- data/app/datastreams/curation_concerns/generic_work_rdf_properties.rb +0 -57
- data/app/datastreams/generic_work_metadata.rb +0 -3
- data/app/forms/curation_concerns/forms/generic_file_edit_form.rb +0 -15
- data/app/forms/curation_concerns/forms/generic_work_edit_form.rb +0 -9
- data/app/helpers/curation_concerns/attribute_helper.rb +0 -67
- data/app/helpers/curation_concerns/generic_file_helper.rb +0 -19
- data/app/helpers/curation_concerns/thumbnail_helper.rb +0 -11
- data/app/presenters/curation_concerns/generic_file_presenter.rb +0 -14
- data/app/presenters/curation_concerns/generic_work_presenter.rb +0 -13
- data/app/views/catalog/_index_default.html.erb +0 -17
- data/app/views/collections/_form_representative_image.html.erb +0 -13
- data/app/views/collections/_identifier_and_action.html.erb +0 -15
- data/app/views/curation_concerns/base/_form_content_license.html.erb +0 -16
- data/app/views/curation_concerns/base/_form_editors.html.erb +0 -15
- data/app/views/curation_concerns/generic_files/_actions.html.erb +0 -16
- data/app/views/curation_concerns/generic_files/_generic_file.html.erb +0 -12
- data/app/views/curation_concerns/generic_files/_media_display.html.erb +0 -19
- data/app/views/curation_concerns/generic_files/jq_upload.json.jbuilder +0 -8
- data/app/views/curation_concerns/generic_files/show.html.erb +0 -15
- data/app/workers/visibility_copy_worker.rb +0 -30
- data/curation_concerns-models/.gitignore +0 -17
- data/curation_concerns-models/Gemfile +0 -4
- data/curation_concerns-models/LICENSE.md +0 -177
- data/curation_concerns-models/README.md +0 -42
- data/curation_concerns-models/Rakefile +0 -1
- data/curation_concerns-models/app/actors/concerns/curation_concerns/manages_embargoes_actor.rb +0 -99
- data/curation_concerns-models/app/actors/curation_concerns/base_actor.rb +0 -90
- data/curation_concerns-models/app/actors/curation_concerns/generic_file_actor.rb +0 -150
- data/curation_concerns-models/app/actors/curation_concerns/work_actor_behavior.rb +0 -88
- data/curation_concerns-models/app/jobs/active_fedora_id_based_job.rb +0 -22
- data/curation_concerns-models/app/jobs/active_fedora_pid_based_job.rb +0 -6
- data/curation_concerns-models/app/jobs/audit_job.rb +0 -58
- data/curation_concerns-models/app/jobs/characterize_job.rb +0 -11
- data/curation_concerns-models/app/jobs/copy_permissions_job.rb +0 -24
- data/curation_concerns-models/app/jobs/create_derivatives_job.rb +0 -15
- data/curation_concerns-models/app/jobs/import_url_job.rb +0 -56
- data/curation_concerns-models/app/jobs/ingest_local_file_job.rb +0 -48
- data/curation_concerns-models/app/jobs/resolrize_job.rb +0 -9
- data/curation_concerns-models/app/models/checksum_audit_log.rb +0 -21
- data/curation_concerns-models/app/models/concerns/curation_concerns/ability.rb +0 -34
- data/curation_concerns-models/app/models/concerns/curation_concerns/basic_metadata.rb +0 -87
- data/curation_concerns-models/app/models/concerns/curation_concerns/collection_behavior.rb +0 -47
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/belongs_to_works.rb +0 -53
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/characterization.rb +0 -89
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/content.rb +0 -8
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/export.rb +0 -343
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/full_text_indexing.rb +0 -12
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/indexing.rb +0 -14
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/versions.rb +0 -16
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file.rb +0 -5
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file_behavior.rb +0 -44
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_work_behavior.rb +0 -38
- data/curation_concerns-models/app/models/concerns/curation_concerns/has_representative.rb +0 -14
- data/curation_concerns-models/app/models/concerns/curation_concerns/human_readable_type.rb +0 -23
- data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/readable.rb +0 -19
- data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/writable.rb +0 -75
- data/curation_concerns-models/app/models/concerns/curation_concerns/permissions.rb +0 -7
- data/curation_concerns-models/app/models/concerns/curation_concerns/serializers.rb +0 -15
- data/curation_concerns-models/app/models/concerns/curation_concerns/solr_document_behavior.rb +0 -135
- data/curation_concerns-models/app/models/concerns/curation_concerns/user.rb +0 -65
- data/curation_concerns-models/app/models/concerns/curation_concerns/with_basic_metadata.rb +0 -98
- data/curation_concerns-models/app/models/concerns/curation_concerns/with_generic_files.rb +0 -29
- data/curation_concerns-models/app/models/curation_concerns/classify_concern.rb +0 -47
- data/curation_concerns-models/app/models/curation_concerns/quick_classification_query.rb +0 -31
- data/curation_concerns-models/app/models/datastreams/fits_datastream.rb +0 -148
- data/curation_concerns-models/app/models/version_committer.rb +0 -2
- data/curation_concerns-models/app/services/curation_concerns/characterization_service.rb +0 -71
- data/curation_concerns-models/app/services/curation_concerns/full_text_extraction_service.rb +0 -38
- data/curation_concerns-models/app/services/curation_concerns/generic_file_audit_service.rb +0 -85
- data/curation_concerns-models/app/services/curation_concerns/generic_file_indexing_service.rb +0 -14
- data/curation_concerns-models/app/services/curation_concerns/generic_work_indexing_service.rb +0 -16
- data/curation_concerns-models/app/services/curation_concerns/noid.rb +0 -23
- data/curation_concerns-models/app/services/curation_concerns/repository_audit_service.rb +0 -9
- data/curation_concerns-models/app/services/curation_concerns/versioning_service.rb +0 -27
- data/curation_concerns-models/config/locales/curation_concerns.en.yml +0 -6
- data/curation_concerns-models/curation_concerns-models.gemspec +0 -34
- data/curation_concerns-models/lib/curation_concerns/messages.rb +0 -66
- data/curation_concerns-models/lib/curation_concerns/models/engine.rb +0 -61
- data/curation_concerns-models/lib/curation_concerns/models/resque.rb +0 -36
- data/curation_concerns-models/lib/curation_concerns/models/utils.rb +0 -22
- data/curation_concerns-models/lib/curation_concerns/models/version.rb +0 -5
- data/curation_concerns-models/lib/curation_concerns/models.rb +0 -32
- data/curation_concerns-models/lib/generators/curation_concerns/models/abstract_migration_generator.rb +0 -30
- data/curation_concerns-models/lib/generators/curation_concerns/models/clamav_generator.rb +0 -19
- data/curation_concerns-models/lib/generators/curation_concerns/models/fulltext_generator.rb +0 -28
- data/curation_concerns-models/lib/generators/curation_concerns/models/install_generator.rb +0 -70
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/collection.rb +0 -4
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/generic_file.rb +0 -4
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/clamav.rb +0 -1
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +0 -123
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/mime_types.rb +0 -6
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis.yml +0 -9
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis_config.rb +0 -32
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque-pool.yml +0 -1
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_admin.rb +0 -10
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_config.rb +0 -5
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_checksum_audit_logs.rb +0 -19
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_version_committers.rb +0 -15
- data/curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake +0 -75
- data/curation_concerns-models/lib/tasks/migrate.rake +0 -13
- data/curation_concerns-models/lib/tasks/resque.rake +0 -13
- data/curation_concerns-models/lib/tasks/solr_reindex.rake +0 -8
- data/lib/curation_concerns/configuration.rb +0 -74
- data/lib/generators/curation_concerns/templates/curation_concerns_config.rb +0 -2
- data/solr_conf/conf/solrconfig.xml +0 -223
- data/spec/abilities/generic_file_abilities_spec.rb +0 -62
- data/spec/actors/curation_concerns/generic_file_actor_spec.rb +0 -116
- data/spec/controllers/curation_concerns/generic_files_controller_spec.rb +0 -251
- data/spec/forms/generic_file_edit_form_spec.rb +0 -33
- data/spec/helpers/thumbnail_helper_spec.rb +0 -21
- data/spec/jobs/copy_permissions_job_spec.rb +0 -49
- data/spec/jobs/curation_concerns_resque_queue_spec.rb +0 -49
- data/spec/models/curation_concerns/generic_file/derivatives_spec.rb +0 -88
- data/spec/models/curation_concerns/generic_work_behavior_spec.rb +0 -35
- data/spec/models/fits_datastream_spec.rb +0 -127
- data/spec/models/generic_file_spec.rb +0 -619
- data/spec/presenters/curation_concerns/generic_file_presenter_spec.rb +0 -16
- data/spec/services/characterization_service_spec.rb +0 -30
- data/spec/services/full_text_extraction_service_spec.rb +0 -5
- data/spec/services/generic_file_audit_service_spec.rb +0 -71
- data/spec/services/generic_file_indexing_service_spec.rb +0 -57
- data/spec/services/generic_work_indexing_service_spec.rb +0 -18
- data/spec/workers/visibility_copy_worker_spec.rb +0 -70
- data/vendor/assets/javascripts/handlebars.js +0 -2278
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +0 -602
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +0 -356
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +0 -50
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +0 -1276
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +0 -610
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +0 -498
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +0 -528
- data/vendor/assets/javascripts/jquery.tokeninput.js +0 -1061
- data/vendor/assets/stylesheets/jquery-ui-lightness.css +0 -474
- data/vendor/assets/stylesheets/token-input-facebook.css +0 -122
- data/vendor/assets/stylesheets/token-input-mac.css +0 -204
- data/vendor/assets/stylesheets/token-input.css +0 -127
|
@@ -10,51 +10,65 @@ module CurationConcerns
|
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
#
|
|
15
|
-
def
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
# Render the 404 page if the file doesn't exist.
|
|
14
|
+
# Otherwise renders the file.
|
|
15
|
+
def show
|
|
16
|
+
case file
|
|
17
|
+
when ActiveFedora::File
|
|
18
|
+
# For original files that are stored in fedora
|
|
19
|
+
super
|
|
20
|
+
when String
|
|
21
|
+
# For derivatives stored on the local file system
|
|
22
|
+
response.headers['Accept-Ranges'] = 'bytes'
|
|
23
|
+
response.headers['Content-Length'] = File.size(file).to_s
|
|
24
|
+
send_file file, type: mime_type_for(file), disposition: 'inline'
|
|
25
|
+
else
|
|
26
|
+
render_404
|
|
27
|
+
end
|
|
18
28
|
end
|
|
19
29
|
|
|
20
|
-
|
|
21
|
-
# Override this method to change which file is shown.
|
|
22
|
-
# Loads the file specified by the HTTP parameter `:file_id`.
|
|
23
|
-
# If this object does not have a file by that name, return the default file
|
|
24
|
-
# as returned by {#default_file}
|
|
25
|
-
# @return [ActiveFedora::File] the file
|
|
26
|
-
def load_file
|
|
27
|
-
file_reference = params[:file]
|
|
28
|
-
# f = asset.attached_files[file_path] if file_path # can't use this because attached_files assumes basic containment
|
|
29
|
-
f = asset.send(file_reference) if valid_file_reference?(file_reference)
|
|
30
|
-
f ||= default_file
|
|
31
|
-
raise "Unable to find a file for #{asset}" if f.nil?
|
|
32
|
-
f
|
|
33
|
-
end
|
|
30
|
+
protected
|
|
34
31
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
default_file_reference = DownloadsController.default_content_path
|
|
32
|
+
# Customize the :download ability in your Ability class, or override this method
|
|
33
|
+
def authorize_download!
|
|
34
|
+
# authorize! :download, file # can't use this because Hydra::Ability#download_permissions assumes that files are in Basic Container (and thus include the asset's uri)
|
|
35
|
+
authorize! :read, asset
|
|
40
36
|
end
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
|
|
38
|
+
# Overrides Hydra::Controller::DownloadBehavior#load_file, which is hard-coded to assume files are in BasicContainer.
|
|
39
|
+
# Override this method to change which file is shown.
|
|
40
|
+
# Loads the file specified by the HTTP parameter `:file`.
|
|
41
|
+
# If this object does not have a file by that name, return the default file
|
|
42
|
+
# as returned by {#default_file}
|
|
43
|
+
# @return [ActiveFedora::File, String, NilClass] Returns the file from the repository or a path to a file on the local file system, if it exists.
|
|
44
|
+
def load_file
|
|
45
|
+
file_reference = params[:file]
|
|
46
|
+
return default_file unless file_reference
|
|
47
|
+
|
|
48
|
+
file_path = CurationConcerns::DerivativePath.derivative_path_for_reference(asset, file_reference)
|
|
49
|
+
File.exist?(file_path) ? file_path : nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def default_file
|
|
53
|
+
if asset.class.respond_to?(:default_file_path)
|
|
54
|
+
default_file_reference = asset.class.default_file_path
|
|
55
|
+
else
|
|
56
|
+
default_file_reference = DownloadsController.default_content_path
|
|
57
|
+
end
|
|
58
|
+
association = dereference_file(default_file_reference)
|
|
59
|
+
association.reader if association
|
|
45
60
|
end
|
|
46
|
-
end
|
|
47
61
|
|
|
48
62
|
private
|
|
49
63
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
singular_associations.include?(file_reference.to_sym) || [:original_file, :thumbnail,:extracted_text].include?(file_reference.to_sym)
|
|
54
|
-
end
|
|
64
|
+
def mime_type_for(file)
|
|
65
|
+
MIME::Types.type_for(File.extname(file)).first.content_type
|
|
66
|
+
end
|
|
55
67
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
68
|
+
def dereference_file(file_reference)
|
|
69
|
+
return false if file_reference.nil?
|
|
70
|
+
association = asset.association(file_reference.to_sym)
|
|
71
|
+
association if association && association.is_a?(ActiveFedora::Associations::SingularAssociation)
|
|
72
|
+
end
|
|
59
73
|
end
|
|
60
74
|
end
|
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
module CurationConcerns
|
|
2
2
|
module EmbargoesControllerBehavior
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
|
+
include CurationConcerns::ManagesEmbargoes
|
|
5
|
+
include Hydra::Collections::AcceptsBatches
|
|
4
6
|
|
|
5
7
|
included do
|
|
6
|
-
|
|
8
|
+
skip_before_action :normalize_identifier, only: :update
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def index
|
|
12
|
+
authorize! :index, Hydra::AccessControls::Embargo
|
|
13
|
+
end
|
|
7
14
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
end
|
|
15
|
+
# Removes a single embargo
|
|
16
|
+
def destroy
|
|
17
|
+
EmbargoActor.new(curation_concern).destroy
|
|
18
|
+
flash[:notice] = curation_concern.embargo_history.last
|
|
19
|
+
if curation_concern.work? && curation_concern.file_sets.present?
|
|
20
|
+
redirect_to confirm_curation_concerns_permission_path(curation_concern)
|
|
21
|
+
else
|
|
22
|
+
redirect_to edit_embargo_path(curation_concern)
|
|
17
23
|
end
|
|
24
|
+
end
|
|
18
25
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
redirect_to embargoes_path
|
|
26
|
+
# Updates a batch of embargos
|
|
27
|
+
def update
|
|
28
|
+
filter_docs_with_edit_access!
|
|
29
|
+
copy_visibility = params[:embargoes].values.map { |h| h[:copy_visibility] }
|
|
30
|
+
ActiveFedora::Base.find(batch).each do |curation_concern|
|
|
31
|
+
EmbargoActor.new(curation_concern).destroy
|
|
32
|
+
curation_concern.copy_visibility_to_files if copy_visibility.include?(curation_concern.id)
|
|
29
33
|
end
|
|
34
|
+
redirect_to embargoes_path
|
|
30
35
|
end
|
|
31
36
|
|
|
32
37
|
protected
|
|
33
38
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def remove_embargo(work)
|
|
39
|
-
work.embargo_visibility! # If the embargo has lapsed, update the current visibility.
|
|
40
|
-
work.deactivate_embargo!
|
|
41
|
-
work.save
|
|
42
|
-
end
|
|
39
|
+
def _prefixes
|
|
40
|
+
# This allows us to use the unauthorized template in curation_concerns/base
|
|
41
|
+
@_prefixes ||= super + ['curation_concerns/base']
|
|
42
|
+
end
|
|
43
43
|
end
|
|
44
44
|
end
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
module CurationConcerns
|
|
2
|
+
module FileSetsControllerBehavior
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
include CurationConcerns::ThemedLayoutController
|
|
7
|
+
with_themed_layout '1_column'
|
|
8
|
+
load_and_authorize_resource class: ::FileSet, except: :show
|
|
9
|
+
helper_method :curation_concern
|
|
10
|
+
include CurationConcerns::ParentContainer
|
|
11
|
+
include Blacklight::Base
|
|
12
|
+
include Hydra::Controller::SearchBuilder
|
|
13
|
+
copy_blacklight_config_from(::CatalogController)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def curation_concern
|
|
17
|
+
@file_set
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# routed to /files/new
|
|
21
|
+
def new
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# routed to /files/:id/edit
|
|
25
|
+
def edit
|
|
26
|
+
@groups = current_user.groups
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# routed to /files (POST)
|
|
30
|
+
def create
|
|
31
|
+
create_from_upload(params)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def create_from_upload(params)
|
|
35
|
+
# check error condition No files
|
|
36
|
+
return render_json_response(response_type: :bad_request, options: { message: 'Error! No file to save' }) unless params.key?(:file_set) && params.fetch(:file_set).key?(:files)
|
|
37
|
+
|
|
38
|
+
file = params[:file_set][:files].detect { |f| f.respond_to?(:original_filename) }
|
|
39
|
+
if !file
|
|
40
|
+
render_json_response(response_type: :bad_request, options: { message: 'Error! No file for upload', description: 'unknown file' })
|
|
41
|
+
elsif empty_file?(file)
|
|
42
|
+
render_json_response(response_type: :unprocessable_entity, options: { errors: { files: "#{file.original_filename} has no content! (Zero length file)" }, description: t('curation_concerns.api.unprocessable_entity.empty_file') })
|
|
43
|
+
else
|
|
44
|
+
process_file(file)
|
|
45
|
+
end
|
|
46
|
+
rescue RSolr::Error::Http => error
|
|
47
|
+
logger.error "FileSetController::create rescued #{error.class}\n\t#{error}\n #{error.backtrace.join("\n")}\n\n"
|
|
48
|
+
render_json_response(response_type: :internal_error, options: { message: 'Error occurred while creating generic file.' })
|
|
49
|
+
ensure
|
|
50
|
+
# remove the tempfile (only if it is a temp file)
|
|
51
|
+
file.tempfile.delete if file.respond_to?(:tempfile)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# routed to /files/:id
|
|
55
|
+
def show
|
|
56
|
+
respond_to do |wants|
|
|
57
|
+
wants.html do
|
|
58
|
+
_, document_list = search_results(params, [:add_access_controls_to_solr_params, :find_one, :only_file_sets])
|
|
59
|
+
curation_concern = document_list.first
|
|
60
|
+
raise CanCan::AccessDenied unless curation_concern
|
|
61
|
+
@presenter = show_presenter.new(curation_concern, current_ability)
|
|
62
|
+
end
|
|
63
|
+
wants.json do
|
|
64
|
+
# load and authorize @curation_concern manually because it's skipped for html
|
|
65
|
+
@file_set = curation_concern_type.load_instance_from_solr(params[:id]) unless curation_concern
|
|
66
|
+
authorize! :show, @file_set
|
|
67
|
+
render :show, status: :ok
|
|
68
|
+
end
|
|
69
|
+
additional_response_formats(wants)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Gives the class of the show presenter. Override this if you want
|
|
74
|
+
# to use a different presenter.
|
|
75
|
+
def show_presenter
|
|
76
|
+
CurationConcerns::FileSetPresenter
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def destroy
|
|
80
|
+
actor.destroy
|
|
81
|
+
redirect_to [main_app, :curation_concerns, @file_set.in_works.first], notice: 'The file has been deleted.'
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# routed to /files/:id (PUT)
|
|
85
|
+
def update
|
|
86
|
+
success = if wants_to_revert?
|
|
87
|
+
actor.revert_content(params[:revision])
|
|
88
|
+
elsif params.key?(:file_set)
|
|
89
|
+
if params[:file_set].key?(:files)
|
|
90
|
+
actor.update_content(params[:file_set][:files].first)
|
|
91
|
+
else
|
|
92
|
+
update_metadata
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
if success
|
|
96
|
+
respond_to do |wants|
|
|
97
|
+
wants.html do
|
|
98
|
+
redirect_to [main_app, :curation_concerns, @file_set], notice:
|
|
99
|
+
"The file #{view_context.link_to(@file_set, [main_app, :curation_concerns, @file_set])} has been updated."
|
|
100
|
+
end
|
|
101
|
+
wants.json { render :show, status: :ok, location: polymorphic_path([main_app, :curation_concerns, @file_set]) }
|
|
102
|
+
end
|
|
103
|
+
else
|
|
104
|
+
respond_to do |wants|
|
|
105
|
+
wants.html { render 'edit', status: :unprocessable_entity }
|
|
106
|
+
wants.json { render_json_response(response_type: :unprocessable_entity, options: { errors: @file_set.errors }) }
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
rescue RSolr::Error::Http => error
|
|
110
|
+
flash[:error] = error.message
|
|
111
|
+
logger.error "FileSetsController::update rescued #{error.class}\n\t#{error.message}\n #{error.backtrace.join("\n")}\n\n"
|
|
112
|
+
render action: 'edit'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def versions
|
|
116
|
+
@version_list = version_list
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# this is provided so that implementing application can override this behavior and map params to different attributes
|
|
120
|
+
def update_metadata
|
|
121
|
+
file_attributes = CurationConcerns::Forms::FileSetEditForm.model_attributes(attributes)
|
|
122
|
+
actor.update_metadata(file_attributes)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
protected
|
|
126
|
+
|
|
127
|
+
# Override this method to add additional response
|
|
128
|
+
# formats to your local app
|
|
129
|
+
def additional_response_formats(_)
|
|
130
|
+
# nop
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def file_set_params
|
|
134
|
+
params.require(:file_set).permit(
|
|
135
|
+
:visibility_during_embargo, :embargo_release_date, :visibility_after_embargo, :visibility_during_lease, :lease_expiration_date, :visibility_after_lease, :visibility, title: [])
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def version_list
|
|
139
|
+
CurationConcerns::VersionListPresenter.new(@file_set.original_file.versions.all)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def wants_to_revert?
|
|
143
|
+
params.key?(:revision) && params[:revision] != @file_set.latest_content_version.label
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def actor
|
|
147
|
+
@actor ||= ::CurationConcerns::FileSetActor.new(@file_set, current_user)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def attributes
|
|
151
|
+
# params.fetch(:file_set, {}).dup # use a copy of the hash so that original params stays untouched when interpret_visibility modifies things
|
|
152
|
+
params.fetch(:file_set, {}).except(:files).permit!.dup # use a copy of the hash so that original params stays untouched when interpret_visibility modifies things
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def _prefixes
|
|
156
|
+
# This allows us to use the unauthorized and form_permission template in curation_concerns/base
|
|
157
|
+
@_prefixes ||= super + ['curation_concerns/base']
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def empty_file?(file)
|
|
161
|
+
(file.respond_to?(:tempfile) && file.tempfile.size == 0) || (file.respond_to?(:size) && file.size == 0)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def process_file(file)
|
|
165
|
+
update_metadata_from_upload_screen
|
|
166
|
+
parent = ActiveFedora::Base.find(parent_id)
|
|
167
|
+
actor.create_metadata(params[:upload_set_id], parent, params[:file_set])
|
|
168
|
+
if actor.create_content(file)
|
|
169
|
+
respond_to do |format|
|
|
170
|
+
format.html do
|
|
171
|
+
if request.xhr?
|
|
172
|
+
render 'jq_upload', formats: 'json', content_type: 'text/html'
|
|
173
|
+
else
|
|
174
|
+
redirect_to [main_app, :curation_concerns, @file_set.in_works.first]
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
format.json do
|
|
178
|
+
render 'jq_upload', status: :created, location: polymorphic_path([main_app, :curation_concerns, curation_concern])
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
else
|
|
182
|
+
msg = @file_set.errors.full_messages.join(', ')
|
|
183
|
+
flash[:error] = msg
|
|
184
|
+
json_error "Error creating generic file: #{msg}"
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# this is provided so that implementing application can override this behavior and map params to different attributes
|
|
189
|
+
def update_metadata_from_upload_screen
|
|
190
|
+
# Relative path is set by the jquery uploader when uploading a directory
|
|
191
|
+
@file_set.relative_path = params[:relative_path] if params[:relative_path]
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def curation_concern_type
|
|
195
|
+
::FileSet
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
@@ -1,36 +1,43 @@
|
|
|
1
1
|
module CurationConcerns
|
|
2
2
|
module LeasesControllerBehavior
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
|
+
include CurationConcerns::ManagesEmbargoes
|
|
5
|
+
include Hydra::Collections::AcceptsBatches
|
|
4
6
|
|
|
5
7
|
included do
|
|
6
|
-
|
|
8
|
+
skip_before_action :normalize_identifier, only: :update
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def index
|
|
12
|
+
authorize! :index, Hydra::AccessControls::Lease
|
|
13
|
+
end
|
|
7
14
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
# Removes a single lease
|
|
16
|
+
def destroy
|
|
17
|
+
LeaseActor.new(curation_concern).destroy
|
|
18
|
+
flash[:notice] = curation_concern.lease_history.last
|
|
19
|
+
if curation_concern.work? && curation_concern.file_sets.present?
|
|
20
|
+
redirect_to confirm_curation_concerns_permission_path(curation_concern)
|
|
21
|
+
else
|
|
14
22
|
redirect_to edit_lease_path(curation_concern)
|
|
15
23
|
end
|
|
24
|
+
end
|
|
16
25
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
redirect_to leases_path
|
|
26
|
+
def update
|
|
27
|
+
filter_docs_with_edit_access!
|
|
28
|
+
copy_visibility = params[:leases].values.map { |h| h[:copy_visibility] }
|
|
29
|
+
ActiveFedora::Base.find(batch).each do |curation_concern|
|
|
30
|
+
LeaseActor.new(curation_concern).destroy
|
|
31
|
+
curation_concern.copy_visibility_to_files if copy_visibility.include?(curation_concern.id)
|
|
26
32
|
end
|
|
33
|
+
redirect_to leases_path
|
|
27
34
|
end
|
|
28
35
|
|
|
29
36
|
protected
|
|
30
37
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
def _prefixes
|
|
39
|
+
# This allows us to use the unauthorized template in curation_concerns/base
|
|
40
|
+
@_prefixes ||= super + ['curation_concerns/base']
|
|
41
|
+
end
|
|
35
42
|
end
|
|
36
43
|
end
|
|
@@ -9,15 +9,10 @@ module CurationConcerns
|
|
|
9
9
|
attr_accessor :curation_concern
|
|
10
10
|
helper_method :curation_concern
|
|
11
11
|
load_and_authorize_resource class: ActiveFedora::Base, instance_name: :curation_concern
|
|
12
|
-
|
|
13
|
-
def deny_access(exception)
|
|
14
|
-
redirect_to root_path, alert: exception.message
|
|
15
|
-
end
|
|
16
12
|
end
|
|
17
13
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
authorize! :discover, :embargo
|
|
14
|
+
def deny_access(exception)
|
|
15
|
+
redirect_to root_path, alert: exception.message
|
|
21
16
|
end
|
|
22
17
|
|
|
23
18
|
def edit
|
|
@@ -6,18 +6,35 @@ module CurationConcerns::ParentContainer
|
|
|
6
6
|
# before_filter :authorize_edit_parent_rights!, except: [:show] # Not sure we actually want this enforced any more (was originally in worthwhile), especially since GenericFiles and GenericWorks (which are PCDM::Objects)can belong to multiple parents
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
# TODO: this is slow, refactor to return a Presenter (fetch from solr)
|
|
9
10
|
def parent
|
|
10
|
-
@parent ||= new_or_create? ?
|
|
11
|
+
@parent ||= new_or_create? ? find_parent_by_id : lookup_parent_from_child
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def find_parent_by_id
|
|
15
|
+
ActiveFedora::Base.find(parent_id)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def lookup_parent_from_child
|
|
19
|
+
if curation_concern
|
|
20
|
+
# in_objects method is inherited from Hydra::PCDM::ObjectBehavior
|
|
21
|
+
curation_concern.in_objects.first
|
|
22
|
+
elsif @presenter
|
|
23
|
+
|
|
24
|
+
CurationConcerns::ParentService.parent_for(@presenter.id)
|
|
25
|
+
else
|
|
26
|
+
raise "no child"
|
|
27
|
+
end
|
|
11
28
|
end
|
|
12
29
|
|
|
13
30
|
def parent_id
|
|
14
|
-
@parent_id ||= new_or_create? ? params[:parent_id] : curation_concern.generic_works.
|
|
31
|
+
@parent_id ||= new_or_create? ? params[:parent_id] : curation_concern.generic_works.in_objects.first.id
|
|
15
32
|
end
|
|
16
33
|
|
|
17
34
|
protected
|
|
18
35
|
|
|
19
36
|
def new_or_create?
|
|
20
|
-
|
|
37
|
+
%w(create new).include? action_name
|
|
21
38
|
end
|
|
22
39
|
|
|
23
40
|
def namespaced_parent_id
|
|
@@ -29,5 +46,4 @@ module CurationConcerns::ParentContainer
|
|
|
29
46
|
def authorize_edit_parent_rights!
|
|
30
47
|
authorize! :edit, parent_id
|
|
31
48
|
end
|
|
32
|
-
|
|
33
49
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module CurationConcerns
|
|
2
|
+
module SingleUseLinksControllerBehavior
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
included do
|
|
5
|
+
before_action :authenticate_user!
|
|
6
|
+
before_action :authorize_user!
|
|
7
|
+
# Catch permission errors
|
|
8
|
+
rescue_from Hydra::AccessDenied, CanCan::AccessDenied do |exception|
|
|
9
|
+
if current_user && current_user.persisted?
|
|
10
|
+
redirect_to main_app.root_url, alert: "You do not have sufficient privileges to create links to this document"
|
|
11
|
+
else
|
|
12
|
+
session["user_return_to"] = request.url
|
|
13
|
+
redirect_to new_user_session_url, alert: exception.message
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def new_download
|
|
19
|
+
@su = SingleUseLink.create itemId: params[:id], path: main_app.download_path(id: asset)
|
|
20
|
+
@link = curation_concerns.download_single_use_link_path(@su.downloadKey)
|
|
21
|
+
|
|
22
|
+
respond_to do |format|
|
|
23
|
+
format.html
|
|
24
|
+
format.js { render js: @link }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def new_show
|
|
29
|
+
@su = SingleUseLink.create itemId: params[:id], path: polymorphic_path([main_app, :curation_concerns, asset])
|
|
30
|
+
@link = curation_concerns.show_single_use_link_path(@su.downloadKey)
|
|
31
|
+
|
|
32
|
+
respond_to do |format|
|
|
33
|
+
format.html
|
|
34
|
+
format.js { render js: @link }
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
protected
|
|
39
|
+
|
|
40
|
+
def authorize_user!
|
|
41
|
+
authorize! :edit, asset
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def asset
|
|
45
|
+
@asset ||= ActiveFedora::Base.load_instance_from_solr(params[:id])
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
data/app/controllers/concerns/curation_concerns/single_use_links_viewer_controller_behavior.rb
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module CurationConcerns
|
|
2
|
+
module SingleUseLinksViewerControllerBehavior
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
include CurationConcerns::DownloadBehavior
|
|
5
|
+
include Blacklight::Base
|
|
6
|
+
include Hydra::Controller::SearchBuilder
|
|
7
|
+
|
|
8
|
+
included do
|
|
9
|
+
include ActionDispatch::Routing::PolymorphicRoutes
|
|
10
|
+
|
|
11
|
+
skip_before_action :authorize_download!, only: :show
|
|
12
|
+
rescue_from CurationConcerns::SingleUseError, with: :render_single_use_error
|
|
13
|
+
rescue_from CanCan::AccessDenied, with: :render_single_use_error
|
|
14
|
+
rescue_from ActiveRecord::RecordNotFound, with: :render_single_use_error
|
|
15
|
+
class_attribute :presenter_class
|
|
16
|
+
self.presenter_class = CurationConcerns::FileSetPresenter
|
|
17
|
+
copy_blacklight_config_from(::CatalogController)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def download
|
|
21
|
+
raise not_found_exception unless single_use_link.path == main_app.download_path(id: @asset)
|
|
22
|
+
send_content
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def show
|
|
26
|
+
_, document_list = search_results({ id: single_use_link.itemId }, [:find_one])
|
|
27
|
+
curation_concern = document_list.first
|
|
28
|
+
|
|
29
|
+
# Authorize using SingleUseLinksViewerController::Ability
|
|
30
|
+
authorize! :read, curation_concern
|
|
31
|
+
|
|
32
|
+
raise not_found_exception unless single_use_link.path == polymorphic_path([main_app, :curation_concerns, curation_concern])
|
|
33
|
+
|
|
34
|
+
# show the file
|
|
35
|
+
@presenter = presenter_class.new(curation_concern, current_ability)
|
|
36
|
+
|
|
37
|
+
# create a dowload link that is single use for the user since we do not just want to show metadata we want to access it too
|
|
38
|
+
@su = single_use_link.create_for_path main_app.download_path(curation_concern.id)
|
|
39
|
+
@download_link = curation_concerns.download_single_use_link_path(@su.downloadKey)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
protected
|
|
43
|
+
|
|
44
|
+
# This is called in a before filter. It causes @asset to be set.
|
|
45
|
+
def authorize_download!
|
|
46
|
+
authorize! :read, asset
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def single_use_link
|
|
50
|
+
@single_use_link ||= SingleUseLink.find_by_downloadKey!(params[:id])
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def not_found_exception
|
|
54
|
+
CurationConcerns::SingleUseError.new('Single-Use Link Not Found')
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def asset
|
|
58
|
+
@asset ||= ActiveFedora::Base.find(single_use_link.itemId)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def current_ability
|
|
62
|
+
@current_ability ||= SingleUseLinksViewerController::Ability.new current_user, single_use_link
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def render_single_use_error(exception)
|
|
66
|
+
logger.error("Rendering PAGE due to exception: #{exception.inspect} - #{exception.backtrace if exception.respond_to? :backtrace}")
|
|
67
|
+
render template: '/error/single_use_error', layout: "error", formats: [:html], status: 404
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def _prefixes
|
|
71
|
+
# This allows us to use the attributes templates in curation_concerns/base
|
|
72
|
+
@_prefixes ||= super + ['curation_concerns/base']
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module CurationConcerns
|
|
2
|
+
module UploadSetsControllerBehavior
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
include Hydra::Controller::ControllerBehavior
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
include CurationConcerns::ThemedLayoutController
|
|
8
|
+
with_themed_layout '1_column'
|
|
9
|
+
|
|
10
|
+
class_attribute :edit_form_class
|
|
11
|
+
self.edit_form_class = CurationConcerns::Forms::FileSetEditForm
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def edit
|
|
15
|
+
@upload_set = UploadSet.find_or_create(params[:id])
|
|
16
|
+
@form = edit_form
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def update
|
|
20
|
+
authenticate_user!
|
|
21
|
+
@upload_set = UploadSet.find_or_create(params[:id])
|
|
22
|
+
@upload_set.status = ["processing"]
|
|
23
|
+
@upload_set.save
|
|
24
|
+
file_attributes = edit_form_class.model_attributes(params[:file_set])
|
|
25
|
+
UploadSetUpdateJob.perform_later(current_user.user_key, params[:id], params[:title], file_attributes, params[:visibility])
|
|
26
|
+
flash[:notice] = 'Your files are being processed by ' + t('curation_concerns.product_name') + ' in the background. The metadata and access controls you specified are being applied. Files will be marked <span class="label label-danger" title="Private">Private</span> until this process is complete (shouldn\'t take too long, hang in there!). You may need to refresh your dashboard to see these updates.'
|
|
27
|
+
|
|
28
|
+
redirect_to main_app.curation_concerns_generic_works_path
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
protected
|
|
32
|
+
|
|
33
|
+
def edit_form
|
|
34
|
+
file_set = ::FileSet.new(creator: [current_user.user_key], title: @upload_set.file_sets.map(&:label))
|
|
35
|
+
edit_form_class.new(file_set)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|