mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-25 18:20:48 +00:00
Merge branch 'group_admin'
Conflicts: group/views.py
This commit is contained in:
commit
a4ff981110
@ -23,6 +23,7 @@
|
|||||||
<p>暂无</p>
|
<p>暂无</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if is_join %}
|
||||||
<h3>操作</h3>
|
<h3>操作</h3>
|
||||||
<ul class="with-bg">
|
<ul class="with-bg">
|
||||||
{% if is_staff %}
|
{% if is_staff %}
|
||||||
@ -31,6 +32,7 @@
|
|||||||
<li><a id="quit-group" href="#">退出小组</a></li>
|
<li><a id="quit-group" href="#">退出小组</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
@ -25,7 +25,8 @@ def group_list(request):
|
|||||||
return go_error(request, u'小组名称只能包含中英文字符,数字及下划线')
|
return go_error(request, u'小组名称只能包含中英文字符,数字及下划线')
|
||||||
|
|
||||||
try:
|
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:
|
except SearpcError, e:
|
||||||
error_msg = e.msg
|
error_msg = e.msg
|
||||||
return go_error(request, error_msg)
|
return go_error(request, error_msg)
|
||||||
@ -53,7 +54,9 @@ def group_remove(request, group_id):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
return HttpResponseRedirect(reverse('group_list', args=[]))
|
return HttpResponseRedirect(reverse('group_list', args=[]))
|
||||||
|
|
||||||
if not check_group_staff(group_id_int, request.user):
|
# 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'只有小组管理员有权解散小组')
|
return go_permission_error(request, u'只有小组管理员有权解散小组')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -62,6 +65,9 @@ def group_remove(request, group_id):
|
|||||||
except SearpcError, e:
|
except SearpcError, e:
|
||||||
return go_error(request, e.msg)
|
return go_error(request, e.msg)
|
||||||
|
|
||||||
|
if request.GET.get('src', '') == 'groupadmin':
|
||||||
|
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
||||||
|
else:
|
||||||
return HttpResponseRedirect(reverse('group_list', args=[]))
|
return HttpResponseRedirect(reverse('group_list', args=[]))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@ -73,7 +79,8 @@ def group_quit(request, group_id):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
ccnet_rpc.quit_group(group_id_int, request.user.username)
|
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:
|
except SearpcError, e:
|
||||||
return go_error(request, e.msg)
|
return go_error(request, e.msg)
|
||||||
|
|
||||||
@ -86,13 +93,13 @@ def group_info(request, group_id):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
return HttpResponseRedirect(reverse('group_list', args=[]))
|
return HttpResponseRedirect(reverse('group_list', args=[]))
|
||||||
|
|
||||||
# Check whether user belong to the group
|
# Check whether user belong to the group or admin
|
||||||
joined = False
|
joined = False
|
||||||
groups = ccnet_rpc.get_groups(request.user.username)
|
groups = ccnet_rpc.get_groups(request.user.username)
|
||||||
for group in groups:
|
for group in groups:
|
||||||
if group.id == group_id_int:
|
if group.id == group_id_int:
|
||||||
joined = True
|
joined = True
|
||||||
if not joined:
|
if not joined and not request.user.is_staff:
|
||||||
return go_error(request, u'未加入该小组')
|
return go_error(request, u'未加入该小组')
|
||||||
|
|
||||||
group = ccnet_rpc.get_group(group_id_int)
|
group = ccnet_rpc.get_group(group_id_int)
|
||||||
@ -136,6 +143,7 @@ def group_info(request, group_id):
|
|||||||
"group_id": group_id,
|
"group_id": group_id,
|
||||||
"group" : group,
|
"group" : group,
|
||||||
"is_staff": is_staff,
|
"is_staff": is_staff,
|
||||||
|
"is_join": joined,
|
||||||
}, context_instance=RequestContext(request));
|
}, context_instance=RequestContext(request));
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -9,6 +9,9 @@
|
|||||||
<li>
|
<li>
|
||||||
<a href="{{ SITE_ROOT }}useradmin/" {% block nav_useradmin_class %}{% endblock %}>用户管理</a>
|
<a href="{{ SITE_ROOT }}useradmin/" {% block nav_useradmin_class %}{% endblock %}>用户管理</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ SITE_ROOT }}groupadmin/" {% block nav_groupadmin_class %}{% endblock %}>小组管理</a>
|
||||||
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
60
templates/group_admin.html
Normal file
60
templates/group_admin.html
Normal 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 %}
|
||||||
|
|
3
urls.py
3
urls.py
@ -8,7 +8,7 @@ from seahub.views import root, peers, myhome, \
|
|||||||
ownerhome, remove_fetched_repo, repo_history_dir, repo_history_revert, \
|
ownerhome, remove_fetched_repo, repo_history_dir, repo_history_revert, \
|
||||||
user_info, repo_set_access_property, repo_access_file, \
|
user_info, repo_set_access_property, repo_access_file, \
|
||||||
repo_add_share, repo_list_share, repo_remove_share, repo_download, \
|
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:
|
# Uncomment the next two lines to enable the admin:
|
||||||
#from django.contrib import admin
|
#from django.contrib import admin
|
||||||
@ -60,6 +60,7 @@ urlpatterns = patterns('',
|
|||||||
(r'^avatar/', include('avatar.urls')),
|
(r'^avatar/', include('avatar.urls')),
|
||||||
(r'^contacts/', include('contacts.urls')),
|
(r'^contacts/', include('contacts.urls')),
|
||||||
(r'^group/', include('seahub.group.urls')),
|
(r'^group/', include('seahub.group.urls')),
|
||||||
|
url(r'^groupadmin/$', group_admin, name='group_admin'),
|
||||||
(r'^profile/', include('seahub.profile.urls')),
|
(r'^profile/', include('seahub.profile.urls')),
|
||||||
(r'^share/', include('share.urls')),
|
(r'^share/', include('share.urls')),
|
||||||
|
|
||||||
|
33
views.py
33
views.py
@ -731,7 +731,9 @@ def seafadmin(request):
|
|||||||
current_page = 1
|
current_page = 1
|
||||||
per_page = 25
|
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]
|
repos = repos_all[:per_page]
|
||||||
|
|
||||||
if len(repos_all) == per_page + 1:
|
if len(repos_all) == per_page + 1:
|
||||||
@ -892,3 +894,32 @@ def back_local(request):
|
|||||||
|
|
||||||
return HttpResponseRedirect(redirect_url)
|
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))
|
||||||
|
Loading…
Reference in New Issue
Block a user