]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/web/blog.py
blog: The feed only needs to have the last 10 posts
[ipfire.org.git] / src / web / blog.py
index 23f900a60e5dde3b760226da01382da267da6e9b..e20e3f893e4589ef42871cfca096c3e8d9a8b3b4 100644 (file)
@@ -1,6 +1,7 @@
 #!/usr/bin/python
 
 import datetime
+import dateutil
 import email.utils
 import tornado.web
 
@@ -39,7 +40,7 @@ class AuthorHandler(auth.CacheMixin, base.BaseHandler):
 
 class FeedHandler(base.BaseHandler):
        def get(self):
-               posts = self.backend.blog.get_newest(limit=50)
+               posts = self.backend.blog.get_newest(limit=10)
 
                # Render the feed
                feed = self.render_string("blog/feed.xml", posts=posts,
@@ -69,21 +70,43 @@ class PostHandler(auth.CacheMixin, base.BaseHandler):
 
 
 class PublishHandler(auth.CacheMixin, base.BaseHandler):
+       @tornado.web.authenticated
+       def get(self, slug):
+               post = self.backend.blog.get_by_slug(slug, published=False)
+               if not post:
+                       raise tornado.web.HTTPError(404)
+
+               # Check if current_user is allowed to edit the post
+               if not post.is_editable(self.current_user):
+                       raise tornado.web.HTTPError(403)
+
+               # Is the post already published?
+               if post.is_published():
+                       raise tornado.web.HTTPError(400, "Post is already published")
+
+               self.render("blog/publish.html", post=post)
+
        @tornado.web.authenticated
        def post(self, slug):
-               post = self.backend.blog.get_by_slug(slug, published=not self.current_user)
+               post = self.backend.blog.get_by_slug(slug, published=False)
                if not post:
                        raise tornado.web.HTTPError(404)
 
+               # Check if current_user is allowed to edit the post
+               if not post.is_editable(self.current_user):
+                       raise tornado.web.HTTPError(403)
+
                # Is the post already published?
                if post.is_published():
                        raise tornado.web.HTTPError(400, "Post is already published")
 
-               # XXX Check that we are only publishing our own posts
+               when = self.get_argument("when", None)
+               if when:
+                       when = dateutil.parser.parse(when)
 
                # Publish the post
                with self.db.transaction():
-                       post.publish()
+                       post.publish(when)
 
                self.redirect("/post/%s" % post.slug)
 
@@ -140,7 +163,7 @@ class ComposeHandler(auth.CacheMixin, base.BaseHandler):
        def post(self):
                title = self.get_argument("title")
                text  = self.get_argument("text")
-               tags  = self.get_argument("tags", None)
+               tags  = self.get_argument("tags", "").split(" ")
 
                with self.db.transaction():
                        post = self.backend.blog.create_post(title, text,
@@ -177,7 +200,7 @@ class EditHandler(auth.CacheMixin, base.BaseHandler):
                        post.update(
                                title = self.get_argument("title"),
                                text  = self.get_argument("text"),
-                               tags  = self.get_argument("tags").split(),
+                               tags  = self.get_argument("tags", "").split(" "),
                        )
 
                # Return to blog if the post is already published
@@ -189,6 +212,36 @@ class EditHandler(auth.CacheMixin, base.BaseHandler):
                self.redirect("/drafts")
 
 
+class DeleteHandler(auth.CacheMixin, base.BaseHandler):
+       @tornado.web.authenticated
+       def get(self, slug):
+               post = self.backend.blog.get_by_slug(slug, published=False)
+               if not post:
+                       raise tornado.web.HTTPError(404)
+
+               # Check if post is editable
+               if not post.is_editable(self.current_user):
+                       raise tornado.web.HTTPError(403, "%s cannot edit %s" % (self.current_user, post))
+
+               self.render("blog/delete.html", post=post)
+
+       @tornado.web.authenticated
+       def post(self, slug):
+               post = self.backend.blog.get_by_slug(slug, published=False)
+               if not post:
+                       raise tornado.web.HTTPError(404)
+
+               # Check if post is editable
+               if not post.is_editable(self.current_user):
+                       raise tornado.web.HTTPError(403, "%s cannot edit %s" % (self.current_user, post))
+
+               with self.db.transaction():
+                       post.delete()
+
+               # Return to drafts
+               self.redirect("/drafts")
+
+
 class HistoryNavigationModule(ui_modules.UIModule):
        def render(self):
                return self.render_string("blog/modules/history-navigation.html",