diff --git a/bookwyrm/templates/book/file_links/edit_links.html b/bookwyrm/templates/book/file_links/edit_links.html index 5ba45700..8dad6c40 100644 --- a/bookwyrm/templates/book/file_links/edit_links.html +++ b/bookwyrm/templates/book/file_links/edit_links.html @@ -34,9 +34,9 @@ {% trans "Filetype" %} {% trans "Domain" %} {% trans "Status" %} - {% trans "Actions" %} + {% trans "Actions" %} - {% for link in book.file_links.all %} + {% for link in links %} {{ link.url }} @@ -66,7 +66,26 @@ {% endwith %} -
+ + {% csrf_token %} + + + + +
+
+
+ {{ link.form.availability }} +
+
+
+ +
+
+
+ + +
{% csrf_token %}
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 99060149..7cdfd92a 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -473,10 +473,15 @@ urlpatterns = [ rf"{BOOK_PATH}/filelink/?$", views.BookFileLinks.as_view(), name="file-link" ), re_path( - rf"{BOOK_PATH}/filelink/(?P\d+)/delete/?$", + rf"{BOOK_PATH}/filelink/(?P\d+)/?$", views.BookFileLinks.as_view(), name="file-link", ), + re_path( + rf"{BOOK_PATH}/filelink/(?P\d+)/delete/?$", + views.delete_link, + name="file-link-delete", + ), re_path( rf"{BOOK_PATH}/filelink/add/?$", views.AddFileLink.as_view(), diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 2ec501de..3f57c274 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -37,7 +37,7 @@ from .books.books import ( from .books.books import update_book_from_remote from .books.edit_book import EditBook, ConfirmEditBook from .books.editions import Editions, switch_edition -from .books.links import BookFileLinks, AddFileLink +from .books.links import BookFileLinks, AddFileLink, delete_link # landing from .landing.about import about, privacy, conduct diff --git a/bookwyrm/views/books/links.py b/bookwyrm/views/books/links.py index 989ca9c4..51621023 100644 --- a/bookwyrm/views/books/links.py +++ b/bookwyrm/views/books/links.py @@ -5,28 +5,49 @@ from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.views import View from django.utils.decorators import method_decorator +from django.views.decorators.http import require_POST from bookwyrm import forms, models # pylint: disable=no-self-use +@method_decorator(login_required, name="dispatch") +@method_decorator( + permission_required("bookwyrm.edit_book", raise_exception=True), name="dispatch" +) class BookFileLinks(View): """View all links""" def get(self, request, book_id): """view links""" book = get_object_or_404(models.Edition, id=book_id) - return TemplateResponse( - request, "book/file_links/edit_links.html", {"book": book} - ) + links = book.file_links.order_by("domain__status", "created_date") + annotated_links = [] + for link in links.all(): + link.form = forms.FileLinkForm(instance=link) + annotated_links.append(link) + + data = {"book": book, "links": annotated_links} + return TemplateResponse(request, "book/file_links/edit_links.html", data) def post(self, request, book_id, link_id): - """delete link""" + """Edit a link""" link = get_object_or_404(models.FileLink, id=link_id, book=book_id) - link.delete() + form = forms.FileLinkForm(request.POST, instance=link) + form.save() return self.get(request, book_id) +@require_POST +@login_required +# pylint: disable=unused-argument +def delete_link(request, book_id, link_id): + """delete link""" + link = get_object_or_404(models.FileLink, id=link_id, book=book_id) + link.delete() + return redirect("file-link", book_id) + + @method_decorator(login_required, name="dispatch") @method_decorator( permission_required("bookwyrm.edit_book", raise_exception=True), name="dispatch"