mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-21 19:37:28 +00:00
[repo del] rewrite with ajax; [sysadmin] improved 'set_quota' & 'repo transfer'
This commit is contained in:
@@ -55,16 +55,7 @@
|
||||
location.href = $(this).data('url');
|
||||
});
|
||||
|
||||
$('.repo-delete-btn').click(function() {
|
||||
var btn_ct = $(this).parent(),
|
||||
repo_id = btn_ct.data('id'),
|
||||
repo_name = btn_ct.attr('data-name');
|
||||
$(this).data('url', '{{ SITE_ROOT }}repo/remove/' + repo_id + '/?next={{ request.path }}').data('target', repo_name);
|
||||
});
|
||||
addConfirmTo($('.repo-delete-btn'), {
|
||||
'title':'{% trans "Delete Library" %}',
|
||||
'con':'{% trans "Are you sure you want to delete %s ?" %}'
|
||||
});
|
||||
{% include 'snippets/repo_del_js.html' %}
|
||||
|
||||
$(".download-btn").click(function() {
|
||||
var repo_id = $(this).parent().data('id');
|
||||
|
26
seahub/templates/snippets/repo_del_js.html
Normal file
26
seahub/templates/snippets/repo_del_js.html
Normal file
@@ -0,0 +1,26 @@
|
||||
{% load i18n %}
|
||||
$('.repo-delete-btn').click(function() {
|
||||
var btn_ct = $(this).parent(),
|
||||
repo_id = btn_ct.data('id'),
|
||||
repo_name = btn_ct.attr('data-name');
|
||||
var popup = {
|
||||
'title': "{% trans "Delete Library" %}",
|
||||
'con': "{% trans "Are you sure you want to delete %s ?" %}"
|
||||
};
|
||||
var con = popup['con'].replace('%s', '<span class="op-target">' + repo_name + '</span>');
|
||||
$('#confirm-con').html('<h3>' + popup['title'] + '</h3><p>' + con + '</p>');
|
||||
$('#confirm-popup').modal({appendTo:'#main'});
|
||||
$('#simplemodal-container').css({'height':'auto'});
|
||||
$('#confirm-yes').click(function() {
|
||||
$.ajax({
|
||||
url: '{{ SITE_ROOT }}ajax/repo/' + repo_id + '/remove/',
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
$.modal.close();
|
||||
btn_ct.parents('tr').remove();
|
||||
feedback("{% trans "Delete succeeded." %}", 'success');
|
||||
},
|
||||
error: ajaxErrorHandler
|
||||
});
|
||||
});
|
||||
});
|
10
seahub/templates/sysadmin/repo_transfer_form.html
Normal file
10
seahub/templates/sysadmin/repo_transfer_form.html
Normal file
@@ -0,0 +1,10 @@
|
||||
{% load i18n %}
|
||||
<form id="repo-transfer-form" method="post" action="{% url 'sys_repo_transfer' %}" class="simple-input-popup hide">{% csrf_token %}
|
||||
<h3>{% trans "Transfer Library"%}</h3>
|
||||
<p class="detail">{% trans "Transfer %(lib_name) to:"%}</p>
|
||||
<input type="text" name="email" placeholder="{% trans "Email" %}" value="" class="long-input" /><br />
|
||||
<input type="hidden" name="repo_id" value="" />
|
||||
<p class="error hide"></p>
|
||||
<input type="submit" value="{% trans "Submit" %}" class="submit" />
|
||||
<button class="simplemodal-close">{% trans "Cancel" %}</button>
|
||||
</form>
|
@@ -1,16 +1,14 @@
|
||||
{% load i18n%}
|
||||
addConfirmTo($('.repo-delete-btn'), {
|
||||
'title':'{% trans "Delete Library" %}',
|
||||
'con':'{% trans "Are you sure you want to delete %s ?" %}'
|
||||
});
|
||||
|
||||
$('.repo-transfer-btn').click(function(){
|
||||
var repo_id = $(this).data('id'),
|
||||
repo_name = $(this).data('name'),
|
||||
var btn_ct = $(this).parent(),
|
||||
repo_id = btn_ct.data('id'),
|
||||
repo_name = btn_ct.attr('data-name'),
|
||||
form = $('#repo-transfer-form');
|
||||
|
||||
$('#repo-transfer-form input[name="repo_id"]').val(repo_id);
|
||||
form.modal({appendTo:'#main'});
|
||||
$('input[name="repo_id"]', form).val(repo_id);
|
||||
var detail = $('.detail', form);
|
||||
detail.html(detail.html().replace('%(lib_name)', repo_name));
|
||||
return false;
|
||||
});
|
||||
|
||||
@@ -18,9 +16,11 @@ $('#repo-transfer-form').submit(function() {
|
||||
var form = $(this),
|
||||
form_id = form.attr('id'),
|
||||
email = $.trim(form.children('[name="email"]').val());
|
||||
|
||||
if (!email) {
|
||||
apply_form_error(form_id, "{% trans "Email cannot be blank" %}");
|
||||
return false;
|
||||
}
|
||||
form.submit();
|
||||
});
|
||||
|
||||
{% include 'snippets/repo_del_js.html' %}
|
||||
|
@@ -13,11 +13,10 @@
|
||||
<td style="font-size:11px;">{{ repo.id }}</td>
|
||||
<td><a href="{{ SITE_ROOT }}useradmin/info/{{ repo.owner }}/">{{ repo.owner}}</a></td>
|
||||
<td>{{ repo.props.desc }}</td>
|
||||
<td>
|
||||
<a href="#" data-url="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/?next={{ request.path }}" data-target="{{ repo.props.name }}" class="repo-delete-btn op">{% trans "Delete" %}</a>
|
||||
<td data-id="{{ repo.props.id }}" data-name="{{ repo.props.name }}">
|
||||
<a href="#" class="repo-delete-btn op">{% trans "Delete" %}</a>
|
||||
<a href="#" data-id="{{repo.id}}" data-name="{{repo.name}}" class="repo-transfer-btn op">{% trans "Transfer" %}</a>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
@@ -10,28 +10,16 @@
|
||||
</ul>
|
||||
<button class="icon-search fright" id="search-repo-btn"> {% trans "Search" %}</button>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block main_panel %}
|
||||
{% if repos %}
|
||||
{% include "sysadmin/repoadmin_table.html" %}
|
||||
|
||||
{% else %}
|
||||
<p>{% trans "Empty" %}</p>
|
||||
<p>{% trans "None" %}</p>
|
||||
{% endif %}
|
||||
|
||||
<form id="repo-transfer-form" method="post" action="{% url 'sys_repo_transfer' %}" class="simple-input-popup hide">{% csrf_token %}
|
||||
<h3>{% trans "Transfer Library"%}</h3>
|
||||
<label>{% trans "Email" %}</label><br />
|
||||
<input type="text" name="email" value="" class="long-input"/><br />
|
||||
<input type="hidden" name="repo_id" value="" />
|
||||
|
||||
<p class="error hide"></p>
|
||||
<input type="submit" value="{% trans "Submit" %}" class="submit" />
|
||||
<button class="simplemodal-close">{% trans "Cancel" %}</button>
|
||||
</form>
|
||||
|
||||
{% include "sysadmin/repo_transfer_form.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
@@ -40,7 +28,6 @@ $('#search-repo-btn').click(function() {
|
||||
location.href = "{% url 'sys_repo_search' %}";
|
||||
});
|
||||
{% include "sysadmin/repoadmin_js.html" %}
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
|
@@ -45,20 +45,10 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{% trans "Empty" %}</p>
|
||||
<p>{% trans "None" %}</p>
|
||||
{% endif %}
|
||||
|
||||
<form id="repo-transfer-form" method="post" action="{% url 'sys_repo_transfer' %}" class="simple-input-popup hide">{% csrf_token %}
|
||||
<h3>{% trans "Transfer Library"%}</h3>
|
||||
<label>{% trans "Email" %}</label><br />
|
||||
<input type="text" name="email" value="" class="long-input"/><br />
|
||||
<input type="hidden" name="repo_id" value="" />
|
||||
|
||||
<p class="error hide"></p>
|
||||
<input type="submit" value="{% trans "Submit" %}" class="submit" />
|
||||
<button class="simplemodal-close">{% trans "Cancel" %}</button>
|
||||
</form>
|
||||
|
||||
{% include "sysadmin/repo_transfer_form.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
|
@@ -14,22 +14,11 @@
|
||||
<h3>{% trans "Result"%}</h3>
|
||||
{% if repos %}
|
||||
{% include "sysadmin/repoadmin_table.html" %}
|
||||
|
||||
{% else %}
|
||||
<p>{% trans "No result" %}</p>
|
||||
{% endif %}
|
||||
|
||||
<form id="repo-transfer-form" method="post" action="{% url 'sys_repo_transfer' %}" class="simple-input-popup hide">{% csrf_token %}
|
||||
<h3>{% trans "Transfer Library"%}</h3>
|
||||
<label>{% trans "Email" %}</label><br />
|
||||
<input type="text" name="email" value="" class="long-input"/><br />
|
||||
<input type="hidden" name="repo_id" value="" />
|
||||
|
||||
<p class="error hide"></p>
|
||||
<input type="submit" value="{% trans "Submit" %}" class="submit" />
|
||||
<button class="simplemodal-close">{% trans "Cancel" %}</button>
|
||||
</form>
|
||||
|
||||
{% include "sysadmin/repo_transfer_form.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
@@ -44,6 +33,5 @@ $('#search-repo-form').submit(function() {
|
||||
}
|
||||
});
|
||||
{% include "sysadmin/repoadmin_js.html" %}
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
@@ -29,7 +29,7 @@
|
||||
{% else %}
|
||||
<p>{{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}</p>
|
||||
{% endif %}
|
||||
<a href="#" class="set-quota">{% trans "Set Quota" %}</a>
|
||||
<a href="#" id="set-quota">{% trans "Set Quota" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -51,14 +51,14 @@
|
||||
<td><img src="{{MEDIA_URL}}img/sync-folder-20.png" title="{% trans "Read-Write" %}" alt="{% trans "directory icon" %}" /></td>
|
||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/">{{ repo.props.name }}</a></td>
|
||||
<td>{{ repo.props.desc }}</td>
|
||||
<td>
|
||||
<a href="#" data-url="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/?next={{ request.path }}" data-target="{{ repo.props.name }}" class="remove-user-repo op">{% trans "Delete" %}</a>
|
||||
<td data-id="{{ repo.props.id }}" data-name="{{ repo.props.name }}">
|
||||
<a href="#" class="repo-delete-btn op">{% trans "Delete" %}</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}
|
||||
<p>{% trans "Empty" %}</p>
|
||||
<p>{% trans "None" %}</p>
|
||||
{% endif %}
|
||||
|
||||
<h3>{% trans "Shared" %}</h3>
|
||||
@@ -81,13 +81,13 @@
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}
|
||||
<p>{% trans "Empty" %}</p>
|
||||
<p>{% trans "None" %}</p>
|
||||
{% endif %}
|
||||
|
||||
<form id="set-quota-form" method="post" class="hide">{% csrf_token %}
|
||||
<label>{% trans "Set user storage limit" %}</label><br />
|
||||
<form id="set-quota-form" method="post" class="simple-input-popup hide">{% csrf_token %}
|
||||
<h3>{% trans "Set user storage limit" %}</h3>
|
||||
<input type="hidden" name="email" value="{{ email }}" />
|
||||
<input type="text" name="quota" /> MB <br />
|
||||
<input type="text" name="quota" /> MB
|
||||
<p class="tip">{% trans "Tip: 0 means default limit" %}</p>
|
||||
<p class="error hide"></p>
|
||||
<input type="submit" value="{% trans "Submit" %}" class="submit" />
|
||||
@@ -99,46 +99,48 @@
|
||||
{% block extra_script %}
|
||||
<script type="text/javascript">
|
||||
|
||||
$('.set-quota').click(function() {
|
||||
$('#set-quota').click(function() {
|
||||
$("#set-quota-form").modal({appendTo: "#main"});
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#set-quota-form .submit').click(function() {
|
||||
var self = $(this);
|
||||
self.attr('disabled', 'disabled');
|
||||
var form = $('#set-quota-form'),
|
||||
form_id = form.attr('id');
|
||||
|
||||
var quota = $('input[name="quota"]', form).val();
|
||||
if (!$.trim(quota)) {
|
||||
apply_form_error(form_id, "{% trans "Quota can't be empty" %}");
|
||||
return false;
|
||||
}
|
||||
|
||||
var sb_btn = $(this);
|
||||
disable(sb_btn);
|
||||
$.ajax({
|
||||
url: '{% url 'user_info' email %}',
|
||||
url: '{% url 'user_set_quota' email %}',
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
cache: 'false',
|
||||
beforeSend: prepareCSRFToken,
|
||||
data: {
|
||||
'email': $('#set-quota-form input[name="email"]').val(),
|
||||
'quota': $('#set-quota-form input[name="quota"]').val()
|
||||
'email': $('input[name="email"]', form).val(),
|
||||
'quota': quota
|
||||
},
|
||||
success: function(data) {
|
||||
if (data['success']) {
|
||||
location.reload(true);
|
||||
} else {
|
||||
apply_form_error('set-quota-form', data['error']);
|
||||
self.removeAttr('disabled');
|
||||
}
|
||||
},
|
||||
error: function(data, textStatus, jqXHR) {
|
||||
var errors = $.parseJSON(data.responseText);
|
||||
$.each(errors, function(index, value) {
|
||||
apply_form_error('set-quota-form', value[0]);
|
||||
});
|
||||
self.removeAttr('disabled');
|
||||
error: function(xhr, textStatus, errorThrown) {
|
||||
if (xhr.responseText) {
|
||||
apply_form_error(form_id, $.parseJSON(xhr.responseText).error);
|
||||
} else {
|
||||
apply_form_error(form_id, "{% trans "Failed. Please check the network." %}");
|
||||
}
|
||||
enable(sb_btn);
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
addConfirmTo($('.remove-user-repo'), {
|
||||
'title':'{% trans "Delete Library" %}',
|
||||
'con':'{% trans "Are you sure you want to delete %s ?" %}'
|
||||
});
|
||||
{% include 'snippets/repo_del_js.html' %}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
@@ -20,7 +20,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, sys_ldap_user_admin
|
||||
user_toggle_status, user_set_quota, sys_ldap_user_admin
|
||||
from seahub.views.ajax import *
|
||||
|
||||
# Uncomment the next two lines to enable the admin:
|
||||
@@ -76,7 +76,6 @@ urlpatterns = patterns('',
|
||||
url(r'^repo/recycle/(?P<repo_id>[-0-9a-f]{36})/$', repo_recycle_view, name='repo_recycle_view'),
|
||||
url(r'^repo/snapshot/view/(?P<repo_id>[-0-9a-f]{36})/$', repo_view_snapshot, name='repo_view_snapshot'),
|
||||
url(r'^repo/history/changes/(?P<repo_id>[-0-9a-f]{36})/$', repo_history_changes, name='repo_history_changes'),
|
||||
(r'^repo/remove/(?P<repo_id>[-0-9a-f]{36})/$', repo_remove),
|
||||
url(r'^repo/(?P<repo_id>[-0-9a-f]{36})/files/$', view_file, name="repo_view_file"),
|
||||
url(r'^repo/(?P<repo_id>[-0-9a-f]{36})/history/files/$', view_history_file, name="view_history_file"),
|
||||
url(r'^repo/(?P<repo_id>[-0-9a-f]{36})/trash/files/$', view_trash_file, name="view_trash_file"),
|
||||
@@ -109,6 +108,8 @@ urlpatterns = patterns('',
|
||||
url(r'^modules/toggle/$', toggle_modules, name="toggle_modules"),
|
||||
|
||||
### Ajax ###
|
||||
(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/remove/$', repo_remove),
|
||||
|
||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/$', get_dirents, name="get_dirents"),
|
||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/delete/$', delete_dirents, name='delete_dirents'),
|
||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/move/$', mv_dirents, name='mv_dirents'),
|
||||
@@ -172,6 +173,7 @@ urlpatterns = patterns('',
|
||||
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/(?P<email>[^/]+)/set_quota/$', user_set_quota, name='user_set_quota'),
|
||||
|
||||
url(r'^useradmin/password/reset/(?P<user_id>[^/]+)/$', user_reset, name='user_reset'),
|
||||
|
||||
|
@@ -873,55 +873,6 @@ def modify_token(request, repo_id):
|
||||
|
||||
return HttpResponseRedirect(reverse('repo', args=[repo_id]))
|
||||
|
||||
@login_required
|
||||
def repo_remove(request, repo_id):
|
||||
repo = get_repo(repo_id)
|
||||
if not repo:
|
||||
return render_error(request, _(u'Library does not exist'))
|
||||
|
||||
user = request.user.username
|
||||
org, base_template = check_and_get_org_by_repo(repo_id, user)
|
||||
if org:
|
||||
# Remove repo in org context, only repo owner or org staff can
|
||||
# perform this operation.
|
||||
if request.user.is_staff or org.is_staff or \
|
||||
is_org_repo_owner(org.org_id, repo_id, user):
|
||||
# Must get related useres before remove the repo
|
||||
usernames = get_related_users_by_org_repo(org.org_id, repo_id)
|
||||
remove_repo(repo_id)
|
||||
repo_deleted.send(sender=None,
|
||||
org_id=org.org_id,
|
||||
usernames=usernames,
|
||||
repo_owner=user,
|
||||
repo_id=repo_id,
|
||||
repo_name=repo.name,
|
||||
)
|
||||
else:
|
||||
err_msg = _(u'Failed to remove library. Only staff or owner can perform this operation.')
|
||||
messages.error(request, err_msg)
|
||||
else:
|
||||
# Remove repo in personal context, only repo owner or site staff can
|
||||
# perform this operation.
|
||||
if validate_owner(request, repo_id) or request.user.is_staff:
|
||||
usernames = get_related_users_by_repo(repo_id)
|
||||
remove_repo(repo_id)
|
||||
repo_deleted.send(sender=None,
|
||||
org_id=-1,
|
||||
usernames=usernames,
|
||||
repo_owner=user,
|
||||
repo_id=repo_id,
|
||||
repo_name=repo.name,
|
||||
)
|
||||
messages.success(request, _(u'Successfully deleted library "%s".') % repo.name)
|
||||
else:
|
||||
err_msg = _(u'Failed to remove library. Only staff or owner can perform this operation.')
|
||||
messages.error(request, err_msg)
|
||||
|
||||
next = request.META.get('HTTP_REFERER', None)
|
||||
if not next:
|
||||
next = settings.SITE_ROOT
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
def myhome(request):
|
||||
owned_repos = []
|
||||
|
@@ -12,7 +12,9 @@ from django.utils.http import urlquote
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
import seaserv
|
||||
from seaserv import seafile_api, seafserv_rpc
|
||||
from seaserv import seafile_api, seafserv_rpc, \
|
||||
get_related_users_by_repo, get_related_users_by_org_repo, \
|
||||
is_org_repo_owner
|
||||
from pysearpc import SearpcError
|
||||
|
||||
from seahub.auth.decorators import login_required
|
||||
@@ -21,11 +23,13 @@ from seahub.forms import RepoNewDirentForm, RepoRenameDirentForm
|
||||
from seahub.options.models import UserOptions, CryptoOptionNotSetError
|
||||
from seahub.notifications.models import UserNotification
|
||||
from seahub.signals import upload_file_successful
|
||||
from seahub.views import get_repo_dirents
|
||||
from seahub.views import get_repo_dirents, validate_owner
|
||||
from seahub.views.repo import get_nav_path, get_fileshare, get_dir_share_link, \
|
||||
get_uploadlink, get_dir_shared_upload_link
|
||||
import seahub.settings as settings
|
||||
from seahub.utils import check_filename_with_rename, EMPTY_SHA1, gen_block_get_url
|
||||
from seahub.signals import repo_deleted
|
||||
from seahub.utils import check_filename_with_rename, EMPTY_SHA1, gen_block_get_url, \
|
||||
check_and_get_org_by_repo
|
||||
from seahub.utils.star import star_file, unstar_file
|
||||
|
||||
# Get an instance of a logger
|
||||
@@ -1072,3 +1076,56 @@ def unseen_notices_count(request):
|
||||
result['count'] = count
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
|
||||
@login_required
|
||||
def repo_remove(request, repo_id):
|
||||
if not request.is_ajax():
|
||||
raise Http404
|
||||
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
result = {}
|
||||
|
||||
repo = get_repo(repo_id)
|
||||
if not repo:
|
||||
result['error'] = _(u'Library does not exist')
|
||||
return HttpResponse(json.dumps(result), status=400, content_type=content_type)
|
||||
|
||||
user = request.user.username
|
||||
org, base_template = check_and_get_org_by_repo(repo_id, user)
|
||||
if org:
|
||||
# Remove repo in org context, only repo owner or org staff can
|
||||
# perform this operation.
|
||||
if request.user.is_staff or org.is_staff or \
|
||||
is_org_repo_owner(org.org_id, repo_id, user):
|
||||
# Must get related useres before remove the repo
|
||||
usernames = get_related_users_by_org_repo(org.org_id, repo_id)
|
||||
seafile_api.remove_repo(repo_id)
|
||||
repo_deleted.send(sender=None,
|
||||
org_id=org.org_id,
|
||||
usernames=usernames,
|
||||
repo_owner=user,
|
||||
repo_id=repo_id,
|
||||
repo_name=repo.name,
|
||||
)
|
||||
result['success'] = True
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
else:
|
||||
result['error'] = _(u'Permission denied.')
|
||||
return HttpResponse(json.dumps(result), status=400, content_type=content_type)
|
||||
else:
|
||||
# Remove repo in personal context, only repo owner or site staff can
|
||||
# perform this operation.
|
||||
if validate_owner(request, repo_id) or request.user.is_staff:
|
||||
usernames = get_related_users_by_repo(repo_id)
|
||||
seafile_api.remove_repo(repo_id)
|
||||
repo_deleted.send(sender=None,
|
||||
org_id=-1,
|
||||
usernames=usernames,
|
||||
repo_owner=user,
|
||||
repo_id=repo_id,
|
||||
repo_name=repo.name,
|
||||
)
|
||||
result['success'] = True
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
else:
|
||||
result['error'] = _(u'Permission denied.')
|
||||
return HttpResponse(json.dumps(result), status=400, content_type=content_type)
|
||||
|
@@ -228,29 +228,6 @@ def sys_ldap_user_admin(request):
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def user_info(request, email):
|
||||
if request.method == 'POST':
|
||||
result = {}
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
f = SetUserQuotaForm(request.POST)
|
||||
if f.is_valid():
|
||||
email = f.cleaned_data['email']
|
||||
quota_mb = f.cleaned_data['quota']
|
||||
quota = quota_mb * (1 << 20)
|
||||
|
||||
try:
|
||||
seafile_api.set_user_quota(email, quota)
|
||||
except:
|
||||
result['error'] = _(u'Failed to set quota: internal error')
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
|
||||
result['success'] = True
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
else:
|
||||
result['error'] = str(f.errors.values()[0])
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
|
||||
owned_repos = []
|
||||
|
||||
owned_repos = seafile_api.get_owned_repo_list(email)
|
||||
|
||||
@@ -292,6 +269,33 @@ def user_info(request, email):
|
||||
'nickname': nickname,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def user_set_quota(request, email):
|
||||
if not request.is_ajax() or request.method != 'POST':
|
||||
raise Http404
|
||||
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
result = {}
|
||||
|
||||
f = SetUserQuotaForm(request.POST)
|
||||
if f.is_valid():
|
||||
email = f.cleaned_data['email']
|
||||
quota_mb = f.cleaned_data['quota']
|
||||
quota = quota_mb * (1 << 20)
|
||||
|
||||
try:
|
||||
seafile_api.set_user_quota(email, quota)
|
||||
except:
|
||||
result['error'] = _(u'Failed to set quota: internal error')
|
||||
return HttpResponse(json.dumps(result), status=500, content_type=content_type)
|
||||
|
||||
result['success'] = True
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
else:
|
||||
result['error'] = str(f.errors.values()[0])
|
||||
return HttpResponse(json.dumps(result), status=400, content_type=content_type)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def user_remove(request, user_id):
|
||||
|
Reference in New Issue
Block a user