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

Share code for lock permission checking

Signed-off-by: default avatarMichal Čihař <michal@cihar.com>
parent 8889a250
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
{% can_update_translation user project as user_can_update_translation %} {% can_update_translation user project as user_can_update_translation %}
{% can_push_translation user project as user_can_push_translation %} {% can_push_translation user project as user_can_push_translation %}
{% can_reset_translation user project as user_can_reset_translation %} {% can_reset_translation user project as user_can_reset_translation %}
{% can_lock_subproject user project as user_can_lock_subproject %}
<div class="row"> <div class="row">
...@@ -158,7 +159,7 @@ ...@@ -158,7 +159,7 @@
{% endif %} {% endif %}
{% if perms.trans.lock_subproject and object.is_lockable %} {% if user_can_lock_subproject and object.is_lockable %}
{% if object.locked %} {% if object.locked %}
<tr> <tr>
<td> <td>
......
...@@ -192,3 +192,11 @@ def can_reset_translation(user, project): ...@@ -192,3 +192,11 @@ def can_reset_translation(user, project):
Checks whether user can reset translation repository. Checks whether user can reset translation repository.
""" """
return check_permission(user, project, 'trans.reset_translation') return check_permission(user, project, 'trans.reset_translation')
@cache_permission
def can_lock_subproject(user, project):
"""
Checks whether user can lock translation subproject.
"""
return check_permission(user, project, 'trans.lock_subproject')
...@@ -86,3 +86,8 @@ def can_push_translation(user, project): ...@@ -86,3 +86,8 @@ def can_push_translation(user, project):
@register.assignment_tag @register.assignment_tag
def can_reset_translation(user, project): def can_reset_translation(user, project):
return weblate.trans.permissions.can_reset_translation(user, project) return weblate.trans.permissions.can_reset_translation(user, project)
@register.assignment_tag
def can_lock_subproject(user, project):
return weblate.trans.permissions.can_lock_subproject(user, project)
...@@ -22,38 +22,44 @@ from django.utils.translation import ugettext as _ ...@@ -22,38 +22,44 @@ from django.utils.translation import ugettext as _
from django.http import HttpResponse from django.http import HttpResponse
from django.shortcuts import redirect from django.shortcuts import redirect
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied
from weblate.trans.views.helper import ( from weblate.trans.views.helper import (
get_project, get_subproject, get_translation get_project, get_subproject, get_translation
) )
from weblate.trans.permissions import can_lock_subproject
@permission_required('trans.lock_translation') @login_required
def lock_translation(request, project, subproject, lang): def update_lock(request, project, subproject, lang):
obj = get_translation(request, project, subproject, lang) obj = get_translation(request, project, subproject, lang)
if not obj.is_user_locked(request.user): if not obj.is_user_locked(request.user):
obj.create_lock(request.user, True) obj.update_lock_time()
messages.success(request, _('Translation is now locked for you.'))
return redirect(obj) return HttpResponse('ok')
@login_required def lock_translation(request, project, subproject, lang):
def update_lock(request, project, subproject, lang):
obj = get_translation(request, project, subproject, lang) obj = get_translation(request, project, subproject, lang)
if not can_lock_subproject(request.user, obj.subproject.project):
raise PermissionDenied()
if not obj.is_user_locked(request.user): if not obj.is_user_locked(request.user):
obj.update_lock_time() obj.create_lock(request.user, True)
messages.success(request, _('Translation is now locked for you.'))
return HttpResponse('ok') return redirect(obj)
@permission_required('trans.lock_translation')
def unlock_translation(request, project, subproject, lang): def unlock_translation(request, project, subproject, lang):
obj = get_translation(request, project, subproject, lang) obj = get_translation(request, project, subproject, lang)
if not can_lock_subproject(request.user, obj.subproject.project):
raise PermissionDenied()
if not obj.is_user_locked(request.user): if not obj.is_user_locked(request.user):
obj.create_lock(None) obj.create_lock(None)
messages.success( messages.success(
...@@ -64,10 +70,12 @@ def unlock_translation(request, project, subproject, lang): ...@@ -64,10 +70,12 @@ def unlock_translation(request, project, subproject, lang):
return redirect(obj) return redirect(obj)
@permission_required('trans.lock_subproject')
def lock_subproject(request, project, subproject): def lock_subproject(request, project, subproject):
obj = get_subproject(request, project, subproject) obj = get_subproject(request, project, subproject)
if not can_lock_subproject(request.user, obj.project):
raise PermissionDenied()
obj.commit_pending(request) obj.commit_pending(request)
obj.do_lock(request.user) obj.do_lock(request.user)
...@@ -80,10 +88,12 @@ def lock_subproject(request, project, subproject): ...@@ -80,10 +88,12 @@ def lock_subproject(request, project, subproject):
return redirect(obj) return redirect(obj)
@permission_required('trans.lock_subproject')
def unlock_subproject(request, project, subproject): def unlock_subproject(request, project, subproject):
obj = get_subproject(request, project, subproject) obj = get_subproject(request, project, subproject)
if not can_lock_subproject(request.user, obj.project):
raise PermissionDenied()
obj.do_unlock(request.user) obj.do_unlock(request.user)
messages.success( messages.success(
...@@ -94,10 +104,12 @@ def unlock_subproject(request, project, subproject): ...@@ -94,10 +104,12 @@ def unlock_subproject(request, project, subproject):
return redirect(obj) return redirect(obj)
@permission_required('trans.lock_subproject')
def lock_project(request, project): def lock_project(request, project):
obj = get_project(request, project) obj = get_project(request, project)
if not can_lock_subproject(request.user, obj):
raise PermissionDenied()
obj.commit_pending(request) obj.commit_pending(request)
for subproject in obj.subproject_set.all(): for subproject in obj.subproject_set.all():
...@@ -111,10 +123,12 @@ def lock_project(request, project): ...@@ -111,10 +123,12 @@ def lock_project(request, project):
return redirect(obj) return redirect(obj)
@permission_required('trans.lock_subproject')
def unlock_project(request, project): def unlock_project(request, project):
obj = get_project(request, project) obj = get_project(request, project)
if not can_lock_subproject(request.user, obj):
raise PermissionDenied()
for subproject in obj.subproject_set.all(): for subproject in obj.subproject_set.all():
subproject.do_unlock(request.user) subproject.do_unlock(request.user)
......
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