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 %} + + + + + + + {% for user in users %} + + + + + {% endfor %} +
{% trans "Email" %}{% trans "Space Used" %}
{{ 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 %} +
+ +{% 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" %}

- +
{% csrf_token %}

{% trans "Add new user" %}

@@ -21,34 +33,7 @@
{% 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" %} + + + + + + + + + + {% for user in users %} + + + + + + + + + {% endfor %} +
{% trans "Email" %}{% trans "Status" %}{% trans "Space Used" %}{% trans "Create At" %}{% trans "Operations" %}
{{ user.email }} + {% if user.source != 'LDAP' %} +
+ {% if user.is_active %} + {% trans "Active" %} + {% else %} + {% trans "Inactive" %} + {% endif %} + {% trans +
+ + {% 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 %} +
{% 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,