From 1415b497449060e7e8f0cbe82b9a05f957604bac Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 13 May 2023 14:10:25 -0400 Subject: [PATCH] items no one has ever marked can be deleted. --- catalog/templates/catalog_edit.html | 20 +++++++++++--------- catalog/views.py | 4 ++-- journal/models.py | 10 ++++++++++ 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/catalog/templates/catalog_edit.html b/catalog/templates/catalog_edit.html index 9d9fdafc..d306fcbb 100644 --- a/catalog/templates/catalog_edit.html +++ b/catalog/templates/catalog_edit.html @@ -70,10 +70,12 @@ {% endif %} - {% if request.user.is_staff %}
- + {% if item.is_deleted %} + 条目已被删除 + {% else %} + {% if request.user.is_staff %}
{% trans '合并到另一条目' %}
@@ -82,21 +84,21 @@
- + {% endif %}
{% trans '删除' %}
+ {% if item.deletable or request.user.is_superuser %}
-
+ {% csrf_token %}
+ {% else %} + 条目已被用户标记过 + {% endif %} + {% endif %}
- - {% if item.is_deteled %} - - {% endif %}
- {% endif %} {% endif %} diff --git a/catalog/views.py b/catalog/views.py index f105bbf9..c076d5f6 100644 --- a/catalog/views.py +++ b/catalog/views.py @@ -185,9 +185,9 @@ def edit(request, item_path, item_uuid): def delete(request, item_path, item_uuid): if request.method != "POST": raise BadRequest() - if not request.user.is_staff: - raise PermissionDenied() item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid)) + if not request.user.is_superuser and not item.deletable: + raise PermissionDenied() for res in item.external_resources.all(): res.item = None res.save() diff --git a/journal/models.py b/journal/models.py index ff3f9694..9a94f516 100644 --- a/journal/models.py +++ b/journal/models.py @@ -1150,3 +1150,13 @@ def update_journal_for_merged_item(legacy_item_uuid): f"deleted piece {p} when merging {cls.__name__}: {legacy_item} -> {new_item}" ) p.delete() + + +def journal_exists_for_item(item): + for cls in list(Content.__subclasses__()) + list(ListMember.__subclasses__()): + if cls.objects.filter(item=item).exists(): + return False + return True + + +Item.deletable = property(journal_exists_for_item)