diff --git a/seahub/base/models.py b/seahub/base/models.py
index b4a4efe1f3..a56b178990 100644
--- a/seahub/base/models.py
+++ b/seahub/base/models.py
@@ -7,7 +7,7 @@ from django.dispatch import receiver
from django.utils import timezone
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.shortcuts import get_first_object_or_none
diff --git a/seahub/templates/sysadmin/sys_ldap_useradmin.html b/seahub/templates/sysadmin/sys_ldap_useradmin.html
new file mode 100644
index 0000000000..797f5d6f77
--- /dev/null
+++ b/seahub/templates/sysadmin/sys_ldap_useradmin.html
@@ -0,0 +1,46 @@
+{% extends "admin_base.html" %}
+{% load seahub_tags i18n %}
+{% block nav_useradmin_class %}class="cur"{% endblock %}
+
+{% block title_panel %}
+
+
+
+
+{% endblock %}
+
+{% block main_panel %}
+
+
+ {% trans "Email" %} |
+ {% trans "Space Used" %} |
+
+
+ {% for user in users %}
+
+ {{ user.email }} |
+
+ {% 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 %}
+ |
+
+ {% endfor %}
+
+
+{% include "sysadmin/useradmin_paginator.html" %}
+{% endblock %}
+
+{% block extra_script %}
+
+{% endblock %}
diff --git a/seahub/templates/sysadmin/sys_useradmin.html b/seahub/templates/sysadmin/sys_useradmin.html
index bde93ba00b..819204dc03 100644
--- a/seahub/templates/sysadmin/sys_useradmin.html
+++ b/seahub/templates/sysadmin/sys_useradmin.html
@@ -2,11 +2,23 @@
{% load seahub_tags i18n %}
{% block nav_useradmin_class %}class="cur"{% endblock %}
+{% block title_panel %}
+
+
+
+
+
+{% endblock %}
+
{% block main_panel %}
-{% trans "All Members" %}
-
+
{% include "sysadmin/useradmin_table.html"%}
-
-
- {% if current_page != 1 %}
-
{% trans "Previous" %}
- {% endif %}
- {% if page_next %}
-
{% trans "Next" %}
- {% endif %}
- {% if current_page != 1 or page_next %}
- |
- {% endif %}
-
{% trans "Per page: " %}
- {% if per_page == 25 %}
-
25
- {% else %}
-
25
- {% endif %}
- {% if per_page == 50 %}
-
50
- {% else %}
-
50
- {% endif %}
- {% if per_page == 100 %}
-
100
- {% else %}
-
100
- {% endif %}
-
+{% include "sysadmin/useradmin_paginator.html" %}
{% endblock %}
diff --git a/seahub/templates/sysadmin/user_search.html b/seahub/templates/sysadmin/user_search.html
index c22b297947..db825b76d4 100644
--- a/seahub/templates/sysadmin/user_search.html
+++ b/seahub/templates/sysadmin/user_search.html
@@ -11,7 +11,60 @@
{% trans "Result"%}
{% if users %}
-{% include "sysadmin/useradmin_table.html" %}
+
+
+ {% trans "Email" %} |
+ {% trans "Status" %} |
+ {% trans "Space Used" %} |
+ {% trans "Create At" %} |
+ {% trans "Operations" %} |
+
+
+ {% for user in users %}
+
+ {{ user.email }} |
+
+ {% if user.source != 'LDAP' %}
+
+ {% if user.is_active %}
+ {% trans "Active" %}
+ {% else %}
+ {% trans "Inactive" %}
+ {% endif %}
+ 
+
+
+ {% endif %}
+ |
+
+
+ {% 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 %}
+ |
+ {% if user.source != 'LDAP' %}{{ user.ctime|tsstr_sec }}{% endif %} |
+
+ {% if user.source != 'LDAP' %}
+ {% if not user.is_self %}
+ {% trans "Delete" %}
+ {% trans "ResetPwd" %}
+ {% if user.is_staff %}
+ {% trans "Revoke Admin" %}
+ {% else %}
+ {% trans "Set Admin" %}
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ |
+
+ {% endfor %}
+
{% else %}
{% trans "No result" %}
{% endif %}
diff --git a/seahub/templates/sysadmin/useradmin_paginator.html b/seahub/templates/sysadmin/useradmin_paginator.html
new file mode 100644
index 0000000000..1c38e9fb3a
--- /dev/null
+++ b/seahub/templates/sysadmin/useradmin_paginator.html
@@ -0,0 +1,28 @@
+{% load i18n%}
+
+ {% if current_page != 1 %}
+
{% trans "Previous" %}
+ {% endif %}
+ {% if page_next %}
+
{% trans "Next" %}
+ {% endif %}
+ {% if current_page != 1 or page_next %}
+ |
+ {% endif %}
+
{% trans "Per page: " %}
+ {% if per_page == 25 %}
+
25
+ {% else %}
+
25
+ {% endif %}
+ {% if per_page == 50 %}
+
50
+ {% else %}
+
50
+ {% endif %}
+ {% if per_page == 100 %}
+
100
+ {% else %}
+
100
+ {% endif %}
+
diff --git a/seahub/urls.py b/seahub/urls.py
index d0394ed4cc..6a3c66fdae 100644
--- a/seahub/urls.py
+++ b/seahub/urls.py
@@ -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, \
user_remove_admin, user_reset, user_activate, sys_publink_admin, \
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 *
# 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/transfer/$', sys_repo_transfer, name='sys_repo_transfer'),
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/publinkadmin/$', sys_publink_admin, name='sys_publink_admin'),
url(r'^sys/notificationadmin/', notification_list, name='notification_list'),
diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py
index 08ea449a44..cc5cea0219 100644
--- a/seahub/views/__init__.py
+++ b/seahub/views/__init__.py
@@ -1709,8 +1709,16 @@ def pubuser(request):
except ValueError:
current_page = 1
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)
+ 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_next = True if len(users_plus_one) == per_page + 1 else False
num_pages = int(ceil(emailusers_count / float(per_page)))
diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py
index 552298663f..81fbd534b8 100644
--- a/seahub/views/sysadmin.py
+++ b/seahub/views/sysadmin.py
@@ -124,6 +124,8 @@ def sys_repo_search(request):
@login_required
@sys_staff_required
def sys_user_admin(request):
+ """List all users from database.
+ """
# Make sure page request is an int. If not, deliver first page.
try:
current_page = int(request.GET.get('page', '1'))
@@ -131,7 +133,53 @@ def sys_user_admin(request):
except ValueError:
current_page = 1
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:
page_next = True
else:
@@ -151,7 +199,7 @@ def sys_user_admin(request):
user.quota = -1
return render_to_response(
- 'sysadmin/sys_useradmin.html', {
+ 'sysadmin/sys_ldap_useradmin.html', {
'users': users,
'current_page': current_page,
'prev_page': current_page-1,