sufia 0.1.0 → 1.0.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 +7 -0
- data/.gitignore +4 -0
- data/.travis.yml +6 -0
- data/Gemfile +5 -2
- data/History.md +6 -0
- data/README.md +40 -0
- data/Rakefile +4 -0
- data/app/assets/javascripts/sufia.js +3 -115
- data/app/assets/javascripts/sufia/batch_select_all.js +179 -0
- data/app/assets/javascripts/sufia/edit_metadata.js +86 -0
- data/app/assets/javascripts/sufia/multiForm.js +57 -0
- data/app/assets/javascripts/terms_of_service.js +7 -0
- data/app/assets/stylesheets/audio-js.css +3 -0
- data/app/assets/stylesheets/dashboard.css.scss +51 -0
- data/app/assets/stylesheets/generic_files.css +36 -0
- data/app/assets/stylesheets/sufia.css.scss +2 -0
- data/app/controllers/batch_controller.rb +11 -0
- data/app/controllers/batch_edits_controller.rb +1 -77
- data/app/controllers/generic_files_controller.rb +1 -0
- data/app/controllers/mailbox_controller.rb +1 -1
- data/app/controllers/single_use_link_controller.rb +11 -7
- data/app/helpers/generic_file_helper.rb +11 -3
- data/app/helpers/sufia_helper.rb +13 -10
- data/app/models/batch.rb +1 -1
- data/app/models/datastreams/fits_datastream.rb +2 -2
- data/app/models/datastreams/generic_file_rdf_datastream.rb +22 -18
- data/app/models/datastreams/properties_datastream.rb +2 -2
- data/app/views/_user_util_links.html.erb +2 -2
- data/app/views/batch/_metadata.html.erb +82 -0
- data/app/views/batch/_more_metadata.html.erb +6 -0
- data/app/views/batch/edit.html.erb +1 -8
- data/app/views/batch_edits/_check_all.html.erb +0 -157
- data/app/views/batch_edits/edit.html.erb +0 -29
- data/app/views/catalog/_index_partials/_list_files.html.erb +8 -10
- data/app/views/catalog/_recent_document.html.erb +9 -18
- data/app/views/catalog/_results_pagination.html.erb +1 -1
- data/app/views/contact_form/new.html.erb +1 -1
- data/app/views/dashboard/_index_partials/_default_group.html.erb +1 -1
- data/app/views/dashboard/_index_partials/_list_files.html.erb +12 -14
- data/app/views/dashboard/_index_partials/_thumbnail_display.html.erb +9 -19
- data/app/views/dashboard/_results_pagination.html.erb +1 -1
- data/app/views/dashboard/index.html.erb +6 -82
- data/app/views/error/single_use_error.html.erb +35 -0
- data/app/views/generic_files/_descriptions.html.erb +2 -2
- data/app/views/generic_files/_extra_fields_modal.html.erb +1 -1
- data/app/views/generic_files/_field_form.html.erb +2 -5
- data/app/views/generic_files/_media_display.html.erb +8 -6
- data/app/views/generic_files/_permission.html.erb +2 -2
- data/app/views/generic_files/_rights_modal.html.erb +1 -1
- data/app/views/generic_files/_show_actions.html.erb +1 -1
- data/app/views/generic_files/_show_details.html.erb +11 -6
- data/app/views/generic_files/edit.html.erb +0 -8
- data/app/views/generic_files/edit_fields/_type.html.erb +1 -1
- data/app/views/generic_files/show.html.erb +5 -8
- data/app/views/generic_files/show_fields/_based_near.html.erb +4 -1
- data/app/views/generic_files/show_fields/_contributor.html.erb +4 -1
- data/app/views/generic_files/show_fields/_creator.html.erb +4 -1
- data/app/views/generic_files/show_fields/_date_created.html.erb +4 -1
- data/app/views/generic_files/show_fields/_description.html.erb +4 -1
- data/app/views/generic_files/show_fields/_language.html.erb +1 -1
- data/app/views/generic_files/show_fields/_publisher.html.erb +4 -1
- data/app/views/generic_files/show_fields/_related_url.html.erb +3 -1
- data/app/views/generic_files/show_fields/_resource_type.html.erb +1 -1
- data/app/views/generic_files/show_fields/_subject.html.erb +4 -1
- data/app/views/generic_files/show_fields/_tag.html.erb +1 -1
- data/app/views/generic_files/show_fields/_title.html.erb +4 -1
- data/app/views/layouts/error.html.erb +0 -4
- data/app/views/layouts/hydra-head.html.erb +2 -6
- data/app/views/single_use_link/show.html.erb +1 -1
- data/app/views/users/index.html.erb +1 -1
- data/app/views/users/show.html.erb +1 -1
- data/config/locales/sufia.en.yml +1 -0
- data/config/routes.rb +11 -4
- data/lib/generators/sufia/sufia_generator.rb +2 -1
- data/lib/generators/sufia/templates/catalog_controller.rb +143 -117
- data/lib/generators/sufia/templates/config/resque_admin.rb +10 -0
- data/lib/generators/sufia/templates/config/sufia.rb +8 -0
- data/lib/sufia.rb +4 -14
- data/lib/sufia/batch_edits_controller_behavior.rb +89 -0
- data/lib/sufia/controller.rb +7 -5
- data/lib/sufia/downloads_controller_behavior.rb +14 -19
- data/lib/sufia/file_content/extract_metadata.rb +11 -4
- data/lib/sufia/files_controller_behavior.rb +63 -44
- data/lib/sufia/generic_file.rb +29 -11
- data/lib/sufia/generic_file/audit.rb +1 -1
- data/lib/sufia/generic_file/thumbnail.rb +51 -26
- data/lib/sufia/id_service.rb +28 -11
- data/lib/sufia/jobs/batch_update_job.rb +2 -2
- data/lib/sufia/jobs/characterize_job.rb +11 -3
- data/lib/sufia/jobs/ffmpeg_transcode_job.rb +61 -0
- data/lib/sufia/jobs/resolrize_job.rb +1 -1
- data/lib/sufia/jobs/transcode_audio_job.rb +40 -0
- data/lib/sufia/jobs/transcode_video_job.rb +9 -49
- data/lib/sufia/queue/resque.rb +2 -2
- data/lib/sufia/single_use_error.rb +4 -0
- data/lib/sufia/solr_document_behavior.rb +108 -1
- data/lib/sufia/version.rb +1 -1
- data/solr_conf/conf/schema.xml +332 -652
- data/solr_conf/conf/solrconfig.xml +60 -196
- data/spec/controllers/batch_controller_spec.rb +4 -5
- data/spec/controllers/catalog_controller_spec.rb +13 -13
- data/spec/controllers/dashboard_controller_spec.rb +2 -2
- data/spec/controllers/downloads_controller_spec.rb +74 -62
- data/spec/controllers/generic_files_controller_spec.rb +10 -8
- data/spec/controllers/single_use_link_controller_spec.rb +12 -4
- data/spec/fixtures/Example.ogg +0 -0
- data/spec/fixtures/piano_note.wav +0 -0
- data/spec/fixtures/sufia_generic_stub.descMeta.txt +1 -1
- data/spec/helpers/sufia_helper_spec.rb +12 -0
- data/spec/models/characterize_job_spec.rb +89 -0
- data/spec/models/checksum_audit_log_spec.rb +1 -0
- data/spec/models/event_jobs_spec.rb +9 -9
- data/spec/models/file_content_datastream_spec.rb +16 -10
- data/spec/models/fits_datastream_spec.rb +2 -8
- data/spec/models/generic_file_spec.rb +131 -60
- data/spec/models/solr_document_spec.rb +21 -0
- data/spec/models/transcode_audio_job_spec.rb +81 -0
- data/spec/models/transcode_video_job_spec.rb +2 -2
- data/spec/models/unzip_job_spec.rb +3 -3
- data/spec/spec_helper.rb +21 -0
- data/spec/support/Gemfile +7 -3
- data/sufia.gemspec +8 -11
- data/tasks/cucumber.rake +1 -2
- data/tasks/sufia-dev.rake +13 -2
- data/tasks/sufia.rake +1 -1
- metadata +77 -118
- data/app/views/batch_edits/_metadata.html.erb +0 -180
- data/lib/generators/sufia/templates/config/hydra_config.rb +0 -32
- data/lib/kaminari/helpers/tag.rb +0 -11
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
(function( $ ){
|
|
2
|
+
|
|
3
|
+
$.fn.multiForm = function( options ) {
|
|
4
|
+
|
|
5
|
+
// Create some defaults, extending them with any options that were provided
|
|
6
|
+
var settings = $.extend( { }, options);
|
|
7
|
+
|
|
8
|
+
function addField() {
|
|
9
|
+
var cloneId = this.id.replace("submit", "clone");
|
|
10
|
+
var newId = this.id.replace("submit", "elements");
|
|
11
|
+
var cloneElem = $('#'+cloneId).clone();
|
|
12
|
+
// change the add button to a remove button
|
|
13
|
+
var plusbttn = cloneElem.find('#'+this.id);
|
|
14
|
+
plusbttn.html('-<span class="accessible-hidden">remove this '+ this.name.replace("_", " ") +'</span>');
|
|
15
|
+
plusbttn.on('click',removeField);
|
|
16
|
+
|
|
17
|
+
// remove the help tag on subsequent added fields
|
|
18
|
+
cloneElem.find('.formHelp').remove();
|
|
19
|
+
cloneElem.find('i').remove();
|
|
20
|
+
cloneElem.find('.modal-div').remove();
|
|
21
|
+
|
|
22
|
+
//clear out the value for the element being appended
|
|
23
|
+
//so the new element has a blank value
|
|
24
|
+
cloneElem.find('input[type=text]').attr("value", "");
|
|
25
|
+
cloneElem.find('input[type=text]').attr("required", false);
|
|
26
|
+
|
|
27
|
+
if (settings.afterAdd) {
|
|
28
|
+
settings.afterAdd(this, cloneElem)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
$('#'+newId).append(cloneElem);
|
|
32
|
+
cloneElem.find('input[type=text]').focus();
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function removeField () {
|
|
37
|
+
// get parent and remove it
|
|
38
|
+
$(this).parent().remove();
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return this.each(function() {
|
|
43
|
+
|
|
44
|
+
// Tooltip plugin code here
|
|
45
|
+
/*
|
|
46
|
+
* adds additional metadata elements
|
|
47
|
+
*/
|
|
48
|
+
$('.adder', this).click(addField);
|
|
49
|
+
|
|
50
|
+
$('.remover', this).click(removeField);
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
};
|
|
56
|
+
})( jQuery );
|
|
57
|
+
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
jQuery.fn.exists = function(){return this.length>0;}
|
|
2
|
+
|
|
1
3
|
$(function () {
|
|
4
|
+
if (!$('#terms_of_service').exists()) {
|
|
5
|
+
// deactivate if there is no checkbox, which allows installations to skip the agreement.
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
|
|
2
9
|
$('#main_upload_start').attr('disabled', true);
|
|
3
10
|
$("#upload_tooltip").hide();
|
|
4
11
|
$("#main_upload_start_span").mousemove(function(e){
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
.dashboard {
|
|
2
|
+
.audiojs {
|
|
3
|
+
width: 38px;
|
|
4
|
+
float: left;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
audio {
|
|
8
|
+
width: 38px;
|
|
9
|
+
float: left;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.batch-select-all, .button_to {
|
|
13
|
+
|
|
14
|
+
float: right;
|
|
15
|
+
padding-left: 6px;
|
|
16
|
+
padding-top: 0px;
|
|
17
|
+
padding-top: 0px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.bedit {
|
|
21
|
+
width: 65%;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.batch-select-all .btn-primary {
|
|
25
|
+
background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.button_to .btn-primary {
|
|
29
|
+
background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;*background-color:#df8505;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.table th, .table td {
|
|
33
|
+
padding: 4px;
|
|
34
|
+
}
|
|
35
|
+
.table .sm {
|
|
36
|
+
padding: 2px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.over {
|
|
40
|
+
z-index:100;
|
|
41
|
+
}
|
|
42
|
+
.under
|
|
43
|
+
{
|
|
44
|
+
position:absolute;
|
|
45
|
+
padding:0px 0px 0px 0px;
|
|
46
|
+
left:10px;
|
|
47
|
+
top:-8px;
|
|
48
|
+
color:orange;
|
|
49
|
+
z-index:1;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -8,3 +8,39 @@
|
|
|
8
8
|
button.close {
|
|
9
9
|
display: block;
|
|
10
10
|
}
|
|
11
|
+
|
|
12
|
+
.related-files {
|
|
13
|
+
height: 100px;
|
|
14
|
+
overflow-x: auto;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
label.error { float: left; color: red; padding-left: .5em; vertical-align: top; }
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
/* These were from batch_edit/edit.html.erb */
|
|
21
|
+
#upload_tooltip { background: #ff0; padding: 5px; border: 1px solid #ddd; position: absolute; }
|
|
22
|
+
|
|
23
|
+
.fileHeight {
|
|
24
|
+
max-height: 50px
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.scrollx {
|
|
28
|
+
overflow-x: auto;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.scrolly {
|
|
32
|
+
overflow-y: auto;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
h2 small {
|
|
36
|
+
color: red;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.status {
|
|
40
|
+
color: green;
|
|
41
|
+
padding:5px 5px 5px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.loading {
|
|
45
|
+
background: white url('/assets/loading.gif') center bottom no-repeat;
|
|
46
|
+
}
|
|
@@ -25,6 +25,7 @@ class BatchController < ApplicationController
|
|
|
25
25
|
@generic_file = GenericFile.new
|
|
26
26
|
@generic_file.creator = current_user.name
|
|
27
27
|
@generic_file.title = @batch.generic_files.map(&:label)
|
|
28
|
+
initialize_fields(@generic_file)
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
def update
|
|
@@ -36,4 +37,14 @@ class BatchController < ApplicationController
|
|
|
36
37
|
flash[:notice] = 'Your files are being processed by ' + t('sufia.product_name') + ' in the background. The metadata and access controls you specified are being applied. Files will be marked <span class="label label-important" 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.'
|
|
37
38
|
redirect_to sufia.dashboard_index_path
|
|
38
39
|
end
|
|
40
|
+
|
|
41
|
+
protected
|
|
42
|
+
|
|
43
|
+
# override this method if you need to initialize more complex RDF assertions (b-nodes)
|
|
44
|
+
def initialize_fields(file)
|
|
45
|
+
file.terms_for_editing.each do |key|
|
|
46
|
+
# if value is empty, we create an one element array to loop over for output
|
|
47
|
+
file[key] = [''] if file[key].empty?
|
|
48
|
+
end
|
|
49
|
+
end
|
|
39
50
|
end
|
|
@@ -1,81 +1,5 @@
|
|
|
1
1
|
class BatchEditsController < ApplicationController
|
|
2
2
|
include Hydra::BatchEditBehavior
|
|
3
3
|
include GenericFileHelper
|
|
4
|
-
|
|
5
|
-
def edit
|
|
6
|
-
super
|
|
7
|
-
@generic_file = GenericFile.new
|
|
8
|
-
@generic_file.depositor = current_user.user_key
|
|
9
|
-
@terms = @generic_file.terms_for_editing - [:title] # +:format, :resource_type
|
|
10
|
-
|
|
11
|
-
# do we want to show the original values for anything...
|
|
12
|
-
@show_file = GenericFile.new
|
|
13
|
-
@show_file.depositor = current_user.user_key
|
|
14
|
-
h = {}
|
|
15
|
-
@names = []
|
|
16
|
-
permissions = []
|
|
17
|
-
|
|
18
|
-
# For each of the files in the batch, set the attributes to be the concatination of all the attributes
|
|
19
|
-
batch.each do |doc_id|
|
|
20
|
-
gf = GenericFile.find(doc_id)
|
|
21
|
-
gf.terms_for_editing.each do |key|
|
|
22
|
-
h[key] ||= []
|
|
23
|
-
h[key] = (h[key] + gf.send(key)).uniq
|
|
24
|
-
end
|
|
25
|
-
@names << display_title(gf)
|
|
26
|
-
permissions = (permissions+gf.permissions).uniq
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# why am I doing this you may ask... Well... if truth be told I have no idea, but if I use just a single item in the batch
|
|
30
|
-
# my h arrays get converted into strings in update attributes unless I do this first....
|
|
31
|
-
#h.keys.each {|key| h[key] = h[key].to_a} if (batch.size == 1)
|
|
32
|
-
# end of wierd fix...
|
|
33
|
-
|
|
34
|
-
@show_file.attributes = h
|
|
35
|
-
# map the permissions to parameter like input so that the assign will work
|
|
36
|
-
# todo sort the access level some how...
|
|
37
|
-
perm_param ={'user'=>{},'group'=>{"public"=>"1"}}
|
|
38
|
-
permissions.each{ |perm| perm_param[perm[:type]][perm[:name]] = perm[:access]}
|
|
39
|
-
@show_file.permissions = HashWithIndifferentAccess.new(perm_param)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def after_update
|
|
43
|
-
redirect_to sufia.dashboard_index_path unless request.xhr?
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def update_document(obj)
|
|
47
|
-
super
|
|
48
|
-
obj.date_modified = Time.now.ctime
|
|
49
|
-
obj.set_visibility(params[:visibility])
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def update
|
|
53
|
-
# keep the batch around if we are doing ajax calls
|
|
54
|
-
batch_sav = batch.dup if request.xhr?
|
|
55
|
-
catalog_index_path = sufia.dashboard_index_path
|
|
56
|
-
type = params["update_type"]
|
|
57
|
-
if (type == "update")
|
|
58
|
-
#params["generic_file"].reject! {|k,v| (v.blank? || (v.respond_to?(:length) && v.length==1 && v.first.blank?))}
|
|
59
|
-
super
|
|
60
|
-
elsif (type == "delete_all")
|
|
61
|
-
batch.each do |doc_id|
|
|
62
|
-
gf = GenericFile.find(doc_id)
|
|
63
|
-
gf.delete
|
|
64
|
-
end
|
|
65
|
-
clear_batch!
|
|
66
|
-
after_update
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
# reset the batch around if we are doing ajax calls
|
|
70
|
-
if request.xhr?
|
|
71
|
-
self.batch = batch_sav.dup
|
|
72
|
-
@key = params["key"]
|
|
73
|
-
if (@key != "permissions")
|
|
74
|
-
@vals = params["generic_file"][@key]
|
|
75
|
-
else
|
|
76
|
-
@vals = [""]
|
|
77
|
-
end
|
|
78
|
-
render :update_edit
|
|
79
|
-
end
|
|
80
|
-
end
|
|
4
|
+
include Sufia::BatchEditsControllerBehavior
|
|
81
5
|
end
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
require 'sufia/single_use_error'
|
|
2
|
+
|
|
1
3
|
class SingleUseLinkController < DownloadsController
|
|
2
4
|
before_filter :authenticate_user!, :except => [:show, :download]
|
|
3
5
|
skip_filter :normalize_identifier
|
|
4
6
|
prepend_before_filter :normalize_identifier, :except => [:download, :show]
|
|
7
|
+
rescue_from Sufia::SingleUseError, :with => :render_single_use_error
|
|
5
8
|
|
|
6
9
|
def generate_download
|
|
7
10
|
@generic_file = GenericFile.find(params[:id])
|
|
@@ -76,11 +79,12 @@ class SingleUseLinkController < DownloadsController
|
|
|
76
79
|
|
|
77
80
|
return link
|
|
78
81
|
end
|
|
79
|
-
|
|
80
|
-
def not_found
|
|
81
|
-
raise
|
|
82
|
-
end
|
|
83
|
-
def expired
|
|
84
|
-
raise
|
|
85
|
-
end
|
|
82
|
+
|
|
83
|
+
def not_found
|
|
84
|
+
raise Sufia::SingleUseError.new('Single Use Link Not Found')
|
|
85
|
+
end
|
|
86
|
+
def expired
|
|
87
|
+
raise Sufia::SingleUseError.new('Single Use Link Expired')
|
|
88
|
+
end
|
|
89
|
+
|
|
86
90
|
end
|
|
@@ -50,7 +50,17 @@ module GenericFileHelper
|
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def render_edit_field_partial(key, locals)
|
|
53
|
-
|
|
53
|
+
render_edit_field_partial_with_action('generic_files', key, locals)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def render_batch_edit_field_partial(key, locals)
|
|
57
|
+
render_edit_field_partial_with_action('batch_edit', key, locals)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
def render_edit_field_partial_with_action(action, key, locals)
|
|
63
|
+
["#{action}/edit_fields/#{key}", "#{action}/edit_fields/default"].each do |str|
|
|
54
64
|
# XXX rather than handling this logic through exceptions, maybe there's a Rails internals method
|
|
55
65
|
# for determining if a partial template exists..
|
|
56
66
|
begin
|
|
@@ -61,8 +71,6 @@ module GenericFileHelper
|
|
|
61
71
|
end
|
|
62
72
|
end
|
|
63
73
|
|
|
64
|
-
private
|
|
65
|
-
|
|
66
74
|
def more_or_less_button(key, html_class, symbol)
|
|
67
75
|
# TODO, there could be more than one element with this id on the page, but the fuctionality doesn't work without it.
|
|
68
76
|
content_tag('button', class: "#{html_class} btn", id: "additional_#{key}_submit", name: "additional_#{key}") do
|
data/app/helpers/sufia_helper.rb
CHANGED
|
@@ -35,12 +35,8 @@ module SufiaHelper
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def display_user_name(recent_document)
|
|
38
|
-
return "no display name" unless recent_document
|
|
39
|
-
return User.find_by_user_key(recent_document
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def get_depositor_from_document(doc)
|
|
43
|
-
doc[:depositor_t] ? doc[:depositor_t][0] : "no depositor value"
|
|
38
|
+
return "no display name" unless recent_document.depositor
|
|
39
|
+
return User.find_by_user_key(recent_document.depositor).name rescue recent_document.depositor
|
|
44
40
|
end
|
|
45
41
|
|
|
46
42
|
def link_to_facet(field, field_string)
|
|
@@ -48,7 +44,8 @@ module SufiaHelper
|
|
|
48
44
|
end
|
|
49
45
|
|
|
50
46
|
def link_to_facet_list(list, field_string, emptyText="No value entered", separator=", ")
|
|
51
|
-
|
|
47
|
+
facet_field = Solrizer.solr_name(field_string, :facetable)
|
|
48
|
+
return list.map{ |item| link_to_facet(item, facet_field) }.join(separator) unless list.blank?
|
|
52
49
|
return emptyText
|
|
53
50
|
end
|
|
54
51
|
|
|
@@ -70,9 +67,15 @@ module SufiaHelper
|
|
|
70
67
|
|
|
71
68
|
def link_to_profile(login)
|
|
72
69
|
user = User.find_by_user_key(login)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
70
|
+
return login if user.nil?
|
|
71
|
+
|
|
72
|
+
text = if user.respond_to? :name
|
|
73
|
+
user.name
|
|
74
|
+
else
|
|
75
|
+
login
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
link_to text, Sufia::Engine.routes.url_helpers.profile_path(user)
|
|
76
79
|
end
|
|
77
80
|
|
|
78
81
|
def linkify_chat_id(chat_id)
|
data/app/models/batch.rb
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
class FitsDatastream < ActiveFedora::
|
|
15
|
+
class FitsDatastream < ActiveFedora::OmDatastream
|
|
16
16
|
include OM::XML::Document
|
|
17
17
|
|
|
18
18
|
set_terminology do |t|
|
|
@@ -22,7 +22,7 @@ class FitsDatastream < ActiveFedora::NokogiriDatastream
|
|
|
22
22
|
t.identification {
|
|
23
23
|
t.identity {
|
|
24
24
|
t.format_label(:path=>{:attribute=>"format"})
|
|
25
|
-
t.mime_type(:path=>{:attribute=>"mimetype"}, index_as: [:
|
|
25
|
+
t.mime_type(:path=>{:attribute=>"mimetype"}, index_as: [:stored_searchable])
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
t.fileinfo {
|
|
@@ -16,56 +16,60 @@ class GenericFileRdfDatastream < ActiveFedora::NtriplesRDFDatastream
|
|
|
16
16
|
map_predicates do |map|
|
|
17
17
|
map.part_of(:to => "isPartOf", :in => RDF::DC)
|
|
18
18
|
map.contributor(:in => RDF::DC) do |index|
|
|
19
|
-
index.as :
|
|
19
|
+
index.as :stored_searchable, :facetable
|
|
20
20
|
end
|
|
21
21
|
map.creator(:in => RDF::DC) do |index|
|
|
22
|
-
index.as :
|
|
22
|
+
index.as :stored_searchable, :facetable
|
|
23
23
|
end
|
|
24
24
|
map.title(:in => RDF::DC) do |index|
|
|
25
|
-
index.as :
|
|
25
|
+
index.as :stored_searchable
|
|
26
26
|
end
|
|
27
27
|
map.description(:in => RDF::DC) do |index|
|
|
28
28
|
index.type :text
|
|
29
|
-
index.as :
|
|
29
|
+
index.as :stored_searchable
|
|
30
30
|
end
|
|
31
31
|
map.publisher(:in => RDF::DC) do |index|
|
|
32
|
-
index.as :
|
|
32
|
+
index.as :stored_searchable, :facetable
|
|
33
33
|
end
|
|
34
34
|
map.date_created(:to => "created", :in => RDF::DC) do |index|
|
|
35
|
-
index.as :
|
|
35
|
+
index.as :stored_searchable
|
|
36
36
|
end
|
|
37
37
|
map.date_uploaded(:to => "dateSubmitted", :in => RDF::DC) do |index|
|
|
38
38
|
index.type :date
|
|
39
|
-
index.as :
|
|
39
|
+
index.as :stored_sortable
|
|
40
40
|
end
|
|
41
41
|
map.date_modified(:to => "modified", :in => RDF::DC) do |index|
|
|
42
42
|
index.type :date
|
|
43
|
-
index.as :
|
|
43
|
+
index.as :stored_sortable
|
|
44
44
|
end
|
|
45
45
|
map.subject(:in => RDF::DC) do |index|
|
|
46
|
-
index.as :
|
|
46
|
+
index.as :stored_searchable, :facetable
|
|
47
47
|
end
|
|
48
48
|
map.language(:in => RDF::DC) do |index|
|
|
49
|
-
index.as :
|
|
49
|
+
index.as :stored_searchable, :facetable
|
|
50
50
|
end
|
|
51
51
|
map.rights(:in => RDF::DC) do |index|
|
|
52
|
-
index.as :
|
|
52
|
+
index.as :stored_searchable
|
|
53
53
|
end
|
|
54
54
|
map.resource_type(:to => "type", :in => RDF::DC) do |index|
|
|
55
|
-
index.as :
|
|
55
|
+
index.as :stored_searchable, :facetable
|
|
56
56
|
end
|
|
57
57
|
map.identifier(:in => RDF::DC) do |index|
|
|
58
|
-
index.as :
|
|
58
|
+
index.as :stored_searchable
|
|
59
59
|
end
|
|
60
60
|
map.based_near(:in => RDF::FOAF) do |index|
|
|
61
|
-
index.as :
|
|
61
|
+
index.as :stored_searchable, :facetable
|
|
62
62
|
end
|
|
63
63
|
map.tag(:to => "relation", :in => RDF::DC) do |index|
|
|
64
|
-
index.as :
|
|
64
|
+
index.as :stored_searchable, :facetable
|
|
65
65
|
end
|
|
66
66
|
map.related_url(:to => "seeAlso", :in => RDF::RDFS)
|
|
67
67
|
end
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
begin
|
|
69
|
+
LocalAuthority.register_vocabulary(self, "subject", "lc_subjects")
|
|
70
|
+
LocalAuthority.register_vocabulary(self, "language", "lexvo_languages")
|
|
71
|
+
LocalAuthority.register_vocabulary(self, "tag", "lc_genres")
|
|
72
|
+
rescue
|
|
73
|
+
puts "tables for vocabularies missing"
|
|
74
|
+
end
|
|
71
75
|
end
|