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

[org repo] bugfix & improvment

This commit is contained in:
llj
2015-04-21 20:18:24 +08:00
committed by Daniel Pan
parent e808ce2bc8
commit be1e9762af
5 changed files with 106 additions and 48 deletions

View File

@@ -68,19 +68,19 @@
<script type="text/template" id="organization-repo-tmpl">
<td>
<% if (encrypted) { %>
<img src="<%= app.config.mediaUrl %>img/sync-folder-encrypt-20.png" title="{% trans "Encrypted" %}" alt="" />
<img src="{{ MEDIA_URL }}img/sync-folder-encrypt-20.png" title="{% trans "Encrypted" %}" alt="" />
<% } else { %>
<% if (permission == 'rw') { %>
<img src="<%= app.config.mediaUrl %>img/sync-folder-20.png?t=1387267140" title="{% trans "Read-Write" %}" alt="" />
<img src="{{ MEDIA_URL }}img/sync-folder-20.png?t=1387267140" title="{% trans "Read-Write" %}" alt="" />
<% } else { %>
<img src="<%= app.config.mediaUrl %>img/folder-no-write-20.png?t=1387267140" title="{% trans "Read-Only" %}" alt="" />
<img src="{{ MEDIA_URL }}img/folder-no-write-20.png?t=1387267140" title="{% trans "Read-Only" %}" alt="" />
<% } %>
<% } %>
</td>
<td><a href="#org/lib/<%= id %>"><%- name %></a></td>
<td class="alc">
<% if (show_unshare_btn) { %>
<img src="<%= app.config.mediaUrl%>img/delete-orange.png" alt="" class="cancel-share op-icon vh" title="{% trans "Unshare" %}" />
<% if (app.pageOptions.is_staff || owner == app.pageOptions.username) { %>
<img src="{{ MEDIA_URL }}img/delete-orange.png" alt="" class="cancel-share op-icon vh" title="{% trans "Unshare" %}" />
<% } %>
</td>
<td><%- size_formatted %></td>

View File

@@ -180,6 +180,8 @@ urlpatterns = patterns('',
## ajax lib
url(r'^ajax/lib/(?P<repo_id>[-0-9a-f]{36})/dir/$', list_lib_dir, name="list_lib_dir"),
url(r'^ajax/repo/unsetinnerpub/(?P<repo_id>[-0-9a-f]{36})/$', ajax_unsetinnerpub, name='unsetinnerpub'),
### Organizaion ###
url(r'^pubinfo/libraries/$', pubrepo, name='pubrepo'),
url(r'^ajax/publicrepo/create/$', public_repo_create, name='public_repo_create'),

View File

@@ -53,7 +53,7 @@ from seahub.utils import check_filename_with_rename, EMPTY_SHA1, \
new_merge_with_no_conflict, get_commit_before_new_merge, \
get_repo_last_modify, gen_file_upload_url, is_org_context, \
get_org_user_events, get_user_events, get_file_type_and_ext, \
is_valid_username, send_perm_audit_msg
is_valid_username, send_perm_audit_msg, get_origin_repo_info
from seahub.utils.repo import check_group_folder_perm_args, \
check_user_folder_perm_args, get_sub_repo_abbrev_origin_path
from seahub.utils.star import star_file, unstar_file
@@ -2505,3 +2505,66 @@ def toggle_personal_modules(request):
return HttpResponse(json.dumps({ "success": True }),
content_type=content_type)
@login_required_ajax
def ajax_unsetinnerpub(request, repo_id):
"""
Unshare repos in organization.
"""
content_type = 'application/json; charset=utf-8'
result = {}
repo = get_repo(repo_id)
if not repo:
result["error"] = _('Library does not exist.')
return HttpResponse(json.dumps(result),
status=400, content_type=content_type)
perm = request.GET.get('permission', None)
if perm is None:
result["error"] = _(u'Argument missing')
return HttpResponse(json.dumps(result),
status=400, content_type=content_type)
# permission check
username = request.user.username
if is_org_context(request):
org_id = request.user.org.org_id
repo_owner = seafile_api.get_org_repo_owner(repo.id)
is_repo_owner = True if repo_owner == username else False
if not (request.user.org.is_staff or is_repo_owner):
result["error"] = _('Permission denied.')
return HttpResponse(json.dumps(result),
status=403, content_type=content_type)
else:
repo_owner = seafile_api.get_repo_owner(repo.id)
is_repo_owner = True if repo_owner == username else False
if not (request.user.is_staff or is_repo_owner):
result["error"] = _('Permission denied.')
return HttpResponse(json.dumps(result),
status=403, content_type=content_type)
try:
if is_org_context(request):
org_id = request.user.org.org_id
seaserv.seafserv_threaded_rpc.unset_org_inner_pub_repo(org_id,
repo.id)
else:
seaserv.unset_inner_pub_repo(repo.id)
origin_repo_id, origin_path = get_origin_repo_info(repo.id)
if origin_repo_id is not None:
perm_repo_id = origin_repo_id
perm_path = origin_path
else:
perm_repo_id = repo.id
perm_path = '/'
send_perm_audit_msg('delete-repo-perm', username, 'all', \
perm_repo_id, perm_path, perm)
return HttpResponse(json.dumps({ "success": True }), content_type=content_type)
except SearpcError:
return HttpResponse(json.dumps({ "success": False }),
status=500, content_type=content_type)

View File

@@ -11,58 +11,48 @@ define([
template: _.template($('#organization-repo-tmpl').html()),
events: {
'mouseenter': 'showAction',
'mouseleave': 'hideAction',
'click .cancel-share': 'removeShare'
},
initialize: function() {
},
removeShare: function(e) {
var _this = this,
success_callback = 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) {
$('#organization-repos table').hide();
$('#organization-repos .empty-tips').show();
};
};
Common.ajaxGet({
'get_url': Common.getUrl({name: 'ajax_repo_remove_share'}),
'data': {
'repo_id': this.model.get('id'),
'share_type': this.model.get('share_type')
},
'after_op_success': success_callback
});
},
render: function() {
var data, show_unshare_btn;
if (this.model.get('share_from') == app.pageOptions.current_user || app.pageOptions.is_staff == true) {
show_unshare_btn = true;
} else {
show_unshare_btn = false;
};
data = $.extend(this.model.toJSON(), {'show_unshare_btn': show_unshare_btn});
this.$el.html(this.template(data));
this.$el.html(this.template(this.model.toJSON()));
return this;
},
showAction: function() {
this.$el.addClass('hl');
this.$el.find('.op-icon').removeClass('vh');
events: {
'mouseenter': 'highlight',
'mouseleave': 'rmHighlight',
'click .cancel-share': 'removeShare'
},
hideAction: function() {
this.$el.removeClass('hl');
this.$el.find('.op-icon').addClass('vh');
highlight: function() {
this.$el.addClass('hl').find('.op-icon').removeClass('vh');
},
rmHighlight: function() {
this.$el.removeClass('hl').find('.op-icon').addClass('vh');
},
removeShare: function(e) {
var el = this.$el;
Common.ajaxGet({
get_url: Common.getUrl({
name:'ajax_unsetinnerpub',
repo_id: this.model.get('id')
}),
data: {
'permission': this.model.get('permission')
},
after_op_success: function () {
el.remove();
Common.feedback(gettext('Success'), 'success', Common.SUCCESS_TIMOUT);
},
after_op_error: function() {
// TODO
}
});
}
});
return OrganizationRepoView;

View File

@@ -112,7 +112,10 @@ define([
case 'group_repos': return siteRoot + 'api2/groups/' + options.group_id + '/repos/';
case 'group_basic_info': return siteRoot + 'ajax/group/' + options.group_id + '/basic-info/';
case 'toggle_group_modules': return siteRoot + 'ajax/group/' + options.group_id + '/toggle-modules/';
case 'toggle_personal_modules': return siteRoot + 'ajax/toggle-personal-modules/';
case 'ajax_unsetinnerpub': return siteRoot + 'ajax/repo/unsetinnerpub/' + options.repo_id + '/';
}
},