curation_concerns 0.10.0 → 0.11.0.rc1
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/.rubocop.yml +0 -3
- data/CONTRIBUTING.md +111 -0
- data/Gemfile +1 -1
- data/README.md +16 -0
- data/VERSION +1 -1
- data/app/assets/javascripts/curation_concerns/file_manager/save_manager.es6 +1 -1
- data/app/assets/stylesheets/curation_concerns/_positioning.scss +0 -4
- data/app/controllers/concerns/curation_concerns/catalog_controller.rb +1 -4
- data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +4 -8
- data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +15 -11
- data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +5 -13
- data/app/controllers/curation_concerns/permissions_controller.rb +3 -3
- data/app/forms/curation_concerns/forms/collection_edit_form.rb +1 -1
- data/app/forms/curation_concerns/forms/work_form.rb +2 -0
- data/app/helpers/curation_concerns/collections_helper.rb +21 -4
- data/app/jobs/visibility_copy_job.rb +2 -4
- data/app/presenters/curation_concerns/collection_presenter.rb +1 -1
- data/app/presenters/curation_concerns/work_show_presenter.rb +27 -4
- data/app/search_builders/curation_concerns/filter_by_type.rb +8 -1
- data/app/search_builders/curation_concerns/search_builder.rb +7 -14
- data/app/search_builders/curation_concerns/search_filters.rb +18 -0
- data/app/search_builders/curation_concerns/single_result.rb +1 -1
- data/app/search_builders/curation_concerns/single_use_link_search_builder.rb +1 -1
- data/app/search_builders/curation_concerns/work_search_builder.rb +1 -1
- data/app/views/curation_concerns/base/{_form_descriptive_fields.erb → _form_descriptive_fields.html.erb} +0 -0
- data/app/views/curation_concerns/base/_member.html.erb +12 -0
- data/app/views/curation_concerns/base/_related_files.html.erb +2 -2
- data/curation_concerns.gemspec +2 -1
- data/lib/curation_concerns/version.rb +1 -1
- data/lib/curation_concerns.rb +1 -0
- data/lib/generators/curation_concerns/assets_generator.rb +16 -0
- data/lib/generators/curation_concerns/install_generator.rb +7 -14
- data/lib/generators/curation_concerns/templates/catalog_controller.rb +4 -4
- data/lib/generators/curation_concerns/work/templates/controller.rb.erb +1 -1
- data/lib/generators/curation_concerns/work/templates/feature_spec.rb.erb +26 -0
- data/lib/generators/curation_concerns/work/work_generator.rb +5 -0
- data/spec/actors/curation_concerns/file_actor_spec.rb +1 -1
- data/spec/actors/curation_concerns/file_set_actor_spec.rb +4 -3
- data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +14 -1
- data/spec/controllers/curation_concerns/permissions_controller_spec.rb +1 -1
- data/spec/features/add_file_spec.rb +1 -1
- data/spec/features/collection_spec.rb +1 -11
- data/spec/features/create_work_spec.rb +1 -1
- data/spec/features/embargo_spec.rb +1 -1
- data/spec/features/lease_spec.rb +1 -1
- data/spec/features/update_file_spec.rb +1 -1
- data/spec/features/work_generator_spec.rb +1 -1
- data/spec/forms/work_form_spec.rb +5 -0
- data/spec/helpers/curation_concerns/collections_helper_spec.rb +19 -5
- data/spec/indexers/collection_indexer_spec.rb +1 -1
- data/spec/javascripts/save_manager_spec.coffee +1 -0
- data/spec/jobs/audit_job_spec.rb +3 -7
- data/spec/jobs/characterize_job_spec.rb +4 -4
- data/spec/jobs/create_derivatives_job_spec.rb +4 -4
- data/spec/jobs/import_url_job_spec.rb +6 -6
- data/spec/jobs/ingest_file_job_spec.rb +6 -6
- data/spec/jobs/visibility_copy_job_spec.rb +3 -3
- data/spec/models/file_set_spec.rb +6 -0
- data/spec/models/generic_work_spec.rb +6 -0
- data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +25 -1
- data/spec/search_builders/curation_concerns/file_set_search_builder_spec.rb +2 -2
- data/spec/search_builders/curation_concerns/search_builder_spec.rb +16 -3
- data/spec/spec_helper.rb +2 -2
- data/spec/test_app_templates/Gemfile.extra +0 -1
- data/spec/views/curation_concerns/{file_sets/_file_set.html.erb_spec.rb → base/_member.html.erb_spec.rb} +2 -2
- data/vendor/assets/{javascrips → javascripts}/fileupload/jquery.fileupload-process.js +0 -0
- data/vendor/assets/{javascrips → javascripts}/fileupload/jquery.fileupload-ui.js +0 -0
- data/vendor/assets/{javascrips → javascripts}/fileupload/jquery.fileupload-validate.js +0 -0
- data/vendor/assets/{javascrips → javascripts}/fileupload/jquery.fileupload.js +0 -0
- data/vendor/assets/{javascrips → javascripts}/fileupload/locale.js +0 -0
- data/vendor/assets/{javascrips → javascripts}/fileupload/tmpl.js +0 -0
- metadata +36 -21
- data/app/views/curation_concerns/file_sets/_file_set.html.erb +0 -12
- data/lib/curation_concerns/form_builder.rb +0 -16
- data/spec/jobs/active_fedora_id_based_job_spec.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c78f15b06d8b5d61d52a99b9498950819fffdc9
|
4
|
+
data.tar.gz: 79effc2f8a6b6ecec62815cbe91e5a5f0987f239
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad7c5e7f4605f50a235bd79d2fce714e59fb3febd3f26f17e20fe3d21bf2aafa378dd3d44a8ce9dcb480f74e62d01640cbb0e0cebd5c5a6819848f0cab06a7eb
|
7
|
+
data.tar.gz: 4f736f41c13de86dd6ed2004c35407024efbac2e8b3a6114dac7674e20fa61d04ea2811b1fa0fc89b325dc6fec9dff6c6f7c0ffa7b487abe789f94cc50c908ed
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require: rubocop-rspec
|
2
|
-
|
3
2
|
AllCops:
|
4
3
|
DisplayCopNames: true
|
5
4
|
Include:
|
@@ -178,9 +177,7 @@ RSpec/DescribeClass:
|
|
178
177
|
Exclude:
|
179
178
|
- 'spec/javascripts/jasmine_spec.rb'
|
180
179
|
- 'spec/tasks/rake_spec.rb'
|
181
|
-
- 'spec/jobs/event_jobs_spec.rb'
|
182
180
|
- 'spec/abilities/**/*'
|
183
|
-
- 'spec/features/**/*'
|
184
181
|
- 'spec/views/**/*'
|
185
182
|
- 'spec/routing/**/*'
|
186
183
|
- 'spec/inputs/**/*'
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
# How to Contribute
|
2
|
+
|
3
|
+
We want your help to make Project Hydra great.
|
4
|
+
There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things.
|
5
|
+
|
6
|
+
## Hydra Project Intellectual Property Licensing and Ownership
|
7
|
+
|
8
|
+
All code contributors must have an Individual Contributor License Agreement (iCLA) on file with the Hydra Project Steering Group.
|
9
|
+
If the contributor works for an institution, the institution must have a Corporate Contributor License Agreement (cCLA) on file.
|
10
|
+
|
11
|
+
https://wiki.duraspace.org/display/hydra/Hydra+Project+Intellectual+Property+Licensing+and+Ownership
|
12
|
+
|
13
|
+
## Contribution Tasks
|
14
|
+
|
15
|
+
* Reporting Issues
|
16
|
+
* Making Changes
|
17
|
+
* Submitting Changes
|
18
|
+
* Merging Changes
|
19
|
+
|
20
|
+
### Reporting Issues
|
21
|
+
|
22
|
+
* Make sure you have a [GitHub account](https://github.com/signup/free)
|
23
|
+
* Submit a [Github issue](./issues) by:
|
24
|
+
* Clearly describing the issue
|
25
|
+
* Provide a descriptive summary
|
26
|
+
* Explain the expected behavior
|
27
|
+
* Explain the actual behavior
|
28
|
+
* Provide steps to reproduce the actual behavior
|
29
|
+
|
30
|
+
### Making Changes
|
31
|
+
|
32
|
+
* Fork the repository on GitHub
|
33
|
+
* Create a topic branch from where you want to base your work.
|
34
|
+
* This is usually the master branch.
|
35
|
+
* To quickly create a topic branch based on master; `git branch fix/master/my_contribution master`
|
36
|
+
* Then checkout the new branch with `git checkout fix/master/my_contribution`.
|
37
|
+
* Please avoid working directly on the `master` branch.
|
38
|
+
* You may find the [hub suite of commands](https://github.com/defunkt/hub) helpful
|
39
|
+
* Make commits of logical units.
|
40
|
+
* Your commit should include a high level description of your work in HISTORY.textile
|
41
|
+
* Check for unnecessary whitespace with `git diff --check` before committing.
|
42
|
+
* Make sure your commit messages are [well formed](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
|
43
|
+
* If you created an issue, you can close it by including "Closes #issue" in your commit message. See [Github's blog post for more details](https://github.com/blog/1386-closing-issues-via-commit-messages)
|
44
|
+
|
45
|
+
```
|
46
|
+
Present tense short summary (50 characters or less)
|
47
|
+
|
48
|
+
More detailed description, if necessary. It should be wrapped to 72
|
49
|
+
characters. Try to be as descriptive as you can, even if you think that
|
50
|
+
the commit content is obvious, it may not be obvious to others. You
|
51
|
+
should add such description also if it's already present in bug tracker,
|
52
|
+
it should not be necessary to visit a webpage to check the history.
|
53
|
+
|
54
|
+
Include Closes #<issue-number> when relavent.
|
55
|
+
|
56
|
+
Description can have multiple paragraphs and you can use code examples
|
57
|
+
inside, just indent it with 4 spaces:
|
58
|
+
|
59
|
+
class PostsController
|
60
|
+
def index
|
61
|
+
respond_with Post.limit(10)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
You can also add bullet points:
|
66
|
+
|
67
|
+
- you can use dashes or asterisks
|
68
|
+
|
69
|
+
- also, try to indent next line of a point for readability, if it's too
|
70
|
+
long to fit in 72 characters
|
71
|
+
```
|
72
|
+
|
73
|
+
* Make sure you have added the necessary tests for your changes.
|
74
|
+
* Run _all_ the tests to assure nothing else was accidentally broken.
|
75
|
+
* When you are ready to submit a pull request
|
76
|
+
|
77
|
+
### Submitting Changes
|
78
|
+
|
79
|
+
[Detailed Walkthrough of One Pull Request per Commit](http://ndlib.github.io/practices/one-commit-per-pull-request/)
|
80
|
+
|
81
|
+
* Read the article ["Using Pull Requests"](https://help.github.com/articles/using-pull-requests) on GitHub.
|
82
|
+
* Make sure your branch is up to date with its parent branch (i.e. master)
|
83
|
+
* `git checkout master`
|
84
|
+
* `git pull --rebase`
|
85
|
+
* `git checkout <your-branch>`
|
86
|
+
* `git rebase master`
|
87
|
+
* It is likely a good idea to run your tests again.
|
88
|
+
* Squash the commits for your branch into one commit
|
89
|
+
* `git rebase --interactive HEAD~<number-of-commits>` ([See Github help](https://help.github.com/articles/interactive-rebase))
|
90
|
+
* To determine the number of commits on your branch: `git log master..<your-branch> --oneline | wc -l`
|
91
|
+
* Squashing your branch's changes into one commit is "good form" and helps the person merging your request to see everything that is going on.
|
92
|
+
* Push your changes to a topic branch in your fork of the repository.
|
93
|
+
* Submit a pull request from your fork to the project.
|
94
|
+
|
95
|
+
### Merging Changes
|
96
|
+
|
97
|
+
* It is considered "poor from" to merge your own request.
|
98
|
+
* Please take the time to review the changes and get a sense of what is being changed. Things to consider:
|
99
|
+
* Does the commit message explain what is going on?
|
100
|
+
* Does the code changes have tests? _Not all changes need new tests, some changes are refactorings_
|
101
|
+
* Does the commit contain more than it should? Are two separate concerns being addressed in one commit?
|
102
|
+
* Did the Travis tests complete successfully?
|
103
|
+
* If you are uncertain, bring other contributors into the conversation by creating a comment that includes their @username.
|
104
|
+
* If you like the pull request, but want others to chime in, create a +1 comment and tag a user.
|
105
|
+
|
106
|
+
# Additional Resources
|
107
|
+
|
108
|
+
* [General GitHub documentation](http://help.github.com/)
|
109
|
+
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
|
110
|
+
* [Pro Git](http://git-scm.com/book) is both a free and excellent book about Git.
|
111
|
+
* [A Git Config for Contributing](http://ndlib.github.io/practices/my-typical-per-project-git-config/)
|
data/Gemfile
CHANGED
@@ -6,7 +6,7 @@ gemspec
|
|
6
6
|
gem 'curation_concerns-models', path: './curation_concerns-models'
|
7
7
|
|
8
8
|
group :development, :test do
|
9
|
-
gem 'rubocop', require: false
|
9
|
+
gem 'rubocop', '~> 0.37.0', require: false
|
10
10
|
gem 'rubocop-rspec', '~> 1.3.1', require: false
|
11
11
|
gem 'simplecov', '~> 0.9', require: false
|
12
12
|
gem 'coveralls', require: false
|
data/README.md
CHANGED
@@ -11,6 +11,18 @@
|
|
11
11
|
|
12
12
|
A Hydra-based Rails Engine that extends an application, adding the ability to Create, Read, Update and Destroy (CRUD) objects (based on [Hydra::Works](http://github.com/projecthydra-labs/hydra-works)) and providing a generator for defining object types with custom workflows, views, access controls, etc.
|
13
13
|
|
14
|
+
## Prerequisites
|
15
|
+
|
16
|
+
Curation Concerns requires the following software to work:
|
17
|
+
|
18
|
+
1. Solr
|
19
|
+
1. [Fedora Commons](http://www.fedora-commons.org/) digital repository
|
20
|
+
1. A SQL RDBMS (MySQL, PostgreSQL), though **note** that SQLite will be used by default if you're looking to get up and running quickly
|
21
|
+
1. [Redis](http://redis.io/), a key-value store
|
22
|
+
1. [ImageMagick](http://www.imagemagick.org/) with JPEG-2000 support
|
23
|
+
1. [FITS](#characterization) version 0.6.x
|
24
|
+
1. [LibreOffice](#derivatives)
|
25
|
+
|
14
26
|
## Installation
|
15
27
|
|
16
28
|
Checkout the dependencies for [curation_concerns-models](https://github.com/projecthydra-labs/curation_concerns/tree/master/curation_concerns-models#dependencies), which is installed as part of curation_concerns.
|
@@ -58,3 +70,7 @@ Or you can do all the steps manually:
|
|
58
70
|
# in another window
|
59
71
|
$ rake engine_cart:generate
|
60
72
|
$ rake curation_concerns:spec
|
73
|
+
|
74
|
+
## Help
|
75
|
+
|
76
|
+
If you have questions or need help, please email [the Hydra community tech list](mailto:hydra-tech@googlegroups.com) or stop by [the Hydra community IRC channel](irc://irc.freenode.net/projecthydra).
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.11.0.rc1
|
@@ -14,10 +14,6 @@ module CurationConcerns::CatalogController
|
|
14
14
|
end
|
15
15
|
|
16
16
|
module ClassMethods
|
17
|
-
def t(*args)
|
18
|
-
I18n.translate(*args)
|
19
|
-
end
|
20
|
-
|
21
17
|
def uploaded_field
|
22
18
|
# system_create_dtsi
|
23
19
|
solr_name('date_uploaded', :stored_sortable, type: :date)
|
@@ -28,6 +24,7 @@ module CurationConcerns::CatalogController
|
|
28
24
|
end
|
29
25
|
|
30
26
|
def search_config
|
27
|
+
ActiveSupport::Deprecation.warn("#{self.class}.search_config is deprecated and will be removed in CurationConcerns 1.0")
|
31
28
|
{ 'qf' => %w(title_tesim name_tesim), 'qt' => 'search', 'rows' => 10 }
|
32
29
|
end
|
33
30
|
end
|
@@ -8,6 +8,10 @@ module CurationConcerns
|
|
8
8
|
before_action :filter_docs_with_read_access!, except: :show
|
9
9
|
layout 'curation_concerns/1_column'
|
10
10
|
skip_load_and_authorize_resource only: :show
|
11
|
+
|
12
|
+
class_attribute :presenter_class, :form_class
|
13
|
+
self.presenter_class = CurationConcerns::CollectionPresenter
|
14
|
+
self.form_class = CurationConcerns::Forms::CollectionEditForm
|
11
15
|
end
|
12
16
|
|
13
17
|
def new
|
@@ -65,10 +69,6 @@ module CurationConcerns
|
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
68
|
-
def presenter_class
|
69
|
-
CurationConcerns::CollectionPresenter
|
70
|
-
end
|
71
|
-
|
72
72
|
def collection_search_builder_class
|
73
73
|
CurationConcerns::WorkSearchBuilder
|
74
74
|
end
|
@@ -97,10 +97,6 @@ module CurationConcerns
|
|
97
97
|
@form ||= form_class.new(@collection)
|
98
98
|
end
|
99
99
|
|
100
|
-
def form_class
|
101
|
-
CurationConcerns::Forms::CollectionEditForm
|
102
|
-
end
|
103
|
-
|
104
100
|
# Include 'catalog' and 'curation_concerns/base' in the search path for views
|
105
101
|
def _prefixes
|
106
102
|
@_prefixes ||= super + ['catalog', 'curation_concerns/base']
|
@@ -9,17 +9,27 @@ module CurationConcerns::CurationConcernController
|
|
9
9
|
with_themed_layout '1_column'
|
10
10
|
helper CurationConcerns::AbilityHelper
|
11
11
|
|
12
|
-
class_attribute :
|
12
|
+
class_attribute :_curation_concern_type, :show_presenter
|
13
|
+
self.show_presenter = CurationConcerns::WorkShowPresenter
|
13
14
|
attr_accessor :curation_concern
|
14
15
|
helper_method :curation_concern
|
15
16
|
end
|
16
17
|
|
17
18
|
module ClassMethods
|
18
19
|
def set_curation_concern_type(curation_concern_type)
|
19
|
-
|
20
|
+
Deprecation.warn self, "set_curation_concern_type is deprecated and will be removed in curation_concerns 1.0. Use self.curation_concern_type = #{curation_concern_type} instead."
|
20
21
|
self.curation_concern_type = curation_concern_type
|
21
22
|
end
|
22
23
|
|
24
|
+
def curation_concern_type=(curation_concern_type)
|
25
|
+
load_and_authorize_resource class: curation_concern_type, instance_name: :curation_concern, except: [:show, :file_manager]
|
26
|
+
self._curation_concern_type = curation_concern_type
|
27
|
+
end
|
28
|
+
|
29
|
+
def curation_concern_type
|
30
|
+
_curation_concern_type
|
31
|
+
end
|
32
|
+
|
23
33
|
def cancan_resource_class
|
24
34
|
CurationConcerns::ControllerResource
|
25
35
|
end
|
@@ -54,7 +64,7 @@ module CurationConcerns::CurationConcernController
|
|
54
64
|
# load and authorize @curation_concern manually because it's skipped for html
|
55
65
|
# This has to use #find instead of #load_instance_from_solr because
|
56
66
|
# we want to return values like file_set_ids in the json
|
57
|
-
@curation_concern =
|
67
|
+
@curation_concern = _curation_concern_type.find(params[:id]) unless curation_concern
|
58
68
|
authorize! :show, @curation_concern
|
59
69
|
render :show, status: :ok
|
60
70
|
end
|
@@ -94,16 +104,10 @@ module CurationConcerns::CurationConcernController
|
|
94
104
|
|
95
105
|
protected
|
96
106
|
|
97
|
-
# Gives the class of the show presenter. Override this if you want
|
98
|
-
# to use a different presenter.
|
99
|
-
def show_presenter
|
100
|
-
CurationConcerns::WorkShowPresenter
|
101
|
-
end
|
102
|
-
|
103
107
|
# Gives the class of the form. Override this if you want
|
104
108
|
# to use a different form.
|
105
109
|
def form_class
|
106
|
-
CurationConcerns.const_get("#{
|
110
|
+
CurationConcerns.const_get("#{_curation_concern_type.to_s.demodulize}Form")
|
107
111
|
end
|
108
112
|
|
109
113
|
def build_form
|
@@ -154,7 +158,7 @@ module CurationConcerns::CurationConcernController
|
|
154
158
|
end
|
155
159
|
|
156
160
|
def hash_key_for_curation_concern
|
157
|
-
|
161
|
+
_curation_concern_type.model_name.param_key
|
158
162
|
end
|
159
163
|
|
160
164
|
# Override this method to add additional response
|
@@ -11,6 +11,10 @@ module CurationConcerns
|
|
11
11
|
helper_method :curation_concern
|
12
12
|
include CurationConcerns::ParentContainer
|
13
13
|
copy_blacklight_config_from(::CatalogController)
|
14
|
+
|
15
|
+
class_attribute :show_presenter, :form_class
|
16
|
+
self.show_presenter = CurationConcerns::FileSetPresenter
|
17
|
+
self.form_class = CurationConcerns::Forms::FileSetEditForm
|
14
18
|
end
|
15
19
|
|
16
20
|
def curation_concern
|
@@ -65,18 +69,6 @@ module CurationConcerns
|
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
68
|
-
# Gives the class of the show presenter. Override this if you want
|
69
|
-
# to use a different presenter.
|
70
|
-
def show_presenter
|
71
|
-
CurationConcerns::FileSetPresenter
|
72
|
-
end
|
73
|
-
|
74
|
-
# Gives the class of the form. Override this if you want
|
75
|
-
# to use a different form.
|
76
|
-
def form_class
|
77
|
-
CurationConcerns::Forms::FileSetEditForm
|
78
|
-
end
|
79
|
-
|
80
72
|
def destroy
|
81
73
|
parent = @file_set.in_works.first
|
82
74
|
actor.destroy
|
@@ -211,7 +203,7 @@ module CurationConcerns
|
|
211
203
|
else
|
212
204
|
msg = @file_set.errors.full_messages.join(', ')
|
213
205
|
flash[:error] = msg
|
214
|
-
json_error "Error creating generic file: #{msg}"
|
206
|
+
json_error "Error creating generic file #{file.original_filename}: #{msg}"
|
215
207
|
end
|
216
208
|
end
|
217
209
|
|
@@ -1,18 +1,18 @@
|
|
1
1
|
class CurationConcerns::PermissionsController < ApplicationController
|
2
2
|
include CurationConcerns::CurationConcernController
|
3
3
|
with_themed_layout '1_column'
|
4
|
-
self.curation_concern_type = ActiveFedora::Base
|
5
4
|
|
6
5
|
def confirm
|
7
6
|
end
|
8
7
|
|
9
8
|
def copy
|
10
|
-
|
9
|
+
authorize! :edit, curation_concern
|
10
|
+
VisibilityCopyJob.perform_later(curation_concern)
|
11
11
|
flash_message = 'Updating file permissions. This may take a few minutes. You may want to refresh your browser or return to this record later to see the updated file permissions.'
|
12
12
|
redirect_to [main_app, curation_concern], notice: flash_message
|
13
13
|
end
|
14
14
|
|
15
15
|
def curation_concern
|
16
|
-
@curation_concern ||=
|
16
|
+
@curation_concern ||= ActiveFedora::Base.find(params[:id])
|
17
17
|
end
|
18
18
|
end
|
@@ -16,6 +16,8 @@ module CurationConcerns
|
|
16
16
|
:visibility_during_lease, :lease_expiration_date, :visibility_after_lease,
|
17
17
|
:visibility, :ordered_member_ids]
|
18
18
|
|
19
|
+
self.required_fields = [:title]
|
20
|
+
|
19
21
|
# @param [ActiveFedora::Base,#member_ids] model
|
20
22
|
# @param [Ability] current_ability
|
21
23
|
def initialize(model, current_ability)
|
@@ -47,10 +47,27 @@ module CurationConcerns::CollectionsHelper
|
|
47
47
|
# If you have implement User.collections, the results of that will be used.
|
48
48
|
def current_users_collections
|
49
49
|
if current_user.respond_to?(:collections)
|
50
|
-
current_user.collections.map { |c| [c.title.join(', '), c.id] }
|
51
|
-
else
|
52
|
-
query = ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: Collection.to_class_uri)
|
53
|
-
ActiveFedora::SolrService.query(query, fl: 'title_tesim id', rows: 1000).map { |r| [r['title_tesim'].join(', '), r['id']] }.sort { |a, b| a.first <=> b.first }
|
50
|
+
return current_user.collections.map { |c| [c.title.join(', '), c.id] }
|
54
51
|
end
|
52
|
+
query = ActiveFedora::SolrQueryBuilder
|
53
|
+
.construct_query_for_rel(
|
54
|
+
has_model: Collection.to_class_uri)
|
55
|
+
convert_solr_docs_to_select_options(
|
56
|
+
ActiveFedora::SolrService.query(query,
|
57
|
+
fl: 'title_tesim id',
|
58
|
+
rows: 1000)
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
def convert_solr_docs_to_select_options(results)
|
63
|
+
results
|
64
|
+
.map { |r| [SolrDocument.new(r).title, r['id']] }
|
65
|
+
.sort do |a, b|
|
66
|
+
if a.first && b.first
|
67
|
+
a.first <=> b.first
|
68
|
+
else
|
69
|
+
a.first ? -1 : 1
|
70
|
+
end
|
71
|
+
end
|
55
72
|
end
|
56
73
|
end
|
@@ -1,9 +1,7 @@
|
|
1
|
-
class VisibilityCopyJob <
|
1
|
+
class VisibilityCopyJob < ActiveJob::Base
|
2
2
|
queue_as :permissions
|
3
3
|
|
4
|
-
def perform(
|
5
|
-
@id = id
|
6
|
-
work = object
|
4
|
+
def perform(work)
|
7
5
|
work.file_sets.each do |file|
|
8
6
|
file.visibility = work.visibility # visibility must come first, because it can clear an embargo/lease
|
9
7
|
if work.lease
|
@@ -21,7 +21,7 @@ module CurationConcerns
|
|
21
21
|
:embargo_release_date, :lease_expiration_date, :rights, :date_created, to: :solr_document
|
22
22
|
|
23
23
|
def size
|
24
|
-
number_to_human_size(@solr_document['
|
24
|
+
number_to_human_size(@solr_document['bytes_lts'])
|
25
25
|
end
|
26
26
|
|
27
27
|
def total_items
|
@@ -24,20 +24,43 @@ module CurationConcerns
|
|
24
24
|
:creator, :contributor, :subject, :publisher, :language, :embargo_release_date,
|
25
25
|
:lease_expiration_date, :rights, to: :solr_document
|
26
26
|
|
27
|
+
# @return [Array<FileSetPresenter>] presenters for the orderd_members that are FileSets
|
28
|
+
def file_set_presenters
|
29
|
+
@file_set_presenters ||= member_presenters(ordered_ids & file_set_ids)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @deprecated
|
33
|
+
# @return [Array<FileSetPresenter>] presenters for the orderd_members that are FileSets
|
27
34
|
def file_presenters
|
28
|
-
|
29
|
-
|
30
|
-
|
35
|
+
Deprecation.warn WorkShowPresenter, "file_presenters is deprecated and will be removed in CurationConcerns 1.0. Use file_set_presenters or member_presenters instead."
|
36
|
+
member_presenters
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [Array<FileSetPresenter>] presenters for the ordered_members (not filtered by class)
|
40
|
+
def member_presenters(ids = ordered_ids)
|
41
|
+
PresenterFactory.build_presenters(ids,
|
42
|
+
file_presenter_class,
|
43
|
+
current_ability)
|
31
44
|
end
|
32
45
|
|
33
46
|
private
|
34
47
|
|
35
48
|
# TODO: Extract this to ActiveFedora::Aggregations::ListSource
|
36
49
|
def ordered_ids
|
37
|
-
ActiveFedora::SolrService.query("proxy_in_ssi:#{id}",
|
50
|
+
ActiveFedora::SolrService.query("proxy_in_ssi:#{id}",
|
51
|
+
fl: "ordered_targets_ssim")
|
38
52
|
.flat_map { |x| x.fetch("ordered_targets_ssim", []) }
|
39
53
|
end
|
40
54
|
|
55
|
+
# These are the file sets that belong to this work, but not necessarily
|
56
|
+
# in order.
|
57
|
+
def file_set_ids
|
58
|
+
ActiveFedora::SolrService.query("{!field f=has_model_ssim}FileSet",
|
59
|
+
fl: "id",
|
60
|
+
fq: "{!join from=ordered_targets_ssim to=id}id:\"#{id}/list_source\"")
|
61
|
+
.flat_map { |x| x.fetch("id", []) }
|
62
|
+
end
|
63
|
+
|
41
64
|
# Override this method if you want to use an alternate presenter class for the files
|
42
65
|
def file_presenter_class
|
43
66
|
FileSetPresenter
|
@@ -14,9 +14,16 @@ module CurationConcerns
|
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
|
+
# Override this method if you want to limit some of the registered
|
18
|
+
# types from appearing in search results
|
19
|
+
# @returns [Array<Class>] the list of work types to include in searches
|
20
|
+
def work_types
|
21
|
+
CurationConcerns.config.curation_concerns
|
22
|
+
end
|
23
|
+
|
17
24
|
def work_clauses
|
18
25
|
return [] if blacklight_params.key?(:f) && Array(blacklight_params[:f][:generic_type_sim]).include?('Collection')
|
19
|
-
|
26
|
+
work_types.map do |klass|
|
20
27
|
ActiveFedora::SolrQueryBuilder.construct_query_for_rel(has_model: klass.to_class_uri)
|
21
28
|
end
|
22
29
|
end
|
@@ -1,17 +1,10 @@
|
|
1
|
-
class CurationConcerns::SearchBuilder <
|
2
|
-
include
|
3
|
-
include
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
return [] if ability.current_user.groups.include? 'admin'
|
9
|
-
super
|
10
|
-
end
|
11
|
-
|
12
|
-
# show only files with edit permissions in lib/hydra/access_controls_enforcement.rb apply_gated_discovery
|
13
|
-
def discovery_permissions
|
14
|
-
return ['edit'] if blacklight_params[:works] == 'mine'
|
1
|
+
class CurationConcerns::SearchBuilder < Blacklight::SearchBuilder
|
2
|
+
include Blacklight::Solr::SearchBuilderBehavior
|
3
|
+
include Hydra::AccessControlsEnforcement
|
4
|
+
include CurationConcerns::SearchFilters
|
5
|
+
extend Deprecation
|
6
|
+
def initialize(*)
|
7
|
+
Deprecation.warn CurationConcerns::SearchBuilder, "CurationConcerns::SearchBuilder is deprecated and will be removed in CurationConcerns 1.0. Add CurationConcerns::SearchFilters to your own SearchBuilder instead"
|
15
8
|
super
|
16
9
|
end
|
17
10
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module CurationConcerns::SearchFilters
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
include BlacklightAdvancedSearch::AdvancedSearchBuilder
|
4
|
+
include CurationConcerns::FilterByType
|
5
|
+
|
6
|
+
# Override Hydra::AccessControlsEnforcement (or Hydra::PolicyAwareAccessControlsEnforcement)
|
7
|
+
# Allows admin users to see everything (don't apply any gated_discovery_filters for those users)
|
8
|
+
def gated_discovery_filters(permission_types = discovery_permissions, ability = current_ability)
|
9
|
+
return [] if ability.current_user.groups.include? 'admin'
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
# show only files with edit permissions in lib/hydra/access_controls_enforcement.rb apply_gated_discovery
|
14
|
+
def discovery_permissions
|
15
|
+
return ['edit'] if blacklight_params[:works] == 'mine'
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
File without changes
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<tr class="<%= dom_class(member) %> attributes">
|
2
|
+
<td class="thumbnail">
|
3
|
+
<%= render_thumbnail_tag member %>
|
4
|
+
</td>
|
5
|
+
<td class="attribute filename"><%= link_to(member.link_name, main_app.curation_concerns_file_set_path(member)) %></td>
|
6
|
+
<td class="attribute date_uploaded"><%= member.date_uploaded %></td>
|
7
|
+
<td class="attribute permission"><%= member.permission_badge %></td>
|
8
|
+
<td>
|
9
|
+
<%= render 'curation_concerns/file_sets/actions', file_set: member %>
|
10
|
+
</td>
|
11
|
+
</tr>
|
12
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<% if presenter.
|
1
|
+
<% if presenter.file_set_presenters.present? %>
|
2
2
|
<div class="panel panel-default related_files">
|
3
3
|
<div class="panel-heading">
|
4
4
|
<h2>Files</h2>
|
@@ -14,7 +14,7 @@
|
|
14
14
|
</tr>
|
15
15
|
</thead>
|
16
16
|
<tbody>
|
17
|
-
<%= render presenter.
|
17
|
+
<%= render partial: 'member', collection: presenter.file_set_presenters %>
|
18
18
|
</tbody>
|
19
19
|
</table>
|
20
20
|
</div>
|
data/curation_concerns.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
|
-
spec.add_dependency 'hydra-head', '~> 9.
|
19
|
+
spec.add_dependency 'hydra-head', '~> 9.9'
|
20
20
|
spec.add_dependency 'blacklight', '~> 6.0'
|
21
21
|
spec.add_dependency "breadcrumbs_on_rails", "~> 2.3"
|
22
22
|
spec.add_dependency "jquery-ui-rails"
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency 'blacklight_advanced_search', '~> 6.0'
|
27
27
|
spec.add_dependency 'rails_autolink'
|
28
28
|
spec.add_dependency 'sprockets-es6'
|
29
|
+
spec.add_dependency 'kaminari_route_prefix', '~> 0.0.1'
|
29
30
|
|
30
31
|
spec.add_development_dependency 'solr_wrapper', '~> 0.4'
|
31
32
|
spec.add_development_dependency 'fcrepo_wrapper', '~> 0.1'
|