]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/web/wiki.py
wiki: Add ability to edit pages
[ipfire.org.git] / src / web / wiki.py
index de81880dad76885074db5913d8a0e6e987ab06aa..c6244b55b19e19c5fcd0b7fde746ab0d5a6d9f87 100644 (file)
@@ -7,6 +7,10 @@ from . import base
 from . import ui_modules
 
 class PageHandler(auth.CacheMixin, base.BaseHandler):
+       @property
+       def action(self):
+               return self.get_argument("action", None)
+
        def write_error(self, status_code, **kwargs):
                # Render a custom page for 404
                if status_code == 404:
@@ -20,6 +24,18 @@ class PageHandler(auth.CacheMixin, base.BaseHandler):
        def get(self, page):
                page = self.backend.wiki.get_page(page)
 
+               # Edit
+               if self.action == "edit":
+                       if not self.current_user:
+                               raise tornado.web.HTTPError(401)
+
+                       # Empty page if it was deleted
+                       if page.was_deleted():
+                               page = None
+
+                       # Render login
+                       return self.render("wiki/edit.html", page=page)
+
                # If the page does not exist, we send 404
                if not page or page.was_deleted():
                        raise tornado.web.HTTPError(404)
@@ -31,18 +47,24 @@ class PageHandler(auth.CacheMixin, base.BaseHandler):
                self.render("wiki/page.html", page=page, latest_revision=latest_revision)
 
        @tornado.web.authenticated
-       def post(self, page):
+       def post(self):
+               page = self.get_argument("page")
+
                content = self.get_argument("content", None)
+               changes = self.get_argument("changes")
 
                # Delete the page if content is empty
                if not content:
                        with self.db.transaction():
                                self.backend.wiki.delete_page(page, self.current_user)
 
-                       return self.redirect("/")
+                       self.redirect("/")
+                       return
 
                # Create a new page in the database
-               page = self.backend.wiki.create_page(page, self.current_user, content)
+               with self.db.transaction():
+                       page = self.backend.wiki.create_page(page,
+                               self.current_user, content, changes=changes)
 
                # Redirect
                self.redirect(page.url)
@@ -68,8 +90,9 @@ class RecentChangesHandler(auth.CacheMixin, base.BaseHandler):
 
 
 class WikiListModule(ui_modules.UIModule):
-       def render(self, pages):
-               return self.render_string("wiki/modules/list.html", pages=pages)
+       def render(self, pages, show_changes=False):
+               return self.render_string("wiki/modules/list.html",
+                       pages=pages, show_changes=show_changes)
 
 
 class WikiNavbarModule(ui_modules.UIModule):