summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_geographic.html12
-rw-r--r--ishtar_common/templates/ishtar/forms/geo_delete_form.html118
-rw-r--r--ishtar_common/urls.py7
-rw-r--r--ishtar_common/views.py70
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>&nbsp;</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 %}&ndash;{% 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 %}&ndash;{% 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 %}&ndash;{% 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 %}&ndash;{% 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>&nbsp;
+ {% 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")