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:
@@ -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
|
||||||
|
@@ -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.
|
||||||
|
46
utils.py
46
utils.py
@@ -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
|
||||||
|
|
||||||
|
6
views.py
6
views.py
@@ -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
|
||||||
|
Reference in New Issue
Block a user