sufia 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Gemfile +1 -1
- data/History.md +77 -0
- data/README.md +26 -11
- data/SUFIA_VERSION +1 -1
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +4 -3
- data/app/helpers/sufia_helper.rb +7 -5
- data/app/jobs/ingest_local_file_job.rb +34 -0
- data/app/views/catalog/_facet_selected.html.erb +1 -1
- data/app/views/generic_files/_local_file_import.html.erb +3 -0
- data/app/views/generic_files/new.html.erb +10 -0
- data/app/views/generic_files/upload/_alerts.html.erb +2 -2
- data/app/views/generic_files/upload/_local_file_import_chooser.html.erb +27 -0
- data/app/views/generic_files/upload/_script_templates.html.erb +1 -1
- data/lib/generators/sufia/sufia_generator.rb +1 -0
- data/lib/generators/sufia/templates/config/resque_config.rb +3 -20
- data/lib/sufia/files_controller/local_ingest_behavior.rb +54 -0
- data/lib/sufia/files_controller/upload_complete_behavior.rb +7 -0
- data/lib/sufia/files_controller_behavior.rb +31 -11
- data/lib/sufia/version.rb +1 -1
- data/spec/active_fedora/unsaved_digital_object_spec.rb +1 -1
- data/spec/controllers/authorities_controller_spec.rb +1 -1
- data/spec/controllers/batch_controller_spec.rb +4 -4
- data/spec/controllers/batch_edits_controller_spec.rb +1 -1
- data/spec/controllers/catalog_controller_spec.rb +1 -1
- data/spec/controllers/dashboard_controller_spec.rb +2 -2
- data/spec/controllers/downloads_controller_spec.rb +2 -3
- data/spec/controllers/generic_files_controller_spec.rb +113 -31
- data/spec/controllers/mailbox_controller_spec.rb +1 -1
- data/spec/controllers/single_use_link_controller_spec.rb +4 -5
- data/spec/controllers/users_controller_spec.rb +3 -3
- data/spec/features/browse_dashboard_files.rb +1 -1
- data/spec/features/browse_files.rb +1 -1
- data/spec/features/contact_form.rb +1 -1
- data/spec/features/display_dashboard.rb +1 -1
- data/spec/features/ingest_upload_files.rb +1 -1
- data/spec/features/users_spec.rb +1 -1
- data/spec/helpers/generic_file_helper_spec.rb +1 -1
- data/spec/helpers/render_constraints_helper_behavior_spec.rb +42 -0
- data/spec/helpers/sufia_helper_spec.rb +40 -1
- data/spec/jobs/import_url_job_spec.rb +45 -0
- data/spec/jobs/ingest_local_file_job_spec.rb +35 -0
- data/spec/lib/sufia/id_service_spec.rb +1 -1
- data/spec/lib/sufia/upload_complete_behavior_spec.rb +26 -0
- data/spec/models/audit_job_spec.rb +2 -2
- data/spec/models/batch_spec.rb +1 -1
- data/spec/models/batch_update_job_spec.rb +2 -4
- data/spec/models/characterize_job_spec.rb +17 -14
- data/spec/models/checksum_audit_log_spec.rb +2 -2
- data/spec/models/event_jobs_spec.rb +2 -2
- data/spec/models/file_content_datastream_spec.rb +5 -5
- data/spec/models/fits_datastream_spec.rb +2 -2
- data/spec/models/generic_file/actions_spec.rb +25 -0
- data/spec/models/generic_file/web_form_spec.rb +1 -1
- data/spec/models/generic_file_spec.rb +16 -33
- data/spec/models/local_authority_spec.rb +1 -1
- data/spec/models/properties_datastream_spec.rb +1 -1
- data/spec/models/single_use_link_spec.rb +1 -1
- data/spec/models/solr_document_spec.rb +1 -1
- data/spec/models/transcode_audio_job_spec.rb +22 -18
- data/spec/models/transcode_video_job_spec.rb +4 -3
- data/spec/models/trophy_spec.rb +1 -1
- data/spec/models/unzip_job_spec.rb +2 -2
- data/spec/models/user_spec.rb +1 -1
- data/spec/rake/sufia_fixtures_spec.rb +1 -1
- data/spec/routing/route_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -2
- data/spec/views/batch_edits/check_all_spec.rb +1 -1
- data/sufia-models/app/models/datastreams/file_content_datastream.rb +1 -15
- data/sufia-models/app/models/geo_names_resource.rb +0 -2
- data/sufia-models/lib/sufia/models.rb +1 -1
- data/sufia-models/lib/sufia/models/engine.rb +12 -1
- data/sufia-models/lib/sufia/models/file_content.rb +0 -3
- data/sufia-models/lib/sufia/models/generic_file.rb +6 -10
- data/sufia-models/lib/sufia/models/generic_file/actions.rb +1 -1
- data/sufia-models/lib/sufia/models/generic_file/characterization.rb +1 -1
- data/sufia-models/lib/sufia/models/generic_file/derivatives.rb +31 -0
- data/sufia-models/lib/sufia/models/generic_file/mime_types.rb +27 -0
- data/sufia-models/lib/sufia/models/generic_file/thumbnail.rb +6 -60
- data/sufia-models/lib/sufia/models/jobs/active_fedora_pid_based_job.rb +19 -0
- data/sufia-models/lib/sufia/models/jobs/audit_job.rb +12 -8
- data/sufia-models/lib/sufia/models/jobs/characterize_job.rb +3 -10
- data/sufia-models/lib/sufia/models/jobs/import_url_job.rb +2 -9
- data/sufia-models/lib/sufia/models/jobs/resolrize_job.rb +8 -1
- data/sufia-models/lib/sufia/models/jobs/transcode_audio_job.rb +4 -28
- data/sufia-models/lib/sufia/models/jobs/transcode_video_job.rb +4 -28
- data/sufia-models/lib/sufia/models/jobs/unzip_job.rb +5 -19
- data/sufia-models/lib/sufia/models/model_methods.rb +2 -16
- data/sufia-models/lib/sufia/models/user_local_directory_behavior.rb +29 -0
- data/sufia-models/lib/sufia/models/version.rb +1 -1
- data/sufia-models/sufia-models.gemspec +1 -1
- data/sufia.gemspec +2 -1
- data/tasks/sufia-dev.rake +1 -1
- metadata +26 -10
- data/app/assets/stylesheets/jquery-ui-1.8.1.custom.css +0 -486
- data/app/assets/stylesheets/jquery-ui-1.8.23.custom.css +0 -340
- data/sufia-models/lib/sufia/models/file_content/extract_metadata.rb +0 -60
- data/sufia-models/lib/sufia/models/jobs/ffmpeg_transcode_job.rb +0 -61
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94bdabbd0da949b6909f8a09f6c6db08910fa0d8
|
4
|
+
data.tar.gz: 363c5ec11e4dc93850a79dbf7cdd8a9a9a231870
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38714b26c3d16dfcb2ff8da8e03515ecff0bbd9171fb75c568f828aa327e64bbb7b2d0ffea855fbf9286ed64a77098f5e4c114682a6c2b470353ca4b35893006
|
7
|
+
data.tar.gz: 2c48c93673ec0fc8d540f801a945cf0ac10f0cbc487406ad3ddb91afad2e2a8e2d4e9567627135060cc32fadcb1618d3e06c0f583a15f61c1616322d5f2f9631
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/History.md
CHANGED
@@ -1,5 +1,82 @@
|
|
1
1
|
# History of Sufia releases
|
2
2
|
|
3
|
+
## 3.1.0
|
4
|
+
* Make fits instructions more verbose [Carolyn Cole]
|
5
|
+
|
6
|
+
* Adding one location to define/ override where the upload redirects to after a
|
7
|
+
sucessfull upload [Carolyn Cole]
|
8
|
+
|
9
|
+
* Added license to the gemspec [Justin Coyne]
|
10
|
+
|
11
|
+
* fixed typo in require statement [Matt Zumwalt]
|
12
|
+
|
13
|
+
* requires active_resource more cleanly [Matt Zumwalt]
|
14
|
+
|
15
|
+
* updating facet views so that the blacklight helper_method will get called
|
16
|
+
[Carolyn Cole]
|
17
|
+
|
18
|
+
* Adds a spec for the ImportUrlJob [Michael J. Giarlo]
|
19
|
+
|
20
|
+
* Fixed expecations for travis tests for #169 [Justin Coyne]
|
21
|
+
|
22
|
+
* ModelMethods#apply_depositor_metadata should accept a user or a string like the
|
23
|
+
method it overrides in HydraHead. See:
|
24
|
+
https://github.com/projecthydra/hydra-head/blob/9a5b2728be2046125d09376a6d78ad06d26548c3/hydra-core/lib/hydra/model_methods.rb#L12
|
25
|
+
[Justin Coyne]
|
26
|
+
|
27
|
+
* Remove expand_path jazz from remaining specs [Michael J. Giarlo]
|
28
|
+
|
29
|
+
* Codifying a pid based job [Jeremy Friesen]
|
30
|
+
|
31
|
+
* Removing characterization save unless new_object? [Jeremy Friesen]
|
32
|
+
|
33
|
+
* Adding $LOAD_PATH variable to dev rake task [Jeremy Friesen]
|
34
|
+
|
35
|
+
* Bump dependency on hydra-derivatives [Justin Coyne]
|
36
|
+
|
37
|
+
* Use add_file() rather than add_file_datastream() to ensure object label is set
|
38
|
+
[Michael J. Giarlo]
|
39
|
+
|
40
|
+
* Audio and video transcoding with hydra-derivatives [Justin Coyne]
|
41
|
+
|
42
|
+
* Use hydra-derivatives for generating thumbnails [Justin Coyne]
|
43
|
+
|
44
|
+
* ingest_local_file should ingest the file, not the filename [Justin Coyne]
|
45
|
+
|
46
|
+
* Including deposit agreement on local import page [Matt Zumwalt]
|
47
|
+
|
48
|
+
* UI for local ingest only appears in local ingest tab on upload page [Matt
|
49
|
+
Zumwalt]
|
50
|
+
|
51
|
+
* Putting test coverage for virus check into the right place [Matt Zumwalt]
|
52
|
+
|
53
|
+
* local file ingest runs virus check [Matt Zumwalt]
|
54
|
+
|
55
|
+
* testing outputs without relying on consistent array ordering [Matt Zumwalt]
|
56
|
+
|
57
|
+
* UI text changes for local ingest [Matt Zumwalt]
|
58
|
+
|
59
|
+
* removing unused fixtures [Matt Zumwalt]
|
60
|
+
|
61
|
+
* cleanup of tests and method names around local ingest [Matt Zumwalt]
|
62
|
+
|
63
|
+
* Display local ingest tab in Upload page when local import enabled [Matt
|
64
|
+
Zumwalt]
|
65
|
+
|
66
|
+
* Local ingest renders graceful error message if User does not define a directory
|
67
|
+
path [Matt Zumwalt]
|
68
|
+
|
69
|
+
* fixing scope of describe blocks in this test [Matt Zumwalt]
|
70
|
+
|
71
|
+
* LocalFileIngestBehavior for FilesController [Matt Zumwalt]
|
72
|
+
|
73
|
+
* The generator should create config/initializers/resque_config.rb [Justin Coyne]
|
74
|
+
|
75
|
+
* Reindex everything scopes to sufia's namespace [Jeremy Friesen]
|
76
|
+
|
77
|
+
* Remove css that doesn't appear to be used [Justin Coyne]
|
78
|
+
|
79
|
+
|
3
80
|
## 3.0.0
|
4
81
|
* Update README.md paths for Sufia assets application.css and application.js [Jim
|
5
82
|
Coble]
|
data/README.md
CHANGED
@@ -25,14 +25,13 @@ Sufia has the following features:
|
|
25
25
|
* Background jobs
|
26
26
|
* Single-use links
|
27
27
|
|
28
|
-
Sufia needs the following software to work:
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
28
|
+
## Sufia needs the following software to work:
|
29
|
+
1. Solr
|
30
|
+
1. Fedora Commons
|
31
|
+
1. A SQL RDBMS (MySQL, SQLite)
|
32
|
+
1. [Redis](http://redis.io/) key-value store
|
33
|
+
1. Ruby
|
34
|
+
## !! Ensure that you have all of the above components installed before you continue. !!
|
36
35
|
|
37
36
|
## Creating an application
|
38
37
|
### Generate base Rails install
|
@@ -92,13 +91,29 @@ Add this line:
|
|
92
91
|
```
|
93
92
|
|
94
93
|
### Install Fits.sh
|
95
|
-
http://code.google.com/p/fits/downloads/list
|
96
|
-
|
94
|
+
1. Go to http://code.google.com/p/fits/downloads/list and download a copy of fits & unpack it somewhere on your Machine.
|
95
|
+
1. Give your system access to fits
|
96
|
+
1. By adding the path to fits.sh to your excutable PATH. (ex. in your .bashrc)
|
97
|
+
* OR
|
98
|
+
1. By adding/changing config/initializers/sufia.rb to point to your fits location: `config.fits_path = "/<your full path>/fits.sh"`
|
99
|
+
1. You may additionally need to chmod the fits.sh (chmod a+x fits.sh)
|
100
|
+
1. You may need to restart your shell to pick up the changes to you path
|
101
|
+
1. You should be able to run "fits.sh" from the command line and see a help message
|
97
102
|
|
98
103
|
### Start background workers
|
104
|
+
**Note:** Resque relies on the [redis](http://redis.io/) key-value store. You must install [redis](http://redis.io/) on your system and *have redis running* in order for this command to work.
|
105
|
+
To start redis, you usually want to call the `redis-server` command.
|
106
|
+
|
107
|
+
```
|
108
|
+
QUEUE=* rake environment resque:work
|
99
109
|
```
|
100
|
-
|
110
|
+
|
111
|
+
For production you may want to set up a config/resque-pool.yml and run resque pool in daemon mode
|
112
|
+
|
101
113
|
```
|
114
|
+
resque-pool --daemon --environment development start
|
115
|
+
```
|
116
|
+
|
102
117
|
See https://github.com/defunkt/resque for more options
|
103
118
|
|
104
119
|
### If you want to enable transcoding of video, instal ffmpeg version 1.0+
|
data/SUFIA_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.1.0
|
@@ -56,16 +56,17 @@ module Blacklight::RenderConstraintsHelperBehavior
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def render_filter_element(facet, values, localized_params)
|
59
|
+
facet_configuration_for_field(facet)
|
59
60
|
values.map do |val|
|
60
|
-
if params[:controller] == 'dashboard'
|
61
|
+
if params[:controller] == 'dashboard'
|
61
62
|
render_constraint_element( facet_field_labels[facet],
|
62
|
-
|
63
|
+
facet_display_value(facet, val),
|
63
64
|
:remove => dashboard_index_path(remove_facet_params(facet, val, localized_params)),
|
64
65
|
:classes => ["filter", "filter-" + facet.parameterize]
|
65
66
|
) + "\n"
|
66
67
|
else
|
67
68
|
render_constraint_element( facet_field_labels[facet],
|
68
|
-
|
69
|
+
facet_display_value(facet, val),
|
69
70
|
:remove => catalog_index_path(remove_facet_params(facet, val, localized_params)),
|
70
71
|
:classes => ["filter", "filter-" + facet.parameterize]
|
71
72
|
) + "\n"
|
data/app/helpers/sufia_helper.rb
CHANGED
@@ -92,17 +92,19 @@ module SufiaHelper
|
|
92
92
|
|
93
93
|
# Override to remove the label class (easier integration with bootstrap)
|
94
94
|
# and handles arrays
|
95
|
-
def render_facet_value(facet_solr_field, item, options ={})
|
95
|
+
def render_facet_value(facet_solr_field, item, options ={})
|
96
|
+
logger.warn "display value #{ facet_display_value(facet_solr_field, item)}"
|
96
97
|
if item.is_a? Array
|
97
98
|
render_array_facet_value(facet_solr_field, item, options)
|
98
99
|
end
|
99
100
|
if params[:controller] == "dashboard"
|
100
|
-
path = sufia.url_for(add_facet_params_and_redirect(facet_solr_field,
|
101
|
-
|
102
|
-
|
101
|
+
path = sufia.url_for(add_facet_params_and_redirect(facet_solr_field,item.value ).merge(:only_path=>true))
|
102
|
+
path = sufia.url_for(add_facet_params_and_redirect(facet_solr_field,item.value ).merge(:only_path=>true))
|
103
|
+
(link_to_unless(options[:suppress_link], facet_display_value(facet_solr_field, item), path, :class=>"facet_select") + " " + render_facet_count(item.hits)).html_safe
|
104
|
+
else
|
103
105
|
# This is for controllers that use this helper method that are defined outside Sufia
|
104
106
|
path = url_for(add_facet_params_and_redirect(facet_solr_field, item.value).merge(:only_path=>true))
|
105
|
-
|
107
|
+
(link_to_unless(options[:suppress_link], facet_display_value(facet_solr_field, item), path, :class=>"facet_select") + " " + render_facet_count(item.hits)).html_safe
|
106
108
|
end
|
107
109
|
end
|
108
110
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class IngestLocalFileJob
|
2
|
+
def queue_name
|
3
|
+
:ingest
|
4
|
+
end
|
5
|
+
|
6
|
+
attr_accessor :directory, :filename, :user_key, :generic_file_id
|
7
|
+
|
8
|
+
def initialize(generic_file_id, directory, filename, user_key)
|
9
|
+
self.generic_file_id = generic_file_id
|
10
|
+
self.directory = directory
|
11
|
+
self.filename = filename
|
12
|
+
self.user_key = user_key
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
filedata = File.new( File.join(directory, filename) )
|
17
|
+
generic_file = GenericFile.find(generic_file_id)
|
18
|
+
user = User.find_by_user_key(user_key)
|
19
|
+
raise "Unable to find user for #{user_key}" unless user
|
20
|
+
|
21
|
+
# virus check
|
22
|
+
virus_stat = Sufia::GenericFile::Actions.virus_check(filedata)
|
23
|
+
raise "Virus checking did not pass for #{File.basename(filedata.path)} status = #{virus_stat}" unless virus_stat == 0
|
24
|
+
|
25
|
+
generic_file.label = File.basename(filename)
|
26
|
+
generic_file.add_file(File.open(File.join(directory, filename)), 'content', generic_file.label)
|
27
|
+
generic_file.record_version_committer(user)
|
28
|
+
generic_file.save!
|
29
|
+
|
30
|
+
#Sufia.queue.push(UnzipJob.new(generic_file.pid)) if generic_file.content.mimeType == 'application/zip'
|
31
|
+
Sufia.queue.push(ContentDepositEventJob.new(generic_file.pid, user_key))
|
32
|
+
FileUtils.rm([File.join(directory, filename)])
|
33
|
+
end
|
34
|
+
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<% link_options = remove_facet_params(k, selected_facet, params).merge!Hash["controller" => "catalog", :action=> "index"] %>
|
6
6
|
<div class="alert alert-warning">
|
7
7
|
<%= link_to 'X', url_for(link_options), {:class=>'close', :'data-dismiss' => "alert" } %>
|
8
|
-
<i class="icon-ok icon-large"></i> <strong><%= selected_facet %></strong>
|
8
|
+
<i class="icon-ok icon-large"></i> <strong><%= facet_display_value(k, selected_facet) %></strong>
|
9
9
|
</div>
|
10
10
|
<% end %>
|
11
11
|
<% end %>
|
@@ -21,6 +21,9 @@ limitations under the License.
|
|
21
21
|
<% if Sufia.config.dropbox_api_key %>
|
22
22
|
<li><a href="#dropbox" data-toggle="tab"><i class="icon-inbox"></i> Dropbox</a></li>
|
23
23
|
<% end %>
|
24
|
+
<% if Sufia.config.enable_local_ingest %>
|
25
|
+
<li><a href="#ingest" data-toggle="tab"><i class="icon-hdd"></i> Network/Server Location</a></li>
|
26
|
+
<% end %>
|
24
27
|
</ul>
|
25
28
|
|
26
29
|
<div class="tab-content">
|
@@ -33,4 +36,11 @@ limitations under the License.
|
|
33
36
|
<%= render partial: 'dropbox_import' %>
|
34
37
|
</div>
|
35
38
|
<% end %>
|
39
|
+
|
40
|
+
<% if Sufia.config.enable_local_ingest %>
|
41
|
+
<div class="tab-pane" id="ingest">
|
42
|
+
<%= render partial: 'generic_files/local_file_import' %>
|
43
|
+
</div>
|
44
|
+
<% end %>
|
45
|
+
|
36
46
|
</div>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<div class="alert alert-info hide" id="success">
|
3
3
|
You have successfully uploaded some of your files. Either continue to upload or edit use the links below to abandon the rest of your added files.
|
4
4
|
<p>
|
5
|
-
<%= link_to 'Add Descriptions',
|
5
|
+
<%= link_to 'Add Descriptions', GenericFilesController.upload_complete_path(@batch_noid), :class=>'btn' %>
|
6
6
|
</p>
|
7
7
|
</div>
|
8
8
|
|
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
<div class="alert hide" id="partial_fail">
|
14
14
|
One or more files did not upload successfully. To continue using the files uploaded use one of the links below.<br />
|
15
|
-
<%= link_to 'Add Descriptions',
|
15
|
+
<%= link_to 'Add Descriptions', GenericFilesController.upload_complete_path(@batch_noid), :class=>'btn' %>
|
16
16
|
</div>
|
17
17
|
|
18
18
|
<div class="alert hide" id="errmsg"> </div>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<% if current_user.directory.present? %>
|
2
|
+
<div class="well">
|
3
|
+
<%= render partial: 'generic_files/upload/tos_checkbox' %>
|
4
|
+
<%= form_for @generic_file, :url => sufia.generic_files_path, :html => { :class => 'form-horizontal well'} do |f| %>
|
5
|
+
<table class="table table-striped">
|
6
|
+
<caption>Select files to deposit from your user directory on the server.</caption>
|
7
|
+
<thead>
|
8
|
+
<tr><th>File</th></tr>
|
9
|
+
</thead>
|
10
|
+
<tbody>
|
11
|
+
<%current_user.files.each do |f| %>
|
12
|
+
<tr>
|
13
|
+
<td>
|
14
|
+
<label><%= check_box_tag 'local_file[]', f[:name] %> <%= f[:directory] ? '<i class="icon-folder-close"></i>'.html_safe : '<i class="icon-file"></i>'.html_safe %> <%= f[:name] %></label>
|
15
|
+
</td>
|
16
|
+
</tr>
|
17
|
+
<%end%>
|
18
|
+
</tbody>
|
19
|
+
</table>
|
20
|
+
<%= hidden_field_tag(:batch_id, @batch_noid) %>
|
21
|
+
<button type="submit" class="activate-submit btn btn-primary start" id="main_upload_start">
|
22
|
+
<i class="icon-upload icon-white"></i>
|
23
|
+
<span>Deposit Selected Files</span>
|
24
|
+
</button>
|
25
|
+
<% end %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div class="alert alert-info hide" id="redirect-loc" type="text/x-jquery-tmpl">
|
2
2
|
<%-# Script redirects here once the uploads are complete %>
|
3
|
-
<%=
|
3
|
+
<%=GenericFilesController.upload_complete_path(@batch_noid)%>
|
4
4
|
</div>
|
5
5
|
|
6
6
|
<!-- The template to display files available for upload -->
|
@@ -73,6 +73,7 @@ add_groups_to_users.rb create_local_authorities.rb create_trophies.rb}.each do
|
|
73
73
|
copy_file "config/redis.yml", "config/redis.yml"
|
74
74
|
copy_file "config/redis_config.rb", "config/initializers/redis_config.rb"
|
75
75
|
copy_file "config/resque_admin.rb", "config/initializers/resque_admin.rb"
|
76
|
+
copy_file "config/resque_config.rb", "config/initializers/resque_config.rb"
|
76
77
|
end
|
77
78
|
|
78
79
|
def catalog_controller
|
@@ -1,22 +1,5 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
rails_root = ENV['RAILS_ROOT'] || "#{File.dirname(__FILE__)}/../.."
|
16
|
-
rails_env = ENV['RAILS_ENV'] || 'development'
|
17
|
-
|
18
|
-
config = YAML::load(ERB.new(IO.read(File.join(Rails.root, 'config', 'redis.yml'))).result)['resque'].with_indifferent_access
|
1
|
+
config = YAML::load(ERB.new(IO.read(File.join(Rails.root, 'config', 'redis.yml'))).result)[Rails.env].with_indifferent_access
|
19
2
|
Resque.redis = Redis.new(host: config[:host], port: config[:port], thread_safe: true)
|
20
3
|
|
21
|
-
Resque.inline =
|
22
|
-
Resque.redis.namespace = "#{Sufia::Engine.config.id_namespace}:#{
|
4
|
+
Resque.inline = Rails.env.test?
|
5
|
+
Resque.redis.namespace = "#{Sufia::Engine.config.id_namespace}:#{Rails.env}"
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Sufia
|
2
|
+
module FilesController::LocalIngestBehavior
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def perform_local_ingest
|
7
|
+
if Sufia.config.enable_local_ingest && current_user.respond_to?(:directory)
|
8
|
+
if ingest_local_file
|
9
|
+
redirect_to GenericFilesController.upload_complete_path( params[:batch_id])
|
10
|
+
else
|
11
|
+
flash[:alert] = "Error importing files from user directory."
|
12
|
+
render :new
|
13
|
+
end
|
14
|
+
else
|
15
|
+
flash[:alert] = "Your account is not configured for importing files from a user-directory on the server."
|
16
|
+
render :new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def ingest_local_file
|
21
|
+
# Ingest files already on disk
|
22
|
+
has_directories = false
|
23
|
+
files = []
|
24
|
+
params[:local_file].each do |filename|
|
25
|
+
if File.directory?(File.join(current_user.directory, filename))
|
26
|
+
has_directories = true
|
27
|
+
Dir[File.join(current_user.directory, filename, '**', '*')].each do |single|
|
28
|
+
next if File.directory? single
|
29
|
+
logger.info("Ingesting file: #{single}")
|
30
|
+
files << single.sub(current_user.directory + '/', '')
|
31
|
+
logger.info("after removing the user directory #{current_user.directory} we have: #{files.last}")
|
32
|
+
end
|
33
|
+
else
|
34
|
+
files << filename
|
35
|
+
end
|
36
|
+
end
|
37
|
+
files.each do |filename|
|
38
|
+
ingest_one(filename, has_directories)
|
39
|
+
end
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
def ingest_one(filename, unarranged)
|
44
|
+
# do not remove ::
|
45
|
+
@generic_file = ::GenericFile.new
|
46
|
+
basename = File.basename(filename)
|
47
|
+
@generic_file.label = basename
|
48
|
+
@generic_file.relative_path = filename if filename != basename
|
49
|
+
create_metadata(@generic_file)
|
50
|
+
Sufia.queue.push(IngestLocalFileJob.new(@generic_file.id, current_user.directory, filename, current_user.user_key))
|
51
|
+
end
|
52
|
+
|
53
|
+
end # /FilesController::LocalIngestBehavior
|
54
|
+
end # /Sufia
|
@@ -14,13 +14,21 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
|
16
16
|
module Sufia
|
17
|
+
module FilesController
|
18
|
+
autoload :LocalIngestBehavior, 'sufia/files_controller/local_ingest_behavior'
|
19
|
+
autoload :UploadCompleteBehavior, 'sufia/files_controller/upload_complete_behavior'
|
20
|
+
end
|
17
21
|
module FilesControllerBehavior
|
18
22
|
extend ActiveSupport::Concern
|
23
|
+
extend Sufia::FilesController::UploadCompleteBehavior
|
19
24
|
|
20
25
|
included do
|
21
26
|
include Hydra::Controller::ControllerBehavior
|
22
27
|
include Blacklight::Configurable # comply with BL 3.7
|
23
|
-
include Sufia::Noid # for normalize_identifier method
|
28
|
+
include Sufia::Noid # for normalize_identifier method
|
29
|
+
include Sufia::FilesController::LocalIngestBehavior
|
30
|
+
extend Sufia::FilesController::UploadCompleteBehavior
|
31
|
+
|
24
32
|
layout "sufia-one-column"
|
25
33
|
|
26
34
|
# This is needed as of BL 3.7
|
@@ -44,6 +52,7 @@ module Sufia
|
|
44
52
|
prepend_before_filter :normalize_identifier, :except => [:index, :create, :new]
|
45
53
|
load_resource :only=>[:audit]
|
46
54
|
load_and_authorize_resource :except=>[:index, :audit]
|
55
|
+
|
47
56
|
end
|
48
57
|
|
49
58
|
# routed to /files/new
|
@@ -68,14 +77,20 @@ module Sufia
|
|
68
77
|
|
69
78
|
# routed to /files (POST)
|
70
79
|
def create
|
71
|
-
|
72
|
-
|
73
|
-
create_from_url(params)
|
80
|
+
if params[:local_file].present?
|
81
|
+
perform_local_ingest
|
74
82
|
else
|
75
|
-
|
83
|
+
case params['file_coming_from']
|
84
|
+
when 'dropbox'
|
85
|
+
create_from_url(params)
|
86
|
+
else
|
87
|
+
create_from_upload(params)
|
88
|
+
end
|
76
89
|
end
|
77
90
|
end
|
78
91
|
|
92
|
+
|
93
|
+
|
79
94
|
def create_from_url(params)
|
80
95
|
params[:dropbox_urls].each do |db_file|
|
81
96
|
next if db_file.blank?
|
@@ -83,13 +98,13 @@ module Sufia
|
|
83
98
|
@generic_file = ::GenericFile.new
|
84
99
|
@generic_file.import_url = db_file
|
85
100
|
@generic_file.label = File.basename(db_file)
|
86
|
-
|
101
|
+
create_metadata(@generic_file)
|
87
102
|
Sufia.queue.push(ImportUrlJob.new(@generic_file.pid))
|
88
103
|
end
|
89
|
-
redirect_to
|
104
|
+
redirect_to self.class.upload_complete_path( params[:batch_id])
|
90
105
|
end
|
91
106
|
|
92
|
-
def
|
107
|
+
def create_from_upload(params)
|
93
108
|
begin
|
94
109
|
# check error condition No files
|
95
110
|
return json_error("Error! No file to save") if !params.has_key?(:files)
|
@@ -138,7 +153,7 @@ module Sufia
|
|
138
153
|
|
139
154
|
if params.has_key?(:revision) and params[:revision] != @generic_file.content.latest_version.versionID
|
140
155
|
revision = @generic_file.content.get_version(params[:revision])
|
141
|
-
@generic_file.
|
156
|
+
@generic_file.add_file(revision.content, datastream_id, revision.label)
|
142
157
|
version_event = true
|
143
158
|
Sufia.queue.push(ContentRestoredVersionEventJob.new(@generic_file.pid, current_user.user_key, params[:revision]))
|
144
159
|
end
|
@@ -181,7 +196,7 @@ module Sufia
|
|
181
196
|
if virus_check(file) == 0
|
182
197
|
@generic_file = ::GenericFile.new
|
183
198
|
update_metadata_from_upload_screen
|
184
|
-
|
199
|
+
create_metadata(@generic_file)
|
185
200
|
Sufia::GenericFile::Actions.create_content(@generic_file, file, file.original_filename, datastream_id, current_user)
|
186
201
|
respond_to do |format|
|
187
202
|
format.html {
|
@@ -235,7 +250,12 @@ module Sufia
|
|
235
250
|
stat = Sufia::GenericFile::Actions.virus_check(file)
|
236
251
|
flash[:error] = "Virus checking did not pass for #{File.basename(file.path)} status = #{stat}" unless stat == 0
|
237
252
|
stat
|
238
|
-
end
|
253
|
+
end
|
254
|
+
|
255
|
+
|
256
|
+
def create_metadata(file)
|
257
|
+
Sufia::GenericFile::Actions.create_metadata(file, current_user, params[:batch_id])
|
258
|
+
end
|
239
259
|
|
240
260
|
end
|
241
261
|
end
|