mirror of
https://github.com/haiwen/seahub.git
synced 2025-07-31 22:57:47 +00:00
[sysadmin] Enable admin to activate/inactivate a user
This commit is contained in:
parent
399a97361f
commit
6b9863f14c
@ -2254,14 +2254,16 @@ textarea:-moz-placeholder {/* for FF */
|
||||
#md-edit-help {
|
||||
width:550px;
|
||||
}
|
||||
/* shareadmin */
|
||||
/* shareadmin & useradmin */
|
||||
.view-link-alert p {
|
||||
display: inline-block;
|
||||
}
|
||||
.share-permission-edit-icon {
|
||||
.share-permission-edit-icon,
|
||||
.user-status-edit-icon {
|
||||
cursor:pointer;
|
||||
}
|
||||
.share-permission-select {
|
||||
.share-permission-select,
|
||||
.user-status-select {
|
||||
position:relative;/*for long text in other lang in 'share admin'*/
|
||||
background:#fff;
|
||||
border:1px solid #ddd;
|
||||
|
@ -31,12 +31,24 @@
|
||||
|
||||
{% 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 data="{{user.id}}"><a href="{{ SITE_ROOT }}useradmin/info/{{ user.props.email }}/">{{ user.email }}</a></td>
|
||||
|
||||
<td>
|
||||
<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>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{% if CALC_SHARE_USAGE %}
|
||||
{{ user.self_usage|filesizeformat }} + {{ user.share_usage|filesizeformat }} {% if user.quota > 0 %} / {{ user.quota|filesizeformat }} {% endif %}
|
||||
@ -117,6 +129,54 @@ $('#search-user-btn').click(function() {
|
||||
location.href = "{% url 'user_search' %}";
|
||||
});
|
||||
|
||||
$('tr:gt(0)').hover(
|
||||
function() {
|
||||
$(this).find('.user-status-edit-icon').removeClass('vh');
|
||||
},
|
||||
function() {
|
||||
$(this).find('.user-status-edit-icon').addClass('vh');
|
||||
}
|
||||
);
|
||||
$('.user-status-edit-icon').click(function() {
|
||||
$(this).parent().addClass('hide');
|
||||
$(this).parent().next().removeClass('hide'); // show 'user-status-select'
|
||||
});
|
||||
$('.user-status-select').change(function() {
|
||||
var select = $(this),
|
||||
uid = $(this).parent().prev().attr('data'),
|
||||
select_val = select.val(),
|
||||
url = "{{ SITE_ROOT }}useradmin/toggle_status/" + uid + "/?s=" + select_val;
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
dataType: 'json',
|
||||
cache: false,
|
||||
success: function(data) {
|
||||
if (data['success']) {
|
||||
feedback("{% trans "Edit succeeded" %}", 'success');
|
||||
select.prev().children('.user-status-cur-value').html(select.children('option[value="' +select.val() + '"]').text());
|
||||
}
|
||||
select.addClass('hide');
|
||||
select.prev().removeClass('hide');
|
||||
},
|
||||
error: function() {
|
||||
feedback("{% trans "Edit failed." %}", 'error');
|
||||
select.addClass('hide');
|
||||
select.prev().removeClass('hide');
|
||||
}
|
||||
});
|
||||
});
|
||||
// select shows, but the user doesn't select a value, or doesn't change the permission, click other place to hide the select
|
||||
$(document).click(function(e) {
|
||||
var target = e.target || event.srcElement;
|
||||
// target can't be edit-icon
|
||||
if (!$('.user-status-edit-icon, .user-status-select').is(target)) {
|
||||
$('.user-status').removeClass('hide');
|
||||
$('.user-status-select').addClass('hide');
|
||||
}
|
||||
});
|
||||
|
||||
$('#add-user-form').submit(function() {
|
||||
var form = $(this),
|
||||
form_id = $(this).attr('id'),
|
||||
|
@ -18,7 +18,8 @@ from seahub.views.wiki import personal_wiki, personal_wiki_pages, \
|
||||
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
|
||||
sys_repo_search, sys_repo_transfer, sys_list_orphan, user_deactivate, \
|
||||
user_toggle_status
|
||||
from seahub.views.ajax import *
|
||||
|
||||
# Uncomment the next two lines to enable the admin:
|
||||
@ -158,7 +159,10 @@ urlpatterns = patterns('',
|
||||
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/info/(?P<email>[^/]+)/$', user_info, name='user_info'),
|
||||
(r'^useradmin/activate/(?P<user_id>[^/]+)/$', user_activate),
|
||||
url(r'^useradmin/activate/(?P<user_id>[^/]+)/$', user_activate, name='user_activate'),
|
||||
url(r'^useradmin/deactivate/(?P<user_id>[^/]+)/$', user_deactivate, name='user_deactivate'),
|
||||
url(r'^useradmin/toggle_status/(?P<user_id>[^/]+)/$', user_toggle_status, name='user_toggle_status'),
|
||||
|
||||
url(r'^useradmin/password/reset/(?P<user_id>[^/]+)/$', user_reset, name='user_reset'),
|
||||
|
||||
)
|
||||
|
@ -285,6 +285,43 @@ def user_activate(request, user_id):
|
||||
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def user_deactivate(request, user_id):
|
||||
try:
|
||||
user = User.objects.get(id=int(user_id))
|
||||
user.is_active = False
|
||||
user.save()
|
||||
messages.success(request, _(u'Successfully deactivated "%s".') % user.email)
|
||||
except User.DoesNotExist:
|
||||
messages.success(request, _(u'Failed to deactivate: user does not exist.'))
|
||||
|
||||
next = request.META.get('HTTP_REFERER', None)
|
||||
if not next:
|
||||
next = reverse('sys_useradmin')
|
||||
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def user_toggle_status(request, user_id):
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
try:
|
||||
user_status = int(request.GET.get('s', 0))
|
||||
except ValueError:
|
||||
user_status = 0
|
||||
|
||||
try:
|
||||
user = User.objects.get(id=int(user_id))
|
||||
user.is_active = bool(user_status)
|
||||
user.save()
|
||||
return HttpResponse(json.dumps({'success': True}),
|
||||
content_type=content_type)
|
||||
except User.DoesNotExist:
|
||||
return HttpResponse(json.dumps({'success': False}), status=500,
|
||||
content_type=content_type)
|
||||
|
||||
def send_user_reset_email(request, email, password):
|
||||
"""
|
||||
Send email when reset user password.
|
||||
|
Loading…
Reference in New Issue
Block a user