From 02b3f6f0af568a0b415cb9cb65dfce89e189912e Mon Sep 17 00:00:00 2001 From: xiez Date: Wed, 29 Aug 2012 13:40:47 +0800 Subject: [PATCH] Add org personal page, and inner pub page --- .../templates/organizations/personal.html | 77 ++++++++++++++++++ organizations/urls.py | 3 + organizations/views.py | 78 ++++++++++++++++--- templates/org_base.html | 9 ++- templates/snippets/repo_create_form.html | 2 +- thirdpart/seaserv/__init__.py | 3 +- thirdpart/seaserv/service.py | 19 +++++ views.py | 6 +- 8 files changed, 179 insertions(+), 18 deletions(-) create mode 100644 organizations/templates/organizations/personal.html diff --git a/organizations/templates/organizations/personal.html b/organizations/templates/organizations/personal.html new file mode 100644 index 0000000000..3f5d7a51c7 --- /dev/null +++ b/organizations/templates/organizations/personal.html @@ -0,0 +1,77 @@ +{% extends "org_base.html" %} +{% load seahub_tags avatar_tags group_avatar_tags %} + +{% block nav_org_personal_class %}class="cur"{% endblock %} +{% block left_panel %} + +

我的基本信息

+
+ {% avatar request.user 48 %} +{% if nickname %} +

{{ nickname }}

+{% else %} +

暂无昵称 编辑

+{% endif %} +
+ +

已用空间

+

+ +

我的小组

+{% if groups %} + +{% else %} +

暂无

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

我拥有的同步目录

+ + + + + + + + +{% if owned_repos %} + {% for repo in owned_repos %} + + + + {% if repo.latest_modify %} + + {% else %} + + + {% endfor %} +{% endif %} +
名字描述更新时间操作
{{ repo.props.name }}{{ repo.props.desc }}{{ repo.latest_modify|translate_commit_time }}-- + {% endif %} + + 同步 + 共享 + 删除 +
+ +{% include "snippets/repo_create_form.html" %} + +{% endblock %} + +{% block extra_script %} + +{% endblock %} diff --git a/organizations/urls.py b/organizations/urls.py index 70efb10055..7c5004d710 100644 --- a/organizations/urls.py +++ b/organizations/urls.py @@ -7,6 +7,9 @@ urlpatterns = patterns('', url(r'^create/$', create_org, name='create_org'), url(r'^messages/$', org_msg, name='org_msg'), url(r'^(?P[^/]+)/$', org_info, name='org_info'), + url(r'^(?P[^/]+)/personal/$', org_personal, name='org_personal'), + url(r'^(?P[^/]+)/repo/create/$', org_repo_create, name='org_repo_create'), + url(r'^(?P[^/]+)/innerpubrepo/create/$', org_inner_pub_repo_create, name='org_inner_pub_repo_create'), url(r'^(?P[^/]+)/groups/$', org_groups, name='org_groups'), url(r'^([^/]+)/repo/create/$', org_repo_create, name='org_repo_create'), url(r'^([^/]+)/repo/history/(?P[^/]+)/$', repo_history, name='org_repo_history'), diff --git a/organizations/views.py b/organizations/views.py index 1dd7139c29..bd81f77134 100644 --- a/organizations/views.py +++ b/organizations/views.py @@ -13,7 +13,7 @@ from django.template import Context, loader, RequestContext from auth.decorators import login_required from pysearpc import SearpcError from seaserv import ccnet_threaded_rpc, seafserv_threaded_rpc, \ - get_orgs_by_user, get_org_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, \ remove_org_user, get_org_groups, is_valid_filename, \ create_org_repo, get_org_id_by_group @@ -62,7 +62,7 @@ def create_org(request): @login_required def org_info(request, url_prefix): """ - Show org info page. + Show org info page, list org inner pub repos. """ org = get_user_current_org(request.user.username, url_prefix) if not org: @@ -74,18 +74,75 @@ def org_info(request, url_prefix): org_members = ccnet_threaded_rpc.get_org_emailusers(url_prefix, 0, MAX_INT) - repos = get_org_repos(org.org_id, 0, MAX_INT) - calculate_repo_last_modify(repos) - repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify)) + repos = list_org_inner_pub_repos(org.org_id) - url = 'organizations/%s/repo/create/' % org.url_prefix return render_to_response('organizations/org_info.html', { 'org': org, 'org_users': org_members, 'repos': repos, - 'url': seahub_settings.SITE_ROOT + url, + 'url': reverse(org_inner_pub_repo_create, args=[url_prefix]), }, context_instance=RequestContext(request)) +@login_required +def org_personal(request, url_prefix): + """ + Show org personal page. + """ + org = get_user_current_org(request.user.username, url_prefix) + if not org: + return HttpResponseRedirect(reverse(myhome)) + + user = request.user.username + + # Org repos that I own + owned_repos = seafserv_threaded_rpc.list_org_repos_by_owner(org.org_id, + user) + calculate_repo_last_modify(owned_repos) + owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify)) + + return render_to_response('organizations/personal.html', { + 'owned_repos': owned_repos, + 'url': reverse('org_repo_create', args=[url_prefix]), + }, context_instance=RequestContext(request)) + +@login_required +def org_inner_pub_repo_create(request, url_prefix): + """ + Handle ajax post to create org inner pub repo, this repo is accessiable by + all org members. + """ + if not request.is_ajax() or request.method != 'POST': + return Http404 + + result = {} + content_type = 'application/json; charset=utf-8' + + form = RepoCreateForm(request.POST) + if form.is_valid(): + repo_name = form.cleaned_data['repo_name'] + repo_desc = form.cleaned_data['repo_desc'] + passwd = form.cleaned_data['passwd'] + user = request.user.username + org_id = request.user.org['org_id'] + + try: + # create a org repo + repo_id = seafserv_threaded_rpc.create_org_repo(repo_name, + repo_desc, + user, passwd,org_id) + # set org inner pub + seafserv_threaded_rpc.set_org_inner_pub_repo(org_id, repo_id) + except: + repo_id = None + if not repo_id: + result['error'] = u"创建目录失败" + else: + result['success'] = True + return HttpResponse(json.dumps(result), content_type=content_type) + else: + return HttpResponseBadRequest(json.dumps(form.errors), + content_type=content_type) + @login_required def org_groups(request, url_prefix): """ @@ -254,10 +311,9 @@ def org_msg(request): @login_required def org_repo_create(request, url_prefix): - ''' - Handle ajax post to create org repo. - - ''' + """ + Handle ajax post to create org repo, this repo is only accessiable by owner. + """ if not request.is_ajax() or request.method != 'POST': return Http404 diff --git a/templates/org_base.html b/templates/org_base.html index 6b4dbca0de..3b69ee46c3 100644 --- a/templates/org_base.html +++ b/templates/org_base.html @@ -1,12 +1,17 @@ {% extends "base.html" %} +{% load url from future %} + {% block top_bar_org_myaccount_class %} class="cur"{% endblock %} {% block nav %} {% endblock %} diff --git a/templates/snippets/repo_create_form.html b/templates/snippets/repo_create_form.html index fa4adbfe5a..d1efde3a17 100644 --- a/templates/snippets/repo_create_form.html +++ b/templates/snippets/repo_create_form.html @@ -1,4 +1,4 @@ -
+

新建同步目录



diff --git a/thirdpart/seaserv/__init__.py b/thirdpart/seaserv/__init__.py index c4b8a11aa7..11659d0218 100644 --- a/thirdpart/seaserv/__init__.py +++ b/thirdpart/seaserv/__init__.py @@ -8,7 +8,8 @@ from service import get_org_groups, get_personal_groups, get_group_repoids, \ check_group_staff, remove_group_user, get_group, get_org_id_by_group, \ get_group_members, get_shared_groups_by_repo, is_group_user 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 from service import get_binding_peerids, is_valid_filename, check_permission from service import create_org, get_orgs_by_user, get_org_by_url_prefix, \ get_user_current_org, add_org_user, remove_org_user, get_org_by_id, \ diff --git a/thirdpart/seaserv/service.py b/thirdpart/seaserv/service.py index 90bbabc71b..4e151c4038 100644 --- a/thirdpart/seaserv/service.py +++ b/thirdpart/seaserv/service.py @@ -264,6 +264,25 @@ def get_org_repos(org_id, start, limit): return repos +def list_org_inner_pub_repos(org_id, start=None, limit=None): + """ + List org inner pub repos, which can be access by all org members. + """ + try: + repos = seafserv_threaded_rpc.list_org_inner_pub_repos(org_id) + except SearpcError: + repos = [] + + # calculate repo's lastest modify time + for repo in repos: + try: + repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime + except: + repo.latest_modify = None + # sort repos by latest modify time + repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify)) + return repos + def get_org_id_by_repo_id(repo_id): """ Get org id according repo id. diff --git a/views.py b/views.py index 17262d2b20..d95e9113e7 100644 --- a/views.py +++ b/views.py @@ -639,7 +639,7 @@ def myhome(request): ctx_dict = {'base_template': 'myhome_base.html', 'org_dict': None} set_cur_ctx(request, ctx_dict) - + return render_to_response('myhome.html', { "myname": email, "nickname": nickname, @@ -652,7 +652,7 @@ def myhome(request): "grpmsg_list": grpmsg_list, "grpmsg_reply_list": grpmsg_reply_list, "orgmsg_list": orgmsg_list, - "url": settings.SITE_ROOT + 'repo/create/', + "url": reverse(repo_create), }, context_instance=RequestContext(request)) @login_required @@ -668,7 +668,7 @@ def public_home(request): return render_to_response('public_home.html', { 'users': users, 'public_repos': public_repos, - "url": settings.SITE_ROOT + 'publicrepo/create/', + "url": reverse(public_repo_create), }, context_instance=RequestContext(request)) @login_required