1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-20 19:08:21 +00:00

[sysadmin] Search user

This commit is contained in:
zhengxie
2013-09-07 11:44:21 +08:00
parent 8acfbd6966
commit 9219d9fd34
5 changed files with 151 additions and 3 deletions

View File

@@ -110,6 +110,7 @@ input.submit {
margin-top:8px; margin-top:8px;
} }
input[type=submit]:hover, input[type=submit]:hover,
input[type=reset]:hover,
input[type=button]:hover, input[type=button]:hover,
button:hover, button:hover,
.fileinput-button:hover { .fileinput-button:hover {
@@ -2536,7 +2537,8 @@ textarea:-moz-placeholder {/* for FF */
font-size:16px; font-size:16px;
color:#aaa; color:#aaa;
} }
#search-form { #search-form,
#search-user-form{
padding:7px 5px; padding:7px 5px;
height:auto; height:auto;
background:#f7f7f8; background:#f7f7f8;

View File

@@ -1,12 +1,13 @@
{% extends "admin_base.html" %} {% extends "admin_base.html" %}
{% load seahub_tags i18n %} {% load seahub_tags i18n %}
{% load url from future %}
{% block nav_useradmin_class %}class="cur"{% endblock %} {% block nav_useradmin_class %}class="cur"{% endblock %}
{% block main_panel %} {% block main_panel %}
<h3>{% trans "All Members" %}</h3> <h3>{% trans "All Members" %}</h3>
<button class="add" id="add-user-btn">{% trans "Add new user" %}</button> <button class="add" id="add-user-btn">{% trans "Add new user" %}</button>
<button class="icon-search fright" id="search-user-btn">{% trans "Search user" %}</button>
<form id="add-user-form" action="" method="post" class="hide">{% csrf_token %} <form id="add-user-form" action="" method="post" class="hide">{% csrf_token %}
<h3>{% trans "Add new user" %}</h3> <h3>{% trans "Add new user" %}</h3>
<label for="id_email">{% trans "Email" %}</label><br /> <label for="id_email">{% trans "Email" %}</label><br />
@@ -112,6 +113,10 @@ $('#add-user-btn').click(function() {
$('#add-user-form').modal(); $('#add-user-form').modal();
$('#simplemodal-container').css({'width':'auto'}); $('#simplemodal-container').css({'width':'auto'});
}); });
$('#search-user-btn').click(function() {
location.href = "{% url 'user_search' %}";
});
$('#add-user-form').submit(function() { $('#add-user-form').submit(function() {
var form = $(this), var form = $(this),
form_id = $(this).attr('id'), form_id = $(this).attr('id'),

View File

@@ -0,0 +1,105 @@
{% extends "admin_base.html" %}
{% load seahub_tags i18n %}
{% block main_panel %}
<h3>{% trans "Search User"%}</h3>
<form id="search-user-form" method="get" action=".">
<label>{% trans "Email" %}</label>
<input type="text" name="email" id="id_email" class="input" value="{{email}}"/><br />
<p class="error hide"></p>
<p class="tip">{% trans "Tip: Use * to match any number of characters." %}</p>
<input type="submit" value="{% trans "Submit" %}" class="submit" />
<input type="reset" value="{% trans "Reset" %}" class="submit" />
</form>
<h3>{% trans "User List"%}</h3>
{% if users %}
<table>
<tr>
<th width="30%">{% trans "Email" %}</th>
<th width="10%">{% trans "Status" %}</th>
<th width="20%">{% trans "Space Used" %}</th>
<th width="15%">{% trans "Create At" %}</th>
<th width="25%">{% trans "Operations" %}</th>
</tr>
{% for user in users %}
<tr>
<td><a href="{{ SITE_ROOT }}useradmin/info/{{ user.props.email }}/">{{ user.email }}</a></td>
{% if user.props.is_active %}
<td>{% trans "Activated" %}</td>
{% else %}
<td><a href="{{ SITE_ROOT }}useradmin/activate/{{ user.props.id }}/" class="activate op">{% trans "Active" %}</a></td>
{% endif %}
<td>
{% if CALC_SHARE_USAGE %}
{{ user.self_usage|filesizeformat }} + {{ user.share_usage|filesizeformat }} {% if user.quota > 0 %} / {{ user.quota|filesizeformat }} {% endif %}
{% else %}
{{ user.self_usage|filesizeformat }} {% if user.quota > 0 %} / {{ user.quota|filesizeformat }} {% endif %}
{% endif %}
</td>
<td>{{ user.ctime|tsstr_sec }}</td>
<td>
{% if not user.is_self %}
<a href="#" class="remove-user-btn op" data-url="{{ SITE_ROOT }}useradmin/remove/{{ user.props.id }}/" data-target="{{ user.props.email }}">{% trans "Delete" %}</a>
<a href="#" class="reset-user-btn op" data-url="{% url 'user_reset' user.id %}" data-target="{{ user.props.email }}">{% trans "ResetPwd" %}</a>
{% if user.is_staff %}
<a href="#" data-url="{% url 'user_remove_admin' user.id %}" data-target="{{ user.props.email }}" class="revoke-admin-btn op">{% trans "Revoke Admin" %}</a>
{% else %}
<a href="#" data-url="{% url 'user_make_admin' user.id %}" data-target="{{ user.props.email }}" class="set-admin-btn op">{% trans "Set Admin" %}</a>
{% endif %}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{% else %}
<p>{% trans "Empty" %}</p>
{% endif %}
<div id="paginator">
{% if current_page != 1 %}
<a href="?email={{email}}&page={{ prev_page }}&per_page={{ per_page }}">{% trans "Previous" %}</a>
{% endif %}
{% if page_next %}
<a href="?email={{email}}&page={{ next_page }}&per_page={{ per_page }}">{% trans "Next" %}</a>
{% endif %}
{% if current_page != 1 or page_next %}
|
{% endif %}
<span>{% trans "Per page: " %}</span>
{% if per_page == 25 %}
<span> 25 </span>
{% else %}
<a href="?email={{email}}&per_page=25" class="per-page">25</a>
{% endif %}
{% if per_page == 50 %}
<span> 50 </span>
{% else %}
<a href="?email={{email}}&per_page=50" class="per-page">50</a>
{% endif %}
{% if per_page == 100 %}
<span> 100 </span>
{% else %}
<a href="?email={{email}}&per_page=100" class="per-page">100</a>
{% endif %}
</div>
{% endblock %}
{% block extra_script %}
<script type="text/javascript">
$('#search-user-form').submit(function() {
var form = $(this),
form_id = $(this).attr('id'),
email = $.trim(form.children('[name="email"]').val());
if (!email) {
apply_form_error(form_id, "{% trans "Email cannot be blank" %}");
return false;
}
form.submit();
});
</script>
{% endblock %}

View File

@@ -15,7 +15,7 @@ from share.views import user_share_list, gen_private_file_share, \
from seahub.views.wiki import personal_wiki, personal_wiki_pages, \ from seahub.views.wiki import personal_wiki, personal_wiki_pages, \
personal_wiki_create, personal_wiki_page_new, personal_wiki_page_edit, \ personal_wiki_create, personal_wiki_page_new, personal_wiki_page_edit, \
personal_wiki_page_delete personal_wiki_page_delete
from seahub.views.sysadmin import sys_repo_admin, sys_user_admin, \ from seahub.views.sysadmin import sys_repo_admin, sys_user_admin, user_search,\
sys_group_admin, user_info, user_add, user_remove, user_make_admin, \ sys_group_admin, user_info, user_add, user_remove, user_make_admin, \
user_remove_admin, user_reset, user_activate, sys_publink_admin user_remove_admin, user_reset, user_activate, sys_publink_admin
from seahub.views.ajax import * from seahub.views.ajax import *
@@ -148,6 +148,7 @@ urlpatterns = patterns('',
url(r'^sys/notificationadmin/', notification_list, name='notification_list'), url(r'^sys/notificationadmin/', notification_list, name='notification_list'),
url(r'^useradmin/add/$', user_add, name="user_add"), url(r'^useradmin/add/$', user_add, name="user_add"),
(r'^useradmin/remove/(?P<user_id>[^/]+)/$', user_remove), (r'^useradmin/remove/(?P<user_id>[^/]+)/$', user_remove),
url(r'^useradmin/search/$', user_search, name="user_search"),
url(r'^useradmin/makeadmin/(?P<user_id>[^/]+)/$', user_make_admin, name='user_make_admin'), url(r'^useradmin/makeadmin/(?P<user_id>[^/]+)/$', user_make_admin, name='user_make_admin'),
url(r'^useradmin/removeadmin/(?P<user_id>[^/]+)/$', user_remove_admin, name='user_remove_admin'), url(r'^useradmin/removeadmin/(?P<user_id>[^/]+)/$', user_remove_admin, name='user_remove_admin'),
url(r'^useradmin/info/(?P<email>[^/]+)/$', user_info, name='user_info'), url(r'^useradmin/info/(?P<email>[^/]+)/$', user_info, name='user_info'),

View File

@@ -418,3 +418,38 @@ def sys_publink_admin(request):
'page_next': page_next, 'page_next': page_next,
}, },
context_instance=RequestContext(request)) context_instance=RequestContext(request))
@login_required
@sys_staff_required
def user_search(request):
"""Search a user.
"""
email = request.GET.get('email', '')
email_patt = email.replace('*', '%')
# 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', '100'))
except ValueError:
current_page = 1
per_page = 100
users_plus_one = ccnet_threaded_rpc.search_emailusers(
email_patt, per_page * (current_page - 1), per_page + 1)
if len(users_plus_one) == per_page + 1:
page_next = True
else:
page_next = False
users = users_plus_one[:per_page]
return render_to_response('sysadmin/user_search.html', {
'users': users,
'email': email,
'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))