diff --git a/seahub/share/templates/share/list_priv_shared_folders.html b/seahub/share/templates/share/list_priv_shared_folders.html
index 348686dae8..b2a0c85f49 100644
--- a/seahub/share/templates/share/list_priv_shared_folders.html
+++ b/seahub/share/templates/share/list_priv_shared_folders.html
@@ -76,11 +76,8 @@ $('.share-permission-select').change(function() {
select_cont = $(this).parent(),
user = select_cont.prev(),
share_type = select_cont.parent().attr('data');
- {% if org %}
- var url = '{% url 'org_share_permission_admin' org.url_prefix %}?org_id={{ org.org_id }}&share_type=' + share_type;
- {% else %}
- var url = '{% url 'share_permission_admin' %}?share_type=' + share_type;
- {% endif %}
+ var url = '{% url 'share_permission_admin' %}?share_type=' + share_type;
+
$.ajax({
url: url,
type: 'POST',
diff --git a/seahub/share/templates/share/repos.html b/seahub/share/templates/share/repos.html
index 4eef93913d..ec5841d17d 100644
--- a/seahub/share/templates/share/repos.html
+++ b/seahub/share/templates/share/repos.html
@@ -50,7 +50,7 @@
{% trans "Unshare"%}
{% endif %}
{% if repo.props.share_type == 'public' %}
- {% trans "Unshare"%}
+ {% trans "Unshare"%}
{% endif %}
diff --git a/seahub/share/views.py b/seahub/share/views.py
index f4a9067275..883db80184 100644
--- a/seahub/share/views.py
+++ b/seahub/share/views.py
@@ -16,8 +16,8 @@ from django.contrib import messages
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_group_repos_by_owner, \
- remove_share
+ get_org_id_by_group, del_org_group_repo
+from pysearpc import SearpcError
from seahub.share.forms import RepoShareForm, FileLinkShareForm, \
UploadLinkShareForm
@@ -55,7 +55,16 @@ def get_org_group_repos_by_owner(org_id, username):
def list_org_inner_pub_repos_by_owner(org_id, username):
return seaserv.seafserv_threaded_rpc.list_org_inner_pub_repos_by_owner(
org_id, username)
-
+
+def org_share_repo(org_id, repo_id, from_user, to_user, permission):
+ return seaserv.seafserv_threaded_rpc.org_add_share(org_id, repo_id,
+ from_user, to_user,
+ permission)
+
+def org_remove_share(org_id, repo_id, from_user, to_user):
+ return seaserv.seafserv_threaded_rpc.org_remove_share(org_id, repo_id,
+ from_user, to_user)
+
########## functions
def share_to_public(request, repo, permission):
@@ -127,24 +136,37 @@ def share_to_user(request, repo, to_user, permission):
messages.error(request, msg)
return
- if is_registered_user(to_user):
- try:
+ # permission check
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ if not seaserv.ccnet_threaded_rpc.org_user_exists(org_id, to_user):
+ msg = _(u'Failed to share to %s, user is not found.') % to_user
+ messages.error(request, msg)
+ return
+ else:
+ if not is_registered_user(to_user):
+ msg = _(u'Failed to share to %s, as the email is not registered.') % to_user
+ messages.error(request, msg)
+ return
+
+ try:
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ org_share_repo(org_id, repo_id, from_user, to_user, permission)
+ else:
seafile_api.share_repo(repo_id, from_user, to_user, permission)
- except Exception, e:
+ except SearpcError as e:
logger.error(e)
msg = _(u'Failed to share to %s, please try again later.') % to_user
messages.error(request, msg)
- else:
- # send a signal when sharing repo successful
- share_repo_to_user_successful.send(sender=None,
- from_user=from_user,
- to_user=to_user, repo=repo)
- msg = _(u'Shared to %(email)s successfully,go check it at Shares.') % \
- {'email':to_user, 'share':reverse('share_admin')}
- messages.success(request, msg)
else:
- msg = _(u'Failed to share to %s, as the email is not registered.') % to_user
- messages.error(request, msg)
+ # send a signal when sharing repo successful
+ share_repo_to_user_successful.send(sender=None,
+ from_user=from_user,
+ to_user=to_user, repo=repo)
+ msg = _(u'Shared to %(email)s successfully, go check it at Shares.') % \
+ {'email': to_user, 'share': reverse('share_admin')}
+ messages.success(request, msg)
def check_user_share_quota(username, repo, users=[], groups=[]):
"""Check whether user has enough quota when share repo to users/groups.
@@ -266,7 +288,12 @@ def repo_remove_share(request):
if username != from_email and username != to_email:
return render_permission_error(request, _(u'Failed to remove share'))
- remove_share(repo_id, from_email, to_email)
+
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ org_remove_share(org_id, repo_id, from_email, to_email)
+ else:
+ seaserv.remove_share(repo_id, from_email, to_email)
else:
try:
group_id = int(group_id)
@@ -292,65 +319,26 @@ def repo_remove_share(request):
next = request.META.get('HTTP_REFERER', SITE_ROOT)
return HttpResponseRedirect(next)
-# @login_required
-# def share_admin(request):
-# """
-# List share out libraries.
-# """
-# username = request.user.username
-
-# shared_repos = []
-
-# # personal repos shared by this user
-# shared_repos += list_share_repos(username, 'from_email', -1, -1)
-
-# # repos shared to groups
-# group_repos = get_group_repos_by_owner(username)
-# for repo in group_repos:
-# group = ccnet_threaded_rpc.get_group(int(repo.group_id))
-# if not group:
-# repo.props.user = ''
-# continue
-# repo.props.user = group.props.group_name
-# repo.props.user_info = repo.group_id
-# shared_repos += group_repos
-
-# if not CLOUD_MODE:
-# # public repos shared by this user
-# pub_repos = list_inner_pub_repos_by_owner(username)
-# for repo in pub_repos:
-# repo.props.user = _(u'all members')
-# repo.props.user_info = 'all'
-# shared_repos += pub_repos
-
-# for repo in shared_repos:
-# if repo.props.permission == 'rw':
-# repo.share_permission = _(u'Read-Write')
-# elif repo.props.permission == 'r':
-# repo.share_permission = _(u'Read-Only')
-# else:
-# repo.share_permission = ''
-
-# if repo.props.share_type == 'personal':
-# repo.props.user_info = repo.props.user
-
-# shared_repos.sort(lambda x, y: cmp(x.repo_id, y.repo_id))
-
-# # Repo anonymous share links
-# # out_links = AnonymousShare.objects.filter(repo_owner=request.user.username)
-# # for link in out_links:
-# # repo = get_repo(link.repo_id)
-# # link.repo_name = repo.name
-# # link.remain_time = anon_share_token_generator.get_remain_time(link.token)
-
-# return render_to_response('repo/share_admin.html', {
-# "org": None,
-# "shared_repos": shared_repos,
-# # "out_links": out_links,
-# }, context_instance=RequestContext(request))
+def get_share_out_repo_list(request):
+ """List repos that @user share to other users.
+ Returns:
+ A list of repos.
+ """
+ username = request.user.username
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ return seafile_api.get_org_share_out_repo_list(org_id, username,
+ -1, -1)
+ else:
+ return seafile_api.get_share_out_repo_list(username, -1, -1)
def get_group_repos_by_owner(request):
+ """List repos that @user share to groups.
+
+ Returns:
+ A list of repos.
+ """
username = request.user.username
if is_org_context(request):
org_id = request.user.org.org_id
@@ -358,22 +346,26 @@ def get_group_repos_by_owner(request):
else:
return seaserv.get_group_repos_by_owner(username)
-def get_inner_pub_repo_list(request):
+def list_inner_pub_repos_by_owner(request):
+ """List repos that @user share to organizatoin.
+
+ Returns:
+ A list of repos, or empty list if in cloud_mode.
+ """
username = request.user.username
if is_org_context(request):
org_id = request.user.org.org_id
return list_org_inner_pub_repos_by_owner(org_id, username)
elif request.cloud_mode:
- return seaserv.list_inner_pub_repos_by_owner(username)
- else:
return []
+ else:
+ return seaserv.list_inner_pub_repos_by_owner(username)
def list_share_out_repos(request):
shared_repos = []
- username = request.user.username
# repos shared from this user
- shared_repos += seafile_api.get_share_out_repo_list(username, -1, -1)
+ shared_repos += get_share_out_repo_list(request)
# repos shared to groups
group_repos = get_group_repos_by_owner(request)
@@ -386,8 +378,8 @@ def list_share_out_repos(request):
repo.props.user_info = repo.group_id
shared_repos += group_repos
- # pub repos
- pub_repos = get_inner_pub_repo_list(request)
+ # inner pub repos
+ pub_repos = list_inner_pub_repos_by_owner(request)
for repo in pub_repos:
repo.props.user = _(u'all members')
repo.props.user_info = 'all'
@@ -418,7 +410,7 @@ def list_shared_repos(request):
repo.props.user_info = repo.props.user
out_repos.append(repo)
- out_repos.sort(lambda x, y: cmp(x.repo_id, y.repo_id))
+ out_repos.sort(lambda x, y: cmp(x.repo_name, y.repo_name))
return render_to_response('share/repos.html', {
"out_repos": out_repos,
@@ -570,8 +562,13 @@ def share_permission_admin(request):
content_type=content_type)
try:
- seafile_api.set_share_permission(repo_id, from_email,
- email_or_group, permission)
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ seaserv.seafserv_threaded_rpc.org_set_share_permission(
+ org_id, repo_id, from_email, email_or_group, permission)
+ else:
+ seafile_api.set_share_permission(repo_id, from_email,
+ email_or_group, permission)
except SearpcError:
return HttpResponse(json.dumps({'success': False}), status=500,
content_type=content_type)
@@ -580,8 +577,13 @@ def share_permission_admin(request):
elif share_type == 'group':
try:
- seafile_api.set_group_repo_permission(int(email_or_group),
- repo_id, permission)
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ seaserv.seafserv_threaded_rpc.set_org_group_repo_permission(
+ org_id, int(email_or_group), repo_id, permission)
+ else:
+ seafile_api.set_group_repo_permission(int(email_or_group),
+ repo_id, permission)
except SearpcError:
return HttpResponse(json.dumps({'success': False}), status=500,
content_type=content_type)
@@ -589,7 +591,7 @@ def share_permission_admin(request):
content_type=content_type)
elif share_type == 'public':
- try:
+ try:
if is_org_context(request):
org_id = request.user.org.org_id
seaserv.seafserv_threaded_rpc.set_org_inner_pub_repo(
diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py
index 8021c580e3..fb4e36e8a8 100644
--- a/seahub/views/__init__.py
+++ b/seahub/views/__init__.py
@@ -891,80 +891,20 @@ def get_owned_repo_list(request):
else:
return seafile_api.get_owned_repo_list(username)
-def get_share_in_repo_list(request, start, limit):
- """List share in repos;
- """
- username = request.user.username
- if is_org_context(request):
- org_id = request.user.org.org_id
- return seafile_api.get_org_share_in_repo_list(org_id, username, -1, -1)
- else:
- return seafile_api.get_share_in_repo_list(username, -1, -1)
+def get_virtual_repos_by_owner(request):
+ """List virtual repos.
-def get_groups_by_user(request):
- """List user groups.
+ Arguments:
+ - `request`:
"""
username = request.user.username
if is_org_context(request):
org_id = request.user.org.org_id
- return seaserv.get_org_groups_by_user(org_id, username)
+ return seaserv.seafserv_threaded_rpc.get_org_virtual_repos_by_owner(
+ org_id, username)
else:
- return seaserv.get_personal_groups_by_user(username)
-
-def get_group_repos(request, groups):
- """Get repos shared to groups.
- """
- username = request.user.username
- group_repos = []
- if is_org_context(request):
- org_id = request.user.org.org_id
- # For each group I joined...
- for grp in groups:
- # Get group repos, and for each group repos...
- for r_id in seafile_api.get_org_group_repoids(org_id, grp.id):
- # No need to list my own repo
- repo_owner = seafile_api.get_org_repo_owner(r_id)
- if repo_owner == username:
- continue
- # Convert repo properties due to the different collumns in Repo
- # and SharedRepo
- r = get_repo(r_id)
- if not r:
- continue
- r.repo_id = r.id
- r.repo_name = r.name
- r.repo_desc = r.desc
- r.last_modified = get_repo_last_modify(r)
- r.share_type = 'group'
- r.user = repo_owner
- r.user_perm = check_permission(r_id, username)
- r.group = grp
- group_repos.append(r)
- else:
- # For each group I joined...
- for grp in groups:
- # Get group repos, and for each group repos...
- for r_id in seafile_api.get_group_repoids(grp.id):
- # No need to list my own repo
- repo_owner = seafile_api.get_repo_owner(r_id)
- if repo_owner == username:
- continue
- # Convert repo properties due to the different collumns in Repo
- # and SharedRepo
- r = get_repo(r_id)
- if not r:
- continue
- r.repo_id = r.id
- r.repo_name = r.name
- r.repo_desc = r.desc
- r.last_modified = get_repo_last_modify(r)
- r.share_type = 'group'
- r.user = repo_owner
- r.user_perm = check_permission(r_id, username)
- r.group = grp
- group_repos.append(r)
- return group_repos
-
+ return seafile_api.get_virtual_repos_by_owner(username)
+
@login_required
@user_mods_check
def myhome(request):
@@ -981,7 +921,7 @@ def myhome(request):
sub_repos = []
sub_lib_enabled = UserOptions.objects.is_sub_lib_enabled(username)
if ENABLE_SUB_LIBRARY and sub_lib_enabled:
- sub_repos = seafile_api.get_virtual_repos_by_owner(username)
+ sub_repos = get_virtual_repos_by_owner(request)
for repo in sub_repos:
repo.abbrev_origin_path = get_abbrev_origin_path(repo.origin_repo_name,
repo.origin_path)
@@ -1127,55 +1067,30 @@ def client_unsync(request):
return HttpResponse(json.dumps({'error': _(u'Internal server error')}),
status=500, content_type=content_type)
-# @login_required
-# def innerpub_msg_reply(request, msg_id):
-# """Show inner pub message replies, and process message reply in ajax"""
-
-# content_type = 'application/json; charset=utf-8'
-# if request.is_ajax():
-# ctx = {}
-# if request.method == 'POST':
-# form = MessageReplyForm(request.POST)
-
-# # TODO: invalid form
-# if form.is_valid():
-# msg = form.cleaned_data['message']
-# try:
-# innerpub_msg = InnerPubMsg.objects.get(id=msg_id)
-# except InnerPubMsg.DoesNotExist:
-# return HttpResponseBadRequest(content_type=content_type)
-
-# msg_reply = InnerPubMsgReply()
-# msg_reply.reply_to = innerpub_msg
-# msg_reply.from_email = request.user.username
-# msg_reply.message = msg
-# msg_reply.save()
-
-# ctx['reply'] = msg_reply
-# html = render_to_string("group/group_reply_new.html", ctx)
-
-# else:
-# try:
-# msg = InnerPubMsg.objects.get(id=msg_id)
-# except InnerPubMsg.DoesNotExist:
-# raise HttpResponse(status=400)
-
-# replies = InnerPubMsgReply.objects.filter(reply_to=msg)
-# ctx['replies'] = replies
-# html = render_to_string("group/group_reply_list.html", ctx)
-
-# serialized_data = json.dumps({"html": html})
-# return HttpResponse(serialized_data, content_type=content_type)
-# else:
-# return HttpResponseBadRequest(content_type=content_type)
@login_required
def unsetinnerpub(request, repo_id):
+ """Unshare repos in organization or in share admin page.
+
+ Only system admin, organization admin or repo owner can perform this op.
+ """
repo = get_repo(repo_id)
if not repo:
messages.error(request, _('Failed to unshare the library, as it does not exist.'))
return HttpResponseRedirect(reverse('share_admin'))
- # TODO: permission check
+ # 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):
+ raise Http404
+ 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):
+ raise Http404
try:
if is_org_context(request):
diff --git a/seahub/views/ajax.py b/seahub/views/ajax.py
index 56c99222ae..a803827c0d 100644
--- a/seahub/views/ajax.py
+++ b/seahub/views/ajax.py
@@ -1148,8 +1148,13 @@ def sub_repo(request, repo_id):
# check if the sub-lib exist
try:
- sub_repo = seafile_api.get_virtual_repo(repo_id, path, username)
- except SearpcError, e:
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ sub_repo = seaserv.seafserv_threaded_rpc.get_org_virtual_repo(
+ org_id, repo_id, path, username)
+ else:
+ sub_repo = seafile_api.get_virtual_repo(repo_id, path, username)
+ except SearpcError as e:
result['error'] = e.msg
return HttpResponse(json.dumps(result), status=500, content_type=content_type)
@@ -1159,7 +1164,14 @@ def sub_repo(request, repo_id):
# create a sub-lib
try:
# use name as 'repo_name' & 'repo_desc' for sub_repo
- sub_repo_id = seafile_api.create_virtual_repo(repo_id, path, name, name, username)
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ sub_repo_id = seaserv.seafserv_threaded_rpc.create_org_virtual_repo(
+ org_id, repo_id, path, name, name, username)
+ else:
+ sub_repo_id = seafile_api.create_virtual_repo(repo_id, path,
+ name, name,
+ username)
result['sub_repo_id'] = sub_repo_id
except SearpcError, e:
result['error'] = e.msg
@@ -1388,10 +1400,92 @@ def space_and_traffic(request):
context_instance=RequestContext(request))
return HttpResponse(json.dumps({"html": html}), content_type=content_type)
+def get_share_in_repo_list(request, start, limit):
+ """List share in repos.
+ """
+ username = request.user.username
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ repo_list = seafile_api.get_org_share_in_repo_list(org_id, username,
+ -1, -1)
+ else:
+ repo_list = seafile_api.get_share_in_repo_list(username, -1, -1)
+
+ for repo in repo_list:
+ repo.user_perm = seafile_api.check_repo_access_permission(repo.repo_id,
+ username)
+ return repo_list
+
+def get_groups_by_user(request):
+ """List user groups.
+ """
+ username = request.user.username
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ return seaserv.get_org_groups_by_user(org_id, username)
+ else:
+ return seaserv.get_personal_groups_by_user(username)
+
+def get_group_repos(request, groups):
+ """Get repos shared to groups.
+ """
+ username = request.user.username
+ group_repos = []
+ if is_org_context(request):
+ org_id = request.user.org.org_id
+ # For each group I joined...
+ for grp in groups:
+ # Get group repos, and for each group repos...
+ for r_id in seafile_api.get_org_group_repoids(org_id, grp.id):
+ # No need to list my own repo
+ repo_owner = seafile_api.get_org_repo_owner(r_id)
+ if repo_owner == username:
+ continue
+ # Convert repo properties due to the different collumns in Repo
+ # and SharedRepo
+ r = get_repo(r_id)
+ if not r:
+ continue
+ r.repo_id = r.id
+ r.repo_name = r.name
+ r.repo_desc = r.desc
+ r.last_modified = get_repo_last_modify(r)
+ r.share_type = 'group'
+ r.user = repo_owner
+ r.user_perm = seafile_api.check_repo_access_permission(
+ r_id, username)
+ r.group = grp
+ group_repos.append(r)
+ else:
+ # For each group I joined...
+ for grp in groups:
+ # Get group repos, and for each group repos...
+ for r_id in seafile_api.get_group_repoids(grp.id):
+ # No need to list my own repo
+ repo_owner = seafile_api.get_repo_owner(r_id)
+ if repo_owner == username:
+ continue
+ # Convert repo properties due to the different collumns in Repo
+ # and SharedRepo
+ r = get_repo(r_id)
+ if not r:
+ continue
+ r.repo_id = r.id
+ r.repo_name = r.name
+ r.repo_desc = r.desc
+ r.last_modified = get_repo_last_modify(r)
+ r.share_type = 'group'
+ r.user = repo_owner
+ r.user_perm = seafile_api.check_repo_access_permission(
+ r_id, username)
+ r.group = grp
+ group_repos.append(r)
+ return group_repos
+
@login_required
def my_shared_and_group_repos(request):
"""Return html snippet of repos that shared to user and group repos.
-
+
Arguments:
- `request`:
"""
@@ -1400,39 +1494,13 @@ def my_shared_and_group_repos(request):
content_type = 'application/json; charset=utf-8'
- username = request.user.username
-
- shared_repos = seafile_api.get_share_in_repo_list(username, -1, -1)
- for repo in shared_repos:
- repo.user_perm = seafile_api.check_repo_access_permission(repo.repo_id, username)
-
+ # shared
+ shared_repos = get_share_in_repo_list(request, -1, -1)
shared_repos.sort(lambda x, y: cmp(y.last_modified, x.last_modified))
- group_repos = []
- # Get all personal groups I joined.
- joined_groups = request.user.joined_groups
- # For each group I joined...
- for grp in joined_groups:
- # Get group repos, and for each group repos...
- for r_id in seaserv.get_group_repoids(grp.id):
- # No need to list my own repo
- repo_owner = seafile_api.get_repo_owner(r_id)
- if repo_owner == username:
- continue
- # Convert repo properties due to the different collumns in Repo
- # and SharedRepo
- r = seaserv.get_repo(r_id)
- if not r:
- continue
- r.repo_id = r.id
- r.repo_name = r.name
- r.repo_desc = r.desc
- r.last_modified = get_repo_last_modify(r)
- r.share_type = 'group'
- r.user = repo_owner
- r.user_perm = seaserv.check_permission(r_id, username)
- r.group = grp
- group_repos.append(r)
+ # group repos
+ joined_groups = get_groups_by_user(request)
+ group_repos = get_group_repos(request, joined_groups)
group_repos.sort(key=lambda x: x.group.group_name)
for i, repo in enumerate(group_repos):
if i == 0:
@@ -1441,19 +1509,18 @@ def my_shared_and_group_repos(request):
if repo.group.group_name != group_repos[i-1].group.group_name:
repo.show_group_name = True
- ctx_shared = {
- "shared_repos": shared_repos,
- }
- ctx_group = {
- "group_repos": group_repos,
- }
- shared_repos_html = render_to_string('snippets/my_shared_repos.html', ctx_shared,
- context_instance=RequestContext(request))
- group_repos_html = render_to_string('snippets/my_group_repos.html', ctx_group,
- context_instance=RequestContext(request))
+ ctx_shared = {"shared_repos": shared_repos}
+ ctx_group = {"group_repos": group_repos}
+ shared_repos_html = render_to_string(
+ 'snippets/my_shared_repos.html', ctx_shared,
+ context_instance=RequestContext(request))
+ group_repos_html = render_to_string(
+ 'snippets/my_group_repos.html', ctx_group,
+ context_instance=RequestContext(request))
- return HttpResponse(json.dumps({"shared": shared_repos_html, "group": group_repos_html}),
- content_type=content_type)
+ return HttpResponse(json.dumps({"shared": shared_repos_html,
+ "group": group_repos_html}),
+ content_type=content_type)
@login_required
def get_file_op_url(request, repo_id):
diff --git a/seahub/views/file.py b/seahub/views/file.py
index 2ce6ef1a2a..34d5acb0f4 100644
--- a/seahub/views/file.py
+++ b/seahub/views/file.py
@@ -44,7 +44,7 @@ from seahub.contacts.models import Contact
from seahub.share.models import FileShare, PrivateFileDirShare
from seahub.wiki.utils import get_wiki_dirent
from seahub.wiki.models import WikiDoesNotExist, WikiPageMissing
-from seahub.utils import show_delete_days, render_error, \
+from seahub.utils import show_delete_days, render_error, is_org_context, \
get_file_type_and_ext, gen_file_get_url, gen_file_share_link, \
render_permission_error, \
is_textual_file, show_delete_days, mkstemp, EMPTY_SHA1, HtmlDiff, \
@@ -318,9 +318,13 @@ def view_file(request, repo_id):
obj_id, path)
if not user_perm:
return render_permission_error(request, _(u'Unable to view file'))
-
+
# check if the user is the owner or not, for 'private share'
- is_repo_owner = seafile_api.is_repo_owner(username, repo.id)
+ if is_org_context(request):
+ repo_owner = seafile_api.get_org_repo_owner(repo.id)
+ is_repo_owner = True if repo_owner == username else False
+ else:
+ is_repo_owner = seafile_api.is_repo_owner(username, repo.id)
# get file type and extension
filetype, fileext = get_file_type_and_ext(u_filename)
diff --git a/seahub/views/repo.py b/seahub/views/repo.py
index c1c57bb1d7..350ff40dd9 100644
--- a/seahub/views/repo.py
+++ b/seahub/views/repo.py
@@ -21,7 +21,7 @@ from seahub.share.models import FileShare, UploadLinkShare
from seahub.views import gen_path_link, get_repo_dirents, \
check_repo_access_permission
-from seahub.utils import gen_file_upload_url, \
+from seahub.utils import gen_file_upload_url, is_org_context, \
get_httpserver_root, gen_dir_share_link, gen_shared_upload_link, \
get_max_upload_file_size, new_merge_with_no_conflict, \
get_commit_before_new_merge
@@ -204,7 +204,10 @@ def render_repo(request, repo):
repo_size = get_repo_size(repo.id)
no_quota = is_no_quota(repo.id)
search_repo_id = None if repo.encrypted else repo.id
- repo_owner = seafile_api.get_repo_owner(repo.id)
+ if is_org_context(request):
+ repo_owner = seafile_api.get_org_repo_owner(repo.id)
+ else:
+ repo_owner = seafile_api.get_repo_owner(repo.id)
is_repo_owner = True if repo_owner == username else False
if is_repo_owner and not repo.is_virtual:
show_repo_settings = True
@@ -212,7 +215,9 @@ def render_repo(request, repo):
show_repo_settings = False
more_start = None
- file_list, dir_list, dirent_more = get_repo_dirents(request, repo, head_commit, path, offset=0, limit=100)
+ file_list, dir_list, dirent_more = get_repo_dirents(request, repo,
+ head_commit, path,
+ offset=0, limit=100)
if dirent_more:
more_start = 100
zipped = get_nav_path(path, repo.name)