1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-01 15:09:14 +00:00

admin manage repo share

This commit is contained in:
lian
2016-08-03 18:17:24 +08:00
committed by lian
parent c4ffca620e
commit 92df1ef8d2
12 changed files with 1523 additions and 3 deletions

View File

@@ -0,0 +1,132 @@
define([
'jquery',
'underscore',
'backbone',
'common'
], function($, _, Backbone, Common) {
'use strict';
var FolderShareItemView = Backbone.View.extend({
tagName: 'tr',
template: _.template($('#folder-perm-item-tmpl').html()),
initialize: function(options) {
this.item_data = options.item_data;
this.repo_id = options.repo_id;
this.render();
},
render: function () {
this.$el.html(this.template(this.item_data));
return this;
},
events: {
'mouseenter': 'showOpIcons',
'mouseleave': 'hideOpIcons',
'click .perm-edit-icon': 'editIconClick',
'change .perm-toggle-select': 'editPerm',
'click .delete-icon': 'del'
},
showOpIcons: function () {
this.$el.find('.op-icon').removeClass('vh');
},
hideOpIcons: function () {
this.$el.find('.op-icon').addClass('vh');
},
editIconClick: function (e) {
$(e.currentTarget).closest('td')
.find('.perm').addClass('hide').end()
.find('.perm-toggle-select').removeClass('hide');
return false;
},
editPerm: function (e) {
var _this = this;
var item_data = this.item_data;
var perm = $(e.currentTarget).val();
var url, data;
if (item_data.for_user) {
url = Common.getUrl({name: 'admin_library_user_share', repo_id: this.repo_id});
data = {'permission': perm, 'user_email': item_data.user_email};
} else {
url = Common.getUrl({name: 'admin_library_group_share', repo_id: this.repo_id});
data = {'permission': perm, 'group_id': item_data.group_id};
}
$.ajax({
url: url,
dataType: 'json',
method: 'PUT',
beforeSend: Common.prepareCSRFToken,
data: data,
success: function (data) {
item_data.permission = data.permission;
_this.render();
},
error: function(xhr) {
var err_msg;
if (xhr.responseText) {
err_msg = gettext("Edit failed");
} else {
err_msg = gettext("Failed. Please check the network.");
}
if (item_data.for_user) {
$('#dir-user-share .error').html(err_msg).removeClass('hide');
} else {
$('#dir-group-group .error').html(err_msg).removeClass('hide');
}
}
});
},
del: function () {
var _this = this;
var item_data = this.item_data;
var url, data;
if (item_data.for_user) {
url = Common.getUrl({name: 'admin_library_user_share', repo_id: this.repo_id});
data = {'permission': item_data.permission, 'user_email': item_data.user_email};
} else {
url = Common.getUrl({name: 'admin_library_group_share', repo_id: this.repo_id});
data = {'permission': item_data.permission, 'group_id': item_data.group_id};
}
$.ajax({
url: url,
dataType: 'json',
method: 'DELETE',
beforeSend: Common.prepareCSRFToken,
data: data,
success: function () {
_this.remove();
},
error: function (xhr) {
var err_msg;
if (xhr.responseText) {
err_msg = gettext("Delete failed");
} else {
err_msg = gettext("Failed. Please check the network.");
}
if (item_data.for_user) {
$('#dir-user-share .error').html(err_msg).removeClass('hide');
} else {
$('#dir-group-group .error').html(err_msg).removeClass('hide');
}
}
});
return false;
}
});
return FolderShareItemView;
});

View File

@@ -6,8 +6,12 @@ define([
'moment',
'simplemodal',
'select2',
'jquery.ui.tabs',
'sysadmin-app/views/share',
'app/views/widgets/hl-item-view'
], function($, _, Backbone, Common, Moment, Simplemodal, Select2, HLItemView) {
], function($, _, Backbone, Common, Moment, Simplemodal,
Select2, Tabs, ShareView, HLItemView) {
'use strict';
var RepoView = HLItemView.extend({
@@ -17,10 +21,20 @@ define([
transferTemplate: _.template($('#library-transfer-form-tmpl').html()),
events: {
'click .repo-share-btn': 'share',
'click .repo-delete-btn': 'deleteLibrary',
'click .repo-transfer-btn': 'transferLibrary'
},
share: function() {
var options = {
'repo_id': this.model.get('id'),
'repo_name': this.model.get('name')
};
new ShareView(options);
return false;
},
initialize: function() {
HLItemView.prototype.initialize.call(this);
this.listenTo(this.model, "change", this.render);
@@ -31,7 +45,7 @@ define([
var repo_name = this.model.get('name');
var popupTitle = gettext("Delete Library");
var popupContent = gettext("Are you sure you want to delete %s ?").replace('%s', '<span class="op-target ellipsis ellipsis-op-target" title="' + Common.HTMLescape(repo_name) + '">' + Common.HTMLescape(repo_name) + '</span>');
var yesCallback = function() {
var yesCallback = function() {
$.ajax({
url: Common.getUrl({
'name':'admin-library',

View File

@@ -0,0 +1,274 @@
define([
'jquery',
'underscore',
'backbone',
'common',
'sysadmin-app/views/folder-share-item'
], function($, _, Backbone, Common, FolderShareItemView) {
'use strict';
var SharePopupView = Backbone.View.extend({
tagName: 'div',
id: 'admin-library-share-popup',
template: _.template($('#share-popup-tmpl').html()),
initialize: function(options) {
this.repo_id = options.repo_id;
this.repo_name = options.repo_name;
this.render();
this.$el.modal();
$('#simplemodal-container').css({'width':'auto', 'height':'auto'});
this.$("#share-tabs").tabs();
this.dirUserSharePanelInit();
this.dirGroupSharePanelInit();
var _this = this;
$(document).on('click', function(e) {
var target = e.target || event.srcElement;
if (!_this.$('.perm-edit-icon, .perm-toggle-select').is(target)) {
_this.$('.perm').removeClass('hide');
_this.$('.perm-toggle-select').addClass('hide');
}
});
},
render: function () {
this.$el.html(this.template({
title: gettext("Share {placeholder}")
.replace('{placeholder}', '<span class="op-target ellipsis ellipsis-op-target" title="' + Common.HTMLescape(this.repo_name) + '">' + Common.HTMLescape(this.repo_name) + '</span>'),
repo_id: this.repo_id,
}));
return this;
},
events: {
'click [type="checkbox"]': 'clickCheckbox',
'click #add-dir-user-share-item .submit': 'dirUserShare',
'click #add-dir-group-share-item .submit': 'dirGroupShare'
},
clickCheckbox: function(e) {
var $el = $(e.currentTarget);
// for link options such as 'password', 'expire'
$el.closest('.checkbox-label').next().toggleClass('hide');
},
dirUserSharePanelInit: function() {
var $dir_user_share_panel = this.$('#dir-user-share');
// show existing items
var $add_item = this.$('#add-dir-user-share-item');
var repo_id = this.repo_id;
$('[name="emails"]', $dir_user_share_panel).select2($.extend({
//width: '292px' // the container will copy class 'w100' from the original element to get width
}, Common.contactInputOptionsForSelect2()));
Common.ajaxGet({
'get_url': Common.getUrl({name: 'admin_library_user_shares', repo_id: repo_id}),
'after_op_success': function (data) {
$(data).each(function(index, item) {
var new_item = new FolderShareItemView({
'repo_id': repo_id,
'item_data': {
"user_email": item.user_email,
"user_name": item.user_name,
"permission": item.permission,
"for_user": true
}
});
$add_item.after(new_item.el);
});
}
});
$dir_user_share_panel.removeClass('hide');
this.$('.loading-tip').hide();
},
dirGroupSharePanelInit: function() {
var $dir_group_share_panel = this.$('#dir-group-share');
// show existing items
var $add_item = this.$('#add-dir-group-share-item');
var repo_id = this.repo_id;
$('[name="groups"]', $dir_group_share_panel).select2($.extend({
//width: '292px' // the container will copy class 'w100' from the original element to get width
}, Common.groupInputOptionsForSelect2()));
Common.ajaxGet({
'get_url': Common.getUrl({name: 'admin_library_group_shares', repo_id: repo_id}),
'after_op_success': function (data) {
$(data).each(function(index, item) {
var new_item = new FolderShareItemView({
'repo_id': repo_id,
'item_data': {
"group_id": item.group_id,
"group_name": item.group_name,
"permission": item.permission,
'for_user': false
}
});
$add_item.after(new_item.el);
});
}
});
$dir_group_share_panel.removeClass('hide');
this.$('.loading-tip').hide();
},
dirUserShare: function () {
var $user_share_item = this.$('#add-dir-user-share-item');
var $emails_input = $('[name="emails"]', $user_share_item),
emails = $emails_input.val(); // string
var $perm = $('[name="permission"]', $user_share_item),
perm = $perm.val();
if (!emails || !perm) {
return false;
}
var repo_id = this.repo_id;
var $submitBtn = $('[type="submit"]', $user_share_item);
var $error = $('#dir-user-share .error');
Common.disableButton($submitBtn);
$.ajax({
url: Common.getUrl({name: 'admin_library_user_shares', repo_id: repo_id}),
dataType: 'json',
method: 'POST',
beforeSend: Common.prepareCSRFToken,
traditional: true,
data: {
'email': emails.split(','),
'permission': perm
},
success: function(data) {
if (data.success.length > 0) {
$(data.success).each(function(index, item) {
var new_item = new FolderShareItemView({
'repo_id': repo_id,
'item_data': {
"user_email": item.user_email,
"user_name": item.user_name,
"permission": item.permission,
'for_user': true
}
});
$user_share_item.after(new_item.el);
});
$emails_input.select2("val", "");
$('[value="rw"]', $perm).attr('selected', 'selected');
$('[value="r"]', $perm).removeAttr('selected');
$error.addClass('hide');
}
if (data.failed.length > 0) {
var err_msg = '';
$(data.failed).each(function(index, item) {
err_msg += Common.HTMLescape(item.user_email) + ': ' + item.error_msg + '<br />';
});
$error.html(err_msg).removeClass('hide');
}
},
error: function(xhr) {
var err_msg;
if (xhr.responseText) {
var parsed_resp = $.parseJSON(xhr.responseText);
err_msg = parsed_resp.error||parsed_resp.error_msg;
} else {
err_msg = gettext("Failed. Please check the network.")
}
$error.html(err_msg).removeClass('hide');
},
complete: function() {
Common.enableButton($submitBtn);
}
});
},
dirGroupShare: function () {
var $group_share_item= this.$('#add-dir-group-share-item');
var $groups_input = $('[name="groups"]', $group_share_item),
groups = $groups_input.val(); // string
var $perm = $('[name="permission"]', $group_share_item),
perm = $perm.val();
if (!groups || !perm) {
return false;
}
var repo_id = this.repo_id;
var $error = $('#dir-group-share .error');
var $submitBtn = $('[type="submit"]', $group_share_item);
Common.disableButton($submitBtn);
$.ajax({
url: Common.getUrl({name: 'admin_library_group_shares',repo_id: repo_id}),
dataType: 'json',
method: 'POST',
beforeSend: Common.prepareCSRFToken,
traditional: true,
data: {
'group_id': groups.split(','),
'permission': perm
},
success: function(data) {
if (data.success.length > 0) {
$(data.success).each(function(index, item) {
var new_item = new FolderShareItemView({
'repo_id': repo_id,
'item_data': {
"group_id": item.group_id,
"group_name": item.group_name,
"permission": item.permission,
'for_user': false
}
});
$group_share_item.after(new_item.el);
});
$groups_input.select2("val", "");
$('[value="rw"]', $perm).attr('selected', 'selected');
$('[value="r"]', $perm).removeAttr('selected');
$error.addClass('hide');
}
if (data.failed.length > 0) {
var err_msg = '';
$(data.failed).each(function(index, item) {
err_msg += Common.HTMLescape(item.group_id) + ': ' + item.error_msg + '<br />';
});
$error.html(err_msg).removeClass('hide');
}
},
error: function(xhr) {
var err_msg;
if (xhr.responseText) {
var parsed_resp = $.parseJSON(xhr.responseText);
err_msg = parsed_resp.error||parsed_resp.error_msg;
} else {
err_msg = gettext("Failed. Please check the network.")
}
$error.html(err_msg).removeClass('hide');
},
complete: function() {
Common.enableButton($submitBtn);
}
});
}
});
return SharePopupView;
});