summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py76
1 files changed, 74 insertions, 2 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 9ffd4a4eb..4f37a0938 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -74,8 +74,7 @@ from archaeological_operations.models import Operation, ArchaeologicalSite
from archaeological_warehouse.models import Warehouse
from ishtar_common import forms_common as forms
from ishtar_common import wizards
-from ishtar_common.data_importer import ImporterError
-from ishtar_common.forms import FinalForm, FinalDeleteForm, reverse_lazy
+from ishtar_common.forms import FinalForm, FinalDeleteForm, reverse_lazy, QADating
from ishtar_common.models import get_current_profile
from ishtar_common.models_common import QuickAction
from ishtar_common.templatetags.link_to_window import simple_link_to_window
@@ -3909,3 +3908,76 @@ class GeoDeleteView(IshtarMixin, LoginRequiredMixin, DeleteView):
if self.request.POST.get("back_url", None):
return self.request.POST.get("back_url", None)
return reverse("start")
+
+
+def get_dating_form(model, dating_model, url_name):
+ def _dating_form(request, pk, dating_pk=None, current_right=None):
+ try:
+ item = model.objects.get(pk=pk)
+ except model.DoesNotExist:
+ raise Http404()
+ # permission not provided
+ if not current_right:
+ raise PermissionDenied()
+ # specificaly check permission for own item, otherwise already checked
+ if "_own_" in current_right:
+ if not request.user.has_perm(current_right, item):
+ raise PermissionDenied()
+ initial = {}
+ if dating_pk:
+ try:
+ dating_item = dating_model.objects.get(pk=dating_pk)
+ initial = dict(
+ (attr, getattr(dating_item, attr))
+ for attr in [
+ "pk", "reference", "period_id", "start_date", "end_date",
+ "quality_id", "dating_type_id", "precise_dating"]
+ )
+ except dating_model.DoesNotExist:
+ raise Http404()
+ if request.method == 'POST':
+ form = QADating(request.POST, dating_model=dating_model,
+ current_item=item)
+ if form.is_valid():
+ form.save()
+ return HttpResponseRedirect(reverse("success"))
+ else:
+ form = QADating(dating_model=dating_model,
+ current_item=item, initial=initial)
+ button_name = _("Add") if not dating_pk else _("Modify")
+ icon = "fa fa-plus" if not dating_pk else "fa fa-pencil"
+ url_args = [pk]
+ if dating_pk:
+ url_args.append(dating_pk)
+ return render(
+ request,
+ "ishtar/forms/qa_form.html", {
+ "page_name": _("Dating"),
+ "icon": icon,
+ "action_name": button_name,
+ "form": form,
+ "url": reverse(url_name, args=url_args)
+ })
+ return _dating_form
+
+
+def get_dating_delete(model, dating_model, url_name):
+ def _dating_form(request, dating_pk, current_right=None):
+ try:
+ dating_item = dating_model.objects.get(pk=dating_pk)
+ except dating_model.DoesNotExist:
+ raise Http404()
+ pk = getattr(dating_item, dating_model.CURRENT_MODEL_ATTR + "_id")
+ try:
+ item = model.objects.get(pk=pk)
+ except model.DoesNotExist:
+ raise Http404()
+ if "_own_" in current_right:
+ if not request.user.has_perm(current_right, item):
+ raise PermissionDenied()
+ elif current_right:
+ if not request.user.has_perm(current_right):
+ raise PermissionDenied()
+ dating_item.delete()
+ return HttpResponseRedirect(reverse("success"))
+ return _dating_form