Skip to content

Commit

Permalink
[Issue #28] Shared to group libraries are only visible in Groups view…
Browse files Browse the repository at this point in the history
…, not in "My Home -> Shared"
  • Loading branch information
xiez committed Dec 18, 2012
1 parent fd1b4f6 commit cad6537
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 56 deletions.
36 changes: 31 additions & 5 deletions organizations/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@

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
Expand Down Expand Up @@ -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)

Expand Down
18 changes: 10 additions & 8 deletions templates/snippets/my_owned_repos.html
Original file line number Diff line number Diff line change
Expand Up @@ -69,25 +69,27 @@ <h3>{% trans "Synchronize libraries with PC client" %}</h3>
<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 %}
</table>
{% 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>
Expand Down
4 changes: 2 additions & 2 deletions thirdpart/seaserv/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
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
Expand Down
64 changes: 33 additions & 31 deletions thirdpart/seaserv/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
"""
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -423,38 +433,32 @@ def get_shared_groups_by_repo(repo_id):
groups.append(group)
return groups

def get_group_repoids(group_id):
"""Get repo ids of a given group id."""
try:
repo_ids = seafserv_threaded_rpc.get_group_repoids(group_id)
except SearpcError:
return []

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_repos(group_id, user):
"""Get repos of a given group id."""
def get_group_repoids(group_id):
"""Get repo ids 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)
return conv_repoids_to_list(repo_ids)

def get_group_repos(group_id, user):
"""Get repos of a given group id."""
repoid_list = get_group_repoids(group_id)

repos = []
for repo_id in repoid_list:
Expand All @@ -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:
Expand Down
41 changes: 31 additions & 10 deletions views.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
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
Expand Down Expand Up @@ -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 = []
Expand All @@ -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 ''
Expand Down Expand Up @@ -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', {
Expand Down

0 comments on commit cad6537

Please sign in to comment.