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

show/delete shared repo

This commit is contained in:
lian
2015-03-06 17:53:41 +08:00
committed by Daniel Pan
parent 1496940aa4
commit c42822969d
8 changed files with 165 additions and 23 deletions

View File

@@ -13,11 +13,11 @@ define([
initialize: function(options) {
this.$tabs = $('#repo-tabs');
this.$table = this.$('#repos-shared-to-me table');
this.$table = $('#repos-shared-to-me table');
this.$tableHead = $('thead', this.$table);
this.$tableBody = $('tbody', this.$table);
this.$loadingTip = $('.loading-tip', this.$tabs);
this.$emptyTip = $('.empty-tips', this.tabs);
this.$emptyTip = $('#repos-shared-to-me .empty-tips');
this.repos = new RepoCollection({type: 'shared'});
this.listenTo(this.repos, 'add', this.addOne);
@@ -25,7 +25,7 @@ define([
},
addOne: function(repo, collection, options) {
var view = new SharedRepoView({model: repo});
var view = new SharedRepoView({model: repo, collection: this.repos});
if (options.prepend) {
this.$tableBody.prepend(view.render().el);
} else {
@@ -69,7 +69,6 @@ define([
$('#shared-lib-tab', this.$tabs).parent().removeClass('ui-state-active');
},
});
return SharedReposView;

View File

@@ -15,12 +15,33 @@ define([
events: {
'mouseenter': 'showAction',
'mouseleave': 'hideAction',
'click .repo-delete-btn': 'delete',
'click .repo-share-btn': 'share'
'click .unshare-btn': 'removeShare'
},
initialize: function() {
this.listenTo(this.model, 'destroy', this.remove);
},
removeShare: function(e) {
var _this = this,
after_leave_success = function(data) {
Common.feedback(gettext('Success'), 'success', Common.SUCCESS_TIMOUT);
_this.$el.remove();
_this.collection.remove(_this.model, {silent: true});
if (_this.collection.length == 0) {
$('#repos-shared-to-me table').hide();
$('#repos-shared-to-me .empty-tips').show();
};
};
Common.ajaxGet({
'get_url': Common.getUrl({name: 'ajax_repo_remove_share'}),
'data': {
'repo_id': this.model.get('id'),
'from': this.model.get('owner'),
'share_type': this.model.get('share_type')
},
'after_op_success': after_leave_success
});
},
render: function() {
@@ -37,8 +58,6 @@ define([
this.$el.removeClass('hl');
this.$el.find('.op-icon').addClass('vh');
},
});
return SharedRepoView;

View File

@@ -78,6 +78,8 @@ define([
case 'cancel_cp': return siteRoot + 'ajax/cancel_cp/';
case 'get_shared_link': return '';
case 'get_shared_upload_link': return '';
case 'ajax_repo_remove_share': return siteRoot + 'share/ajax/repo_remove_share/';
}
},
@@ -188,6 +190,36 @@ define([
}
},
ajaxGet: function(params) {
var _this = this,
get_url = params.get_url,
data = params.data,
after_op_error,
after_op_success = params.after_op_success;
if (params.hasOwnProperty('after_op_error')) {
after_op_error = params.after_op_error;
} else {
after_op_error = function(xhr, textStatus, errorThrown) {
var err;
if (xhr.responseText) {
err = $.parseJSON(xhr.responseText).error;
} else {
err = gettext("Failed. Please check the network.");
}
_this.feedback(err, 'error', _this.ERROR_TIMEOUT);
}
};
$.ajax({
url: get_url,
cache: false,
dataType: 'json',
data: data,
success: function(data) {after_op_success(data);},
error: after_op_error
});
},
ajaxPost: function(params) {
var form = params.form,
post_url = params.post_url,
@@ -212,7 +244,7 @@ define([
if (xhr.responseText) {
err = $.parseJSON(xhr.responseText).error;
} else {
err = getText("Failed. Please check the network.");
err = gettext("Failed. Please check the network.");
}
this.feedback(err);
this.enableButton(submit_btn);

View File

@@ -574,6 +574,7 @@ class Repos(APIView):
"size":r.size,
"encrypted":r.encrypted,
"permission": r.user_perm,
"share_type": r.share_type,
}
if r.encrypted:
repo["enc_version"] = r.enc_version

View File

@@ -33,4 +33,5 @@ urlpatterns = patterns('',
# url('^remove/(?P<token>[^/]{24,24})/$', remove_anonymous_share, name='remove_anonymous_share'),
# url('^(?P<token>[^/]{24})/$', anonymous_share_confirm, name='anonymous_share_confirm'),
url(r'^ajax/repo_remove_share/$', ajax_repo_remove_share, name='ajax_repo_remove_share'),
)

View File

@@ -19,7 +19,7 @@ from django.utils.html import escape
import seaserv
from seaserv import seafile_api
from seaserv import ccnet_threaded_rpc, is_org_group, \
get_org_id_by_group, del_org_group_repo
get_org_id_by_group, del_org_group_repo, unset_inner_pub_repo
from pysearpc import SearpcError
from seahub.share.forms import RepoShareForm, FileLinkShareForm, \
@@ -288,6 +288,92 @@ def share_repo(request):
return HttpResponseRedirect(next)
@login_required_ajax
def ajax_repo_remove_share(request):
"""
Remove repo share if this repo is shared to user/group/public
"""
repo_id = request.GET.get('repo_id', None)
share_type = request.GET.get('share_type', None)
content_type = 'application/json; charset=utf-8'
if not seafile_api.get_repo(repo_id):
return HttpResponse(json.dumps({'error': _(u'Library does not exist')}), status=400,
content_type=content_type)
username = request.user.username
if share_type == 'personal':
from_email = request.GET.get('from', None)
if not is_valid_username(from_email):
return HttpResponse(json.dumps({'error': _(u'Invalid argument')}), status=400,
content_type=content_type)
if is_org_context(request):
org_id = request.user.org.org_id
org_remove_share(org_id, repo_id, from_email, username)
else:
seaserv.remove_share(repo_id, from_email, username)
return HttpResponse(json.dumps({'success': True}), status=200,
content_type=content_type)
elif share_type == 'group':
from_email = request.GET.get('from', None)
if not is_valid_username(from_email):
return HttpResponse(json.dumps({'error': _(u'Invalid argument')}), status=400,
content_type=content_type)
group_id = request.GET.get('group_id', None)
group = seaserv.get_group(group_id)
if not group:
return HttpResponse(json.dumps({'error': _(u"Group does not exist")}), status=400,
content_type=content_type)
if seaserv.check_group_staff(group_id, username) or \
seafile_api.is_repo_owner(username, repo_id):
if is_org_group(group_id):
org_id = get_org_id_by_group(group_id)
del_org_group_repo(repo_id, org_id, group_id)
else:
seafile_api.unset_group_repo(repo_id, group_id, from_email)
return HttpResponse(json.dumps({'success': True}), status=200,
content_type=content_type)
else:
return HttpResponse(json.dumps({'error': _(u'Permission denied')}), status=400,
content_type=content_type)
elif share_type == 'public':
if is_org_context(request):
org_repo_owner = seafile_api.get_org_repo_owner(repo_id)
is_org_repo_owner = True if org_repo_owner == username else False
if request.user.org.is_staff or is_org_repo_owner:
org_id = request.user.org.org_id
seaserv.seafserv_threaded_rpc.unset_org_inner_pub_repo(org_id,
repo_id)
return HttpResponse(json.dumps({'success': True}), status=200,
content_type=content_type)
else:
return HttpResponse(json.dumps({'error': _(u'Permission denied')}), status=400,
content_type=content_type)
else:
if seafile_api.is_repo_owner(username, repo_id) or \
request.user.is_staff:
unset_inner_pub_repo(repo_id)
return HttpResponse(json.dumps({'success': True}), status=200,
content_type=content_type)
else:
return HttpResponse(json.dumps({'error': _(u'Permission denied')}), status=400,
content_type=content_type)
else:
return HttpResponse(json.dumps({'error': _(u'Invalid argument')}), status=400,
content_type=content_type)
@login_required
def repo_remove_share(request):
"""

View File

@@ -1,18 +1,19 @@
{% load i18n %}
<td>
<% if (encrypted) { %>
<img src="{{ MEDIA_URL }}img/sync-folder-encrypt-20.png" title="{% trans 'Read-Write' %}" alt="directory icon" />
<img src="{{MEDIA_URL}}img/sync-folder-encrypt-20.png" title="{% trans "Read-Write" %}" alt="{% trans "directory icon" %}" />
<% } else { %>
<img src="{{ MEDIA_URL }}img/sync-folder-20.png" title="Read-Write" alt="directory icon" />
<% if (permission == 'rw') { %>
<img src="{{MEDIA_URL}}img/sync-folder-20.png?t=1387267140" title="{% trans "Read-Write" %}" alt="{% trans "directory icon" %}" />
<% } else { %>
<img src="{{MEDIA_URL}}img/folder-no-write-20.png?t=1387267140" title="{% trans "Read-Only" %}" alt="{% trans "directory icon" %}" />
<% } %>
<% } %>
</td>
<td><a href="#shared-libs/lib/<%= id %>"><%- name %></a></td>
<td><%- desc %></td>
<td><%- mtime_relative %></td>
<td></td>
<td><%- owner %></td>
<td>
<div>
<img src="{{ MEDIA_URL }}img/share_20.png" alt="" class="repo-share-btn op-icon vh" title="Share" />
<img src="{{ MEDIA_URL }}img/rm.png" class="repo-delete-btn op-icon vh" title="Delete" />
</div>
<span class="icon-trash unshare-btn op-icon vh" title="{% trans "Leave Share" %}"></span>
</td>

View File

@@ -113,7 +113,7 @@
</div>
</div>
<div id="repos-shared-to-me" class="hide">
<div id="repos-shared-to-me">
<table class="hide">
<thead>
<tr>
@@ -127,6 +127,9 @@
</thead>
<tbody></tbody>
</table>
<div class="empty-tips hide">
<h2 class="alc">{% trans "No library is shared to you" %}</h2>
</div>
</div>
<img class="loading-tip" src="{{MEDIA_URL}}img/loading-icon.gif" alt="{% trans 'Loading...' %}" />