]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/backend/wiki.py
wiki: Allow adding a comment when a page is being restored
[ipfire.org.git] / src / backend / wiki.py
index 1747429ca083d5234e817595d1d1153802d3d9e7..8237da97ef6e5a18a9c8b20715bcf71a9da39e58 100644 (file)
@@ -4,7 +4,6 @@ import difflib
 import logging
 import os.path
 import re
-import tornado.gen
 import urllib.parse
 
 from . import misc
@@ -24,6 +23,14 @@ class Wiki(misc.Object):
                if res:
                        return Page(self.backend, res.id, data=res)
 
+       def __iter__(self):
+               return self._get_pages(
+                       "SELECT wiki.* FROM wiki_current current \
+                               LEFT JOIN wiki ON current.id = wiki.id \
+                               WHERE current.deleted IS FALSE \
+                               ORDER BY page",
+               )
+
        def make_path(self, page, path):
                # Nothing to do for absolute links
                if path.startswith("/"):
@@ -125,12 +132,10 @@ class Wiki(misc.Object):
                return ret
 
        def search(self, query, account=None, limit=None):
-               query = util.parse_search_query(query)
-
                res = self._get_pages("SELECT wiki.* FROM wiki_search_index search_index \
                        LEFT JOIN wiki ON search_index.wiki_id = wiki.id \
-                       WHERE search_index.document @@ to_tsquery('english', %s) \
-                               ORDER BY ts_rank(search_index.document, to_tsquery('english', %s)) DESC",
+                       WHERE search_index.document @@ websearch_to_tsquery('english', %s) \
+                               ORDER BY ts_rank(search_index.document, websearch_to_tsquery('english', %s)) DESC",
                        query, query)
 
                pages = []
@@ -179,7 +184,7 @@ class Wiki(misc.Object):
 
                        # If user is in a matching group, we grant permission
                        for group in row.groups:
-                               if group in account.groups:
+                               if account.is_member_of_group(group):
                                        return True
 
                        # Otherwise access is not permitted
@@ -332,12 +337,15 @@ class Page(misc.Object):
                return self.data.timestamp
 
        def was_deleted(self):
-               return self.markdown is None
+               return not self.markdown
 
        @lazy_property
        def breadcrumbs(self):
                return self.backend.wiki.make_breadcrumbs(self.page)
 
+       def is_latest_revision(self):
+               return self.get_latest_revision() == self
+
        def get_latest_revision(self):
                revisions = self.get_revisions()
 
@@ -443,8 +451,17 @@ class Page(misc.Object):
 
                        # Compose message
                        self.backend.messages.send_template("wiki/messages/page-changed",
-                               sender="IPFire Wiki <wiki@ipfire.org>", recipients=[watcher],
-                               page=self, priority=-10)
+                               account=watcher, page=self, priority=-10)
+
+       def restore(self, author, address, comment=None):
+               changes = "Restore to revision from %s" % self.timestamp.isoformat()
+
+               # Append comment
+               if comment:
+                       changes = "%s: %s" % (changes, comment)
+
+               return self.backend.wiki.create_page(self.page,
+                       author, self.markdown, changes=changes, address=address)
 
 
 class File(misc.Object):
@@ -502,7 +519,7 @@ class File(misc.Object):
 
        def get_revisions(self):
                revisions = self.backend.wiki._get_files("SELECT * FROM wiki_files \
-                       WHERE path = %s ORDER BY created_at DESC", self.path)
+                       WHERE path = %s AND filename = %s ORDER BY created_at DESC", self.path, self.filename)
 
                return list(revisions)