From c6f4e673292b558725a02e449e1dce17af46201f Mon Sep 17 00:00:00 2001 From: lian Date: Thu, 25 Dec 2014 17:17:29 +0800 Subject: [PATCH] [sys-user-info] Set user share quota --- seahub/forms.py | 8 +++-- seahub/templates/sysadmin/userinfo.html | 29 +++++++++++------ seahub/views/sysadmin.py | 43 ++++++++++++++----------- 3 files changed, 50 insertions(+), 30 deletions(-) diff --git a/seahub/forms.py b/seahub/forms.py index 2a2aa4c3dc..9fbde8c620 100644 --- a/seahub/forms.py +++ b/seahub/forms.py @@ -161,9 +161,11 @@ class SetUserQuotaForm(forms.Form): Form for setting user quota. """ email = forms.CharField(error_messages={'required': _('Email is required')}) - quota = forms.IntegerField(min_value=0, - error_messages={'required': _('Quota can\'t be empty'), - 'min_value': _('Quota is too low (minimum value is 0)')}) + space_quota = forms.IntegerField(min_value=0, + error_messages={'required': _('Space quota can\'t be empty'), + 'min_value': _('Space quota is too low (minimum value is 0)')}) + share_quota = forms.IntegerField(min_value=0, required = False, + error_messages={'min_value': _('Share quota is too low (minimum value is 0)')}) class RepoSettingForm(forms.Form): """ diff --git a/seahub/templates/sysadmin/userinfo.html b/seahub/templates/sysadmin/userinfo.html index 698e223dfa..b1b2bee7aa 100644 --- a/seahub/templates/sysadmin/userinfo.html +++ b/seahub/templates/sysadmin/userinfo.html @@ -51,7 +51,10 @@
{% csrf_token %}

{% trans "Set user storage limit" %}

- MB + MB + {% if CALC_SHARE_USAGE %} +
MB
+ {% endif %}

{% trans "Tip: 0 means default limit" %}

@@ -179,14 +182,25 @@ $('#set-quota').click(function() { $('#set-quota-form .submit').click(function() { var form = $('#set-quota-form'), - form_id = form.attr('id'); + form_id = form.attr('id'), + space_quota = $('input[name="space_quota"]', form).val(); - var quota = $('input[name="quota"]', form).val(); - if (!$.trim(quota)) { - apply_form_error(form_id, "{% trans "Quota can't be empty" %}"); + if (!$.trim(space_quota)) { + apply_form_error(form_id, "{% trans "Space Quota can't be empty" %}"); return false; } + data = { 'email': $('input[name="email"]', form).val(), 'space_quota': space_quota }; + + {% if CALC_SHARE_USAGE %} + var share_quota = $('input[name="share_quota"]', form).val(); + if (!$.trim(share_quota)) { + apply_form_error(form_id, "{% trans "Share Quota can't be empty" %}"); + return false; + } + data['share_quota'] = share_quota; + {% endif %} + var sb_btn = $(this); disable(sb_btn); $.ajax({ @@ -195,10 +209,7 @@ $('#set-quota-form .submit').click(function() { dataType: 'json', cache: 'false', beforeSend: prepareCSRFToken, - data: { - 'email': $('input[name="email"]', form).val(), - 'quota': quota - }, + data: data, success: function(data) { location.reload(true); }, diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py index 3b9dc560f7..51c5d9199f 100644 --- a/seahub/views/sysadmin.py +++ b/seahub/views/sysadmin.py @@ -128,7 +128,7 @@ def list_repos_by_owner(owner): for e in repos: e.owner = owner return repos - + @login_required @sys_staff_required def sys_repo_search(request): @@ -136,7 +136,7 @@ def sys_repo_search(request): """ repo_name = request.GET.get('name', '') owner = request.GET.get('owner', '') - repos = [] + repos = [] if repo_name and owner : # search by name and owner repos = list_repos_by_name_and_owner(repo_name, owner) @@ -270,7 +270,7 @@ def sys_user_admin_ldap(request): for last_login in last_logins: if last_login.username == user.email: user.last_login = last_login.last_login - + return render_to_response( 'sysadmin/sys_useradmin_ldap.html', { 'users': users, @@ -374,7 +374,7 @@ def user_info(request, email): fs.delete() continue fs.filename = os.path.basename(fs.path) - path = fs.path.rstrip('/') # Normalize file path + path = fs.path.rstrip('/') # Normalize file path obj_id = seafile_api.get_file_id_by_path(r.id, path) fs.file_size = seafile_api.get_file_size(r.store_id, r.version, obj_id) @@ -429,7 +429,7 @@ def user_info(request, email): 'profile': profile, 'd_profile': d_profile, 'org_name': org_name, - "user_shared_links": user_shared_links, + 'user_shared_links': user_shared_links, }, context_instance=RequestContext(request)) @login_required_ajax @@ -444,22 +444,29 @@ def user_set_quota(request, email): f = SetUserQuotaForm(request.POST) if f.is_valid(): email = f.cleaned_data['email'] - quota_mb = f.cleaned_data['quota'] - quota = quota_mb * (1 << 20) + space_quota_mb = f.cleaned_data['space_quota'] + space_quota = space_quota_mb * (1 << 20) + share_quota_mb = f.cleaned_data['share_quota'] + + share_quota = None + if share_quota_mb is not None: + share_quota = share_quota_mb * (1 << 20) org = ccnet_threaded_rpc.get_orgs_by_user(email) try: if not org: - seafile_api.set_user_quota(email, quota) + seafile_api.set_user_quota(email, space_quota) + if share_quota is not None: + seafile_api.set_user_share_quota(email, share_quota) else: org_id = org[0].org_id org_quota_mb = seafserv_threaded_rpc.get_org_quota(org_id) / (1 << 20) - if quota_mb > org_quota_mb: + if space_quota_mb > org_quota_mb: result['error'] = _(u'Failed to set quota: maximum quota is %d MB' % \ org_quota_mb) return HttpResponse(json.dumps(result), status=400, content_type=content_type) else: - seafserv_threaded_rpc.set_org_user_quota(org_id, email, quota) + seafserv_threaded_rpc.set_org_user_quota(org_id, email, space_quota) except: result['error'] = _(u'Failed to set quota: internal server error') return HttpResponse(json.dumps(result), status=500, content_type=content_type) @@ -534,7 +541,7 @@ def user_make_admin(request, user_id): referer = request.META.get('HTTP_REFERER', None) next = reverse('sys_useradmin') if referer is None else referer - + return HttpResponseRedirect(next) @login_required @@ -551,7 +558,7 @@ def user_remove_admin(request, user_id): referer = request.META.get('HTTP_REFERER', None) next = reverse('sys_useradmin') if referer is None else referer - + return HttpResponseRedirect(next) @login_required @@ -568,7 +575,7 @@ def user_activate(request, user_id): next = request.META.get('HTTP_REFERER', None) if not next: next = reverse('sys_useradmin') - + return HttpResponseRedirect(next) @login_required @@ -585,7 +592,7 @@ def user_deactivate(request, user_id): next = request.META.get('HTTP_REFERER', None) if not next: next = reverse('sys_useradmin') - + return HttpResponseRedirect(next) def email_user_on_activation(user): @@ -672,7 +679,7 @@ def send_user_reset_email(request, email, password): } send_html_email(_(u'Password has been reset on %s') % SITE_NAME, 'sysadmin/user_reset_email.html', c, None, [email]) - + @login_required @sys_staff_required def user_reset(request, user_id): @@ -710,9 +717,9 @@ def user_reset(request, user_id): referer = request.META.get('HTTP_REFERER', None) next = reverse('sys_useradmin') if referer is None else referer - + return HttpResponseRedirect(next) - + def send_user_add_mail(request, email, password): """Send email when add new user.""" c = { @@ -1105,7 +1112,7 @@ def sys_repo_transfer(request): if not next: next = reverse(sys_repo_admin) return HttpResponseRedirect(next) - + @login_required @sys_staff_required def sys_traffic_admin(request):