summaryrefslogtreecommitdiff
path: root/archaeological_files
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-10 18:02:50 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-10 18:02:50 +0200
commit05ed481007604079612aa4b0f1f3bb8d4d35a6e5 (patch)
treef84171501c3d98df394c94fcc6d32cc3dd5c6539 /archaeological_files
parent1d5254416b11ef1010d5ac31f2a53677254c6497 (diff)
downloadIshtar-05ed481007604079612aa4b0f1f3bb8d4d35a6e5.tar.bz2
Ishtar-05ed481007604079612aa4b0f1f3bb8d4d35a6e5.zip
Locks: prevent edit actions
Diffstat (limited to 'archaeological_files')
-rw-r--r--archaeological_files/forms.py9
-rw-r--r--archaeological_files/views.py28
2 files changed, 29 insertions, 8 deletions
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py
index 8f18de29e..640e2cab1 100644
--- a/archaeological_files/forms.py
+++ b/archaeological_files/forms.py
@@ -140,7 +140,14 @@ class FileFormSelection(forms.Form):
cleaned_data = self.cleaned_data
if 'pk' not in cleaned_data or not cleaned_data['pk']:
raise forms.ValidationError(_(u"You should select a file."))
- return cleaned_data
+ pk = self.cleaned_data["pk"]
+ try:
+ file = models.File.objects.get(pk=pk)
+ except models.File.DoesNotExist:
+ raise forms.ValidationError(_("Invalid selection."))
+ if file.locked:
+ raise forms.ValidationError(_("This file is locked for edition."))
+ return self.cleaned_data
DATE_SOURCE = (('creation', _(u"Creation date")),
diff --git a/archaeological_files/views.py b/archaeological_files/views.py
index 50f3a86d2..e7307e882 100644
--- a/archaeological_files/views.py
+++ b/archaeological_files/views.py
@@ -22,16 +22,12 @@ import re
from django.core.urlresolvers import reverse
from django.db.models import Q
-from django.http import HttpResponse
-from django.shortcuts import redirect, render
+from django.http import HttpResponse, Http404, HttpResponseRedirect
+from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _
from ishtar_common.views_item import get_item, show_item, revert_item
-from archaeological_operations.models import Operation
-from . import models
-
-from ishtar_common.wizards import SearchWizard
from archaeological_operations.wizards import AdministrativeActDeletionWizard, \
is_preventive, is_not_preventive
from .wizards import *
@@ -41,6 +37,8 @@ from archaeological_operations.forms import FinalAdministrativeActDeleteForm
from ishtar_common.forms import ClosingDateFormSelection
from . import forms
+from ishtar_common.utils import put_session_message
+
RE_YEAR_INDEX = re.compile(r"([1-2][0-9]{3})-([0-9]+)") # eg.: 2014-123
@@ -145,7 +143,23 @@ file_modification_wizard = FileModificationWizard.as_view(
def file_modify(request, pk):
- file_modification_wizard(request)
+ try:
+ file_modification_wizard(request)
+ except IndexError: # no step available
+ put_session_message(
+ request.session.session_key,
+ _(u"You don't have sufficient permissions to do this action."),
+ 'warning'
+ )
+ return HttpResponseRedirect("/")
+
+ q = models.File.objects.filter(pk=pk)
+ if not q.count():
+ raise Http404()
+ item = q.all()[0]
+ if item.locked:
+ raise Http404()
+
FileModificationWizard.session_set_value(
request, 'selec-file_modification', 'pk', pk, reset=True)
return redirect(reverse('file_modification',