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

[repo del] rewrite with ajax; [sysadmin] improved 'set_quota' & 'repo transfer'

This commit is contained in:
llj
2013-11-21 11:23:43 +08:00
parent 580fc41715
commit d005354b33
13 changed files with 177 additions and 170 deletions

View File

@@ -55,16 +55,7 @@
location.href = $(this).data('url'); location.href = $(this).data('url');
}); });
$('.repo-delete-btn').click(function() { {% include 'snippets/repo_del_js.html' %}
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 ?" %}'
});
$(".download-btn").click(function() { $(".download-btn").click(function() {
var repo_id = $(this).parent().data('id'); var repo_id = $(this).parent().data('id');

View 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
});
});
});

View 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>

View File

@@ -1,16 +1,14 @@
{% load i18n%} {% 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(){ $('.repo-transfer-btn').click(function(){
var repo_id = $(this).data('id'), var btn_ct = $(this).parent(),
repo_name = $(this).data('name'), repo_id = btn_ct.data('id'),
repo_name = btn_ct.attr('data-name'),
form = $('#repo-transfer-form'); form = $('#repo-transfer-form');
$('#repo-transfer-form input[name="repo_id"]').val(repo_id);
form.modal({appendTo:'#main'}); 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; return false;
}); });
@@ -18,9 +16,11 @@ $('#repo-transfer-form').submit(function() {
var form = $(this), var form = $(this),
form_id = form.attr('id'), form_id = form.attr('id'),
email = $.trim(form.children('[name="email"]').val()); email = $.trim(form.children('[name="email"]').val());
if (!email) { if (!email) {
apply_form_error(form_id, "{% trans "Email cannot be blank" %}"); apply_form_error(form_id, "{% trans "Email cannot be blank" %}");
return false; return false;
} }
form.submit();
}); });
{% include 'snippets/repo_del_js.html' %}

View File

@@ -13,11 +13,10 @@
<td style="font-size:11px;">{{ repo.id }}</td> <td style="font-size:11px;">{{ repo.id }}</td>
<td><a href="{{ SITE_ROOT }}useradmin/info/{{ repo.owner }}/">{{ repo.owner}}</a></td> <td><a href="{{ SITE_ROOT }}useradmin/info/{{ repo.owner }}/">{{ repo.owner}}</a></td>
<td>{{ repo.props.desc }}</td> <td>{{ repo.props.desc }}</td>
<td> <td data-id="{{ repo.props.id }}" data-name="{{ repo.props.name }}">
<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> <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> <a href="#" data-id="{{repo.id}}" data-name="{{repo.name}}" class="repo-transfer-btn op">{% trans "Transfer" %}</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

View File

@@ -10,28 +10,16 @@
</ul> </ul>
<button class="icon-search fright" id="search-repo-btn"> {% trans "Search" %}</button> <button class="icon-search fright" id="search-repo-btn"> {% trans "Search" %}</button>
</div> </div>
{% endblock %} {% endblock %}
{% block main_panel %} {% block main_panel %}
{% if repos %} {% if repos %}
{% include "sysadmin/repoadmin_table.html" %} {% include "sysadmin/repoadmin_table.html" %}
{% else %} {% else %}
<p>{% trans "Empty" %}</p> <p>{% trans "None" %}</p>
{% endif %} {% endif %}
<form id="repo-transfer-form" method="post" action="{% url 'sys_repo_transfer' %}" class="simple-input-popup hide">{% csrf_token %} {% include "sysadmin/repo_transfer_form.html" %}
<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>
{% endblock %} {% endblock %}
{% block extra_script %} {% block extra_script %}
@@ -40,7 +28,6 @@ $('#search-repo-btn').click(function() {
location.href = "{% url 'sys_repo_search' %}"; location.href = "{% url 'sys_repo_search' %}";
}); });
{% include "sysadmin/repoadmin_js.html" %} {% include "sysadmin/repoadmin_js.html" %}
</script> </script>
{% endblock %} {% endblock %}

View File

@@ -45,20 +45,10 @@
{% endif %} {% endif %}
</div> </div>
{% else %} {% else %}
<p>{% trans "Empty" %}</p> <p>{% trans "None" %}</p>
{% endif %} {% endif %}
<form id="repo-transfer-form" method="post" action="{% url 'sys_repo_transfer' %}" class="simple-input-popup hide">{% csrf_token %} {% include "sysadmin/repo_transfer_form.html" %}
<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>
{% endblock %} {% endblock %}
{% block extra_script %} {% block extra_script %}

View File

@@ -14,22 +14,11 @@
<h3>{% trans "Result"%}</h3> <h3>{% trans "Result"%}</h3>
{% if repos %} {% if repos %}
{% include "sysadmin/repoadmin_table.html" %} {% include "sysadmin/repoadmin_table.html" %}
{% else %} {% else %}
<p>{% trans "No result" %}</p> <p>{% trans "No result" %}</p>
{% endif %} {% endif %}
<form id="repo-transfer-form" method="post" action="{% url 'sys_repo_transfer' %}" class="simple-input-popup hide">{% csrf_token %} {% include "sysadmin/repo_transfer_form.html" %}
<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>
{% endblock %} {% endblock %}
{% block extra_script %} {% block extra_script %}
@@ -44,6 +33,5 @@ $('#search-repo-form').submit(function() {
} }
}); });
{% include "sysadmin/repoadmin_js.html" %} {% include "sysadmin/repoadmin_js.html" %}
</script> </script>
{% endblock %} {% endblock %}

View File

@@ -29,7 +29,7 @@
{% else %} {% else %}
<p>{{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}</p> <p>{{ quota_usage|filesizeformat }} {% if quota > 0 %}/ {{ quota|filesizeformat }} {% endif %}</p>
{% endif %} {% endif %}
<a href="#" class="set-quota">{% trans "Set Quota" %}</a> <a href="#" id="set-quota">{% trans "Set Quota" %}</a>
</div> </div>
</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><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><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/">{{ repo.props.name }}</a></td>
<td>{{ repo.props.desc }}</td> <td>{{ repo.props.desc }}</td>
<td> <td data-id="{{ repo.props.id }}" data-name="{{ repo.props.name }}">
<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> <a href="#" class="repo-delete-btn op">{% trans "Delete" %}</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
{% else %} {% else %}
<p>{% trans "Empty" %}</p> <p>{% trans "None" %}</p>
{% endif %} {% endif %}
<h3>{% trans "Shared" %}</h3> <h3>{% trans "Shared" %}</h3>
@@ -81,13 +81,13 @@
{% endfor %} {% endfor %}
</table> </table>
{% else %} {% else %}
<p>{% trans "Empty" %}</p> <p>{% trans "None" %}</p>
{% endif %} {% endif %}
<form id="set-quota-form" method="post" class="hide">{% csrf_token %} <form id="set-quota-form" method="post" class="simple-input-popup hide">{% csrf_token %}
<label>{% trans "Set user storage limit" %}</label><br /> <h3>{% trans "Set user storage limit" %}</h3>
<input type="hidden" name="email" value="{{ email }}" /> <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="tip">{% trans "Tip: 0 means default limit" %}</p>
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" value="{% trans "Submit" %}" class="submit" /> <input type="submit" value="{% trans "Submit" %}" class="submit" />
@@ -99,46 +99,48 @@
{% block extra_script %} {% block extra_script %}
<script type="text/javascript"> <script type="text/javascript">
$('.set-quota').click(function() { $('#set-quota').click(function() {
$("#set-quota-form").modal({appendTo: "#main"}); $("#set-quota-form").modal({appendTo: "#main"});
return false; return false;
}); });
$('#set-quota-form .submit').click(function() { $('#set-quota-form .submit').click(function() {
var self = $(this); var form = $('#set-quota-form'),
self.attr('disabled', 'disabled'); 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({ $.ajax({
url: '{% url 'user_info' email %}', url: '{% url 'user_set_quota' email %}',
type: 'POST', type: 'POST',
dataType: 'json', dataType: 'json',
cache: 'false', cache: 'false',
beforeSend: prepareCSRFToken, beforeSend: prepareCSRFToken,
data: { data: {
'email': $('#set-quota-form input[name="email"]').val(), 'email': $('input[name="email"]', form).val(),
'quota': $('#set-quota-form input[name="quota"]').val() 'quota': quota
}, },
success: function(data) { success: function(data) {
if (data['success']) {
location.reload(true); location.reload(true);
} else {
apply_form_error('set-quota-form', data['error']);
self.removeAttr('disabled');
}
}, },
error: function(data, textStatus, jqXHR) { error: function(xhr, textStatus, errorThrown) {
var errors = $.parseJSON(data.responseText); if (xhr.responseText) {
$.each(errors, function(index, value) { apply_form_error(form_id, $.parseJSON(xhr.responseText).error);
apply_form_error('set-quota-form', value[0]); } else {
}); apply_form_error(form_id, "{% trans "Failed. Please check the network." %}");
self.removeAttr('disabled'); }
enable(sb_btn);
} }
}); });
return false; return false;
}); });
addConfirmTo($('.remove-user-repo'), { {% include 'snippets/repo_del_js.html' %}
'title':'{% trans "Delete Library" %}',
'con':'{% trans "Are you sure you want to delete %s ?" %}'
});
</script> </script>
{% endblock %} {% endblock %}

View File

@@ -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, \ sys_group_admin, user_info, user_add, user_remove, user_make_admin, \
user_remove_admin, user_reset, user_activate, sys_publink_admin, \ user_remove_admin, user_reset, user_activate, sys_publink_admin, \
sys_repo_search, sys_repo_transfer, sys_list_orphan, user_deactivate, \ 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 * from seahub.views.ajax import *
# Uncomment the next two lines to enable the admin: # 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/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/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'), 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})/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})/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"), 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"), url(r'^modules/toggle/$', toggle_modules, name="toggle_modules"),
### Ajax ### ### 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/$', 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/delete/$', delete_dirents, name='delete_dirents'),
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/move/$', mv_dirents, name='mv_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/activate/(?P<user_id>[^/]+)/$', user_activate, name='user_activate'),
url(r'^useradmin/deactivate/(?P<user_id>[^/]+)/$', user_deactivate, name='user_deactivate'), 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/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'), url(r'^useradmin/password/reset/(?P<user_id>[^/]+)/$', user_reset, name='user_reset'),

View File

@@ -873,55 +873,6 @@ def modify_token(request, repo_id):
return HttpResponseRedirect(reverse('repo', args=[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 @login_required
def myhome(request): def myhome(request):
owned_repos = [] owned_repos = []

View File

@@ -12,7 +12,9 @@ from django.utils.http import urlquote
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
import seaserv 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 pysearpc import SearpcError
from seahub.auth.decorators import login_required 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.options.models import UserOptions, CryptoOptionNotSetError
from seahub.notifications.models import UserNotification from seahub.notifications.models import UserNotification
from seahub.signals import upload_file_successful 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, \ from seahub.views.repo import get_nav_path, get_fileshare, get_dir_share_link, \
get_uploadlink, get_dir_shared_upload_link get_uploadlink, get_dir_shared_upload_link
import seahub.settings as settings 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 from seahub.utils.star import star_file, unstar_file
# Get an instance of a logger # Get an instance of a logger
@@ -1072,3 +1076,56 @@ def unseen_notices_count(request):
result['count'] = count result['count'] = count
return HttpResponse(json.dumps(result), content_type=content_type) 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)

View File

@@ -228,29 +228,6 @@ def sys_ldap_user_admin(request):
@login_required @login_required
@sys_staff_required @sys_staff_required
def user_info(request, email): 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) owned_repos = seafile_api.get_owned_repo_list(email)
@@ -292,6 +269,33 @@ def user_info(request, email):
'nickname': nickname, 'nickname': nickname,
}, context_instance=RequestContext(request)) }, 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 @login_required
@sys_staff_required @sys_staff_required
def user_remove(request, user_id): def user_remove(request, user_id):