mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-02 07:47:32 +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 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_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, \
|
||||
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 forms import OrgCreateForm
|
||||
@ -108,12 +110,36 @@ def org_personal(request, url_prefix):
|
||||
calculate_repo_last_modify(owned_repos)
|
||||
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
|
||||
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.
|
||||
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" %}" />
|
||||
{% endif %}
|
||||
</td>
|
||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.repo_id }}">{{ repo.props.repo_name }}</a></td>
|
||||
<td>{{ repo.props.repo_desc }}</td>
|
||||
{% if repo.props.last_modified %}
|
||||
<td>{{ repo.props.last_modified|translate_seahub_time }}</td>
|
||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.repo_id }}">{{ repo.repo_name }}</a></td>
|
||||
<td>{{ repo.repo_desc }}</td>
|
||||
{% if repo.last_modified %}
|
||||
<td>{{ repo.last_modified|translate_seahub_time }}</td>
|
||||
{% else %}
|
||||
<td>--</td>
|
||||
{% endif %}
|
||||
<td>{{ repo.props.user|email2nickname }}</td>
|
||||
<td>{{ repo.user|email2nickname }}</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/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" %}" />
|
||||
<img src="{{ MEDIA_URL }}img/download-20.png" data="{{ repo.repo_id }}" class="download-btn op-icon vh" title="{% trans "Download" %}" alt="{% trans "Download" %}" />
|
||||
{% 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>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
@ -87,7 +89,7 @@
|
||||
{% else %}
|
||||
<div class="empty-tips">
|
||||
<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>
|
||||
{% endif %}
|
||||
</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, \
|
||||
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,\
|
||||
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, \
|
||||
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_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \
|
||||
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,\
|
||||
is_passwd_set
|
||||
|
@ -314,6 +314,16 @@ def list_personal_repos_by_owner(owner):
|
||||
|
||||
def 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):
|
||||
"""
|
||||
@ -387,7 +397,7 @@ def is_org_repo_owner(org_id, repo_id, user):
|
||||
|
||||
def get_org_repo_owner(repo_id):
|
||||
"""
|
||||
Get owner of repo repo.
|
||||
Get owner of org repo.
|
||||
"""
|
||||
try:
|
||||
owner = seafserv_threaded_rpc.get_org_repo_owner(repo_id)
|
||||
@ -423,6 +433,20 @@ def get_shared_groups_by_repo(repo_id):
|
||||
groups.append(group)
|
||||
return groups
|
||||
|
||||
def conv_repoids_to_list(repo_ids):
|
||||
"""
|
||||
Convert repo ids seperated by "\n" to list.
|
||||
"""
|
||||
if not repo_ids:
|
||||
return []
|
||||
|
||||
repoid_list = []
|
||||
for repo_id in repo_ids.split("\n"):
|
||||
if repo_id == '':
|
||||
continue
|
||||
repoid_list.append(repo_id)
|
||||
return repoid_list
|
||||
|
||||
def get_group_repoids(group_id):
|
||||
"""Get repo ids of a given group id."""
|
||||
try:
|
||||
@ -430,31 +454,11 @@ def get_group_repoids(group_id):
|
||||
except SearpcError:
|
||||
return []
|
||||
|
||||
if not repo_ids:
|
||||
return []
|
||||
|
||||
repoid_list = []
|
||||
for repo_id in repo_ids.split("\n"):
|
||||
if repo_id == '':
|
||||
continue
|
||||
repoid_list.append(repo_id)
|
||||
return repoid_list
|
||||
return conv_repoids_to_list(repo_ids)
|
||||
|
||||
def get_group_repos(group_id, user):
|
||||
"""Get repos of a given group id."""
|
||||
try:
|
||||
repo_ids = seafserv_threaded_rpc.get_group_repoids(group_id)
|
||||
except SearpcError:
|
||||
return []
|
||||
|
||||
if not repo_ids:
|
||||
return []
|
||||
|
||||
repoid_list = []
|
||||
for repo_id in repo_ids.split("\n"):
|
||||
if repo_id == '':
|
||||
continue
|
||||
repoid_list.append(repo_id)
|
||||
repoid_list = get_group_repoids(group_id)
|
||||
|
||||
repos = []
|
||||
for repo_id in repoid_list:
|
||||
@ -480,23 +484,21 @@ def get_group_repos(group_id, user):
|
||||
# org group repo
|
||||
def 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):
|
||||
"""Get org repos of a given group id."""
|
||||
|
||||
def get_org_group_repoids(org_id, group_id):
|
||||
try:
|
||||
repo_ids = seafserv_threaded_rpc.get_org_group_repoids(org_id, group_id)
|
||||
except SearpcError:
|
||||
return []
|
||||
repo_ids = ''
|
||||
|
||||
if not repo_ids:
|
||||
return conv_repoids_to_list(repo_ids)
|
||||
|
||||
def get_org_group_repos(org_id, group_id, user):
|
||||
"""Get org repos of a given group id."""
|
||||
repoid_list = get_org_group_repoids(org_id, group_id)
|
||||
if not repoid_list:
|
||||
return []
|
||||
|
||||
repoid_list = []
|
||||
for repo_id in repo_ids.split("\n"):
|
||||
if repo_id == '':
|
||||
continue
|
||||
repoid_list.append(repo_id)
|
||||
|
||||
repos = []
|
||||
for repo_id in repoid_list:
|
||||
if not repo_id:
|
||||
|
41
views.py
41
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, \
|
||||
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_session_info
|
||||
get_session_info, get_group_repoids, get_repo_owner
|
||||
from pysearpc import SearpcError
|
||||
|
||||
from signals import repo_created, repo_deleted
|
||||
@ -838,14 +838,41 @@ def myhome(request):
|
||||
quota = seafserv_threaded_rpc.get_user_quota(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)
|
||||
calculate_repo_last_modify(owned_repos)
|
||||
owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
|
||||
|
||||
# Personal repos others shared to me
|
||||
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
|
||||
grpmsg_list = []
|
||||
grpmsg_reply_list = []
|
||||
@ -862,9 +889,6 @@ def myhome(request):
|
||||
elif n.msg_type == 'org_join_msg':
|
||||
orgmsg_list.append(n.detail)
|
||||
|
||||
# Get all personal groups I joined.
|
||||
joined_groups = get_personal_groups_by_user(request.user.username)
|
||||
|
||||
# get nickname
|
||||
profiles = Profile.objects.filter(user=request.user.username)
|
||||
nickname = profiles[0].nickname if profiles else ''
|
||||
@ -1732,10 +1756,7 @@ def sys_seafadmin(request):
|
||||
if is_org_repo(repo.id):
|
||||
repo.owner = get_org_repo_owner(repo.id)
|
||||
else:
|
||||
try:
|
||||
repo.owner = seafserv_threaded_rpc.get_repo_owner(repo.id)
|
||||
except:
|
||||
repo.owner = None
|
||||
repo.owner = get_repo_owner(repo.id)
|
||||
|
||||
return render_to_response(
|
||||
'sys_seafadmin.html', {
|
||||
|
Loading…
Reference in New Issue
Block a user