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:
@@ -68,19 +68,19 @@
|
|||||||
<script type="text/template" id="organization-repo-tmpl">
|
<script type="text/template" id="organization-repo-tmpl">
|
||||||
<td>
|
<td>
|
||||||
<% if (encrypted) { %>
|
<% 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 { %>
|
<% } else { %>
|
||||||
<% if (permission == 'rw') { %>
|
<% 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 { %>
|
<% } 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>
|
||||||
<td><a href="#org/lib/<%= id %>"><%- name %></a></td>
|
<td><a href="#org/lib/<%= id %>"><%- name %></a></td>
|
||||||
<td class="alc">
|
<td class="alc">
|
||||||
<% if (show_unshare_btn) { %>
|
<% if (app.pageOptions.is_staff || owner == app.pageOptions.username) { %>
|
||||||
<img src="<%= app.config.mediaUrl%>img/delete-orange.png" alt="" class="cancel-share op-icon vh" title="{% trans "Unshare" %}" />
|
<img src="{{ MEDIA_URL }}img/delete-orange.png" alt="" class="cancel-share op-icon vh" title="{% trans "Unshare" %}" />
|
||||||
<% } %>
|
<% } %>
|
||||||
</td>
|
</td>
|
||||||
<td><%- size_formatted %></td>
|
<td><%- size_formatted %></td>
|
||||||
|
@@ -180,6 +180,8 @@ urlpatterns = patterns('',
|
|||||||
## ajax lib
|
## ajax lib
|
||||||
url(r'^ajax/lib/(?P<repo_id>[-0-9a-f]{36})/dir/$', list_lib_dir, name="list_lib_dir"),
|
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 ###
|
### Organizaion ###
|
||||||
url(r'^pubinfo/libraries/$', pubrepo, name='pubrepo'),
|
url(r'^pubinfo/libraries/$', pubrepo, name='pubrepo'),
|
||||||
url(r'^ajax/publicrepo/create/$', public_repo_create, name='public_repo_create'),
|
url(r'^ajax/publicrepo/create/$', public_repo_create, name='public_repo_create'),
|
||||||
|
@@ -53,7 +53,7 @@ from seahub.utils import check_filename_with_rename, EMPTY_SHA1, \
|
|||||||
new_merge_with_no_conflict, get_commit_before_new_merge, \
|
new_merge_with_no_conflict, get_commit_before_new_merge, \
|
||||||
get_repo_last_modify, gen_file_upload_url, is_org_context, \
|
get_repo_last_modify, gen_file_upload_url, is_org_context, \
|
||||||
get_org_user_events, get_user_events, get_file_type_and_ext, \
|
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, \
|
from seahub.utils.repo import check_group_folder_perm_args, \
|
||||||
check_user_folder_perm_args, get_sub_repo_abbrev_origin_path
|
check_user_folder_perm_args, get_sub_repo_abbrev_origin_path
|
||||||
from seahub.utils.star import star_file, unstar_file
|
from seahub.utils.star import star_file, unstar_file
|
||||||
@@ -2505,3 +2505,66 @@ def toggle_personal_modules(request):
|
|||||||
|
|
||||||
return HttpResponse(json.dumps({ "success": True }),
|
return HttpResponse(json.dumps({ "success": True }),
|
||||||
content_type=content_type)
|
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)
|
||||||
|
@@ -11,58 +11,48 @@ define([
|
|||||||
|
|
||||||
template: _.template($('#organization-repo-tmpl').html()),
|
template: _.template($('#organization-repo-tmpl').html()),
|
||||||
|
|
||||||
events: {
|
|
||||||
'mouseenter': 'showAction',
|
|
||||||
'mouseleave': 'hideAction',
|
|
||||||
'click .cancel-share': 'removeShare'
|
|
||||||
},
|
|
||||||
|
|
||||||
initialize: function() {
|
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() {
|
render: function() {
|
||||||
var data, show_unshare_btn;
|
this.$el.html(this.template(this.model.toJSON()));
|
||||||
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));
|
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
showAction: function() {
|
events: {
|
||||||
this.$el.addClass('hl');
|
'mouseenter': 'highlight',
|
||||||
this.$el.find('.op-icon').removeClass('vh');
|
'mouseleave': 'rmHighlight',
|
||||||
|
'click .cancel-share': 'removeShare'
|
||||||
},
|
},
|
||||||
|
|
||||||
hideAction: function() {
|
highlight: function() {
|
||||||
this.$el.removeClass('hl');
|
this.$el.addClass('hl').find('.op-icon').removeClass('vh');
|
||||||
this.$el.find('.op-icon').addClass('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;
|
return OrganizationRepoView;
|
||||||
|
@@ -112,7 +112,10 @@ define([
|
|||||||
case 'group_repos': return siteRoot + 'api2/groups/' + options.group_id + '/repos/';
|
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 '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_group_modules': return siteRoot + 'ajax/group/' + options.group_id + '/toggle-modules/';
|
||||||
|
|
||||||
case 'toggle_personal_modules': return siteRoot + 'ajax/toggle-personal-modules/';
|
case 'toggle_personal_modules': return siteRoot + 'ajax/toggle-personal-modules/';
|
||||||
|
|
||||||
|
case 'ajax_unsetinnerpub': return siteRoot + 'ajax/repo/unsetinnerpub/' + options.repo_id + '/';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user