1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-06-29 16:37:56 +00:00
seahub/static/scripts/app/views/group-settings.js

353 lines
13 KiB
JavaScript
Raw Normal View History

2016-01-06 08:28:26 +00:00
define([
'jquery',
'underscore',
'backbone',
'common',
'app/views/group-manage-members',
'app/views/widgets/popover'
], function($, _, Backbone, Common, ManageMembersView, PopoverView) {
2016-01-06 08:28:26 +00:00
'use strict';
var View = PopoverView.extend({
id: 'group-settings',
2016-04-27 06:48:25 +00:00
className: 'sf-popover',
2016-01-06 08:28:26 +00:00
template: _.template($('#group-settings-tmpl').html()),
contentTemplate: _.template($('#group-settings-content-tmpl').html()),
2016-01-06 08:28:26 +00:00
renameTemplate: _.template($('#group-rename-form-tmpl').html()),
transferTemplate: _.template($('#group-transfer-form-tmpl').html()),
importMembersTemplate: _.template($('#group-import-members-form-tmpl').html()),
initialize: function(options) {
PopoverView.prototype.initialize.call(this);
2016-01-06 08:28:26 +00:00
this.groupView = options.groupView;
this.render();
2016-01-06 08:28:26 +00:00
},
events: {
'mouseenter .group-setting-item': 'highlightItem',
'mouseleave .group-setting-item': 'rmHighlightItem',
'click .group-setting-item': 'manageGroup'
},
render: function() {
this.$el.html(this.template());
},
showContent: function() {
2016-04-27 06:48:25 +00:00
this.$listContainer = this.$('.sf-popover-con');
2016-01-06 08:28:26 +00:00
// the user's role in this group
this.is_owner = false;
2016-01-06 08:28:26 +00:00
this.is_admin = false;
if (app.pageOptions.username == this.groupView.group.owner) {
2016-01-30 08:23:52 +00:00
this.is_owner = true;
} else if ($.inArray(app.pageOptions.username, this.groupView.group.admins) != -1) {
2016-01-30 08:23:52 +00:00
this.is_admin = true;
}
this.$listContainer.html(this.contentTemplate({
2016-01-30 08:23:52 +00:00
'is_owner': this.is_owner,
'is_admin': this.is_admin,
'wiki_enabled': this.groupView.group.wiki_enabled
}));
2016-01-06 08:28:26 +00:00
var $icon = $("#group-settings-icon");
$icon.after(this.$el);
2016-01-06 08:28:26 +00:00
},
highlightItem: function(e) {
$(e.currentTarget).addClass('hl');
},
rmHighlightItem: function(e) {
$(e.currentTarget).removeClass('hl');
},
manageGroup: function(e) {
switch($(e.currentTarget).data('op')) {
case 'rename':
this.rename();
break;
case 'transfer':
this.transfer();
break;
2016-01-30 08:23:52 +00:00
case 'add-wiki':
this.toggleWiki('on');
break;
case 'remove-wiki':
this.toggleWiki('off');
break;
2016-01-06 08:28:26 +00:00
case 'import-members':
this.importMembers();
break;
case 'manage-members':
this.manageMembers();
break;
case 'dismiss':
this.dismiss();
break;
case 'leave':
this.leave();
break;
}
this.hide();
2016-04-17 02:23:28 +00:00
return false;
2016-01-06 08:28:26 +00:00
},
rename: function() {
var _this = this;
var $form = $(this.renameTemplate());
$form.modal();
2016-01-06 08:28:26 +00:00
$('#simplemodal-container').css({'width':'auto', 'height':'auto'});
$form.on('submit', function() {
2016-01-30 08:23:52 +00:00
var new_name = $.trim($('[name="new_name"]', $(this)).val());
2016-04-23 03:59:39 +00:00
if (!new_name || new_name == _this.groupView.group.name) {
2016-01-06 08:28:26 +00:00
return false;
}
var $submitBtn = $('[type="submit"]', $(this));
Common.disableButton($submitBtn);
$.ajax({
url: Common.getUrl({
2016-01-30 08:23:52 +00:00
'name': 'group',
'group_id': _this.groupView.group.id
2016-01-06 08:28:26 +00:00
}),
type: 'put',
dataType: 'json',
2016-01-30 08:23:52 +00:00
beforeSend: Common.prepareCSRFToken,
2016-01-06 08:28:26 +00:00
data: {
'name': new_name
},
success: function() {
$.modal.close();
2017-12-05 09:53:45 +00:00
_this.groupView.updateName(new_name);
app.ui.sideNavView.updateGroups();
2016-01-06 08:28:26 +00:00
},
error: function(xhr) {
2018-07-31 10:15:44 +00:00
var error_msg = Common.prepareAjaxErrorMsg(xhr);
2016-01-06 08:28:26 +00:00
$('.error', $form).html(error_msg).show();
Common.enableButton($submitBtn);
}
});
return false;
});
},
transfer: function() {
var _this = this;
var $form = $(this.transferTemplate());
2016-12-14 08:31:37 +00:00
$form.modal({focus:false, minWidth:268});
2016-01-06 08:28:26 +00:00
$('#simplemodal-container').css({'width':'auto', 'height':'auto'});
$('[name="email"]', $form).select2($.extend(
Common.contactInputOptionsForSelect2(), {
width: '268px',
maximumSelectionSize: 1,
placeholder: gettext("Search user or enter email and press Enter"), // to override 'placeholder' returned by `Common.conta...`
formatSelectionTooBig: gettext("You cannot select any more choices")
2016-01-06 08:28:26 +00:00
}));
$form.on('submit', function() {
var email = $.trim($('[name="email"]', $(this)).val());
if (!email) {
2016-01-06 08:28:26 +00:00
return false;
}
2016-05-06 06:48:48 +00:00
if (email == _this.groupView.group.owner) {
2016-01-06 08:28:26 +00:00
return false;
}
var $submitBtn = $('[type="submit"]', $(this));
Common.disableButton($submitBtn);
$.ajax({
url: Common.getUrl({
2016-01-30 08:23:52 +00:00
'name': 'group',
'group_id': _this.groupView.group.id
2016-01-06 08:28:26 +00:00
}),
type: 'put',
dataType: 'json',
2016-01-30 08:23:52 +00:00
beforeSend: Common.prepareCSRFToken,
2016-01-06 08:28:26 +00:00
data: {
'owner': email
2016-01-06 08:28:26 +00:00
},
2017-11-13 06:28:21 +00:00
success: function(data) {
_this.groupView.group = data;
2016-05-06 06:48:48 +00:00
Common.feedback(gettext("Successfully transferred the group. You are now a normal member of the group."), 'success');
2016-01-06 08:28:26 +00:00
$.modal.close();
},
error: function(xhr) {
2018-07-31 10:15:44 +00:00
var error_msg = Common.prepareAjaxErrorMsg(xhr);
2016-01-06 08:28:26 +00:00
$('.error', $form).html(error_msg).show();
Common.enableButton($submitBtn);
}
});
return false;
});
},
2016-01-30 08:23:52 +00:00
toggleWiki: function(status) {
var _this = this;
var wiki_enabled;
if (status == 'on') {
wiki_enabled = 'true';
} else {
wiki_enabled = 'false';
}
$.ajax({
url: Common.getUrl({
'name': 'group',
'group_id': _this.groupView.group.id
2016-01-30 08:23:52 +00:00
}),
type: 'put',
dataType: 'json',
beforeSend: Common.prepareCSRFToken,
data: {
'wiki_enabled': wiki_enabled
},
2017-12-05 09:53:45 +00:00
success: function(data) {
2016-01-30 08:23:52 +00:00
_this.hide();
2017-12-05 09:53:45 +00:00
_this.groupView.group = data;
_this.groupView.renderToolbar2({
'id': data.id,
'wiki_enabled': data.wiki_enabled
});
2016-01-30 08:23:52 +00:00
},
error: function(xhr) {
2018-07-31 10:15:44 +00:00
var error_msg = Common.prepareAjaxErrorMsg(xhr);
2016-01-30 08:23:52 +00:00
Common.feedback(error_msg, 'error');
_this.hide();
}
});
},
2016-01-06 08:28:26 +00:00
importMembers: function() {
var _this = this;
var $form = $(this.importMembersTemplate());
$form.modal({focus:false});
$('#simplemodal-container').css({'width':'auto', 'height':'auto'});
$form.on('submit', function() {
2016-01-06 08:28:26 +00:00
var $fileInput = $('[name=file]', $form)[0];
var $error = $('.error', $form);
2016-01-06 08:28:26 +00:00
if (!$fileInput.files.length) {
$error.html(gettext("Please choose a CSV file")).removeClass('hide');
2016-01-06 08:28:26 +00:00
return false;
}
var $submitBtn = $('[type="submit"]', $(this));
Common.disableButton($submitBtn);
var file = $fileInput.files[0];
2016-01-30 08:23:52 +00:00
var formData = new FormData();
2016-01-06 08:28:26 +00:00
formData.append('file', file);
$.ajax({
url: Common.getUrl({
'name': 'group_import_members',
'group_id': _this.groupView.group.id
2016-01-06 08:28:26 +00:00
}),
type: 'post',
dataType: 'json',
data: formData,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
beforeSend: Common.prepareCSRFToken,
success: function(data) {
if (data.failed.length > 0) {
var err_msg = '';
$(data.failed).each(function(index, item) {
2017-02-09 06:59:49 +00:00
err_msg += Common.HTMLescape(item.email) + ': ' + Common.HTMLescape(item.error_msg) + '<br />';
});
$error.html(err_msg).removeClass('hide');
Common.enableButton($submitBtn);
} else {
$.modal.close();
Common.feedback(gettext("Successfully imported."), 'success');
}
2016-01-06 08:28:26 +00:00
},
error: function(xhr) {
2018-07-31 10:15:44 +00:00
var error_msg = Common.prepareAjaxErrorMsg(xhr);
$error.html(error_msg).removeClass('hide');
Common.enableButton($submitBtn);
2016-01-06 08:28:26 +00:00
}
});
return false;
});
},
manageMembers: function() {
new ManageMembersView({
2016-04-05 09:51:44 +00:00
'group_id': this.groupView.group.id,
'group_name': this.groupView.group.name,
2016-01-06 08:28:26 +00:00
'is_owner': this.is_owner
});
},
dismiss: function() {
var _this = this;
var title = gettext('Dismiss Group');
var content = gettext('Really want to dismiss this group?');
var yesCallback = function () {
$.ajax({
url: Common.getUrl({
2016-01-30 08:23:52 +00:00
'name': 'group',
'group_id': _this.groupView.group.id
2016-01-06 08:28:26 +00:00
}),
type: 'delete',
dataType: 'json',
2016-01-30 08:23:52 +00:00
beforeSend: Common.prepareCSRFToken,
2016-01-06 08:28:26 +00:00
success: function() {
app.ui.sideNavView.updateGroups();
2016-01-06 08:28:26 +00:00
app.router.navigate('groups/', {trigger: true});
},
error: function(xhr) {
2018-07-31 10:15:44 +00:00
var error_msg = Common.prepareAjaxErrorMsg(xhr);
2016-01-06 08:28:26 +00:00
Common.feedback(error_msg, 'error');
},
complete: function() {
$.modal.close();
}
});
};
Common.showConfirm(title, content, yesCallback);
},
leave: function() {
var _this = this;
var title = gettext('Quit Group');
var content = gettext('Are you sure you want to quit this group?');
var yesCallback = function () {
$.ajax({
url: Common.getUrl({
'name': 'group_member',
'group_id': _this.groupView.group.id,
2017-12-05 09:53:45 +00:00
'email': encodeURIComponent(app.pageOptions.username)
2016-01-06 08:28:26 +00:00
}),
type: 'delete',
dataType: 'json',
beforeSend: Common.prepareCSRFToken,
success: function() {
app.ui.sideNavView.updateGroups();
2016-01-06 08:28:26 +00:00
app.router.navigate('groups/', {trigger: true});
},
error: function(xhr) {
2018-07-31 10:15:44 +00:00
var error_msg = Common.prepareAjaxErrorMsg(xhr);
2016-01-06 08:28:26 +00:00
Common.feedback(error_msg, 'error');
},
complete: function() {
$.modal.close();
}
});
};
Common.showConfirm(title, content, yesCallback);
}
});
return View;
});