Add nested collection management

This commit is contained in:
rucki
2026-08-30 19:27:32 +02:00
parent 5793283653
commit 7a2ce8e650
5 changed files with 44 additions and 19 deletions
+8 -6
View File
@@ -800,27 +800,29 @@ def collection_manage(request, pk):
if collection.mode == Collection.Mode.TAGS:
return redirect('collection_edit', pk=collection.pk)
manage_url = reverse('collection_manage', args=[collection.pk])
q = request.GET.get('q', '').strip()
redirect_url = f'{manage_url}?q={q}' if q else manage_url
if request.method == 'POST':
action = request.POST.get('action')
if action in {'add', 'confirm_add'}:
item = get_object_or_404(editable_collection_notes(request.user), pk=request.POST.get('item_id'))
if collection_item_is_compatible(collection, item):
add_collection_section(collection, item)
return redirect(manage_url)
return redirect(redirect_url)
if action == 'add':
return render(request, 'core/collection_manage.html', collection_detail_context(request, collection, item))
mode = request.POST.get('mode')
if mode == 'convert':
if not item_can_change_for_collection(request.user, item, collection):
messages.error(request, _('This note is used by an incompatible collection or cannot be edited. Create a copy instead.'))
return redirect(manage_url)
return redirect(redirect_url)
item = adapt_item_for_collection(item, collection)
elif mode == 'copy':
item = copy_item_for_collection(item, collection, request.user)
else:
return redirect(manage_url)
return redirect(redirect_url)
add_collection_section(collection, item)
return redirect(manage_url)
return redirect(redirect_url)
if action == 'add_collection':
sub_collection = get_object_or_404(visible_collections(request.user), pk=request.POST.get('collection_id'), mode=Collection.Mode.MANUAL)
if sub_collection.pk == collection.pk or collection_contains_collection(sub_collection, collection):
@@ -829,7 +831,7 @@ def collection_manage(request, pk):
messages.error(request, _('This collection has an incompatible visibility.'))
else:
add_collection_subcollection(collection, sub_collection)
return redirect(manage_url)
return redirect(redirect_url)
section = get_object_or_404(CollectionSection, pk=request.POST.get('section_id'), collection=collection)
if action == 'remove':
section.delete()
@@ -848,7 +850,7 @@ def collection_manage(request, pk):
CollectionSection.objects.filter(pk=section.pk).update(position=temporary)
CollectionSection.objects.filter(pk=other.pk).update(position=section.position)
CollectionSection.objects.filter(pk=section.pk).update(position=other.position)
return redirect(manage_url)
return redirect(redirect_url)
return render(request, 'core/collection_manage.html', collection_detail_context(request, collection))