1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-02 07:47:32 +00:00

Add org personal page, and inner pub page

This commit is contained in:
xiez 2012-08-29 13:40:47 +08:00
parent 06de726050
commit 02b3f6f0af
8 changed files with 179 additions and 18 deletions

View File

@ -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 %}
<h3>我的基本信息</h3>
<div class="home-profile w100 ovhd">
<a href="{{ SITE_ROOT }}profile/" class="no-deco">{% avatar request.user 48 %}</a>
{% if nickname %}
<p class="fleft">{{ nickname }}</p>
{% else %}
<p class="fleft">暂无昵称 <a href="{{ SITE_ROOT }}profile/"><img src="{{ MEDIA_URL }}img/edit_12.png" alt="编辑" title="编辑" /></a></p>
{% endif %}
</div>
<h3>已用空间</h3>
<p></p>
<h3>我的小组</h3>
{% if groups %}
<ul>
{% for group in groups %}
<li class="mygroup">
<a href="{{ SITE_ROOT }}group/{{ group.props.id }}/" class="no-deco">
<img src="{% grp_avatar_url group.props.id 48 %}" alt="{{ group.props.group_name }}的图标" title="{{ group.props.group_name }}" class="avatar" />
</a><br />
<a href="{{ SITE_ROOT }}group/{{ group.props.id }}/">{{ group.props.group_name }}</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>暂无</p>
{% endif %}
{% endblock %}
{% block right_panel %}
<h3>我拥有的同步目录</h3>
<button id="repo-create">新建同步目录</button>
<table>
<tr>
<th width="25%">名字</th>
<th width="43%">描述</th>
<th width="20%">更新时间</th>
<th width="12%">操作</th>
</tr>
{% if owned_repos %}
{% for repo in owned_repos %}
<tr>
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/">{{ repo.props.name }}</a></td>
<td>{{ repo.props.desc }}</td>
{% if repo.latest_modify %}
<td>{{ repo.latest_modify|translate_commit_time }}</td>
{% else %}
<td>--</tdb>
{% endif %}
<td>
<img src="{{ MEDIA_URL }}img/sync-20.png" data="{{ repo.props.id }}" class="download-btn vh" title="同步到本地" alt="同步" />
<img src="{{ MEDIA_URL }}img/share-20.png" data="{{ repo.props.id }}" class="repo-share-btn vh" title="共享" alt="共享" />
<img src="{{ MEDIA_URL }}img/delete-20.png" data="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/?next={{ request.path }}" class="repo-delete-btn vh" title="删除" alt="删除" />
</td>
</tr>
{% endfor %}
{% endif %}
</table>
{% include "snippets/repo_create_form.html" %}
{% endblock %}
{% block extra_script %}
<script type="text/javascript">
{% include "snippets/myhome_extra_script.html" %}
{% include "snippets/repo_create_js.html" %}
</script>
{% endblock %}

View File

@ -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<url_prefix>[^/]+)/$', org_info, name='org_info'),
url(r'^(?P<url_prefix>[^/]+)/personal/$', org_personal, name='org_personal'),
url(r'^(?P<url_prefix>[^/]+)/repo/create/$', org_repo_create, name='org_repo_create'),
url(r'^(?P<url_prefix>[^/]+)/innerpubrepo/create/$', org_inner_pub_repo_create, name='org_inner_pub_repo_create'),
url(r'^(?P<url_prefix>[^/]+)/groups/$', org_groups, name='org_groups'),
url(r'^([^/]+)/repo/create/$', org_repo_create, name='org_repo_create'),
url(r'^([^/]+)/repo/history/(?P<repo_id>[^/]+)/$', repo_history, name='org_repo_history'),

View File

@ -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

View File

@ -1,12 +1,17 @@
{% extends "base.html" %}
{% load url from future %}
{% block top_bar_org_myaccount_class %} class="cur"{% endblock %}
{% block nav %}
<ul class="nav">
<li>
<a href="{% url organizations.views.org_info org.url_prefix %}" {% block nav_org_class %}{% endblock %}>{{ org.org_name }}</a>
<a href="{% url 'organizations.views.org_personal' org.url_prefix %}" {% block nav_org_personal_class %}{% endblock %}>个人页面</a>
</li>
<li>
<a href="{% url organizations.views.org_groups org.url_prefix %}" {% block nav_group_class %}{% endblock %}>小组</a>
<a href="{% url 'organizations.views.org_info' org.url_prefix %}" {% block nav_org_class %}{% endblock %}>{{ org.org_name }}</a>
</li>
<li>
<a href="{% url 'organizations.views.org_groups' org.url_prefix %}" {% block nav_group_class %}{% endblock %}>小组</a>
</li>
</ul>
{% endblock %}

View File

@ -1,4 +1,4 @@
<form id="repo-create-form" action="{{ SITE_ROOT }}repo/create/" method="post" class="hide">
<form id="repo-create-form" action="" method="post" class="hide">
<h3>新建同步目录</h3>
<label>名称:</label><br/>
<input id="repo-name" type="text" name="repo_name" value="" /><br />

View File

@ -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, \

View File

@ -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.

View File

@ -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