sufia 0.0.3 → 0.0.4
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.
- data/Gemfile +1 -4
- data/README.md +1 -1
- data/app/assets/javascripts/sufia.js +5 -312
- data/app/assets/javascripts/sufia/permissions.js +216 -0
- data/app/assets/javascripts/sufia/tabs.js +58 -0
- data/app/assets/stylesheets/generic_files.css +4 -0
- data/app/assets/stylesheets/jquery-ui.css +474 -0
- data/app/assets/stylesheets/{sufia.css → sufia.css.scss} +4 -1
- data/app/controllers/directory_controller.rb +17 -11
- data/app/controllers/users_controller.rb +5 -3
- data/app/models/datastreams/file_content_datastream.rb +2 -53
- data/app/views/batch/_metadata.html.erb +0 -1
- data/app/views/batch_edits/_metadata.html.erb +0 -1
- data/app/views/batch_edits/edit.html.erb +0 -1
- data/app/views/dashboard/_facet_pagination.html.erb +20 -39
- data/app/views/dashboard/_index_partials/_thumbnail_display.html.erb +1 -1
- data/app/views/dashboard/facet.html.erb +29 -34
- data/app/views/generic_files/_descriptions.html.erb +0 -1
- data/app/views/generic_files/_groups_description.html.erb +5 -0
- data/app/views/generic_files/_multiple_upload.html.erb +135 -0
- data/app/views/generic_files/_permission.html.erb +2 -5
- data/app/views/generic_files/_versioning.html.erb +0 -1
- data/app/views/generic_files/edit.html.erb +0 -3
- data/app/views/generic_files/new.html.erb +2 -138
- data/app/views/layouts/hydra-head.html.erb +1 -0
- data/app/views/users/index.html.erb +6 -4
- data/config/locales/sufia.en.yml +2 -0
- data/lib/sufia.rb +1 -1
- data/lib/sufia/file_content.rb +8 -0
- data/lib/sufia/file_content/extract_metadata.rb +53 -0
- data/lib/sufia/file_content/versions.rb +23 -0
- data/lib/sufia/files_controller_behavior.rb +17 -33
- data/lib/sufia/generic_file.rb +0 -8
- data/lib/sufia/generic_file/characterization.rb +0 -1
- data/lib/sufia/generic_file/thumbnail.rb +2 -4
- data/lib/sufia/jobs/unzip_job.rb +0 -1
- data/lib/sufia/user.rb +0 -3
- data/lib/sufia/version.rb +1 -1
- data/spec/controllers/batch_controller_spec.rb +11 -12
- data/spec/controllers/catalog_controller_spec.rb +2 -3
- data/spec/controllers/generic_files_controller_spec.rb +14 -16
- data/spec/controllers/single_use_link_controller_spec.rb +0 -1
- data/spec/models/batch_update_job_spec.rb +2 -3
- data/spec/models/checksum_audit_log_spec.rb +1 -2
- data/spec/models/file_content_datastream_spec.rb +1 -6
- data/spec/models/generic_file_spec.rb +2 -9
- data/spec/models/single_use_link_spec.rb +0 -2
- data/spec/models/transcode_video_job_spec.rb +1 -1
- data/spec/support/Gemfile +3 -5
- data/sufia.gemspec +2 -2
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +50 -0
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +1276 -0
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +498 -0
- metadata +26 -21
- data/app/assets/stylesheets/font-awesome-ie7.css +0 -645
- data/app/assets/stylesheets/font-awesome.css +0 -303
- data/app/views/catalog/_facet_pagination.html.erb +0 -28
- data/app/views/catalog/facet.html.erb +0 -27
- data/public/robots.txt +0 -4
- data/vendor/assets/fonts/fontawesome-webfont.eot +0 -0
data/Gemfile
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
2
|
|
3
|
-
# Please see
|
3
|
+
# Please see sufia.gemspec for dependency information.
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
|
7
6
|
#gem 'mail_form', :git => 'git://github.com/psu-stewardship/mail_form.git', :ref => '50c00f0'
|
8
7
|
group :development, :test do
|
9
8
|
gem 'sqlite3'
|
@@ -22,6 +21,4 @@ group :development, :test do
|
|
22
21
|
gem "jettywrapper"
|
23
22
|
gem "factory_girl_rails", "~> 4.1.0"
|
24
23
|
gem 'launchy'
|
25
|
-
|
26
|
-
gem 'devise'
|
27
24
|
end # (leave this comment here to catch a stray line inserted by blacklight!)
|
data/README.md
CHANGED
@@ -18,6 +18,9 @@ limitations under the License.
|
|
18
18
|
//= require jquery-ui-1.9.2/jquery.ui.widget
|
19
19
|
//= require jquery-ui-1.9.2/jquery.ui.menu
|
20
20
|
//= require jquery-ui-1.9.2/jquery.ui.autocomplete
|
21
|
+
//= require jquery-ui-1.9.2/jquery.ui.position
|
22
|
+
//= require jquery-ui-1.9.2/jquery.ui.effect
|
23
|
+
//= require jquery-ui-1.9.2/jquery.ui.effect-highlight
|
21
24
|
|
22
25
|
//= require bootstrap-dropdown
|
23
26
|
//= require bootstrap-button
|
@@ -35,6 +38,8 @@ limitations under the License.
|
|
35
38
|
//= require batch_edit
|
36
39
|
//= require terms_of_service
|
37
40
|
//= require fileupload
|
41
|
+
//= require sufia/permissions
|
42
|
+
//= require sufia/tabs
|
38
43
|
|
39
44
|
//over ride the blacklight default to submit
|
40
45
|
//form when sort by or show per page change
|
@@ -102,7 +107,6 @@ $(function() {
|
|
102
107
|
},
|
103
108
|
minLength: 2
|
104
109
|
};
|
105
|
-
//$("#generic_file_based_near").autocomplete(cities_autocomplete_opts);
|
106
110
|
$("#generic_file_based_near").autocomplete(get_autocomplete_opts("location"));
|
107
111
|
|
108
112
|
|
@@ -121,12 +125,6 @@ $(function() {
|
|
121
125
|
complete: function(event) {
|
122
126
|
$('.ui-autocomplete-loading').removeClass("ui-autocomplete-loading");
|
123
127
|
}
|
124
|
-
/*
|
125
|
-
select: function( event, ui ) {
|
126
|
-
$("#selectedSubjects").append("<div class = 'selectedsubject'>" + ui.item.label+"<img id='killSubject' style='position:relative; left:10px' src='images/close_icon.gif'/><div id='hiddenId' style='display:none'>"+ui.item.value+"</div></div>");
|
127
|
-
$(this).val("");
|
128
|
-
return false;
|
129
|
-
}*/
|
130
128
|
};
|
131
129
|
return autocomplete_opts;
|
132
130
|
}
|
@@ -159,17 +157,11 @@ $(function() {
|
|
159
157
|
* adds additional metadata elements
|
160
158
|
*/
|
161
159
|
$('.adder').click(function() {
|
162
|
-
//this.id = additional_N_submit
|
163
|
-
//id for element to clone = additional_N_clone
|
164
|
-
//id for element to append to = additional_N_elements
|
165
|
-
//var cloneId = this.id.replace("submit", "clone");
|
166
|
-
//var newId = this.id.replace("submit", "elements");
|
167
160
|
var cloneId = this.id.replace("submit", "clone");
|
168
161
|
var newId = this.id.replace("submit", "elements");
|
169
162
|
var cloneElem = $('#'+cloneId).clone();
|
170
163
|
// change the add button to a remove button
|
171
164
|
var plusbttn = cloneElem.find('#'+this.id);
|
172
|
-
//plusbttn.attr("value","-");
|
173
165
|
plusbttn.html('-<span class="accessible-hidden">remove this '+ this.name.replace("_", " ") +'</span>');
|
174
166
|
plusbttn.on('click',removeField);
|
175
167
|
|
@@ -231,171 +223,6 @@ $(function() {
|
|
231
223
|
$("a[rel=popover]").click(function() { return false;});
|
232
224
|
|
233
225
|
|
234
|
-
/*
|
235
|
-
*
|
236
|
-
*
|
237
|
-
* permissions
|
238
|
-
*
|
239
|
-
* ids that end in 'skel' are only used as elements
|
240
|
-
* to clone into real form elements that are then
|
241
|
-
* submitted
|
242
|
-
*/
|
243
|
-
|
244
|
-
// input for uids - attach function to verify uid
|
245
|
-
$('#new_user_name_skel').on('blur', function() {
|
246
|
-
// clear out any existing messages
|
247
|
-
$('#directory_user_result').html('');
|
248
|
-
var un = $('#new_user_name_skel').val();
|
249
|
-
var perm = $('#new_user_permission_skel').val();
|
250
|
-
if ( $.trim(un).length == 0 ) {
|
251
|
-
return;
|
252
|
-
}
|
253
|
-
$.ajax( {
|
254
|
-
url: "/directory/user/" + un,
|
255
|
-
success: function( data ) {
|
256
|
-
if (data != null) {
|
257
|
-
if (!data.length) {
|
258
|
-
$('#directory_user_result').html('User id ('+un+ ') does not exist.');
|
259
|
-
$('#new_user_name_skel').select();
|
260
|
-
$('#new_user_permission_skel').val('none');
|
261
|
-
return;
|
262
|
-
}
|
263
|
-
else {
|
264
|
-
$('#new_user_permission_skel').focus();
|
265
|
-
}
|
266
|
-
}
|
267
|
-
}
|
268
|
-
});
|
269
|
-
|
270
|
-
});
|
271
|
-
|
272
|
-
|
273
|
-
// add button for new user
|
274
|
-
$('#add_new_user_skel').on('click', function() {
|
275
|
-
if ($('#new_user_name_skel').val() == "" || $('#new_user_permission_skel :selected').index() == "0") {
|
276
|
-
$('#new_user_name_skel').focus();
|
277
|
-
return false;
|
278
|
-
}
|
279
|
-
|
280
|
-
if ($('#new_user_name_skel').val() == $('#file_owner').html()) {
|
281
|
-
$('#permissions_error_text').html("Cannot change owner permissions.");
|
282
|
-
$('#permissions_error').show();
|
283
|
-
$('#new_user_name_skel').val('');
|
284
|
-
$('#new_user_name_skel').focus();
|
285
|
-
return false;
|
286
|
-
}
|
287
|
-
|
288
|
-
if (!is_permission_duplicate($('#new_user_name_skel').val())) {
|
289
|
-
$('#permissions_error_text').html("This user already has a permission.");
|
290
|
-
$('#permissions_error').show();
|
291
|
-
$('#new_user_name_skel').focus();
|
292
|
-
return false;
|
293
|
-
}
|
294
|
-
$('#permissions_error').html();
|
295
|
-
$('#permissions_error').hide();
|
296
|
-
|
297
|
-
var un = $('#new_user_name_skel').val();
|
298
|
-
var perm_form = $('#new_user_permission_skel').val();
|
299
|
-
var perm = $('#new_user_permission_skel :selected').text();
|
300
|
-
// clear out the elements to add more
|
301
|
-
$('#new_user_name_skel').val('');
|
302
|
-
$('#new_user_permission_skel').val('none');
|
303
|
-
|
304
|
-
addPerm(un, perm_form, perm, 'new_user_name');
|
305
|
-
return false;
|
306
|
-
});
|
307
|
-
|
308
|
-
// add button for new user
|
309
|
-
$('#add_new_group_skel').on('click', function() {
|
310
|
-
if ($('#new_group_name_skel :selected').index() == "0" || $('#new_group_permission_skel :selected').index() == "0") {
|
311
|
-
$('#new_group_name_skel').focus();
|
312
|
-
return false;
|
313
|
-
}
|
314
|
-
var cn = $('#new_group_name_skel').val();
|
315
|
-
var perm_form = $('#new_group_permission_skel').val();
|
316
|
-
var perm = $('#new_group_permission_skel :selected').text();
|
317
|
-
|
318
|
-
if (!is_permission_duplicate($('#new_group_name_skel').val())) {
|
319
|
-
$('#permissions_error_text').html("This group already has a permission.");
|
320
|
-
$('#permissions_error').show();
|
321
|
-
$('#new_group_name_skel').focus();
|
322
|
-
return false;
|
323
|
-
}
|
324
|
-
$('#permissions_error').html();
|
325
|
-
$('#permissions_error').hide();
|
326
|
-
// clear out the elements to add more
|
327
|
-
$('#new_group_name_skel').val('');
|
328
|
-
$('#new_group_permission_skel').val('none');
|
329
|
-
|
330
|
-
addPerm(cn, perm_form, perm, 'new_group_name');
|
331
|
-
return false;
|
332
|
-
});
|
333
|
-
|
334
|
-
function addPerm(un, perm_form, perm, perm_type)
|
335
|
-
{
|
336
|
-
var tr = $(document.createElement('tr'));
|
337
|
-
var td1 = $(document.createElement('td'));
|
338
|
-
var td2 = $(document.createElement('td'));
|
339
|
-
var remove = $('<button class="btn close">X</button>');
|
340
|
-
|
341
|
-
$('#save_perm_note').show();
|
342
|
-
|
343
|
-
$('#new_perms').append(td1);
|
344
|
-
$('#new_perms').append(td2);
|
345
|
-
|
346
|
-
td1.html('<label class="control-label">'+un+'</label>');
|
347
|
-
td2.html(perm);
|
348
|
-
td2.append(remove);
|
349
|
-
remove.click(function () {
|
350
|
-
tr.remove();
|
351
|
-
});
|
352
|
-
|
353
|
-
$('<input>').attr({
|
354
|
-
type: 'hidden',
|
355
|
-
name: 'generic_file[permissions]['+perm_type+']['+un+']',
|
356
|
-
value: perm_form
|
357
|
-
}).appendTo(td2);
|
358
|
-
tr.append(td1);
|
359
|
-
tr.append(td2);
|
360
|
-
$('#file_permissions').after(tr);
|
361
|
-
tr.effect("highlight", {}, 3000);
|
362
|
-
}
|
363
|
-
|
364
|
-
$('.remove_perm').on('click', function() {
|
365
|
-
var top = $(this).parent().parent();
|
366
|
-
top.hide(); // do not show the block
|
367
|
-
top.find('.select_perm')[0].options[0].selected= true; // select the first otion which is none
|
368
|
-
return false;
|
369
|
-
|
370
|
-
});
|
371
|
-
|
372
|
-
// called from edit object view
|
373
|
-
$('#edit_descriptions_link').on('click', function() {
|
374
|
-
descriptions_tab();
|
375
|
-
});
|
376
|
-
|
377
|
-
// called from edit object view
|
378
|
-
$('#edit_versioning_link').on('click', function() {
|
379
|
-
versions_tab();
|
380
|
-
});
|
381
|
-
|
382
|
-
// called from edit object view
|
383
|
-
$('#edit_permissions_link').on('click', function() {
|
384
|
-
permissions_tab();
|
385
|
-
});
|
386
|
-
|
387
|
-
// when user clicks on visibility, update potential access levels
|
388
|
-
$("input[name='visibility']").on("change", set_access_levels);
|
389
|
-
|
390
|
-
$('#generic_file_permissions_new_group_name').change(function (){
|
391
|
-
var edit_option = $("#generic_file_permissions_new_group_permission option[value='edit']")[0];
|
392
|
-
if (this.value.toUpperCase() == 'PUBLIC') {
|
393
|
-
edit_option.disabled =true;
|
394
|
-
} else {
|
395
|
-
edit_option.disabled =false;
|
396
|
-
}
|
397
|
-
|
398
|
-
});
|
399
226
|
|
400
227
|
/*
|
401
228
|
* facets lists
|
@@ -410,23 +237,6 @@ $(function() {
|
|
410
237
|
$(this).find('i').toggleClass("icon-chevron-down");
|
411
238
|
});
|
412
239
|
|
413
|
-
/*
|
414
|
-
* enlarge icons on hover- on dashboard
|
415
|
-
*/
|
416
|
-
/*
|
417
|
-
$('[class^="icon-"]').hover(
|
418
|
-
//on mouseover
|
419
|
-
function(){
|
420
|
-
$(this).addClass("icon-large");
|
421
|
-
},
|
422
|
-
//on mouseout
|
423
|
-
function() {
|
424
|
-
$(this).removeClass("icon-large");
|
425
|
-
});
|
426
|
-
*/
|
427
|
-
|
428
|
-
|
429
|
-
|
430
240
|
$(".sorts-dash").click(function(){
|
431
241
|
var itag =$(this).find('i');
|
432
242
|
toggle_icon(itag);
|
@@ -455,122 +265,6 @@ function toggle_icon(itag){
|
|
455
265
|
itag.toggleClass("icon-caret-up");
|
456
266
|
}
|
457
267
|
|
458
|
-
// return the files visibility level (penn state, open, restricted);
|
459
|
-
function get_visibility(){
|
460
|
-
return $("input[name='visibility']:checked").val()
|
461
|
-
}
|
462
|
-
|
463
|
-
/*
|
464
|
-
* if visibility is Open or Penn State then we can't selectively
|
465
|
-
* set other users/groups to 'read' (it would be over ruled by the
|
466
|
-
* visibility of Open or Penn State) so disable the Read option
|
467
|
-
*/
|
468
|
-
function set_access_levels()
|
469
|
-
{
|
470
|
-
var vis = get_visibility();
|
471
|
-
var enabled_disabled = false;
|
472
|
-
if (vis == "open" || vis == "psu") {
|
473
|
-
enabled_disabled = true;
|
474
|
-
}
|
475
|
-
$('#new_group_permission_skel option[value=read]').attr("disabled", enabled_disabled);
|
476
|
-
$('#new_user_permission_skel option[value=read]').attr("disabled", enabled_disabled);
|
477
|
-
var perms_sel = $("select[name^='generic_file[permissions]']");
|
478
|
-
$.each(perms_sel, function(index, sel_obj) {
|
479
|
-
$.each(sel_obj, function(j, opt) {
|
480
|
-
if( opt.value == "read") {
|
481
|
-
opt.disabled = enabled_disabled;
|
482
|
-
}
|
483
|
-
});
|
484
|
-
});
|
485
|
-
}
|
486
|
-
|
487
|
-
/*
|
488
|
-
* make sure the permission being applied is not for a user/group
|
489
|
-
* that already has a permission.
|
490
|
-
*/
|
491
|
-
function is_permission_duplicate(user_or_group_name)
|
492
|
-
{
|
493
|
-
s = "[" + user_or_group_name + "]";
|
494
|
-
var patt = new RegExp(preg_quote(s), 'gi');
|
495
|
-
var perms_input = $("input[name^='generic_file[permissions]']");
|
496
|
-
var perms_sel = $("select[name^='generic_file[permissions]']");
|
497
|
-
var flag = 1;
|
498
|
-
perms_input.each(function(index, form_input) {
|
499
|
-
// if the name is already being used - return false (not valid)
|
500
|
-
if (patt.test(form_input.name)) {
|
501
|
-
flag = 0;
|
502
|
-
}
|
503
|
-
});
|
504
|
-
if (flag) {
|
505
|
-
perms_sel.each(function(index, form_input) {
|
506
|
-
// if the name is already being used - return false (not valid)
|
507
|
-
if (patt.test(form_input.name)) {
|
508
|
-
flag = 0;
|
509
|
-
}
|
510
|
-
});
|
511
|
-
}
|
512
|
-
// putting a return false inside the each block
|
513
|
-
// was not working. Not sure why would seem better
|
514
|
-
// rather than setting this flag var
|
515
|
-
return (flag ? true : false);
|
516
|
-
}
|
517
|
-
|
518
|
-
// is it worth checking to make sure users aren't filling up permissions that will be ignored.
|
519
|
-
// or when a user has already set a permission for a user then updates the visibility -- is it
|
520
|
-
// still relevant
|
521
|
-
function validate_existing_perms()
|
522
|
-
{
|
523
|
-
var vis = get_visibility();
|
524
|
-
if (vis == "open" || vis == "psu")
|
525
|
-
{
|
526
|
-
var perms = $("input[name^='generic_file[permissions]']");
|
527
|
-
$.each(perms, function(index, form_input) {
|
528
|
-
if (form_input.name != "generic_file[permissions][group][public]" && form_input.name != "generic_file[permissions][group][registered]") {
|
529
|
-
if (form_input.value != 'edit') {
|
530
|
-
alert("silly permission: " + form_input.name + " " + form_input.value );
|
531
|
-
}
|
532
|
-
}
|
533
|
-
});
|
534
|
-
}
|
535
|
-
}
|
536
|
-
|
537
|
-
// all called from edit object view
|
538
|
-
// when permissions link is clicked on edit object
|
539
|
-
function permissions_tab ()
|
540
|
-
{
|
541
|
-
$('#edit_permissions_link').attr('class', 'active');
|
542
|
-
$('#edit_versioning_link').attr('class', '');
|
543
|
-
$('#edit_descriptions_link').attr('class', '');
|
544
|
-
|
545
|
-
$('#descriptions_display').hide();
|
546
|
-
$('#versioning_display').hide();
|
547
|
-
$('#permissions_display').show();
|
548
|
-
$('#permissions_submit').show();
|
549
|
-
}
|
550
|
-
// when versions link is clicked on edit object
|
551
|
-
function versions_tab()
|
552
|
-
{
|
553
|
-
$('#edit_descriptions_link').attr('class', '');
|
554
|
-
$('#edit_versioning_link').attr('class', 'active');
|
555
|
-
$('#edit_permissions_link').attr('class', '');
|
556
|
-
|
557
|
-
$('#descriptions_display').hide();
|
558
|
-
$('#versioning_display').show();
|
559
|
-
$('#permissions_display').hide();
|
560
|
-
$('#permissions_submit').hide();
|
561
|
-
}
|
562
|
-
// when descriptions link is clicked on edit object
|
563
|
-
function descriptions_tab ()
|
564
|
-
{
|
565
|
-
$('#edit_descriptions_link').attr('class', 'active');
|
566
|
-
$('#edit_versioning_link').attr('class', '');
|
567
|
-
$('#edit_permissions_link').attr('class', '');
|
568
|
-
|
569
|
-
$('#descriptions_display').show();
|
570
|
-
$('#versioning_display').hide();
|
571
|
-
$('#permissions_display').hide();
|
572
|
-
$('#permissions_submit').hide();
|
573
|
-
}
|
574
268
|
function preg_quote( str ) {
|
575
269
|
// http://kevin.vanzonneveld.net
|
576
270
|
// + original by: booeyOH
|
@@ -593,7 +287,6 @@ function initialize_audio() {
|
|
593
287
|
if (navigator.userAgent.match("Chrome")){
|
594
288
|
$('audio').each(function() {
|
595
289
|
this.controls = true;
|
596
|
-
//$(this).attr("controls","controls");
|
597
290
|
});
|
598
291
|
}else {
|
599
292
|
$('audio').each(function() {
|
@@ -0,0 +1,216 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
*
|
4
|
+
* permissions
|
5
|
+
*
|
6
|
+
* ids that end in 'skel' are only used as elements
|
7
|
+
* to clone into real form elements that are then
|
8
|
+
* submitted
|
9
|
+
*/
|
10
|
+
|
11
|
+
$(function() {
|
12
|
+
// input for uids - attach function to verify uid
|
13
|
+
$('#new_user_name_skel').on('blur', function() {
|
14
|
+
// clear out any existing messages
|
15
|
+
$('#directory_user_result').html('');
|
16
|
+
var un = $('#new_user_name_skel').val();
|
17
|
+
var perm = $('#new_user_permission_skel').val();
|
18
|
+
if ( $.trim(un).length == 0 ) {
|
19
|
+
return;
|
20
|
+
}
|
21
|
+
$.ajax( {
|
22
|
+
url: "/directory/user/" + un,
|
23
|
+
success: function( data ) {
|
24
|
+
if (data != null) {
|
25
|
+
if (!data.length) {
|
26
|
+
$('#directory_user_result').html('User id ('+un+ ') does not exist.');
|
27
|
+
$('#new_user_name_skel').select();
|
28
|
+
$('#new_user_permission_skel').val('none');
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
else {
|
32
|
+
$('#new_user_permission_skel').focus();
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
});
|
37
|
+
|
38
|
+
});
|
39
|
+
|
40
|
+
|
41
|
+
// add button for new user
|
42
|
+
$('#add_new_user_skel').on('click', function() {
|
43
|
+
if ($('#new_user_name_skel').val() == "" || $('#new_user_permission_skel :selected').index() == "0") {
|
44
|
+
$('#new_user_name_skel').focus();
|
45
|
+
return false;
|
46
|
+
}
|
47
|
+
|
48
|
+
if ($('#new_user_name_skel').val() == $('#file_owner').html()) {
|
49
|
+
$('#permissions_error_text').html("Cannot change owner permissions.");
|
50
|
+
$('#permissions_error').show();
|
51
|
+
$('#new_user_name_skel').val('');
|
52
|
+
$('#new_user_name_skel').focus();
|
53
|
+
return false;
|
54
|
+
}
|
55
|
+
|
56
|
+
if (!is_permission_duplicate($('#new_user_name_skel').val())) {
|
57
|
+
$('#permissions_error_text').html("This user already has a permission.");
|
58
|
+
$('#permissions_error').show();
|
59
|
+
$('#new_user_name_skel').focus();
|
60
|
+
return false;
|
61
|
+
}
|
62
|
+
$('#permissions_error').html();
|
63
|
+
$('#permissions_error').hide();
|
64
|
+
|
65
|
+
var un = $('#new_user_name_skel').val();
|
66
|
+
var perm_form = $('#new_user_permission_skel').val();
|
67
|
+
var perm = $('#new_user_permission_skel :selected').text();
|
68
|
+
// clear out the elements to add more
|
69
|
+
$('#new_user_name_skel').val('');
|
70
|
+
$('#new_user_permission_skel').val('none');
|
71
|
+
|
72
|
+
addPerm(un, perm_form, perm, 'new_user_name');
|
73
|
+
return false;
|
74
|
+
});
|
75
|
+
|
76
|
+
// add button for new user
|
77
|
+
$('#add_new_group_skel').on('click', function() {
|
78
|
+
if ($('#new_group_name_skel :selected').index() == "0" || $('#new_group_permission_skel :selected').index() == "0") {
|
79
|
+
$('#new_group_name_skel').focus();
|
80
|
+
return false;
|
81
|
+
}
|
82
|
+
var cn = $('#new_group_name_skel').val();
|
83
|
+
var perm_form = $('#new_group_permission_skel').val();
|
84
|
+
var perm = $('#new_group_permission_skel :selected').text();
|
85
|
+
|
86
|
+
if (!is_permission_duplicate($('#new_group_name_skel').val())) {
|
87
|
+
$('#permissions_error_text').html("This group already has a permission.");
|
88
|
+
$('#permissions_error').show();
|
89
|
+
$('#new_group_name_skel').focus();
|
90
|
+
return false;
|
91
|
+
}
|
92
|
+
$('#permissions_error').html();
|
93
|
+
$('#permissions_error').hide();
|
94
|
+
// clear out the elements to add more
|
95
|
+
$('#new_group_name_skel').val('');
|
96
|
+
$('#new_group_permission_skel').val('none');
|
97
|
+
|
98
|
+
addPerm(cn, perm_form, perm, 'new_group_name');
|
99
|
+
return false;
|
100
|
+
});
|
101
|
+
|
102
|
+
// when user clicks on visibility, update potential access levels
|
103
|
+
$("input[name='visibility']").on("change", set_access_levels);
|
104
|
+
|
105
|
+
$('#generic_file_permissions_new_group_name').change(function (){
|
106
|
+
var edit_option = $("#generic_file_permissions_new_group_permission option[value='edit']")[0];
|
107
|
+
if (this.value.toUpperCase() == 'PUBLIC') {
|
108
|
+
edit_option.disabled =true;
|
109
|
+
} else {
|
110
|
+
edit_option.disabled =false;
|
111
|
+
}
|
112
|
+
|
113
|
+
});
|
114
|
+
|
115
|
+
|
116
|
+
function addPerm(un, perm_form, perm, perm_type)
|
117
|
+
{
|
118
|
+
var tr = $(document.createElement('tr'));
|
119
|
+
var td1 = $(document.createElement('td'));
|
120
|
+
var td2 = $(document.createElement('td'));
|
121
|
+
var remove = $('<button class="btn close">X</button>');
|
122
|
+
|
123
|
+
$('#save_perm_note').show();
|
124
|
+
|
125
|
+
$('#new_perms').append(td1);
|
126
|
+
$('#new_perms').append(td2);
|
127
|
+
|
128
|
+
td1.html('<label class="control-label">'+un+'</label>');
|
129
|
+
td2.html(perm);
|
130
|
+
td2.append(remove);
|
131
|
+
remove.click(function () {
|
132
|
+
tr.remove();
|
133
|
+
});
|
134
|
+
|
135
|
+
$('<input>').attr({
|
136
|
+
type: 'hidden',
|
137
|
+
name: 'generic_file[permissions]['+perm_type+']['+un+']',
|
138
|
+
value: perm_form
|
139
|
+
}).appendTo(td2);
|
140
|
+
tr.append(td1);
|
141
|
+
tr.append(td2);
|
142
|
+
$('#file_permissions').after(tr);
|
143
|
+
tr.effect("highlight", {}, 3000);
|
144
|
+
}
|
145
|
+
|
146
|
+
$('.remove_perm').on('click', function() {
|
147
|
+
var top = $(this).parent().parent();
|
148
|
+
top.hide(); // do not show the block
|
149
|
+
top.find('.select_perm')[0].options[0].selected= true; // select the first otion which is none
|
150
|
+
return false;
|
151
|
+
|
152
|
+
});
|
153
|
+
|
154
|
+
});
|
155
|
+
|
156
|
+
// return the files visibility level (penn state, open, restricted);
|
157
|
+
function get_visibility(){
|
158
|
+
return $("input[name='visibility']:checked").val()
|
159
|
+
}
|
160
|
+
|
161
|
+
/*
|
162
|
+
* if visibility is Open or Penn State then we can't selectively
|
163
|
+
* set other users/groups to 'read' (it would be over ruled by the
|
164
|
+
* visibility of Open or Penn State) so disable the Read option
|
165
|
+
*/
|
166
|
+
function set_access_levels()
|
167
|
+
{
|
168
|
+
var vis = get_visibility();
|
169
|
+
var enabled_disabled = false;
|
170
|
+
if (vis == "open" || vis == "psu") {
|
171
|
+
enabled_disabled = true;
|
172
|
+
}
|
173
|
+
$('#new_group_permission_skel option[value=read]').attr("disabled", enabled_disabled);
|
174
|
+
$('#new_user_permission_skel option[value=read]').attr("disabled", enabled_disabled);
|
175
|
+
var perms_sel = $("select[name^='generic_file[permissions]']");
|
176
|
+
$.each(perms_sel, function(index, sel_obj) {
|
177
|
+
$.each(sel_obj, function(j, opt) {
|
178
|
+
if( opt.value == "read") {
|
179
|
+
opt.disabled = enabled_disabled;
|
180
|
+
}
|
181
|
+
});
|
182
|
+
});
|
183
|
+
}
|
184
|
+
|
185
|
+
/*
|
186
|
+
* make sure the permission being applied is not for a user/group
|
187
|
+
* that already has a permission.
|
188
|
+
*/
|
189
|
+
function is_permission_duplicate(user_or_group_name)
|
190
|
+
{
|
191
|
+
s = "[" + user_or_group_name + "]";
|
192
|
+
var patt = new RegExp(preg_quote(s), 'gi');
|
193
|
+
var perms_input = $("input[name^='generic_file[permissions]']");
|
194
|
+
var perms_sel = $("select[name^='generic_file[permissions]']");
|
195
|
+
var flag = 1;
|
196
|
+
perms_input.each(function(index, form_input) {
|
197
|
+
// if the name is already being used - return false (not valid)
|
198
|
+
if (patt.test(form_input.name)) {
|
199
|
+
flag = 0;
|
200
|
+
}
|
201
|
+
});
|
202
|
+
if (flag) {
|
203
|
+
perms_sel.each(function(index, form_input) {
|
204
|
+
// if the name is already being used - return false (not valid)
|
205
|
+
if (patt.test(form_input.name)) {
|
206
|
+
flag = 0;
|
207
|
+
}
|
208
|
+
});
|
209
|
+
}
|
210
|
+
// putting a return false inside the each block
|
211
|
+
// was not working. Not sure why would seem better
|
212
|
+
// rather than setting this flag var
|
213
|
+
return (flag ? true : false);
|
214
|
+
}
|
215
|
+
|
216
|
+
|