diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-09-29 18:05:08 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:23:18 +0100 |
commit | 4ab3725af5ba8f12d69cbc1702baa13e9773880e (patch) | |
tree | c47ea21f2c4be849406d1d1ae40b34b560424504 | |
parent | 4f73df01dc3891266fe999e3ab2652f712f6680a (diff) | |
download | Ishtar-4ab3725af5ba8f12d69cbc1702baa13e9773880e.tar.bz2 Ishtar-4ab3725af5ba8f12d69cbc1702baa13e9773880e.zip |
Geodata: delete action
-rw-r--r-- | ishtar_common/templates/ishtar/blocks/sheet_geographic.html | 12 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/forms/geo_delete_form.html | 118 | ||||
-rw-r--r-- | ishtar_common/urls.py | 7 | ||||
-rw-r--r-- | ishtar_common/views.py | 70 |
4 files changed, 204 insertions, 3 deletions
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_geographic.html b/ishtar_common/templates/ishtar/blocks/sheet_geographic.html index 295c7ef46..8b6255f26 100644 --- a/ishtar_common/templates/ishtar/blocks/sheet_geographic.html +++ b/ishtar_common/templates/ishtar/blocks/sheet_geographic.html @@ -11,12 +11,13 @@ <th>{% trans "Origin" %}</th> <th>{% trans "Provider" %}</th> <th>{% trans "Comment" %}</th> + {% if permission_change_geo %}<th> </th>{% endif %} </tr> {% for geo in geo_item.geodata.all %} <tr> - {% if permission_change_geo %} - <td><a href="{% url 'edit-geo' geo.pk %}{% if search_url %}?back_url={{search_url}}%3Fopen_item={{geo_item.pk}}{% endif %}">{% if geo|can_edit_item:request %}<i class="fa fa-pencil"></i></a>{% else %}–{% endif %}</td> - {% endif %} + {% if permission_change_geo %}<td> + <a title="{% trans 'Edit' %}" href="{% url 'edit-geo' geo.pk %}{% if search_url %}?back_url={{search_url}}%3Fopen_item={{geo_item.pk}}{% endif %}">{% if geo|can_edit_item:request %}<i class="fa fa-pencil"></i></a>{% else %}–{% endif %} + </td>{% endif %} <td>{% if geo.id == geo_item.main_geodata_id %}<i class="fa fa-check-circle text-success" aria-hidden="true"></i>{% else %}–{% endif %}</td> <td>{% if geo.data_type %}{{ geo.data_type }}{% else %}-{% endif %}</td> <td>{{ geo.source_label }}</td> @@ -25,6 +26,11 @@ <td>{% if geo.origin %}{{ geo.origin }}{% else %}-{% endif %}</td> <td>{% if geo.provider %}{{ geo.provider }}{% else %}-{% endif %}</td> <td>{% if geo.comment %}{{ geo.comment }}{% else %}-{% endif %}</td> + {% if permission_change_geo %}<td> + <a title="{% trans 'Delete' %}" + href="{% url 'delete-geo' geo.pk %}{% if search_url %}?back_url={{search_url}}%3Fopen_item={{geo_item.pk}}{% endif %}"> + {% if geo|can_edit_item:request %}<i class="fa fa-trash text-danger"></i></a>{% else %}–{% endif %} + </td>{% endif %} </tr> {% endfor %} </table> diff --git a/ishtar_common/templates/ishtar/forms/geo_delete_form.html b/ishtar_common/templates/ishtar/forms/geo_delete_form.html new file mode 100644 index 000000000..643e4d211 --- /dev/null +++ b/ishtar_common/templates/ishtar/forms/geo_delete_form.html @@ -0,0 +1,118 @@ +{% extends "base.html" %} +{% load i18n inline_formset verbose_names %} +{% block content %} +<h2>{{page_name}}</h2> + <form action="." method="post">{% csrf_token %} + <input type="hidden" name="back_url" value="{{back_url}}" /> + <div class="form container"> + {% block "warning_message" %} + <div class="alert alert-danger"> + <div><i class="fa fa-exclamation-triangle" aria-hidden="true"></i> + {% trans "Are you sure to want to delete this geographic item?" %} + <p>{% trans "No rollback is possible." %}</p> + </div> + </div> + {% endblock %} + + <div class="card"> + <div class="card-header"> + {{ object }} + </div> + <div class="card-body"> + <table class="table"> + <tr> + <th>{% trans "Name" %}</th><td>{{object.name|default:'-'}}</td> + </tr> + <tr> + <th>{% trans "Source" %}</th><td>{{object.source_label|default:'-'}}</td> + </tr> + <tr> + <th>{% trans "Origin" %}</th><td>{{object.origin|default:'-'}}</td> + </tr> + <tr> + <th>{% trans "Data type" %}</th><td>{{object.data_type|default:'-'}}</td> + </tr> + <tr> + <th>{% trans "Provider" %}</th><td>{{object.provider|default:'-'}}</td> + </tr> + <tr> + <th>{% trans "Comment" %}</th><td>{{object.comment|default:'-'}}</td> + </tr> + {% if object.related_items_ishtar_common_town.count %} + <tr> + <th>{% trans "Geographic item for these towns" %}</th> + <td><ul> + {% for item in object.related_items_ishtar_common_town.all %} + <li>{{item}}</li>{% endfor %} + </ul></td> + </tr> + {% endif %} + {% if object.related_items_archaeological_operations_operation.count %} + <tr> + <th>{% trans "Geographic item for these operations" %}</th> + <td><ul> + {% for item in object.related_items_archaeological_operations_operation.all %} + <li>{{item}}</li>{% endfor %} + </ul></td> + </tr> + {% endif %} + {% if object.related_items_archaeological_operations_archaeologicalsite.count %} + <tr> + <th>{% trans "Geographic item for these sites" %}</th> + <td><ul> + {% for item in object.related_items_archaeological_operations_archaeologicalsite.all %} + <li>{{item}}</li>{% endfor %} + </ul></td> + </tr> + {% endif %} + {% if object.related_items_archaeological_context_records_contextrecord.count %} + <tr> + <th>{% trans "Geographic item for these context records" %}</th> + <td><ul> + {% for item in object.related_items_archaeological_context_records_contextrecord.all %} + <li>{{item}}</li>{% endfor %} + </ul></td> + </tr> + {% endif %} + {% if object.related_items_archaeological_finds_basefind.count %} + <tr> + <th>{% trans "Geographic item for these base finds" %}</th> + <td><ul> + {% for item in object.related_items_archaeological_finds_basefind.all %} + <li>{{item}}</li>{% endfor %} + </ul></td> + </tr> + {% endif %} + {% if object.related_items_archaeological_warehouse_container.count %} + <tr> + <th>{% trans "Geographic item for these containers" %}</th> + <td><ul> + {% for item in object.related_items_archaeological_warehouse_container.all %} + <li>{{item}}</li>{% endfor %} + </ul></td> + </tr> + {% endif %} + {% if object.related_items_archaeological_warehouse_warehouse.count %} + <tr> + <th>{% trans "Geographic item for these operations" %}</th> + <td><ul> + {% for item in object.related_items_archaeological_warehouse_warehouse.all %} + <li>{{item}}</li>{% endfor %} + </ul></td> + </tr> + {% endif %} + </table> + </div> + </div> + + </div> + {% block "footer" %} + <div id="footer"> + <p class="confirm-message">{% trans "Are you sure to want to delete this import?" %}</p> + {% include 'ishtar/wizard/validation_bar.html' %} + {% include 'ishtar/blocks/footer.html' %} + </div> + {% endblock %} + </div> + </form> +{% endblock %} diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index b6ac71a9e..b7e5f46d1 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -596,6 +596,13 @@ urlpatterns += [ name="edit-geo", ), url( + r"geo/delete/(?P<pk>\d+)/$", + check_rights(["change_geovectordata", "change_own_geovectordata"])( + views.GeoDeleteView.as_view() + ), + name="delete-geo", + ), + url( r"^qa-not-available(?:/(?P<context>[0-9a-z-]+))?/$", views.QANotAvailable.as_view(), name="qa-not-available", diff --git a/ishtar_common/views.py b/ishtar_common/views.py index db05c74a1..8c443a378 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -2892,3 +2892,73 @@ class GeoCreateView(GeoFormMixin, CreateView): kwargs["geom_type"] = self.kwargs.get("geom_type") kwargs["user"] = self.request.user return kwargs + + +class GeoEditView(GeoFormMixin, UpdateView): + page_name = _("Geo item modification") + + def get_form_kwargs(self): + kwargs = super(GeoEditView, self).get_form_kwargs() + try: + geo = models.GeoVectorData.objects.get(pk=self.kwargs.get("pk")) + assert check_permission(self.request, "geo/edit", geo.pk) + except (AssertionError, models.GeoVectorData.DoesNotExist): + raise Http404() + initial = {} + + for k in ( + list(self.form_class.base_fields.keys()) + + models.GeoVectorData.RELATED_MODELS + ): + value = getattr(geo, k) + if hasattr(value, "all"): + value = ",".join([str(v.pk) for v in value.all().order_by("pk")]) + if hasattr(value, "pk"): + value = value.pk + initial[k] = value + + kwargs["main_items_fields"] = {} + kwargs["too_many"] = {} + LIMIT = 10 + for k in models.GeoVectorData.RELATED_MODELS: + kwargs["main_items_fields"][k] = [] + values = [] + for idx, related_item in enumerate(getattr(geo, k).all()): + if idx >= LIMIT: + if k not in kwargs["too_many"]: + kwargs["too_many"][k] = [] + kwargs["too_many"][k].append(related_item.pk) + continue + pk = str(related_item.pk) + values.append(pk) + key = "{}_{}_main_item".format(k, pk) + kwargs["main_items_fields"][k].append( + (key, "{} - {}".format(_("Main geo item for"), related_item)) + ) + if related_item.main_geodata == geo: + initial[key] = True + initial[k] = ",".join(values) + kwargs["initial"] = initial + kwargs["user"] = self.request.user + return kwargs + + +class GeoDeleteView(IshtarMixin, LoginRequiredMixin, DeleteView): + template_name = "ishtar/forms/geo_delete_form.html" + model = models.GeoVectorData + page_name = _("Delete geographic item") + + def get(self, request, *args, **kwargs): + self.back_url = request.GET.get("back_url", None) + return super().get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context_data = super().get_context_data(**kwargs) + if self.back_url: + context_data["back_url"] = self.back_url + return context_data + + def get_success_url(self): + if self.request.POST.get("back_url", None): + return self.request.POST.get("back_url", None) + return reverse("start") |