items no one has ever marked can be deleted.

This commit is contained in:
Your Name 2023-05-13 14:10:25 -04:00 committed by Henri Dickson
parent c89ebea5ac
commit 1415b49744
3 changed files with 23 additions and 11 deletions

View file

@ -70,10 +70,12 @@
</div>
{% endif %}
{% if request.user.is_staff %}
<div class="aside-section-wrapper">
<div class="action-panel">
{% if item.is_deleted %}
<i>条目已被删除</i>
{% else %}
{% if request.user.is_staff %}
<div class="action-panel__label">{% trans '合并到另一条目' %} </div>
<div class="action-panel__button-group">
<form method="post" action="{% url 'catalog:merge' item.url_path item.uuid %}" onsubmit="return confirm('Confirm merging?');">
@ -82,21 +84,21 @@
<input class="button" type="submit" value="{% trans '提交' %}">
</form>
</div>
{% endif %}
<div class="action-panel__label">{% trans '删除' %} </div>
{% if item.deletable or request.user.is_superuser %}
<div class="action-panel__button-group">
<form method="post" action="{% url 'catalog:delete' item.url_path item.uuid %}" onsubmit="return confirm('Confirm deletion?');">
<form method="post" action="{% url 'catalog:delete' item.url_path item.uuid %}" onsubmit="return confirm('确认删除吗?');">
{% csrf_token %}
<input class="button" type="submit" value="{% trans '提交' %}">
</form>
</div>
{% else %}
<i>条目已被用户标记过</i>
{% endif %}
{% endif %}
</div>
{% if item.is_deteled %}
<!-- TODO undelete -->
{% endif %}
</div>
{% endif %}
{% endif %}
</div>

View file

@ -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()

View file

@ -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)