1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-21 11:27:18 +00:00

set admin debug

This commit is contained in:
imwhatiam
2014-04-16 11:47:53 +08:00
committed by zhengxie
parent 8b56620a53
commit bf9bbaaa08
5 changed files with 288 additions and 235 deletions

View File

@@ -0,0 +1,159 @@
{% extends "sysadmin/base.html" %}
{% load seahub_tags i18n %}
{% block cur_users %}tab-cur{% endblock %}
{% block left_panel %}{{block.super}}
<form action="{% url 'user_search' %}" method="get" class="side-search-form">
<input type="text" name="email" class="input" value="" placeholder="{% trans "Search users..." %}" />
</form>
{% endblock %}
{% block right_panel %}
<div class="tabnav ovhd">
<ul class="tabnav-tabs fleft">
<li class="tabnav-tab"><a href="{% url 'sys_useradmin' %}">{% trans "Database" %}</a></li>
<li class="tabnav-tab tabnav-tab-cur"><a href="{% url 'sys_db_useradmin' %}">{% trans "DataBaseAdmin" %}</a></li>
{% if have_ldap %}
<li class="tabnav-tab"><a href="{% url 'sys_ldap_useradmin' %}">{% trans "LDAP" %}</a></li>
{% endif %}
</ul>
<button id="add-admin-btn" class="fright"><img src="{{ MEDIA_URL }}img/add.png" alt="" class="add vam" /><span class="vam">{% trans "Add admin" %}</span></button>
</div>
<form id="add-admin-form" method="post" name="add-admin-form" class="tab-popup hide">{% csrf_token %}
<h3 class="hd">{% trans "Add admins"%}</h3>
<div id="add-admin-tabs" class="tab-popup-tabs">
<ul class="tab-popup-tabs-nav">
<li class="tab"><a href="#enter" class="a">{% trans 'Enter' %}</a></li>
</ul>
<div id="enter">
<textarea id="added-member-name" name="user_email" placeholder="{% trans "emails, separated by ','" %}"></textarea><br />
<p class="tip">{% trans "Tip: the emails should be the users already added."%}</p>
</div>
</div>
<div class="bot">
<p class="error hide"></p>
<input type="submit" value="{% trans "Submit"%}" />
</div>
</form>
<table>
<tr>
<th width="25%">{% trans "Email" %}</th>
<th width="15%">{% trans "Status" %}</th>
<th width="15%">{% trans "Space Used" %}</th>
<th width="22%">{% trans "Create At / Last Login" %}</th>
<th width="23%">{% trans "Operations" %}</th>
</tr>
{% for user in admin_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 cspt 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 }} /<br />
{% if user.last_login %}{{user.last_login|translate_seahub_time}} {% else %} -- {% endif %}
{% endif %}
</td>
<td>
{% if user.source != 'LDAP' %}
{% if not user.is_self %}
<a href="#" class="remove-user-btn op vh" data-url="{{ SITE_ROOT }}useradmin/remove/{{ user.props.id }}/" data-target="{{ user.props.email }}">{% trans "Delete" %}</a>
<a href="#" class="reset-user-btn op vh" 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 vh">{% 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 vh">{% trans "Set Admin" %}</a>
{% endif %}
{% endif %}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
<div id="activate-msg" class="hide">
<p>{% trans "Activating..., please wait" %}</p>
</div>
{% endblock %}
{% block extra_script %}
<script type="text/javascript">
var user_list = [], user_email;
{% for user in not_admin_users %}
user_email = '{{ user.email }}';
user_list.push({value:user_email, label:user_email});
{% endfor %}
$('#add-admin-btn').click(function() {
var form = $("#add-admin-form");
form.modal({appendTo: "#main", focus:false});
$('#simplemodal-container').css({'height':'auto', 'padding':0});
$('#add-admin-tabs').tabs();
addAutocomplete('#added-member-name', '#enter', user_list);
});
$('#add-admin-form').submit(function() {
var form = $(this),
cur_tab_id = $('.ui-tabs-selected a', form).attr('href'),
post_data = '',
input = $('[name="user_email"]', form);
post_data = input.val();
if (!post_data) {
apply_form_error(form.attr('id'), '{% trans "Please enter emails, or select some." %}');
return false;
}
var submit_btn = $('[type="submit"]', form);
disable(submit_btn);
$.ajax({
url: '{% url 'batch_user_make_admin' %}',
type: 'POST',
dataType: 'json',
cache: false,
beforeSend: prepareCSRFToken,
data: {
'set_admin_emails': post_data
},
success: function(data) {
location.reload('true');
},
error: function(data, textStatus, jqXHR) {
var errors = $.parseJSON(data.responseText);
$.each(errors, function(index, value) {
apply_form_error(form.attr('id'), value);
});
enable(submit_btn);
}
});
return false;
});
{% include "sysadmin/useradmin_js.html" %}
</script>
{% endblock %}

View File

@@ -9,20 +9,16 @@
{% endblock %}
{% block right_panel %}
<div id="tabs" class="tab-tabs">
<div class="hd ovhd">
<ul class="tab-tabs-nav fleft">
<li class="tab"><a href="#user" class="a" id="user-tab">{% trans "Users" %}</a></li>
<li class="tab"><a href="#admin" class="a" id="admin-tab">{% trans "Admins" %}</a></li>
<div class="tabnav ovhd">
<ul class="tabnav-tabs fleft">
<li class="tabnav-tab tabnav-tab-cur"><a href="{% url 'sys_useradmin' %}">{% trans "Database" %}</a></li>
<li class="tabnav-tab"><a href="{% url 'sys_db_useradmin' %}">{% trans "DataBaseAdmin" %}</a></li>
{% if have_ldap %}
<li class="tab"><a href="{% url 'sys_ldap_useradmin' %}" class="a" id="ldap-tab">{% trans "LDAP" %}</a></li>
<li class="tabnav-tab"><a href="{% url 'sys_ldap_useradmin' %}">{% trans "LDAP" %}</a></li>
{% endif %}
</ul>
<div class="fright">
<button id="add-user-btn" class="hide"><img src="{{ MEDIA_URL }}img/add.png" alt="" class="add vam" /><span class="vam">{% trans "Add user"%}</span></button>
<button id="add-admin-btn" class="hide"><img src="{{ MEDIA_URL }}img/add.png" alt="" class="add vam" /><span class="vam">{% trans "Add admin"%}</span></button>
</div>
</div>
<button id="add-user-btn" class="fright"><img src="{{ MEDIA_URL }}img/add.png" alt="" class="add vam" /><span class="vam">{% trans "Add user" %}</span></button>
</div>
<form id="add-user-form" action="" method="post" class="hide">{% csrf_token %}
<h3>{% trans "Add user" %}</h3>
@@ -35,52 +31,17 @@
<p class="error hide"></p>
<input type="submit" value="{% trans "Submit" %}" class="submit" />
</form>
<form id="add-admin-form" method="post" name="add-admin-form" class="tab-popup hide">{% csrf_token %}
<h3 class="hd">{% trans "Add admins"%}</h3>
<div id="add-admin-tabs" class="tab-popup-tabs">
<ul class="tab-popup-tabs-nav">
<li class="tab"><a href="#enter" class="a">{% trans 'Enter' %}</a></li>
</ul>
<div id="enter">
<textarea id="added-member-name" name="user_email" placeholder="{% trans "emails, separated by ','" %}"></textarea><br />
<p class="tip">{% trans "Tip: the emails should be the users already added."%}</p>
</div>
</div>
<div class="bot">
<p class="error hide"></p>
<input type="submit" value="{% trans "Submit"%}" />
</div>
</form>
{% include "sysadmin/useradmin_table.html"%}
{% include "sysadmin/useradmin_table.html"%}
{% include "sysadmin/useradmin_paginator.html" %}
<div id="activate-msg" class="hide">
<p>{% trans "Activating..., please wait" %}</p>
</div>
<div id="activate-msg" class="hide">
<p>{% trans "Activating..., please wait" %}</p>
</div>
{% endblock %}
{% block extra_script %}
<script type="text/javascript">
var cur_tab = $('.ui-tabs-selected .a');
var add_user_btn = $('#add-user-btn'),
add_admin_btn = $('#add-admin-btn');
if (cur_tab.attr('id') == 'user-tab') {
add_user_btn.removeClass('hide');
}
if (cur_tab.attr('id') == 'admin-tab') {
add_admin_btn.removeClass('hide');
}
$('#user-tab').click(function() {
add_user_btn.removeClass('hide');
add_admin_btn.addClass('hide');
});
$('#admin-tab').click(function() {
add_admin_btn.removeClass('hide');
add_user_btn.addClass('hide');
});
$('#add-user-form').submit(function() {
var form = $(this),
form_id = $(this).attr('id'),
@@ -134,64 +95,6 @@ $('#add-user-form').submit(function() {
});
return false;
});
var user_list = [], user_email;
{% for user in users %}
{% if not user.is_self %}
{% if not user.is_staff %}
user_email = '{{ user.email }}';
user_list.push({value:user_email, label:user_email});
{% endif %}
{% endif %}
{% endfor %}
$('#add-admin-btn').click(function() {
var form = $("#add-admin-form");
form.modal({appendTo: "#main", focus:false});
$('#simplemodal-container').css({'height':'auto', 'padding':0});
$('#add-admin-tabs').tabs();
addAutocomplete('#added-member-name', '#enter', user_list);
});
$('#add-admin-form').submit(function() {
var form = $(this),
cur_tab_id = $('.ui-tabs-selected a', form).attr('href'),
post_data = '',
input = $('[name="user_email"]', form);
post_data = input.val();
if (!post_data) {
apply_form_error(form.attr('id'), '{% trans "Please enter emails, or select some." %}');
return false;
}
var submit_btn = $('[type="submit"]', form);
disable(submit_btn);
$.ajax({
url: '{% url 'batch_user_make_admin' %}',
type: 'POST',
dataType: 'json',
cache: false,
beforeSend: prepareCSRFToken,
data: {
'set_admin_emails': post_data
},
success: function(data) {
location.reload('true');
},
error: function(data, textStatus, jqXHR) {
var errors = $.parseJSON(data.responseText);
$.each(errors, function(index, value) {
apply_form_error(form.attr('id'), value);
});
enable(submit_btn);
}
});
return false;
});
{% include "sysadmin/useradmin_js.html" %}
</script>
{% endblock %}

View File

@@ -1,126 +1,55 @@
{% load seahub_tags i18n %}
<div id="user">
<table>
<tr>
<th width="28%">{% trans "Email" %}</th>
<th width="15%">{% trans "Status" %}</th>
<th width="15%">{% trans "Space Used" %}</th>
<th width="22%">{% trans "Create At / Last Login" %}</th>
<th width="20%">{% trans "Operations" %}</th>
</tr>
<table>
<tr>
<th width="25%">{% trans "Email" %}</th>
<th width="15%">{% trans "Status" %}</th>
<th width="15%">{% trans "Space Used" %}</th>
<th width="22%">{% trans "Create At / Last Login" %}</th>
<th width="23%">{% 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>
{% 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 cspt 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 }} /<br />
{% if user.last_login %}{{user.last_login|translate_seahub_time}} {% else %} -- {% endif %}
{% endif %}
</td>
<td>
{% if user.source != 'LDAP' %}
{% if not user.is_self %}
<a href="#" class="remove-user-btn op vh" data-url="{{ SITE_ROOT }}useradmin/remove/{{ user.props.id }}/" data-target="{{ user.props.email }}">{% trans "Delete" %}</a>
<a href="#" class="reset-user-btn op vh" data-url="{% url 'user_reset' user.id %}" data-target="{{ user.props.email }}">{% trans "ResetPwd" %}</a>
{%comment%}
{% if user.is_staff %}
<a href="#" data-url="{% url 'user_remove_admin' user.id %}" data-target="{{ user.props.email }}" class="revoke-admin-btn op vh">{% trans "Revoke Admin" %}</a>
<td>
{% if user.source != 'LDAP' %}
<div class="user-status">
{% if user.is_active %}
<span class="user-status-cur-value">{% trans "Active" %}</span>
{% else %}
<a href="#" data-url="{% url 'user_make_admin' user.id %}" data-target="{{ user.props.email }}" class="set-admin-btn op vh">{% trans "Set Admin" %}</a>
<span class="user-status-cur-value">{% trans "Inactive" %}</span>
{% endif %}
{%endcomment%}
{% endif %}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{% include "sysadmin/useradmin_paginator.html" %}
</div>
<div class="hide" id="admin">
<table>
<tr>
<th width="28%">{% trans "Email" %}</th>
<th width="15%">{% trans "Status" %}</th>
<th width="15%">{% trans "Space Used" %}</th>
<th width="22%">{% trans "Create At / Last Login" %}</th>
<th width="20%">{% trans "Operations" %}</th>
</tr>
{% for user in users %}
{% if user.is_staff %}
<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 cspt 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 }} /<br />
{% if user.last_login %}{{user.last_login|translate_seahub_time}} {% else %} -- {% endif %}
{% endif %}
</td>
<td>
{% if user.source != 'LDAP' %}
{% if not user.is_self %}
<a href="#" class="remove-user-btn op vh" data-url="{{ SITE_ROOT }}useradmin/remove/{{ user.props.id }}/" data-target="{{ user.props.email }}">{% trans "Delete" %}</a>
<a href="#" class="reset-user-btn op vh" data-url="{% url 'user_reset' user.id %}" data-target="{{ user.props.email }}">{% trans "ResetPwd" %}</a>
<a href="#" data-url="{% url 'user_remove_admin' user.id %}" data-target="{{ user.props.email }}" class="revoke-admin-btn op vh">{% trans "Revoke Admin" %}</a>
{% else %}
{% endif %}
{% endif %}
</td>
</tr>
{% endif %}
{% endfor %}
</table>
</div>
<img src="{{MEDIA_URL}}img/edit_12.png" alt="{% trans "Edit"%}" title="{% trans "Edit"%}" class="user-status-edit-icon cspt 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 }} /<br />
{% if user.last_login %}{{user.last_login|translate_seahub_time}} {% else %} -- {% endif %}
{% endif %}
</td>
<td>
{% if user.source != 'LDAP' %}
{% if not user.is_self %}
<a href="#" class="remove-user-btn op vh" data-url="{{ SITE_ROOT }}useradmin/remove/{{ user.props.id }}/" data-target="{{ user.props.email }}">{% trans "Delete" %}</a>
<a href="#" class="reset-user-btn op vh" data-url="{% url 'user_reset' user.id %}" data-target="{{ user.props.email }}">{% trans "ResetPwd" %}</a>
{% endif %}
{% endif %}
</td>
</tr>
{% endfor %}
</table>

View File

@@ -21,7 +21,7 @@ from seahub.views.sysadmin import sys_repo_admin, sys_user_admin, user_search,\
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_set_quota, sys_ldap_user_admin, sys_list_system, \
batch_user_make_admin
batch_user_make_admin, sys_db_user_admin
from seahub.views.ajax import *
# Uncomment the next two lines to enable the admin:
@@ -184,6 +184,7 @@ urlpatterns = patterns('',
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/dbuseradmin/$', sys_db_user_admin, name='sys_db_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'),

View File

@@ -709,9 +709,60 @@ def sys_traffic_admin(request):
},
context_instance=RequestContext(request))
@login_required
@sys_staff_required
def sys_db_user_admin(request):
"""List all admins from database.
"""
users = get_emailusers('DB', -1, -1)
admin_users = []
not_admin_users = []
for user in users:
if user.is_staff == True:
admin_users.append(user)
else:
not_admin_users.append(user)
last_logins = UserLastLogin.objects.filter(username__in=[x.email for x in admin_users])
for user in admin_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
# populate user last login time
user.last_login = None
for last_login in last_logins:
if last_login.username == user.email:
user.last_login = last_login.last_login
have_ldap = True if len(get_emailusers('LDAP', 0, 1)) > 0 else False
return render_to_response(
'sysadmin/sys_db_useradmin.html', {
'admin_users': admin_users,
'not_admin_users': not_admin_users,
'CALC_SHARE_USAGE': CALC_SHARE_USAGE,
'have_ldap': have_ldap,
},
context_instance=RequestContext(request))
@login_required
@sys_staff_required
def batch_user_make_admin(request):
if not request.user.is_staff and not request.user.org['is_staff']:
raise Http404
if not request.is_ajax() or request.method != 'POST':
raise Http404
result = {}
content_type = 'application/json; charset=utf-8'
@@ -720,21 +771,31 @@ def batch_user_make_admin(request):
success = []
failed = []
already_admin = []
if len(get_emailusers('LDAP', 0, 1)) > 0:
messages.error(request, _(u'Using LDAP now, can not set admin'))
result['success'] = True
return HttpResponse(json.dumps(result), content_type=content_type)
for email in set_admin_emails:
try:
user = User.objects.get(email=email)
user.is_staff = True
user.save()
success.append(email)
if user.is_staff == True:
already_admin.append(email)
else:
user.is_staff = True
user.save()
success.append(email)
except User.DoesNotExist:
failed.append(email)
for item in success:
messages.success(request, _(u'Successfully set %s as admin') % item)
for item in failed:
messages.error(request, _(u'Failed set %s as admin') % item)
messages.error(request, _(u'Failed set %s as admin: not exist or invalid email') % item)
for item in already_admin:
messages.error(request, _(u'Failed set %s as admin: already admin user') % item)
result['success'] = True
return HttpResponse(json.dumps(result), content_type=content_type)