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:
parent
06de726050
commit
02b3f6f0af
77
organizations/templates/organizations/personal.html
Normal file
77
organizations/templates/organizations/personal.html
Normal 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 %}
|
@ -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'),
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 %}
|
||||
|
@ -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 />
|
||||
|
@ -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, \
|
||||
|
@ -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.
|
||||
|
6
views.py
6
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
|
||||
|
Loading…
Reference in New Issue
Block a user