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)
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
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 = (
<section class="section">
<div class="container">
+ {% if file.pages %}
+ <h6 class="title is-6">{{ _("Used By") }}</h6>
+
+ <div class="block">
+ <ul>
+ {% for page in file.pages %}
+ <li>
+ <a href="{{ page.url }}">
+ {% for p, b in page.breadcrumbs %}
+ {{ b }} /
+ {% end %}
+
+ {{ page.title }}
+ </a>
+ </li>
+ {% end %}
+ </ul>
+ </div>
+ {% end %}
+
<h6 class="title is-6">{{ _("Delete") }}</h6>
<div class="block">
- <a class="button is-danger" href="{{ file.url }}/_delete">
+ <a class="button is-danger" href="{{ file.url }}/_delete" {% if not file.can_be_deleted() %}disabled{% end %}>
{{ _("Delete") }}
</a>
</div>