Commit b170bf38 authored by Michal Čihař's avatar Michal Čihař

Wrap upload permissions

This makes it possible for owners to do more on file upload.
Signed-off-by: default avatarMichal Čihař <michal@cihar.com>
parent 9b50d9a1
......@@ -33,6 +33,9 @@ from weblate.lang.models import Language
from weblate.trans.models.unit import Unit, SEARCH_FILTERS
from weblate.trans.models.source import PRIORITY_CHOICES
from weblate.trans.checks import CHECKS
from weblate.trans.permissions import (
can_author_translation, can_overwrite_translation
)
from weblate.trans.specialchars import get_special_chars
from weblate.trans.validators import validate_check_flags
from weblate.accounts.forms import sort_choices
......@@ -398,13 +401,13 @@ class ExtraUploadForm(UploadForm):
)
def get_upload_form(request):
def get_upload_form(user, project):
'''
Returns correct upload form based on user permissions.
'''
if request.user.has_perm('trans.author_translation'):
if can_author_translation(user, project):
return ExtraUploadForm
elif request.user.has_perm('trans.overwrite_translation'):
elif can_overwrite_translation(user, project):
return UploadForm
else:
return SimpleUploadForm
......
......@@ -281,3 +281,19 @@ def can_view_reports(user, project):
Checks whether user can view reports on given project.
"""
return check_permission(user, project, 'trans.view_reports')
@cache_permission
def can_author_translation(user, project):
"""
Checks whether user can author translation on given project.
"""
return check_permission(user, project, 'trans.author_translation')
@cache_permission
def can_overwrite_translation(user, project):
"""
Checks whether user can overwrite translation on given project.
"""
return check_permission(user, project, 'trans.overwrite_translation')
......@@ -284,7 +284,7 @@ def show_translation(request, project, subproject, lang):
obj.is_locked(request.user)
# Get form
form = get_upload_form(request)()
form = get_upload_form(request.user, obj.subproject.project)()
# Is user allowed to do automatic translation?
if can_automatic_translation(request.user, obj.subproject.project):
......
......@@ -30,6 +30,9 @@ import sys
from weblate.trans.util import report_error
from weblate.trans.forms import get_upload_form
from weblate.trans.views.helper import get_translation
from weblate.trans.permissions import (
can_author_translation, can_overwrite_translation
)
def download_translation(request, project, subproject, lang):
......@@ -87,7 +90,9 @@ def upload_translation(request, project, subproject, lang):
return redirect(obj)
# Get correct form handler based on permissions
form = get_upload_form(request)(request.POST, request.FILES)
form = get_upload_form(request.user, obj.subproject.project)(
request.POST, request.FILES
)
# Check form validity
if not form.is_valid():
......@@ -96,7 +101,7 @@ def upload_translation(request, project, subproject, lang):
# Create author name
author = None
if (request.user.has_perm('trans.author_translation') and
if (can_author_translation(request.user, obj.subproject.project) and
form.cleaned_data['author_name'] != '' and
form.cleaned_data['author_email'] != ''):
author = '%s <%s>' % (
......@@ -106,7 +111,7 @@ def upload_translation(request, project, subproject, lang):
# Check for overwriting
overwrite = False
if request.user.has_perm('trans.overwrite_translation'):
if can_overwrite_translation(request.user, obj.subproject.project):
overwrite = form.cleaned_data['overwrite']
# Do actual import
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment