From 9406e5e22099395bf8ef2a084d283cb409d6f3cb Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 20 Dec 2023 14:50:54 +0000 Subject: [PATCH] docs: Show where an image is being used Signed-off-by: Michael Tremer --- src/backend/wiki.py | 36 ++++++++++++++++++++++++++++ src/templates/docs/files/detail.html | 22 ++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/backend/wiki.py b/src/backend/wiki.py index 949cd495..66b867fd 100644 --- a/src/backend/wiki.py +++ b/src/backend/wiki.py @@ -497,6 +497,8 @@ class File(misc.Object): if isinstance(other, self.__class__): return self.id == other.id + return NotImplemented + @property def url(self): return "/docs%s" % os.path.join(self.path, self.filename) @@ -527,9 +529,20 @@ class File(misc.Object): return self.data.created_at def delete(self, author=None): + if not self.can_be_deleted(): + raise RuntimeError("Cannot delete %s" % self) + self.db.execute("UPDATE wiki_files SET deleted_at = NOW(), deleted_by = %s \ WHERE id = %s", author.uid if author else None, self.id) + def can_be_deleted(self): + # Cannot be deleted if still in use + if self.pages: + return False + + # Can be deleted + return True + @property def deleted_at(self): return self.data.deleted_at @@ -590,6 +603,29 @@ class File(misc.Object): return thumbnail + @property + def pages(self): + """ + Returns a list of all pages this file is linked by + """ + pages = self.backend.wiki._get_pages(""" + SELECT + wiki.* + FROM + wiki_linked_files + JOIN + wiki_current ON wiki_linked_files.page_id = wiki_current.id + LEFT JOIN + wiki ON wiki_linked_files.page_id = wiki.id + WHERE + wiki_linked_files.path = %s + ORDER BY + wiki.page + """, os.path.join(self.path, self.filename), + ) + + return list(pages) + class WikiRenderer(misc.Object): schemas = ( diff --git a/src/templates/docs/files/detail.html b/src/templates/docs/files/detail.html index 368f697e..3466feb2 100644 --- a/src/templates/docs/files/detail.html +++ b/src/templates/docs/files/detail.html @@ -121,10 +121,30 @@
+ {% if file.pages %} +
{{ _("Used By") }}
+ + + {% end %} +
{{ _("Delete") }}
-- 2.39.2