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

Fixed bug in moving files under org context

This commit is contained in:
ZhengXie
2012-09-29 16:51:36 +08:00
parent 75ac577fea
commit 4ca3810790
4 changed files with 37 additions and 28 deletions

View File

@@ -14,7 +14,8 @@ from service import get_repos, get_repo, get_commits, get_branches, \
get_org_repos, is_repo_owner, create_org_repo, is_inner_pub_repo, \ get_org_repos, is_repo_owner, create_org_repo, is_inner_pub_repo, \
list_org_inner_pub_repos, get_org_id_by_repo_id, list_org_shared_repos, \ list_org_inner_pub_repos, get_org_id_by_repo_id, list_org_shared_repos, \
list_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \ list_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \
is_org_repo_owner, get_org_repo_owner, is_org_repo, get_file_size is_org_repo_owner, get_org_repo_owner, is_org_repo, get_file_size,\
list_personal_repos_by_owner
from service import get_binding_peerids, is_valid_filename, check_permission,\ from service import get_binding_peerids, is_valid_filename, check_permission,\
is_passwd_set is_passwd_set

View File

@@ -296,6 +296,16 @@ def get_repos():
def get_repo(repo_id): def get_repo(repo_id):
return seafserv_threaded_rpc.get_repo(repo_id) return seafserv_threaded_rpc.get_repo(repo_id)
def list_personal_repos_by_owner(owner):
"""
List users owned repos in personal context.
"""
try:
repos = seafserv_threaded_rpc.list_owned_repos(owner)
except SearpcError:
repos = []
return repos
def is_repo_owner(user, repo_id): def is_repo_owner(user, repo_id):
""" """
Check whether user is repo owner. Check whether user is repo owner.

View File

@@ -16,7 +16,9 @@ from pysearpc import SearpcError
from seaserv import seafserv_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \ from seaserv import seafserv_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \
get_repo, get_commits, get_group_repoids, CCNET_SERVER_ADDR, \ get_repo, get_commits, get_group_repoids, CCNET_SERVER_ADDR, \
CCNET_SERVER_PORT, get_org_id_by_repo_id, get_org_by_id, is_org_staff, \ CCNET_SERVER_PORT, get_org_id_by_repo_id, get_org_by_id, is_org_staff, \
get_org_id_by_group get_org_id_by_group, list_personal_shared_repos, \
get_personal_groups_by_user, list_personal_repos_by_owner, \
list_org_repos_by_owner, get_org_groups_by_user
try: try:
from settings import DOCUMENT_CONVERTOR_ROOT from settings import DOCUMENT_CONVERTOR_ROOT
except ImportError: except ImportError:
@@ -188,30 +190,30 @@ def get_accessible_repos(request, repo):
for dirent in dirs: for dirent in dirs:
if stat.S_ISDIR(dirent.props.mode): if stat.S_ISDIR(dirent.props.mode):
return True return True
return False
if repo.encrypted: if repo.encrypted:
repo.has_subdir = check_has_subdir(repo) repo.has_subdir = check_has_subdir(repo)
accessible_repos = [repo] accessible_repos = [repo]
return accessible_repos return accessible_repos
accessible_repos = []
email = request.user.username email = request.user.username
owned_repos = seafserv_threaded_rpc.list_owned_repos(email)
shared_repos = seafserv_threaded_rpc.list_share_repos(email, 'to_email', -1, -1) if request.user.org:
groups_repos = [] # org context
groups = ccnet_threaded_rpc.get_groups(email) org_id = request.user.org['org_id']
for group in groups: owned_repos = list_org_repos_by_owner(org_id, email)
group_repo_ids = get_group_repoids(group.id) shared_repos = list_personal_shared_repos(email, 'to_email', -1, -1)
for repo_id in group_repo_ids: groups_repos = []
if not repo_id: for group in get_org_groups_by_user(org_id, email):
continue groups_repos.append(get_org_group_repos(org_id, group.id, email))
group_repo = get_repo(repo_id) else:
if not group_repo: # personal context
continue owned_repos = list_personal_repos_by_owner(email)
group_repo.share_from = seafserv_threaded_rpc.get_group_repo_owner(repo_id) shared_repos = list_personal_shared_repos(email, 'to_email', -1, -1)
if email != group_repo.share_from: groups_repos = []
groups_repos.append(group_repo) for group in get_personal_groups_by_user(email):
groups_repos.append(get_group_repos(group.id, email))
def has_repo(repos, repo): def has_repo(repos, repo):
for r in repos: for r in repos:
@@ -219,11 +221,11 @@ def get_accessible_repos(request, repo):
return True return True
return False return False
accessible_repos = set()
for repo in owned_repos + shared_repos + groups_repos: for repo in owned_repos + shared_repos + groups_repos:
if not has_repo(accessible_repos, repo): if not repo.props.encrypted:
if not repo.props.encrypted: repo.has_subdir = check_has_subdir(repo)
accessible_repos.append(repo) accessible_repos.add(repo)
repo.props.has_subdir = check_has_subdir(repo)
return accessible_repos return accessible_repos

View File

@@ -261,11 +261,7 @@ class RepoView(CtxSwitchRequiredMixin, RepoMixin, TemplateResponseMixin,
def get_accessible_repos(self): def get_accessible_repos(self):
if self.user.is_authenticated(): if self.user.is_authenticated():
try: accessible_repos = get_accessible_repos(self.request, self.repo)
accessible_repos = get_accessible_repos(self.request, self.repo)
except SearpcError, e:
error_msg = e.msg
return render_error(self.request, error_msg)
else: else:
accessible_repos = [] accessible_repos = []
return accessible_repos return accessible_repos