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

List database and ldap users in sysadmin

This commit is contained in:
zhengxie
2013-11-21 11:47:53 +08:00
parent 3a79b7de6a
commit 4807598f8e
8 changed files with 205 additions and 36 deletions

View File

@@ -7,7 +7,7 @@ from django.dispatch import receiver
from django.utils import timezone from django.utils import timezone
from pysearpc import SearpcError from pysearpc import SearpcError
from seaserv import seafile_api, get_emailusers from seaserv import seafile_api
from seahub.auth.signals import user_logged_in from seahub.auth.signals import user_logged_in
from seahub.shortcuts import get_first_object_or_none from seahub.shortcuts import get_first_object_or_none

View File

@@ -0,0 +1,46 @@
{% extends "admin_base.html" %}
{% load seahub_tags i18n %}
{% block nav_useradmin_class %}class="cur"{% endblock %}
{% block title_panel %}
<div class="tabnav">
<ul class="tabnav-tabs">
<li class="tabnav-tab"><a href="{% url 'sys_useradmin' %}">{% trans "Database" %}</a></li>
<li class="tabnav-tab tabnav-tab-cur">{% trans "LDAP" %}</li>
</ul>
<button class="icon-search fright" id="search-user-btn"> {% trans "Search" %}</button>
</div>
{% endblock %}
{% block main_panel %}
<table>
<tr>
<th width="80%">{% trans "Email" %}</th>
<th width="20%">{% trans "Space Used" %}</th>
</tr>
{% for user in users %}
<tr>
<td data="{{user.id}}"><a href="{{ SITE_ROOT }}useradmin/info/{{ user.props.email }}/">{{ user.email }}</a></td>
<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>
</tr>
{% endfor %}
</table>
{% include "sysadmin/useradmin_paginator.html" %}
{% endblock %}
{% block extra_script %}
<script type="text/javascript">
$('#search-user-btn').click(function() {
location.href = "{% url 'user_search' %}";
});
</script>
{% endblock %}

View File

@@ -2,11 +2,23 @@
{% load seahub_tags i18n %} {% load seahub_tags i18n %}
{% block nav_useradmin_class %}class="cur"{% endblock %} {% block nav_useradmin_class %}class="cur"{% endblock %}
{% block title_panel %}
<div class="tabnav">
<ul class="tabnav-tabs">
<li class="tabnav-tab tabnav-tab-cur">{% trans "Database" %}</li>
{% if have_ldap %}
<li class="tabnav-tab"><a href="{% url 'sys_ldap_useradmin' %}">{% trans "LDAP" %}</a></li>
{% endif %}
</ul>
<button class="icon-search fright" id="search-user-btn"> {% trans "Search" %}</button>
</div>
{% endblock %}
{% block main_panel %} {% block main_panel %}
<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" %}</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>
@@ -21,34 +33,7 @@
</form> </form>
{% include "sysadmin/useradmin_table.html"%} {% include "sysadmin/useradmin_table.html"%}
{% include "sysadmin/useradmin_paginator.html" %}
<div id="paginator">
{% if current_page != 1 %}
<a href="{{ SITE_ROOT }}sys/useradmin/?page={{ prev_page }}&per_page={{ per_page }}">{% trans "Previous" %}</a>
{% endif %}
{% if page_next %}
<a href="{{ SITE_ROOT }}sys/useradmin/?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="{{ SITE_ROOT}}sys/useradmin/?per_page=25" class="per-page">25</a>
{% endif %}
{% if per_page == 50 %}
<span> 50 </span>
{% else %}
<a href="{{ SITE_ROOT}}sys/useradmin/?per_page=50" class="per-page">50</a>
{% endif %}
{% if per_page == 100 %}
<span> 100 </span>
{% else %}
<a href="{{ SITE_ROOT}}sys/useradmin/?per_page=100" class="per-page">100</a>
{% endif %}
</div>
{% endblock %} {% endblock %}

View File

@@ -11,7 +11,60 @@
</form> </form>
<h3>{% trans "Result"%}</h3> <h3>{% trans "Result"%}</h3>
{% if users %} {% if users %}
{% include "sysadmin/useradmin_table.html" %} <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 data="{{user.id}}"><a href="{{ SITE_ROOT }}useradmin/info/{{ user.props.email }}/">{{ user.email }}</a></td>
<td>
{% if user.source != 'LDAP' %}
<div class="user-status">
{% if user.is_active %}
<span class="user-status-cur-value">{% trans "Active" %}</span>
{% else %}
<span class="user-status-cur-value">{% trans "Inactive" %}</span>
{% endif %}
<img src="{{MEDIA_URL}}img/edit_12.png" alt="{% trans "Edit"%}" title="{% trans "Edit"%}" class="user-status-edit-icon vh" />
</div>
<select name="permission" class="user-status-select hide">
<option value="1" {%if user.is_active %}selected="selected"{% endif %}>{% trans "Active" %}</option>
<option value="0" {%if not user.is_active %}selected="selected"{% endif %}>{% trans "Inactive"%}</option>
</select>
{% endif %}
</td>
<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>{% if user.source != 'LDAP' %}{{ user.ctime|tsstr_sec }}{% endif %}</td>
<td>
{% if user.source != 'LDAP' %}
{% 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 %}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{% else %} {% else %}
<p>{% trans "No result" %}</p> <p>{% trans "No result" %}</p>
{% endif %} {% endif %}

View File

@@ -0,0 +1,28 @@
{% load i18n%}
<div id="paginator">
{% if current_page != 1 %}
<a href="?page={{ prev_page }}&per_page={{ per_page }}">{% trans "Previous" %}</a>
{% endif %}
{% if page_next %}
<a href="?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="?per_page=25" class="per-page">25</a>
{% endif %}
{% if per_page == 50 %}
<span> 50 </span>
{% else %}
<a href="?per_page=50" class="per-page">50</a>
{% endif %}
{% if per_page == 100 %}
<span> 100 </span>
{% else %}
<a href="?per_page=100" class="per-page">100</a>
{% endif %}
</div>

View File

@@ -19,7 +19,7 @@ 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, \
sys_repo_search, sys_repo_transfer, sys_list_orphan, user_deactivate, \ sys_repo_search, sys_repo_transfer, sys_list_orphan, user_deactivate, \
user_toggle_status user_toggle_status, sys_ldap_user_admin
from seahub.views.ajax import * from seahub.views.ajax import *
# Uncomment the next two lines to enable the admin: # Uncomment the next two lines to enable the admin:
@@ -152,6 +152,7 @@ urlpatterns = patterns('',
url(r'^sys/seafadmin/search/$', sys_repo_search, name='sys_repo_search'), url(r'^sys/seafadmin/search/$', sys_repo_search, name='sys_repo_search'),
url(r'^sys/seafadmin/transfer/$', sys_repo_transfer, name='sys_repo_transfer'), url(r'^sys/seafadmin/transfer/$', sys_repo_transfer, name='sys_repo_transfer'),
url(r'^sys/useradmin/$', sys_user_admin, name='sys_useradmin'), url(r'^sys/useradmin/$', sys_user_admin, name='sys_useradmin'),
url(r'^sys/ldapuseradmin/$', sys_ldap_user_admin, name='sys_ldap_useradmin'),
url(r'^sys/groupadmin/$', sys_group_admin, name='sys_group_admin'), url(r'^sys/groupadmin/$', sys_group_admin, name='sys_group_admin'),
url(r'^sys/publinkadmin/$', sys_publink_admin, name='sys_publink_admin'), url(r'^sys/publinkadmin/$', sys_publink_admin, name='sys_publink_admin'),
url(r'^sys/notificationadmin/', notification_list, name='notification_list'), url(r'^sys/notificationadmin/', notification_list, name='notification_list'),

View File

@@ -1709,8 +1709,16 @@ def pubuser(request):
except ValueError: except ValueError:
current_page = 1 current_page = 1
per_page = 20 # show 20 users per-page per_page = 20 # show 20 users per-page
users_plus_one = seaserv.get_emailusers(per_page * (current_page - 1),
# Get ldap users first, if no users found, use database.
users_plus_one = seaserv.get_emailusers('LDAP',
per_page * (current_page - 1),
per_page + 1) per_page + 1)
if len(users_plus_one) == 0:
users_plus_one = seaserv.get_emailusers('DB',
per_page * (current_page - 1),
per_page + 1)
has_prev = False if current_page == 1 else True has_prev = False if current_page == 1 else True
has_next = True if len(users_plus_one) == per_page + 1 else False has_next = True if len(users_plus_one) == per_page + 1 else False
num_pages = int(ceil(emailusers_count / float(per_page))) num_pages = int(ceil(emailusers_count / float(per_page)))

View File

@@ -124,6 +124,8 @@ def sys_repo_search(request):
@login_required @login_required
@sys_staff_required @sys_staff_required
def sys_user_admin(request): def sys_user_admin(request):
"""List all users from database.
"""
# Make sure page request is an int. If not, deliver first page. # Make sure page request is an int. If not, deliver first page.
try: try:
current_page = int(request.GET.get('page', '1')) current_page = int(request.GET.get('page', '1'))
@@ -131,7 +133,53 @@ def sys_user_admin(request):
except ValueError: except ValueError:
current_page = 1 current_page = 1
per_page = 25 per_page = 25
users_plus_one = get_emailusers(per_page * (current_page - 1), per_page + 1) users_plus_one = get_emailusers('DB', 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]
for user in users:
if user.props.id == request.user.id:
user.is_self = True
try:
user.self_usage = seafile_api.get_user_self_usage(user.email)
user.share_usage = seafile_api.get_user_share_usage(user.email)
user.quota = seafile_api.get_user_quota(user.email)
except:
user.self_usage = -1
user.share_usage = -1
user.quota = -1
have_ldap = True if len(get_emailusers('LDAP', 0, 1)) > 0 else False
return render_to_response(
'sysadmin/sys_useradmin.html', {
'users': users,
'current_page': current_page,
'prev_page': current_page-1,
'next_page': current_page+1,
'per_page': per_page,
'page_next': page_next,
'CALC_SHARE_USAGE': CALC_SHARE_USAGE,
'have_ldap': have_ldap,
},
context_instance=RequestContext(request))
@login_required
@sys_staff_required
def sys_ldap_user_admin(request):
"""List all users from LDAP.
"""
# 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
users_plus_one = get_emailusers('LDAP', per_page * (current_page - 1), per_page + 1)
if len(users_plus_one) == per_page + 1: if len(users_plus_one) == per_page + 1:
page_next = True page_next = True
else: else:
@@ -151,7 +199,7 @@ def sys_user_admin(request):
user.quota = -1 user.quota = -1
return render_to_response( return render_to_response(
'sysadmin/sys_useradmin.html', { 'sysadmin/sys_ldap_useradmin.html', {
'users': users, 'users': users,
'current_page': current_page, 'current_page': current_page,
'prev_page': current_page-1, 'prev_page': current_page-1,