reassign tvseason to show.

This commit is contained in:
Your Name 2023-05-13 15:11:05 -04:00 committed by Henri Dickson
parent 6c37c0fd6f
commit 433d0e6df1
3 changed files with 50 additions and 10 deletions

View file

@ -71,14 +71,27 @@
{% endif %}
<div class="aside-section-wrapper">
{% if item.is_deleted and not request.user.is_superuser %}
<i>条目已被删除</i>
{% elif item.merged_to_item and not request.user.is_superuser %}
<i>条目已被合并</i>
{% elif not item.deletable and not request.user.is_superuser %}
<i>条目已被用户标记过</i>
{% else %}
<div class="action-panel">
{% if item.class_name == "tvseason" %}
{% if not item.show or request.user.is_superuser %}
<div class="action-panel__label">{% trans '将本季关联到电视剧' %} </div>
<div class="action-panel__button-group">
<form method="post" action="{% url 'catalog:assign_parent' item.url_path item.uuid %}" onsubmit="return confirm('本操作不可撤销。确认合并吗?');">
{% csrf_token %}
<input type="url" name="parent_item_url" placeholder="目标条目URL" value="{{ item.show.absolute_url }}" required><br>
<input class="button" type="submit" value="{% trans '提交' %}">
</form>
</div>
{% endif %}
{% endif %}
{% if item.is_deleted and not request.user.is_superuser %}
<i>条目已被删除</i>
{% elif item.merged_to_item and not request.user.is_superuser %}
<i>条目已被合并</i>
{% elif not item.deletable and not request.user.is_superuser %}
<i>条目已被用户标记过</i>
{% else %}
<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('本操作不可撤销。确认合并吗?');">
@ -87,6 +100,7 @@
<input class="button" type="submit" value="{% trans '提交' %}">
</form>
</div>
<div class="action-panel__label">{% trans '删除' %} </div>
<div class="action-panel__button-group">
<form method="post" action="{% url 'catalog:delete' item.url_path item.uuid %}" onsubmit="return confirm('本操作不可撤销。确认删除吗?');">
@ -95,9 +109,10 @@
{% if item.is_deleted or item.merged_to_item %} disabled {% endif %} value="{% trans '提交' %}">
</form>
</div>
{% endif %}
</div>
{% endif %}
</div>
{% endif %}
</div>
<div class="single-section-wrapper" id="main">

View file

@ -51,6 +51,13 @@ urlpatterns = [
delete,
name="delete",
),
re_path(
r"^(?P<item_path>"
+ _get_all_url_paths()
+ ")/(?P<item_uuid>[A-Za-z0-9]{21,22})/assign_parent$",
assign_parent,
name="assign_parent",
),
re_path(
r"^(?P<item_path>"
+ _get_all_url_paths()

View file

@ -225,13 +225,31 @@ def unlink(request):
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
@login_required
def assign_parent(request, item_path, item_uuid):
if request.method != "POST":
raise BadRequest()
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()
new_item = Item.get_by_url(request.POST.get("parent_item_url"))
if not new_item or new_item.is_deleted or new_item.merged_to_item_id:
raise BadRequest("Can't assign parent to a deleted or redirected item")
if item.__class__ != TVSeason or new_item.__class__ != TVShow:
raise BadRequest("Can't assign parent for this item")
_logger.warn(f"{request.user} assign {item} to {new_item}")
item.show = new_item
item.save(update_fields=["show"])
return redirect(item.url)
@login_required
def merge(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()
new_item = Item.get_by_url(request.POST.get("new_item_url"))
if not new_item or new_item.is_deleted or new_item.merged_to_item_id:
raise BadRequest("Can't merge to a deleted or redirected item")