mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-17 14:37:58 +00:00
[Issue #28] Shared to group libraries are only visible in Groups view, not in "My Home -> Shared"
This commit is contained in:
parent
fd1b4f6a30
commit
cad653726b
@ -14,12 +14,14 @@ from django.utils.translation import ugettext as _
|
|||||||
|
|
||||||
from auth.decorators import login_required
|
from auth.decorators import login_required
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
from seaserv import ccnet_threaded_rpc, seafserv_rpc, seafserv_threaded_rpc, get_repo, \
|
from seaserv import ccnet_threaded_rpc, seafserv_rpc, seafserv_threaded_rpc,\
|
||||||
get_orgs_by_user, get_org_repos, list_org_inner_pub_repos, \
|
get_orgs_by_user, get_org_repos, list_org_inner_pub_repos, \
|
||||||
get_org_by_url_prefix, create_org, get_user_current_org, add_org_user, \
|
get_org_by_url_prefix, create_org, get_user_current_org, add_org_user, \
|
||||||
remove_org_user, get_org_groups, is_valid_filename, org_user_exists, \
|
remove_org_user, get_org_groups, is_valid_filename, org_user_exists, \
|
||||||
create_org_repo, get_org_id_by_group, get_org_groups_by_user, \
|
create_org_repo, get_org_id_by_group, get_org_groups_by_user, \
|
||||||
get_org_users_by_url_prefix, list_org_shared_repos, is_personal_repo
|
get_org_users_by_url_prefix, list_org_shared_repos, is_personal_repo, \
|
||||||
|
get_org_group_repoids, is_org_repo_owner, get_repo, get_commits, \
|
||||||
|
check_permission, get_org_repo_owner
|
||||||
|
|
||||||
from decorators import org_staff_required
|
from decorators import org_staff_required
|
||||||
from forms import OrgCreateForm
|
from forms import OrgCreateForm
|
||||||
@ -108,12 +110,36 @@ def org_personal(request, url_prefix):
|
|||||||
calculate_repo_last_modify(owned_repos)
|
calculate_repo_last_modify(owned_repos)
|
||||||
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
||||||
|
|
||||||
# Org repos others shared to me
|
|
||||||
in_repos = list_org_shared_repos(org.org_id, user,'to_email', -1, -1)
|
|
||||||
|
|
||||||
# Org groups user created
|
# Org groups user created
|
||||||
groups = get_org_groups_by_user(org.org_id, user)
|
groups = get_org_groups_by_user(org.org_id, user)
|
||||||
|
|
||||||
|
# Org repos others shared to me
|
||||||
|
in_repos = list_org_shared_repos(org.org_id, user,'to_email', -1, -1)
|
||||||
|
# For each org group I joined...
|
||||||
|
for grp in groups:
|
||||||
|
# Get org group repos, and for each group repos...
|
||||||
|
for r_id in get_org_group_repoids(org.org_id, grp.id):
|
||||||
|
# No need to list my own repo
|
||||||
|
if is_org_repo_owner(org.org_id, r_id, user):
|
||||||
|
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
|
||||||
|
try:
|
||||||
|
r.last_modified = get_commits(r_id, 0, 1)[0].ctime
|
||||||
|
except:
|
||||||
|
r.last_modified = 0
|
||||||
|
r.share_type = 'group'
|
||||||
|
r.user = get_org_repo_owner(r_id)
|
||||||
|
r.user_perm = check_permission(r_id, user)
|
||||||
|
in_repos.append(r)
|
||||||
|
in_repos.sort(lambda x, y: cmp(y.last_modified, x.last_modified))
|
||||||
|
|
||||||
# All org groups used in auto complete.
|
# All org groups used in auto complete.
|
||||||
org_groups = get_org_groups(org.org_id, -1, -1)
|
org_groups = get_org_groups(org.org_id, -1, -1)
|
||||||
|
|
||||||
|
@ -69,17 +69,19 @@
|
|||||||
<img src="{{MEDIA_URL}}img/folder-no-write-20.png" title="{% trans "Read-Only" %}" alt="{% trans "directory icon" %}" />
|
<img src="{{MEDIA_URL}}img/folder-no-write-20.png" title="{% trans "Read-Only" %}" alt="{% trans "directory icon" %}" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.repo_id }}">{{ repo.props.repo_name }}</a></td>
|
<td><a href="{{ SITE_ROOT }}repo/{{ repo.repo_id }}">{{ repo.repo_name }}</a></td>
|
||||||
<td>{{ repo.props.repo_desc }}</td>
|
<td>{{ repo.repo_desc }}</td>
|
||||||
{% if repo.props.last_modified %}
|
{% if repo.last_modified %}
|
||||||
<td>{{ repo.props.last_modified|translate_seahub_time }}</td>
|
<td>{{ repo.last_modified|translate_seahub_time }}</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td>--</td>
|
<td>--</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td>{{ repo.props.user|email2nickname }}</td>
|
<td>{{ repo.user|email2nickname }}</td>
|
||||||
<td>
|
<td>
|
||||||
<img src="{{ MEDIA_URL }}img/download-20.png" data="{{ repo.props.repo_id }}" class="download-btn op-icon vh" title="{% trans "Download" %}" alt="{% trans "Download" %}" />
|
<img src="{{ MEDIA_URL }}img/download-20.png" data="{{ repo.repo_id }}" class="download-btn op-icon vh" title="{% trans "Download" %}" alt="{% trans "Download" %}" />
|
||||||
<img src="{{ MEDIA_URL }}img/delete-20.png" data-url="{% url 'repo_remove_share' %}?repo_id={{ repo.props.repo_id }}&from={{ repo.props.user }}&to={{ request.user }}" data-target="{{repo.props.repo_name}}" class="unshare-btn op-icon vh" title="{% trans "Leave Share" %}" alt="{% trans "Leave Share" %}" />
|
{% if repo.share_type == 'personal' %}
|
||||||
|
<img src="{{ MEDIA_URL }}img/delete-20.png" data-url="{% url 'repo_remove_share' %}?repo_id={{ repo.repo_id }}&from={{ repo.user }}&to={{ request.user }}" data-target="{{repo.repo_name}}" class="unshare-btn op-icon vh" title="{% trans "Leave Share" %}" alt="{% trans "Leave Share" %}" />
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -87,7 +89,7 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<div class="empty-tips">
|
<div class="empty-tips">
|
||||||
<h2 class="center-contents">{% trans "No library is shared to you" %}</h2>
|
<h2 class="center-contents">{% trans "No library is shared to you" %}</h2>
|
||||||
<p>{% trans "Libraries shared to you will be listed here. Libraries shared as writable can be downloaded and synced. Read only libraries can only be downloaded, updates on local files will not be uploaded." %}</p>
|
<p>{% trans "Libraries shared to you or shared to groups you joined will be listed here. Libraries shared as writable can be downloaded and synced. Read only libraries can only be downloaded, updates on local files will not be uploaded." %}</p>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -9,13 +9,13 @@ from service import get_org_groups, get_personal_groups_by_user, \
|
|||||||
check_group_staff, remove_group_user, get_group, get_org_id_by_group, \
|
check_group_staff, remove_group_user, get_group, get_org_id_by_group, \
|
||||||
get_group_members, get_shared_groups_by_repo, is_group_user, \
|
get_group_members, get_shared_groups_by_repo, is_group_user, \
|
||||||
get_org_group_repos, get_group_repos, get_org_groups_by_user, is_org_group,\
|
get_org_group_repos, get_group_repos, get_org_groups_by_user, is_org_group,\
|
||||||
del_org_group_repo, get_org_groups_by_repo
|
del_org_group_repo, get_org_groups_by_repo, get_org_group_repoids
|
||||||
from service import get_repos, get_repo, get_commits, get_branches, remove_repo, \
|
from service import get_repos, get_repo, get_commits, get_branches, remove_repo, \
|
||||||
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, get_repo_token_nonnull
|
list_personal_repos_by_owner, get_repo_token_nonnull, get_repo_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
|
||||||
|
@ -315,6 +315,16 @@ def list_personal_repos_by_owner(owner):
|
|||||||
def get_repo_token_nonnull(repo_id, username):
|
def get_repo_token_nonnull(repo_id, username):
|
||||||
return seafserv_threaded_rpc.get_repo_token_nonnull (repo_id, username)
|
return seafserv_threaded_rpc.get_repo_token_nonnull (repo_id, username)
|
||||||
|
|
||||||
|
def get_repo_owner(repo_id):
|
||||||
|
"""
|
||||||
|
Get owner of a repo.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
ret = seafserv_threaded_rpc.get_repo_owner(repo_id)
|
||||||
|
except SearpcError:
|
||||||
|
ret = ''
|
||||||
|
return ret
|
||||||
|
|
||||||
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.
|
||||||
@ -387,7 +397,7 @@ def is_org_repo_owner(org_id, repo_id, user):
|
|||||||
|
|
||||||
def get_org_repo_owner(repo_id):
|
def get_org_repo_owner(repo_id):
|
||||||
"""
|
"""
|
||||||
Get owner of repo repo.
|
Get owner of org repo.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
owner = seafserv_threaded_rpc.get_org_repo_owner(repo_id)
|
owner = seafserv_threaded_rpc.get_org_repo_owner(repo_id)
|
||||||
@ -423,13 +433,10 @@ def get_shared_groups_by_repo(repo_id):
|
|||||||
groups.append(group)
|
groups.append(group)
|
||||||
return groups
|
return groups
|
||||||
|
|
||||||
def get_group_repoids(group_id):
|
def conv_repoids_to_list(repo_ids):
|
||||||
"""Get repo ids of a given group id."""
|
"""
|
||||||
try:
|
Convert repo ids seperated by "\n" to list.
|
||||||
repo_ids = seafserv_threaded_rpc.get_group_repoids(group_id)
|
"""
|
||||||
except SearpcError:
|
|
||||||
return []
|
|
||||||
|
|
||||||
if not repo_ids:
|
if not repo_ids:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
@ -440,21 +447,18 @@ def get_group_repoids(group_id):
|
|||||||
repoid_list.append(repo_id)
|
repoid_list.append(repo_id)
|
||||||
return repoid_list
|
return repoid_list
|
||||||
|
|
||||||
def get_group_repos(group_id, user):
|
def get_group_repoids(group_id):
|
||||||
"""Get repos of a given group id."""
|
"""Get repo ids of a given group id."""
|
||||||
try:
|
try:
|
||||||
repo_ids = seafserv_threaded_rpc.get_group_repoids(group_id)
|
repo_ids = seafserv_threaded_rpc.get_group_repoids(group_id)
|
||||||
except SearpcError:
|
except SearpcError:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if not repo_ids:
|
return conv_repoids_to_list(repo_ids)
|
||||||
return []
|
|
||||||
|
|
||||||
repoid_list = []
|
def get_group_repos(group_id, user):
|
||||||
for repo_id in repo_ids.split("\n"):
|
"""Get repos of a given group id."""
|
||||||
if repo_id == '':
|
repoid_list = get_group_repoids(group_id)
|
||||||
continue
|
|
||||||
repoid_list.append(repo_id)
|
|
||||||
|
|
||||||
repos = []
|
repos = []
|
||||||
for repo_id in repoid_list:
|
for repo_id in repoid_list:
|
||||||
@ -481,21 +485,19 @@ def get_group_repos(group_id, user):
|
|||||||
def del_org_group_repo(repo_id, org_id, group_id):
|
def del_org_group_repo(repo_id, org_id, group_id):
|
||||||
seafserv_threaded_rpc.del_org_group_repo(repo_id, org_id, group_id)
|
seafserv_threaded_rpc.del_org_group_repo(repo_id, org_id, group_id)
|
||||||
|
|
||||||
def get_org_group_repos(org_id, group_id, user):
|
def get_org_group_repoids(org_id, group_id):
|
||||||
"""Get org repos of a given group id."""
|
|
||||||
try:
|
try:
|
||||||
repo_ids = seafserv_threaded_rpc.get_org_group_repoids(org_id, group_id)
|
repo_ids = seafserv_threaded_rpc.get_org_group_repoids(org_id, group_id)
|
||||||
except SearpcError:
|
except SearpcError:
|
||||||
return []
|
repo_ids = ''
|
||||||
|
|
||||||
if not repo_ids:
|
return conv_repoids_to_list(repo_ids)
|
||||||
return []
|
|
||||||
|
|
||||||
repoid_list = []
|
def get_org_group_repos(org_id, group_id, user):
|
||||||
for repo_id in repo_ids.split("\n"):
|
"""Get org repos of a given group id."""
|
||||||
if repo_id == '':
|
repoid_list = get_org_group_repoids(org_id, group_id)
|
||||||
continue
|
if not repoid_list:
|
||||||
repoid_list.append(repo_id)
|
return []
|
||||||
|
|
||||||
repos = []
|
repos = []
|
||||||
for repo_id in repoid_list:
|
for repo_id in repoid_list:
|
||||||
|
39
views.py
39
views.py
@ -44,7 +44,7 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, get_emailusers, \
|
|||||||
list_inner_pub_repos, get_org_groups_by_repo, is_org_repo_owner, \
|
list_inner_pub_repos, get_org_groups_by_repo, is_org_repo_owner, \
|
||||||
get_org_repo_owner, is_passwd_set, get_file_size, check_quota, \
|
get_org_repo_owner, is_passwd_set, get_file_size, check_quota, \
|
||||||
get_related_users_by_repo, get_related_users_by_org_repo, HtmlDiff, \
|
get_related_users_by_repo, get_related_users_by_org_repo, HtmlDiff, \
|
||||||
get_session_info
|
get_session_info, get_group_repoids, get_repo_owner
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
|
|
||||||
from signals import repo_created, repo_deleted
|
from signals import repo_created, repo_deleted
|
||||||
@ -838,13 +838,40 @@ def myhome(request):
|
|||||||
quota = seafserv_threaded_rpc.get_user_quota(email)
|
quota = seafserv_threaded_rpc.get_user_quota(email)
|
||||||
quota_usage = seafserv_threaded_rpc.get_user_quota_usage(email)
|
quota_usage = seafserv_threaded_rpc.get_user_quota_usage(email)
|
||||||
|
|
||||||
# Personal repos that I own
|
# Get all personal groups I joined.
|
||||||
|
joined_groups = get_personal_groups_by_user(request.user.username)
|
||||||
|
|
||||||
|
# Personal repos that I owned.
|
||||||
owned_repos = seafserv_threaded_rpc.list_owned_repos(email)
|
owned_repos = seafserv_threaded_rpc.list_owned_repos(email)
|
||||||
calculate_repo_last_modify(owned_repos)
|
calculate_repo_last_modify(owned_repos)
|
||||||
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
||||||
|
|
||||||
# Personal repos others shared to me
|
# Personal repos others shared to me
|
||||||
in_repos = list_personal_shared_repos(email,'to_email', -1, -1)
|
in_repos = list_personal_shared_repos(email,'to_email', -1, -1)
|
||||||
|
# For each group I joined...
|
||||||
|
for grp in joined_groups:
|
||||||
|
# Get group repos, and for each group repos...
|
||||||
|
for r_id in get_group_repoids(grp.id):
|
||||||
|
# No need to list my own repo
|
||||||
|
if is_repo_owner(email, r_id):
|
||||||
|
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
|
||||||
|
try:
|
||||||
|
r.last_modified = get_commits(r_id, 0, 1)[0].ctime
|
||||||
|
except:
|
||||||
|
r.last_modified = 0
|
||||||
|
r.share_type = 'group'
|
||||||
|
r.user = get_repo_owner(r_id)
|
||||||
|
r.user_perm = check_permission(r_id, email)
|
||||||
|
in_repos.append(r)
|
||||||
|
in_repos.sort(lambda x, y: cmp(y.last_modified, x.last_modified))
|
||||||
|
|
||||||
# user notifications
|
# user notifications
|
||||||
grpmsg_list = []
|
grpmsg_list = []
|
||||||
@ -862,9 +889,6 @@ def myhome(request):
|
|||||||
elif n.msg_type == 'org_join_msg':
|
elif n.msg_type == 'org_join_msg':
|
||||||
orgmsg_list.append(n.detail)
|
orgmsg_list.append(n.detail)
|
||||||
|
|
||||||
# Get all personal groups I joined.
|
|
||||||
joined_groups = get_personal_groups_by_user(request.user.username)
|
|
||||||
|
|
||||||
# get nickname
|
# get nickname
|
||||||
profiles = Profile.objects.filter(user=request.user.username)
|
profiles = Profile.objects.filter(user=request.user.username)
|
||||||
nickname = profiles[0].nickname if profiles else ''
|
nickname = profiles[0].nickname if profiles else ''
|
||||||
@ -1732,10 +1756,7 @@ def sys_seafadmin(request):
|
|||||||
if is_org_repo(repo.id):
|
if is_org_repo(repo.id):
|
||||||
repo.owner = get_org_repo_owner(repo.id)
|
repo.owner = get_org_repo_owner(repo.id)
|
||||||
else:
|
else:
|
||||||
try:
|
repo.owner = get_repo_owner(repo.id)
|
||||||
repo.owner = seafserv_threaded_rpc.get_repo_owner(repo.id)
|
|
||||||
except:
|
|
||||||
repo.owner = None
|
|
||||||
|
|
||||||
return render_to_response(
|
return render_to_response(
|
||||||
'sys_seafadmin.html', {
|
'sys_seafadmin.html', {
|
||||||
|
Loading…
Reference in New Issue
Block a user