]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/backend/wiki.py
wiki: Simplify code when saving a page
[ipfire.org.git] / src / backend / wiki.py
index 26d96b4ec9da188c19cd5d584b05e9445817e985..5a285ea8f88e3e639db3d6082e1be048126965a5 100644 (file)
@@ -27,6 +27,12 @@ class Wiki(misc.Object):
                for row in res:
                        yield Page(self.backend, row.id, data=row)
 
+       def _get_page(self, query, *args):
+               res = self.db.get(query, *args)
+
+               if res:
+                       return Page(self.backend, res.id, data=res)
+
        def get_page_title(self, page, default=None):
                doc = self.get_page(page)
                if doc:
@@ -39,36 +45,30 @@ class Wiki(misc.Object):
                assert page
 
                if revision:
-                       res = self.db.get("SELECT * FROM wiki WHERE page = %s \
+                       return self._get_page("SELECT * FROM wiki WHERE page = %s \
                                AND timestamp = %s", page, revision)
                else:
-                       res = self.db.get("SELECT * FROM wiki WHERE page = %s \
+                       return self._get_page("SELECT * FROM wiki WHERE page = %s \
                                ORDER BY timestamp DESC LIMIT 1", page)
 
-               if res:
-                       return Page(self.backend, res.id, data=res)
-
        def get_recent_changes(self, limit=None):
                return self._get_pages("SELECT * FROM wiki \
                        WHERE timestamp >= NOW() - INTERVAL '4 weeks' \
                        ORDER BY timestamp DESC LIMIT %s", limit)
 
-       def create_page(self, page, author, markdown):
+       def create_page(self, page, author, content, changes=None, address=None):
                page = Page.sanitise_page_name(page)
 
-               res = self.db.get("INSERT INTO wiki(page, author_id, markdown) \
-                       VALUES(%s, %s, %s) RETURNING id", page, author.id, markdown)
-
-               if res:
-                       return self.get_page_by_id(res.id)
+               return self._get_page("INSERT INTO wiki(page, author_uid, markdown, changes, address) \
+                       VALUES(%s, %s, %s, %s, %s) RETURNING *", page, author.uid, content or None, changes, address)
 
-       def delete_page(self, page, author):
+       def delete_page(self, page, author, **kwargs):
                # Do nothing if the page does not exist
                if not self.get_page(page):
                        return
 
                # Just creates a blank last version of the page
-               self.create_page(page, author, None)
+               self.create_page(page, author=author, content=None, **kwargs)
 
        @staticmethod
        def _split_url(url):
@@ -117,7 +117,7 @@ class Page(misc.Object):
 
        @property
        def url(self):
-               return "/%s" % self.page
+               return self.page
 
        @property
        def page(self):
@@ -172,6 +172,10 @@ class Page(misc.Object):
        def get_latest_revision(self):
                return self.backend.wiki.get_page(self.page)
 
+       @property
+       def changes(self):
+               return self.data.changes
+
        # Sidebar
 
        @lazy_property