1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-16 15:19:06 +00:00

Add groupadmin feature

This commit is contained in:
xiez
2012-05-26 20:52:53 +08:00
parent 35aefe608d
commit a75e3b699d
8 changed files with 113 additions and 108 deletions

View File

@@ -23,6 +23,7 @@
<p>暂无</p>
{% endif %}
{% if is_join %}
<h3>操作</h3>
<ul class="with-bg">
{% if is_staff %}
@@ -31,6 +32,7 @@
<li><a id="quit-group" href="#">退出小组</a></li>
{% endif %}
</ul>
{% endif %}
{% endblock %}

View File

@@ -25,7 +25,8 @@ def group_list(request):
return go_error(request, u'小组名称只能包含中英文字符,数字及下划线')
try:
ccnet_rpc.create_group(group_name.encode('utf-8'), request.user.username)
ccnet_rpc.create_group(group_name.encode('utf-8'),
request.user.username)
except SearpcError, e:
error_msg = e.msg
return go_error(request, error_msg)
@@ -53,8 +54,9 @@ def group_remove(request, group_id):
except ValueError:
return HttpResponseRedirect(reverse('group_list', args=[]))
# Check whether use is the group staff
if not ccnet_rpc.check_group_staff(group_id_int, request.user.username):
# Check whether user is the group staff or admin
if not ccnet_rpc.check_group_staff(group_id_int, request.user.username) \
and not request.user.is_staff:
return go_permission_error(request, u'只有小组管理员有权解散小组')
try:
@@ -63,7 +65,10 @@ def group_remove(request, group_id):
except SearpcError, e:
return go_error(request, e.msg)
return HttpResponseRedirect(reverse('group_list', args=[]))
if request.GET.get('src', '') == 'groupadmin':
return HttpResponseRedirect(request.META['HTTP_REFERER'])
else:
return HttpResponseRedirect(reverse('group_list', args=[]))
@login_required
def group_quit(request, group_id):
@@ -74,7 +79,8 @@ def group_quit(request, group_id):
try:
ccnet_rpc.quit_group(group_id_int, request.user.username)
seafserv_threaded_rpc.remove_repo_group(group_id_int, request.user.username)
seafserv_threaded_rpc.remove_repo_group(group_id_int,
request.user.username)
except SearpcError, e:
return go_error(request, e.msg)
@@ -87,13 +93,13 @@ def group_info(request, group_id):
except ValueError:
return HttpResponseRedirect(reverse('group_list', args=[]))
# Check whether user belong to the group
# Check whether user belong to the group or admin
joined = False
groups = ccnet_rpc.get_groups(request.user.username)
for group in groups:
if group.id == group_id_int:
joined = True
if not joined:
if not joined and not request.user.is_staff:
return go_error(request, u'未加入该小组')
group = ccnet_rpc.get_group(group_id_int)
@@ -137,6 +143,7 @@ def group_info(request, group_id):
"group_id": group_id,
"group" : group,
"is_staff": is_staff,
"is_join": joined,
}, context_instance=RequestContext(request));
@login_required

View File

@@ -9,6 +9,9 @@
<li>
<a href="{{ SITE_ROOT }}useradmin/" {% block nav_useradmin_class %}{% endblock %}>用户管理</a>
</li>
<li>
<a href="{{ SITE_ROOT }}groupadmin/" {% block nav_groupadmin_class %}{% endblock %}>小组管理</a>
</li>
{% endif %}
</ul>
{% endblock %}

View File

@@ -1,77 +0,0 @@
{% extends "base.html" %}
{% block title %}Group{% endblock %}
{% block left_panel %}
<ul>
<li><a href="{{ SITE_ROOT }}group/{{ group.props.id }}/addrepo/">Add Repo</a></li>
</ul>
{% endblock %}
{% block right_panel %}
<p>Use the following command to add a group:</p>
<div><code>ccnet-tool group-follow &lt;group-id&gt; &lt;rendevous-id&gt;</code></div>
<h3>Group</h3>
<table class="default">
<tr>
<td>Name</td>
<td>{{ group.props.name }}</td>
</tr>
<tr>
<td>ID</td>
<td>{{ group.props.id }}</td>
</tr>
<tr>
<td>Timestamp</td>
<td>{{ group.props.timestamp }}</td>
</tr>
<tr>
<td>Rendezvous</td>
<td>{{ group.props.rendezvous }}</td>
</tr>
<tr>
<td>Creator</td>
<td>{{ group.props.creator }}</td>
</tr>
<tr>
<td>Maintainer</td>
<td>
{% for peer in group.maintainers %}
{{peer}}
{% endfor %}
</td>
</tr>
<tr>
<td>Members</td>
<td>
{% for peer in group.members %}
{{peer}}
{% endfor %}
</td>
</tr>
<tr>
<td>Followers</td>
<td>
{% for peer in group.followers %}
{{peer}}
{% endfor %}
</td>
</tr>
</table>
<h3>repos</h3>
<table class="default">
<tr>
<th>Repo ID</th>
</tr>
{% for item in shared_repos %}
<tr>
<td>{{ item.repo_id }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}

View File

@@ -1,22 +0,0 @@
{% extends "base.html" %}
{% block title %}Group{% endblock %}
{% block left_panel %}
{% endblock %}
{% block right_panel %}
Add repo to {{ group.props.name }}
<form action="" method="post">
{% if error_msg %}
<p class="error">{{ error_msg }}</p>
{% endif %}
<label>Repo ID:</label><br/>
{{ form.repo_id }}
<input type="submit" value="Submit" />
</form>
{% endblock %}

View File

@@ -0,0 +1,60 @@
{% extends "admin_base.html" %}
{% load seahub_tags %}
{% block nav_groupadmin_class %}class="cur"{% endblock %}
{% block right_panel %}
<h3>所有小组</h3>
{% if groups %}
<table>
<tr>
<th width="30%">名字</th>
<th width="40%">创建者</th>
<th width="23%">创建时间</th>
<th width="7%">操作</th>
</tr>
{% for group in groups %}
<tr>
<td><a href="{{ SITE_ROOT }}group/{{ group.props.id }}/">{{ group.props.group_name }}</a></td>
<td>{{ group.props.creator_name }}</td>
<td>{{ group.props.timestamp|tsstr_sec }}</td>
<td><button data="{{ SITE_ROOT}}group/{{ group.id }}/?op=delete&src=groupadmin" class="group-remove-btn">删除</button></td>
</tr>
{% endfor %}
</table>
<div id="paginator">
{% if current_page != 1 %}
<a href="{{ SITE_ROOT }}groupadmin/?page={{ prev_page }}&per_page={{ per_page }}">上一页</a>
{% endif %}
{% if page_next %}
<a href="{{ SITE_ROOT }}groupadmin/?page={{ next_page }}&per_page={{ per_page }}">下一页</a>
{% endif %}
<span>每页:</span>
{% if per_page == 25 %}
<span> 25 </span>
{% else %}
<a href="{{ SITE_ROOT }}groupadmin/?per_page=25" class="per-page">25</a>
{% endif %}
{% if per_page == 50 %}
<span> 50 </span>
{% else %}
<a href="{{ SITE_ROOT }}groupadmin/?per_page=50" class="per-page">50</a>
{% endif %}
{% if per_page == 100 %}
<span> 100 </span>
{% else %}
<a href="{{ SITE_ROOT }}groupadmin/?per_page=100" class="per-page">100</a>
{% endif %}
</div>
{% else %}
<p>暂无</p>
{% endif %}
{% endblock %}
{% block extra_script %}
<script type="text/javascript">
addConfirmTo($('.group-remove-btn'), '确定要删除小组?')
</script>
{% endblock %}

View File

@@ -8,7 +8,7 @@ from seahub.views import root, peers, myhome, \
ownerhome, remove_fetched_repo, repo_history_dir, \
user_info, repo_set_access_property, repo_access_file, \
repo_add_share, repo_list_share, repo_remove_share, repo_download, \
seafile_access_check, back_local
seafile_access_check, back_local, group_admin
# Uncomment the next two lines to enable the admin:
#from django.contrib import admin
@@ -59,6 +59,7 @@ urlpatterns = patterns('',
(r'^avatar/', include('avatar.urls')),
(r'^contacts/', include('contacts.urls')),
(r'^group/', include('seahub.group.urls')),
url(r'^groupadmin/$', group_admin, name='group_admin'),
(r'^profile/', include('seahub.profile.urls')),
(r'^share/', include('share.urls')),

View File

@@ -673,7 +673,9 @@ def seafadmin(request):
current_page = 1
per_page = 25
repos_all = seafserv_threaded_rpc.get_repo_list(per_page * (current_page -1), per_page + 1)
repos_all = seafserv_threaded_rpc.get_repo_list(per_page *
(current_page -1),
per_page + 1)
repos = repos_all[:per_page]
if len(repos_all) == per_page + 1:
@@ -834,3 +836,32 @@ def back_local(request):
return HttpResponseRedirect(redirect_url)
def group_admin(request):
if not request.user.is_staff:
raise Http404
# Make sure page request is an int. If not, deliver first page.
try:
current_page = int(request.GET.get('page', '1'))
per_page= int(request.GET.get('per_page', '25'))
except ValueError:
current_page = 1
per_page = 25
groups_plus_one = ccnet_rpc.get_all_groups(per_page * (current_page -1),
per_page +1)
groups = groups_plus_one[:per_page]
if len(groups_plus_one) == per_page + 1:
page_next = True
else:
page_next = False
return render_to_response("group_admin.html", {
"groups": groups,
'current_page': current_page,
'prev_page': current_page-1,
'next_page': current_page+1,
'per_page': per_page,
'page_next': page_next,
}, context_instance=RequestContext(request))