]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/web/blog.py
blog: Allow to edit and create new posts
[ipfire.org.git] / src / web / blog.py
index f4a8fd94775ebcbb8d73f0e2ac79db8f58272020..a6b7224bbd5b6b6dc1edfefb3c141e436e870187 100644 (file)
@@ -89,6 +89,65 @@ class YearHandler(base.BaseHandler):
                self.render("blog/year.html", posts=posts, year=year)
 
 
+class ComposeHandler(base.BaseHandler):
+       @tornado.web.authenticated
+       def get(self):
+               self.render("blog/compose.html", post=None)
+
+       @tornado.web.authenticated
+       def post(self):
+               title = self.get_argument("title")
+               text  = self.get_argument("text")
+               tags  = self.get_argument("tags", None)
+
+               with self.db.transaction():
+                       post = self.backend.blog.create_post(title, text,
+                               author=self.current_user, tags=tags)
+
+               self.redirect("/posts")
+
+
+class EditHandler(base.BaseHandler):
+       @tornado.web.authenticated
+       def get(self, slug):
+               post = self.backend.blog.get_by_slug(slug)
+               if not post:
+                       raise tornado.web.HTTPError(404)
+
+               # XXX check if post is editable
+
+               self.render("blog/compose.html", post=post)
+
+       @tornado.web.authenticated
+       def post(self, slug):
+               post = self.backend.blog.get_by_slug(slug)
+               if not post:
+                       raise tornado.web.HTTPError(404)
+
+               # XXX check if post is editable
+
+               with self.db.transaction():
+                       # Update title
+                       post.title = self.get_argument("title")
+
+                       # Update text
+                       post.text = self.get_argument("text")
+
+                       # Update tags
+                       post.tags = (t.strip() for t in self.get_argument("tags", "").split(","))
+
+                       # Mark post as updated
+                       post.updated()
+
+               # Return to blog if the post is already published
+               if post.is_published():
+                       self.redirect("/post/%s" % post.slug)
+                       return
+
+               # Otherwise return to list of unpublished posts
+               self.redirect("/posts")
+
+
 class HistoryNavigationModule(ui_modules.UIModule):
        def render(self):
                return self.render_string("blog/modules/history-navigation.html",