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 ...@@ -33,6 +33,9 @@ from weblate.lang.models import Language
from weblate.trans.models.unit import Unit, SEARCH_FILTERS from weblate.trans.models.unit import Unit, SEARCH_FILTERS
from weblate.trans.models.source import PRIORITY_CHOICES from weblate.trans.models.source import PRIORITY_CHOICES
from weblate.trans.checks import CHECKS 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.specialchars import get_special_chars
from weblate.trans.validators import validate_check_flags from weblate.trans.validators import validate_check_flags
from weblate.accounts.forms import sort_choices from weblate.accounts.forms import sort_choices
...@@ -398,13 +401,13 @@ class ExtraUploadForm(UploadForm): ...@@ -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. Returns correct upload form based on user permissions.
''' '''
if request.user.has_perm('trans.author_translation'): if can_author_translation(user, project):
return ExtraUploadForm return ExtraUploadForm
elif request.user.has_perm('trans.overwrite_translation'): elif can_overwrite_translation(user, project):
return UploadForm return UploadForm
else: else:
return SimpleUploadForm return SimpleUploadForm
......
...@@ -281,3 +281,19 @@ def can_view_reports(user, project): ...@@ -281,3 +281,19 @@ def can_view_reports(user, project):
Checks whether user can view reports on given project. Checks whether user can view reports on given project.
""" """
return check_permission(user, project, 'trans.view_reports') 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): ...@@ -284,7 +284,7 @@ def show_translation(request, project, subproject, lang):
obj.is_locked(request.user) obj.is_locked(request.user)
# Get form # Get form
form = get_upload_form(request)() form = get_upload_form(request.user, obj.subproject.project)()
# Is user allowed to do automatic translation? # Is user allowed to do automatic translation?
if can_automatic_translation(request.user, obj.subproject.project): if can_automatic_translation(request.user, obj.subproject.project):
......
...@@ -30,6 +30,9 @@ import sys ...@@ -30,6 +30,9 @@ import sys
from weblate.trans.util import report_error from weblate.trans.util import report_error
from weblate.trans.forms import get_upload_form from weblate.trans.forms import get_upload_form
from weblate.trans.views.helper import get_translation 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): def download_translation(request, project, subproject, lang):
...@@ -87,7 +90,9 @@ def upload_translation(request, project, subproject, lang): ...@@ -87,7 +90,9 @@ def upload_translation(request, project, subproject, lang):
return redirect(obj) return redirect(obj)
# Get correct form handler based on permissions # 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 # Check form validity
if not form.is_valid(): if not form.is_valid():
...@@ -96,7 +101,7 @@ def upload_translation(request, project, subproject, lang): ...@@ -96,7 +101,7 @@ def upload_translation(request, project, subproject, lang):
# Create author name # Create author name
author = None 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_name'] != '' and
form.cleaned_data['author_email'] != ''): form.cleaned_data['author_email'] != ''):
author = '%s <%s>' % ( author = '%s <%s>' % (
...@@ -106,7 +111,7 @@ def upload_translation(request, project, subproject, lang): ...@@ -106,7 +111,7 @@ def upload_translation(request, project, subproject, lang):
# Check for overwriting # Check for overwriting
overwrite = False overwrite = False
if request.user.has_perm('trans.overwrite_translation'): if can_overwrite_translation(request.user, obj.subproject.project):
overwrite = form.cleaned_data['overwrite'] overwrite = form.cleaned_data['overwrite']
# Do actual import # 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