diff options
Diffstat (limited to 'ishtar_common/views.py')
| -rw-r--r-- | ishtar_common/views.py | 76 |
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 |
