From 52591e4b712985f81c40ba016986a42da1f43f64 Mon Sep 17 00:00:00 2001 From: xiez Date: Thu, 29 Mar 2012 15:36:15 +0800 Subject: [PATCH] view public repo on myhome page --- settings.py | 3 ++ templates/myhome.html | 18 ++++++++- templates/repo.html | 19 ++++++++++ templates/repo_dir.html | 37 ++++++++++++++++++ urls.py | 8 +++- views.py | 83 +++++++++++++++++++++++++++++++++++++++-- 6 files changed, 160 insertions(+), 8 deletions(-) create mode 100644 templates/repo_dir.html diff --git a/settings.py b/settings.py index 296ac92f15..f357451635 100644 --- a/settings.py +++ b/settings.py @@ -145,3 +145,6 @@ LOGIN_URL = SITE_ROOT + 'accounts/login' # profile #AUTH_PROFILE_MODULE = "profile.UserProfile" + +# seafile httpserver address and port +HTTP_SERVER_ROOT = "http://localhost:8082" diff --git a/templates/myhome.html b/templates/myhome.html index b3eb93b425..f3af98e25f 100644 --- a/templates/myhome.html +++ b/templates/myhome.html @@ -24,7 +24,14 @@ {{ repo.props.name }} {{ repo.props.id }} {{ repo.props.desc }} - + + {% if repo.is_public %} + 查看目录 + {% else %} + 查看目录 + {% endif %} + 删除 + {% endfor %} @@ -47,7 +54,14 @@ {{ repo.props.name }} {{ repo.props.id }} {{ repo.props.desc }} - + + {% if repo.is_public %} + 查看目录 + {% else %} + 查看目录 + {% endif %} + + {% endfor %} diff --git a/templates/repo.html b/templates/repo.html index 86cbb24d7e..8d316e4f9b 100644 --- a/templates/repo.html +++ b/templates/repo.html @@ -36,6 +36,18 @@ 只有同步目录拥有者可见 {% endif %} + + 公共访问 + {% if is_owner %} + {% if is_public %} + 允许任何人查看该同步目录 + {% else %} + 允许任何人查看该同步目录 + {% endif %} + {% else %} + 只有拥有者可选 + {% endif %} + @@ -98,5 +110,12 @@ $('#token-show-switch').click(function() { } }); $('#tabs').tabs({cookie: {expires: 1}}); +$("#public-access-ckbx").click(function() { + if($("#public-access-ckbx").get(0).checked) { + location.href = "{{ SITE_ROOT }}repo/setpublic/{{ repo.props.id }}/"; + } else { + location.href = "{{ SITE_ROOT }}repo/unsetpublic/{{ repo.props.id }}/"; + } +}) {% endblock %} diff --git a/templates/repo_dir.html b/templates/repo_dir.html new file mode 100644 index 0000000000..e8fcdcf445 --- /dev/null +++ b/templates/repo_dir.html @@ -0,0 +1,37 @@ +{% extends "myhome_base.html" %} + +{% block nav_home_class %}class="cur"{% endblock %} +{% block left_panel %} +

已用空间

+

{{ quota_usage|filesizeformat }} / 4 GB

+{% endblock %} + + +{% block right_panel %} + + +

目录列表

+{% if dirs %} + + + + + + + {% for dirent in dirs %} + + {% if dirent.is_dir %} + + + {% else %} + + + {% endif %} + + {% endfor %} +
名字操作
{{ dirent.props.obj_name }}{{ dirent.props.obj_name }}下载
+{% else %} +

暂无

+{% endif %} + +{% endblock %} diff --git a/urls.py b/urls.py index 61a4bd6c53..09aad49097 100644 --- a/urls.py +++ b/urls.py @@ -5,7 +5,8 @@ from django.views.generic.simple import direct_to_template from seahub.views import root, peers, groups, myhome, \ repo, group, modify_token, remove_repo, seafadmin, useradmin, \ role_add, role_remove, activate_user, user_add, user_remove, \ - ownerhome, remove_fetched_repo, user_info + ownerhome, remove_fetched_repo, repo_set_public, repo_unset_public, \ + repo_list_dir # Uncomment the next two lines to enable the admin: #from django.contrib import admin @@ -31,7 +32,10 @@ urlpatterns = patterns('', (r'^repo/(?P[^/]+)/$', repo), (r'^repo/token/modify/(?P[^/]+)/$', modify_token), (r'^repo/remove/(?P[^/]+)/$', remove_repo), - (r'^repo/removefetched/(?P[^/]+)/(?P[^/]+)/$', remove_fetched_repo), + (r'^repo/removefetched/(?P[^/]+)/(?P[^/]+)/$', remove_fetched_repo), + (r'^repo/setpublic/(?P[^/]+)/$', repo_set_public), + (r'^repo/unsetpublic/(?P[^/]+)/$', repo_unset_public), + (r'^repo/dir/(?P[^/]+)/$', repo_list_dir), (r'^seafadmin/$', seafadmin), url(r'^useradmin/$', useradmin, name='useradmin'), diff --git a/views.py b/views.py index d6f1451b00..2ae5b3e79d 100644 --- a/views.py +++ b/views.py @@ -10,13 +10,16 @@ from auth.forms import AuthenticationForm, PasswordResetForm, SetPasswordForm, P from seaserv import cclient, ccnet_rpc, get_groups, get_users, get_repos, \ get_repo, get_commits, get_branches, \ - seafserv_threaded_rpc, get_binding_userids, get_ccnetuser + seafserv_threaded_rpc, seafserv_rpc, get_binding_userids, get_ccnetuser from seahub.share.models import GroupShare, UserShare from seahub.share.forms import GroupAddRepoForm from seahub.base.accounts import CcnetUser from forms import AddUserForm +import stat +import time +import settings @login_required def root(request): @@ -123,9 +126,15 @@ def repo(request, repo_id): token = "" is_owner = False - if request.user.is_authenticated() and validate_owner(request, repo_id): - is_owner = True - token = seafserv_threaded_rpc.get_repo_token(repo_id) + + if request.user.is_authenticated(): + if validate_owner(request, repo_id): + is_owner = True + token = seafserv_threaded_rpc.get_repo_token(repo_id) + if seafserv_threaded_rpc.repo_is_public(repo_id) > 0: + is_public = True + else: + is_public = False return render_to_response('repo.html', { "repo": repo, @@ -137,6 +146,7 @@ def repo(request, repo_id): 'page_next': page_next, "branches": branches, "is_owner": is_owner, + "is_public": is_public, "token": token, }, context_instance=RequestContext(request)) @@ -195,6 +205,18 @@ def myhome(request): except: pass + for repo in owned_repos: + if seafserv_threaded_rpc.repo_is_public(repo.props.id): + repo.is_public = True + else: + repo.is_public = False + + for repo in fetched_repos: + if seafserv_threaded_rpc.repo_is_public(repo.props.id): + repo.is_public = True + else: + repo.is_public = False + return render_to_response('myhome.html', { "owned_repos": owned_repos, "quota_usage": quota_usage, @@ -224,7 +246,60 @@ def ownerhome(request, owner_name): "owner": owner_name, }, context_instance=RequestContext(request)) +@login_required +def repo_set_public(request, repo_id): + if repo_id: + seafserv_threaded_rpc.repo_set_public(repo_id) + + return HttpResponseRedirect(request.META['HTTP_REFERER']) +@login_required +def repo_unset_public(request, repo_id): + if repo_id: + seafserv_threaded_rpc.repo_unset_public(repo_id) + + return HttpResponseRedirect(request.META['HTTP_REFERER']) + +@login_required +def repo_list_dir(request, repo_id): + if repo_id: + # Not public repo, go to 404 page + if not seafserv_threaded_rpc.repo_is_public(repo_id): + raise Http404 + + repo = seafserv_threaded_rpc.get_repo(repo_id) + if not request.GET.get('root_id'): # No root id..? + # ..use HEAD commit's root id + commit = seafserv_threaded_rpc.get_commit(repo.props.head_cmmt_id) + root_id = commit.props.root_id + else: + root_id = request.GET.get('root_id') + dirs = seafserv_threaded_rpc.list_dir(root_id) + for dirent in dirs: + if stat.S_ISDIR(dirent.props.mode): + dirent.is_dir = True + else: + dirent.is_dir = False + + # Get user quota usage + user_id = request.user.user_id + if user_id: + quota_usage = seafserv_threaded_rpc.get_user_quota_usage(user_id) + + # Get seafile http server address and port from settings.py, + # and cut out last '/' + if settings.HTTP_SERVER_ROOT[-1] == '/': + http_server_root = settings.HTTP_SERVER_ROOT[:-1] + else: + http_server_root = settings.HTTP_SERVER_ROOT + return render_to_response('repo_dir.html', { + "repo_id": repo_id, + "dirs": dirs, + "quota_usage": quota_usage, + "http_server_root": http_server_root, + }, + context_instance=RequestContext(request)) + @login_required def mypeers(request): cid = get_user_cid(request.user)